Evgeny Polivanov 1 ano atrás
pai
commit
cf8846b567
3 arquivos alterados com 106 adições e 6 exclusões
  1. 1 1
      admin.py
  2. 33 0
      migrations/0001_initial.py
  3. 72 5
      models.py

+ 1 - 1
admin.py

@@ -1,5 +1,4 @@
 from django.contrib import admin
-
 from metaservicesynced.models import Permissions, ServiceType, Provider, Documents, Client, Orders, Relationship
 
 
@@ -149,3 +148,4 @@ class RelationshipAdmin(admin.ModelAdmin):
         'is_visible',
     )
     list_filter = ('user_id_who', 'user_id_whom', 'ticket_status')
+

+ 33 - 0
migrations/0001_initial.py

@@ -1,12 +1,20 @@
+<<<<<<< HEAD
 # Generated by Django 4.1.3 on 2023-03-31 19:43
 
 from django.db import migrations, models
+=======
+# Generated by Django 4.1.3 on 2023-03-28 09:31
+
+from django.db import migrations, models
+import django.db.models.deletion
+>>>>>>> dan/metaservicesynced
 
 
 class Migration(migrations.Migration):
 
     initial = True
 
+<<<<<<< HEAD
     dependencies = []
 
     operations = [
@@ -44,6 +52,14 @@ class Migration(migrations.Migration):
             },
         ),
         migrations.CreateModel(
+=======
+    dependencies = [
+        ("tickets", "0001_initial"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+>>>>>>> dan/metaservicesynced
             name="Documents",
             fields=[
                 (
@@ -55,6 +71,7 @@ class Migration(migrations.Migration):
                         verbose_name="ID",
                     ),
                 ),
+<<<<<<< HEAD
                 ("check_date", models.DateTimeField(help_text="timestamp проверки")),
                 (
                     "check_level",
@@ -108,6 +125,19 @@ class Migration(migrations.Migration):
                     models.CharField(
                         help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе",
                         max_length=1,
+=======
+                ("check_date", models.DateTimeField()),
+                ("check_level", models.IntegerField()),
+                ("expire_date", models.DateTimeField()),
+                ("id_metaservice", models.BigIntegerField()),
+                ("requirements", models.CharField(max_length=150)),
+                ("status", models.CharField(max_length=150)),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+>>>>>>> dan/metaservicesynced
                     ),
                 ),
             ],
@@ -115,6 +145,7 @@ class Migration(migrations.Migration):
                 "db_table": "documents",
             },
         ),
+<<<<<<< HEAD
         migrations.CreateModel(
             name="Orders",
             fields=[
@@ -394,4 +425,6 @@ class Migration(migrations.Migration):
                 "db_table": "servicetype",
             },
         ),
+=======
+>>>>>>> dan/metaservicesynced
     ]

+ 72 - 5
models.py

@@ -4,6 +4,27 @@ from SharixAdmin.models import SharixUser
 # Create your models here.
 
 
