Răsfoiți Sursa

add metaservicesynced

Староверов Данила Андреевич 1 an în urmă
comite
6a9f0860f0
9 a modificat fișierele cu 161 adăugiri și 0 ștergeri
  1. 4 0
      .gitignore
  2. 0 0
      __init__.py
  3. 3 0
      admin.py
  4. 6 0
      apps.py
  5. 46 0
      migrations/0001_initial.py
  6. 0 0
      migrations/__init__.py
  7. 96 0
      models.py
  8. 3 0
      tests.py
  9. 3 0
      views.py

+ 4 - 0
.gitignore

@@ -0,0 +1,4 @@
+# Python
+__pycache__/
+*.py[cod]
+*$py.class

+ 0 - 0
__init__.py


+ 3 - 0
admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class MetaservicesyncedConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "metaservicesynced"

+ 46 - 0
migrations/0001_initial.py

@@ -0,0 +1,46 @@
+# Generated by Django 4.1.3 on 2023-03-28 09:31
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ("tickets", "0001_initial"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="Documents",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("check_date", models.DateTimeField()),
+                ("check_level", models.IntegerField()),
+                ("expire_date", models.DateTimeField()),
+                ("id_metaservice", models.BigIntegerField()),
+                ("requirements", models.CharField(max_length=150)),
+                ("status", models.CharField(max_length=150)),
+                (
+                    "ticket_status",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.DO_NOTHING,
+                        to="tickets.task",
+                    ),
+                ),
+            ],
+            options={
+                "db_table": "documents",
+            },
+        ),
+    ]

+ 0 - 0
migrations/__init__.py


+ 96 - 0
models.py

