handle metadata separately in GUI, but common in database

This commit is contained in:
2026-07-27 19:50:24 +02:00
parent ba26baa225
commit 449d401c04
6 changed files with 271 additions and 65 deletions
+56 -4
View File
@@ -1616,6 +1616,11 @@ class InitRecForm(QWidget):
pformat(self.STATE.form_data),
)
# TODO error catching?
logger_initrecform.info(
"[InitRecForm] Pydantic model name: %s",
self.STATE.cfg.pydantic_model.__name__,
)
model = self.cfg.pydantic_model(**self.STATE.form_data)
logger_initrecform.debug("[InitRecForm] Loaded to Pydantic.")
logger_initrecform.debug("[InitRecForm] Convert to GUI structure...")
@@ -3097,6 +3102,12 @@ class CollapsibleBox(QWidget):
layout.addWidget(widget)
self.setContentLayout(layout)
def set_open(
self,
open: bool,
) -> None:
self._on_toggle(open)
class Page_InitRec(QWidget):
back_main_requested = Signal() # back to main page
@@ -3247,6 +3258,28 @@ class Page_InitRec(QWidget):
# now we try to render the layout within the collapsable box
self.container_layout.addSpacing(20)
# ** metadata
self.initrec_form_metadata_box = CollapsibleBox("Metadaten")
ent_type = EntityType.METADATA
self.initrec_form_metadata = InitRecForm(self.STATE.initrec_form_states[ent_type])
assert self.STATE.initrec_form_states[ent_type] is self.initrec_form_metadata.STATE
self.STATE.child_modules.append(self.initrec_form_metadata)
self.initrec_form_metadata_box.setContentWidget(self.initrec_form_metadata)
self.container_layout.addWidget(self.initrec_form_metadata_box)
# --- CUSTOM LOGIC ---
# ** 'Wiedereintrittsdatum' -> only relevant without company
search_res = search_widgets_by_key(
self.initrec_form_metadata.widget_registry, "wiedereintrittsdatum"
)
print(f">>>> {pformat(search_res)}")
assert len(search_res) == 1
field_wiedereintrittsdatum = search_res[0]["widget"]
assert isinstance(field_wiedereintrittsdatum, QDateEdit)
self.field_wiedereintrittsdatum = field_wiedereintrittsdatum
# ** person
self.initrec_form_person_box = CollapsibleBox("Angaben zur Person")
ent_type = EntityType.PERSON
@@ -3286,7 +3319,7 @@ class Page_InitRec(QWidget):
assert self.STATE.initrec_form_states[ent_type] is self.initrec_form_company.STATE
target_idx = self.container_layout.indexOf(self.initrec_form_person_box) - 1
target_idx = self.container_layout.indexOf(self.initrec_form_person_box)
self.initrec_form_company_box.setContentWidget(self.initrec_form_company)
self.container_layout.insertWidget(target_idx, self.initrec_form_company_box)
@@ -3321,9 +3354,13 @@ class Page_InitRec(QWidget):
self.company_profile_requested.emit(req_state)
def _update_layout(self) -> None:
self.initrec_form_metadata_box.set_open(True)
if self.STATE.recording_type is RecordingType.WITH_COMPANY:
# add company
self.initrec_form_company_box.setVisible(True)
self.initrec_form_metadata.top_level_form_layout.setRowVisible(
self.field_wiedereintrittsdatum, False
)
self.comp_profile_btn.setVisible(True)
if self.STATE.ids.valid(EntityType.COMPANY):
self.comp_profile_btn.setEnabled(True)
@@ -3332,6 +3369,9 @@ class Page_InitRec(QWidget):
else:
self.initrec_form_company_box.setVisible(False)
self.initrec_form_metadata.top_level_form_layout.setRowVisible(
self.field_wiedereintrittsdatum, True
)
self.comp_profile_btn.setVisible(False)
self.comp_profile_btn.setEnabled(False)
@@ -3454,9 +3494,9 @@ class Page_InitRec(QWidget):
pers_id=5,
)
ids = EntityIds(
link_id=7,
)
# ids = EntityIds(
# link_id=7,
# )
self.STATE.ids.update(ids, ignore_none=False)
if ids.empty():
@@ -3523,6 +3563,13 @@ class Page_InitRec(QWidget):
state.form_data = self.STATE.form_data.person
if not update_only:
self.initrec_form_person.load_state(state)
case EntityType.METADATA:
state.form_data = self.STATE.form_data.metadata
logger_initrecform.info(
"[Page -- InitRec] Load METADATA from Pydantic model...\n%s",
pformat(self.STATE.form_data.metadata),
)
self.initrec_form_metadata.load_state(state)
case _:
raise RuntimeError(f"Unspecified entity type {ent_type}")
@@ -3602,6 +3649,8 @@ class Page_InitRec(QWidget):
self.STATE.form_data.company = form_state.form_data
case EntityType.PERSON:
self.STATE.form_data.person = form_state.form_data
case EntityType.METADATA:
self.STATE.form_data.metadata = form_state.form_data
case _:
raise RuntimeError(f"Unspecified entity type {form_state.ent_type}")
@@ -3718,6 +3767,9 @@ class Page_InitRec(QWidget):
case EntityType.PERSON:
val_data = state.cfg.pydantic_model(**self.STATE.form_data.person)
db_data.person = val_data.to_db(exclude=state.cfg.ignored_keys)
case EntityType.METADATA:
val_data = state.cfg.pydantic_model(**self.STATE.form_data.metadata)
db_data.metadata = val_data.to_db(exclude=state.cfg.ignored_keys)
case _:
raise RuntimeError(f"Unspecified entity type {ent_type}")