Skip to content

Commit 1ebb154

Browse files
Mtk112nmaarnio
authored andcommitted
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 312677e commit 1ebb154

File tree

6 files changed

+81
-139
lines changed

6 files changed

+81
-139
lines changed

arho_feature_template/core/models.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,6 @@ class LifeCycle:
347347
status_id: str | None
348348
id_: int | None = None
349349
plan_id: str | None = None
350-
# plan_id_: int | None = None
351350
plan_regulation_id: str | None = None
352351
plan_proposition_id: str | None = None
353352
starting_at: datetime | None = None
@@ -383,7 +382,7 @@ class Plan:
383382
description: str | None = None
384383
plan_type_id: str | None = None
385384
lifecycle_status_id: str | None = None
386-
# lifecycle: list[LifeCycle] = field(default_factory=list)
385+
lifecycles: list[LifeCycle] = field(default_factory=list)
387386
record_number: str | None = None
388387
matter_management_identifier: str | None = None
389388
permanent_plan_identifier: str | None = None

arho_feature_template/core/plan_manager.py

+31-17
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@
2929
from arho_feature_template.gui.docks.regulation_groups_dock import RegulationGroupsDock
3030
from arho_feature_template.gui.tools.inspect_plan_features_tool import InspectPlanFeatures
3131
from arho_feature_template.project.layers.code_layers import PlanRegulationGroupTypeLayer, code_layers
32-
from arho_feature_template.project.layers.lifecycle_layers import LifeCycleLayer
3332
from arho_feature_template.project.layers.plan_layers import (
3433
DocumentLayer,
3534
LandUseAreaLayer,
3635
LandUsePointLayer,
36+
LifeCycleLayer,
3737
LineLayer,
3838
OtherAreaLayer,
3939
OtherPointLayer,
@@ -268,8 +268,6 @@ def _plan_geom_digitized(self, feature: QgsFeature):
268268
attribute_form = PlanAttributeForm(plan_model, self.regulation_group_libraries)
269269
if attribute_form.exec_():
270270
feature = save_plan(attribute_form.model)
271-
lifecycle_features = save_lifecycle(attribute_form.lifecycle_model, feature["id"])
272-
# print(lifecycle_features)
273271
plan_to_be_activated = feature["id"]
274272
else:
275273
plan_to_be_activated = self.previous_active_plan_id
@@ -530,6 +528,10 @@ def save_plan(plan: Plan) -> QgsFeature:
530528
document.plan_id = plan_id
531529
save_document(document)
532530

531+
for lifecycle in plan.lifecycles:
532+
lifecycle.plan_id = feature["id"]
533+
save_lifecycle(lifecycle)
534+
533535
return feature
534536

535537

@@ -708,18 +710,30 @@ def save_document(document: Document) -> QgsFeature:
708710
return feature
709711

710712

711-
def save_lifecycle(lifecycles: list[LifeCycle]) -> list[QgsFeature]:
713+
def save_proposition(proposition: Proposition) -> QgsFeature:
714+
feature = PlanPropositionLayer.feature_from_model(proposition)
715+
layer = PlanPropositionLayer.get_from_project()
716+
717+
_save_feature(
718+
feature=feature,
719+
layer=layer,
720+
id_=proposition.id_,
721+
edit_text="Kaavasuosituksen lisäys" if proposition.id_ is None else "Kaavasuosituksen muokkaus",
722+
)
723+
724+
return feature
725+
726+
727+
728+
def save_lifecycle(lifecycle: LifeCycle) -> QgsFeature:
712729
"""Save a list of LifeCycle objects to the layer."""
713-
lifecycle_layer = LifeCycleLayer.get_from_project()
714-
if not lifecycle_layer:
715-
raise RuntimeError("Lifecycle layer not found in the project.")
716-
717-
saved_features = []
718-
for lifecycle in lifecycles:
719-
# Create or update a feature from the model
720-
feature = LifeCycleLayer.feature_from_model(lifecycle)
721-
lifecycle_layer.addFeature(feature)
722-
saved_features.append(feature)
723-
724-
lifecycle_layer.commitChanges()
725-
return saved_features
730+
feature = LifeCycleLayer.feature_from_model(lifecycle)
731+
layer = LifeCycleLayer.get_from_project()
732+
733+
_save_feature(
734+
feature=feature,
735+
layer=layer,
736+
id_=lifecycle.id_,
737+
edit_text="Elinkaaren lisäys" if lifecycle.id_ is None else "Elinkaaren muokkaus",
738+
)
739+
return feature

arho_feature_template/gui/dialogs/plan_attribute_form.py

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

222222
# Add to the model
223223
item = QStandardItem(lifecycle_entry)
224+
item.setData(self.lifecycle_status_combo_box.value(), Qt.UserRole + 1)
224225
self.lifecycle_model.appendRow(item)
225226

226227
# Optionally, check required fields again
227228
self._check_required_fields()
228229

229230
def into_lifecycle_model(self) -> list[LifeCycle]:
230-
print("Calling into_lifecycle_model at plan_attribute_form.py")
231231
lifecycles = []
232232

233233
for row in range(self.lifecycle_model.rowCount()):
234234
item = self.lifecycle_model.item(row)
235235
if item:
236236
lifecycle_entry = item.text()
237237
parts = lifecycle_entry.split(" | ")
238-
status = parts[0]
239238
date_range = parts[1]
240239
date_parts = date_range.split(" - ")
241240
start_date = date_parts[0]
242241
end_date = date_parts[1] if len(date_parts) > 1 else None # End date is optional
243242

244-
print(f"Got status: {status}")
245-
print(f"Got status_id: {LifeCycleStatusLayer.get_id_by_value(status)}")
246-
247243
# Add the lifecycle to the list
248244
lifecycles.append(
249245
LifeCycle(
250-
status_id=LifeCycleStatusLayer.get_id_by_value(status),
251-
plan_id="52aadc88-feb0-443b-a423-f5a50d0bb9fc",
252-
land_use_are_id=None,
253-
other_area_id=None,
254-
line_id=None,
255-
land_use_point_id=None,
256-
other_point_id=None,
246+
status_id=item.data(Qt.UserRole + 1),
257247
starting_at=start_date,
258248
ending_at=end_date,
259-
plan_regulation_id=None,
260-
plan_proposition_id=None,
261249
)
262250
)
263251

@@ -275,13 +263,13 @@ def into_model(self) -> Plan:
275263
producers_plan_identifier=self.producers_plan_identifier_line_edit.text() or None,
276264
matter_management_identifier=self.matter_management_identifier_line_edit.text() or None,
277265
lifecycle_status_id=self.lifecycle_status_combo_box.value(), # Need to get the lifecycle with the latest lifecycle
278-
# lifecycle=self.get_lifecycles(),
266+
lifecycles=self.into_lifecycle_model(),
279267
general_regulations=[reg_group_widget.into_model() for reg_group_widget in self.regulation_group_widgets],
280268
documents=[document_widget.into_model() for document_widget in self.document_widgets],
281269
geom=self.plan.geom,
282270
)
283271

