1
1
from __future__ import annotations
2
2
3
3
from importlib import resources
4
- from typing import TYPE_CHECKING
4
+ from typing import TYPE_CHECKING , cast
5
5
6
6
from qgis .core import QgsApplication
7
7
from qgis .PyQt import uic
8
- from qgis .PyQt .QtWidgets import (
9
- QDialog ,
10
- QDialogButtonBox ,
11
- QLineEdit ,
12
- QPushButton ,
13
- QTextEdit ,
14
- )
8
+ from qgis .PyQt .QtWidgets import QDialog , QDialogButtonBox , QLabel , QLineEdit , QPushButton , QTextEdit
15
9
16
10
from arho_feature_template .core .models import Document , Plan , RegulationGroup , RegulationGroupLibrary
17
11
from arho_feature_template .gui .components .general_regulation_group_widget import GeneralRegulationGroupWidget
18
12
19
13
# from arho_feature_template.gui.components.plan_regulation_group_widget import RegulationGroupWidget
20
14
from arho_feature_template .gui .components .plan_document_widget import DocumentWidget
15
+ from arho_feature_template .gui .components .value_input_widgets import LegalEffectWidget
21
16
from arho_feature_template .project .layers .code_layers import (
22
17
LifeCycleStatusLayer ,
23
18
OrganisationLayer ,
26
21
from arho_feature_template .utils .misc_utils import disconnect_signal
27
22
28
23
if TYPE_CHECKING :
29
- from qgis .PyQt .QtWidgets import QLineEdit , QPushButton , QTextEdit , QVBoxLayout
24
+ from qgis .PyQt .QtWidgets import QFormLayout , QLineEdit , QTextEdit , QVBoxLayout
30
25
31
26
from arho_feature_template .gui .components .code_combobox import CodeComboBox , HierarchicalCodeComboBox
32
27
@@ -61,6 +56,8 @@ def __init__(self, plan: Plan, _regulation_group_libraries: list[RegulationGroup
61
56
62
57
self .setupUi (self )
63
58
59
+ self .general_data_layout : QFormLayout
60
+
64
61
self .plan = plan
65
62
self .lifecycle_models = plan .lifecycles
66
63
@@ -87,10 +84,12 @@ def __init__(self, plan: Plan, _regulation_group_libraries: list[RegulationGroup
87
84
self .name_line_edit .textChanged .connect (self ._check_required_fields )
88
85
self .organisation_combo_box .currentIndexChanged .connect (self ._check_required_fields )
89
86
self .plan_type_combo_box .currentIndexChanged .connect (self ._check_required_fields )
87
+ self .plan_type_combo_box .currentIndexChanged .connect (self ._update_legal_effect_widgets_visibility )
90
88
self .lifecycle_status_combo_box .currentIndexChanged .connect (self ._check_required_fields )
91
89
92
90
self .scroll_area_spacer = None
93
91
self .regulation_group_widgets : list [GeneralRegulationGroupWidget ] = []
92
+ self .legal_effect_widgets : list [tuple [QLabel , LegalEffectWidget ]] = []
94
93
# self.regulation_groups_selection_widget = TreeWithSearchWidget()
95
94
# self.regulation_groups_tree_layout.insertWidget(2, self.regulation_groups_selection_widget)
96
95
# for library in regulation_group_libraries:
@@ -105,6 +104,12 @@ def __init__(self, plan: Plan, _regulation_group_libraries: list[RegulationGroup
105
104
for document in plan .documents :
106
105
self .add_document (document )
107
106
107
+ # Legal effects
108
+ for legal_effect_id in plan .legal_effect_ids :
109
+ self .add_legal_effect_widget (legal_effect_id )
110
+ if len (self .legal_effect_widgets ) == 0 :
111
+ self .add_legal_effect_widget ()
112
+
108
113
self .add_general_regulation_group_btn .clicked .connect (self .add_new_regulation_group )
109
114
self .add_general_regulation_group_btn .setIcon (QgsApplication .getThemeIcon ("mActionAdd.svg" ))
110
115
@@ -115,6 +120,7 @@ def __init__(self, plan: Plan, _regulation_group_libraries: list[RegulationGroup
115
120
self .button_box .accepted .connect (self ._on_ok_clicked )
116
121
117
122
self ._check_required_fields ()
123
+ self ._update_legal_effect_widgets_visibility ()
118
124
119
125
def _check_required_fields (self ) -> None :
120
126
ok_button = self .button_box .button (QDialogButtonBox .Ok )
@@ -129,6 +135,53 @@ def _check_required_fields(self) -> None:
129
135
else :
130
136
ok_button .setEnabled (False )
131
137
138
+ def _update_legal_effect_widgets_visibility (self ):
139
+ plan_type_id = self .plan_type_combo_box .value ()
140
+ if PlanTypeLayer .is_general_plan_type (plan_type_id ):
141
+ self ._show_legal_effect_widgets ()
142
+ else :
143
+ self ._hide_legal_effect_widgets ()
144
+
145
+ def _show_legal_effect_widgets (self ):
146
+ for label , widget in self .legal_effect_widgets :
147
+ label .show ()
148
+ widget .show ()
149
+
150
+ def _hide_legal_effect_widgets (self ):
151
+ for label , widget in self .legal_effect_widgets :
152
+ label .hide ()
153
+ widget .hide ()
154
+
155
+ def add_legal_effect_widget (self , legal_effect_id : str | None = None ):
156
+ """
157
+ Adds a legal effect widget to the form.
158
+
159
+ If no legal widgets exist yet, includes an "add" button, otherwise a
160
+ "delete" button.
161
+ """
162
+ if len (self .legal_effect_widgets ) == 0 :
163
+ widget = LegalEffectWidget (with_add_btn = True )
164
+ btn = cast (QPushButton , widget .add_btn )
165
+ btn .clicked .connect (self .add_legal_effect_widget )
166
+ else :
167
+ widget = LegalEffectWidget (with_del_btn = True )
168
+ btn = cast (QPushButton , widget .del_btn )
169
+ btn .clicked .connect (lambda : self .delete_legal_effect_widget (widget ))
170
+
171
+ if legal_effect_id :
172
+ widget .set_value (legal_effect_id )
173
+
174
+ label = QLabel ("Oikeusvaikutus" )
175
+ self .legal_effect_widgets .append ((label , widget ))
176
+ self .general_data_layout .addRow (label , widget )
177
+
178
+ def delete_legal_effect_widget (self , widget_to_delete : LegalEffectWidget ):
179
+ for i , (label , widget ) in enumerate (self .legal_effect_widgets ):
180
+ if widget is widget_to_delete :
181
+ self .legal_effect_widgets .pop (i )
182
+ widget .deleteLater ()
183
+ label .deleteLater ()
184
+
132
185
# --- COPIED FROM PLAN FEATURE FORM ---
133
186
134
187
# def add_selected_plan_regulation_group(self, item: QTreeWidgetItem, column: int):
@@ -190,6 +243,11 @@ def delete_document(self, document_widget: DocumentWidget):
190
243
# ---
191
244
192
245
def into_model (self ) -> Plan :
246
+ if PlanTypeLayer .is_general_plan_type (self .plan_type_combo_box .value ()):
247
+ legal_effect_ids = [legal_effect_widget [1 ].get_value () for legal_effect_widget in self .legal_effect_widgets ]
248
+ else :
249
+ legal_effect_ids = []
250
+
193
251
return Plan (
194
252
id_ = self .plan .id_ ,
195
253
name = self .name_line_edit .text (),
@@ -202,6 +260,7 @@ def into_model(self) -> Plan:
202
260
matter_management_identifier = self .matter_management_identifier_line_edit .text () or None ,
203
261
lifecycle_status_id = self .lifecycle_status_combo_box .value (),
204
262
general_regulations = [reg_group_widget .into_model () for reg_group_widget in self .regulation_group_widgets ],
263
+ legal_effect_ids = [value for value in legal_effect_ids if value is not None ],
205
264
documents = [document_widget .into_model () for document_widget in self .document_widgets ],
206
265
geom = self .plan .geom ,
207
266
)
0 commit comments