Skip to content

Commit 2226ff4

Browse files
committed
Fixed saving lifecycles
Moved contents of lifecycle_layers.py to plan_layers.py. Added lifecycles to plan model. Refactored saving lifecycles. Removed unused classmethod from LifeCycleStatusLayer.
1 parent fcc5d68 commit 2226ff4

File tree

6 files changed

+67
-139
lines changed

6 files changed

+67
-139
lines changed

arho_feature_template/core/models.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,6 @@ class LifeCycle:
328328
status_id: str | None
329329
id_: int | None = None
330330
plan_id: str | None = None
331-
# plan_id_: int | None = None
332331
plan_regulation_id: str | None = None
333332
plan_proposition_id: str | None = None
334333
starting_at: datetime | None = None
@@ -364,7 +363,7 @@ class Plan:
364363
description: str | None = None
365364
plan_type_id: str | None = None
366365
lifecycle_status_id: str | None = None
367-
# lifecycle: list[LifeCycle] = field(default_factory=list)
366+
lifecycles: list[LifeCycle] = field(default_factory=list)
368367
record_number: str | None = None
369368
matter_management_identifier: str | None = None
370369
permanent_plan_identifier: str | None = None

arho_feature_template/core/plan_manager.py

+17-17
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
from arho_feature_template.gui.docks.new_feature_dock import NewFeatureDock
2727
from arho_feature_template.gui.tools.inspect_plan_features_tool import InspectPlanFeatures
2828
from arho_feature_template.project.layers.code_layers import PlanRegulationGroupTypeLayer
29-
from arho_feature_template.project.layers.lifecycle_layers import LifeCycleLayer
3029
from arho_feature_template.project.layers.plan_layers import (
3130
LandUseAreaLayer,
3231
LandUsePointLayer,
32+
LifeCycleLayer,
3333
LineLayer,
3434
OtherAreaLayer,
3535
OtherPointLayer,
@@ -216,8 +216,6 @@ def _plan_geom_digitized(self, feature: QgsFeature):
216216
attribute_form = PlanAttributeForm(plan_model, self.get_regulation_group_libraries())
217217
if attribute_form.exec_():
218218
feature = save_plan(attribute_form.model)
219-
lifecycle_features = save_lifecycle(attribute_form.lifecycle_model, feature["id"])
220-
# print(lifecycle_features)
221219
plan_to_be_activated = feature["id"]
222220
else:
223221
plan_to_be_activated = self.previous_active_plan_id
@@ -465,6 +463,11 @@ def save_plan(plan: Plan) -> QgsFeature:
465463
regulation_group_feature = save_regulation_group(regulation_group, plan_id)
466464
save_regulation_group_association(regulation_group_feature["id"], PlanLayer.name, plan_id)
467465

466+
# loop lifecycles and save
467+
for lifecycle in plan.lifecycles:
468+
lifecycle.plan_id = feature["id"]
469+
save_lifecycle(lifecycle)
470+
468471
# Save plan lifecycles
469472
# if hasattr(plan, "lifecycle"):
470473
# print("Has attribute lifecycle!")
@@ -574,21 +577,18 @@ def save_regulation(regulation: Regulation) -> QgsFeature:
574577
return feature
575578

576579

577-
def save_lifecycle(lifecycles: list[LifeCycle]) -> list[QgsFeature]:
580+
def save_lifecycle(lifecycle: LifeCycle) -> QgsFeature:
578581
"""Save a list of LifeCycle objects to the layer."""
579-
lifecycle_layer = LifeCycleLayer.get_from_project()
580-
if not lifecycle_layer:
581-
raise RuntimeError("Lifecycle layer not found in the project.")
582-
583-
saved_features = []
584-
for lifecycle in lifecycles:
585-
# Create or update a feature from the model
586-
feature = LifeCycleLayer.feature_from_model(lifecycle)
587-
lifecycle_layer.addFeature(feature)
588-
saved_features.append(feature)
589-
590-
lifecycle_layer.commitChanges()
591-
return saved_features
582+
feature = LifeCycleLayer.feature_from_model(lifecycle)
583+
layer = LifeCycleLayer.get_from_project()
584+
585+
_save_feature(
586+
feature=feature,
587+
layer=layer,
588+
id_=lifecycle.id_,
589+
edit_text="Elinkaaren lisäys" if lifecycle.id_ is None else "Elinkaaren muokkaus",
590+
)
591+
return feature
592592

593593

594594
def save_proposition(proposition: Proposition) -> QgsFeature:

arho_feature_template/gui/dialogs/plan_attribute_form.py

+4-16
Original file line numberDiff line numberDiff line change
@@ -180,43 +180,31 @@ def save_lifecycle(self):
180180

181181
# Add to the model
182182
item = QStandardItem(lifecycle_entry)
183+
item.setData(self.lifecycle_status_combo_box.value(), Qt.UserRole + 1)
183184
self.lifecycle_model.appendRow(item)
184185

185186
# Optionally, check required fields again
186187
self._check_required_fields()
187188

188189
def into_lifecycle_model(self) -> list[LifeCycle]:
189-
print("Calling into_lifecycle_model at plan_attribute_form.py")
190190
lifecycles = []
191191

192192
for row in range(self.lifecycle_model.rowCount()):
193193
item = self.lifecycle_model.item(row)
194194
if item:
195195
lifecycle_entry = item.text()
196196
parts = lifecycle_entry.split(" | ")
197-
status = parts[0]
198197
date_range = parts[1]
199198
date_parts = date_range.split(" - ")
200199
start_date = date_parts[0]
201200
end_date = date_parts[1] if len(date_parts) > 1 else None # End date is optional
202201

203-
print(f"Got status: {status}")
204-
print(f"Got status_id: {LifeCycleStatusLayer.get_id_by_value(status)}")
205-
206202
# Add the lifecycle to the list
207203
lifecycles.append(
208204
LifeCycle(
209-
status_id=LifeCycleStatusLayer.get_id_by_value(status),
210-
plan_id="52aadc88-feb0-443b-a423-f5a50d0bb9fc",
211-
land_use_are_id=None,
212-
other_area_id=None,
213-
line_id=None,
214-
land_use_point_id=None,
215-
other_point_id=None,
205+
status_id=item.data(Qt.UserRole + 1),
216206
starting_at=start_date,
217207
ending_at=end_date,
218-
plan_regulation_id=None,
219-
plan_proposition_id=None,
220208
)
221209
)
222210

@@ -234,12 +222,12 @@ def into_model(self) -> Plan:
234222
producers_plan_identifier=self.producers_plan_identifier_line_edit.text() or None,
235223
matter_management_identifier=self.matter_management_identifier_line_edit.text() or None,
236224
lifecycle_status_id=self.lifecycle_status_combo_box.value(), # Need to get the lifecycle with the latest lifecycle
237-
# lifecycle=self.get_lifecycles(),
225+
lifecycles=self.into_lifecycle_model(),
238226
general_regulations=[reg_group_widget.into_model() for reg_group_widget in self.regulation_group_widgets],
239227
geom=self.plan.geom,
240228
)
241229