@@ -0,0 +1,96 @@
+from django.db import models
+from tickets.models import Task
+from SharixAdmin.models import SharixUser
+# Create your models here.
+
+# Валя: Provider, ServiceType, Permissions
+# Виталий: Orders, Client, Relationship
+# Данила: Service, Company, Resource
+
+class Company(models.Model):
+    legal_name = models.CharField(max_length=150, help_text="настоящее имя юридического лица")
+    repr_id = models.ForeignKey(SharixUser, on_delete=models.DO_NOTHING, help_text="уникальный идентификатор представителя компании. Это обязательно пользователь-провайдер определенного типа. То есть нельзя назначить ответственного, который не может быть ответственным.")
+    inn = models.CharField(max_length=10, unique=True, help_text="ИНН компании")
+    kpp = models.CharField(max_length=9,  help_text="КПП компании")
+    ogrn = models.CharField(max_length=13, help_text="ОГРН компании")
+    bank_name = models.CharField(max_length=150, help_text="Название банка с расчетным счетом")
+    bik = models.CharField(max_length=9, help_text="БИК компании")
+    ks = models.CharField(max_length=50, help_text="Корреспондентский счёт (счёт, открываемый банковской организацией в подразделении самого банка)")
+    rs = models.CharField(max_length=50, help_text="Расчетный счет")
+    address = models.CharField(max_length=150, help_text="Юридический адрес")
+    requirements = models.CharField(max_length=150, help_text="код необходимого для того, чтобы ресурс мог стать активным")
+    status = models.CharField(max_length=150, help_text="статус обработки заявки в системе заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.")
+    is_global = models.CharField(max_length=1, help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация")
+    is_visible = models.CharField(max_length=1, help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе")
+    
+    class Meta:
+            db_table = "company"
+
+class Resource(models.Model):
+    """
+    Resource/Список ресурсов – автомобили/дома/объекты сервиса
+    """
+    type_id = models.CharField(max_length=10, help_text="идентификатор ресурса")
+    user_id = models.ForeignKey(SharixUser, on_delete=models.DO_NOTHING, help_text="уникальный идентификатор ответственного")
+    requirements = models.CharField(max_length=150, help_text="код необходимого для того, чтобы ресурс мог стать активным")
+    status = models.CharField(max_length=150, help_text="статус обработки заявки в системе заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.")
+    is_global = models.CharField(max_length=1, help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация")
+    is_visible = models.CharField(max_length=1, help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе")
+    
+    class Meta:
+        db_table = "resource"
+class Service(models.Model):
+    """
+    service - спецификация услуги каждого конкретного поставщика 
+    (например, в рамках сервиса многие могут предоставлять услуги перевозки, 
+    но конкретный шаблон с конкретным тарифом относится к отдельному перевозчику)
+    """
+
+    servicetype_id = models.ForeignKey("ServiceType", on_delete=models.DO_NOTHING, help_text="тип оказываемой услуги по классификатору услуг сервиса")
+    id_provider = models.ForeignKey("Provider",on_delete=models.DO_NOTHING, help_text="идентификатор поставщика услуг")
+    resource_id = models.ForeignKey(Resource, on_delete=models.DO_NOTHING, null=True ,help_text="ответственный за ресурс(не всегда)")
+    requirements = models.CharField(max_length=150, help_text="код необходимого для того, чтобы ресурс мог стать активным")
+    id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.")
+    price_alg = models.CharField(max_length=100, help_text="шаблон алгоритма расчета цены для оказываемой услуги")
+    price_km = models.DecimalField(max_digits=9, decimal_places=2, help_text="значение параметра стоимости 1км данного поставщика для данного шаблона услуги")
+    price_min =  models.DecimalField(max_digits=9, decimal_places=2, help_text="значение параметра стоимости 1мин данного поставщика для данного шаблона услуги")
+    price_amount =  models.DecimalField(max_digits=9, decimal_places=2, help_text="значение параметра стоимости 1 услуги данного поставщика для данного шаблона услуги")
+    service_status = models.CharField(max_length=150, help_text="статус спецификации типа услуги")
+    status = models.CharField(max_length=150, help_text="статус обработки заявки в системе заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    is_global = models.CharField(max_length=1, help_text="доступны ли документы для хранения в глобальном сервисе/нужна синхронизация")
+    is_visible = models.CharField(max_length=1, help_text="доступна ли информация о наличии документов для планирования в цепочке с другими услугами в глобальном сервисе")
+    
+    class Meta:
+        db_table = "service"
+
+class Documents(models.Model):
+    """
+    Documents - это одна таблица со всеми документами.
+    Вообще в концепции предполагалось, что таких таблиц должно быть много под каждый тип для удобства поиска. 
+    То есть отдельно таблица с паспортами, отдельно с правами, отдельно с какими-нибудь разрешениями и так далее. 
+    Что пока непонятно - документов может быть много разных.
+    """
+
+    check_date = models.DateTimeField(help_text="timestamp проверки")
+    check_level = models.IntegerField(help_text="информация об уровне проверки. Документ может быть проверен как платформой, так и мета-сервисом, так и партнером мета-сервиса, а может быть и никем (просто загружен). Указывается, так как достоверность проверки разная. Документ, проверенный только на низком уровне, не принимается во внимание как имеющийся до прохождения более высокоуровневой проверки. Информацию об уровнях проверки можно посмотреть по словарю Requirements. В данной таблице хранится информация о наиболее высоком уровне проверки.")
+    expire_date = models.DateTimeField(null=True, help_text="срок окончания действия документа.")
+    id_metaservice = models.BigIntegerField(null=True, help_text="уникальный идентификатор мета-сервиса, необходимый для синхронизации данных. Если при синхронизации возникает конфликт (несовместимость) с другим сервисом, предлагается или форсировать изменения везде (если возможно), либо is_global выставляется как false.")
+    requirements = models.CharField(max_length=150)
+    status = models.CharField(max_length=150, help_text="активность на основе системы заявок")
+    ticket_status = models.ForeignKey(Task, on_delete=models.DO_NOTHING, help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю.")
+    datalink = models.TextField(blank=True, help_text="адрес фактического размещения на физическом носителе, если информация настолько велика, что не может храниться внутри БД.")
+    doc_type = models.CharField(help_text="тип документа (паспорт/паспорт 1 страница и т д) в соответствии с классификатором типов документов (см описание в Requirements)")
+    user_id = models.ForeignKey(SharixUser, on_delete=models.DO_NOTHING, 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, on_delete=models.DO_NOTHING, null=True, help_text="userid проверившего")
+
+    class Meta:
+        db_table = "documents"
+

+ 3 - 0
tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 3 - 0
views.py

@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.