service.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from django.db import models
  2. from dbsynce.models.servicetype import ServiceType
  3. from tickets.models import Ticket
  4. from dbsynce.models.resource import Resource
  5. class Service(models.Model):
  6. """
  7. service - спецификация услуги каждого конкретного поставщика
  8. (например, в рамках сервиса многие могут предоставлять услуги перевозки,
  9. но конкретный шаблон с конкретным тарифом относится к отдельному перевозчику)
  10. """
  11. id = models.IntegerField(
  12. primary_key=True
  13. )
  14. # ID METASERVICE
  15. id_metaservice = models.PositiveIntegerField(
  16. null=True,
  17. help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер."
  18. )
  19. # DATA
  20. price_alg = models.CharField(
  21. max_length=100,
  22. help_text="шаблон алгоритма расчета цены для оказываемой услуги (по этой переменной определяется, какую функцию для расчета цены вызывать)"
  23. )
  24. price_km = models.DecimalField(
  25. max_digits=9,
  26. decimal_places=2,
  27. help_text="значение параметра стоимости 1км данного поставщика для данного шаблона услуги"
  28. )
  29. price_min = models.DecimalField(
  30. max_digits=9,
  31. decimal_places=2,
  32. help_text="значение параметра стоимости 1мин данного поставщика для данного шаблона услуги"
  33. )
  34. price_amount = models.DecimalField(
  35. max_digits=9,
  36. decimal_places=2,
  37. help_text="значение параметра стоимости 1 услуги данного поставщика для данного шаблона услуги"
  38. )
  39. company_comission = models.FloatField(
  40. help_text="Коммисия сервиса"
  41. )
  42. requirements = models.CharField(
  43. max_length=150,
  44. help_text="код необходимого (самый строгий) для того, чтобы ресурс мог стать активным. Оно вставляется автоматом, в соответствии с профилем метасервиса. Далее, если кому-то из партнеров или пользователей надо строже - применяется более строгий вариант на данную связь."
  45. )
  46. service_status = models.CharField(
  47. max_length=150,
  48. help_text="статус спецификации типа услуги, принимает значения Online, Offline, Preorder with Gap. Online/offline выставляются по проверке параметров и желанию пользователя (например, если пользователь переключает себя online, но по какой-то причине ему такую услугу оказывать запрещено - оно не переключится, то есть надо перед сменой значения этого поля всегда запускать проверку)"
  49. )
  50. status = models.CharField(
  51. max_length=150,
  52. help_text="статус обработки заявки в системе заявок. активность на основе системы заяво"
  53. )
  54. # OTHER
  55. is_global = models.BooleanField(
  56. default=False,
  57. help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация"
  58. )
  59. is_visible = models.BooleanField(
  60. default=False,
  61. help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе"
  62. )
  63. # FK
  64. ticket_status = models.ForeignKey(
  65. Ticket,
  66. on_delete=models.DO_NOTHING,
  67. help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю."
  68. )
  69. resource = models.ForeignKey(
  70. Resource,
  71. on_delete=models.DO_NOTHING,
  72. blank=True,
  73. null=True,
  74. help_text="ответственный за ресурс(не всегда). так как ресурсы сами услугу оказать не могут, а также один ресурс может быть представлен в виде разных услуг, то фактически с точки зрения смысла системы ресурс - это как неодушевленный пользователь. Без провайдера, который с его помощью оказывает услугу - никуда. Поле остается пустым, если сервис не предусматривает использование услуг. Стоит обратить внимание, что это не обязательно ответственный за ресурс. Например, за состояние автомобиля может быть ответственен пользователь (он и указывается в таблице со свойствами ресурса), а услугу доступа или перевозки может оказывать иное лицо."
  75. )
  76. servicetype = models.ForeignKey(
  77. ServiceType,
  78. on_delete=models.DO_NOTHING,
  79. help_text="тип оказываемой услуги по классификатору услуг сервиса"
  80. )
  81. class Meta:
  82. db_table = "service"
  83. verbose_name = "Услуга"
  84. verbose_name_plural = "Услуги"