feat(admin): expand exchange admin and unify admin UX
Some checks failed
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 2m39s
CI/CD Pipeline / Run Tests (pull_request) Successful in 3m0s
CI/CD Pipeline / Run API Inventory E2E Tests (pull_request) Successful in 35s
CI/CD Pipeline / Telegram Notify Success (pull_request) Has been skipped

This commit is contained in:
2026-03-24 13:58:24 +01:00
parent 559b9bc5ef
commit c98ba76081
33 changed files with 2915 additions and 209 deletions

View File

@@ -17,13 +17,20 @@ class ParserLoadLog(TimestampMixin, models.Model):
"""
class Source(models.TextChoices):
INDUSTRIAL = "industrial", _("Промышленное производство")
INDUSTRIAL = "industrial", _("Сертификаты промышленного производства")
INDUSTRIAL_PRODUCTS = "industrial_products", _("Реестр промышленной продукции")
MANUFACTURES = "manufactures", _("Реестр производителей")
INSPECTIONS = "inspections", _("Единый реестр проверок")
PROCUREMENTS = "procurements", _("Государственные закупки")
PROCUREMENTS = "procurements", _("Единая информационная система закупок")
FNS_REPORTS = "fns_reports", _("Бухгалтерская отчетность ФНС")
class Status(models.TextChoices):
SUCCESS = "success", _("Успешно")
FAILED = "failed", _("Ошибка")
IN_PROGRESS = "in_progress", _("В процессе")
PENDING = "pending", _("В очереди")
SKIPPED = "skipped", _("Пропущено")
batch_id = models.PositiveIntegerField(
_("ID пакета"),
db_index=True,
@@ -44,7 +51,8 @@ class ParserLoadLog(TimestampMixin, models.Model):
status = models.CharField(
_("статус"),
max_length=20,
default="success",
choices=Status.choices,
default=Status.SUCCESS,
help_text=_("Статус загрузки"),
)
error_message = models.TextField(
@@ -55,8 +63,8 @@ class ParserLoadLog(TimestampMixin, models.Model):
class Meta:
db_table = "parsers_load_log"
verbose_name = _("лог загрузки")
verbose_name_plural = _("логи загрузок")
verbose_name = _("обновление источника")
verbose_name_plural = _("история обновлений")
ordering = ["-created_at"]
indexes = [
models.Index(fields=["source", "batch_id"]),
@@ -149,8 +157,8 @@ class IndustrialCertificateRecord(TimestampMixin, models.Model):
class Meta:
db_table = "parsers_industrial_certificate"
verbose_name = _("сертификат промпроизводства")
verbose_name_plural = _("сертификаты промпроизводства")
verbose_name = _("сертификат промышленного производства")
verbose_name_plural = _("Сертификаты промышленного производства")
ordering = ["-created_at"]
indexes = [
models.Index(fields=["inn", "certificate_number"]),
@@ -212,8 +220,8 @@ class ManufacturerRecord(TimestampMixin, models.Model):
class Meta:
db_table = "parsers_manufacturer"
verbose_name = _("производитель")
verbose_name_plural = _("производители")
verbose_name = _("запись реестра производителей")
verbose_name_plural = _("Реестр производителей")
ordering = ["-created_at"]
indexes = [
models.Index(fields=["load_batch", "inn"]),
@@ -303,8 +311,8 @@ class IndustrialProductRecord(TimestampMixin, models.Model):
class Meta:
db_table = "parsers_industrial_product"
verbose_name = _("промышленная продукция")
verbose_name_plural = _("промышленная продукция")
verbose_name = _("запись реестра промышленной продукции")
verbose_name_plural = _("Реестр промышленной продукции")
ordering = ["-created_at"]
indexes = [
models.Index(fields=["load_batch", "inn"]),
@@ -507,8 +515,8 @@ class InspectionRecord(TimestampMixin, models.Model):
class Meta:
db_table = "parsers_inspection"
verbose_name = _("проверка")
verbose_name_plural = _("проверки")
verbose_name = _("запись единого реестра проверок")
verbose_name_plural = _("Единый реестр проверок")
ordering = ["-created_at"]
indexes = [
models.Index(fields=["inn", "registration_number"]),
@@ -683,8 +691,8 @@ class ProcurementRecord(TimestampMixin, models.Model):
class Meta:
db_table = "parsers_procurement"
verbose_name = _("закупка")
verbose_name_plural = _("закупки")
verbose_name = _("запись ЕИС закупок")
verbose_name_plural = _("Единая информационная система закупок")
ordering = ["-created_at"]
indexes = [
models.Index(fields=["customer_inn", "purchase_number"]),
@@ -781,8 +789,8 @@ class FinancialReport(TimestampMixin, models.Model):
class Meta:
db_table = "parsers_financial_report"
verbose_name = _("финансовый отчет")
verbose_name_plural = _("финансовые отчеты")
verbose_name = _("запись бухгалтерской отчетности ФНС")
verbose_name_plural = _("Бухгалтерская отчетность ФНС")
ordering = ["-created_at"]
indexes = [
models.Index(fields=["ogrn", "status"]),