242230
def _on_ok_clicked(self):
243231
self.model = self.into_model()
244-
self.lifecycle_model = self.into_lifecycle_model()
232+
# self.lifecycle_model = self.into_lifecycle_model()
245233
self.accept()

arho_feature_template/project/layers/code_layers.py

-7
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,6 @@ class PlanTypeLayer(AbstractCodeLayer):
1717
class LifeCycleStatusLayer(AbstractCodeLayer):
1818
name = "Elinkaaren tila"
1919

20-
@classmethod
21-
def get_id_by_value(cls, value: str) -> str | None:
22-
"""Fetch the id based on the provided value."""
23-
print(f"Searching for UUID for lifecycle_statis of: {value}")
24-
attribute_value = cls.get_attribute_value_by_another_attribute_value("id", "name", value)
25-
return cast(str, attribute_value) if attribute_value else attribute_value
26-
2720

2821
class OrganisationLayer(AbstractCodeLayer):
2922
name = "Toimija"

arho_feature_template/project/layers/lifecycle_layers.py

-96
This file was deleted.

arho_feature_template/project/layers/plan_layers.py

+45-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from qgis.utils import iface
1212

1313
from arho_feature_template.core.models import (
14+
LifeCycle,
1415
Plan,
1516
PlanFeature,
1617
Proposition,
@@ -27,11 +28,13 @@
2728

2829

2930
class AbstractPlanLayer(AbstractLayer):
30-
filter_template: ClassVar[Template]
31+
filter_template: ClassVar[Template | None]
3132

3233
@classmethod
3334
def apply_filter(cls, plan_id: str | None) -> None:
3435
"""Apply a filter to the layer based on the plan_id."""
36+
if cls.filter_template is None:
37+
return
3538
filter_expression = cls.filter_template.substitute(plan_id=plan_id) if plan_id else ""
3639
layer = cls.get_from_project()
3740
if layer.isEditable():
@@ -406,6 +409,47 @@ class SourceDataLayer(AbstractPlanLayer):
406409
filter_template = Template("plan_id = '$plan_id'")
407410

408411

412+
class LifeCycleLayer(AbstractPlanLayer):
413+
name = "Elinkaaren päiväykset"
414+
filter_template = None
415+
416+
@classmethod
417+
def feature_from_model(cls, model: LifeCycle) -> QgsFeature:
418+
feature = cls.initialize_feature_from_model(model)
419+
# feature["id"] = model.id_
420+
feature["id"] = model.id_ if model.id_ else feature["id"]
421+
feature["lifecycle_status_id"] = model.status_id
422+
feature["starting_at"] = model.starting_at
423+
feature["ending_at"] = model.ending_at if model.ending_at else None
424+
feature["plan_id"] = model.plan_id
425+
feature["land_use_area_id"] = model.land_use_are_id
426+
feature["other_area_id"] = model.other_area_id
427+
feature["line_id"] = model.line_id
428+
feature["land_use_point_id"] = model.land_use_point_id
429+
feature["other_point_id"] = model.other_point_id
430+
feature["plan_regulation_id"] = model.plan_regulation_id
431+
feature["plan_proposition_id"] = model.plan_proposition_id
432+
433+
return feature
434+
435+
@classmethod
436+
def model_from_feature(cls, feature: QgsFeature) -> LifeCycle:
437+
return LifeCycle(
438+
id_=feature["id"],
439+
status_id=feature["lifecycle_status_id"],
440+
starting_at=feature["starting_at"],
441+
ending_at=feature["ending_at"] if feature["ending_at"] else None,
442+
plan_id=feature["plan_id"],
443+
land_use_are_id=feature["land_use_area_id"] if feature["land_use_area_id"] else None,
444+
other_area_id=feature["other_area_id"] if feature["other_area_id"] else None,
445+
line_id=feature["line_id"] if feature["line_id"] else None,
446+
land_use_point_id=feature["land_use_point_id"] if feature["land_use_point_id"] else None,
447+
other_point_id=feature["other_point_id"] if feature["other_point_id"] else None,
448+
plan_regulation_id=feature["plan_regulation_id"] if feature["plan_regulation_id"] else None,
449+
plan_proposition_id=feature["plan_proposition_id"] if feature["plan_proposition_id"] else None,
450+
)
451+
452+
409453
plan_layers = AbstractPlanLayer.__subclasses__()
410454
plan_layers.remove(PlanFeatureLayer)
411455

0 commit comments

Comments
 (0)