Evgeny Polivanov преди 1 година
родител
ревизия
491a9a9450
променени са 5 файла, в които са добавени 645 реда и са изтрити 337 реда
  1. 149 1
      admin.py
  2. 305 25
      migrations/0001_initial.py
  3. 0 309
      migrations/0002_alter_documents_checked_by_alter_documents_user_id_and_more.py
  4. 189 0
      migrations/0002_initial.py
  5. 2 2
      models.py

+ 149 - 1
admin.py

@@ -1,3 +1,151 @@
 from django.contrib import admin
 
-# Register your models here.
+from metaservicesynced.models import Permissions, ServiceType, Provider, Documents, Client, Orders, Relationship
+
+
+@admin.register(Permissions)
+class PermissionsAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'check_date',
+        'id_permissions',
+        'check_level',
+        'checked_by',
+        'user_id',
+        'status',
+        'ticket_status',
+        'id_metaservice',
+        'is_global',
+        'is_visible',
+    )
+    list_filter = ('check_date', 'checked_by', 'user_id', 'ticket_status')
+
+
+@admin.register(ServiceType)
+class ServiceTypeAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'codename',
+        'caption',
+        'description',
+        'requirements',
+        'price_type',
+        'status',
+        'ticket_status',
+        'id_metaservice',
+        'link_agreement',
+        'is_global',
+        'is_visible',
+    )
+    list_filter = ('ticket_status',)
+
+
+@admin.register(Provider)
+class ProviderAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'type',
+        'user_id',
+        'id_metaservice',
+        'requirements',
+        'status',
+        'ticket_status',
+        'location_type',
+        'default_location',
+        'is_global',
+        'is_visible',
+    )
+    list_filter = ('user_id', 'ticket_status')
+
+
+@admin.register(Documents)
+class DocumentsAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'check_date',
+        'check_level',
+        'expire_date',
+        'id_metaservice',
+        'requirements',
+        'status',
+        'ticket_status',
+        'datalink',
+        'doc_type',
+        'user_id',
+        'is_global',
+        'is_visible',
+        'checked_by',
+    )
+    list_filter = (
+        'check_date',
+        'expire_date',
+        'ticket_status',
+        'user_id',
+        'checked_by',
+    )
+
+
+@admin.register(Client)
+class ClientAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'user',
+        'requirements',
+        'status',
+        'ticket_status',
+        'id_metaservice',
+        'is_global',
+        'is_visible',
+    )
+    list_filter = ('user', 'ticket_status')
+
+
+@admin.register(Orders)
+class OrdersAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'service_type',
+        'state',
+        'id_metaservice',
+        'provider',
+        'receiver',
+        'client_id',
+        'time_created',
+        'time_placed',
+        'time_start',
+        'time_finish_predicted',
+        'time_finish_real',
+        'ticket',
+        'predicted_price',
+        'real_price',
+        'is_global',
+        'is_visible',
+    )
+    list_filter = (
+        'service_type',
+        'provider',
+        'receiver',
+        'client_id',
+        'time_created',
+        'time_placed',
+        'time_start',
+        'time_finish_predicted',
+        'time_finish_real',
+    )
+
+
+@admin.register(Relationship)
+class RelationshipAdmin(admin.ModelAdmin):
+    list_display = (
+        'id',
+        'user_id_who',
+        'user_id_whom',
+        'neg_type',
+        'id_metaservice',
+        'requirements',
+        'status',
+        'ticket_status',
+        'is_global',
+        'is_visible',
+    )
+    list_filter = ('user_id_who', 'user_id_whom', 'ticket_status')

+ 305 - 25
migrations/0001_initial.py

@@ -1,20 +1,48 @@
-# Generated by Django 4.1.3 on 2023-03-28 16:32
+# 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 = [
-        ("tickets", "0002_alter_comment_options_alter_attachment_added_by_and_more"),
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-    ]
+    dependencies = []
 
     operations = [
+        migrations.CreateModel(
+            name="Client",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("requirements", models.CharField(max_length=150)),
+                (
+                    "status",
+                    models.CharField(
+                        help_text="активность на основе системы заявок", max_length=150
+                    ),
+                ),
+                (
+                    "id_metaservice",
+                    models.BigIntegerField(
+                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.",
+                        null=True,
+                    ),
+                ),
+                ("is_global", models.CharField(max_length=1)),
+                ("is_visible", models.CharField(max_length=1)),
+            ],
+            options={
+                "db_table": "client",
+            },
+        ),
         migrations.CreateModel(
             name="Documents",
             fields=[
@@ -82,36 +110,288 @@ class Migration(migrations.Migration):
                         max_length=1,
                     ),
                 ),
