Update model, add documentation todos, add sampla code for logging.

This commit is contained in:
Andrew Smirnov 2021-03-11 20:54:56 +03:00
parent 674df0e66b
commit d2e76fdbd9
No known key found for this signature in database
GPG Key ID: 0EFE318E5BB2A82A
4 changed files with 55 additions and 9 deletions

View File

@ -6,7 +6,7 @@ from zenpy import Zenpy
from zenpy.lib.exception import APIException
from access_controller.settings import ZENDESK_ROLES as ROLES, ONE_DAY
from main.models import UserProfile, RoleChangeLogs
from main.models import UserProfile, RoleChangeLogs, UnassignedTicket, UnassignedTicketStatus
class ZendeskAdmin:
@ -128,16 +128,41 @@ def update_role(user_profile: UserProfile, role: str) -> UserProfile:
def make_engineer(user_profile: UserProfile) -> UserProfile:
"""
Функция **make_engineer** устанавливапет пользователю роль инженера.
Функция **make_engineer** устанавливает пользователю роль инженера.
"""
update_role(user_profile, ROLES['engineer'])
def make_light_agent(user_profile: UserProfile) -> UserProfile:
def make_light_agent(user_profile: UserProfile, who_changes: User) -> UserProfile:
"""
Функция **make_light_agent** устанавливапет пользователю роль легкого агента.
Функция **make_light_agent** устанавливапет пользователю роль легкого агента.
.. todo::
Решить проблему с ошибкой при выполнении этой функции из-за неотвязанных тикетов. А именно:
- найти все тикеты, ответственным которых является снимаемый аккаунт
- для всех этих тикетов - перенести ответственность на буферную группу.
- [PARTIALY DONE] создать записи о снятых тикетах и их прошлом авторстве. Если тикет уже был закрыт - выставить в логе CLOSED. Иначе UNASSIGNED
- [DONE] после этого снять права c инженера
- [DONE] создать запись в логе о снятии прав инженера
"""
# tickets = []
# # TODO: set ticket fields correct
# for ticket in tickets:
# UnassignedTicket.create(
# assignee=user_profile.user,
# ticket_id=ticket.number,
# status=UnassignedTicketStatus.UNASSIGNED if ticket.status=='opened' else UnassignedTicketStatus.CLOSED
# )
update_role(user_profile, ROLES['light_agent'])
RoleChangeLogs.create(
user=user_profile.user,
old_role=ROLES['engineer'],
new_role=ROLES['light_agent'],
changed_by=who_changes
)
def get_users_list() -> list:

View File

@ -0,0 +1,18 @@
# Generated by Django 3.1.6 on 2021-03-11 17:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0012_auto_20210311_2027'),
]
operations = [
migrations.AlterField(
model_name='unassignedticket',
name='status',
field=models.IntegerField(choices=[(0, 'Снят с пользователя, перенесён в буферную группу'), (1, 'Авторство восстановлено'), (2, 'Пока нас не было, тикет испарился из буферной группы. Дополнительные действия не требуются'), (3, 'Тикет уже был закрыт. Дополнительные действия не требуются')], default=0),
),
]

View File

@ -2,6 +2,7 @@ from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils import timezone
class UserProfile(models.Model):
@ -12,7 +13,7 @@ class UserProfile(models.Model):
('has_control_access', 'Can view admin page'),
)
user = models.OneToOneField(to=User, on_delete=models.CASCADE, help_text='Пользователь')
user = models.OneToOneField(to=User, on_delete=models.CASCADE, help_text='Пользователь', related_name='user')
role = models.IntegerField(default=0, help_text='Код роли пользователя')
image = models.URLField(null=True, blank=True, help_text='Аватарка')
name = models.CharField(default='None', max_length=100, help_text='Имя пользователя на нашем сайте')
@ -35,7 +36,7 @@ class RoleChangeLogs(models.Model):
help_text='Пользователь, которому присвоили другую роль')
old_role = models.IntegerField(default=0, help_text='Старая роль')
new_role = models.IntegerField(default=0, help_text='Присвоенная роль')
change_time = models.DateTimeField(help_text='Дата и время изменения роли')
change_time = models.DateTimeField(help_text='Дата и время изменения роли', default=timezone.now)
changed_by = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='changed_by',
help_text='Кем была изменена роль')
@ -44,6 +45,7 @@ class UnassignedTicketStatus(models.IntegerChoices):
UNASSIGNED = 0, 'Снят с пользователя, перенесён в буферную группу'
RESTORED = 1, 'Авторство восстановлено'
NOT_FOUND = 2, 'Пока нас не было, тикет испарился из буферной группы. Дополнительные действия не требуются'
CLOSED = 3, 'Тикет уже был закрыт. Дополнительные действия не требуются'
class UnassignedTicket(models.Model):

View File

@ -190,9 +190,10 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView):
def make_engineers(users):
[make_engineer(user) for user in users]
@staticmethod
def make_light_agents(users):
[make_light_agent(user) for user in users]
def make_light_agents(self, users):
for user in users:
make_light_agent(user, self.request.user)
@staticmethod
def count_users(users) -> tuple: