generated from dopt-python/py311
handle metadata separately in GUI, but common in database
This commit is contained in:
+56
-4
@@ -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}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user