Advertisement
Mochinov

Untitled

Apr 7th, 2022
884
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.98 KB | None | 0 0
  1. from django.db import models
  2. from django.db.models import QuerySet
  3. from django.utils import timezone
  4.  
  5. from crm.models import Project
  6. from crm.models import get_base_record_for_project
  7. from .user import User
  8. from misc.generic_models.meta_mixin import MetaMixin
  9.  
  10. class UserAccess(models.Model, MetaMixin):
  11.     """Cоздаем возможность добавлять разные типы доступов"""
  12.  
  13.     _id_meta = [MetaMixin.FieldTags.PKField, MetaMixin.FieldTags.NotForLog]
  14.  
  15.     name = models.CharField(verbose_name='Название доступа', max_length=255, null=False, blank=False)
  16.     url = models.SlugField(verbose_name='URL Адрес ресурса', max_length=999, null=True, blank=True)
  17.     comment = models.TextField(verbose_name='Комментарий', null=True, blank=True)
  18.  
  19.     project = models.ForeignKey(
  20.         Project, verbose_name='проект',
  21.         on_delete=models.PROTECT,
  22.         default=get_base_record_for_project,
  23.         blank=True,
  24.     )
  25.     _project_meta = [MetaMixin.FieldTags.ProjectField]
  26.  
  27.     def __str__(self):
  28.         return self.name
  29.  
  30.     __repr__ = __str__
  31.  
  32.  
  33.     class Meta:
  34.         verbose_name = 'Доступы'
  35.         verbose_name_plural = 'Доступы'
  36.  
  37. class ConnectingUserToAccess(models.Model, MetaMixin):
  38.     """Подключение сотрудника к доступам"""
  39.  
  40.     _id_meta = [MetaMixin.FieldTags.PKField, MetaMixin.FieldTags.NotForLog]
  41.  
  42.     transfer_date = models.DateTimeField('Дата передачи', null=False, blank=False, default=timezone.now)
  43.     return_date = models.DateTimeField('Дата возврата', null=True, blank=True)
  44.     comment = models.TextField(verbose_name='Комментарий', null=True, blank=True)
  45.  
  46.     user_access = models.ForeignKey(
  47.         UserAccess,
  48.         verbose_name='Назначение доступа сотруднику',
  49.         related_name='access',
  50.         on_delete=models.CASCADE,
  51.         null=False,
  52.         blank=False,
  53.     )
  54.  
  55.     _id_meta = [MetaMixin.FieldTags.PKField, MetaMixin.FieldTags.NotForLog]# Мета данные поля id
  56.  
  57.     user = models.ForeignKey(
  58.         User,
  59.         verbose_name='Ответственный сотрудник по возврату данных',
  60.         related_name='employee_access',
  61.         on_delete=models.CASCADE,
  62.         null=False,
  63.         blank=False,
  64.     )
  65.     _user_meta = [MetaMixin.FieldTags.UserField]
  66.  
  67.     project = models.ForeignKey(
  68.         Project, verbose_name='проект',
  69.         on_delete=models.PROTECT,
  70.         default=get_base_record_for_project,
  71.         blank=True,
  72.     )
  73.     _project_meta = [MetaMixin.FieldTags.ProjectField]
  74.  
  75.     def check_accesses_are_open(self) -> bool:
  76.         """Проверка на открытые доступы у сотрудника"""
  77.  
  78.         if self.return_date:
  79.             return False
  80.  
  81.         return True
  82.    
  83.     def __str__(self):
  84.         return self.employee
  85.  
  86.     __repr__ = __str__
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement