orders.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. from django.contrib.auth import get_user_model
  2. from django.db import models
  3. from dbsynce.models.client import Client
  4. from dbsynce.models.company import Company
  5. from dbsynce.models.provider import Provider
  6. from dbsynce.models.service import Service
  7. from dbsynce.models.servicetype import ServiceType
  8. from tickets.models import Ticket
  9. class Orders(models.Model):
  10. """
  11. Orders - таблица с заказами
  12. """
  13. id = models.IntegerField(
  14. primary_key=True
  15. )
  16. # ID METASERVICE
  17. id_metaservice = models.PositiveIntegerField(
  18. null=True,
  19. help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false."
  20. )
  21. # DATA
  22. status = models.CharField(
  23. max_length=150,
  24. help_text="текущий статус заказа из возможных на платформе"
  25. )
  26. title = models.CharField(
  27. max_length=150,
  28. help_text="заголовок заказа",
  29. default='Заголовок'
  30. )
  31. note = models.CharField(
  32. max_length=150,
  33. help_text="задание к заказу",
  34. default='Записи'
  35. )
  36. time_created = models.DateTimeField(
  37. auto_now_add=True,
  38. help_text="время создания заказа"
  39. )
  40. time_placed = models.DateTimeField(
  41. help_text="время размещения заказа"
  42. )
  43. time_start = models.DateTimeField(
  44. null=True,
  45. help_text="время начала оказания услуги"
  46. )
  47. time_start_real = models.DateTimeField(
  48. null=True,
  49. help_text=""
  50. )
  51. time_start_predicted = models.DateTimeField(
  52. null=True,
  53. help_text=""
  54. )
  55. time_finish_real = models.DateTimeField(
  56. null=True,
  57. help_text="фактическое время окончания (точное установленное время)"
  58. )
  59. time_finish_predicted = models.DateTimeField(
  60. help_text="предварительное/расчетное время до окончания оказания услуги"
  61. )
  62. real_price = models.FloatField(
  63. help_text="цена с учетом тарифа поставщика услуг по факту оказания услуги"
  64. )
  65. predicted_price = models.FloatField(
  66. help_text="расчетная цена с учетом тарифа поставщика услуг"
  67. )
  68. # NOTE: Возможно в будующем можнос сделать символом
  69. asap = models.BooleanField(
  70. default=False,
  71. help_text="Срочный ли заказ"
  72. )
  73. # OTHER
  74. is_global = models.BooleanField(
  75. default=False,
  76. help_text="доступна ли информация по заказу для хранения в глобальном сервисе/нужна синхронизация данных. Если is_global = false, то и is_visible для заказа и вглубь по цепочке для всех исполнителей и ресурсов - тоже false."
  77. )
  78. is_visible = models.BooleanField(
  79. default=False,
  80. help_text="доступна ли информация по заказу (время, место) для планирования иных цепочек. Если нет, то все действующие исполнители и ресурсы считаются занятыми на неопределенное время, пока не завершится заказ. Если да - то ресурсы могут использоваться для построения цепочек после планируемого времени завершения, с учетом места."
  81. )
  82. # FK
  83. ticket = models.ForeignKey(
  84. Ticket,
  85. null=True,
  86. on_delete=models.DO_NOTHING
  87. )
  88. service = models.ForeignKey(
  89. Service,
  90. null=True,
  91. on_delete=models.DO_NOTHING,
  92. help_text="спецификатор услуги провайдера, нужен для установления цены (id_service - уникальный идентификатор шаблона услуги, необходим для установления цены и исполнителей."
  93. )
  94. servicetype = models.ForeignKey(
  95. ServiceType,
  96. null=True,
  97. on_delete=models.DO_NOTHING,
  98. help_text="тип заказа по классификатору услу"
  99. )
  100. client = models.ForeignKey(
  101. Client,
  102. null=True,
  103. on_delete=models.DO_NOTHING,
  104. help_text="клиент/аккаунт, который оплачивает все оказанные услуги"
  105. )
  106. provider = models.ForeignKey(
  107. Provider,
  108. null=True,
  109. on_delete=models.DO_NOTHING,
  110. help_text="уникальный идентификатор поставщика услуги/аккаунта, который оказывает услугу. Если несколько провайдеров собираются мета-сервисом в цепочку, где на уровне связи с клиентом нельзя установить одно ответственное лицо, то указывается вспомогательный мета-провайдер сервиса, и это означает, что мета-сервис несет ответственность перед пользователем за сборку услуги воедино."
  111. )
  112. receiver = models.ForeignKey(
  113. get_user_model(),
  114. null=True,
  115. related_name="user_id",
  116. on_delete=models.DO_NOTHING,
  117. help_text="пользователь/аккаунт, который принимает оказываемые услуги"
  118. )
  119. company = models.ForeignKey(
  120. Company,
  121. on_delete=models.DO_NOTHING,
  122. null=True,
  123. help_text="Идентификатор компании, к которой относится документ, если таковая есть (может не быть)"
  124. )
  125. class Meta:
  126. db_table = "orders"
  127. verbose_name = "Заказ"
  128. verbose_name_plural = "Заказы"