From 5ec2407211bea13b147c0d24b00036914ca388d0 Mon Sep 17 00:00:00 2001 From: Sokurov Idar Date: Wed, 17 Mar 2021 09:35:15 +0300 Subject: [PATCH] Add ticket unassignment --- access_controller/settings.py | 2 +- main/extra_func.py | 35 +++++++++++++++++++++++------------ main/models.py | 1 + main/views.py | 12 ++++++------ 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/access_controller/settings.py b/access_controller/settings.py index 953d2f6..3a2d7df 100644 --- a/access_controller/settings.py +++ b/access_controller/settings.py @@ -187,6 +187,6 @@ ZENDESK_GROUPS = { 'employees': 'Поддержка', 'buffer': 'Сменная группа', } - +SOLVED_TICKETS_EMAIL = 'd.krikov@ngenix.net' ONE_DAY = 12 # Количество часов в 1 рабочем дне diff --git a/main/extra_func.py b/main/extra_func.py index 0e0c0ed..b601a03 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -2,10 +2,11 @@ import os from datetime import timedelta, datetime, date from django.contrib.auth.models import User +from django.utils import timezone from zenpy import Zenpy from zenpy.lib.exception import APIException -from access_controller.settings import ZENDESK_ROLES as ROLES, ONE_DAY, ZENDESK_GROUPS +from access_controller.settings import ZENDESK_ROLES as ROLES, ONE_DAY, ZENDESK_GROUPS, SOLVED_TICKETS_EMAIL from main.models import UserProfile, RoleChangeLogs, UnassignedTicket, UnassignedTicketStatus @@ -143,17 +144,18 @@ def make_light_agent(user_profile: UserProfile, who_changes: User) -> UserProfil """ Функция **make_light_agent** устанавливапет пользователю роль легкого агента. """ - tickets = get_ticket_list(user_profile.user.email) + tickets = get_tickets_list(user_profile.user.email) for ticket in tickets: - if ticket.status=='solved': - continue UnassignedTicket.objects.create( assignee=user_profile.user, ticket_id=ticket.id, - status=UnassignedTicketStatus.UNASSIGNED + status=UnassignedTicketStatus.SOLVED if ticket.status == 'solved' else UnassignedTicketStatus.UNASSIGNED ) - ticket.assignee = None - ticket.group = ZendeskAdmin().get_group(ZENDESK_GROUPS['buffer']) + if ticket.status == 'solved': + ticket.assignee = ZendeskAdmin().get_user(SOLVED_TICKETS_EMAIL) + else: + ticket.assignee = None + ticket.group = ZendeskAdmin().get_group(ZENDESK_GROUPS['buffer']) ZendeskAdmin().admin.tickets.update(ticket) RoleChangeLogs.objects.create( @@ -167,7 +169,7 @@ def make_light_agent(user_profile: UserProfile, who_changes: User) -> UserProfil def get_users_list() -> list: """ - Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации. + Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации. """ zendesk = ZendeskAdmin() admin = zendesk.get_user(zendesk.email) @@ -175,7 +177,10 @@ def get_users_list() -> list: return zendesk.admin.organizations.users(org) -def get_ticket_list(email): +def get_tickets_list(email): + """ + Функция возвращает список тикетов пользователя Zendesk + """ return ZendeskAdmin().admin.search(assignee=email, type='ticket') @@ -381,9 +386,15 @@ class StatisticData: if last_log.new_role == ROLES['engineer']: self.fill_daterange(last_log.change_time.date() + timedelta(days=1), self.end_date + timedelta(days=1)) - self.statistic[last_log.change_time.date()] += (timedelta(days=1) - get_timedelta(last_log)).total_seconds() - if self.end_date == datetime.now().date(): - self.statistic[self.end_date] = get_timedelta(None, datetime.now().time()).total_seconds() + if last_log.change_time.date() == timezone.now().date(): + self.statistic[last_log.change_time.date()] += ( + get_timedelta(None, timezone.now().time()) - get_timedelta(last_log) + ).total_seconds() + else: + self.statistic[last_log.change_time.date()] += ( + timedelta(days=1) - get_timedelta(last_log)).total_seconds() + if self.end_date == timezone.now().date(): + self.statistic[self.end_date] = get_timedelta(None, timezone.now().time()).total_seconds() for log_index in range(len(self.data) - 1): if self.data[log_index].new_role == ROLES['engineer']: diff --git a/main/models.py b/main/models.py index b202977..7bd76bb 100644 --- a/main/models.py +++ b/main/models.py @@ -47,6 +47,7 @@ class UnassignedTicketStatus(models.IntegerChoices): RESTORED = 1, 'Авторство восстановлено' NOT_FOUND = 2, 'Пока нас не было, тикет испарился из буферной группы. Дополнительные действия не требуются' CLOSED = 3, 'Тикет уже был закрыт. Дополнительные действия не требуются' + SOLVED = 4, 'Тикет решён. Записан на пользователя с почтой SOLVED_TICKETS_EMAIL' class UnassignedTicket(models.Model): diff --git a/main/views.py b/main/views.py index 221e693..d014807 100644 --- a/main/views.py +++ b/main/views.py @@ -20,7 +20,7 @@ from zenpy.lib.api_objects import User as ZenpyUser from access_controller.settings import EMAIL_HOST_USER, ZENDESK_ROLES, ZENDESK_GROUPS from main.extra_func import check_user_exist, update_profile, get_user_organization, make_engineer, make_light_agent, \ - get_users_list, StatisticData, get_ticket_list, ZendeskAdmin + get_users_list, StatisticData, get_tickets_list, ZendeskAdmin from main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm from .models import UserProfile, UnassignedTicket, UnassignedTicketStatus @@ -181,9 +181,9 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView): self.make_light_agents(form.cleaned_data['users']) return super().form_valid(form) - @staticmethod - def make_engineers(users): - [make_engineer(user) for user in users] + def make_engineers(self, users): + for user in users: + make_engineer(user, self.request.user) def make_light_agents(self, users): for user in users: @@ -227,8 +227,8 @@ class CustomLoginView(LoginView): @login_required() def statistic_page(request): - if not request.user.is_superuser: - return redirect('index') + if not request.user.has_perm('main.has_control_access'): + raise PermissionDenied context = { 'pagename': 'страница статистики', 'errors': list(),