From 06ad0fdc2dd7d9354bfdca40bc31df8f9bf2f0c4 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Tue, 8 Mar 2022 11:54:26 +0100 Subject: [PATCH] #131 WIP: EGON exporter * adds incomplete WIP implementation of an EGON exporter --- intervention/utils/egon_export.py | 150 ++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 intervention/utils/egon_export.py diff --git a/intervention/utils/egon_export.py b/intervention/utils/egon_export.py new file mode 100644 index 00000000..c3e62aba --- /dev/null +++ b/intervention/utils/egon_export.py @@ -0,0 +1,150 @@ +""" +Author: Michel Peltriaux +Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany +Contact: michel.peltriaux@sgdnord.rlp.de +Created on: 07.03.22 + +""" +import xmltodict +from django.contrib.gis.gdal import OGRGeometry +from django.db.models import Sum +from django.utils import formats + +from intervention.models import Intervention +from xml.etree import ElementTree as etree + +from konova.sub_settings.lanis_settings import DEFAULT_SRID_RLP + + +class EgonExporter: + """ + EGON is the payment management system of SNU RLP. Due to compatibility reasons we need to provide the old style + of data transmission between KSP and EGON: + 1. Create GML from intervention object + 2. Send created GML to the appropriate RabbitMQ channel + """ + intervention = None + gml_builder = None + + def __init__(self, intervention: Intervention): + self.intervention = intervention + self.gml_builder = EgonGmlBuilder(intervention) + + def export_to_rabbitmq(self): + raise NotImplementedError("ToDo!") + + +class EgonGmlBuilder: + """ + Creates the GML for EGON export + """ + intervention = None + gml = None + + def __init__(self, intervention: Intervention): + self.intervention = intervention + self.gml = self.build_gml() + + def build_gml(self): + all_payments = self.intervention.payments.aggregate( + summed=Sum("amount") + )["summed"] + + comp_type = "Ersatzzahlung" + if self.intervention.compensations.exists(): + comp_type += " und Kompensation" + + geom = self.intervention.geometry.geom + geom.transform(DEFAULT_SRID_RLP) + geoms_list = [ + { + "gml:polygonMember": { + "gml:Polygon": { + "gml:exterior": { + "gml:LinearRing": { + "gml:posList": " ".join([f"{str(coord[0])},{str(coord[1])}" for coord in coords[0]]) + } + } + } + } + } for coords in geom.coords + ] + + parcels = self.intervention.get_underlying_parcels() + spatial_reference_list = [ + { + "oneo:Raumreferenz": { + "oneo:datumAbgleich": None, + "oneo:ortsangabe": { + "oneo:Ortsangaben": { + "oneo:kreisSchluessel": parcel.district.krs, + "oneo:gemeindeSchluessel": parcel.district.gmnd, + "oneo:verbandsgemeindeSchluessel": parcel.gmrkng, + "oneo:flurstuecksKennzeichen": None, + } + }, + } + } for parcel in parcels + ] + + t = { + "wfs:FeatureCollection": { + "oneo:Eingriffsverfahren": { + "@gml:id": self.intervention.identifier, + "oneo:azEintragungsstelle": self.intervention.responsible.conservation_file_number, + "oneo:azZulassungsstelle": self.intervention.responsible.registration_file_number, + "oneo:bemerkungZulassungsstelle": None, + "oneo:eintragungsstelle": self.intervention.responsible.conservation_office.long_name, + "oneo:zulassungsstelle": self.intervention.responsible.registration_office.long_name, + "oneo:ersatzzahlung": all_payments, + "oneo:kompensationsart": comp_type, + "oneo:verfahrensrecht": self.intervention.legal.laws.first().short_name, + "oneo:verfahrenstyp": self.intervention.legal.process_type.long_name, + "oneo:eingreifer": { + "oneo:Eingreifer": { + "oneo:art": self.intervention.responsible.handler.type.long_name, + "oneo:bemerkung": self.intervention.responsible.handler.type.long_name, + } + }, + "oneo:erfasser": { + "oneo:Erfasser": { + "oneo:name": None, + "oneo:bemerkung": None, + } + }, + "oneo:zulassung": { + "oneo:Zulassungstermin": { + "oneo:bauBeginn": formats.localize(self.intervention.payments.first().due_on), + "oneo:erlass": formats.localize(self.intervention.legal.registration_date), + "oneo:rechtsKraft": formats.localize(self.intervention.legal.binding_date), + } + }, + "oneo:geometrie": { + "gml:multiSurfaceProperty": { + "gml:MultiPolygon": { + "@srsName": f"http://www.opengis.net/gml/srs/epsg.xml#{DEFAULT_SRID_RLP}", + "#text": geoms_list, + } + }, + }, + "oneo:kennung": self.intervention.identifier, + "oneo:bezeichnung": self.intervention.title, + "oneo:bemerkung": self.intervention.comment, + "oneo:verantwortlicheStelle": None, + "oneo:veroffentlichtAm": None, + "oneo:raumreferenz": spatial_reference_list, + "oneo:foto": { + "oneo:Foto": { + "oneo:aufnahmezeitpunkt": None, + "oneo:bemerkung": None, + "oneo:fotoverweis": None, + "oneo:dateiname": None, + "oneo:hauptfoto": False, + } + }, + } + }, + } + gml = xmltodict.unparse(t, pretty=True) + print(gml) + return gml \ No newline at end of file