orders.py 6.0 KB

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