284272
def _on_ok_clicked(self):
285273
self.model = self.into_model()
286-
self.lifecycle_model = self.into_lifecycle_model()
274+
# self.lifecycle_model = self.into_lifecycle_model()
287275
self.accept()

arho_feature_template/project/layers/code_layers.py

-7
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,6 @@ class PlanTypeLayer(AbstractCodeLayer):
2020
class LifeCycleStatusLayer(AbstractCodeLayer):
2121
name = "Elinkaaren tila"
2222

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

3124
class OrganisationLayer(AbstractCodeLayer):
3225
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
@@ -12,6 +12,7 @@
1212

1313
from arho_feature_template.core.models import (
1414
Document,
15+
LifeCycle,
1516
Plan,
1617
PlanFeature,
1718
Proposition,
@@ -28,11 +29,13 @@
2829

2930

3031
class AbstractPlanLayer(AbstractLayer):
31-
filter_template: ClassVar[Template]
32+
filter_template: ClassVar[Template | None]
3233

3334
@classmethod
3435
def apply_filter(cls, plan_id: str | None) -> None:
3536
"""Apply a filter to the layer based on the plan_id."""
37+
if cls.filter_template is None:
38+
return
3639
filter_expression = cls.filter_template.substitute(plan_id=plan_id) if plan_id else ""
3740
layer = cls.get_from_project()
3841
if layer.isEditable():
@@ -483,6 +486,47 @@ class SourceDataLayer(AbstractPlanLayer):
483486
filter_template = Template("plan_id = '$plan_id'")
484487

485488

489+
class LifeCycleLayer(AbstractPlanLayer):
490+
name = "Elinkaaren päiväykset"
491+
filter_template = None
492+
493+
@classmethod
494+
def feature_from_model(cls, model: LifeCycle) -> QgsFeature:
495+
feature = cls.initialize_feature_from_model(model)
496+
# feature["id"] = model.id_
497+
feature["id"] = model.id_ if model.id_ else feature["id"]
498+
feature["lifecycle_status_id"] = model.status_id
499+
feature["starting_at"] = model.starting_at
500+
feature["ending_at"] = model.ending_at if model.ending_at else None
501+
feature["plan_id"] = model.plan_id
502+
feature["land_use_area_id"] = model.land_use_are_id
503+
feature["other_area_id"] = model.other_area_id
504+
feature["line_id"] = model.line_id
505+
feature["land_use_point_id"] = model.land_use_point_id
506+
feature["other_point_id"] = model.other_point_id
507+
feature["plan_regulation_id"] = model.plan_regulation_id
508+
feature["plan_proposition_id"] = model.plan_proposition_id
509+
510+
return feature
511+
512+
@classmethod
513+
def model_from_feature(cls, feature: QgsFeature) -> LifeCycle:
514+
return LifeCycle(
515+
id_=feature["id"],
516+
status_id=feature["lifecycle_status_id"],
517+
starting_at=feature["starting_at"],
518+
ending_at=feature["ending_at"] if feature["ending_at"] else None,
519+
plan_id=feature["plan_id"],
520+
land_use_are_id=feature["land_use_area_id"] if feature["land_use_area_id"] else None,
521+
other_area_id=feature["other_area_id"] if feature["other_area_id"] else None,
522+
line_id=feature["line_id"] if feature["line_id"] else None,
523+
land_use_point_id=feature["land_use_point_id"] if feature["land_use_point_id"] else None,
524+
other_point_id=feature["other_point_id"] if feature["other_point_id"] else None,
525+
plan_regulation_id=feature["plan_regulation_id"] if feature["plan_regulation_id"] else None,
526+
plan_proposition_id=feature["plan_proposition_id"] if feature["plan_proposition_id"] else None,
527+
)
528+
529+
486530
plan_layers = AbstractPlanLayer.__subclasses__()
487531
plan_layers.remove(PlanFeatureLayer)
488532

0 commit comments

Comments
 (0)