Mochinov

Untitled

Apr 25th, 2022 (edited)
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.47 KB | None | 0 0
  1. class ConnectingUserToAccess(models.Model, MetaMixin):
  2.     """Подключение сотрудника к доступам"""
  3.  
  4.     class ErrorHandler:
  5.         """Статусы ошибок"""
  6.  
  7.         FAIL_TO_FIND_OBJ = 'Объект не найден.'
  8.    
  9.     class Status(models.TextChoices):
  10.         """Статус набора данных."""
  11.  
  12.         REQUEST_COMPLETED = 'request_completed', 'Запрос выполнен'
  13.         IN_PROCESS = 'in_process', 'В процессе'
  14.         ARCHIVE = 'archive', 'В архиве'
  15.         NOT_SET = '', 'Отсутствует'
  16.  
  17.     meta_tags = [MetaMixin.ModelTags.UserData]
  18.  
  19.     transfer_date = models.DateTimeField('Дата передачи', null=False, blank=False, default=timezone.now)
  20.     return_date = models.DateTimeField('Дата возврата', null=True, blank=True)
  21.     comment = models.TextField(verbose_name='Комментарий', null=True, blank=True)
  22.     status = models.CharField('Статус данных', max_length=18, choices=Status.choices, default=Status.IN_PROCESS)
  23.  
  24.     user_access = models.ForeignKey(
  25.         UserAccess,
  26.         verbose_name='Назначение доступа сотруднику',
  27.         related_name='access',
  28.         on_delete=models.CASCADE,
  29.         null=False,
  30.         blank=False,
  31.     )
  32.  
  33.     _id_meta = [MetaMixin.FieldTags.PKField, MetaMixin.FieldTags.NotForLog]# Мета данные поля id
  34.  
  35.     supervisor = models.ForeignKey(
  36.         User,
  37.         verbose_name='Ответственный',
  38.         related_name='supervisor_access',
  39.         on_delete=models.CASCADE,
  40.         null=True,
  41.         blank=True,
  42.     )
  43.  
  44.     user = models.ForeignKey(
  45.         User,
  46.         verbose_name='Ответственный по возврату данных',
  47.         related_name='user_access',
  48.         on_delete=models.CASCADE,
  49.         null=False,
  50.         blank=False,
  51.     )
  52.     _user_meta = [MetaMixin.FieldTags.UserField]
  53.  
  54.     project = models.ForeignKey(
  55.         Project, verbose_name='проект',
  56.         on_delete=models.PROTECT,
  57.         default=get_base_record_for_project,
  58.         blank=True,
  59.     )
  60.     _project_meta = [MetaMixin.FieldTags.ProjectField]
  61.  
  62.     objects = ConnectingUserToAccessManager()
  63.  
  64.     def check_accesses_are_open(self) -> bool:
  65.         """Проверка на открытые доступы у сотрудника"""
  66.  
  67.         if self.return_date:
  68.             return False
  69.  
  70.         return True
  71.    
  72.     def __str__(self):
  73.         return str(self.user_access)
  74.  
  75.     __repr__ = __str__
  76.  
  77.     class Meta:
  78.         verbose_name = 'Доступы сотрудника'
  79.         verbose_name_plural = 'Доступы сотрудника'
  80.         ordering = ['-id']
  81.  
  82.  
  83.  
  84. class UserProperty(models.Model, MetaMixin):
  85.     """Имущество у сотрудника"""
  86.  
  87.     class ErrorHandler:
  88.         """Статусы ошибок"""
  89.  
  90.         FAIL_TO_FIND_OBJ = 'Объект не найден.'
  91.  
  92.     class Status(models.TextChoices):
  93.         """Статус набора данных."""
  94.  
  95.         REQUEST_COMPLETED = 'request_completed', 'Запрос выполнен'
  96.         ARCHIVE = 'archive', 'В архиве'
  97.         NOT_SET = '', 'Отсутствует'
  98.         IN_PROCESS = 'in_process', 'В процессе'
  99.  
  100.     meta_tags = [MetaMixin.ModelTags.UserData]
  101.  
  102.     transfer_date = models.DateTimeField(verbose_name='Дата передачи', null=False, blank=False, default=timezone.now)
  103.     quantity = models.PositiveIntegerField(verbose_name='Количество', null=True, blank=True)
  104.     return_date = models.DateTimeField(verbose_name='Дата возврата', null=True, blank=True)
  105.     status = models.CharField('Статус данных', max_length=18, choices=Status.choices, default=Status.IN_PROCESS)
  106.  
  107.     user_property = models.ForeignKey(
  108.         Property,
  109.         verbose_name='Имущество выданное сотруднику',
  110.         related_name='property',
  111.         on_delete=models.CASCADE,
  112.         null=False,
  113.         blank=False,
  114.     )
  115.  
  116.     _id_meta = [MetaMixin.FieldTags.PKField, MetaMixin.FieldTags.NotForLog]
  117.  
  118.     supervisor = models.ForeignKey(
  119.         User,
  120.         verbose_name='Ответственный',
  121.         related_name='supervisor_property',
  122.         on_delete=models.CASCADE,
  123.         null=True,
  124.         blank=True,
  125.     )
  126.  
  127.     user = models.ForeignKey(
  128.         User,
  129.         verbose_name='Ответственный по возврату данных',
  130.         related_name='user_property',
  131.         on_delete=models.CASCADE,
  132.         null=False,
  133.         blank=False,
  134.     )
  135.    
  136.  
  137.     _user_meta = [MetaMixin.FieldTags.UserField]
  138.  
  139.     project = models.ForeignKey(
  140.         Project, verbose_name='проект',
  141.         on_delete=models.PROTECT,
  142.         default=get_base_record_for_project,
  143.         blank=True,
  144.     )
  145.     _project_meta = [MetaMixin.FieldTags.ProjectField]
  146.  
  147.     objects = UserPropertyManager()
  148.  
  149.     def check_employee_property(self) -> bool:
  150.         """Проверка на сохранённое имущество у сотрудника"""
  151.  
  152.         if self.return_date:
  153.             return False
  154.  
  155.         return True
  156.    
  157.     def __str__(self):
  158.         return str(self.user_property.name)
  159.  
  160.     __repr__ = __str__
  161.  
  162.     class Meta:
  163.         verbose_name = 'Имущество у сотрудника'
  164.         verbose_name_plural = 'Имущество у сотрудника'
  165.         ordering = ['-id']
Add Comment
Please, Sign In to add comment