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': 'Поддержка',
'buffer': 'Сменная группа',
}
SOLVED_TICKETS_EMAIL = 'd.krikov@ngenix.net'
ONE_DAY = 12 # Количество часов в 1 рабочем дне

View File

@ -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']:

View File

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