Browse Source

Merge branch 'unstable' of https://git.sharix-app.org/ShariX_Open/sharix-open-backend into unstable

System Administrator 1 year ago
parent
commit
ddc071486a

+ 20 - 4
handlers/jsonAndRequest.py

@@ -62,20 +62,31 @@ https://wiki.sharix-app.org/doku.php/open/tech/dev/sharix_open_-_primery_json
 
 #надо адаптировать класс к новому формату JSON
 class Order(object):
-    def __init__(self, ticket, state, id_metaservice, is_global, is_visible, service, service_type, time_placed, time_start=None, time_start_predicted=None, time_finish_predicted=None, time_start_real=None, time_finish_real=None, order_place_start=None, order_place_start_gps=None, order_place_start_real=None, order_place_start_real_gps=None, order_place_finish_predicted=None, order_place_finish_predicted_gps=None, order_place_finish_real=None, order_place_finish_real_gps=None, predicted_price=None, real_price=None, payment_transaction_id=None, rating_id=None, provider=None, provider_screen_name=None, receiver=None, receiver_screen_name=None, client_id=None, resource_id=None):
+    def __init__(self, order_synced, ticket, status, title, note, due_date, id_metaservice, is_global, is_visible, service, service_type, status_changed_date, time_placed, time_start=None, time_start_predicted=None, time_finish_predicted=None, time_start_real=None, time_finish_real=None, order_place_type=None, order_place_start=None, order_place_start_gps=None, order_place_start_real=None, order_place_start_real_gps=None, order_place_finish_predicted=None, order_place_finish_predicted_gps=None, order_place_finish_real=None, order_place_finish_real_gps=None, predicted_price=None, real_price=None, payment_transaction_id=None, rating_id=None, provider=None, provider_screen_name=None, receiver=None, receiver_screen_name=None, client_id=None, resource_id=None, attempts=None, asap=None):
+        self.order_synced = order_synced
+
         self.ticket = ticket
-        self.state = state
+        self.status = status
+
+        self.title = title
+        self.note = note
+        self.due_date = due_date
+
         self.id_metaservice = id_metaservice
         self.is_global = is_global
         self.is_visible = is_visible
         self.service = service
         self.service_type = service_type
+
+        self.status_changed_date = status_changed_date
         self.time_placed = time_placed
         self.time_start = time_start
         self.time_start_predicted = time_start_predicted
         self.time_finish_predicted = time_finish_predicted
         self.time_start_real = time_start_real
         self.time_finish_real = time_finish_real
+
+        self.order_place_type =order_place_type
         self.order_place_start = order_place_start
         self.order_place_start_gps = order_place_start_gps
         self.order_place_start_real = order_place_start_real
@@ -84,20 +95,25 @@ class Order(object):
         self.order_place_finish_predicted_gps = order_place_finish_predicted_gps
         self.order_place_finish_real = order_place_finish_real
         self.order_place_finish_real_gps = order_place_finish_real_gps
+
         self.predicted_price = predicted_price
         self.real_price = real_price
+
         self.payment_transaction_id = payment_transaction_id
         self.rating_id = rating_id
+
         self.provider = provider
         self.provider_screen_name = provider_screen_name
         self.receiver = receiver
         self.receiver_screen_name = receiver_screen_name
         self.client_id = client_id
         self.resource_id = resource_id
-
+        self.attempts = attempts
+        self.asap = asap
         #доделать до конца по аналогии с закоммиченным json
     def __str__(self):
