diff --git a/compensation/utils/quality.py b/compensation/utils/quality.py index b622fcdd..b7f8daa7 100644 --- a/compensation/utils/quality.py +++ b/compensation/utils/quality.py @@ -58,8 +58,20 @@ class EcoAccountQualityChecker(CompensationQualityChecker): self._check_deductable_surface() self._check_responsible_data() self._check_legal_data() + self._check_record_state() super().run_check() + def _check_record_state(self): + """ Checks the data quality for recorded state + + Returns: + + """ + if self.obj.recorded is None: + self.messages.append( + _("Not recorded") + ) + def _check_legal_data(self): """ Checks the data quality for Legal diff --git a/intervention/forms/modalForms.py b/intervention/forms/modalForms.py index 7adc6864..aea9f2ce 100644 --- a/intervention/forms/modalForms.py +++ b/intervention/forms/modalForms.py @@ -189,27 +189,43 @@ class CheckModalForm(BaseModalForm): widget=forms.CheckboxInput(), required=True ) + valid = None def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.form_title = _("Run check") self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name) + self.valid = False - def is_valid(self) -> bool: - """ Perform a validity check based on quality_check() logic + def _are_deductions_valid(self): + """ Performs validity checks on deductions and their eco-account Returns: - result (bool) + + """ + deductions = self.instance.deductions.all() + for deduction in deductions: + checker = deduction.account.quality_check() + for msg in checker.messages: + self.add_error( + "checked_comps", + f"{deduction.account.identifier}: {msg}" + ) + return checker.valid + return True + + def _are_comps_valid(self): + """ Performs validity checks on all types of compensations + + Types of compensations are + * regular Compensations + * deductions from EcoAccounts + + Returns: + """ - super_result = super().is_valid() - # Perform check - checker = self.instance.quality_check() - for msg in checker.messages: - self.add_error( - "checked_intervention", - msg - ) comps = self.instance.compensations.all() + comps_valid = True for comp in comps: checker = comp.quality_check() for msg in checker.messages: @@ -217,7 +233,28 @@ class CheckModalForm(BaseModalForm): "checked_comps", f"{comp.identifier}: {msg}" ) - return super_result and checker.valid + comps_valid = checker.valid + deductions_valid = self._are_deductions_valid() + return deductions_valid and comps_valid + + def is_valid(self) -> bool: + """ Perform a validity check based on quality_check() logic + + Returns: + result (bool) + """ + super_valid = super().is_valid() + # Perform check + checker = self.instance.quality_check() + for msg in checker.messages: + self.add_error( + "checked_intervention", + msg + ) + all_comps_valid = self._are_comps_valid() + intervention_valid = checker.valid + + return super_valid and intervention_valid and all_comps_valid def save(self): """ Saving logic diff --git a/intervention/models/intervention.py b/intervention/models/intervention.py index b54bbcf5..737dd407 100644 --- a/intervention/models/intervention.py +++ b/intervention/models/intervention.py @@ -145,7 +145,8 @@ class Intervention(BaseObject, ShareableObjectMixin, RecordableObjectMixin, Chec def set_checked(self, user: User) -> UserActionLogEntry: log_entry = super().set_checked(user) - self.add_log_entry_to_compensations(log_entry) + if log_entry is not None: + self.add_log_entry_to_compensations(log_entry) return log_entry def set_unrecorded(self, user: User): diff --git a/konova/forms.py b/konova/forms.py index c4dff7d7..4ad309ed 100644 --- a/konova/forms.py +++ b/konova/forms.py @@ -492,6 +492,23 @@ class RecordModalForm(BaseModalForm): valid = valid and comps_valid return super_val and valid + def _are_deductions_valid(self): + """ Performs validity checks on deductions and their eco-account + + Returns: + + """ + deductions = self.instance.deductions.all() + for deduction in deductions: + checker = deduction.account.quality_check() + for msg in checker.messages: + self.add_error( + "confirm", + f"{deduction.account.identifier}: {msg}" + ) + return checker.valid + return True + def _are_compensations_valid(self): """ Runs a special case for intervention-compensations validity @@ -508,7 +525,10 @@ class RecordModalForm(BaseModalForm): "confirm", f"{comp.identifier}: {msg}" ) - return comps_valid + + deductions_valid = self._are_deductions_valid() + + return comps_valid and deductions_valid def save(self): with transaction.atomic(): diff --git a/konova/templates/konova/home.html b/konova/templates/konova/home.html index 918eae59..533bbba3 100644 --- a/konova/templates/konova/home.html +++ b/konova/templates/konova/home.html @@ -119,18 +119,8 @@ - - -
-
- -

diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index f9f5bf9c..2edf9a00 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index dd3d8092..a83b6aab 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: 2022-01-06 12:04+0100\n" +"POT-Creation-Date: 2022-01-07 15:32+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -40,7 +40,7 @@ msgstr "Bis" #: analysis/forms.py:47 compensation/forms/forms.py:77 #: compensation/templates/compensation/detail/eco_account/view.html:58 #: compensation/templates/compensation/report/eco_account/report.html:16 -#: compensation/utils/quality.py:100 ema/templates/ema/detail/view.html:49 +#: compensation/utils/quality.py:112 ema/templates/ema/detail/view.html:49 #: ema/templates/ema/report/report.html:16 ema/utils/quality.py:26 #: intervention/forms/forms.py:100 #: intervention/templates/intervention/detail/view.html:56 @@ -212,7 +212,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:258 +#: intervention/forms/modalForms.py:295 msgid "Surface" msgstr "Fläche" @@ -275,7 +275,7 @@ msgid "Type" msgstr "Typ" #: analysis/templates/analysis/reports/includes/old_data/amount.html:24 -#: intervention/forms/modalForms.py:269 intervention/forms/modalForms.py:276 +#: intervention/forms/modalForms.py:306 intervention/forms/modalForms.py:313 #: intervention/tables.py:88 #: intervention/templates/intervention/detail/view.html:19 #: konova/templates/konova/home.html:11 templates/navbars/navbar.html:22 @@ -285,7 +285,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:242 intervention/forms/modalForms.py:249 +#: intervention/forms/modalForms.py:279 intervention/forms/modalForms.py:286 #: konova/templates/konova/home.html:88 templates/navbars/navbar.html:34 msgid "Eco-account" msgstr "Ökokonto" @@ -367,7 +367,7 @@ msgstr "Zusätzlicher Kommentar" #: compensation/forms/forms.py:93 #: compensation/templates/compensation/detail/eco_account/view.html:62 #: compensation/templates/compensation/report/eco_account/report.html:20 -#: compensation/utils/quality.py:102 ema/templates/ema/detail/view.html:53 +#: compensation/utils/quality.py:114 ema/templates/ema/detail/view.html:53 #: ema/templates/ema/report/report.html:20 ema/utils/quality.py:28 #: intervention/forms/forms.py:128 #: intervention/templates/intervention/detail/view.html:60 @@ -427,7 +427,7 @@ msgstr "Neue Kompensation" msgid "Edit compensation" msgstr "Bearbeite Kompensation" -#: compensation/forms/forms.py:302 compensation/utils/quality.py:84 +#: compensation/forms/forms.py:302 compensation/utils/quality.py:96 msgid "Available Surface" msgstr "Verfügbare Fläche" @@ -437,7 +437,7 @@ msgstr "Die für Abbuchungen zur Verfügung stehende Menge" #: compensation/forms/forms.py:314 #: compensation/templates/compensation/detail/eco_account/view.html:66 -#: compensation/utils/quality.py:72 +#: compensation/utils/quality.py:84 msgid "Agreement date" msgstr "Vereinbarungsdatum" @@ -492,7 +492,7 @@ msgstr "Biotoptyp" msgid "Select the biotope type" msgstr "Biotoptyp wählen" -#: compensation/forms/modalForms.py:136 intervention/forms/modalForms.py:260 +#: compensation/forms/modalForms.py:136 intervention/forms/modalForms.py:297 msgid "in m²" msgstr "" @@ -1033,17 +1033,21 @@ msgstr "-" msgid "States unequal" msgstr "Ungleiche Zustandsflächenmengen" -#: compensation/utils/quality.py:74 intervention/utils/quality.py:84 +#: compensation/utils/quality.py:72 +msgid "Not recorded" +msgstr "Noch nicht verzeichnet" + +#: compensation/utils/quality.py:86 intervention/utils/quality.py:84 msgid "Legal data" msgstr "Rechtliche Daten" -#: compensation/utils/quality.py:88 +#: compensation/utils/quality.py:100 msgid "Deductable surface can not be larger than state surface" msgstr "" "Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht " "überschreiten" -#: compensation/utils/quality.py:104 ema/utils/quality.py:30 +#: compensation/utils/quality.py:116 ema/utils/quality.py:30 #: intervention/utils/quality.py:55 msgid "Responsible data" msgstr "Daten zu den verantwortlichen Stellen" @@ -1328,12 +1332,12 @@ msgstr "Eingriffsdaten geprüft" msgid "Checked compensations data and payments" msgstr "Kompensationen und Zahlungen geprüft" -#: intervention/forms/modalForms.py:195 +#: intervention/forms/modalForms.py:196 #: intervention/templates/intervention/detail/includes/controls.html:19 msgid "Run check" msgstr "Prüfung vornehmen" -#: intervention/forms/modalForms.py:196 konova/forms.py:457 +#: intervention/forms/modalForms.py:197 konova/forms.py:457 msgid "" "I, {} {}, confirm that all necessary control steps have been performed by " "myself." @@ -1341,23 +1345,23 @@ msgstr "" "Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt " "wurden:" -#: intervention/forms/modalForms.py:244 +#: intervention/forms/modalForms.py:281 msgid "Only recorded accounts can be selected for deductions" msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden." -#: intervention/forms/modalForms.py:271 +#: intervention/forms/modalForms.py:308 msgid "Only shared interventions can be selected" msgstr "Nur freigegebene Eingriffe können gewählt werden" -#: intervention/forms/modalForms.py:284 +#: intervention/forms/modalForms.py:321 msgid "New Deduction" msgstr "Neue Abbuchung" -#: intervention/forms/modalForms.py:285 +#: intervention/forms/modalForms.py:322 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:313 +#: intervention/forms/modalForms.py:350 msgid "" "Eco-account {} is not recorded yet. You can only deduct from recorded " "accounts." @@ -1365,7 +1369,7 @@ msgstr "" "Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von " "verzeichneten Ökokonten erfolgen." -#: intervention/forms/modalForms.py:326 +#: intervention/forms/modalForms.py:363 msgid "" "The account {} has not enough surface for a deduction of {} m². There are " "only {} m² left" @@ -1659,10 +1663,6 @@ msgstr "Neu" msgid "Show" msgstr "Anzeigen" -#: konova/templates/konova/home.html:130 -msgid "Deduct" -msgstr "Abbuchen" - #: konova/templates/konova/includes/parcels.html:3 msgid "Spatial reference" msgstr "Raumreferenz" @@ -3560,6 +3560,9 @@ msgstr "" msgid "Unable to connect to qpid with SASL mechanism %s" msgstr "" +#~ msgid "Deduct" +#~ msgstr "Abbuchen" + #~ msgid "No file given!" #~ msgstr "Keine Datei angegeben!"