Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kaavasuositukset kaavalle, yleismääräyksien lisäämiseen muutos #138

Merged
merged 2 commits into from
Jan 30, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 25 additions & 9 deletions arho_feature_template/core/plan_manager.py
Original file line number Diff line number Diff line change
@@ -573,20 +573,36 @@ def save_regulation_group(regulation_group: RegulationGroup, plan_id: str | None
feature = RegulationGroupLayer.feature_from_model(regulation_group, plan_id)
layer = RegulationGroupLayer.get_from_project()

editing = regulation_group.id_ is not None
_save_feature(
feature=feature,
layer=layer,
id_=regulation_group.id_,
edit_text="Kaavamääräysryhmän lisäys" if regulation_group.id_ is None else "Kaavamääräysryhmän muokkaus",
edit_text="Kaavamääräysryhmän muokkaus" if editing else "Kaavamääräysryhmän lisäys",
)

# Handle regulations
if editing:
# Check for regulations to be deleted
regulation_layer = PlanRegulationLayer.get_from_project()
for reg_feature in PlanRegulationLayer.get_regulations_to_delete(
regulation_group.regulations, regulation_group
):
_delete_feature(reg_feature, regulation_layer, "Kaavamääräyksen poisto")

# Check for propositions to be deleted
proposition_layer = PlanPropositionLayer.get_from_project()
for prop_feature in PlanPropositionLayer.get_propositions_to_delete(
regulation_group.propositions, regulation_group
):
_delete_feature(prop_feature, proposition_layer, "Kaavasuosituksen poisto")

# Save regulations
if regulation_group.regulations:
for regulation in regulation_group.regulations:
regulation.regulation_group_id_ = feature["id"] # Updating regulation group ID
save_regulation(regulation)

# Handle propositions
# Save propositions
if regulation_group.propositions:
for proposition in regulation_group.propositions:
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
feature = RegulationGroupLayer.feature_from_model(regulation_group, plan_id)
layer = RegulationGroupLayer.get_from_project()

# # Handle regulations
# for regulation in regulation_group.regulations:
# delete_regulation(regulation)
# Delete regulations
for regulation in regulation_group.regulations:
delete_regulation(regulation)

# # Handle propositions
# for proposition in regulation_group.propositions:
# delete_proposition(proposition)
# Delete propositions
for proposition in regulation_group.propositions:
delete_proposition(proposition)

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
from __future__ import annotations

from importlib import resources
from typing import TYPE_CHECKING

from qgis.core import QgsApplication
from qgis.PyQt import uic
from qgis.PyQt.QtCore import pyqtSignal
from qgis.PyQt.QtWidgets import QMenu, QWidget

from arho_feature_template.core.models import Proposition, Regulation, RegulationGroup, RegulationLibrary
from arho_feature_template.gui.components.plan_proposition_widget import PropositionWidget
from arho_feature_template.gui.components.plan_regulation_widget import RegulationWidget
from arho_feature_template.project.layers.code_layers import PlanRegulationGroupTypeLayer

if TYPE_CHECKING:
from qgis.PyQt.QtWidgets import QFormLayout, QFrame, QLineEdit, QPushButton

ui_path = resources.files(__package__) / "general_regulation_group_widget.ui"
FormClass, _ = uic.loadUiType(ui_path)


class GeneralRegulationGroupWidget(QWidget, FormClass): # type: ignore
"""A widget representation of a general regulation group."""

# open_as_form_signal = pyqtSignal(QWidget)
delete_signal = pyqtSignal(QWidget)

def __init__(self, regulation_group: RegulationGroup, layer_name: str):
super().__init__()
self.setupUi(self)

# TYPES
self.frame: QFrame
self.name: QLineEdit
# self.edit_btn: QPushButton
self.add_field_btn: QPushButton
self.del_btn: QPushButton
self.regulation_group_details_layout: QFormLayout

# INIT
self.regulation_widgets: list[RegulationWidget] = []
self.proposition_widgets: list[PropositionWidget] = []

regulation_group.type_code_id = PlanRegulationGroupTypeLayer.get_id_by_feature_layer_name(layer_name)
self.from_model(regulation_group)

self.verbal_regulation_config = RegulationLibrary.get_regulation_by_code("sanallinenMaarays")

# self.edit_btn.setIcon(QIcon(resources_path("icons", "settings.svg")))
# self.edit_btn.clicked.connect(lambda: self.open_as_form_signal.emit(self))
add_field_menu = QMenu()
add_field_menu.addAction("Lisää kaavamääräys").triggered.connect(self.add_new_regulation)
add_field_menu.addAction("Lisää kaavasuositus").triggered.connect(self.add_new_proposition)
self.add_field_btn.setMenu(add_field_menu)
self.add_field_btn.setIcon(QgsApplication.getThemeIcon("mActionAdd.svg"))

self.del_btn.setIcon(QgsApplication.getThemeIcon("mActionDeleteSelected.svg"))
self.del_btn.clicked.connect(lambda: self.delete_signal.emit(self))

def from_model(self, regulation_group: RegulationGroup):
self.regulation_group = regulation_group

self.name.setText(regulation_group.name if regulation_group.name else "")

# Remove existing child widgets if reinitializing
for widget in self.regulation_widgets:
self.delete_regulation_widget(widget)
for widget in self.proposition_widgets:
self.delete_proposition_widget(widget)
for regulation in regulation_group.regulations:
self.add_regulation_widget(regulation)
for proposition in regulation_group.propositions:
self.add_proposition_widget(proposition)

def add_new_regulation(self):
regulation = Regulation(self.verbal_regulation_config)
self.add_regulation_widget(regulation)

def add_regulation_widget(self, regulation: Regulation) -> RegulationWidget:
widget = RegulationWidget(regulation=regulation, parent=self.frame)
widget.delete_signal.connect(self.delete_regulation_widget)
self.frame.layout().addWidget(widget)
self.regulation_widgets.append(widget)
return widget

def delete_regulation_widget(self, regulation_widget: RegulationWidget):
self.frame.layout().removeWidget(regulation_widget)
self.regulation_widgets.remove(regulation_widget)
regulation_widget.deleteLater()

def add_new_proposition(self):
proposition = Proposition(value="")
self.add_proposition_widget(proposition)

def add_proposition_widget(self, proposition: Proposition) -> PropositionWidget:
widget = PropositionWidget(proposition=proposition, parent=self.frame)
widget.delete_signal.connect(self.delete_proposition_widget)
self.frame.layout().addWidget(widget)
self.proposition_widgets.append(widget)
return widget

def delete_proposition_widget(self, proposition_widget: RegulationWidget):
self.frame.layout().removeWidget(proposition_widget)
self.proposition_widgets.remove(proposition_widget)
proposition_widget.deleteLater()

def into_model(self) -> RegulationGroup:
return RegulationGroup(
type_code_id=self.regulation_group.type_code_id,
name=self.name.text(),
short_name=None,
color_code=None,
regulations=[widget.into_model() for widget in self.regulation_widgets],
propositions=[widget.into_model() for widget in self.proposition_widgets],
id_=self.regulation_group.id_,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>general_regulation_group_form</class>
<widget class="QWidget" name="general_regulation_group_form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>420</width>
<height>98</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QFrame" name="frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="lineWidth">
<number>2</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>13</pointsize>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Yleismääräysryhmä</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="add_field_btn">
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="del_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Poista kaavamääräysryhmä</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QFormLayout" name="regulation_group_details_layout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Nimi</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="name">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
Original file line number Diff line number Diff line change
@@ -64,13 +64,16 @@ def from_model(self, regulation_group: RegulationGroup):
self.delete_regulation_widget(widget)
for widget in self.proposition_widgets:
self.delete_proposition_widget(widget)
self.regulation_widgets = [self.add_regulation_widget(reg) for reg in regulation_group.regulations]
self.proposition_widgets = [self.add_proposition_widget(prop) for prop in regulation_group.propositions]
for regulation in regulation_group.regulations:
self.add_regulation_widget(regulation)
for proposition in regulation_group.propositions:
self.add_proposition_widget(proposition)

def add_regulation_widget(self, regulation: Regulation) -> RegulationWidget:
widget = RegulationWidget(regulation=regulation, parent=self.frame)
widget.delete_signal.connect(self.delete_regulation_widget)
self.frame.layout().addWidget(widget)
self.regulation_widgets.append(widget)
return widget

def delete_regulation_widget(self, regulation_widget: RegulationWidget):
@@ -82,6 +85,7 @@ def add_proposition_widget(self, proposition: Proposition) -> PropositionWidget:
widget = PropositionWidget(proposition=proposition, parent=self.frame)
widget.delete_signal.connect(self.delete_proposition_widget)
self.frame.layout().addWidget(widget)
self.proposition_widgets.append(widget)
return widget

def delete_proposition_widget(self, proposition_widget: RegulationWidget):
100 changes: 45 additions & 55 deletions arho_feature_template/gui/dialogs/plan_attribute_form.py
Original file line number Diff line number Diff line change
@@ -5,23 +5,18 @@

from qgis.core import QgsApplication
from qgis.PyQt import uic
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtWidgets import (
QComboBox,
QDialog,
QDialogButtonBox,
QLineEdit,
QSizePolicy,
QSpacerItem,
QTextEdit,
QTreeWidgetItem,
)

from arho_feature_template.core.models import Document, Plan, RegulationGroup, RegulationGroupLibrary

# from arho_feature_template.gui.components.plan_regulation_group_widget import RegulationGroupWidget
from arho_feature_template.gui.components.general_regulation_group_widget import GeneralRegulationGroupWidget
from arho_feature_template.gui.components.plan_document_widget import DocumentWidget
from arho_feature_template.gui.components.plan_regulation_group_widget import RegulationGroupWidget
from arho_feature_template.gui.components.tree_with_search_widget import TreeWithSearchWidget
from arho_feature_template.gui.dialogs.plan_regulation_group_form import PlanRegulationGroupForm
from arho_feature_template.project.layers.code_layers import (
LifeCycleStatusLayer,
OrganisationLayer,
@@ -30,7 +25,7 @@
from arho_feature_template.utils.misc_utils import disconnect_signal

if TYPE_CHECKING:
from qgis.PyQt.QtWidgets import QComboBox, QLineEdit, QPushButton, QTextEdit, QVBoxLayout, QWidget
from qgis.PyQt.QtWidgets import QLineEdit, QPushButton, QTextEdit, QVBoxLayout

from arho_feature_template.gui.components.code_combobox import CodeComboBox, HierarchicalCodeComboBox

@@ -49,17 +44,18 @@ class PlanAttributeForm(QDialog, FormClass): # type: ignore
producers_plan_identifier_line_edit: QLineEdit
matter_management_identifier_line_edit: QLineEdit

plan_regulation_group_scrollarea_contents: QWidget
plan_regulation_group_libraries_combobox: QComboBox
regulation_groups_tree_layout: QVBoxLayout
regulations_layout: QVBoxLayout
add_general_regulation_group_btn: QPushButton
# plan_regulation_group_scrollarea_contents: QWidget
# plan_regulation_group_libraries_combobox: QComboBox
# regulation_groups_tree_layout: QVBoxLayout

documents_scroll_contents: QWidget
documents_layout: QVBoxLayout
add_document_btn: QPushButton

button_box: QDialogButtonBox

def __init__(self, plan: Plan, regulation_group_libraries: list[RegulationGroupLibrary], parent=None):
def __init__(self, plan: Plan, _regulation_group_libraries: list[RegulationGroupLibrary], parent=None):
super().__init__(parent)

self.setupUi(self)
@@ -92,13 +88,12 @@ def __init__(self, plan: Plan, regulation_group_libraries: list[RegulationGroupL
self.lifecycle_status_combo_box.currentIndexChanged.connect(self._check_required_fields)

self.scroll_area_spacer = None
self.regulation_groups_selection_widget = TreeWithSearchWidget()
self.regulation_groups_tree_layout.insertWidget(2, self.regulation_groups_selection_widget)
self.regulation_group_widgets: list[RegulationGroupWidget] = []
for library in regulation_group_libraries:
self.init_plan_regulation_group_library(library)

self.regulation_groups_selection_widget.tree.itemDoubleClicked.connect(self.add_selected_plan_regulation_group)
self.regulation_group_widgets: list[GeneralRegulationGroupWidget] = []
# self.regulation_groups_selection_widget = TreeWithSearchWidget()
# self.regulation_groups_tree_layout.insertWidget(2, self.regulation_groups_selection_widget)
# for library in regulation_group_libraries:
# self.init_plan_regulation_group_library(library)
# self.regulation_groups_selection_widget.tree.itemDoubleClicked.connect(self.add_selected_plan_regulation_group)

for regulation_group in plan.general_regulations:
self.add_plan_regulation_group(regulation_group)
@@ -107,6 +102,9 @@ def __init__(self, plan: Plan, regulation_group_libraries: list[RegulationGroupL
for document in plan.documents:
self.add_document(document)

self.add_general_regulation_group_btn.clicked.connect(self.add_new_regulation_group)
self.add_general_regulation_group_btn.setIcon(QgsApplication.getThemeIcon("mActionAdd.svg"))

self.add_document_btn.clicked.connect(self.add_new_document)
self.add_document_btn.setIcon(QgsApplication.getThemeIcon("mActionAdd.svg"))

@@ -130,57 +128,49 @@ def _check_required_fields(self) -> None:

# --- COPIED FROM PLAN FEATURE FORM ---

def _add_spacer(self):
self.scroll_area_spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Expanding)
self.plan_regulation_group_scrollarea_contents.layout().addItem(self.scroll_area_spacer)

def _remove_spacer(self):
if self.scroll_area_spacer is not None:
self.plan_regulation_group_scrollarea_contents.layout().removeItem(self.scroll_area_spacer)
self.scroll_area_spacer = None
# def add_selected_plan_regulation_group(self, item: QTreeWidgetItem, column: int):
# if not item.parent():
# return
# regulation_group: RegulationGroup = item.data(column, Qt.UserRole)
# self.add_plan_regulation_group(regulation_group)

def add_selected_plan_regulation_group(self, item: QTreeWidgetItem, column: int):
if not item.parent():
return
regulation_group: RegulationGroup = item.data(column, Qt.UserRole)
self.add_plan_regulation_group(regulation_group)
def add_new_regulation_group(self):
self.add_plan_regulation_group(RegulationGroup())

def add_plan_regulation_group(self, regulation_group: RegulationGroup):
regulation_group_widget = RegulationGroupWidget(regulation_group, layer_name="Kaava")
regulation_group_widget = GeneralRegulationGroupWidget(regulation_group, layer_name="Kaava")
regulation_group_widget.delete_signal.connect(self.remove_plan_regulation_group)
regulation_group_widget.open_as_form_signal.connect(self.open_plan_regulation_group_form)
self._remove_spacer()
self.plan_regulation_group_scrollarea_contents.layout().addWidget(regulation_group_widget)
# regulation_group_widget.open_as_form_signal.connect(self.open_plan_regulation_group_form)
self.regulations_layout.insertWidget(1, regulation_group_widget)
self.regulation_group_widgets.append(regulation_group_widget)
self._add_spacer()

def open_plan_regulation_group_form(self, regulation_group_widget: RegulationGroupWidget):
group_as_form = PlanRegulationGroupForm(regulation_group_widget.into_model())
if group_as_form.exec_():
regulation_group_widget.from_model(group_as_form.model)
# def open_plan_regulation_group_form(self, regulation_group_widget: GeneralRegulationGroupWidget):
# group_as_form = PlanRegulationGroupForm(regulation_group_widget.into_model())
# if group_as_form.exec_():
# regulation_group_widget.from_model(group_as_form.model)

def remove_plan_regulation_group(self, regulation_group_widget: RegulationGroupWidget):
def remove_plan_regulation_group(self, regulation_group_widget: GeneralRegulationGroupWidget):
disconnect_signal(regulation_group_widget.delete_signal)
disconnect_signal(regulation_group_widget.open_as_form_signal)
self.plan_regulation_group_scrollarea_contents.layout().removeWidget(regulation_group_widget)
# disconnect_signal(regulation_group_widget.open_as_form_signal)
self.regulations_layout.removeWidget(regulation_group_widget)
self.regulation_group_widgets.remove(regulation_group_widget)
regulation_group_widget.deleteLater()

def init_plan_regulation_group_library(self, library: RegulationGroupLibrary):
self.plan_regulation_group_libraries_combobox.addItem(library.name)
for category in library.regulation_group_categories:
category_item = self.regulation_groups_selection_widget.add_item_to_tree(category.name)
for group_definition in category.regulation_groups:
self.regulation_groups_selection_widget.add_item_to_tree(
group_definition.name, group_definition, category_item
)
# def init_plan_regulation_group_library(self, library: RegulationGroupLibrary):
# self.plan_regulation_group_libraries_combobox.addItem(library.name)
# for category in library.regulation_group_categories:
# category_item = self.regulation_groups_selection_widget.add_item_to_tree(category.name)
# for group_definition in category.regulation_groups:
# self.regulation_groups_selection_widget.add_item_to_tree(
# group_definition.name, group_definition, category_item
# )

def add_new_document(self):
self.add_document(Document())
self._check_required_fields()

def add_document(self, document: Document):
widget = DocumentWidget(document, parent=self.documents_scroll_contents)
widget = DocumentWidget(document)
widget.delete_signal.connect(self.delete_document)
widget.document_edited.connect(self._check_required_fields)
self.documents_layout.insertWidget(1, widget)
93 changes: 43 additions & 50 deletions arho_feature_template/gui/dialogs/plan_attribute_form.ui
Original file line number Diff line number Diff line change
@@ -233,59 +233,52 @@
</widget>
<widget class="QWidget" name="general_regulations_tab">
<attribute name="title">
<string>Yleismääräykset</string>
<string>Yleismääräysryhmät</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Yleismääräykset</string>
<widget class="QScrollArea" name="plan_regulation_group_scrollarea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QVBoxLayout" name="regulation_groups_tree_layout">
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>Kaavamääräysryhmäkirjastot</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="plan_regulation_group_libraries_combobox"/>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_7">
<property name="text">
<string>Valitut yleismääräysryhmät</string>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="plan_regulation_group_scrollarea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="plan_regulation_group_scrollarea_contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>601</width>
<height>493</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6"/>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
<widget class="QWidget" name="general_regulation_group_scrollarea_contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>831</width>
<height>562</height>
</rect>
</property>
<layout class="QVBoxLayout" name="regulations_layout">
<item>
<widget class="QPushButton" name="add_general_regulation_group_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Lisää yleismääräysryhmä</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
22 changes: 22 additions & 0 deletions arho_feature_template/project/layers/plan_layers.py
Original file line number Diff line number Diff line change
@@ -361,6 +361,17 @@ def model_from_feature(cls, feature: QgsFeature) -> Regulation:
def regulations_with_group_id(cls, group_id: str) -> Generator[QgsFeature]:
return cls.get_features_by_attribute_value("plan_regulation_group_id", group_id)

@classmethod
def get_regulations_to_delete(
cls, regulations: list[Regulation], regulation_group: RegulationGroup
) -> list[QgsFeature]:
updated_regulation_ids = [regulation.id_ for regulation in regulations]
return [
reg
for reg in cls.get_features_by_attribute_value("plan_regulation_group_id", str(regulation_group.id_))
if reg["id"] not in updated_regulation_ids
]


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

@classmethod
def get_propositions_to_delete(
cls, propositions: list[Proposition], regulation_group: RegulationGroup
) -> list[QgsFeature]:
updated_proposition_ids = [proposition.id_ for proposition in propositions]
return [
prop
for prop in cls.get_features_by_attribute_value("plan_regulation_group_id", str(regulation_group.id_))
if prop["id"] not in updated_proposition_ids
]


class DocumentLayer(AbstractPlanLayer):
name = "Asiakirjat"