From cf2e9ccf212a8f439551a26c5c1ef57f1152b861 Mon Sep 17 00:00:00 2001 From: Sokurov Idar Date: Thu, 6 May 2021 00:41:20 +0300 Subject: [PATCH] Add get group tickets requests --- main/extra_func.py | 14 ++++++++++---- main/requester.py | 14 ++++++++++++-- main/views.py | 16 ++++++++++------ 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/main/extra_func.py b/main/extra_func.py index 44c4d58..e5c6259 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -62,10 +62,9 @@ def make_light_agent(user_profile: UserProfile, who_changes: User) -> None: else: ticket.assignee = None ticket.group_id = zenpy.buffer_group_id - - zenpy.admin.tickets.update(tickets.values) - - attempts, success = 5, False + if tickets: + zenpy.admin.tickets.update(tickets) + attempts, success = 20, False while not success and attempts != 0: try: update_role(user_profile, ROLES['light_agent']) @@ -95,6 +94,13 @@ def get_tickets_list(email): return TicketListRequester().get_tickets_list_for_user(zenpy.get_user(email)) +def get_tickets_list_for_group(group_name): + """ + Функция возвращает список неназначенных, нерешённых тикетов группы Zendesk + """ + return TicketListRequester().get_tickets_list_for_group(zenpy.get_group(group_name)) + + def update_profile(user_profile: UserProfile): """ Функция обновляет профиль пользователя в соответствии с текущим в Zendesk. diff --git a/main/requester.py b/main/requester.py index 35f81b6..468abee 100644 --- a/main/requester.py +++ b/main/requester.py @@ -13,15 +13,25 @@ class TicketListRequester: self.email += '/token' else: self.token_or_password = zenpy.credentials.get('password') + self.prefix = f'https://{zenpy.credentials.get("subdomain")}.zendesk.com/api/v2/' def get_tickets_list_for_user(self, zendesk_user): - url = f'https://ngenix1612197338.zendesk.com/api/v2/users/{zendesk_user.id}/tickets/assigned' + url = self.prefix + f'users/{zendesk_user.id}/tickets/assigned' return self._get_tickets(url) + def get_tickets_list_for_group(self, group): + url = self.prefix + '/tickets' + all_tickets = self._get_tickets(url) + tickets = list() + for ticket in all_tickets: + if (ticket.status != 'solved') and (ticket.group_id == group.id) and (ticket.assignee_id is None): + tickets.append(ticket) + return tickets + def _get_tickets(self, url): response = requests.get(url, auth=(self.email, self.token_or_password)) tickets = [] - if response.status_code!=200: + if response.status_code != 200: return None for ticket in response.json()['tickets']: tickets.append(Ticket(api=TicketApi, **ticket)) diff --git a/main/views.py b/main/views.py index 8432e33..f6d0a9a 100644 --- a/main/views.py +++ b/main/views.py @@ -20,13 +20,13 @@ from django_registration.views import RegistrationView from rest_framework import viewsets from rest_framework.response import Response -from access_controller.settings import DEFAULT_FROM_EMAIL, ZENDESK_ROLES, ZENDESK_MAX_AGENTS +from access_controller.settings import DEFAULT_FROM_EMAIL, ZENDESK_ROLES, ZENDESK_MAX_AGENTS, ZENDESK_GROUPS from main.extra_func import check_user_exist, update_profile, get_user_organization, \ make_engineer, make_light_agent, get_users_list, update_users_in_model, count_users, \ - log, set_session_params_for_work_page + log, set_session_params_for_work_page, get_tickets_list_for_group from .statistic_data import StatisticData from main.zendesk_admin import zenpy -from .requester import TicketListRequester +from main.requester import TicketListRequester from main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm from main.serializers import ProfileSerializer, ZendeskUserSerializer from .models import UserProfile @@ -229,15 +229,19 @@ def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect: def work_get_tickets(request): zenpy_user = zenpy.get_user(request.user.email) if zenpy_user.role == 'admin' or zenpy_user.custom_role_id == ZENDESK_ROLES['engineer']: - tickets = [ticket for ticket in zenpy.admin.search(type="ticket") if - ticket.group.name == 'Сменная группа' and ticket.assignee is None] + tickets = get_tickets_list_for_group(ZENDESK_GROUPS['buffer']) + assigned_tickets = [] count = 0 for i in range(len(tickets)): if i == int(request.GET.get('count_tickets')): + if assigned_tickets: + zenpy.admin.tickets.update(assigned_tickets) return set_session_params_for_work_page(request, count) tickets[i].assignee = zenpy_user + assigned_tickets.append(tickets[i]) count += 1 - zenpy.admin.tickets.update(tickets) + if assigned_tickets: + zenpy.admin.tickets.update(assigned_tickets) return set_session_params_for_work_page(request, count) return set_session_params_for_work_page(request, is_confirm=False)