Browse Source

add valentina models

Evgeny Polivanov 1 year ago
parent
commit
a4642a6a30

+ 309 - 0
migrations/0002_alter_documents_checked_by_alter_documents_user_id_and_more.py

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

+ 62 - 0
models.py

@@ -4,7 +4,69 @@ from SharixAdmin.models import SharixUser
 # Create your models here.
 
 
+class Permissions(models.Model):
+    """
+    Разрешения - (проверки/экзамены). 
+    По смыслу это что-то вроде “документа на право что-то делать” - на данном этапе это ограничено метасервисом/платформой, 
+    при этом он может быть полностью цифровым (выданным платформой/сервисом).
+    """
+    
+    check_date = models.DateTimeField(null=True, help_text="timestamp проверки")
+    id_permissions = models.BigIntegerField(help_text="уникальный идентификатор определяющий наличие разрешения из множества в словаре - выданных пользователю/клиенту/аккаунту")
+    check_level = models.CharField(max_length=10, help_text="тип проверки в соответствии с классификатором проверок.")
+    checked_by = models.ForeignKey(SharixUser, related_name="checked_by", on_delete=models.DO_NOTHING, null=True, help_text="(check-level из классификатора платформы) - информация об уровне проверки. Проверка может быть проведена как платформой, так и мета-сервисом, так и партнером мета-сервиса, а может быть и никем (просто загружен). Указывается, так как достоверность проверки разная. Экзамен, проверенный только на низком уровне, не принимается во внимание как имеющийся до прохождения более высокоуровневой проверки.")
+    user_id = models.ForeignKey(SharixUser, related_name="user_id", on_delete=models.DO_NOTHING, null=True, help_text="уникальный идентификатор пользователя/клиента/аккаунта, которым была пройдена проверка и получено разрешение")
+    status = models.CharField(max_length=150, help_text="статус обработки заявки в системе заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, null=True, help_text="id заявки, по которой происходит проверка статуса relationship. State меняется только в результате изменений в заявке.")
+    id_metaservice = models.BigIntegerField(help_text=" уникальный идентификатор мета-сервиса, необходимый для синхронизации данных.")
+    is_global = models.CharField(max_length=1, help_text="доступна ли информация для хранения в глобальном сервисе/нужна синхронизация")
+    is_visible = models.CharField(max_length=1, help_text="доступна ли информация о наличии разрешения для планирования в цепочке с другими услугами в глобальном сервисе")
+
+    class Meta:
+        db_table = "permissions"
+
+class ServiceType(models.Model):
+    """
+    Перечень типов услуг
+    """
+
+    codename = models.CharField(max_length=255, help_text="латинское наименование услуги в системе")
+    caption = models.CharField(max_length=255, help_text="наименование услуги для отображения пользователю")
+    description = models.TextField(blank=True, help_text="текстовое описание услуги")
+    requirements = models.CharField(max_length=300, help_text="код требований на основе вспомогательных таблиц-справочников")
+    price_type = models.CharField(max_length=150, help_text="ценообразование - код допустимых вариантов или код параметров, принимаемых во внимание и способ их учета (по сути хорошо закодировать формулу)")
+    status = models.CharField(max_length=150, help_text="активность на основе системы заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, null=True, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    id_metaservice = models.BigIntegerField(help_text=" уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер.")
+    link_agreement = models.CharField(max_length=400, help_text="ссылка на договор в вики об оказании услуги данного типа (аренда, перевозка и тп)")
+    is_global = models.CharField(max_length=1, help_text="доступно ли для планирования в цепочке с другими услугами в глобальном сервисе")
+    is_visible = models.CharField(max_length=1, help_text="доступно ли для хранения в глобальном сервисе/нужна синхронизация данных")
+
+    class Meta:
+        db_table = "servicetype"
+
+class Provider(models.Model):
+    """
+    Provider – единица описания поставщика услуг/ответственного лица за определенный ресурс (например, машину). 
+    По сути - это надстройка к клиентскому аккаунту, иллюстрирующая, что данный пользователь может выступать не только в роли потребителя. 
+    То есть, по тому, какие “провайдеры” находятся по идентификатору пользователя - можно установить конкретный список услуг данного пользователя.
+    """
 
+    type = models.CharField(max_length=150, help_text="тип поставщика (партнер/ответственное лицо/поставщик услуг). Смысл такой - провайдер это статус пользователя, который, в зависимости от применения, может нести разный смысл и подразумевает под собой какой-то тип действия. Обычные исполнители - это провайдеры услуг (код 3). Ответственные за какое-то имущество, которые сдают его в аренду - это тоже провайдеры (код 2). Ответственные за набор услуг перед метасервисом (фактически - назначенные админы) - это провайдеры-партнеры (код 1)")
+    #company_id = models.ForeignKey("Company", on_delete=models.DO_NOTHING, null=True, help_text="уникальный идентификатор компании, от лица которой выступает провайдер. Смысл такой - ответственны могут быть только одушевленные лица, компании - не одушевленные. Все услуги предоставляются через компании-партнеры, самозанятые или ИП являются единицами таких компаний.")
+    user_id = models.ForeignKey(SharixUser, on_delete=models.DO_NOTHING, null=True, help_text="уникальный идентификатор конкретного пользователя системы (meta-user), который будет оказывать услугу. Один пользователь может быть провайдером нескольких услуг. Статус провайдера означает, что с данным пользователем может быть установлена связь, как с исполнителем.")
+    id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Один и тот же провайдер может быть для нескольких мета-сервисов, соответственно если происходят изменения в одном, то либо форсируется изменение во всех (если возможно), либо снимается is_global. Соответственно при изменении is_global в true должно происходить согласование с остальными копиями в других сервисах. Нужен в том числе для того, чтобы выяснять, в каких еще сервисах есть этот провайдер.")
+    requirements = models.CharField(max_length=300, help_text="требования для того, чтобы можно было предоставлять услуги любые в этом метасервисе в целом (самые строгие)")
+    status = models.CharField(max_length=150, help_text="статус пользователя в системе относительно прохождения проверок (activity_status) (может быть active только в том случае, если ticket, влияющий на статус - закрыт.")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, null=True, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    location_type = models.CharField(max_length=300, help_text="статическая или динамическая локация оказания услуги. Если статическая, а исполнитель находится существенно за пределами локации - то тогда статус автоматом оффлайн для приема новых заявок.")
+    default_location = models.CharField(max_length=300, help_text="локация по умолчанию для объекта.")
+    is_global = models.CharField(max_length=1, help_text="(аккаунт поставщика услуг) – доступен для планирования в цепочке с другими услугами в глобальном сервисе")
+    is_visible = models.CharField(max_length=1, help_text="(аккаунт поставщика услуг) – доступен для хранения в  глобальном сервисе/необходима синхронизация")
+
+    class Meta:
+        db_table = "provider"
+        
 class Documents(models.Model):
     """
     Documents - это одна таблица со всеми документами.