|
@@ -0,0 +1,32 @@
|
|
|
|
+from django.db import models
|
|
|
|
+from metaservicesynced.models.provider import Provider
|
|
|
|
+from metaservicesynced.models.servicetype import ServiceType
|
|
|
|
+from tickets.models import Task
|
|
|
|
+from metaservicesynced.models.resource import Resource
|
|
|
|
+
|
|
|
|
+class Service(models.Model):
|
|
|
|
+ """
|
|
|
|
+ service - спецификация услуги каждого конкретного поставщика
|
|
|
|
+ (например, в рамках сервиса многие могут предоставлять услуги перевозки,
|
|
|
|
+ но конкретный шаблон с конкретным тарифом относится к отдельному перевозчику)
|
|
|
|
+ """
|
|
|
|
+
|
|
|
|
+ servicetype_id = models.ForeignKey(ServiceType, on_delete=models.DO_NOTHING, help_text="тип оказываемой услуги по классификатору услуг сервиса")
|
|
|
|
+ id_provider = models.ForeignKey(Provider,on_delete=models.DO_NOTHING, help_text="уникальный идентификатор поставщика услуг (фактически определяет, какой пользователь будет оказывать услугу)")
|
|
|
|
+ resource_id = models.ForeignKey(Resource, on_delete=models.DO_NOTHING, null=True ,help_text="ответственный за ресурс(не всегда). так как ресурсы сами услугу оказать не могут, а также один ресурс может быть представлен в виде разных услуг, то фактически с точки зрения смысла системы ресурс - это как неодушевленный пользователь. Без провайдера, который с его помощью оказывает услугу - никуда. Поле остается пустым, если сервис не предусматривает использование услуг. Стоит обратить внимание, что это не обязательно ответственный за ресурс. Например, за состояние автомобиля может быть ответственен пользователь (он и указывается в таблице со свойствами ресурса), а услугу доступа или перевозки может оказывать иное лицо.")
|
|
|
|
+ requirements = models.CharField(max_length=150, help_text="код необходимого (самый строгий) для того, чтобы ресурс мог стать активным. Оно вставляется автоматом, в соответствии с профилем метасервиса. Далее, если кому-то из партнеров или пользователей надо строже - применяется более строгий вариант на данную связь.")
|
|
|
|
+ id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер.")
|
|
|
|
+ price_alg = models.CharField(max_length=100, help_text="шаблон алгоритма расчета цены для оказываемой услуги (по этой переменной определяется, какую функцию для расчета цены вызывать)")
|
|
|
|
+ price_km = models.DecimalField(max_digits=9, decimal_places=2, help_text="значение параметра стоимости 1км данного поставщика для данного шаблона услуги")
|
|
|
|
+ price_min = models.DecimalField(max_digits=9, decimal_places=2, help_text="значение параметра стоимости 1мин данного поставщика для данного шаблона услуги")
|
|
|
|
+ price_amount = models.DecimalField(max_digits=9, decimal_places=2, help_text="значение параметра стоимости 1 услуги данного поставщика для данного шаблона услуги")
|
|
|
|
+ service_status = models.CharField(max_length=150, help_text="статус спецификации типа услуги, принимает значения Online, Offline, Preorder with Gap. Online/offline выставляются по проверке параметров и желанию пользователя (например, если пользователь переключает себя online, но по какой-то причине ему такую услугу оказывать запрещено - оно не переключится, то есть надо перед сменой значения этого поля всегда запускать проверку)")
|
|
|
|
+ status = models.CharField(max_length=150, help_text="статус обработки заявки в системе заявок. активность на основе системы заяво")
|
|
|
|
+ ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
|
|
|
|
+ is_global = models.BooleanField(default=False, help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация")
|
|
|
|
+ is_visible = models.BooleanField(default=False, help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе")
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = "service"
|
|
|
|
+ verbose_name = "Услуга"
|
|
|
|
+ verbose_name_plural = "Услуги"
|