service.py 7.1 KB

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