+            ],
+            options={
+                "db_table": "documents",
+            },
+        ),
+        migrations.CreateModel(
+            name="Orders",
+            fields=[
                 (
-                    "checked_by",
-                    models.ForeignKey(
-                        help_text="userid проверившего",
+                    "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,
-                        on_delete=django.db.models.deletion.DO_NOTHING,
-                        related_name="checked_by",
-                        to=settings.AUTH_USER_MODEL,
                     ),
                 ),
+                ("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=[
                 (
-                    "ticket_status",
-                    models.ForeignKey(
-                        help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
-                        on_delete=django.db.models.deletion.DO_NOTHING,
-                        to="tickets.task",
+                    "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,
                     ),
                 ),
                 (
-                    "user_id",
-                    models.ForeignKey(
-                        help_text="уникальный идентификатор пользователя (конкретного клиентского аккаунта) являющегося владельцем данного документа",
-                        on_delete=django.db.models.deletion.DO_NOTHING,
-                        related_name="user_id",
-                        to=settings.AUTH_USER_MODEL,
+                    "is_visible",
+                    models.CharField(
+                        help_text="доступна ли информация о наличии разрешения для планирования в цепочке с другими услугами в глобальном сервисе",
+                        max_length=1,
                     ),
                 ),
             ],
             options={
-                "db_table": "documents",
+                "db_table": "permissions",
+            },
+        ),
+        migrations.CreateModel(
+            name="Provider",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "type",
+                    models.CharField(
+                        help_text="тип поставщика (партнер/ответственное лицо/поставщик услуг). Смысл такой - провайдер это статус пользователя, который, в зависимости от применения, может нести разный смысл и подразумевает под собой какой-то тип действия. Обычные исполнители - это провайдеры услуг (код 3). Ответственные за какое-то имущество, которые сдают его в аренду - это тоже провайдеры (код 2). Ответственные за набор услуг перед метасервисом (фактически - назначенные админы) - это провайдеры-партнеры (код 1)",
+                        max_length=150,
+                    ),
+                ),
+                (
+                    "id_metaservice",
+                    models.BigIntegerField(
+                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер.",
+                        null=True,
+                    ),
+                ),
+                (
+                    "requirements",
+                    models.CharField(
+                        help_text="требования для того, чтобы можно было предоставлять услуги любые в этом метасервисе в целом (самые строгие)",
+                        max_length=300,
+                    ),
+                ),
+                (
+                    "status",
+                    models.CharField(
+                        help_text="статус пользователя в системе относительно прохождения проверок (activity_status) (может быть active только в том случае, если ticket, влияющий на статус - закрыт.",
+                        max_length=150,
+                    ),
+                ),
+                (
+                    "location_type",
+                    models.CharField(
+                        help_text="статическая или динамическая локация оказания услуги. Если статическая, а исполнитель находится существенно за пределами локации - то тогда статус автоматом оффлайн для приема новых заявок.",
+                        max_length=300,
+                    ),
+                ),
+                (
+                    "default_location",
+                    models.CharField(
+                        help_text="локация по умолчанию для объекта.", max_length=300
+                    ),
+                ),
+                (
+                    "is_global",
+                    models.CharField(
+                        help_text="(аккаунт поставщика услуг) – доступен для планирования в цепочке с другими услугами в глобальном сервисе",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "is_visible",
+                    models.CharField(
+                        help_text="(аккаунт поставщика услуг) – доступен для хранения в  глобальном сервисе/необходима синхронизация",
+                        max_length=1,
+                    ),
+                ),
+            ],
+            options={
+                "db_table": "provider",
+            },
+        ),
+        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)),
+            ],
+            options={
+                "db_table": "relationship",
+            },
+        ),
+        migrations.CreateModel(
+            name="ServiceType",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "codename",
+                    models.CharField(
+                        help_text="латинское наименование услуги в системе",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "caption",
+                    models.CharField(
+                        help_text="наименование услуги для отображения пользователю",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "description",
+                    models.TextField(blank=True, help_text="текстовое описание услуги"),
+                ),
+                (
+                    "requirements",
+                    models.CharField(
+                        help_text="код требований на основе вспомогательных таблиц-справочников",
+                        max_length=300,
+                    ),
+                ),
+                (
+                    "price_type",
+                    models.CharField(
+                        help_text="ценообразование - код допустимых вариантов или код параметров, принимаемых во внимание и способ их учета (по сути хорошо закодировать формулу)",
+                        max_length=150,
+                    ),
+                ),
+                (
+                    "status",
+                    models.CharField(
+                        help_text="активность на основе системы заявок", max_length=150
+                    ),
+                ),
+                (
+                    "id_metaservice",
+                    models.BigIntegerField(
+                        help_text=" уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер."
+                    ),
+                ),
+                (
+                    "link_agreement",
+                    models.CharField(
+                        help_text="ссылка на договор в вики об оказании услуги данного типа (аренда, перевозка и тп)",
+                        max_length=400,
+                    ),
+                ),
+                (
+                    "is_global",
+                    models.CharField(
+                        help_text="доступно ли для планирования в цепочке с другими услугами в глобальном сервисе",
+                        max_length=1,
+                    ),
+                ),
+                (
+                    "is_visible",
+                    models.CharField(
+                        help_text="доступно ли для хранения в глобальном сервисе/нужна синхронизация данных",
+                        max_length=1,
+                    ),
+                ),
+            ],
+            options={
+                "db_table": "servicetype",
             },
         ),
     ]

