documents.py 5.0 KB

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