-        return "{0}, {1}, {2}, {3}, {4}, {5}, {6},\n{7}, {8}, {9}, {10}, {11}, {12},\n{13}, {14}, {15}, {16}, {17}, {18}, {19}, {20},\n{21}, {22}, {23}, {24},\n{25}, {26}, {27}, {28}, {29}, {30}".format(self.ticket, self.state, self.id_metaservice, self.is_global, self.is_visible, self.service, self.service_type, self.time_placed, self.time_start, self.time_start_predicted, self.time_finish_predicted, self.time_start_real, self.time_finish_real, self.order_place_start, self.order_place_start_gps, self.order_place_start_real, self.order_place_start_real_gps, self.order_place_finish_predicted, self.order_place_finish_predicted_gps, self.order_place_finish_real, self.order_place_finish_real_gps, self.predicted_price, self.real_price, self.payment_transaction_id, self.rating_id,  self.provider, self.provider_screen_name, self.receiver, self.receiver_screen_name, self.client_id, self.resource_id)
+        return "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}, {28}, {29}, {30}, {31}, {32}".format(self.order_synced, self.ticket, self.status, self.title, self.note, self.due_date, self.id_metaservice, self.is_global, self.is_visible, self.service, self.service_type, self.status_changed_date, self.time_placed, self.time_start, self.time_start_predicted, self.time_finish_predicted, self.time_start_real, self.time_finish_real, self.order_place_type, self.order_place_start, self.order_place_start_gps, self.order_place_start_real, self.order_place_start_real_gps, self.order_place_finish_predicted, self.order_place_finish_predicted_gps, self.order_place_finish_real, self.order_place_finish_real_gps, self.predicted_price, self.real_price, self.payment_transaction_id, self.rating_id, self.provider, self.provider_screen_name, self.receiver, self.receiver_screen_name, self.client_id, self.resource_id)
+
         #\n добавляете в местах с пустой строкой в шаблоне
         
 

+ 121 - 0
handlers/open_accessrequest_accepted.py

@@ -0,0 +1,121 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_accessrequest_accepted"
+
+operating_status=321
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_declined@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_accessrequest_accepted_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_accessrequest_accepted_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    send_data(localtask)
+
+# Пока не уверен
+def send_data(localtask):
+    # Заглушка отправка данных в БД
+    # ...
+    return True
+
+def open_accessrequest_accepted():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_accessrequest_accepted_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_accessrequest_accepted)
+
+
+

+ 123 - 0
handlers/open_accessrequest_pending.py

@@ -0,0 +1,123 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_accessrequest_pending"
+
+operating_status=320
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_declined@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_accessrequest_pending_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[1],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ перенаправлен\n")
+
+def open_accessrequest_pending_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    push_notifications(localtask)
+    open_accessrequest_pending_wait(100,localtask)
+
+
+# Пока не уверен
+def push_notifications(localtask):
+    # Отправка уведомлений
+    # ...
+    return True
+
+def open_accessrequest_pending():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_accessrequest_pending_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_accessrequest_pending)
+
+
+

+ 121 - 0
handlers/open_negrequest_accepted.py

@@ -0,0 +1,121 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_negrequest_accepted"
+
+operating_status=321
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_declined@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_negrequest_accepted_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_negrequest_accepted_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    send_data(localtask)
+
+# Пока не уверен
+def send_data(localtask):
+    # Заглушка отправка данных в БД
+    # ...
+    return True
+
+def open_negrequest_accepted():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_negrequest_accepted_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_negrequest_accepted)
+
+
+

+ 168 - 0
handlers/open_servicerequest_accepted.py

