108 lines
3.1 KiB
Python
108 lines
3.1 KiB
Python
|
"""
|
||
|
Author: Michel Peltriaux
|
||
|
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
|
||
|
Contact: ksp-servicestelle@sgdnord.rlp.de
|
||
|
Created on: 18.08.22
|
||
|
|
||
|
"""
|
||
|
from django import forms
|
||
|
from django.db import transaction
|
||
|
from django.utils.translation import gettext_lazy as _
|
||
|
|
||
|
from konova.forms.modals import BaseModalForm
|
||
|
|
||
|
|
||
|
class CheckModalForm(BaseModalForm):
|
||
|
""" The modal form for running a check on interventions and their compensations
|
||
|
|
||
|
"""
|
||
|
checked_intervention = forms.BooleanField(
|
||
|
label=_("Checked intervention data"),
|
||
|
label_suffix="",
|
||
|
widget=forms.CheckboxInput(),
|
||
|
required=True,
|
||
|
)
|
||
|
checked_comps = forms.BooleanField(
|
||
|
label=_("Checked compensations data and payments"),
|
||
|
label_suffix="",
|
||
|
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 _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(
|
||
|
"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:
|
||
|
|
||
|
"""
|
||
|
comps = self.instance.compensations.filter(
|
||
|
deleted=None,
|
||
|
)
|
||
|
comps_valid = True
|
||
|
for comp in comps:
|
||
|
checker = comp.quality_check()
|
||
|
for msg in checker.messages:
|
||
|
self.add_error(
|
||
|
"checked_comps",
|
||
|
f"{comp.identifier}: {msg}"
|
||
|
)
|
||
|
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
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
"""
|
||
|
with transaction.atomic():
|
||
|
self.instance.set_checked(self.user)
|