documents.py 5.7 KB

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