Update model, add documentation todos, add sampla code for logging.
This commit is contained in:
parent
674df0e66b
commit
d2e76fdbd9
@ -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:
|
||||
|
18
main/migrations/0013_auto_20210311_2040.py
Normal file
18
main/migrations/0013_auto_20210311_2040.py
Normal 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),
|
||||
),
|
||||
]
|
@ -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):
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user