Advertisement
Mochinov

Untitled

Apr 14th, 2022
1,202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.73 KB | None | 0 0
  1. from typing import Optional
  2.  
  3. from django.db import models
  4. from django.utils import timezone
  5. from django.forms import ModelForm
  6. from django.contrib.contenttypes.models import ContentType
  7. from django.contrib.contenttypes.fields import GenericForeignKey
  8.  
  9. from .user import User
  10. from crm.models import Project
  11. from crm.models import get_base_record_for_project
  12. from misc.generic_models.meta_mixin import MetaMixin
  13. from misc.views.clean_form_errors import clean_form_errors
  14. from misc.generic_models.generic_model import GenericModel
  15.  
  16.  
  17. class SubmissionRequestManager(models.Manager):
  18.    
  19.     @staticmethod
  20.     def submission_request_create_or_update(
  21.             data: dict, instance: Optional['SubmissionRequest'] = None, user: Optional['User'] = None
  22.     ) -> dict:
  23.         """Выполняет создание или изменение экземпляра ConnectingUserToAccess."""
  24.  
  25.         connecting_user_to_access_form = SubmissionRequest(data=data, instance=instance)
  26.  
  27.         is_valid = connecting_user_to_access_form.is_valid()
  28.  
  29.         if is_valid:
  30.             instance = connecting_user_to_access_form.save()
  31.  
  32.         return {
  33.             'is_ok': is_valid,
  34.             'errors': clean_form_errors(connecting_user_to_access_form.errors),
  35.             'obj': instance
  36.         }
  37.  
  38.     @staticmethod
  39.     def response_to_request(obj: 'SubmissionRequest', user: 'User') -> dict:
  40.         """Выполняет перевод в архив экземпляра SubmissionRequest."""
  41.  
  42.         errors = {}
  43.         is_ok = True
  44.         if not obj:
  45.             errors = {'obj': SubmissionRequest.ErrorHandler.FAIL_TO_FIND_OBJ}
  46.             is_ok = False
  47.  
  48.         # :TODOO Поменять на метод ответа
  49.  
  50.         return {'is_ok': is_ok, 'errors': errors, 'obj': obj}
  51.  
  52.     @staticmethod
  53.     def submission_request_delete(obj: 'SubmissionRequest', user: Optional['User'] = None) -> dict:
  54.         if not obj:
  55.             error = SubmissionRequest.ErrorHandler.FAIL_TO_FIND_OBJ
  56.             return {'is_ok': False, 'error': error, 'obj': None}
  57.         else:
  58.             obj.delete()
  59.             return {'is_ok': True, 'error': '', 'obj': obj}
  60.  
  61.  
  62. class SubmissionRequest(GenericModel):
  63.    
  64.     class ErrorHandler:
  65.         """Статусы ошибок"""
  66.  
  67.         FAIL_TO_FIND_OBJ = 'Объект не найден.'
  68.  
  69.     class Status(models.TextChoices):
  70.         """Статус набора данных."""
  71.  
  72.         REQUEST_COMPLETED = 'request_completed', 'Запрос выполнен'
  73.         IN_PROCESS = 'in_process', 'В процессе'
  74.         DENIED = 'denied', 'Отказано'
  75.  
  76.     meta_tags = [MetaMixin.ModelTags.UserData]
  77.  
  78.     _id_meta = [MetaMixin.FieldTags.PKField, MetaMixin.FieldTags.NotForLog]# Мета данные поля id
  79.  
  80.     user = models.ForeignKey(
  81.         User,
  82.         verbose_name='Сотрудник запрашиваемый доступы или имущество',
  83.         related_name='submission_request_user',
  84.         on_delete=models.CASCADE,
  85.         null=False,
  86.         blank=False,
  87.     )
  88.     _user_meta = [MetaMixin.FieldTags.UserField]
  89.  
  90.     project = models.ForeignKey(
  91.         Project, verbose_name='проект',
  92.         on_delete=models.PROTECT,
  93.         default=get_base_record_for_project,
  94.         blank=True,
  95.     )
  96.     _project_meta = [MetaMixin.FieldTags.ProjectField]
  97.  
  98.     comment_user = models.TextField(verbose_name='Комментарий запрашиваемого запрос', null=True, blank=True)
  99.     comment_administration = models.TextField(verbose_name='Комментарий админестратора', null=True, blank=True)
  100.     status = models.CharField('Статус данных', max_length=18, choices=Status.choices, default=Status.IN_PROCESS)
  101.  
  102.     content_type = models.ForeignKey(ContentType, verbose_name='Объект запроса', on_delete=models.CASCADE)
  103.     object_id = models.PositiveIntegerField()
  104.     content_object = GenericForeignKey('content_type', 'object_id')
  105.  
  106.     supervisor = models.ForeignKey(
  107.         User,
  108.         verbose_name='Ответственный сотрудник',
  109.         related_name='submission_request_supervisor',
  110.         on_delete=models.CASCADE,
  111.         null=False,
  112.         blank=False,
  113.     )
  114.  
  115.     objects = SubmissionRequestManager()
  116.  
  117.     def __str__(self):
  118.         return str(self)
  119.  
  120.     __repr__ = __str__
  121.  
  122.     class Meta:
  123.         verbose_name = 'Запрос на подпись (Имущество и доступы)'
  124.         verbose_name_plural = 'Запрос на подпись (Имущество и доступы)'
  125.         ordering = ['-id']
  126.  
  127.  
  128. class SubmissionRequestForm(ModelForm):
  129.  
  130.     class Meta:
  131.         model = SubmissionRequest
  132.         fields = '__all__'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement