iteration for new data model

This commit is contained in:
2026-07-23 19:17:49 +02:00
parent fd25576b0e
commit 868db09d94
8 changed files with 1338 additions and 983 deletions
+225 -202
View File
@@ -24,11 +24,11 @@ from wce_crm.types import (
CompanyProfileConsultations,
ConsultingType,
ContactPersonInfo,
EntityIds,
EntityType,
LinkingConsultationsEntryCompany,
LinkingConsultationsEntryPerson,
MainPageEntry,
NewEntityIds,
RecordingType,
)
if TYPE_CHECKING:
@@ -152,200 +152,210 @@ def initrec_comp_contact_person_search_get_info(
# conn.execute(stmt, data)
def initrec_company_to_db(
auto_form_data: InitRec,
) -> InitRec:
logger.debug("[AutoForm -- backend] Call database saving routine...")
# def initrec_company_to_db(
# auto_form_data: InitRec,
# ) -> InitRec:
# logger.debug("[AutoForm -- backend] Call database saving routine...")
dump_data = copy.deepcopy(auto_form_data.db_data)
dump_data["geloescht"] = auto_form_data.geloescht
# dump_data = copy.deepcopy(auto_form_data.db_data)
# dump_data["geloescht"] = auto_form_data.geloescht
with db.ENGINE.begin() as conn:
if auto_form_data.ids.un_id is None:
logger.debug("[AutoForm -- backend] Insert...")
# with db.ENGINE.begin() as conn:
# if auto_form_data.ids.un_id is None:
# logger.debug("[AutoForm -- backend] Insert...")
stmt = db.grunderfassung_unternehmen.insert().returning(
db.grunderfassung_unternehmen.c.un_id,
db.grunderfassung_unternehmen.c.Metadaten_aktualisierung,
db.grunderfassung_unternehmen.c.geloescht,
)
ret = conn.execute(stmt, dump_data)
# stmt = db.grunderfassung_unternehmen.insert().returning(
# db.grunderfassung_unternehmen.c.un_id,
# db.grunderfassung_unternehmen.c.Metadaten_aktualisierung,
# db.grunderfassung_unternehmen.c.geloescht,
# )
# ret = conn.execute(stmt, dump_data)
from_db = ret.mappings().fetchall()
assert len(from_db) == 1, "expected excactly one returned row"
data_from_db = from_db[0]
auto_form_data.ids.un_id = data_from_db["un_id"]
auto_form_data.geloescht = data_from_db["geloescht"]
auto_form_data.db_data["Metadaten_aktualisierung"] = data_from_db[
"Metadaten_aktualisierung"
]
# from_db = ret.mappings().fetchall()
# assert len(from_db) == 1, "expected excactly one returned row"
# data_from_db = from_db[0]
# auto_form_data.ids.un_id = data_from_db["un_id"]
# auto_form_data.geloescht = data_from_db["geloescht"]
# auto_form_data.db_data["Metadaten_aktualisierung"] = data_from_db[
# "Metadaten_aktualisierung"
# ]
logger.debug("[AutoForm -- backend] Inserted InitRec Company successfully")
# logger.debug("[AutoForm -- backend] Inserted InitRec Company successfully")
else:
logger.debug("[AutoForm -- backend] Update...")
stmt = (
db.grunderfassung_unternehmen.update()
.where(db.grunderfassung_unternehmen.c.un_id == auto_form_data.ids.un_id)
.returning(
db.grunderfassung_unternehmen.c.Metadaten_aktualisierung,
db.grunderfassung_unternehmen.c.geloescht,
)
)
ret = conn.execute(stmt, dump_data)
# else:
# logger.debug("[AutoForm -- backend] Update...")
# stmt = (
# db.grunderfassung_unternehmen.update()
# .where(db.grunderfassung_unternehmen.c.un_id == auto_form_data.ids.un_id)
# .returning(
# db.grunderfassung_unternehmen.c.Metadaten_aktualisierung,
# db.grunderfassung_unternehmen.c.geloescht,
# )
# )
# ret = conn.execute(stmt, dump_data)
from_db = ret.mappings().fetchall()
assert len(from_db) == 1, "expected excatly one returned row"
data_from_db = from_db[0]
# from_db = ret.mappings().fetchall()
# assert len(from_db) == 1, "expected excatly one returned row"
# data_from_db = from_db[0]
auto_form_data.db_data["Metadaten_aktualisierung"] = data_from_db[
"Metadaten_aktualisierung"
]
# auto_form_data.db_data["Metadaten_aktualisierung"] = data_from_db[
# "Metadaten_aktualisierung"
# ]
logger.debug(
"[AutoForm -- backend] Updated InitRec Company with ID %d successfully",
auto_form_data.ids.un_id,
)
# logger.debug(
# "[AutoForm -- backend] Updated InitRec Company with ID %d successfully",
# auto_form_data.ids.un_id,
# )
return auto_form_data
# return auto_form_data
def initrec_company_from_db(
id_: RecId,
) -> InitRec:
logger.debug("[AutoForm -- backend] Call database loading routine...")
stmt = db.grunderfassung_unternehmen.select().where(
db.grunderfassung_unternehmen.c.un_id == id_
)
with db.ENGINE.connect() as conn:
ret = conn.execute(stmt)
# def initrec_company_from_db(
# id_: RecId,
# ) -> InitRec:
# logger.debug("[AutoForm -- backend] Call database loading routine...")
# stmt = db.grunderfassung_unternehmen.select().where(
# db.grunderfassung_unternehmen.c.un_id == id_
# )
# with db.ENGINE.connect() as conn:
# ret = conn.execute(stmt)
from_db = ret.mappings().all()
assert len(from_db) == 1, "not excactly one company initial recording obtained"
data_from_db = dict(from_db[0])
# from_db = ret.mappings().all()
# assert len(from_db) == 1, "not excactly one company initial recording obtained"
# data_from_db = dict(from_db[0])
geloescht = data_from_db["geloescht"]
del data_from_db["geloescht"]
# geloescht = data_from_db["geloescht"]
# del data_from_db["geloescht"]
return InitRec(
ids=EntityIds(un_id=id_),
# rec_id=id_, # TODO remove
geloescht=geloescht,
db_data=data_from_db,
)
# return InitRec(
# ids=EntityIds(un_id=id_),
# # rec_id=id_, # TODO remove
# geloescht=geloescht,
# db_data=data_from_db,
# )
def initrec_person_to_db(
auto_form_data: InitRec,
) -> InitRec:
logger.debug("[AutoForm -- backend] Call database saving routine...")
# def initrec_person_to_db(
# auto_form_data: InitRec,
# ) -> InitRec:
# logger.debug("[AutoForm -- backend] Call database saving routine...")
dump_data = copy.deepcopy(auto_form_data.db_data)
dump_data["geloescht"] = auto_form_data.geloescht
# dump_data = copy.deepcopy(auto_form_data.db_data)
# dump_data["geloescht"] = auto_form_data.geloescht
with db.ENGINE.begin() as conn:
if auto_form_data.ids.pers_id is None:
logger.debug("[AutoForm -- backend] Insert...")
# with db.ENGINE.begin() as conn:
# if auto_form_data.ids.pers_id is None:
# logger.debug("[AutoForm -- backend] Insert...")
stmt = sa.insert(db.grunderfassung_personen).returning(
db.grunderfassung_personen.c.pers_id,
db.grunderfassung_personen.c.Metadaten_aktualisierung,
db.grunderfassung_personen.c.geloescht,
)
stmt_compiled = str(stmt.compile(db.ENGINE))
logger.debug(
"[AutoForm -- backend] Data to insert:\nStatement: %s\n%s",
stmt_compiled,
pformat(dump_data),
)
# stmt = sa.insert(db.t_grunderfassung_personen).returning(
# db.t_grunderfassung_personen.c.pers_id,
# db.t_grunderfassung_personen.c.Metadaten_aktualisierung,
# db.t_grunderfassung_personen.c.geloescht,
# )
# stmt_compiled = str(stmt.compile(db.ENGINE))
# logger.debug(
# "[AutoForm -- backend] Data to insert:\nStatement: %s\n%s",
# stmt_compiled,
# pformat(dump_data),
# )
ret = conn.execute(stmt, dump_data)
# ret = conn.execute(stmt, dump_data)
from_db = ret.mappings().fetchall()
assert len(from_db) == 1, "expected excactly one returned row"
data_from_db = from_db[0]
auto_form_data.ids.pers_id = data_from_db["pers_id"]
auto_form_data.geloescht = data_from_db["geloescht"]
auto_form_data.db_data["Metadaten_aktualisierung"] = data_from_db[
"Metadaten_aktualisierung"
]
# from_db = ret.mappings().fetchall()
# assert len(from_db) == 1, "expected excactly one returned row"
# data_from_db = from_db[0]
# auto_form_data.ids.pers_id = data_from_db["pers_id"]
# auto_form_data.geloescht = data_from_db["geloescht"]
# auto_form_data.db_data["Metadaten_aktualisierung"] = data_from_db[
# "Metadaten_aktualisierung"
# ]
logger.debug("[AutoForm -- backend] Inserted InitRec Person successfully")
# logger.debug("[AutoForm -- backend] Inserted InitRec Person successfully")
else:
logger.debug("[AutoForm -- backend] Update...")
stmt = (
db.grunderfassung_personen.update()
.where(db.grunderfassung_personen.c.pers_id == auto_form_data.ids.pers_id)
.returning(
db.grunderfassung_personen.c.Metadaten_aktualisierung,
db.grunderfassung_personen.c.geloescht,
)
)
ret = conn.execute(stmt, dump_data)
# else:
# logger.debug("[AutoForm -- backend] Update...")
# stmt = (
# db.t_grunderfassung_personen.update()
# .where(db.t_grunderfassung_personen.c.pers_id == auto_form_data.ids.pers_id)
# .returning(
# db.t_grunderfassung_personen.c.Metadaten_aktualisierung,
# db.t_grunderfassung_personen.c.geloescht,
# )
# )
# ret = conn.execute(stmt, dump_data)
from_db = ret.mappings().fetchall()
assert len(from_db) == 1, "expected excatly one returned row"
data_from_db = from_db[0]
# from_db = ret.mappings().fetchall()
# assert len(from_db) == 1, "expected excatly one returned row"
# data_from_db = from_db[0]
auto_form_data.db_data["Metadaten_aktualisierung"] = data_from_db[
"Metadaten_aktualisierung"
]
# auto_form_data.db_data["Metadaten_aktualisierung"] = data_from_db[
# "Metadaten_aktualisierung"
# ]
logger.debug(
"[AutoForm -- backend] Updated InitRec Person with ID %d successfully",
auto_form_data.ids.pers_id,
)
# logger.debug(
# "[AutoForm -- backend] Updated InitRec Person with ID %d successfully",
# auto_form_data.ids.pers_id,
# )
return auto_form_data
# return auto_form_data
def initrec_person_from_db(
id_: RecId,
) -> InitRec:
logger.debug("[AutoForm -- backend] Call database loading routine...")
stmt = db.grunderfassung_personen.select().where(
db.grunderfassung_personen.c.pers_id == id_
)
with db.ENGINE.connect() as conn:
ret = conn.execute(stmt)
# def initrec_person_from_db(
# id_: RecId,
# ) -> InitRec:
# logger.debug("[AutoForm -- backend] Call database loading routine...")
# stmt = db.t_grunderfassung_personen.select().where(
# db.t_grunderfassung_personen.c.pers_id == id_
# )
# with db.ENGINE.connect() as conn:
# ret = conn.execute(stmt)
from_db = ret.mappings().all()
assert len(from_db) == 1, "not excactly one company initial recording obtained"
data_from_db = dict(from_db[0])
# from_db = ret.mappings().all()
# assert len(from_db) == 1, "not excactly one company initial recording obtained"
# data_from_db = dict(from_db[0])
geloescht = data_from_db["geloescht"]
del data_from_db["geloescht"]
# geloescht = data_from_db["geloescht"]
# del data_from_db["geloescht"]
return InitRec(
ids=EntityIds(pers_id=id_),
# rec_id=id_, # TODO remove
geloescht=geloescht,
db_data=data_from_db,
)
# return InitRec(
# ids=EntityIds(pers_id=id_),
# # rec_id=id_, # TODO remove
# geloescht=geloescht,
# db_data=data_from_db,
# )
# TODO check removal
def initrec_company_get_initial_recording(
id_: RecId,
) -> dict[str, Any]:
logger.debug("[Call backend] get_initial_recording")
stmt = db.grunderfassung_unternehmen.select().where(
db.grunderfassung_unternehmen.c.un_id == id_
)
with db.ENGINE.connect() as conn:
ret = conn.execute(stmt)
# def initrec_company_get_initial_recording(
# id_: RecId,
# ) -> dict[str, Any]:
# logger.debug("[Call backend] get_initial_recording")
# stmt = db.grunderfassung_unternehmen.select().where(
# db.grunderfassung_unternehmen.c.un_id == id_
# )
# with db.ENGINE.connect() as conn:
# ret = conn.execute(stmt)
results = ret.mappings().all()
if not results:
raise KeyError(f"Database ID {id_} not found")
# results = ret.mappings().all()
# if not results:
# raise KeyError(f"Database ID {id_} not found")
assert len(results) == 1, "more than one company initial recording obtained"
# assert len(results) == 1, "more than one company initial recording obtained"
row = results[0]
assert row, "row was not obtained"
# row = results[0]
# assert row, "row was not obtained"
return dict(row)
# return dict(row)
def page_initrec_to_db(
data: InitRec,
) -> InitRec: ...
def page_initrec_from_db(
ids: NewEntityIds,
) -> InitRec: ...
# def initrec_company_delete_initial_recording(
@@ -444,7 +454,7 @@ def page_consulting_to_db(
pformat(insert_data_process),
)
stmt = db.beratung_vorgang.insert()
stmt = db.t_beratung_vorgang.insert()
ret = conn.execute(stmt, insert_data_process)
if ret.rowcount == 0:
raise IOError("Entry was not inserted correctly")
@@ -460,8 +470,8 @@ def page_consulting_to_db(
consultation_data.vorgang_id,
)
update_data_process = consultation_data.model_dump(exclude={"beratungen"})
stmt = db.beratung_vorgang.update().where(
db.beratung_vorgang.c.vorgang_id == consultation_data.vorgang_id
stmt = db.t_beratung_vorgang.update().where(
db.t_beratung_vorgang.c.vorgang_id == consultation_data.vorgang_id
)
conn.execute(stmt, update_data_process)
@@ -487,8 +497,8 @@ def page_consulting_to_db(
logger.debug(
"[Consulting Page] Call update for sessions:\n%s", pformat(rows_for_db_update)
)
stmt = db.beratung_einzelberatung.update().where(
db.beratung_einzelberatung.c.beratung_id == sa.bindparam("b_beratung_id")
stmt = db.t_beratung_einzelberatung.update().where(
db.t_beratung_einzelberatung.c.beratung_id == sa.bindparam("b_beratung_id")
)
conn.execute(stmt, rows_for_db_update)
@@ -497,8 +507,8 @@ def page_consulting_to_db(
logger.debug(
"[Consulting Page] Call insert for sessions:\n%s", pformat(rows_for_db_insert)
)
stmt = db.beratung_einzelberatung.insert().returning(
db.beratung_einzelberatung.c.beratung_id
stmt = db.t_beratung_einzelberatung.insert().returning(
db.t_beratung_einzelberatung.c.beratung_id
)
res = conn.execute(stmt, rows_for_db_insert)
new_cons_session_ids = cast(list[int], [row[0] for row in res.fetchall()])
@@ -518,12 +528,14 @@ def page_consulting_delete(
dump_data: dict[str, Any] = {"geloescht": timestamp_deleted}
with db.ENGINE.begin() as conn:
stmt = db.beratung_vorgang.update().where(db.beratung_vorgang.c.vorgang_id == cons_id)
stmt = db.t_beratung_vorgang.update().where(
db.t_beratung_vorgang.c.vorgang_id == cons_id
)
conn.execute(stmt, dump_data)
stmt = db.beratung_einzelberatung.update().where(
db.beratung_einzelberatung.c.vorgang_id == cons_id,
db.beratung_einzelberatung.c.geloescht.is_(None),
stmt = db.t_beratung_einzelberatung.update().where(
db.t_beratung_einzelberatung.c.vorgang_id == cons_id,
db.t_beratung_einzelberatung.c.geloescht.is_(None),
)
conn.execute(stmt, dump_data)
@@ -537,7 +549,9 @@ def page_consulting_from_db(
with db.ENGINE.connect() as conn:
# get the consultation process
stmt = db.beratung_vorgang.select().where(db.beratung_vorgang.c.vorgang_id == cons_id)
stmt = db.t_beratung_vorgang.select().where(
db.t_beratung_vorgang.c.vorgang_id == cons_id
)
ret = conn.execute(stmt)
results = ret.mappings().all()
@@ -570,9 +584,9 @@ def page_consulting_from_db(
# get all consultation sessions of this process, only the ones
# which are not marked as deleted
stmt = db.beratung_einzelberatung.select().where(
db.beratung_einzelberatung.c.vorgang_id == cons_id,
db.beratung_einzelberatung.c.geloescht.is_(None),
stmt = db.t_beratung_einzelberatung.select().where(
db.t_beratung_einzelberatung.c.vorgang_id == cons_id,
db.t_beratung_einzelberatung.c.geloescht.is_(None),
)
ret = conn.execute(stmt)
cons_sessions = ret.mappings().all()
@@ -604,9 +618,12 @@ def page_consulting_from_db(
# // consulting page interaction
# TODO change to correct logic
def page_consulting_linking_companies(
un_id: RecId | None,
) -> list[LinkingConsultationsEntryCompany]:
raise RuntimeError("TODOs to implement")
with db.ENGINE.connect() as conn:
q_relevant_companies = sa.select(
db.grunderfassung_unternehmen.c.un_id,
@@ -624,12 +641,12 @@ def page_consulting_linking_companies(
stmt = sa.select(
q_relevant_companies.c.un_id,
db.ext_crm_master_attach.c.ma_unternehmensname,
db.t_ext_crm_master_attach.c.ma_unternehmensname,
).select_from(
q_relevant_companies.join(
db.ext_crm_master_attach,
db.t_ext_crm_master_attach,
q_relevant_companies.c.Partnersuche__un_suche
== db.ext_crm_master_attach.c.ma_id,
== db.t_ext_crm_master_attach.c.ma_id,
)
)
@@ -660,20 +677,20 @@ def page_consulting_linking_persons(
# else: list just the persons associated with the company
person_select = sa.select(
db.grunderfassung_personen.c.pers_id,
db.grunderfassung_personen.c.Stammdaten__name,
db.grunderfassung_personen.c.Stammdaten__vorname,
db.grunderfassung_personen.c.Stammdaten__ort,
db.t_grunderfassung_personen.c.pers_id,
db.t_grunderfassung_personen.c.Stammdaten__name,
db.t_grunderfassung_personen.c.Stammdaten__vorname,
db.t_grunderfassung_personen.c.Stammdaten__ort,
)
if un_id is not None:
person_select = person_select.select_from(
db.grunderfassung_personen.join(
db.zuordnung_personen_unternehmen,
db.grunderfassung_personen.c.pers_id
== db.zuordnung_personen_unternehmen.c.pers_id,
db.t_grunderfassung_personen.join(
db.t_zuordnung_personen_unternehmen,
db.t_grunderfassung_personen.c.pers_id
== db.t_zuordnung_personen_unternehmen.c.pers_id,
)
).where(db.zuordnung_personen_unternehmen.c.un_id == un_id)
).where(db.t_zuordnung_personen_unternehmen.c.un_id == un_id)
ret = conn.execute(person_select)
person_names = ret.mappings().all()
@@ -711,8 +728,8 @@ def page_consulting_eastablish_link(
) -> None:
stmt = (
sa.update(db.beratung_vorgang)
.where(db.beratung_vorgang.c.vorgang_id == vorgang_id)
sa.update(db.t_beratung_vorgang)
.where(db.t_beratung_vorgang.c.vorgang_id == vorgang_id)
.values(un_id=un_id, pers_id=pers_id)
)
@@ -725,11 +742,13 @@ def companyprofile_page_get_consultations(
) -> CompanyProfileConsultations:
logger.debug("[Call backend] _companyprofile_page_get_consultations")
stmt = sa.select(
db.beratung_vorgang.c.vorgang_id,
db.beratung_vorgang.c.aktualisiert,
db.beratung_vorgang.c.titel,
db.beratung_vorgang.c.beratungs_typ,
).where(db.beratung_vorgang.c.un_id == un_id, db.beratung_vorgang.c.geloescht.is_(None))
db.t_beratung_vorgang.c.vorgang_id,
db.t_beratung_vorgang.c.aktualisiert,
db.t_beratung_vorgang.c.titel,
db.t_beratung_vorgang.c.beratungs_typ,
).where(
db.t_beratung_vorgang.c.un_id == un_id, db.t_beratung_vorgang.c.geloescht.is_(None)
)
with db.ENGINE.connect() as conn:
res = conn.execute(stmt)
@@ -782,17 +801,17 @@ def initrec_link_person_company(
if unlink:
deleted_ts = datetime.datetime.now(tz=datetime.UTC)
stmt = (
sa.update(db.zuordnung_personen_unternehmen)
sa.update(db.t_zuordnung_personen_unternehmen)
.where(
db.zuordnung_personen_unternehmen.c.un_id == un_id,
db.zuordnung_personen_unternehmen.c.pers_id == pers_id,
db.zuordnung_personen_unternehmen.c.gueltig_bis.is_(None),
db.t_zuordnung_personen_unternehmen.c.un_id == un_id,
db.t_zuordnung_personen_unternehmen.c.pers_id == pers_id,
db.t_zuordnung_personen_unternehmen.c.gueltig_bis.is_(None),
)
.values(gueltig_bis=deleted_ts)
)
else:
stmt = (
sqlite_insert(db.zuordnung_personen_unternehmen)
sqlite_insert(db.t_zuordnung_personen_unternehmen)
.values(un_id=un_id, pers_id=pers_id)
.on_conflict_do_nothing(
index_elements=["un_id", "pers_id"],
@@ -805,8 +824,12 @@ def initrec_link_person_company(
# // main page interaction
# TODO change to correct logic
def _main_page_get_company_list() -> list[MainPageEntry]:
logger.debug("[Call backend] get_company_list")
raise RuntimeError("TODOs to implement")
stmt = sa.select(
db.grunderfassung_unternehmen.c.un_id,
db.grunderfassung_unternehmen.c.Partnersuche__un_suche,
@@ -834,7 +857,7 @@ def _main_page_get_company_list() -> list[MainPageEntry]:
rec_id=rec_id,
display_name=display_name,
Metadaten_aktualisierung=datetime_akt,
type=EntityType.COMPANY,
type=RecordingType.COMPANY,
)
)
@@ -844,11 +867,11 @@ def _main_page_get_company_list() -> list[MainPageEntry]:
def _main_page_get_person_list() -> list[MainPageEntry]:
logger.debug("[Call backend] get_company_list")
stmt = sa.select(
db.grunderfassung_personen.c.pers_id,
db.grunderfassung_personen.c.Stammdaten__vorname,
db.grunderfassung_personen.c.Stammdaten__name,
db.grunderfassung_personen.c.Metadaten_aktualisierung,
).where(db.grunderfassung_personen.c.geloescht.is_(None))
db.t_grunderfassung_personen.c.pers_id,
db.t_grunderfassung_personen.c.Stammdaten__vorname,
db.t_grunderfassung_personen.c.Stammdaten__name,
db.t_grunderfassung_personen.c.Metadaten_aktualisierung,
).where(db.t_grunderfassung_personen.c.geloescht.is_(None))
with db.ENGINE.connect() as conn:
res = conn.execute(stmt)
@@ -871,7 +894,7 @@ def _main_page_get_person_list() -> list[MainPageEntry]:
rec_id=rec_id,
display_name=display_name,
Metadaten_aktualisierung=datetime_akt,
type=EntityType.PERSON,
type=RecordingType.PERSON,
)
)