|
@@ -1,5 +1,11 @@
|
|
|
+import re
|
|
|
+import os
|
|
|
+
|
|
|
from django.db import models
|
|
|
+from django.urls import reverse
|
|
|
from django.contrib.auth import get_user_model
|
|
|
+from django.contrib.contenttypes.models import ContentType
|
|
|
+
|
|
|
from dbsynce.models.company import Company
|
|
|
from tickets.models import Ticket
|
|
|
|
|
@@ -11,7 +17,25 @@ class Documents(models.Model):
|
|
|
То есть отдельно таблица с паспортами, отдельно с правами, отдельно с какими-нибудь разрешениями и так далее.
|
|
|
Что пока непонятно - документов может быть много разных.
|
|
|
"""
|
|
|
+ DOC_TYPES = [
|
|
|
+ ("01", "Паспорт"),
|
|
|
+ ("02", "ИНН"),
|
|
|
+ ("03", "СНИЛС"),
|
|
|
+ ("04", "Cвидетельство о регистрации компании"),
|
|
|
+ ("05", "Cистема налогообложения"),
|
|
|
+ ("06", "Доверенность / Приказ"),
|
|
|
+ ("07", "Права / Лицензия"),
|
|
|
+ ("08", "Документ, подтверждающий собственность"),
|
|
|
+ ("09", "Документ об образовании"),
|
|
|
+ ("10", "Медицинская книжка"),
|
|
|
+ ("11", "Cправка об отсутствии судимости"),
|
|
|
+ ("12", "Договор (в том числе о трудоустройстве)"),
|
|
|
+ ("13", "Фотография"),
|
|
|
+ ("99", "Иное"),
|
|
|
+ ]
|
|
|
+ DOC_TYPES_DICT = dict(DOC_TYPES)
|
|
|
|
|
|
+ # FIXME: id_metaservice должно принимать текущий идентификатор метасервиса, на котором происходит создание записи
|
|
|
id_metaservice = models.BigIntegerField(
|
|
|
null=True,
|
|
|
help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false."
|
|
@@ -26,11 +50,11 @@ class Documents(models.Model):
|
|
|
null=True,
|
|
|
help_text="срок окончания действия документа."
|
|
|
)
|
|
|
-
|
|
|
+ # FIXME: requirements должно иметь другое значение поумолчанию
|
|
|
requirements = models.CharField(
|
|
|
max_length=150
|
|
|
)
|
|
|
-
|
|
|
+ # FIXME: status должен иметь другое значение поумолчанию
|
|
|
status = models.CharField(
|
|
|
max_length=150,
|
|
|
help_text="активность на основе системы заявок"
|
|
@@ -39,10 +63,6 @@ class Documents(models.Model):
|
|
|
Ticket,
|
|
|
on_delete=models.DO_NOTHING,
|
|
|
help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю."
|
|
|
- )
|
|
|
- datalink = models.TextField(
|
|
|
- blank=True,
|
|
|
- help_text="адрес фактического размещения на физическом носителе, если информация настолько велика, что не может храниться внутри БД."
|
|
|
)
|
|
|
doc_type = models.CharField(
|
|
|
max_length=150,
|
|
@@ -75,12 +95,37 @@ class Documents(models.Model):
|
|
|
null=True,
|
|
|
help_text="userid проверившего"
|
|
|
)
|
|
|
+ datalink = models.TextField(
|
|
|
+ blank=True,
|
|
|
+ help_text="адрес фактического размещения на физическом носителе, если информация настолько велика, что не может храниться внутри БД."
|
|
|
+ )
|
|
|
|
|
|
+ @staticmethod
|
|
|
+ def parse_requirements(requirements: str):
|
|
|
+ """
|
|
|
+ Метод позволяет разобрать строку requirements в удобочитаемый вид.
|
|
|
+ """
|
|
|
+ return sorted(set(re.findall(r'\d{2}', requirements)))
|
|
|
|
|
|
+ def get_admin_url(self):
|
|
|
+ """
|
|
|
+ Возвращает URL-адрес текущего объекта в административной панели Django.
|
|
|
|
|
|
+ Returns:
|
|
|
+ str: URL-адрес текущего объекта в административной панели Django
|
|
|
+ """
|
|
|
+ content_type = ContentType.objects.get_for_model(self.__class__)
|
|
|
+ return reverse("admin:%s_%s_change" % (content_type.app_label, content_type.model), args=(self.id,))
|
|
|
|
|
|
class Meta:
|
|
|
db_table = "documents"
|
|
|
verbose_name = "Документ"
|
|
|
verbose_name_plural = "Документы"
|
|
|
|
|
|
+
|
|
|
+class DocumentFile(models.Model):
|
|
|
+ document = models.ForeignKey(Documents, related_name='files', on_delete=models.CASCADE)
|
|
|
+ file = models.FileField(upload_to=f'uploads/partners_docs/')
|
|
|
+
|
|
|
+ def __str__(self):
|
|
|
+ return os.path.basename(self.file.name)
|