@@ -0,0 +1,168 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_accepted"
+
+operating_status=221
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_servicerequest_declined@ej.sharix-app.org", "open_servicerequest_booked@ej.sharix-app.org", "open_servicerequest_assigned@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_accepted_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_accepted_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+
+    if order.time_start_predicted < 100:
+        # Заглушка. Проверка может ли заказ быть переназначен
+        if True:
+            # Заглушка. Сбросить пометку предзаказа
+            # ...
+
+
+            bot.proceed_status(proceed_to[2],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+        else:
+            bot.proceed_status(proceed_to[1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    else:
+        # Заглушка. Обработана заявка на устанавление взаимоотношений?
+        if True:
+            # Заглушка. Взаимоотношения установлены ?
+            if True:
+                # Заглушка. Отобразить в предварительных заказах исполнителям.
+                send_message()
+                # Заглушка. Исполнитель откликнулся на заказ?
+                if True:
+                    # У пользователя стоит ручной выбор из нескольких исполнителей?
+                    if True:
+                        # Заглушка создать дочернюю локальную заявку с информацией от исполнителя
+                        create_ticket()
+                        # Заглушка отобразить в предварительных клиенту
+                        send_message()
+
+                        # Заглушка. Клиент выбрал конкретную заявку?
+                        if True:
+                            # Заглушка. обновление локальной копии. Замена основной
+                            pass
+                        else:
+                            bot.proceed_status(proceed_to[3],localtask)
+                            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+                    else:
+                        bot.proceed_status(proceed_to[3],localtask)
+                        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+                else:
+                    #Заглушка. Заказ ждет очередную итерацию обработки списка
+                    open_servicerequest_accepted_process(localtask)
+            else:
+                bot.proceed_status(proceed_to[1],localtask)
+                bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+        else:
+            #Заглушка. Заказ ждет очередную итерацию обработки списка
+            open_servicerequest_accepted_process(localtask)
+            pass
+    
+
+def send_message():
+    pass
+
+def create_ticket():
+    pass
+
+def open_servicerequest_accepted():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_accepted_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_accepted)

+ 145 - 0
handlers/open_servicerequest_assigned.py

@@ -0,0 +1,145 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_assigned"
+
+operating_status=212
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_servicerequest_accepted@ej.sharix-app.org", "open_servicerequest_declined@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_assigned_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_assigned_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+
+    # Заглушка проверка бронирования без подтверждения
+    if True:
+        bot.proceed_status(proceed_to[0],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    else:
+        if order.asap:
+            # Заглушка. Отображение ответственному в приложении показывается заказ
+            send_message()
+            check_order(order)
+        else:
+            # Заглушка. Отображение в предварительных заказах назначенному исполнителю
+            send_message()
+            # Заглушка
+            if order.time_start_predicted > 100:
+                bot.proceed_status(proceed_to[0],localtask)
+                bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+                return
+            # Заглушка. Отображение ответственному в приложении показывается заказ
+            send_message()
+            check_order(order)
+
+def check_order(localtask):
+    # Заглушка. Заказ принят?
+    if localtask:
+        bot.proceed_status(proceed_to[1],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    else:
+        bot.proceed_status(proceed_to[2],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+
+def send_message():
+    pass
+
+def open_servicerequest_assigned():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_assigned_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_assigned)

+ 6 - 6
handlers/open_servicerequest_booked.py

@@ -17,8 +17,8 @@ import jsonAndRequest as jsreq
 global tasklist
 
 botname="open_servicerequest_booked"
-# Пока не знаю какой
-operating_status=210
+
+operating_status=211
 JID=botname+"@"+config.JSERVER
 PORT=config.PORT
 
@@ -69,7 +69,7 @@ def open_servicerequest_booked_process(localtask):
     #Пока заглушка
     balance = get_balance(order.client_id)
 
-    # Какой тип цены лучше использовать?
+    
     price = order.real_price
 
     if balance > price:
@@ -79,7 +79,7 @@ def open_servicerequest_booked_process(localtask):
             bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ успешно обработан\n")
         else:
             # Проверка срочности заказа
-            if True:
+            if order.asap:
                 #Заглушка назначение исполнителя системой
                 if set_provider(order.ticket, order.provider) == "success":
                     bot.proceed_status(proceed_to[0], localtask)
@@ -147,8 +147,8 @@ def open_servicerequest_booked():
         #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
         #     t1.start()
 
-        #Пока так
-        open_servicerequest_booked_process(localtask)
+        t1=threading.Thread(target=open_servicerequest_booked_process, args=(localtask))
+        t1.start()
 
         #если никакие обработчики не подошли - отправляем обратно в очередь
         bot.proceed_status(proceed_to[0],localtask)

+ 129 - 0
handlers/open_servicerequest_declined.py

@@ -0,0 +1,129 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_declined"
+
+operating_status=229
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_servicerequest_cancelled@ej.sharix-app.org", "open_servicerequest_booked@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_declined_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_declined_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+
+    # Заглушка с счетчиком
+
+    # Заказ может быть выполнен другим
+    if True:
+        bot.proceed_status(proceed_to[1],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    else: 
+        # Заглушка. Сброс пометки что заказ на основного водителя
+        bot.proceed_status(proceed_to[2],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+
+def send_message():
+    pass
+
+def create_ticket():
+    pass
+
+def open_servicerequest_declined():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_declined_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_declined)

+ 138 - 0
handlers/open_servicerequest_done.py

@@ -0,0 +1,138 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_done"
+
+operating_status=239
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_new@ej.sharix-app.org", "open_servicerequest_closed@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+statuses = ['DONE', 'WONTFIX', 'DUBLICATE']
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_done_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_done_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+    status = order.status
+
+    # Заглушка + Оплата
+    create_ticket(localtask)
+    # отправка формы
+    send_message()
+    
+    # Заглушка с таймером
+
+    
+    bot.proceed_status(proceed_to[2],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+
+        
+    
+# Заглушка
+def send_message(localtask):
+    pass
+
+
+def create_ticket(localtask):
+    bot.proceed_status(proceed_to[1],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    pass
+
+def open_servicerequest_done():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_done_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_done)

+ 133 - 0
handlers/open_servicerequest_forcemajeure.py

@@ -0,0 +1,133 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_forcemajeure"
+
+operating_status=239
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_new@ej.sharix-app.org", "open_servicerequest_declined@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+statuses = ['DONE', 'WONTFIX', 'DUBLICATE']
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_forcemajeure_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_forcemajeure_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+    status = order.status
+
+    # Заглушка
+    create_ticket(localtask)
+    # ???
+    if order.status in statuses:
+        order.status = status
+    else:
+        bot.proceed_status(proceed_to[0],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+        
+    
+    
+
+
+def create_ticket(localtask):
+    bot.proceed_status(proceed_to[1],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    pass
+
+def open_servicerequest_forcemajeure():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_forcemajeure_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_forcemajeure)

+ 135 - 0
handlers/open_servicerequest_pending.py

@@ -0,0 +1,135 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_pending"
+
+operating_status=220
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_servicerequest_prestart@ej.sharix-app.org", "open_servicerequest_prestart@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_pending_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_pending_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+
+    # Заглушка. Может ли что-то пойти не так
+    if True:
+        if order.time_start_predicted < 100:
+            bot.proceed_status(proceed_to[0],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+            return
+        # Заглушка активная ли стадия заказа
+        if order.status == "active":
+            bot.proceed_status(proceed_to[1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+        else:
+            bot.proceed_status(proceed_to[2],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+            # Заглушка на получение ответа
+            pass
+    else:
+        bot.proceed_status(proceed_to[1],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+
+
+def send_message():
+    pass
+
+def open_servicerequest_pending():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_pending_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_pending)

+ 135 - 0
handlers/open_servicerequest_preforcemajeure.py

@@ -0,0 +1,135 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_preforcemajeure"
+
+operating_status=239
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_new@ej.sharix-app.org", "open_servicerequest_declined@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+statuses = ['DONE', 'WONTFIX', 'DUBLICATE']
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_preforcemajeure_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_preforcemajeure_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+    status = order.status
+
+    # Заглушка
+    create_ticket(localtask)
+    # ???
+    if order.status in statuses:
+        order.status = status
+    else:
+        
+        # Заглушка с таймером
+        bot.proceed_status(proceed_to[0],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+        
+    
+    
+
+
+def create_ticket(localtask):
+    bot.proceed_status(proceed_to[1],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    pass
+
+def open_servicerequest_preforcemajeure():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_preforcemajeure_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_preforcemajeure)

+ 120 - 0
handlers/open_servicerequest_prestart.py

@@ -0,0 +1,120 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_prestart"
+
+operating_status=222
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_servicerequest_preforcemajeure@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_prestart_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_prestart_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+
+    if order.asap:
+        bot.proceed_status(proceed_to[1],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    else:
+        bot.proceed_status(proceed_to[0],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+    
+
+def open_servicerequest_prestart():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_prestart_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_prestart)

+ 133 - 0
handlers/open_servicerequest_process.py

@@ -0,0 +1,133 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_process"
+
+operating_status=231
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_servicerequest_preforcemajeure@ej.sharix-app.org", "open_servicerequest_declined@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_process_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+
+def open_servicerequest_process_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+    
+    order = jsreq.jsonToOrder(localtask)
+
+    # Заглушка проверка баланса
+    if check_balance() >= order.real_price:
+        # Заглушка. Расчетное время прибытия на следующую точку превышаетзапланированное на Х
+        if True:
+            bot.proceed_status(proceed_to[1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+        else:
+            bot.proceed_status(proceed_to[0],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
+    else:
+        # Оплата
+
+        bot.proceed_status(proceed_to[1],localtask)
+        bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
+        
+        pass
+
+
+def check_balance():
+    pass
+
+def open_servicerequest_process():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_servicerequest_process_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_process_process)

+ 130 - 0
handlers/open_strequest_assigned.py

@@ -0,0 +1,130 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_strequest_assigned"
+
+operating_status=121
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_wontfix@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_strequest_assigned_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и возвращен в очередь\n")
+
+def open_strequest_assigned_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    order = jsreq.jsonToOrder(localtask)
+
+    # Проверяем наличие маркера обработчика
+    if order.marker:
+        # Вызываем алгоритм обработки в соответствии с маркером
+        process_with_handler(order)
+    else:
+        #Заглушка Если таймер неактивен, отправляем в st_request_wontfix
+        if True:
+            bot.proceed_status(proceed_to[1],localtask)
+
+# Пока не уверен
+def process_with_handler(order):
+    # Алгоритм назначения исполнителя
+    # ...
+    return True
+
+def open_strequest_assigned():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_strequest_assigned_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_strequest_assigned)
+
+
+

+ 132 - 0
handlers/open_strequest_done.py

@@ -0,0 +1,132 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_strequest_done"
+
+operating_status=149
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_closed@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_strequest_done_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и возвращен в очередь\n")
+
+def open_strequest_done_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    order = jsreq.jsonToOrder(localtask)
+    idle_value = idle_value - 1
+
+    if idle_value < 1:
+        bot.proceed_status(proceed_to[1],localtask)
+    else:
+        push_notifications(order)
+        open_strequest_done_wait(100,localtask)
+    # Затычка
+    if True:
+        open_strequest_done_process(localtask)
+
+
+# Пока не уверен
+def push_notifications(order):
+    # Отправка уведомлений
+    # ...
+    return True
+
+def open_strequest_done():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_strequest_done_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_strequest_done)
+
+
+

+ 131 - 0
handlers/open_strequest_dublicate.py

@@ -0,0 +1,131 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_strequest_dublicate"
+
+operating_status=149
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_closed@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_strequest_dublicate_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и возвращен в очередь\n")
+
+def open_strequest_dublicate_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    order = jsreq.jsonToOrder(localtask)
+    idle_value = idle_value - 1
+
+    if idle_value < 1:
+        bot.proceed_status(proceed_to[1],localtask)
+    else:
+        push_notifications(order)
+        open_strequest_dublicate_wait(100,localtask)
+    # Затычка
+    if True:
+        open_strequest_dublicate_process(localtask)
+
+# Пока не уверен
+def push_notifications(order):
+    # Отправка уведомлений
+    # ...
+    return True
+
+def open_strequest_dublicate():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_strequest_dublicate_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_strequest_dublicate)
+
+
+

+ 130 - 0
handlers/open_strequest_inprocess.py

@@ -0,0 +1,130 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_strequest_inprocess"
+
+operating_status=131
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_wontfix@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_strequest_inprocess_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и возвращен в очередь\n")
+
+def open_strequest_inprocess_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    order = jsreq.jsonToOrder(localtask)
+
+    # Проверяем наличие маркера обработчика
+    if order.marker:
+        # Вызываем алгоритм обработки в соответствии с маркером
+        process_with_handler(order)
+    else:
+        #Заглушка Если таймер неактивен, отправляем в st_request_wontfix
+        if True:
+            bot.proceed_status(proceed_to[1],localtask)
+
+# Пока не уверен
+def process_with_handler(order):
+    # Алгоритм назначения исполнителя
+    # ...
+    return True
+
+def open_strequest_inprocess():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_strequest_inprocess_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_strequest_inprocess)
+
+
+

+ 147 - 0
handlers/open_strequest_new.py

@@ -0,0 +1,147 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_strequest_new"
+
+operating_status=111
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_assigned@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_booked_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и возвращен в очередь\n")
+
+def open_stequest_new_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    order = jsreq.jsonToOrder(localtask)
+
+    if order.provider:
+        st_request_assigned(order)
+    else:
+        # Что такое маркер обработчика?
+        if not order.marker:
+            add_marker(order)
+            assign_executor(localtask)
+        
+        if assign_executor(order):
+            st_request_assigned(localtask)
+        else:
+            # Проверка таймера
+            if True:
+                if assign_executor(order):
+                    st_request_assigned(localtask)
+            else:
+                add_marker(order)
+                assign_executor(order)
+
+def st_request_assigned(localtask):
+    bot.proceed_status(proceed_to[1],localtask)
+
+# Пока не уверен
+def assign_executor(order):
+    # Алгоритм назначения исполнителя
+    # ...
+    return True
+
+def add_marker(order):
+    # 
+    pass
+
+def open_servicerequest_booked():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_stequest_new_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_booked)
+
+
+

+ 147 - 0
handlers/open_strequest_reopened.py

@@ -0,0 +1,147 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_strequest_reopened"
+
+operating_status=110
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_assigned@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_stequest_reopened_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и возвращен в очередь\n")
+
+def open_stequest_reopened_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    order = jsreq.jsonToOrder(localtask)
+
+    if order.provider:
+        st_request_assigned(order)
+    else:
+        # Что такое маркер обработчика?
+        if not order.marker:
+            add_marker(order)
+            assign_executor(localtask)
+        
+        if assign_executor(order):
+            st_request_assigned(localtask)
+        else:
+            # Проверка таймера
+            if True:
+                if assign_executor(order):
+                    st_request_assigned(localtask)
+            else:
+                add_marker(order)
+                assign_executor(order)
+
+def st_request_assigned(localtask):
+    bot.proceed_status(proceed_to[1],localtask)
+
+# Пока не уверен
+def assign_executor(order):
+    # Алгоритм назначения исполнителя
+    # ...
+    return True
+
+def add_marker(order):
+    # 
+    pass
+
+def open_stequest_reopened():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_stequest_reopened_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_stequest_reopened)
+
+
+

+ 135 - 0
handlers/open_strequest_wontfix.py

@@ -0,0 +1,135 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_strequest_wontfix"
+
+operating_status=149
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=[botname, "open_strequest_closed@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_strequest_wontfix_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и возвращен в очередь\n")
+
+def open_strequest_wontfix_process(localtask):
+    bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
+
+    order = jsreq.jsonToOrder(localtask)
+    idle_value = idle_value - 1
+
+    if idle_value < 1:
+        st_request_wontfix(localtask)
+    else:
+        push_notifications(order)
+        open_strequest_wontfix_wait(100,localtask)
+    # Затычка
+    if True:
+        open_strequest_wontfix_process(localtask)
+
+
+def st_request_wontfix(localtask):
+    bot.proceed_status(proceed_to[1],localtask)
+
+# Пока не уверен
+def push_notifications(order):
+    # Отправка уведомлений
+    # ...
+    return True
+
+def open_strequest_wontfix():
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        print("EACH TASKLIST", tasklist)
+
+        if (localtask.status!=operating_status):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            continue
+
+        # if (localtask.title!="10"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
+        #     t1.start()
+
+        # if (localtask.title=="101"):
+        #     t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
+        #     t1.start()
+
+        t1=threading.Thread(target=open_strequest_wontfix_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_strequest_wontfix)
+
+
+