New command

* adds a specific command for repairing old entries of trier-saarburg ets
This commit is contained in:
mpeltriaux 2023-03-06 08:07:18 +01:00
parent e2b0120f93
commit b941b4236e
3 changed files with 161 additions and 0 deletions

View File

@ -0,0 +1,7 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 06.03.23
"""

View File

@ -0,0 +1,7 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 06.03.23
"""

View File

@ -0,0 +1,147 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 06.03.23
"""
from django.db.models import Q
from codelist.models import KonovaCode
from compensation.utils.quality import CompensationQualityChecker
from intervention.models import Intervention
from intervention.utils.quality import InterventionQualityChecker
from konova.management.commands.setup import BaseKonovaCommand
from user.models import User
class Command(BaseKonovaCommand):
help = "Repairs old entries, which have lost some attributes but can easily be fixed"
interventions = None
correct_law = None
correct_registration_office = None
user = None
def handle(self, *args, **options):
self.get_law()
self.get_interventions()
self.get_user()
self.get_registration_office()
for entry in self.interventions:
self._write_warning(f"{entry.identifier};{entry.responsible.registration_file_number}; {entry.responsible.registration_office}, {list(entry.legal.laws.all())}")
def get_law(self):
""" Returns the expected law (LBauO; id=1935994)
"""
if not self.correct_law:
law = KonovaCode.objects.get(
id=1935994
)
self.correct_law = law
return self.correct_law
def get_interventions(self):
""" Returns the needed interventions
"""
if not self.interventions:
interventions = Intervention.objects.filter(
Q(responsible__registration_file_number__contains="BG") |
Q(responsible__registration_file_number__contains="BA")
).filter(
responsible__conservation_office_id=1944348,
responsible__registration_office_id__isnull=True,
recorded__isnull=True,
)
self.interventions = interventions
return self.interventions
def get_user(self):
""" Returns the user, which shall be logged as 'performing user'
"""
if not self.user:
user = User.objects.get(
username="weinberger"
)
self.user = user
return self.user
def get_registration_office(self):
""" Returns the registration office
Finds and returns 'untere Bauaufsichtsbehörde - LK Trier-Saarburg' (id=1958136)
"""
if not self.correct_registration_office:
office = KonovaCode.objects.get(
id=1958136
)
self.correct_registration_office = office
return self.correct_registration_office
def repair(self):
""" Repairs the laws
"""
interventions = self.get_interventions()
for entry in interventions:
self._repair_laws(entry)
self._repair_registration_office(entry)
def _repair_laws(self, entry):
""" Fixes missing law
Inserts the law to be expected into the m2m relation of an intervention entry
"""
correct_law = self.get_law()
laws = entry.legal.laws.all()
if correct_law not in laws:
laws.add(correct_law)
def _repair_registration_office(self, entry):
""" Fixes missing registration office
"""
assert entry.responsible.registration_office is None
reg_office = self.get_registration_office()
entry.responsible.registration_office = reg_office
entry.responsible.save()
def _repair_recording(self, entry):
""" Fixes recording state
Performs quality check on intervention.
Performs quality check on compensations.
If all checks pass, the entry will be recorded
"""
user = self.get_user()
intervention_checker = InterventionQualityChecker(entry)
intervention_checker.run_check()
intervention_valid = intervention_checker.valid
if not intervention_valid:
self._write_error(f"{entry.identifier} not valid: {intervention_checker.messages}")
return
entry_coms = entry.compensations.all()
coms_valid = True
for com in entry_coms:
com_checker = CompensationQualityChecker(com)
com_checker.run_check()
if not com_checker.valid:
self._write_warning(
f"{entry.identifier}: Compensation {com.identifier} not valid: {com_checker.messages}"
)
coms_valid = False
if coms_valid and intervention_valid:
entry.set_recorded(user=user)