Compare commits
No commits in common. "0269dfb392ceb944629286d3f68b7347b601b218" and "caa840849e3a50b7ecb01b707b7e55dc4b4a811c" have entirely different histories.
0269dfb392
...
caa840849e
@ -1,177 +0,0 @@
|
|||||||
"""
|
|
||||||
Author: Michel Peltriaux
|
|
||||||
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
|
|
||||||
Contact: michel.peltriaux@sgdnord.rlp.de
|
|
||||||
Created on: 07.03.22
|
|
||||||
|
|
||||||
"""
|
|
||||||
import base64
|
|
||||||
|
|
||||||
import xmltodict
|
|
||||||
from django.db.models import Sum
|
|
||||||
from django.utils import formats
|
|
||||||
|
|
||||||
from intervention.models import Intervention
|
|
||||||
|
|
||||||
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 _gen_flurstuecksKennzeichen(self, parcel):
|
|
||||||
""" Generates oneo:flurstuecksKennzeichen to provide backwards compatibility
|
|
||||||
|
|
||||||
Args:
|
|
||||||
parcel (Parcel): The requested parcel
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str
|
|
||||||
"""
|
|
||||||
gmrkng_code = "000000"
|
|
||||||
flr_code = "{0:03d}".format(int(parcel.flr or 0))
|
|
||||||
flrstckzhlr_code = "{0:05d}".format(int(parcel.flrstck_zhlr or 0))
|
|
||||||
flrstcknnr_code = "{0:06d}".format(int(parcel.flrstck_nnr or 0))
|
|
||||||
return gmrkng_code + flr_code + flrstckzhlr_code + flrstcknnr_code
|
|
||||||
|
|
||||||
def _sum_all_payments(self):
|
|
||||||
all_payments = self.intervention.payments.aggregate(
|
|
||||||
summed=Sum("amount")
|
|
||||||
)["summed"]
|
|
||||||
return all_payments
|
|
||||||
|
|
||||||
def _gen_kompensationsArt(self):
|
|
||||||
comp_type = "Ersatzzahlung"
|
|
||||||
if self.intervention.compensations.exists():
|
|
||||||
comp_type += " und Kompensation"
|
|
||||||
return comp_type
|
|
||||||
|
|
||||||
def _gen_geometry_list(self):
|
|
||||||
geom = self.intervention.geometry.geom
|
|
||||||
geom.transform(DEFAULT_SRID_RLP)
|
|
||||||
geoms_list = [
|
|
||||||
{
|
|
||||||
"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
|
|
||||||
]
|
|
||||||
return geoms_list
|
|
||||||
|
|
||||||
def _gen_raumreferenz(self):
|
|
||||||
parcels = self.intervention.get_underlying_parcels()
|
|
||||||
spatial_reference_list = [
|
|
||||||
{
|
|
||||||
"oneo:datumAbgleich": None,
|
|
||||||
"oneo:ortsangabe": {
|
|
||||||
"oneo:Ortsangaben": {
|
|
||||||
"oneo:kreisSchluessel": parcel.district.krs,
|
|
||||||
"oneo:gemeindeSchluessel": parcel.district.gmnd,
|
|
||||||
"oneo:verbandsgemeindeSchluessel": parcel.gmrkng,
|
|
||||||
"oneo:flurstuecksKennzeichen": self._gen_flurstuecksKennzeichen(parcel),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
} for parcel in parcels
|
|
||||||
]
|
|
||||||
return spatial_reference_list
|
|
||||||
|
|
||||||
def _gen_foto(self):
|
|
||||||
revoc_docs, regular_docs = self.intervention.get_documents()
|
|
||||||
docs_list = [
|
|
||||||
{
|
|
||||||
"oneo:Foto": {
|
|
||||||
"oneo:aufnahmezeitpunkt": formats.localize(doc.date_of_creation),
|
|
||||||
"oneo:bemerkung": doc.comment,
|
|
||||||
"oneo:fotoverweis": base64.b64encode(doc.file.read()).decode("utf-8"),
|
|
||||||
"oneo:dateiname": doc.title,
|
|
||||||
"oneo:hauptfoto": False,
|
|
||||||
}
|
|
||||||
} for doc in regular_docs
|
|
||||||
]
|
|
||||||
return docs_list
|
|
||||||
|
|
||||||
def build_gml(self):
|
|
||||||
xml_dict = {
|
|
||||||
"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": self._sum_all_payments(),
|
|
||||||
"oneo:kompensationsart": self._gen_kompensationsArt(),
|
|
||||||
"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}",
|
|
||||||
"gml:polygonMember": self._gen_geometry_list(),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"oneo:kennung": self.intervention.identifier,
|
|
||||||
"oneo:bezeichnung": self.intervention.title,
|
|
||||||
"oneo:bemerkung": self.intervention.comment,
|
|
||||||
"oneo:verantwortlicheStelle": None,
|
|
||||||
"oneo:veroffentlichtAm": None,
|
|
||||||
"oneo:raumreferenz": {
|
|
||||||
"oneo:Raumreferenz": self._gen_raumreferenz(),
|
|
||||||
},
|
|
||||||
"oneo:foto": self._gen_foto(),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
gml = xmltodict.unparse(xml_dict)
|
|
||||||
return gml
|
|
Loading…
Reference in New Issue
Block a user