Skip to content

Commit da19097

Browse files
committed
add plan regulation group associations
1 parent 3b5aae1 commit da19097

File tree

2 files changed

+51
-8
lines changed

2 files changed

+51
-8
lines changed

arho_feature_template/core/plan_manager.py

+15-8
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
PlanFeatureLayer,
2828
PlanLayer,
2929
PlanRegulationLayer,
30+
RegulationGroupAssociationLayer,
3031
RegulationGroupLayer,
3132
plan_layers,
3233
)
@@ -229,7 +230,7 @@ def save_plan(plan_data: Plan) -> QgsFeature:
229230
for regulation_group in plan_data.general_regulations:
230231
plan_id = plan_feature["id"]
231232
regulation_group_feature = save_regulation_group(regulation_group, plan_id)
232-
save_regulation_grop_assosiation(plan_id, regulation_group_feature["id"])
233+
save_regulation_group_association(regulation_group_feature["id"], plan_id=plan_id)
233234

234235
return plan_feature
235236

@@ -250,11 +251,9 @@ def save_plan_feature(plan_feature: PlanFeature, plan_id: str | None = None) ->
250251
if not layer_class:
251252
msg = f"Could not find plan feature layer class for layer name {plan_feature.layer_name}"
252253
raise ValueError(msg)
253-
feature = layer_class.feature_from_model(plan_feature)
254-
layer = layer_class.get_from_project()
255254

256-
if plan_id:
257-
feature["plan_id"] = plan_id
255+
feature = layer_class.feature_from_model(plan_feature, plan_id)
256+
layer = layer_class.get_from_project()
258257

259258
_save_feature(
260259
feature=feature,
@@ -266,7 +265,8 @@ def save_plan_feature(plan_feature: PlanFeature, plan_id: str | None = None) ->
266265
# Handle regulation groups
267266
if plan_feature.regulation_groups:
268267
for group in plan_feature.regulation_groups:
269-
save_regulation_group(group)
268+
regulation_group_feature = save_regulation_group(group)
269+
save_regulation_group_association(regulation_group_feature["id"], plan_feature.layer_name, feature["id"])
270270

271271
return feature
272272

@@ -291,8 +291,15 @@ def save_regulation_group(regulation_group: RegulationGroup, plan_id: str | None
291291
return feature
292292

293293

294-
def save_regulation_grop_assosiation(plan_id: str, regulation_group_id: str):
295-
pass
294+
def save_regulation_group_association(
295+
regulation_group_id: str, layer_name: str | None = None, feature_id: str | None = None, plan_id: str | None = None
296+
) -> QgsFeature:
297+
feature = RegulationGroupAssociationLayer.feature_from(regulation_group_id, layer_name, feature_id, plan_id)
298+
layer = RegulationGroupAssociationLayer.get_from_project()
299+
300+
_save_feature(feature=feature, layer=layer, id_=None, edit_text="")
301+
302+
return feature
296303

297304

298305
def save_regulation(regulation: Regulation) -> QgsFeature:

arho_feature_template/project/layers/plan_layers.py

+36
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,42 @@ class RegulationGroupAssociationLayer(AbstractPlanLayer):
155155
)
156156
)
157157

158+
layer_name_to_attribute_map: ClassVar[dict[str, str]] = {
159+
LandUsePointLayer.name: "land_use_point_id",
160+
OtherAreaLayer.name: "other_area_id",
161+
OtherPointLayer.name: "other_point_id",
162+
LandUseAreaLayer.name: "land_use_area_id",
163+
LineLayer.name: "line_id",
164+
}
165+
166+
@classmethod
167+
def feature_from(
168+
cls,
169+
regulation_group_id: str | None,
170+
layer_name: str | None = None,
171+
feature_id: str | None = None,
172+
plan_id: str | None = None,
173+
) -> QgsFeature:
174+
layer = cls.get_from_project()
175+
176+
feature = QgsVectorLayerUtils.createFeature(layer)
177+
feature["plan_regulation_group_id"] = regulation_group_id
178+
179+
if layer_name:
180+
if feature_id is None:
181+
msg = "Plan feature ID must be provided to create association for regulation group and plan feature."
182+
raise ValueError(msg)
183+
attribute = cls.layer_name_to_attribute_map[layer_name]
184+
feature[attribute] = feature_id
185+
186+
feature["plan_id"] = (
187+
plan_id
188+
if plan_id
189+
else QgsExpressionContextUtils.projectScope(QgsProject.instance()).variable("active_plan_id")
190+
)
191+
192+
return feature
193+
158194

159195
class PlanRegulationLayer(AbstractPlanLayer):
160196
name = "Kaavamääräys"

0 commit comments

Comments
 (0)