Add get group tickets requests

This commit is contained in:
Sokurov Idar 2021-05-06 00:41:20 +03:00
parent db9676358a
commit cf2e9ccf21
3 changed files with 32 additions and 12 deletions

View File

@ -62,10 +62,9 @@ def make_light_agent(user_profile: UserProfile, who_changes: User) -> None:
else: else:
ticket.assignee = None ticket.assignee = None
ticket.group_id = zenpy.buffer_group_id ticket.group_id = zenpy.buffer_group_id
if tickets:
zenpy.admin.tickets.update(tickets.values) zenpy.admin.tickets.update(tickets)
attempts, success = 20, False
attempts, success = 5, False
while not success and attempts != 0: while not success and attempts != 0:
try: try:
update_role(user_profile, ROLES['light_agent']) 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)) 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): def update_profile(user_profile: UserProfile):
""" """
Функция обновляет профиль пользователя в соответствии с текущим в Zendesk. Функция обновляет профиль пользователя в соответствии с текущим в Zendesk.

View File

@ -13,15 +13,25 @@ class TicketListRequester:
self.email += '/token' self.email += '/token'
else: else:
self.token_or_password = zenpy.credentials.get('password') 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): 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) 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): def _get_tickets(self, url):
response = requests.get(url, auth=(self.email, self.token_or_password)) response = requests.get(url, auth=(self.email, self.token_or_password))
tickets = [] tickets = []
if response.status_code!=200: if response.status_code != 200:
return None return None
for ticket in response.json()['tickets']: for ticket in response.json()['tickets']:
tickets.append(Ticket(api=TicketApi, **ticket)) tickets.append(Ticket(api=TicketApi, **ticket))

View File

@ -20,13 +20,13 @@ from django_registration.views import RegistrationView
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response 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, \ 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, \ 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 .statistic_data import StatisticData
from main.zendesk_admin import zenpy 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.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm
from main.serializers import ProfileSerializer, ZendeskUserSerializer from main.serializers import ProfileSerializer, ZendeskUserSerializer
from .models import UserProfile from .models import UserProfile
@ -229,15 +229,19 @@ def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect:
def work_get_tickets(request): def work_get_tickets(request):
zenpy_user = zenpy.get_user(request.user.email) zenpy_user = zenpy.get_user(request.user.email)
if zenpy_user.role == 'admin' or zenpy_user.custom_role_id == ZENDESK_ROLES['engineer']: 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 tickets = get_tickets_list_for_group(ZENDESK_GROUPS['buffer'])
ticket.group.name == 'Сменная группа' and ticket.assignee is None] assigned_tickets = []
count = 0 count = 0
for i in range(len(tickets)): for i in range(len(tickets)):
if i == int(request.GET.get('count_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) return set_session_params_for_work_page(request, count)
tickets[i].assignee = zenpy_user tickets[i].assignee = zenpy_user
assigned_tickets.append(tickets[i])
count += 1 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, count)
return set_session_params_for_work_page(request, is_confirm=False) return set_session_params_for_work_page(request, is_confirm=False)