Fixed userprofile.custom_role_id updating issue in work_hand_over and work_become_engineer

This commit is contained in:
Timofey Mazurov 2021-03-17 15:47:41 +03:00
parent 259ab76cba
commit 67da8681e5

View File

@ -1,38 +1,29 @@
import logging import logging
import os import os
from datetime import datetime
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.contrib.auth.models import User, Permission
from django.contrib.auth.tokens import default_token_generator from django.contrib.auth.tokens import default_token_generator
from django.contrib.auth.forms import PasswordResetForm from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.views import LoginView from django.contrib.auth.views import LoginView
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render, get_list_or_404, redirect from django.shortcuts import render, get_list_or_404, redirect
from django.urls import reverse_lazy, reverse from django.urls import reverse_lazy, reverse
from django.views.generic import FormView from django.views.generic import FormView
from zenpy import Zenpy
from access_controller.settings import EMAIL_HOST_USER
from main.extra_func import check_user_exist, update_profile, get_user_organization, \
make_engineer, make_light_agent, get_users_list, log
from django.contrib.auth.models import User, Permission
from main.models import UserProfile
from main.forms import CustomRegistrationForm, AdminPageUsers, CustomAuthenticationForm
from django_registration.views import RegistrationView from django_registration.views import RegistrationView
from django.contrib.auth.decorators import login_required from zenpy import Zenpy
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.core.exceptions import PermissionDenied
from access_controller.settings import ZENDESK_ROLES
from zenpy.lib.api_objects import User as ZenpyUser from zenpy.lib.api_objects import User as ZenpyUser
content_type_temp = ContentType.objects.get_for_model(UserProfile) from access_controller.settings import EMAIL_HOST_USER, ZENDESK_ROLES
permission_temp, created = Permission.objects.get_or_create( from main.extra_func import check_user_exist, update_profile, get_user_organization, make_engineer, make_light_agent, \
codename='has_control_access', get_users_list, StatisticData, log
content_type=content_type_temp, from main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm
) from .models import UserProfile
class CustomRegistrationView(RegistrationView): class CustomRegistrationView(RegistrationView):
""" """
@ -111,7 +102,6 @@ def profile_page(request: WSGIRequest) -> HttpResponse:
'profile': user_profile, 'profile': user_profile,
'pagename': 'Страница профиля' 'pagename': 'Страница профиля'
} }
log(request.user)
return render(request, 'pages/profile.html', context) return render(request, 'pages/profile.html', context)
@ -151,12 +141,14 @@ def work_page(request, id):
@login_required() @login_required()
def work_hand_over(request): def work_hand_over(request):
zenpy_user, admin = auth_user(request) zenpy_user, admin = auth_user(request)
if zenpy_user.custom_role_id == ZENDESK_ROLES['engineer']: if zenpy_user.custom_role_id == ZENDESK_ROLES['engineer']:
zenpy_user.custom_role_id = ZENDESK_ROLES['light_agent'] zenpy_user.custom_role_id = ZENDESK_ROLES['light_agent']
admin.users.update(zenpy_user) admin.users.update(zenpy_user)
request.user.userprofile.role = "agent" request.user.userprofile.role = "agent"
request.user.userprofile.custom_role_id = ZENDESK_ROLES['light_agent']
request.user.userprofile.save() request.user.userprofile.save()
# log(request.user.userprofile.user) log(request.user.userprofile)
return HttpResponseRedirect(reverse('work', args=(request.user.id,))) return HttpResponseRedirect(reverse('work', args=(request.user.id,)))
@ -167,8 +159,9 @@ def work_become_engineer(request):
zenpy_user.custom_role_id = ZENDESK_ROLES['engineer'] zenpy_user.custom_role_id = ZENDESK_ROLES['engineer']
admin.users.update(zenpy_user) admin.users.update(zenpy_user)
request.user.userprofile.role = "agent" request.user.userprofile.role = "agent"
request.user.userprofile.custom_role_id = ZENDESK_ROLES['engineer']
request.user.userprofile.save() request.user.userprofile.save()
# log(request.user.userprofile.user) log(request.user.userprofile)
return HttpResponseRedirect(reverse('work', args=(request.user.id,))) return HttpResponseRedirect(reverse('work', args=(request.user.id,)))
@ -200,10 +193,12 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView):
@staticmethod @staticmethod
def make_engineers(users): def make_engineers(users):
[make_engineer(user) for user in users] [make_engineer(user) for user in users]
# [log(user, self.request.user.userprofile) for user in users]
@staticmethod @staticmethod
def make_light_agents(users): def make_light_agents(users):
[make_light_agent(user) for user in users] [make_light_agent(user) for user in users]
# [log(user, self.request.user.userprofile) for user in users]
@staticmethod @staticmethod
def count_users(users) -> tuple: def count_users(users) -> tuple:
@ -239,3 +234,31 @@ class CustomLoginView(LoginView):
Отображение страницы авторизации пользователя Отображение страницы авторизации пользователя
""" """
form_class = CustomAuthenticationForm form_class = CustomAuthenticationForm
@login_required()
def statistic_page(request):
if not request.user.is_superuser:
return redirect('index')
context = {
'pagename': 'страница статистики',
'errors': list(),
}
if request.method == "POST":
form = StatisticForm(request.POST)
if form.is_valid():
start_date, end_date = form.cleaned_data['range_start'], form.cleaned_data['range_end']
interval, show = form.cleaned_data['interval'], form.cleaned_data['display_format']
Data = StatisticData(start_date, end_date, form.cleaned_data['email'])
Data.set_display(show)
Data.set_interval(interval)
stats = Data.get_statistic()
if Data.errors:
context['errors'] = Data.errors
if Data.warnings:
context['warnings'] = Data.warnings
context['log_stats'] = stats if not context['errors'] else None
if request.method == 'GET':
form = StatisticForm()
context['form'] = form
return render(request, 'pages/stat.html', context)