diff --git a/prototypes/t_qt_2.py b/prototypes/t_qt_2.py index c9aff69..4ffaf86 100644 --- a/prototypes/t_qt_2.py +++ b/prototypes/t_qt_2.py @@ -63,7 +63,7 @@ logger.setLevel(logging.DEBUG) logger_search_widget = logger.getChild("search_widget") logger_search_widget.setLevel(logging.DEBUG) logger_get_data = logger.getChild("get_data") -logger_get_data.setLevel(logging.DEBUG) +logger_get_data.setLevel(logging.INFO) QSS = """ *[styleClass="stempel"] { @@ -675,6 +675,7 @@ class SubForm: prefix_parent: str index: int prefix: str = "" + registry: WidgetRegistry = dc.field(default_factory=dict) def __post_init__(self) -> None: self.prefix = f"{self.prefix_parent}-[{self.index}]" @@ -761,30 +762,31 @@ def get_form_data( elif isinstance(widget, QComboBox): value = widget.currentData() elif isinstance(widget, DynamicListWidget): + ... # this should be a list: each dynamic list contains a list # of such dictionaries - form_data = widget.get_form_data() - value = [val for val in form_data.values()] + _ = widget.get_form_data() + # value = [val for val in form_data.values()] # print(">>>>>>>>> Key: ", key) # print(">>>>>>>>> Form Data after call:") # pprint(value) elif isinstance(widget, (DynamicDropdownWidget, CustomWidget)): # this is a special data structure with some assumptions of the widget's structure value = widget.get_form_data() - print(">>>>>>>>> Key: ", key) - print(">>>>>>>>> Form Data after call:") - pprint(value) + # print(">>>>>>>>> Key: ", key) + # print(">>>>>>>>> Form Data after call:") + # pprint(value) # _insert_nested(raw_data, key.split(COLUMN_SEP), value) - logger_get_data.debug("Key: %s", key) - logger_get_data.debug("Value: %s", value) + # logger_get_data.info("Key: %s", key) + # logger_get_data.info("Value: %s", value) if isinstance(value, dict): raw_data.update(value) else: raw_data[key] = value - logger_get_data.debug(">>>>> RAW DATA:\n%s", pformat(raw_data)) + logger_get_data.info(">>>>> RAW DATA:\n%s", pformat(raw_data)) return raw_data @@ -1733,14 +1735,18 @@ class DynamicListWidget(QWidget): entry_box = QGroupBox(f"{self.label} {number_form}") entry_layout = QHBoxLayout(entry_box) sub_form = SubForm(entry_box, prefix_parent=self.prefix, index=number_form) + # widget_registry: WidgetRegistry = {} form_layout = QFormLayout() _build_ui_recursively( schema=self.form_fields, parent_layout=form_layout, - widget_registry=self.widget_registry, - prefix=f"{self.prefix}-[{number_form}]", + widget_registry=sub_form.registry, + # prefix=f"{self.prefix}-[{number_form}]", + prefix="", ) + self.widget_registry.update(sub_form.registry) + # sub_form.registry = widget_registry del_btn = QPushButton("🗑️") del_btn.setFixedSize(30, 30) @@ -1784,12 +1790,20 @@ class DynamicListWidget(QWidget): def get_form_data(self): # raw_data = get_form_data(self.widget_registry) - form_data = get_form_data(self.widget_registry) - logger_get_data.debug( - "\n\n\n------- Form data DynamicListWidget:\n%s", pformat(form_data) - ) + # form_data = get_form_data(self.widget_registry) + # logger_get_data.debug( + # "\n\n\n------- Form data DynamicListWidget:\n%s", pformat(form_data) + # ) + logger_get_data.info("DynamicListWidget - SubForms") + # for sub_form in self.sub_forms: + # logger_get_data.info("SubForm index %d", sub_form.index) + # pprint_registry(sub_form.registry) - return form_data + form_data = [get_form_data(sub.registry) for sub in self.sub_forms] + print("##################") + pprint(form_data) + + # return form_data def set_form_data( self, @@ -1800,22 +1814,26 @@ class DynamicListWidget(QWidget): self.remove_entry(self.sub_forms[0]) # empty default row - if not data: + if not data and self.add_empty_entry: self.add_entry() return - for sub_data in data: + # for sub_data in data: + # self.add_entry() + # current_sub_form = self.sub_forms[-1] + # registry_entries = search_widgets_by_key( + # self.widget_registry, f"-[{current_sub_form.index}]" + # ) + # for reg_entry in registry_entries: + # widget = reg_entry["widget"] + # field_def = reg_entry["form_field"] + + # value = sub_data[field_def.key] + # set_widget_value(widget, value) + for sub_form_data in data: self.add_entry() current_sub_form = self.sub_forms[-1] - registry_entries = search_widgets_by_key( - self.widget_registry, f"-[{current_sub_form.index}]" - ) - for reg_entry in registry_entries: - widget = reg_entry["widget"] - field_def = reg_entry["form_field"] - - value = sub_data[field_def.key] - set_widget_value(widget, value) + set_form_data(current_sub_form.registry, sub_form_data) class DynamicDropdownWidget(QWidget): diff --git a/prototypes/tests.py b/prototypes/tests.py index 944cdd1..c6b7c3b 100644 --- a/prototypes/tests.py +++ b/prototypes/tests.py @@ -1,4 +1,6 @@ # %% +from __future__ import annotations + import dataclasses as dc import datetime import enum @@ -9,19 +11,11 @@ from pprint import pprint from typing import Any import babel -from pydantic import BaseModel, model_validator +from pydantic import BaseModel, ConfigDict, model_validator from PySide6.QtCore import QDate, Qt + # %% -gui_rohdaten = { - "projekt_name": "Mars Rover", - "meilensteine": [ - {"titel": "Triebwerk Test", "finanzen__betrag": 5000.0, "finanzen__waehrung": "EUR"}, - {"titel": "Software Beta", "finanzen__betrag": 1200.0, "finanzen__waehrung": "EUR"}, - ], -} - - class FlatBaseModel(BaseModel): @classmethod def _unflatten_dict(cls, flat_dict: dict) -> dict: @@ -119,6 +113,15 @@ class FlatBaseModel(BaseModel): # %% +gui_rohdaten = { + "projekt_name": "Mars Rover", + "meilensteine": [ + {"titel": "Triebwerk Test", "finanzen__betrag": 5000.0, "finanzen__waehrung": "EUR"}, + {"titel": "Software Beta", "finanzen__betrag": 1200.0, "finanzen__waehrung": "EUR"}, + ], +} + + class BudgetDetails(BaseModel): betrag: float waehrung: str = "EUR" @@ -134,10 +137,52 @@ class ProjektModell(FlatBaseModel): meilensteine: list[Meilenstein] # <--- Die Liste von Modellen +class Grunderfassung_Unternehmen(FlatBaseModel): + Schulbildung: list[Grunderfassung_Schulbildung] + + +class Grunderfassung_Schulbildung(BaseModel): + model_config = ConfigDict(str_strip_whitespace=True) + + SB_abschluss: str | None + SB_abschlussgrad: str | None + SB_schule: str | None + SB_ort: str | None + SB_land: str | None + SB_abschlussjahr: str | None + SB_bemerkungsfeld: str | None + + +# %% +list_schulbildung = [ + { + "SB_abschluss": None, + "SB_abschlussgrad": None, + "SB_abschlussjahr": None, + "SB_bemerkungsfeld": None, + "SB_land": None, + "SB_ort": None, + "SB_schule": None, + }, + { + "SB_abschluss": None, + "SB_abschlussgrad": None, + "SB_abschlussjahr": None, + "SB_bemerkungsfeld": None, + "SB_land": None, + "SB_ort": None, + "SB_schule": None, + }, +] +data = {"Schulbildung": list_schulbildung} + +Grunderfassung_Unternehmen(**data) + +# %% projekt = ProjektModell(**gui_rohdaten) # %% -projekt.meilensteine +projekt.to_gui() # %% target_dict = {