From 619f2110e47091aa77579675014d49083e228f04 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 25 Oct 2021 13:44:54 +0200 Subject: [PATCH] #36 Quality checks * adds quality check logic for Compensations with CompensationQUalityChecker * adds compensation quality checking to checking routine of RunCheckModalForm.is_valid() * adds/updates translations --- compensation/models.py | 34 +++++++++++- compensation/utils/quality.py | 48 +++++++++++++++++ ema/utils/quality.py | 20 +++++++ intervention/forms/modalForms.py | 10 +++- locale/de/LC_MESSAGES/django.mo | Bin 26682 -> 26776 bytes locale/de/LC_MESSAGES/django.po | 90 +++++++++++++++++-------------- 6 files changed, 159 insertions(+), 43 deletions(-) create mode 100644 compensation/utils/quality.py create mode 100644 ema/utils/quality.py diff --git a/compensation/models.py b/compensation/models.py index d2d18be5..5367b2e2 100644 --- a/compensation/models.py +++ b/compensation/models.py @@ -19,6 +19,7 @@ from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES CODELIST_COMPENSATION_FUNDING_ID from compensation.managers import CompensationStateManager, EcoAccountDeductionManager, CompensationActionManager, \ EcoAccountManager, CompensationManager +from compensation.utils.quality import CompensationQualityChecker from intervention.models import Intervention, ResponsibilityData, LegalData from konova.models import BaseObject, BaseResource, Geometry, UuidModel, AbstractDocument, \ generate_document_file_upload_path @@ -163,13 +164,42 @@ class AbstractCompensation(BaseObject): class Meta: abstract = True - def get_surface(self) -> float: + def get_surface_after_states(self) -> float: """ Calculates the compensation's/account's surface Returns: sum_surface (float) """ - return self.after_states.all().aggregate(Sum("surface"))["surface__sum"] + return self._calc_surface(self.after_states.all()) + + def get_surface_before_states(self) -> float: + """ Calculates the compensation's/account's surface + + Returns: + sum_surface (float) + """ + return self._calc_surface(self.before_states.all()) + + def _calc_surface(self, qs: QuerySet): + """ Calculates the surface sum of a given queryset + + Args: + qs (QuerySet): The queryset containing CompensationState entries + + Returns: + + """ + return qs.aggregate(Sum("surface"))["surface__sum"] or 0 + + def quality_check(self) -> CompensationQualityChecker: + """ Performs data quality check + + Returns: + checker (CompensationQualityChecker): Holds validity data and error messages + """ + checker = CompensationQualityChecker(self) + checker.run_check() + return checker class Compensation(AbstractCompensation): diff --git a/compensation/utils/quality.py b/compensation/utils/quality.py new file mode 100644 index 00000000..0e3c2cf0 --- /dev/null +++ b/compensation/utils/quality.py @@ -0,0 +1,48 @@ +""" +Author: Michel Peltriaux +Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany +Contact: michel.peltriaux@sgdnord.rlp.de +Created on: 25.10.21 + +""" +from django.utils.translation import gettext_lazy as _, pgettext_lazy as _con +from konova.utils.quality import AbstractQualityChecker + + +class CompensationQualityChecker(AbstractQualityChecker): + def run_check(self): + """ Perform all defined data checks + + Returns: + + """ + self._check_states() + self._check_actions() + self._check_geometry() + self.valid = len(self.messages) == 0 + + def _check_states(self): + """ Checks data quality for related CompensationState objects + + Returns: + + """ + after_states = self.obj.get_surface_after_states() + before_states = self.obj.get_surface_before_states() + if after_states != before_states: + self.messages.append( + _("States unequal") + ) + if before_states == 0: + self._add_missing_attr_name(_("States before")) + if after_states == 0: + self._add_missing_attr_name(_("States after")) + + def _check_actions(self): + """ Checks data quality for related CompensationState objects + + Returns: + + """ + if not self.obj.actions.all(): + self._add_missing_attr_name(_con("Compensation", "Actions")) diff --git a/ema/utils/quality.py b/ema/utils/quality.py new file mode 100644 index 00000000..8c57f51f --- /dev/null +++ b/ema/utils/quality.py @@ -0,0 +1,20 @@ +""" +Author: Michel Peltriaux +Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany +Contact: michel.peltriaux@sgdnord.rlp.de +Created on: 25.10.21 + +""" +from konova.utils.quality import AbstractQualityChecker + + +class EmaQualityChecker(AbstractQualityChecker): + def run_check(self): + """ Perform all defined data checks + + Returns: + + """ + + self._check_geometry() + self.valid = len(self.messages) == 0 diff --git a/intervention/forms/modalForms.py b/intervention/forms/modalForms.py index 4f8fa750..69425969 100644 --- a/intervention/forms/modalForms.py +++ b/intervention/forms/modalForms.py @@ -214,6 +214,14 @@ class RunCheckModalForm(BaseModalForm): "checked_intervention", msg ) + comps = self.instance.compensations.all() + for comp in comps: + checker = comp.quality_check() + for msg in checker.messages: + self.add_error( + "checked_comps", + f"{comp.identifier}: {msg}" + ) return super_result and checker.valid def save(self): @@ -336,7 +344,7 @@ class NewDeductionModalForm(BaseModalForm): return False # Calculate valid surface - sum_surface = acc.get_surface() + sum_surface = acc.get_surface_after_states() sum_surface_deductions = acc.get_deductions_surface() rest_surface = sum_surface - sum_surface_deductions form_surface = float(self.cleaned_data["surface"]) diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index a992cbb136e1f7e893caa5e4795d15c90460558b..f84bd1867b5720a30a73b2e0f99650fce62d0e7e 100644 GIT binary patch delta 8100 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 F{{b&OhfM$g delta 8015 zcmY+}33yId9>?+XBAY~nh(xwGiVz_Yv5Q@zc7oWKh^@7zqr`fxwNx#AM{8?KwNb5V zQB@48rgUm=(~a6XmZ9ySqeVxV?=SawX68Qq`F+nAa84#sbV`e27Qp;6%?4$yn>nhwwyn3o zvedg_I1WMepNJZN5o*3w#dXJ+H|>oNunad2AuBVdQ7b=(iFgY&KqQrtn26d*P1Hnb zsDU$4<78t+9D+eO8MV;a=#M@OVSclQLTTKj2Hb8vfd15vVQu^p$+q!ScXwD71E|+S z{xKQ+Q3;2kHZT*lu*KF_F@XAZ)W-Ipqa7WmpozanrRqBB!H1|bEMLQIuY=k_CPrXy z)DFj@c03OQ@I}jK&k_#p^XVe@zgSEm0HqL}g@z zy+0O}xo5Ey&O+^MK59X$PzxzUEo3JK;bGJ~r;^CO2KS)%X zcC;Cl@?Ez51nRRri#ob{sENwda-XY$!PM&@r)e@!86AfFW1Irp@FsSpVK*w3LA-I= zK`1J9k*EdMur@)Zx)ZA3VAMuNVH+He>c0d1@KbyLD60P#7^Cn1ECo$?*WP%5`n>#7 z+yR47_rp*tk3gj^2{lkUhG2%ZJt~7a7>OfL{br&TxBxZY(qcJ(ABFBTtipPD19jHk zRAU-oO^nA}Ou$*Fmv#echX+s#IE|X{JnATZLmfqM9rws8V;Sm=P?^iZ0Db>`DQHEx z))AKDKyj#}tBv};8=#J=H7XPBQP1bt z`Y?MxAJxAA^}I9BHoSm(a5YxILR2R9VmKa0FJ8h|(L;VU;d)fcH=!o{2>A^%hf&Y{ zf?BYDL)VI^j3*-FJElGbP23JOU{6$P`lANUvra_4O!H9#F1PLLQ48IM{0(gmVR^ic zI>HC2m(;(JyW`TRcPAYEncqZF&`Q15bYzpJ9V%5bPy;W*iufKz;$e)!^VkCKqJ9?| zHa4ai_ChVxhwX49D&;?-j{FXmW`6TK1+CbxiTk!jp(aW}Eg%y$P?Fc)j#64VjywjQ%yz~Zj}wIF|96!nWjwI@5a(8Av6f!fIk>m<}y@Eq#1c^Nf8 zAu4mbQK|e3>Sg={wX?IRonEl@Yt|oa`%Tol;oP-1O0{$c473KLQX7iOOeIXkW~j`J zMZHvuQ2kb-QoJ5p^WO_w@f`Krt@v%gldbtJ!O3mh|4vA6%de-t|2Y(TbE9#lG5c@@ zR>rPb{L2RBqf)m9b(ULD6YWHOC5P<&GpNk`WbZ#hEx1fO_b;nvsH5zI%G9LdcE^}y zw!_=@#;2%`=TQrJfcoC!pL8c|fR(6s#t0mVI?EZT&u|5*e<3F0e$>KlpkB^DP)Amx zJ^h&91X9qMC!o%{4r*tuP^s;MnjjB#wv%mrnspfl(Z138u5}mcs19NxoR+k4p6t48k?21-^kglAWmjN3b*&p>}owm7y!B3_U_U7tzrj zHxZ+$x9Q0F>#ZI{Lunj~T1bI)IclP}FbVfyJYGhfVaZPJTON!4)T^Qvl#E(HBh*CM zsLYMUK+LyJ?L_{y;<+>^HH++x^{4?hqmJef>IlBH_pe!RVNcrc<0|aZ*&XK^>dYTv zFqZ4$W*`o=pcK?X+B>$8jY@HU>u}pX9*Z-AO678UzYvwN_fbc<7ybC`E@24uYhB$1 z-$7+Cu$%jQH0rrJs0}+!DQKtJsENkd4)ah8T82vfYSci7Fb%&#?J%G_UjRm<2A+d@ zXI?;k4Qo*oy^qS^5!Bap7Riib?o-f%e%bs6U>IuP4yXkTw2s68>iMWlOhFypGSq}C zQNM^AQT+;0XTB91;&u$h8>kH3$1vtM{yp3qkyxG^iKq!0qZZH=HDF)Vgt@5icqH)~r{U@R}^1Ss`RR3+L=RZO%^cXstxQK#Mbp`cSUPrb6g4%J(9M>RJ zzp|*eIvi`F7gMkU>IkNwCY+91;9S(_x)Ak)v;j5Fz8w4gAEZG$KZW|-uAox%E0)7j zz1?@DBI>Lwqwc5LdUMo*I$;;=gLHB80h4uv!de_$4- z_A{m~PC_kgGio7wuq7TxO%&SSJ*p^-rd}DfkPK8N+hQd4Mg3ytqcXW1weZ(bN8@a# zptIVAO6`7(z+LlqN1KMN9SW@}XvgzW@4`CN8J)o9cpf!iT&}yrWYjNMJ=AlpFdqA06`YKkU@dAx zTTq!fh&qzbQO}=4Cx*fe3RJD>%Dtn-I;9v>di2A#s5S99Es0HlBl6b_nA4T>5 z3boU3?fpxrg48U|-Z;INW(}IG|xP!eh7z3#1p#~gn+b5s~oQRrms%@W*>Nnrk z7o$?W6szGH)Gyt~=*3&8&pK>WaX-g+DX1YCJ@^Un67hg2O+z%Hv)8qh(Ep6+iaErO zL|f_&aU!9Kx>0`-bMW!ikMaU4^9g-%&rtsg?`f$IDezafY392h<#qm`lxH99Wqp#i z%9QmHKE5W|d&_7Dq5Q7BF&rmS??j~AK0n)gb8J1us^%_~N29)zIv(@1iLp1MP+$Kw zB9_Rfu3z+)m_Q66G6^O5f3I^?_^mF!KI6|@wyf`}G5wPWeuK>wpC`JCGnCqI)EW?L z30);<%O!?VoZ*xV@mX7sv{tw3FFsvesaGL-_{PRY#*Lzs?%ptQl>1QbjsC>%K2HF4Ad5kHOT26}SEOj~cXhC#Dk)5lZwV9$(=U3W(vfHNz+H5w^x4+wZT`-z0R6 zr0vfbVejQr?!sT>cjF>F2YhAXt7OjNPKdg4wIOEMo)szAqr3%cq28wvcmh8rYEv#C zni77#XXCxjL0X?6{!UCICUZyEOw7Yg#WiF8jeYFBvudOKG*OqRM>SV%T>o@26=`oo z%%t8Nb!{YmC8kktKy1*j-*Fl`6E}&=L~mjiQHSVHr@J^8b&bbtVk_lDBGtCHzy#`t zh{MF=>js6}wi1ffiQUBO#B81k^Y~u$Mte^A-t|^byGrBZt0{#6bZB84{H^D)KJB_L z`TP>RPI+5X%Ttt7@I#_K=#58GH+Y5)KL diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 5adae751..a2995547 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-10-25 12:54+0200\n" +"POT-Creation-Date: 2021-10-25 13:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -44,7 +44,7 @@ msgstr "Bis" #: ema/templates/ema/report/report.html:16 intervention/forms/forms.py:101 #: intervention/templates/intervention/detail/view.html:56 #: intervention/templates/intervention/report/report.html:37 -#: intervention/utils/quality.py:49 +#: intervention/utils/quality.py:51 msgid "Conservation office" msgstr "Eintragungsstelle" @@ -209,7 +209,7 @@ msgstr "Abbuchungen" #: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36 #: ema/templates/ema/detail/includes/states-after.html:36 #: ema/templates/ema/detail/includes/states-before.html:36 -#: intervention/forms/modalForms.py:274 +#: intervention/forms/modalForms.py:282 msgid "Surface" msgstr "Fläche" @@ -272,7 +272,7 @@ msgid "Type" msgstr "Typ" #: analysis/templates/analysis/reports/includes/old_data/amount.html:24 -#: intervention/forms/modalForms.py:285 intervention/forms/modalForms.py:292 +#: intervention/forms/modalForms.py:293 intervention/forms/modalForms.py:300 #: intervention/tables.py:88 #: intervention/templates/intervention/detail/view.html:19 #: konova/templates/konova/home.html:11 templates/navbars/navbar.html:22 @@ -282,7 +282,7 @@ msgstr "Eingriff" #: analysis/templates/analysis/reports/includes/old_data/amount.html:34 #: compensation/tables.py:224 #: compensation/templates/compensation/detail/eco_account/view.html:19 -#: intervention/forms/modalForms.py:258 intervention/forms/modalForms.py:265 +#: intervention/forms/modalForms.py:266 intervention/forms/modalForms.py:273 #: konova/templates/konova/home.html:88 templates/navbars/navbar.html:34 msgid "Eco-account" msgstr "Ökokonto" @@ -376,7 +376,7 @@ msgstr "Zusätzlicher Kommentar" #: ema/templates/ema/report/report.html:20 intervention/forms/forms.py:129 #: intervention/templates/intervention/detail/view.html:60 #: intervention/templates/intervention/report/report.html:41 -#: intervention/utils/quality.py:42 +#: intervention/utils/quality.py:44 msgid "Conservation office file number" msgstr "Aktenzeichen Eintragungsstelle" @@ -482,7 +482,7 @@ msgstr "Biotoptyp" msgid "Select the biotope type" msgstr "Biotoptyp wählen" -#: compensation/forms/modalForms.py:155 intervention/forms/modalForms.py:276 +#: compensation/forms/modalForms.py:155 intervention/forms/modalForms.py:284 msgid "in m²" msgstr "" @@ -592,38 +592,38 @@ msgstr "Geben Sie die Daten der neuen Maßnahme ein" msgid "Added action" msgstr "Maßnahme hinzugefügt" -#: compensation/models.py:82 +#: compensation/models.py:83 msgid "cm" msgstr "" -#: compensation/models.py:83 +#: compensation/models.py:84 msgid "m" msgstr "" -#: compensation/models.py:84 +#: compensation/models.py:85 msgid "km" msgstr "" -#: compensation/models.py:85 +#: compensation/models.py:86 msgid "m²" msgstr "" -#: compensation/models.py:86 +#: compensation/models.py:87 msgid "ha" msgstr "" -#: compensation/models.py:87 +#: compensation/models.py:88 msgid "Pieces" msgstr "Stück" -#: compensation/models.py:329 +#: compensation/models.py:359 msgid "" "Deductable surface can not be larger than existing surfaces in after states" msgstr "" "Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht " "überschreiten" -#: compensation/models.py:336 +#: compensation/models.py:366 msgid "" "Deductable surface can not be smaller than the sum of already existing " "deductions. Please contact the responsible users for the deductions!" @@ -978,7 +978,7 @@ msgstr "Keine Flächenmenge für Abbuchungen eingegeben. Bitte bearbeiten." #: intervention/templates/intervention/detail/view.html:63 #: intervention/templates/intervention/detail/view.html:95 #: intervention/templates/intervention/detail/view.html:99 -msgid "missing" +msgid "Missing" msgstr "fehlt" #: compensation/templates/compensation/detail/eco_account/view.html:70 @@ -1013,6 +1013,10 @@ msgstr "In LANIS öffnen" msgid "Deductions for" msgstr "Abbuchungen für" +#: compensation/utils/quality.py:35 +msgid "States unequal" +msgstr "Ungleiche Zustandsflächenmengen" + #: compensation/views/compensation_views.py:77 msgid "Compensation {} added" msgstr "Kompensation {} hinzugefügt" @@ -1161,7 +1165,7 @@ msgstr "Bauvorhaben XY; Flur ABC" #: intervention/forms/forms.py:51 #: intervention/templates/intervention/detail/view.html:35 #: intervention/templates/intervention/report/report.html:16 -#: intervention/utils/quality.py:82 +#: intervention/utils/quality.py:84 msgid "Process type" msgstr "Verfahrenstyp" @@ -1172,14 +1176,14 @@ msgstr "Mehrfachauswahl möglich" #: intervention/forms/forms.py:85 #: intervention/templates/intervention/detail/view.html:48 #: intervention/templates/intervention/report/report.html:29 -#: intervention/utils/quality.py:46 +#: intervention/utils/quality.py:48 msgid "Registration office" msgstr "Zulassungsbehörde" #: intervention/forms/forms.py:117 #: intervention/templates/intervention/detail/view.html:52 #: intervention/templates/intervention/report/report.html:33 -#: intervention/utils/quality.py:39 +#: intervention/utils/quality.py:41 msgid "Registration office file number" msgstr "Aktenzeichen Zulassungsbehörde" @@ -1190,7 +1194,7 @@ msgstr "" #: intervention/forms/forms.py:141 #: intervention/templates/intervention/detail/view.html:64 #: intervention/templates/intervention/report/report.html:45 -#: intervention/utils/quality.py:52 +#: intervention/utils/quality.py:54 msgid "Intervention handler" msgstr "Eingriffsverursacher" @@ -1201,7 +1205,7 @@ msgstr "Wer führt den Eingriff durch" #: intervention/forms/forms.py:154 #: intervention/templates/intervention/detail/view.html:96 #: intervention/templates/intervention/report/report.html:83 -#: intervention/utils/quality.py:73 +#: intervention/utils/quality.py:75 msgid "Registration date" msgstr "Datum Zulassung bzw. Satzungsbeschluss" @@ -1279,23 +1283,23 @@ msgstr "" "Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt " "wurden:" -#: intervention/forms/modalForms.py:260 +#: intervention/forms/modalForms.py:268 msgid "Only recorded accounts can be selected for deductions" msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden." -#: intervention/forms/modalForms.py:287 +#: intervention/forms/modalForms.py:295 msgid "Only shared interventions can be selected" msgstr "Nur freigegebene Eingriffe können gewählt werden" -#: intervention/forms/modalForms.py:300 +#: intervention/forms/modalForms.py:308 msgid "New Deduction" msgstr "Neue Abbuchung" -#: intervention/forms/modalForms.py:301 +#: intervention/forms/modalForms.py:309 msgid "Enter the information for a new deduction from a chosen eco-account" msgstr "Geben Sie die Informationen für eine neue Abbuchung ein." -#: intervention/forms/modalForms.py:334 +#: intervention/forms/modalForms.py:342 msgid "" "Eco-account {} is not recorded yet. You can only deduct from recorded " "accounts." @@ -1303,7 +1307,7 @@ msgstr "" "Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von " "verzeichneten Ökokonten erfolgen." -#: intervention/forms/modalForms.py:347 +#: intervention/forms/modalForms.py:355 msgid "" "The account {} has not enough surface for a deduction of {} m². There are " "only {} m² left" @@ -1385,34 +1389,31 @@ msgstr "Abbuchungen von Ökokonten" msgid "Exist" msgstr "Vorhanden" -#: intervention/utils/quality.py:55 +#: intervention/utils/quality.py:57 msgid "Responsible data" msgstr "Daten zu den verantwortlichen Stellen" -#: intervention/utils/quality.py:70 +#: intervention/utils/quality.py:72 msgid "Revocation exists" msgstr "Widerspruch liegt vor" -#: intervention/utils/quality.py:76 +#: intervention/utils/quality.py:78 msgid "Binding date" msgstr "Datum Bestandskraft" -#: intervention/utils/quality.py:79 +#: intervention/utils/quality.py:81 msgid "Laws" msgstr "Gesetze" -#: intervention/utils/quality.py:84 +#: intervention/utils/quality.py:86 msgid "Legal data" msgstr "Rechtliche Daten" -#: intervention/utils/quality.py:98 +#: intervention/utils/quality.py:100 msgid "No compensation of any type found (Compensation, Payment, Deduction)" -msgstr "Kein Ausgleich jeglicher Art gefunden (Kompensation, Ersatzzahlung, Abbuchung)" - -#: intervention/utils/quality.py:110 intervention/utils/quality.py:112 -#: konova/forms.py:246 templates/form/collapsable/form.html:45 -msgid "Geometry" -msgstr "Geometrie" +msgstr "" +"Kein Ausgleich jeglicher Art gefunden (Kompensation, Ersatzzahlung, " +"Abbuchung)" #: intervention/views.py:80 msgid "Intervention {} added" @@ -1499,6 +1500,11 @@ msgstr "Löschen" msgid "You are about to remove {} {}" msgstr "Sie sind dabei {} {} zu löschen" +#: konova/forms.py:246 konova/utils/quality.py:44 konova/utils/quality.py:46 +#: templates/form/collapsable/form.html:45 +msgid "Geometry" +msgstr "Geometrie" + #: konova/forms.py:322 msgid "Are you sure?" msgstr "Sind Sie sicher?" @@ -1674,6 +1680,10 @@ msgstr "Schauen Sie rein" msgid "{} has been checked successfully by user {}! {}" msgstr "{} wurde erfolgreich vom Nutzer {} geprüft! {}" +#: konova/utils/quality.py:32 +msgid "missing" +msgstr "fehlt" + #: konova/views.py:115 msgid "Deadline removed" msgstr "Frist gelöscht" @@ -3119,4 +3129,4 @@ msgstr "" #: venv/lib/python3.7/site-packages/fontawesome_5/fields.py:16 msgid "A fontawesome icon field" -msgstr "" \ No newline at end of file +msgstr ""