Evgeny Polivanov 1 vuosi sitten
vanhempi
commit
b6947c198f
3 muutettua tiedostoa jossa 666 lisäystä ja 340 poistoa
  1. 74 3
      admin.py
  2. 592 148
      migrations/0001_initial.py
  3. 0 189
      migrations/0002_initial.py

+ 74 - 3
admin.py

@@ -1,5 +1,29 @@
 from django.contrib import admin
-from metaservicesynced.models import Permissions, ServiceType, Provider, Documents, Client, Orders, Relationship
+from .models import *
+
+
+@admin.register(Company)
+class CompanyAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'legal_name',
+        'repr_id',
+        'inn',
+        'kpp',
+        'ogrn',
+        'bank_name',
+        'bik',
+        'ks',
+        'rs',
+        'address',
+        'requirements',
+        'status',
+        'ticket_status',
+        'id_metaservice',
+        'is_global',
+        'is_visible',
+    )
+    list_filter = ('repr_id', 'ticket_status')
 
 
 @admin.register(Permissions)
@@ -44,6 +68,7 @@ class ProviderAdmin(admin.ModelAdmin):
     list_display = (
         'id',
         'type',
+        'company_id',
         'user_id',
         'id_metaservice',
         'requirements',
@@ -54,9 +79,52 @@ class ProviderAdmin(admin.ModelAdmin):
         'is_global',
         'is_visible',
     )
+    list_filter = ('company_id', 'user_id', 'ticket_status')
+
+
+@admin.register(Resource)
+class ResourceAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'type_id',
+        'user_id',
+        'requirements',
+        'status',
+        'ticket_status',
+        'id_metaservice',
+        'is_global',
+        'is_visible',
+    )
     list_filter = ('user_id', 'ticket_status')
 
 
+@admin.register(Service)
+class ServiceAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'servicetype_id',
+        'id_provider',
+        'resource_id',
+        'requirements',
+        'id_metaservice',
+        'price_alg',
+        'price_km',
+        'price_min',
+        'price_amount',
+        'service_status',
+        'status',
+        'ticket_status',
+        'is_global',
+        'is_visible',
+    )
+    list_filter = (
+        'servicetype_id',
+        'id_provider',
+        'resource_id',
+        'ticket_status',
+    )
+
+
 @admin.register(Documents)
 class DocumentsAdmin(admin.ModelAdmin):
     list_display = (
@@ -71,6 +139,7 @@ class DocumentsAdmin(admin.ModelAdmin):
         'datalink',
         'doc_type',
         'user_id',
+        'company_id',
         'is_global',
         'is_visible',
         'checked_by',
@@ -80,6 +149,7 @@ class DocumentsAdmin(admin.ModelAdmin):
         'expire_date',
         'ticket_status',
         'user_id',
+        'company_id',
         'checked_by',
     )
 
@@ -103,6 +173,7 @@ class ClientAdmin(admin.ModelAdmin):
 class OrdersAdmin(admin.ModelAdmin):
     list_display = (
         'id',
+        'service',
         'service_type',
         'state',
         'id_metaservice',
@@ -121,6 +192,7 @@ class OrdersAdmin(admin.ModelAdmin):
         'is_visible',
     )
     list_filter = (
+        'service',
         'service_type',
         'provider',
         'receiver',
@@ -147,5 +219,4 @@ class RelationshipAdmin(admin.ModelAdmin):
         'is_global',
         'is_visible',
     )
-    list_filter = ('user_id_who', 'user_id_whom', 'ticket_status')
-
+    list_filter = ('user_id_who', 'user_id_whom', 'ticket_status')

+ 592 - 148
migrations/0001_initial.py

@@ -1,21 +1,18 @@
-<<<<<<< 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
+# Generated by Django 4.1.3 on 2023-03-31 20:21
 
+from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
->>>>>>> dan/metaservicesynced
 
 
 class Migration(migrations.Migration):
 
     initial = True
 
