#132 Control deadlines

* extends migration to migration of action control deadlines
* adds EMA deadline migration
This commit is contained in:
mpeltriaux 2022-03-17 15:30:27 +01:00
parent 87e88fea54
commit 4a06f8625a
2 changed files with 191 additions and 2 deletions

View File

@ -49,7 +49,7 @@
<td class="align-middle">{{ deadline.date|default_if_none:"---" }}</td>
<td class="align-middle">
<div class="scroll-150">
{{ deadline.comment }}
{{ deadline.comment|linebreaks }}
</div>
</td>
<td class="align-middle float-right">

View File

@ -3,7 +3,8 @@ from django.db import transaction
from codelist.models import KonovaCode
from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID, \
CODELIST_COMPENSATION_ACTION_DETAIL_ID, CODELIST_COMPENSATION_ACTION_ID
CODELIST_COMPENSATION_ACTION_DETAIL_ID, CODELIST_COMPENSATION_ACTION_ID, CODELIST_CONSERVATION_OFFICE_ID, \
CODELIST_HANDLER_ID, CODELIST_COMPENSATION_HANDLER_ID
from compensation.models import Compensation, CompensationState, CompensationAction, UnitChoices, CompensationDocument
from ema.models import Ema, EmaDocument
from intervention.models import Responsibility, Handler, Intervention
@ -63,6 +64,7 @@ class CompensationMigrater(BaseMigrater):
compensation = self._migrate_compensation_type(compensation, kom)
compensation = self._migrate_states(compensation, kom)
compensation = self._migrate_deadlines(compensation, kom)
compensation = self._migrate_action_control_deadlines(compensation, kom)
compensation = self._migrate_actions(compensation, kom)
compensation = self._migrate_documents(compensation, CompensationDocument, kom)
try:
@ -219,6 +221,92 @@ class CompensationMigrater(BaseMigrater):
tmp_cursor.close()
return compensation
def _migrate_action_control_deadlines(self, compensation, kom):
kom_identifier = f"'{kom[0]}'"
tmp_cursor = self.db_connection.cursor()
tmp_cursor.execute(
'select '
'k."Datum", '
'k."Typ", '
'k."Ergebnis", '
'k."Stelle", '
'k."Bemerkung" '
'from "OBJ_MASTER" om '
'left join "MASSN" m on m."GISPADID"=om."GISPADID" '
'left join "Kontrolle" k on m."PKEY"=k."FKEY" '
'where '
f'om."KENNUNG"={kom_identifier}'
)
control_types = {
707175: "Zielerreichungskontrolle",
707176: "Zustandskontrolle",
707174: "Ausführungskontrolle",
}
control_results = {
153097: "nicht beurteilbar",
153954: "vollständig umgesetzt",
153956: "teilweise umgesetzt",
153957: "eher nicht umgesetzt",
153960: "mit leichten Mängeln",
153963: "ohne Mängel",
187136: "Ziel nicht erreicht",
187137: "Ziel teilweise erreicht",
187139: "Ziel vollständig umgesetzt",
}
db_results = tmp_cursor.fetchall()
for result in db_results:
control_date = result[0]
if control_date is None:
# useless data
continue
control_type = result[1]
control_result = result[2]
control_responsible = result[3]
control_comment = result[4] or ""
try:
control_type = control_types[control_type]
except KeyError:
control_type = "Unbekannt"
try:
control_result = control_results[control_result]
except KeyError:
control_result = "Unbekannt"
try:
control_responsible = KonovaCode.objects.get(
atom_id=control_responsible,
is_selectable=True,
is_archived=False,
code_lists__in=[CODELIST_COMPENSATION_HANDLER_ID]
)
control_responsible = control_responsible.long_name
except ObjectDoesNotExist:
control_responsible = "Unbekannt"
control_comment += f"\n\nKontrolltyp: {control_type}"
control_comment += f"\nKontrollergebnis: {control_result}"
control_comment += f"\nKontrollstelle: {control_responsible}"
try:
deadline = compensation.deadlines.get(
type=DeadlineType.CONTROL,
date=control_date,
comment=control_comment
)
except ObjectDoesNotExist:
deadline = Deadline.objects.create(
type=DeadlineType.CONTROL,
date=control_date,
comment=control_comment
)
compensation.deadlines.add(deadline)
tmp_cursor.close()
return compensation
def _migrate_deadlines(self, compensation, kom):
compensation.deadlines.all().delete()
kom_identifier = f"'{kom[0]}'"
@ -461,9 +549,110 @@ class EmaMigrater(CompensationMigrater):
ema_obj = self._migrate_compensation_type(ema_obj, ema)
ema_obj = self._migrate_states(ema_obj, ema)
ema_obj = self._migrate_deadlines(ema_obj, ema)
ema_obj = self._migrate_action_control_deadlines(ema_obj, ema)
ema_obj = self._migrate_actions(ema_obj, ema)
ema_obj = self._migrate_documents(ema_obj, EmaDocument, ema)
ema_obj.save()
num_processed += 1
cursor.close()
def _migrate_deadlines(self, ema_obj, ema_result):
ema_obj.deadlines.all().delete()
ema_identifier = f"'{ema_result[0]}'"
tmp_cursor = self.db_connection.cursor()
tmp_cursor.execute(
'select '
't."Terminart", '
't."K_Termin"::date '
'from "OBJ_MASTER" om '
'left join "Termine" t on om."GISPADID"=t."GISPADID" '
'where '
f'om."KENNUNG"={ema_identifier}'
)
db_results = tmp_cursor.fetchall()
for result in db_results:
deadline_type = result[0]
deadline_comment = None
if deadline_type == 708166:
deadline_comment = "Wiedervorlage"
elif deadline_type == 708163:
deadline_comment = "Projektbeginn"
deadline_date = result[1]
if deadline_date is None:
# Useless data
continue
try:
deadline = ema_obj.deadlines.get(
type=DeadlineType.OTHER,
date=deadline_date,
comment=deadline_comment
)
except ObjectDoesNotExist:
deadline = Deadline.objects.create(
type=DeadlineType.OTHER,
date=deadline_date,
comment=deadline_comment
)
ema_obj.deadlines.add(deadline)
return ema_obj
def _migrate_responsibility(self, ema_obj, ema_result):
ema_identifier = f"'{ema_result[0]}'"
tmp_cursor = self.db_connection.cursor()
tmp_cursor.execute(
'select '
'adr."adr_pruef" as ets, '
'linf."AZ", '
'adr.behoerde, '
'adr.angaben '
'from "OBJ_MASTER" om '
'left join "LINFOS" linf on om."GISPADID"=linf."GISPADID" '
'left join adressrolle adr on adr."GISPADID"=om."GISPADID" '
'where '
f'om."KENNUNG"={ema_identifier} '
)
db_results = tmp_cursor.fetchall()
if len(db_results) != 1:
raise AssertionError(f"{ema_identifier} has invalid responsibilities: {db_results}")
db_results = db_results[0]
cons_office_code = db_results[0]
cons_file_number = db_results[1]
handler_type = db_results[2]
handler_detail = db_results[3]
responsible = ema_obj.responsible or Responsibility.objects.create()
try:
conservation_office = KonovaCode.objects.get(
atom_id=cons_office_code,
is_selectable=True,
is_archived=False,
code_lists__in=[CODELIST_CONSERVATION_OFFICE_ID]
)
except ObjectDoesNotExist:
raise ObjectDoesNotExist(f"{ema_identifier}, {db_results}")
try:
handler_type = KonovaCode.objects.get(
atom_id=handler_type,
is_selectable=True,
is_archived=False,
code_lists__in=[CODELIST_COMPENSATION_HANDLER_ID]
)
except ObjectDoesNotExist:
handler_type = None
responsible.conservation_file_number = db_results[1]
ema_obj.responsible.conservation_office = conservation_office
ema_obj.responsible.conservation_file_number = cons_file_number
handler = ema_obj.responsible.handler or Handler.objects.create()
handler.type = handler_type
handler.detail = handler_detail
ema_obj.responsible.handler = handler
ema_obj.responsible.handler.save()
ema_obj.responsible.save()
tmp_cursor.close()
return ema_obj