Skip to content

Commit af521d3

Browse files
nmaarnioLKajan
authored andcommitted
implement deleting propositions and regulations when deleting or editing regulation group
1 parent 829539b commit af521d3

File tree

2 files changed

+47
-9
lines changed

2 files changed

+47
-9
lines changed

arho_feature_template/core/plan_manager.py

+25-9
Original file line numberDiff line numberDiff line change
@@ -573,20 +573,36 @@ def save_regulation_group(regulation_group: RegulationGroup, plan_id: str | None
573573
feature = RegulationGroupLayer.feature_from_model(regulation_group, plan_id)
574574
layer = RegulationGroupLayer.get_from_project()
575575

576+
editing = regulation_group.id_ is not None
576577
_save_feature(
577578
feature=feature,
578579
layer=layer,
579580
id_=regulation_group.id_,
580-
edit_text="Kaavamääräysryhmän lisäys" if regulation_group.id_ is None else "Kaavamääräysryhmän muokkaus",
581+
edit_text="Kaavamääräysryhmän muokkaus" if editing else "Kaavamääräysryhmän lisäys",
581582
)
582583

583-
# Handle regulations
584+
if editing:
585+
# Check for regulations to be deleted
586+
regulation_layer = PlanRegulationLayer.get_from_project()
587+
for reg_feature in PlanRegulationLayer.get_regulations_to_delete(
588+
regulation_group.regulations, regulation_group
589+
):
590+
_delete_feature(reg_feature, regulation_layer, "Kaavamääräyksen poisto")
591+
592+
# Check for propositions to be deleted
593+
proposition_layer = PlanPropositionLayer.get_from_project()
594+
for prop_feature in PlanPropositionLayer.get_propositions_to_delete(
595+
regulation_group.propositions, regulation_group
596+
):
597+
_delete_feature(prop_feature, proposition_layer, "Kaavasuosituksen poisto")
598+
599+
# Save regulations
584600
if regulation_group.regulations:
585601
for regulation in regulation_group.regulations:
586602
regulation.regulation_group_id_ = feature["id"] # Updating regulation group ID
587603
save_regulation(regulation)
588604

589-
# Handle propositions
605+
# Save propositions
590606
if regulation_group.propositions:
591607
for proposition in regulation_group.propositions:
592608
proposition.regulation_group_id_ = feature["id"] # Updating regulation group ID
@@ -602,13 +618,13 @@ def delete_regulation_group(regulation_group: RegulationGroup, plan_id: str | No
602618
feature = RegulationGroupLayer.feature_from_model(regulation_group, plan_id)
603619
layer = RegulationGroupLayer.get_from_project()
604620

605-
# # Handle regulations
606-
# for regulation in regulation_group.regulations:
607-
# delete_regulation(regulation)
621+
# Delete regulations
622+
for regulation in regulation_group.regulations:
623+
delete_regulation(regulation)
608624

609-
# # Handle propositions
610-
# for proposition in regulation_group.propositions:
611-
# delete_proposition(proposition)
625+
# Delete propositions
626+
for proposition in regulation_group.propositions:
627+
delete_proposition(proposition)
612628

613629
_delete_feature(feature, layer, "Kaavamääräysryhmän poisto")
614630

arho_feature_template/project/layers/plan_layers.py

+22
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,17 @@ def model_from_feature(cls, feature: QgsFeature) -> Regulation:
361361
def regulations_with_group_id(cls, group_id: str) -> Generator[QgsFeature]:
362362
return cls.get_features_by_attribute_value("plan_regulation_group_id", group_id)
363363

364+
@classmethod
365+
def get_regulations_to_delete(
366+
cls, regulations: list[Regulation], regulation_group: RegulationGroup
367+
) -> list[QgsFeature]:
368+
updated_regulation_ids = [regulation.id_ for regulation in regulations]
369+
return [
370+
reg
371+
for reg in cls.get_features_by_attribute_value("plan_regulation_group_id", str(regulation_group.id_))
372+
if reg["id"] not in updated_regulation_ids
373+
]
374+
364375

365376
class PlanPropositionLayer(AbstractPlanLayer):
366377
name = "Kaavasuositus"
@@ -403,6 +414,17 @@ def model_from_feature(cls, feature: QgsFeature) -> Proposition:
403414
def propositions_with_group_id(cls, group_id: str) -> Generator[QgsFeature]:
404415
return cls.get_features_by_attribute_value("plan_regulation_group_id", group_id)
405416

417+
@classmethod
418+
def get_propositions_to_delete(
419+
cls, propositions: list[Proposition], regulation_group: RegulationGroup
420+
) -> list[QgsFeature]:
421+
updated_proposition_ids = [proposition.id_ for proposition in propositions]
422+
return [
423+
prop
424+
for prop in cls.get_features_by_attribute_value("plan_regulation_group_id", str(regulation_group.id_))
425+
if prop["id"] not in updated_proposition_ids
426+
]
427+
406428

407429
class DocumentLayer(AbstractPlanLayer):
408430
name = "Asiakirjat"

0 commit comments

Comments
 (0)