from django.db import models from django.contrib.auth import get_user_model from dbsynce.models.client import Client from dbsynce.models.provider import Provider from dbsynce.models.service import Service from dbsynce.models.servicetype import ServiceType from dbsynce.models.company import Company from tickets.models import Ticket class Orders(models.Model): """ Orders - таблица с заказами """ # ID METASERVICE id_metaservice = models.PositiveIntegerField( null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false." ) # DATA status = models.CharField( max_length=150, help_text="текущий статус заказа из возможных на платформе" ) title = models.CharField( max_length=150, help_text="заголовок заказа", default = 'Заголовок' ) note = models.CharField( max_length=150, help_text="задание к заказу", default = 'Записи' ) time_created = models.DateTimeField( auto_now_add=True, help_text="время создания заказа" ) time_placed = models.DateTimeField( help_text="время размещения заказа" ) time_start = models.DateTimeField( null=True, help_text="время начала оказания услуги" ) time_start_real = models.DateTimeField( null=True, help_text="" ) time_start_predicted = models.DateTimeField( null=True, help_text="" ) time_finish_real = models.DateTimeField( null=True, help_text="фактическое время окончания (точное установленное время)" ) time_finish_predicted = models.DateTimeField( help_text="предварительное/расчетное время до окончания оказания услуги" ) real_price = models.FloatField( help_text="цена с учетом тарифа поставщика услуг по факту оказания услуги" ) predicted_price = models.FloatField( help_text="расчетная цена с учетом тарифа поставщика услуг" ) # NOTE: Возможно в будующем можнос сделать символом asap = models.BooleanField( default=False, help_text="Срочный ли заказ" ) # OTHER is_global = models.BooleanField( default=False, help_text="доступна ли информация по заказу для хранения в глобальном сервисе/нужна синхронизация данных. Если is_global = false, то и is_visible для заказа и вглубь по цепочке для всех исполнителей и ресурсов - тоже false." ) is_visible = models.BooleanField( default=False, help_text="доступна ли информация по заказу (время, место) для планирования иных цепочек. Если нет, то все действующие исполнители и ресурсы считаются занятыми на неопределенное время, пока не завершится заказ. Если да - то ресурсы могут использоваться для построения цепочек после планируемого времени завершения, с учетом места." ) # FK ticket = models.ForeignKey( Ticket, null=True, on_delete=models.DO_NOTHING ) service = models.ForeignKey( Service, null=True, on_delete=models.DO_NOTHING, help_text="спецификатор услуги провайдера, нужен для установления цены (id_service - уникальный идентификатор шаблона услуги, необходим для установления цены и исполнителей." ) service_type = models.ForeignKey( ServiceType, null=True, on_delete=models.DO_NOTHING, help_text="тип заказа по классификатору услу" ) client_id = models.ForeignKey( Client, null=True, on_delete=models.DO_NOTHING, help_text="клиент/аккаунт, который оплачивает все оказанные услуги" ) provider = models.ForeignKey( Provider, null=True, on_delete=models.DO_NOTHING, help_text="уникальный идентификатор поставщика услуги/аккаунта, который оказывает услугу. Если несколько провайдеров собираются мета-сервисом в цепочку, где на уровне связи с клиентом нельзя установить одно ответственное лицо, то указывается вспомогательный мета-провайдер сервиса, и это означает, что мета-сервис несет ответственность перед пользователем за сборку услуги воедино." ) receiver = models.ForeignKey( get_user_model(), null=True, related_name="user_id", on_delete=models.DO_NOTHING, help_text="пользователь/аккаунт, который принимает оказываемые услуги" ) company_id = models.ForeignKey( Company, on_delete=models.DO_NOTHING, null=True, help_text="Идентификатор компании, к которой относится документ, если таковая есть (может не быть)" ) class Meta: db_table = "orders" verbose_name = "Заказ" verbose_name_plural = "Заказы"