Advertisement
Mochinov

Untitled

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