+class Company(models.Model):
+    legal_name = models.CharField(max_length=150, help_text="настоящее имя юридического лица")
+    repr_id = models.ForeignKey(SharixUser, on_delete=models.DO_NOTHING, help_text="уникальный идентификатор представителя компании. Это обязательно пользователь-провайдер определенного типа. То есть нельзя назначить ответственного, который не может быть ответственным.")
+    inn = models.CharField(max_length=10, unique=True, help_text="ИНН компании")
+    kpp = models.CharField(max_length=9,  help_text="КПП компании")
+    ogrn = models.CharField(max_length=13, help_text="ОГРН компании")
+    bank_name = models.CharField(max_length=150, help_text="Название банка с расчетным счетом")
+    bik = models.CharField(max_length=9, help_text="БИК компании")
+    ks = models.CharField(max_length=50, help_text="Корреспондентский счёт (счёт, открываемый банковской организацией в подразделении самого банка)")
+    rs = models.CharField(max_length=50, help_text="Расчетный счет")
+    address = models.CharField(max_length=150, help_text="Юридический адрес")
+    requirements = models.CharField(max_length=150, help_text="код необходимого для того, чтобы ресурс мог стать активным")
+    status = models.CharField(max_length=150, help_text="статус обработки заявки в системе заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.")
+    is_global = models.CharField(max_length=1, help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация")
+    is_visible = models.CharField(max_length=1, help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе")
+    
+    class Meta:
+            db_table = "company"
+
 class Permissions(models.Model):
     """
     Разрешения - (проверки/экзамены). 
@@ -53,7 +74,7 @@ class Provider(models.Model):
     """
 
     type = models.CharField(max_length=150, help_text="тип поставщика (партнер/ответственное лицо/поставщик услуг). Смысл такой - провайдер это статус пользователя, который, в зависимости от применения, может нести разный смысл и подразумевает под собой какой-то тип действия. Обычные исполнители - это провайдеры услуг (код 3). Ответственные за какое-то имущество, которые сдают его в аренду - это тоже провайдеры (код 2). Ответственные за набор услуг перед метасервисом (фактически - назначенные админы) - это провайдеры-партнеры (код 1)")
-    #company_id = models.ForeignKey("Company", on_delete=models.DO_NOTHING, null=True, help_text="уникальный идентификатор компании, от лица которой выступает провайдер. Смысл такой - ответственны могут быть только одушевленные лица, компании - не одушевленные. Все услуги предоставляются через компании-партнеры, самозанятые или ИП являются единицами таких компаний.")
+    company_id = models.ForeignKey(Company, on_delete=models.DO_NOTHING, null=True, help_text="уникальный идентификатор компании, от лица которой выступает провайдер. Смысл такой - ответственны могут быть только одушевленные лица, компании - не одушевленные. Все услуги предоставляются через компании-партнеры, самозанятые или ИП являются единицами таких компаний.")
     user_id = models.ForeignKey(SharixUser, on_delete=models.DO_NOTHING, null=True, help_text="уникальный идентификатор конкретного пользователя системы (meta-user), который будет оказывать услугу. Один пользователь может быть провайдером нескольких услуг. Статус провайдера означает, что с данным пользователем может быть установлена связь, как с исполнителем.")
     id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер.")
     requirements = models.CharField(max_length=300, help_text="требования для того, чтобы можно было предоставлять услуги любые в этом метасервисе в целом (самые строгие)")
@@ -67,6 +88,50 @@ class Provider(models.Model):
     class Meta:
         db_table = "provider"
         
+
+
+class Resource(models.Model):
+    """
+    Resource/Список ресурсов – автомобили/дома/объекты сервиса
+    """
+    type_id = models.CharField(max_length=10, help_text="идентификатор ресурса")
+    user_id = models.ForeignKey(SharixUser, on_delete=models.DO_NOTHING, help_text="уникальный идентификатор ответственного")
+    requirements = models.CharField(max_length=150, help_text="код необходимого для того, чтобы ресурс мог стать активным")
+    status = models.CharField(max_length=150, help_text="статус обработки заявки в системе заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.")
+    is_global = models.CharField(max_length=1, help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация")
+    is_visible = models.CharField(max_length=1, help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе")
+    
+    class Meta:
+        db_table = "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 выставляется как false.")
+    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="статус спецификации типа услуги")
+    status = models.CharField(max_length=150, help_text="статус обработки заявки в системе заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    is_global = models.CharField(max_length=1, help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация")
+    is_visible = models.CharField(max_length=1, help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе")
+    
+    class Meta:
+        db_table = "service"
+
+
 class Documents(models.Model):
     """
     Documents - это одна таблица со всеми документами.
@@ -85,14 +150,16 @@ class Documents(models.Model):
     datalink = models.TextField(blank=True, help_text="адрес фактического размещения на физическом носителе, если информация настолько велика, что не может храниться внутри БД.")
     doc_type = models.CharField(max_length=150, help_text="тип документа (паспорт/паспорт 1 страница и т д) в соответствии с классификатором типов документов (см описание в Requirements)")
     user_id = models.ForeignKey(SharixUser, related_name="user_id_doc", on_delete=models.DO_NOTHING, help_text="уникальный идентификатор пользователя (конкретного клиентского аккаунта) являющегося владельцем данного документа")
-    #company_id = models.ForeignKey("Company", on_delete=models.DO_NOTHING, null=True, help_text="идентификатор компании, к которой относится документ, если таковая есть (может не быть)")
+    company_id = models.ForeignKey(Company, on_delete=models.DO_NOTHING, null=True, help_text="идентификатор компании, к которой относится документ, если таковая есть (может не быть)")
     is_global = models.CharField(max_length=1, help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация")
     is_visible = models.CharField(max_length=1, help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе")
     checked_by = models.ForeignKey(SharixUser, related_name="checked_by_doc", on_delete=models.DO_NOTHING, null=True, help_text="userid проверившего")
 
+
     class Meta:
         db_table = "documents"
 
+
 class Client(models.Model):
     """
     Client - это таблица с клиентами
@@ -115,7 +182,7 @@ class Orders(models.Model):
     Orders - таблица с заказами
     """
 
-    #service = models.ForeignKey("Service", on_delete=models.DO_NOTHING)
+    service = models.ForeignKey(Service, on_delete=models.DO_NOTHING)
     service_type = models.ForeignKey(ServiceType, on_delete=models.DO_NOTHING)
     state = models.CharField(max_length=150)
     id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.")
@@ -127,7 +194,6 @@ class Orders(models.Model):
     time_start = models.DateTimeField(help_text="")
     time_finish_predicted = models.DateTimeField(help_text="")
     time_finish_real = models.DateTimeField(null=True, help_text="")
-    # SHOULDN'T IT BE A FOREIGN KEY???
     ticket = models.IntegerField()
     predicted_price = models.FloatField()
     real_price = models.FloatField()
@@ -156,4 +222,5 @@ class Relationship(models.Model):
     is_visible = models.CharField(max_length=1, help_text="")
 
     class Meta:
-        db_table = "relationship"
+        db_table = "relationship"
+