+ 0 - 309
migrations/0002_alter_documents_checked_by_alter_documents_user_id_and_more.py

@@ -1,309 +0,0 @@
-# Generated by Django 4.1.3 on 2023-03-31 10:15
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("tickets", "0002_alter_comment_options_alter_attachment_added_by_and_more"),
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ("metaservicesynced", "0001_initial"),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            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.AlterField(
-            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.CreateModel(
-            name="ServiceType",
-            fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                (
-                    "codename",
-                    models.CharField(
-                        help_text="латинское наименование услуги в системе",
-                        max_length=255,
-                    ),
-                ),
-                (
-                    "caption",
-                    models.CharField(
-                        help_text="наименование услуги для отображения пользователю",
-                        max_length=255,
-                    ),
-                ),
-                (
-                    "description",
-                    models.TextField(blank=True, help_text="текстовое описание услуги"),
-                ),
-                (
-                    "requirements",
-                    models.CharField(
-                        help_text="код требований на основе вспомогательных таблиц-справочников",
-                        max_length=300,
-                    ),
-                ),
-                (
-                    "price_type",
-                    models.CharField(
-                        help_text="ценообразование - код допустимых вариантов или код параметров, принимаемых во внимание и способ их учета (по сути хорошо закодировать формулу)",
-                        max_length=150,
-                    ),
-                ),
-                (
-                    "status",
-                    models.CharField(
-                        help_text="активность на основе системы заявок", max_length=150
-                    ),
-                ),
-                (
-                    "id_metaservice",
-                    models.BigIntegerField(
-                        help_text=" уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер."
-                    ),
-                ),
-                (
-                    "link_agreement",
-                    models.CharField(
-                        help_text="ссылка на договор в вики об оказании услуги данного типа (аренда, перевозка и тп)",
-                        max_length=400,
-                    ),
-                ),
-                (
-                    "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 последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
-                        null=True,
-                        on_delete=django.db.models.deletion.DO_NOTHING,
-                        to="tickets.task",
-                    ),
-                ),
-            ],
-            options={
-                "db_table": "servicetype",
-            },
-        ),
-        migrations.CreateModel(
-            name="Provider",
-            fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                (
-                    "type",
-                    models.CharField(
-                        help_text="тип поставщика (партнер/ответственное лицо/поставщик услуг). Смысл такой - провайдер это статус пользователя, который, в зависимости от применения, может нести разный смысл и подразумевает под собой какой-то тип действия. Обычные исполнители - это провайдеры услуг (код 3). Ответственные за какое-то имущество, которые сдают его в аренду - это тоже провайдеры (код 2). Ответственные за набор услуг перед метасервисом (фактически - назначенные админы) - это провайдеры-партнеры (код 1)",
-                        max_length=150,
-                    ),
-                ),
-                (
-                    "id_metaservice",
-                    models.BigIntegerField(
-                        help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер.",
-                        null=True,
-                    ),
-                ),
-                (
-                    "requirements",
-                    models.CharField(
-                        help_text="требования для того, чтобы можно было предоставлять услуги любые в этом метасервисе в целом (самые строгие)",
-                        max_length=300,
-                    ),
-                ),
-                (
-                    "status",
-                    models.CharField(
-                        help_text="статус пользователя в системе относительно прохождения проверок (activity_status) (может быть active только в том случае, если ticket, влияющий на статус - закрыт.",
-                        max_length=150,
-                    ),
-                ),
-                (
-                    "location_type",
-                    models.CharField(
-                        help_text="статическая или динамическая локация оказания услуги. Если статическая, а исполнитель находится существенно за пределами локации - то тогда статус автоматом оффлайн для приема новых заявок.",
-                        max_length=300,
-                    ),
-                ),
-                (
-                    "default_location",
-                    models.CharField(
-                        help_text="локация по умолчанию для объекта.", max_length=300
-                    ),
-                ),
-                (
-                    "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 последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.",
-                        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="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",
-                        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",
-                        to=settings.AUTH_USER_MODEL,
-                    ),
-                ),
-            ],
-            options={
-                "db_table": "permissions",
-            },
-        ),
-    ]

+ 189 - 0
migrations/0002_initial.py

@@ -0,0 +1,189 @@
+# 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,
+            ),
+        ),
+    ]

+ 2 - 2
models.py

@@ -85,7 +85,7 @@ 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 проверившего")
@@ -115,7 +115,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.")