feat: migrate parser data to source records
This commit is contained in:
@@ -52,16 +52,21 @@ class OrganizationSourceBackfillResult:
|
||||
updated_financial_lines: int = 0
|
||||
unresolved: int = 0
|
||||
|
||||
def plus(self, other: OrganizationSourceBackfillResult) -> OrganizationSourceBackfillResult:
|
||||
def plus(
|
||||
self, other: OrganizationSourceBackfillResult
|
||||
) -> OrganizationSourceBackfillResult:
|
||||
return OrganizationSourceBackfillResult(
|
||||
scanned=self.scanned + other.scanned,
|
||||
created_organizations=self.created_organizations + other.created_organizations,
|
||||
created_organizations=self.created_organizations
|
||||
+ other.created_organizations,
|
||||
created_extensions=self.created_extensions + other.created_extensions,
|
||||
updated_extensions=self.updated_extensions + other.updated_extensions,
|
||||
created_records=self.created_records + other.created_records,
|
||||
updated_records=self.updated_records + other.updated_records,
|
||||
created_financial_lines=self.created_financial_lines + other.created_financial_lines,
|
||||
updated_financial_lines=self.updated_financial_lines + other.updated_financial_lines,
|
||||
created_financial_lines=self.created_financial_lines
|
||||
+ other.created_financial_lines,
|
||||
updated_financial_lines=self.updated_financial_lines
|
||||
+ other.updated_financial_lines,
|
||||
unresolved=self.unresolved + other.unresolved,
|
||||
)
|
||||
|
||||
@@ -131,14 +136,20 @@ class OrganizationSourceBackfillService:
|
||||
with transaction.atomic():
|
||||
for adapter in adapters:
|
||||
scanned += 1
|
||||
organization, organization_created = cls._resolve_or_create_organization(adapter)
|
||||
(
|
||||
organization,
|
||||
organization_created,
|
||||
) = cls._resolve_or_create_organization(adapter)
|
||||
if organization is None:
|
||||
unresolved += 1
|
||||
continue
|
||||
if organization_created:
|
||||
created_organizations += 1
|
||||
|
||||
extension, extension_created = descriptor.extension_model.objects.get_or_create(
|
||||
(
|
||||
extension,
|
||||
extension_created,
|
||||
) = descriptor.extension_model.objects.get_or_create(
|
||||
organization=organization,
|
||||
defaults={
|
||||
"source_group": descriptor.source_group,
|
||||
@@ -149,9 +160,14 @@ class OrganizationSourceBackfillService:
|
||||
if extension_created:
|
||||
created_extensions += 1
|
||||
else:
|
||||
updated_extensions += cls._update_extension(extension, descriptor, adapter)
|
||||
updated_extensions += cls._update_extension(
|
||||
extension, descriptor, adapter
|
||||
)
|
||||
|
||||
source_record, record_created = OrganizationSourceRecord.objects.update_or_create(
|
||||
(
|
||||
source_record,
|
||||
record_created,
|
||||
) = OrganizationSourceRecord.objects.update_or_create(
|
||||
legacy_model=adapter.legacy_model,
|
||||
legacy_pk=adapter.legacy_pk,
|
||||
defaults={
|
||||
@@ -174,7 +190,9 @@ class OrganizationSourceBackfillService:
|
||||
updated_records += 1
|
||||
|
||||
if adapter.source == ParserLoadLog.Source.FNS_REPORTS:
|
||||
line_result = cls._backfill_financial_lines(source_record, adapter.legacy_pk)
|
||||
line_result = cls._backfill_financial_lines(
|
||||
source_record, adapter.legacy_pk
|
||||
)
|
||||
created_financial_lines += line_result[0]
|
||||
updated_financial_lines += line_result[1]
|
||||
|
||||
@@ -204,7 +222,10 @@ class OrganizationSourceBackfillService:
|
||||
if extension.title != descriptor.title:
|
||||
extension.title = descriptor.title
|
||||
changed = True
|
||||
if adapter.load_batch is not None and extension.last_load_batch != adapter.load_batch:
|
||||
if (
|
||||
adapter.load_batch is not None
|
||||
and extension.last_load_batch != adapter.load_batch
|
||||
):
|
||||
extension.last_load_batch = adapter.load_batch
|
||||
changed = True
|
||||
if changed:
|
||||
@@ -371,7 +392,9 @@ class OrganizationSourceBackfillService:
|
||||
|
||||
@staticmethod
|
||||
def _refresh_extension_counters(extension_ids: set[str]) -> None:
|
||||
for extension in OrganizationSourceExtension.objects.filter(uid__in=extension_ids):
|
||||
for extension in OrganizationSourceExtension.objects.filter(
|
||||
uid__in=extension_ids
|
||||
):
|
||||
aggregate = extension.records.aggregate(
|
||||
records_count=Count("uid"),
|
||||
first_seen_at=Min("created_at"),
|
||||
@@ -540,13 +563,16 @@ class OrganizationSourceBackfillService:
|
||||
url: str = "",
|
||||
payload: dict[str, Any] | None = None,
|
||||
) -> LegacyRecordAdapter:
|
||||
normalized_inn, normalized_kpp, normalized_ogrn, normalized_ogrip = (
|
||||
normalize_identity_fields(
|
||||
inn=inn,
|
||||
kpp=kpp,
|
||||
ogrn=ogrn,
|
||||
ogrip=ogrip,
|
||||
)
|
||||
(
|
||||
normalized_inn,
|
||||
normalized_kpp,
|
||||
normalized_ogrn,
|
||||
normalized_ogrip,
|
||||
) = normalize_identity_fields(
|
||||
inn=inn,
|
||||
kpp=kpp,
|
||||
ogrn=ogrn,
|
||||
ogrip=ogrip,
|
||||
)
|
||||
return LegacyRecordAdapter(
|
||||
source=str(descriptor.source),
|
||||
|
||||
Reference in New Issue
Block a user