#132 Control deadlines
* extends migration to migration of action control deadlines * adds EMA deadline migration
This commit is contained in:
parent
87e88fea54
commit
4a06f8625a
@ -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">
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user