documents.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import os
  2. from django.contrib.auth import get_user_model
  3. from django.db import models
  4. from dbsynce.models.company import Company
  5. from dbsynce.models.resource import Resource
  6. from tickets.models import Ticket
  7. from dbsynce.docs.database.documents import Documents as HelpTexts
  8. from core.settings_vars import METASERVICE_ID
  9. class Documents(models.Model):
  10. """
  11. Documents - это одна таблица со всеми документами.
  12. Вообще в концепции предполагалось, что таких таблиц должно быть много под каждый тип для удобства поиска.
  13. То есть отдельно таблица с паспортами, отдельно с правами, отдельно с какими-нибудь разрешениями и так далее.
  14. Что пока непонятно - документов может быть много разных.
  15. """
  16. DOC_TYPES = [
  17. ("01", "Паспорт"),
  18. ("02", "ИНН"),
  19. ("03", "СНИЛС"),
  20. ("04", "Cвидетельство о регистрации компании"),
  21. ("05", "Cистема налогообложения"),
  22. ("06", "Доверенность / Приказ"),
  23. ("07", "Права / Лицензия"),
  24. ("08", "Документ, подтверждающий собственность"),
  25. ("09", "Документ об образовании"),
  26. ("10", "Медицинская книжка"),
  27. ("11", "Cправка об отсутствии судимости"),
  28. ("12", "Договор (в том числе о трудоустройстве)"),
  29. ("13", "Фотография"),
  30. ("99", "Иное"),
  31. ]
  32. DOC_TYPES_DICT = dict(DOC_TYPES)
  33. # ID METASERVICE
  34. # FIXME: id_metaservice должно принимать текущий идентификатор метасервиса, на котором происходит создание записи
  35. id_metaservice = models.PositiveIntegerField(
  36. default=METASERVICE_ID,
  37. help_text=HelpTexts.id_metaservice
  38. )
  39. # DATA
  40. check_date = models.DateTimeField(
  41. auto_now_add=True,
  42. help_text="timestamp проверки"
  43. )
  44. check_level = models.IntegerField(
  45. null=True,
  46. blank=True,
  47. help_text=HelpTexts.check_level
  48. )
  49. expire_date = models.DateField(
  50. null=True,
  51. blank=True,
  52. help_text=HelpTexts.expire_date
  53. )
  54. # FIXME: status должен иметь другое значение поумолчанию
  55. status = models.CharField(
  56. max_length=150,
  57. default="deactivated",
  58. help_text="активность на основе системы заявок"
  59. )
  60. data_path = models.CharField(
  61. max_length=1024,
  62. help_text=HelpTexts.data_path
  63. )
  64. doc_type = models.CharField(
  65. max_length=2,
  66. choices=DOC_TYPES,
  67. help_text=HelpTexts.doc_type
  68. )
  69. # OTHER
  70. is_global = models.CharField(
  71. max_length=1,
  72. default="f",
  73. help_text=HelpTexts.is_global
  74. )
  75. is_visible = models.CharField(
  76. max_length=1,
  77. default="f",
  78. help_text=HelpTexts.is_visible
  79. )
  80. # FK
  81. resource = models.ForeignKey(
  82. Resource,
  83. on_delete=models.DO_NOTHING,
  84. null=True,
  85. #help_text=HelpTexts.company
  86. )
  87. company = models.ForeignKey(
  88. Company,
  89. on_delete=models.DO_NOTHING,
  90. null=True,
  91. help_text=HelpTexts.company
  92. )
  93. user = models.ForeignKey(
  94. get_user_model(),
  95. related_name="user_doc",
  96. on_delete=models.DO_NOTHING,
  97. help_text=HelpTexts.user
  98. )
  99. ticket_status = models.ForeignKey(
  100. Ticket,
  101. null=True,
  102. blank=True,
  103. on_delete=models.SET_NULL,
  104. help_text=HelpTexts.ticket_status
  105. )
  106. checked_by = models.ForeignKey(
  107. get_user_model(),
  108. null=True,
  109. blank=True,
  110. related_name="checked_by_doc",
  111. on_delete=models.DO_NOTHING,
  112. help_text=HelpTexts.checked_by
  113. )
  114. class Meta:
  115. db_table = "documents"
  116. verbose_name = "Документ"
  117. verbose_name_plural = "Документы"
  118. class DocumentFile(models.Model):
  119. document = models.ForeignKey(Documents, related_name='files', on_delete=models.CASCADE)
  120. file = models.FileField(upload_to=f'uploads/partners_docs/')
  121. def __str__(self):
  122. return os.path.basename(self.file.name)