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:
ticket.assignee = None
ticket.group_id = zenpy.buffer_group_id
zenpy.admin.tickets.update(tickets.values)
attempts, success = 5, False
if tickets:
zenpy.admin.tickets.update(tickets)
attempts, success = 20, False
while not success and attempts != 0:
try:
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))
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):
"""
Функция обновляет профиль пользователя в соответствии с текущим в Zendesk.

View File

@ -13,15 +13,25 @@ class TicketListRequester:
self.email += '/token'
else:
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):
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)
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):
response = requests.get(url, auth=(self.email, self.token_or_password))
tickets = []
if response.status_code!=200:
if response.status_code != 200:
return None
for ticket in response.json()['tickets']:
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.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, \
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 main.zendesk_admin import zenpy
from .requester import TicketListRequester
from main.requester import TicketListRequester
from main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm
from main.serializers import ProfileSerializer, ZendeskUserSerializer
from .models import UserProfile
@ -229,15 +229,19 @@ def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect:
def work_get_tickets(request):
zenpy_user = zenpy.get_user(request.user.email)
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
ticket.group.name == 'Сменная группа' and ticket.assignee is None]
tickets = get_tickets_list_for_group(ZENDESK_GROUPS['buffer'])
assigned_tickets = []
count = 0
for i in range(len(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)
tickets[i].assignee = zenpy_user
assigned_tickets.append(tickets[i])
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, is_confirm=False)