Add ticket unassignment
This commit is contained in:
parent
0cc788c039
commit
5ec2407211
@ -187,6 +187,6 @@ ZENDESK_GROUPS = {
|
||||
'employees': 'Поддержка',
|
||||
'buffer': 'Сменная группа',
|
||||
}
|
||||
|
||||
SOLVED_TICKETS_EMAIL = 'd.krikov@ngenix.net'
|
||||
ONE_DAY = 12 # Количество часов в 1 рабочем дне
|
||||
|
||||
|
@ -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']:
|
||||
|
@ -47,6 +47,7 @@ class UnassignedTicketStatus(models.IntegerChoices):
|
||||
RESTORED = 1, 'Авторство восстановлено'
|
||||
NOT_FOUND = 2, 'Пока нас не было, тикет испарился из буферной группы. Дополнительные действия не требуются'
|
||||
CLOSED = 3, 'Тикет уже был закрыт. Дополнительные действия не требуются'
|
||||
SOLVED = 4, 'Тикет решён. Записан на пользователя с почтой SOLVED_TICKETS_EMAIL'
|
||||
|
||||
|
||||
class UnassignedTicket(models.Model):
|
||||
|
@ -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(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user