#132 Old entries migration

* adds intervention payment migration
* adds intervention document migration
This commit is contained in:
mpeltriaux 2022-03-14 14:47:38 +01:00
parent 88946f663c
commit 675a3a0287

View File

@ -1,12 +1,14 @@
import psycopg2
from django.contrib.gis.geos import MultiPolygon, GEOSException, MultiPoint, MultiLineString, Polygon
from django.core.exceptions import ObjectDoesNotExist
from django.core.files.uploadedfile import UploadedFile
from django.db import transaction
from codelist.models import KonovaCode
from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID, CODELIST_REGISTRATION_OFFICE_ID, \
CODELIST_PROCESS_TYPE_ID, CODELIST_LAW_ID, CODELIST_HANDLER_ID
from intervention.models import Intervention, Legal, Responsibility, Handler
from compensation.models import Payment
from intervention.models import Intervention, Legal, Responsibility, Handler, InterventionDocument
from konova.management.commands.setup import BaseKonovaCommand
from konova.models import Geometry
from konova.tasks import celery_update_parcels
@ -148,6 +150,72 @@ class Command(BaseKonovaCommand):
intervention.legal.save()
return intervention
def _migrate_intervention_payment(self, intervention, eiv):
payment_date = eiv[16]
payment_amount = eiv[17]
if payment_amount is not None and payment_amount != 0:
payment_exists = intervention.payments.filter(
amount=payment_amount
).exists()
if payment_exists:
return intervention
payment = Payment(
amount=payment_amount,
)
if payment_date is None:
payment.comment = "Datenmigration: Kein Zahlungsdatum hinterlegt! Schnellstmöglich nachtragen oder diesen Kommentar mit einer Begründung ersetzen, falls kein Datum existiert."
else:
payment.due_on = payment_date
payment.save()
intervention.payments.add(payment)
return intervention
def _migrate_intervention_documents(self, intervention, eiv):
eiv_identifier = f"'{eiv[0]}'"
tmp_cursor = self.db_connection.cursor()
tmp_cursor.execute(
'select '
'doc.pfad, '
'doc."Bemerkung", '
'doc."Datum" '
'from "OBJ_MASTER" om '
'left join "LINFOS" linf on om."GISPADID"=linf."GISPADID" '
'left join "Objektphotos" doc on linf."PKEY"=doc."FKEY" '
'where '
f'om."KENNUNG"={eiv_identifier} and '
'doc.pfad is not null '
)
doc_results = tmp_cursor.fetchall()
if len(doc_results) > 0:
for doc_result in doc_results:
doc_path = doc_result[0]
doc_comment = doc_result[1]
doc_date = doc_result[2]
with open(doc_path, encoding="latin1") as file:
file = UploadedFile(file)
doc_title = "Migrierte Datei"
doc_date = doc_date or "1970-01-01"
doc_exists = InterventionDocument.objects.filter(
instance=intervention,
title=doc_title,
comment=doc_comment,
date_of_creation=doc_date
).exists()
if doc_exists:
continue
doc = InterventionDocument.objects.create(
title=doc_title,
comment=doc_comment,
file=file,
date_of_creation=doc_date,
instance=intervention,
)
tmp_cursor.close()
return intervention
def migrate_interventions(self):
cursor = self.db_connection.cursor()
cursor.execute(
@ -167,7 +235,9 @@ class Command(BaseKonovaCommand):
'adr."Bemerkung" as eingriffsverursacher_bemerkung, '
'linf."Bemerkung" as eiv_comment, '
'zt.erlass as Zulassungsdatum, '
'zt.rechtskraft as Bestandskraftdatum '
'zt.rechtskraft as Bestandskraftdatum, '
'zt.baubeginn as ersatzzahlungstermin, '
'eiv.ersatzzahlung '
'from "OBJ_MASTER" om '
'left join "LINFOS" linf on om."GISPADID"=linf."GISPADID" '
'left join eiv on om."GISPADID"=eiv.gispadid '
@ -188,10 +258,10 @@ class Command(BaseKonovaCommand):
len_all_eivs = len(all_eivs)
num_processed = 0
self._write_warning(f"Migrate EIVs to interventions...")
self._write_warning(f"Found {len_all_eivs} entries. Process now...")
self._write_warning(f"--Found {len_all_eivs} entries. Process now...")
for eiv in all_eivs:
if num_processed % 500 == 0:
self._write_warning(f" {num_processed}/{len_all_eivs} processed")
self._write_warning(f"----{num_processed}/{len_all_eivs} processed")
with transaction.atomic():
eiv_comment = eiv[13] or ""
intervention = Intervention.objects.get_or_create(
@ -203,7 +273,10 @@ class Command(BaseKonovaCommand):
intervention = self._migrate_intervention_geometry(intervention, eiv)
intervention = self._migrate_intervention_legal(intervention, eiv)
intervention = self._migrate_intervention_responsibility(intervention, eiv)
intervention = self._migrate_intervention_payment(intervention, eiv)
intervention = self._migrate_intervention_documents(intervention, eiv)
intervention.save()
num_processed += 1
cursor.close()