Add ticket unassignment

This commit is contained in:
Sokurov Idar 2021-03-17 09:35:15 +03:00
parent 0cc788c039
commit 5ec2407211
4 changed files with 31 additions and 19 deletions

View File

@ -187,6 +187,6 @@ ZENDESK_GROUPS = {
'employees': 'Поддержка', 'employees': 'Поддержка',
'buffer': 'Сменная группа', 'buffer': 'Сменная группа',
} }
SOLVED_TICKETS_EMAIL = 'd.krikov@ngenix.net'
ONE_DAY = 12 # Количество часов в 1 рабочем дне ONE_DAY = 12 # Количество часов в 1 рабочем дне

View File

@ -2,10 +2,11 @@ import os
from datetime import timedelta, datetime, date from datetime import timedelta, datetime, date
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils import timezone
from zenpy import Zenpy from zenpy import Zenpy
from zenpy.lib.exception import APIException 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 from main.models import UserProfile, RoleChangeLogs, UnassignedTicket, UnassignedTicketStatus
@ -143,15 +144,16 @@ def make_light_agent(user_profile: UserProfile, who_changes: User) -> UserProfil
""" """
Функция **make_light_agent** устанавливапет пользователю роль легкого агента. Функция **make_light_agent** устанавливапет пользователю роль легкого агента.
""" """
tickets = get_ticket_list(user_profile.user.email) tickets = get_tickets_list(user_profile.user.email)
for ticket in tickets: for ticket in tickets:
if ticket.status=='solved':
continue
UnassignedTicket.objects.create( UnassignedTicket.objects.create(
assignee=user_profile.user, assignee=user_profile.user,
ticket_id=ticket.id, ticket_id=ticket.id,
status=UnassignedTicketStatus.UNASSIGNED status=UnassignedTicketStatus.SOLVED if ticket.status == 'solved' else UnassignedTicketStatus.UNASSIGNED
) )
if ticket.status == 'solved':
ticket.assignee = ZendeskAdmin().get_user(SOLVED_TICKETS_EMAIL)
else:
ticket.assignee = None ticket.assignee = None
ticket.group = ZendeskAdmin().get_group(ZENDESK_GROUPS['buffer']) ticket.group = ZendeskAdmin().get_group(ZENDESK_GROUPS['buffer'])
ZendeskAdmin().admin.tickets.update(ticket) ZendeskAdmin().admin.tickets.update(ticket)
@ -175,7 +177,10 @@ def get_users_list() -> list:
return zendesk.admin.organizations.users(org) 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') return ZendeskAdmin().admin.search(assignee=email, type='ticket')
@ -381,9 +386,15 @@ class StatisticData:
if last_log.new_role == ROLES['engineer']: 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.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 last_log.change_time.date() == timezone.now().date():
if self.end_date == datetime.now().date(): self.statistic[last_log.change_time.date()] += (
self.statistic[self.end_date] = get_timedelta(None, datetime.now().time()).total_seconds() 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): for log_index in range(len(self.data) - 1):
if self.data[log_index].new_role == ROLES['engineer']: if self.data[log_index].new_role == ROLES['engineer']:

View File

@ -47,6 +47,7 @@ class UnassignedTicketStatus(models.IntegerChoices):
RESTORED = 1, 'Авторство восстановлено' RESTORED = 1, 'Авторство восстановлено'
NOT_FOUND = 2, 'Пока нас не было, тикет испарился из буферной группы. Дополнительные действия не требуются' NOT_FOUND = 2, 'Пока нас не было, тикет испарился из буферной группы. Дополнительные действия не требуются'
CLOSED = 3, 'Тикет уже был закрыт. Дополнительные действия не требуются' CLOSED = 3, 'Тикет уже был закрыт. Дополнительные действия не требуются'
SOLVED = 4, 'Тикет решён. Записан на пользователя с почтой SOLVED_TICKETS_EMAIL'
class UnassignedTicket(models.Model): class UnassignedTicket(models.Model):

View File

@ -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 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, \ 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 main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm
from .models import UserProfile, UnassignedTicket, UnassignedTicketStatus from .models import UserProfile, UnassignedTicket, UnassignedTicketStatus
@ -181,9 +181,9 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView):
self.make_light_agents(form.cleaned_data['users']) self.make_light_agents(form.cleaned_data['users'])
return super().form_valid(form) return super().form_valid(form)
@staticmethod def make_engineers(self, users):
def make_engineers(users): for user in users:
[make_engineer(user) for user in users] make_engineer(user, self.request.user)
def make_light_agents(self, users): def make_light_agents(self, users):
for user in users: for user in users:
@ -227,8 +227,8 @@ class CustomLoginView(LoginView):
@login_required() @login_required()
def statistic_page(request): def statistic_page(request):
if not request.user.is_superuser: if not request.user.has_perm('main.has_control_access'):
return redirect('index') raise PermissionDenied
context = { context = {
'pagename': 'страница статистики', 'pagename': 'страница статистики',
'errors': list(), 'errors': list(),