-<<<<<<< HEAD
-    dependencies = []
+    dependencies = [
+        ("tickets", "0001_initial"),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
 
     operations = [
         migrations.CreateModel(
@@ -46,108 +43,28 @@ class Migration(migrations.Migration):
                 ),
                 ("is_global", models.CharField(max_length=1)),
                 ("is_visible", models.CharField(max_length=1)),
-            ],
-            options={
-                "db_table": "client",
-            },
-        ),
-        migrations.CreateModel(
-=======
-    dependencies = [
-        ("tickets", "0001_initial"),
-    ]
-
-    operations = [
-        migrations.CreateModel(
->>>>>>> dan/metaservicesynced
-            name="Documents",
-            fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-<<<<<<< HEAD
-                ("check_date", models.DateTimeField(help_text="timestamp проверки")),
-                (
-                    "check_level",
-                    models.IntegerField(
-                        help_text="информация об уровне проверки. Документ может быть проверен как платформой, так и мета-сервисом, так и партнером мета-сервиса, а может быть и никем (просто загружен). Указывается, так как достоверность проверки разная. Документ, проверенный только на низком уровне, не принимается во внимание как имеющийся до прохождения более высокоуровневой проверки. Информацию об уровнях проверки можно посмотреть по словарю Requirements. В данной таблице хранится информация о наиболее высоком уровне проверки."
-                    ),
-                ),
-                (
-                    "expire_date",
-                    models.DateTimeField(
-                        help_text="срок окончания действия документа.", null=True
-                    ),
-                ),
-                (
-                    "id_metaservice",
-                    models.BigIntegerField(
-                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.",
-                        null=True,
-                    ),
-                ),
-                ("requirements", models.CharField(max_length=150)),
-                (
-                    "status",
-                    models.CharField(
-                        help_text="активность на основе системы заявок", max_length=150
-                    ),
-                ),
-                (
-                    "datalink",
-                    models.TextField(
-                        blank=True,
-                        help_text="адрес фактического размещения на физическом носителе, если информация настолько велика, что не может храниться внутри БД.",
-                    ),
-                ),
-                (
-                    "doc_type",
-                    models.CharField(
-                        help_text="тип документа (паспорт/паспорт 1 страница и т д) в соответствии с классификатором типов документов (см описание в Requirements)",
-                        max_length=150,
-                    ),
-                ),
                 (
-                    "is_global",
-                    models.CharField(
-                        help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация",
-                        max_length=1,
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
                     ),
                 ),
                 (
-                    "is_visible",
-                    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",
+                    "user",
                     models.ForeignKey(
                         on_delete=django.db.models.deletion.DO_NOTHING,
-                        to="tickets.task",
->>>>>>> dan/metaservicesynced
+                        to=settings.AUTH_USER_MODEL,
                     ),
                 ),
             ],
             options={
-                "db_table": "documents",
+                "db_table": "client",
             },
         ),
-<<<<<<< HEAD
         migrations.CreateModel(
-            name="Orders",
+            name="Company",
             fields=[
                 (
                     "id",
@@ -158,56 +75,44 @@ class Migration(migrations.Migration):
                         verbose_name="ID",
                     ),
                 ),
-                ("state", models.CharField(max_length=150)),
                 (
-                    "id_metaservice",
-                    models.BigIntegerField(
-                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.",
-                        null=True,
+                    "legal_name",
+                    models.CharField(
+                        help_text="настоящее имя юридического лица", max_length=150
                     ),
                 ),
-                ("time_created", models.DateTimeField(auto_now_add=True)),
-                ("time_placed", models.DateTimeField()),
-                ("time_start", models.DateTimeField()),
-                ("time_finish_predicted", models.DateTimeField()),
-                ("time_finish_real", models.DateTimeField(null=True)),
-                ("ticket", models.IntegerField()),
-                ("predicted_price", models.FloatField()),
-                ("real_price", models.FloatField()),
-                ("is_global", models.CharField(max_length=1)),
-                ("is_visible", models.CharField(max_length=1)),
-            ],
-            options={
-                "db_table": "orders",
-            },
-        ),
-        migrations.CreateModel(
-            name="Permissions",
-            fields=[
                 (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
+                    "inn",
+                    models.CharField(
+                        help_text="ИНН компании", max_length=10, unique=True
                     ),
                 ),
+                ("kpp", models.CharField(help_text="КПП компании", max_length=9)),
+                ("ogrn", models.CharField(help_text="ОГРН компании", max_length=13)),
                 (
-                    "check_date",
-                    models.DateTimeField(help_text="timestamp проверки", null=True),
+                    "bank_name",
+                    models.CharField(
+                        help_text="Название банка с расчетным счетом", max_length=150
+                    ),
                 ),
+                ("bik", models.CharField(help_text="БИК компании", max_length=9)),
                 (
-                    "id_permissions",
-                    models.BigIntegerField(
-                        help_text="уникальный идентификатор определяющий наличие разрешения из множества в словаре - выданных пользователю/клиенту/аккаунту"
+                    "ks",
+                    models.CharField(
+                        help_text="Корреспондентский счёт (счёт, открываемый банковской организацией в подразделении самого банка)",
+                        max_length=50,
                     ),
                 ),
+                ("rs", models.CharField(help_text="Расчетный счет", max_length=50)),
                 (
-                    "check_level",
+                    "address",
+                    models.CharField(help_text="Юридический адрес", max_length=150),
+                ),
+                (
+                    "requirements",
                     models.CharField(
-                        help_text="тип проверки в соответствии с классификатором проверок.",
-                        max_length=10,
+                        help_text="код необходимого для того, чтобы ресурс мог стать активным",
+                        max_length=150,
                     ),
                 ),
                 (
@@ -220,26 +125,43 @@ class Migration(migrations.Migration):
                 (
                     "id_metaservice",
                     models.BigIntegerField(
-                        help_text=" уникальный идентификатор мета-сервиса, необходимый для синхронизации данных."
+                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.",
+                        null=True,
                     ),
                 ),
                 (
                     "is_global",
                     models.CharField(
-                        help_text="доступна ли информация для хранения в глобальном сервисе/нужна синхронизация",
+                        help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация",
                         max_length=1,
                     ),
                 ),
                 (
                     "is_visible",
                     models.CharField(
-                        help_text="доступна ли информация о наличии разрешения для планирования в цепочке с другими услугами в глобальном сервисе",
+                        help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе",
                         max_length=1,
                     ),
                 ),
+                (
+                    "repr_id",
+                    models.ForeignKey(
+                        help_text="уникальный идентификатор представителя компании. Это обязательно пользователь-провайдер определенного типа. То есть нельзя назначить ответственного, который не может быть ответственным.",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
             ],
             options={
-                "db_table": "permissions",
+                "db_table": "company",
             },
         ),
         migrations.CreateModel(
@@ -309,13 +231,40 @@ class Migration(migrations.Migration):
                         max_length=1,
                     ),
                 ),
+                (
+                    "company_id",
+                    models.ForeignKey(
+                        help_text="уникальный идентификатор компании, от лица которой выступает провайдер. Смысл такой - ответственны могут быть только одушевленные лица, компании - не одушевленные. Все услуги предоставляются через компании-партнеры, самозанятые или ИП являются единицами таких компаний.",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.company",
+                    ),
+                ),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
+                (
+                    "user_id",
+                    models.ForeignKey(
+                        help_text="уникальный идентификатор конкретного пользователя системы (meta-user), который будет оказывать услугу. Один пользователь может быть провайдером нескольких услуг. Статус провайдера означает, что с данным пользователем может быть установлена связь, как с исполнителем.",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
             ],
             options={
                 "db_table": "provider",
             },
         ),
         migrations.CreateModel(
-            name="Relationship",
+            name="Resource",
             fields=[
                 (
                     "id",
@@ -326,7 +275,24 @@ class Migration(migrations.Migration):
                         verbose_name="ID",
                     ),
                 ),
-                ("neg_type", models.IntegerField()),
+                (
+                    "type_id",
+                    models.CharField(help_text="идентификатор ресурса", max_length=10),
+                ),
+                (
+                    "requirements",
+                    models.CharField(
+                        help_text="код необходимого для того, чтобы ресурс мог стать активным",
+                        max_length=150,
+                    ),
+                ),
+                (
+                    "status",
+                    models.CharField(
+                        help_text="статус обработки заявки в системе заявок",
+                        max_length=150,
+                    ),
+                ),
                 (
                     "id_metaservice",
                     models.BigIntegerField(
@@ -334,13 +300,39 @@ class Migration(migrations.Migration):
                         null=True,
                     ),
                 ),
-                ("requirements", models.CharField(max_length=150)),
-                ("status", models.CharField(max_length=150)),
-                ("is_global", models.CharField(max_length=1)),
-                ("is_visible", models.CharField(max_length=1)),
+                (
+                    "is_global",
+                    models.CharField(
+                        help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "is_visible",
+                    models.CharField(
+                        help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
+                (
+                    "user_id",
+                    models.ForeignKey(
+                        help_text="уникальный идентификатор ответственного",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
             ],
             options={
-                "db_table": "relationship",
+                "db_table": "resource",
             },
         ),
         migrations.CreateModel(
@@ -420,11 +412,463 @@ class Migration(migrations.Migration):
                         max_length=1,
                     ),
                 ),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
             ],
             options={
                 "db_table": "servicetype",
             },
         ),
-=======
->>>>>>> dan/metaservicesynced
+        migrations.CreateModel(
+            name="Service",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "requirements",
+                    models.CharField(
+                        help_text="код необходимого для того, чтобы ресурс мог стать активным",
+                        max_length=150,
+                    ),
+                ),
+                (
+                    "id_metaservice",
+                    models.BigIntegerField(
+                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.",
+                        null=True,
+                    ),
+                ),
+                (
+                    "price_alg",
+                    models.CharField(
+                        help_text="шаблон алгоритма расчета цены для оказываемой услуги",
+                        max_length=100,
+                    ),
+                ),
+                (
+                    "price_km",
+                    models.DecimalField(
+                        decimal_places=2,
+                        help_text="значение параметра стоимости 1км данного поставщика для данного шаблона услуги",
+                        max_digits=9,
+                    ),
+                ),
+                (
+                    "price_min",
+                    models.DecimalField(
+                        decimal_places=2,
+                        help_text="значение параметра стоимости 1мин данного поставщика для данного шаблона услуги",
+                        max_digits=9,
+                    ),
+                ),
+                (
+                    "price_amount",
+                    models.DecimalField(
+                        decimal_places=2,
+                        help_text="значение параметра стоимости 1 услуги данного поставщика для данного шаблона услуги",
+                        max_digits=9,
+                    ),
+                ),
+                (
+                    "service_status",
+                    models.CharField(
+                        help_text="статус спецификации типа услуги", max_length=150
+                    ),
+                ),
+                (
+                    "status",
+                    models.CharField(
+                        help_text="статус обработки заявки в системе заявок",
+                        max_length=150,
+                    ),
+                ),
+                (
+                    "is_global",
+                    models.CharField(
+                        help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "is_visible",
+                    models.CharField(
+                        help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "id_provider",
+                    models.ForeignKey(
+                        help_text="идентификатор поставщика услуг",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.provider",
+                    ),
+                ),
+                (
+                    "resource_id",
+                    models.ForeignKey(
+                        help_text="ответственный за ресурс(не всегда)",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.resource",
+                    ),
+                ),
+                (
+                    "servicetype_id",
+                    models.ForeignKey(
+                        help_text="тип оказываемой услуги по классификатору услуг сервиса",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.servicetype",
+                    ),
+                ),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
+            ],
+            options={
+                "db_table": "service",
+            },
+        ),
+        migrations.CreateModel(
+            name="Relationship",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("neg_type", models.IntegerField()),
+                (
+                    "id_metaservice",
+                    models.BigIntegerField(
+                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.",
+                        null=True,
+                    ),
+                ),
+                ("requirements", models.CharField(max_length=150)),
+                ("status", models.CharField(max_length=150)),
+                ("is_global", models.CharField(max_length=1)),
+                ("is_visible", models.CharField(max_length=1)),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
+                (
+                    "user_id_who",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        related_name="user_id_who",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "user_id_whom",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        related_name="user_id_whom",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+            ],
+            options={
+                "db_table": "relationship",
+            },
+        ),
+        migrations.CreateModel(
+            name="Permissions",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "check_date",
+                    models.DateTimeField(help_text="timestamp проверки", null=True),
+                ),
+                (
+                    "id_permissions",
+                    models.BigIntegerField(
+                        help_text="уникальный идентификатор определяющий наличие разрешения из множества в словаре - выданных пользователю/клиенту/аккаунту"
+                    ),
+                ),
+                (
+                    "check_level",
+                    models.CharField(
+                        help_text="тип проверки в соответствии с классификатором проверок.",
+                        max_length=10,
+                    ),
+                ),
+                (
+                    "status",
+                    models.CharField(
+                        help_text="статус обработки заявки в системе заявок",
+                        max_length=150,
+                    ),
+                ),
+                (
+                    "id_metaservice",
+                    models.BigIntegerField(
+                        help_text=" уникальный идентификатор мета-сервиса, необходимый для синхронизации данных."
+                    ),
+                ),
+                (
+                    "is_global",
+                    models.CharField(
+                        help_text="доступна ли информация для хранения в глобальном сервисе/нужна синхронизация",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "is_visible",
+                    models.CharField(
+                        help_text="доступна ли информация о наличии разрешения для планирования в цепочке с другими услугами в глобальном сервисе",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "checked_by",
+                    models.ForeignKey(
+                        help_text="(check-level из классификатора платформы) - информация об уровне проверки. Проверка может быть проведена как платформой, так и мета-сервисом, так и партнером мета-сервиса, а может быть и никем (просто загружен). Указывается, так как достоверность проверки разная. Экзамен, проверенный только на низком уровне, не принимается во внимание как имеющийся до прохождения более высокоуровневой проверки.",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        related_name="checked_by_perm",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id заявки, по которой происходит проверка статуса relationship. State меняется только в результате изменений в заявке.",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
+                (
+                    "user_id",
+                    models.ForeignKey(
+                        help_text="уникальный идентификатор пользователя/клиента/аккаунта, которым была пройдена проверка и получено разрешение",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        related_name="user_id_perm",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+            ],
+            options={
+                "db_table": "permissions",
+            },
+        ),
+        migrations.CreateModel(
+            name="Orders",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("state", models.CharField(max_length=150)),
+                (
+                    "id_metaservice",
+                    models.BigIntegerField(
+                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.",
+                        null=True,
+                    ),
+                ),
+                ("time_created", models.DateTimeField(auto_now_add=True)),
+                ("time_placed", models.DateTimeField()),
+                ("time_start", models.DateTimeField()),
+                ("time_finish_predicted", models.DateTimeField()),
+                ("time_finish_real", models.DateTimeField(null=True)),
+                ("ticket", models.IntegerField()),
+                ("predicted_price", models.FloatField()),
+                ("real_price", models.FloatField()),
+                ("is_global", models.CharField(max_length=1)),
+                ("is_visible", models.CharField(max_length=1)),
+                (
+                    "client_id",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.client",
+                    ),
+                ),
+                (
+                    "provider",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.provider",
+                    ),
+                ),
+                (
+                    "receiver",
+                    models.ForeignKey(
+                        help_text="уникальный идентификатор пользователя (конкретного клиентского аккаунта) являющегося владельцем данного документа",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        related_name="user_id",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "service",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.service",
+                    ),
+                ),
+                (
+                    "service_type",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.servicetype",
+                    ),
+                ),
+            ],
+            options={
+                "db_table": "orders",
+            },
+        ),
+        migrations.CreateModel(
+            name="Documents",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("check_date", models.DateTimeField(help_text="timestamp проверки")),
+                (
+                    "check_level",
+                    models.IntegerField(
+                        help_text="информация об уровне проверки. Документ может быть проверен как платформой, так и мета-сервисом, так и партнером мета-сервиса, а может быть и никем (просто загружен). Указывается, так как достоверность проверки разная. Документ, проверенный только на низком уровне, не принимается во внимание как имеющийся до прохождения более высокоуровневой проверки. Информацию об уровнях проверки можно посмотреть по словарю Requirements. В данной таблице хранится информация о наиболее высоком уровне проверки."
+                    ),
+                ),
+                (
+                    "expire_date",
+                    models.DateTimeField(
+                        help_text="срок окончания действия документа.", null=True
+                    ),
+                ),
+                (
+                    "id_metaservice",
+                    models.BigIntegerField(
+                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.",
+                        null=True,
+                    ),
+                ),
+                ("requirements", models.CharField(max_length=150)),
+                (
+                    "status",
+                    models.CharField(
+                        help_text="активность на основе системы заявок", max_length=150
+                    ),
+                ),
+                (
+                    "datalink",
+                    models.TextField(
+                        blank=True,
+                        help_text="адрес фактического размещения на физическом носителе, если информация настолько велика, что не может храниться внутри БД.",
+                    ),
+                ),
+                (
+                    "doc_type",
+                    models.CharField(
+                        help_text="тип документа (паспорт/паспорт 1 страница и т д) в соответствии с классификатором типов документов (см описание в Requirements)",
+                        max_length=150,
+                    ),
+                ),
+                (
+                    "is_global",
+                    models.CharField(
+                        help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "is_visible",
+                    models.CharField(
+                        help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "checked_by",
+                    models.ForeignKey(
+                        help_text="userid проверившего",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        related_name="checked_by_doc",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "company_id",
+                    models.ForeignKey(
+                        help_text="идентификатор компании, к которой относится документ, если таковая есть (может не быть)",
+                        null=True,
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="metaservicesynced.company",
+                    ),
+                ),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
+                (
+                    "user_id",
+                    models.ForeignKey(
+                        help_text="уникальный идентификатор пользователя (конкретного клиентского аккаунта) являющегося владельцем данного документа",
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        related_name="user_id_doc",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+            ],
+            options={
+                "db_table": "documents",
+            },
+        ),
     ]

+ 0 - 189
migrations/0002_initial.py

@@ -1,189 +0,0 @@
-# Generated by Django 4.1.3 on 2023-03-31 19:43
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    initial = True
-
-    dependencies = [
-        ("metaservicesynced", "0001_initial"),
-        ("tickets", "0001_initial"),
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="servicetype",
-            name="ticket_status",
-            field=models.ForeignKey(
-                help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
-                null=True,
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="tickets.task",
-            ),
-        ),
-        migrations.AddField(
-            model_name="relationship",
-            name="ticket_status",
-            field=models.ForeignKey(
-                help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="tickets.task",
-            ),
-        ),
-        migrations.AddField(
-            model_name="relationship",
-            name="user_id_who",
-            field=models.ForeignKey(
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                related_name="user_id_who",
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-        migrations.AddField(
-            model_name="relationship",
-            name="user_id_whom",
-            field=models.ForeignKey(
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                related_name="user_id_whom",
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-        migrations.AddField(
-            model_name="provider",
-            name="ticket_status",
-            field=models.ForeignKey(
-                help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
-                null=True,
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="tickets.task",
-            ),
-        ),
-        migrations.AddField(
-            model_name="provider",
-            name="user_id",
-            field=models.ForeignKey(
-                help_text="уникальный идентификатор конкретного пользователя системы (meta-user), который будет оказывать услугу. Один пользователь может быть провайдером нескольких услуг. Статус провайдера означает, что с данным пользователем может быть установлена связь, как с исполнителем.",
-                null=True,
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-        migrations.AddField(
-            model_name="permissions",
-            name="checked_by",
-            field=models.ForeignKey(
-                help_text="(check-level из классификатора платформы) - информация об уровне проверки. Проверка может быть проведена как платформой, так и мета-сервисом, так и партнером мета-сервиса, а может быть и никем (просто загружен). Указывается, так как достоверность проверки разная. Экзамен, проверенный только на низком уровне, не принимается во внимание как имеющийся до прохождения более высокоуровневой проверки.",
-                null=True,
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                related_name="checked_by_perm",
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-        migrations.AddField(
-            model_name="permissions",
-            name="ticket_status",
-            field=models.ForeignKey(
-                help_text="id заявки, по которой происходит проверка статуса relationship. State меняется только в результате изменений в заявке.",
-                null=True,
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="tickets.task",
-            ),
-        ),
-        migrations.AddField(
-            model_name="permissions",
-            name="user_id",
-            field=models.ForeignKey(
-                help_text="уникальный идентификатор пользователя/клиента/аккаунта, которым была пройдена проверка и получено разрешение",
-                null=True,
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                related_name="user_id_perm",
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-        migrations.AddField(
-            model_name="orders",
-            name="client_id",
-            field=models.ForeignKey(
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="metaservicesynced.client",
-            ),
-        ),
-        migrations.AddField(
-            model_name="orders",
-            name="provider",
-            field=models.ForeignKey(
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="metaservicesynced.provider",
-            ),
-        ),
-        migrations.AddField(
-            model_name="orders",
-            name="receiver",
-            field=models.ForeignKey(
-                help_text="уникальный идентификатор пользователя (конкретного клиентского аккаунта) являющегося владельцем данного документа",
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                related_name="user_id",
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-        migrations.AddField(
-            model_name="orders",
-            name="service_type",
-            field=models.ForeignKey(
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="metaservicesynced.servicetype",
-            ),
-        ),
-        migrations.AddField(
-            model_name="documents",
-            name="checked_by",
-            field=models.ForeignKey(
-                help_text="userid проверившего",
-                null=True,
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                related_name="checked_by_doc",
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-        migrations.AddField(
-            model_name="documents",
-            name="ticket_status",
-            field=models.ForeignKey(
-                help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="tickets.task",
-            ),
-        ),
-        migrations.AddField(
-            model_name="documents",
-            name="user_id",
-            field=models.ForeignKey(
-                help_text="уникальный идентификатор пользователя (конкретного клиентского аккаунта) являющегося владельцем данного документа",
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                related_name="user_id_doc",
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-        migrations.AddField(
-            model_name="client",
-            name="ticket_status",
-            field=models.ForeignKey(
-                help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to="tickets.task",
-            ),
-        ),
-        migrations.AddField(
-            model_name="client",
-            name="user",
-            field=models.ForeignKey(
-                on_delete=django.db.models.deletion.DO_NOTHING,
-                to=settings.AUTH_USER_MODEL,
-            ),
-        ),
-    ]