orders.py 6.1 KB

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