浏览代码

handler for student reg

ShariX Developer 2 月之前
父节点
当前提交
833b95961d
共有 2 个文件被更改,包括 152 次插入9 次删除
  1. 59 7
      handlers/classes/Ticket.py
  2. 93 2
      handlers/open_student_handler.py

+ 59 - 7
handlers/classes/Ticket.py

@@ -1,17 +1,69 @@
+from datetime import datetime
+
 class Ticket(object):
     def __init__(
             self,
             id,
-            name,
-            group
+            status,
+            ticket_type,
+            title,
+            created_at,
+            updated_at,
+            due_date,
+            priority,
+            created_by,
+            assigned_to=None,
+            note=None
     ):
         self.id = id
-        self.name = name
-        self.group = group
+        self.status = status
+        self.ticket_type = ticket_type
+        self.title = title
+        self.created_at = created_at
+        self.updated_at = updated_at
+        self.due_date = due_date
+        self.priority = priority
+        self.created_by = created_by
+        self.assigned_to = assigned_to
+        self.note = note
 
     def __str__(self):
-        return "{0}, {1}, {2},\n".format(
+        return "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}".format(
             self.id,
-            self.name,
-            self.group
+            self.status,
+            self.ticket_type,
+            self.title,
+            self.created_at,
+            self.updated_at,
+            self.due_date,
+            self.priority,
+            self.created_by,
+            self.assigned_to
         )
+
+    # Method to convert the object to a dictionary, if needed for JSON responses or serialization
+    def to_dict(self):
+        return {
+            "id": self.id,
+            "status": self.status,
+            "ticket_type": self.ticket_type,
+            "title": self.title,
+            "created_at": self.created_at,
+            "updated_at": self.updated_at,
+            "due_date": self.due_date,
+            "priority": self.priority,
+            "created_by": self.created_by,
+            "assigned_to": self.assigned_to,
+            "note": self.note
+        }
+
+    def update_status(self, new_status):
+        self.status = new_status
+        self.updated_at = datetime.utcnow().isoformat()
+
+    def assign_to(self, user_id):
+        self.assigned_to = user_id
+
+    def get_summary(self):
+        return f"Ticket '{self.title}' (ID: {self.id}) - Status: {self.status}, Priority: {self.priority}"
+

+ 93 - 2
handlers/open_student_handler.py

@@ -6,7 +6,7 @@ from BotClass import JabberBot
 import json
 #раскомментировать, когда перейдем на разные пароли
 import hashlib
-from datetime import datetime
+from datetime import datetime, timedelta
 
 import time
 import threading
@@ -62,12 +62,103 @@ def open_student_handler_wait(period,localtask):
     bot.proceed_status(proceed_to[0],localtask)
     bot.bot_log(botname+" "+str(datetime.now())+" "+"Тикет подождал и возвращен в очередь\n")
 
-def oopen_student_handler_process(localtask):
+def open_student_handler_process(localtask):
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
 
     ticket = jsreq.jsonToTicket(localtask)
+    
+    if ticket.status == "Accepted":
+        all_systems_registered = True
+        
+        if all_systems_registered:
+            user = ticket.created_by
+            if register_user_in_group():
+                send_successful_registration_notification(ticket)
+            else:
+                all_systems_registered = False
+                continue
+        
+        # Проверяем, прошла ли неделя с момента создания заявки
+        if datetime.now() - ticket.created_at >= timedelta(weeks=1):
+            # Если неделя прошла и не все галочки стоят, отправляем уведомление о частичной регистрации
+            if not all_systems_registered:
+                send_partial_registration_notification(ticket)
+            # Закрываем заявку
+            close_ticket(ticket)
+        
+        # Если все галочки стоят, отправляем уведомление об успешной регистрации во всех системах
+        if all_systems_registered():
+            send_all_systems_success_notification(ticket)
+
+    elif ticket.status == "Declined":
+        # Отправляем уведомление о том, что заявка отклонена
+        send_declined_notification(ticket):
+        # Удаляем запись в таблице Practice
+        remove_from_practice(ticket):
+            
+        # Заявка уходит в архив через неделю
+        if datetime.now() - ticket.created_at >= timedelta(weeks=1):
+            archive_ticket(ticket)
+
     print(ticket)
 
+def register_user_in_group(user_id):
+    url = config.url+f"api/v1/platform/sharix-users/{user_id}/"
+    
+    payload = {
+        "groups": [101]
+    }
+    
+    headers = {
+        "Content-Type": "application/json",
+    }
+    
+    try:
+        response = requests.put(url, data=json.dumps(payload), headers=headers)
+        
+        if response.status_code == 200:
+            print("Группа успешно добавлена пользователю.")
+            return True
+        else:
+            print(f"Ошибка: {response.status_code} - {response.text}")
+            return False
+    
+    except requests.exceptions.RequestException as e:
+        print(f"Ошибка запроса: {e}")
+        return False
+
+
+def send_all_systems_success_notification(ticket):
+    
+def send_successful_registration_notification(ticket):
+
+def send_partial_registration_notification(ticket):
+    
+def send_declined_notification(ticket):
+    
+    
+def close_ticket(ticket):
+
+def archive_ticket(ticket):
+    
+def remove_from_practice(ticket):
+    url = config.url+f"/{ticket.id}/"
+    
+    headers = {
+        "Content-Type": "application/json",
+    }
+    
+    try:
+        response = requests.delete(url, headers=headers)
+        
+        if response.status_code == 204:
+            print(f"Тикет с ID {ticket.id} успешно удалён.")
+        else:
+            print(f"Ошибка: {response.status_code} - {response.text}")
+    
+    except requests.exceptions.RequestException as e:
+        print(f"Ошибка запроса: {e}")
+
 
 def open_student_handler_assigned(localtask):
     bot.proceed_status(proceed_to[1],localtask)