generated from dopt-python/py311
major refactor with new state mechanics
This commit is contained in:
+1
-1
@@ -44,7 +44,7 @@ for r in res:
|
|||||||
|
|
||||||
|
|
||||||
# %%
|
# %%
|
||||||
backend.front_get_company_list()
|
backend._main_page_get_company_list()
|
||||||
|
|
||||||
|
|
||||||
# %%
|
# %%
|
||||||
|
|||||||
@@ -1,70 +1,18 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import dataclasses as dc
|
|
||||||
import datetime
|
import datetime
|
||||||
from typing import TYPE_CHECKING, Any, TypedDict, cast
|
from typing import TYPE_CHECKING, Any, cast
|
||||||
|
|
||||||
import polars as pl
|
import polars as pl
|
||||||
import sqlalchemy as sql
|
import sqlalchemy as sql
|
||||||
|
|
||||||
from wce_crm import db
|
from wce_crm import db
|
||||||
|
from wce_crm.constants import TIMEZONE_CEST
|
||||||
from wce_crm.logging import logger_back as logger
|
from wce_crm.logging import logger_back as logger
|
||||||
|
from wce_crm.types import CompanyInfo, ContactPersonInfo, InitRecType, MainPageEntry
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from wce_crm.types import ExtAnId, ExtMaId, InitRecId
|
from wce_crm.types import ExtAnId, ExtMaId, RecId
|
||||||
|
|
||||||
|
|
||||||
# // externals
|
|
||||||
class CompanyInfo(TypedDict):
|
|
||||||
ma_id: str
|
|
||||||
wce_id: str
|
|
||||||
ma_unternehmensname: str
|
|
||||||
ma_branche: str
|
|
||||||
ma_strasse: str
|
|
||||||
ma_hausnummer: str
|
|
||||||
ma_plz: str
|
|
||||||
ma_ort: str
|
|
||||||
ma_plz_postfach: str
|
|
||||||
ma_postfach: str
|
|
||||||
ma_website: str
|
|
||||||
ma_mail: str
|
|
||||||
ma_telefonnummer: str
|
|
||||||
ma_faxnummer: str
|
|
||||||
ma_ersteintrag_datum: str
|
|
||||||
ma_aktualisierung_datum: str
|
|
||||||
ma_aktualisierung_nutzer: str
|
|
||||||
ma_sollprozess: str
|
|
||||||
ma_auslaendische_mitarbeiter: str
|
|
||||||
ma_quelle_information: str
|
|
||||||
ma_bemerkung: str
|
|
||||||
ma_kontakt: str
|
|
||||||
ma_schlagworte: str
|
|
||||||
ma_archiviert: str
|
|
||||||
|
|
||||||
|
|
||||||
class ContactPersonInfo(TypedDict):
|
|
||||||
an_id: str
|
|
||||||
ma_id: str
|
|
||||||
wce_id: str
|
|
||||||
st_id: str
|
|
||||||
an_sachgebiet: str
|
|
||||||
an_anrede: str
|
|
||||||
an_titel: str
|
|
||||||
an_nachname: str
|
|
||||||
an_vorname: str
|
|
||||||
an_position: str
|
|
||||||
an_mail: str
|
|
||||||
an_festnetz: str
|
|
||||||
an_mobil: str
|
|
||||||
an_faxnummer: str
|
|
||||||
an_hauptansprechpartner: str
|
|
||||||
an_anrede_anschrift: str
|
|
||||||
an_bemerkung: str
|
|
||||||
an_aktualisierung_datum: str
|
|
||||||
an_aktualisierung_nutzer: str
|
|
||||||
an_letztes_kontaktdatum: str
|
|
||||||
an_ersteintrag_datum: str
|
|
||||||
an_archiviert: str
|
|
||||||
|
|
||||||
|
|
||||||
def _transform_for_gui_output(
|
def _transform_for_gui_output(
|
||||||
@@ -156,7 +104,7 @@ def initrec_comp_contact_person_search_get_info(
|
|||||||
# // internals
|
# // internals
|
||||||
def initrec_company_insert_initial_recording(
|
def initrec_company_insert_initial_recording(
|
||||||
data: dict[str, Any],
|
data: dict[str, Any],
|
||||||
) -> InitRecId:
|
) -> RecId:
|
||||||
logger.debug("[Call backend] insert_initial_recording")
|
logger.debug("[Call backend] insert_initial_recording")
|
||||||
stmt = db.grunderfassung_unternehmen.insert()
|
stmt = db.grunderfassung_unternehmen.insert()
|
||||||
with db.ENGINE.begin() as conn:
|
with db.ENGINE.begin() as conn:
|
||||||
@@ -172,7 +120,7 @@ def initrec_company_insert_initial_recording(
|
|||||||
|
|
||||||
|
|
||||||
def initrec_company_update_initial_recording(
|
def initrec_company_update_initial_recording(
|
||||||
id_: InitRecId,
|
id_: RecId,
|
||||||
data: dict[str, Any],
|
data: dict[str, Any],
|
||||||
) -> None:
|
) -> None:
|
||||||
logger.debug("[Call backend] update_initial_recording")
|
logger.debug("[Call backend] update_initial_recording")
|
||||||
@@ -184,7 +132,7 @@ def initrec_company_update_initial_recording(
|
|||||||
|
|
||||||
|
|
||||||
def initrec_company_get_initial_recording(
|
def initrec_company_get_initial_recording(
|
||||||
id_: InitRecId,
|
id_: RecId,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
logger.debug("[Call backend] get_initial_recording")
|
logger.debug("[Call backend] get_initial_recording")
|
||||||
stmt = db.grunderfassung_unternehmen.select().where(
|
stmt = db.grunderfassung_unternehmen.select().where(
|
||||||
@@ -203,7 +151,7 @@ def initrec_company_get_initial_recording(
|
|||||||
|
|
||||||
|
|
||||||
def initrec_company_delete_initial_recording(
|
def initrec_company_delete_initial_recording(
|
||||||
id_: InitRecId,
|
id_: RecId,
|
||||||
) -> None:
|
) -> None:
|
||||||
logger.debug("[Call backend] delete_initial_recording")
|
logger.debug("[Call backend] delete_initial_recording")
|
||||||
stmt = db.grunderfassung_unternehmen.delete().where(
|
stmt = db.grunderfassung_unternehmen.delete().where(
|
||||||
@@ -218,7 +166,7 @@ def initrec_company_delete_initial_recording(
|
|||||||
|
|
||||||
def initrec_person_insert_initial_recording(
|
def initrec_person_insert_initial_recording(
|
||||||
data: dict[str, Any],
|
data: dict[str, Any],
|
||||||
) -> InitRecId:
|
) -> RecId:
|
||||||
logger.debug("[Call backend] insert_initial_recording")
|
logger.debug("[Call backend] insert_initial_recording")
|
||||||
stmt = db.grunderfassung_personen.insert()
|
stmt = db.grunderfassung_personen.insert()
|
||||||
with db.ENGINE.begin() as conn:
|
with db.ENGINE.begin() as conn:
|
||||||
@@ -234,7 +182,7 @@ def initrec_person_insert_initial_recording(
|
|||||||
|
|
||||||
|
|
||||||
def initrec_person_update_initial_recording(
|
def initrec_person_update_initial_recording(
|
||||||
id_: InitRecId,
|
id_: RecId,
|
||||||
data: dict[str, Any],
|
data: dict[str, Any],
|
||||||
) -> None:
|
) -> None:
|
||||||
logger.debug("[Call backend] update_initial_recording")
|
logger.debug("[Call backend] update_initial_recording")
|
||||||
@@ -246,7 +194,7 @@ def initrec_person_update_initial_recording(
|
|||||||
|
|
||||||
|
|
||||||
def initrec_person_get_initial_recording(
|
def initrec_person_get_initial_recording(
|
||||||
id_: InitRecId,
|
id_: RecId,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
logger.debug("[Call backend] get_initial_recording")
|
logger.debug("[Call backend] get_initial_recording")
|
||||||
stmt = db.grunderfassung_personen.select().where(
|
stmt = db.grunderfassung_personen.select().where(
|
||||||
@@ -265,7 +213,7 @@ def initrec_person_get_initial_recording(
|
|||||||
|
|
||||||
|
|
||||||
def initrec_person_delete_initial_recording(
|
def initrec_person_delete_initial_recording(
|
||||||
id_: InitRecId,
|
id_: RecId,
|
||||||
) -> None:
|
) -> None:
|
||||||
logger.debug("[Call backend] delete_initial_recording")
|
logger.debug("[Call backend] delete_initial_recording")
|
||||||
stmt = db.grunderfassung_personen.delete().where(
|
stmt = db.grunderfassung_personen.delete().where(
|
||||||
@@ -278,56 +226,86 @@ def initrec_person_delete_initial_recording(
|
|||||||
raise KeyError(f"Database ID {id_} not found for deletion")
|
raise KeyError(f"Database ID {id_} not found for deletion")
|
||||||
|
|
||||||
|
|
||||||
@dc.dataclass(slots=True)
|
# // main page interaction
|
||||||
class FrontpageCompany:
|
def _main_page_get_company_list() -> list[MainPageEntry]:
|
||||||
erfassung_id: InitRecId
|
|
||||||
name: str
|
|
||||||
Metadaten_aktualisierung: datetime.datetime
|
|
||||||
is_company: bool
|
|
||||||
|
|
||||||
|
|
||||||
# TODO separate functions for companies and person: focus on companies first
|
|
||||||
def front_get_company_list() -> list[FrontpageCompany]:
|
|
||||||
logger.debug("[Call backend] get_company_list")
|
logger.debug("[Call backend] get_company_list")
|
||||||
stmt = sql.select(
|
stmt = sql.select(
|
||||||
db.grunderfassung_unternehmen.c.un_id,
|
db.grunderfassung_unternehmen.c.un_id,
|
||||||
db.grunderfassung_unternehmen.c.Partnersuche__un_suche,
|
db.grunderfassung_unternehmen.c.Partnersuche__un_suche,
|
||||||
# db.grunderfassung_unternehmen.c.Stammdaten__vorname,
|
|
||||||
# db.grunderfassung_unternehmen.c.Stammdaten__name,
|
|
||||||
db.grunderfassung_unternehmen.c.Metadaten_aktualisierung,
|
db.grunderfassung_unternehmen.c.Metadaten_aktualisierung,
|
||||||
).order_by(db.grunderfassung_unternehmen.c.Metadaten_aktualisierung.desc())
|
)
|
||||||
|
|
||||||
with db.ENGINE.connect() as conn:
|
with db.ENGINE.connect() as conn:
|
||||||
res = conn.execute(stmt)
|
res = conn.execute(stmt)
|
||||||
|
|
||||||
front_page_companies: list[FrontpageCompany] = []
|
main_page_companies: list[MainPageEntry] = []
|
||||||
|
|
||||||
for entry in res.mappings():
|
for entry in res.mappings():
|
||||||
erfassung_id = entry["un_id"]
|
rec_id = entry["un_id"]
|
||||||
ma_id = entry["Partnersuche__un_suche"]
|
assert rec_id, "no RecID defined"
|
||||||
|
ma_id_external = entry["Partnersuche__un_suche"]
|
||||||
|
assert ma_id_external is not None, "external MA ID is NULL"
|
||||||
datetime_akt = cast(datetime.datetime, entry["Metadaten_aktualisierung"])
|
datetime_akt = cast(datetime.datetime, entry["Metadaten_aktualisierung"])
|
||||||
datetime_akt = datetime_akt.astimezone()
|
datetime_akt = datetime_akt.astimezone(TIMEZONE_CEST)
|
||||||
|
|
||||||
name: str
|
comp_info = initrec_comp_search_get_info(ma_id_external)
|
||||||
is_company: bool
|
display_name = comp_info["ma_unternehmensname"]
|
||||||
if ma_id is not None:
|
|
||||||
comp_info = initrec_comp_search_get_info(ma_id)
|
|
||||||
name = comp_info["ma_unternehmensname"]
|
|
||||||
is_company = True
|
|
||||||
else:
|
|
||||||
surname: str = entry["Stammdaten__name"]
|
|
||||||
first_name: str = entry["Stammdaten__vorname"]
|
|
||||||
names_to_join = [n for n in (first_name, surname) if n]
|
|
||||||
name = " ".join(names_to_join)
|
|
||||||
is_company = False
|
|
||||||
|
|
||||||
front_page_companies.append(
|
main_page_companies.append(
|
||||||
FrontpageCompany(
|
MainPageEntry(
|
||||||
erfassung_id=erfassung_id,
|
rec_id=rec_id,
|
||||||
name=name,
|
display_name=display_name,
|
||||||
Metadaten_aktualisierung=datetime_akt,
|
Metadaten_aktualisierung=datetime_akt,
|
||||||
is_company=is_company,
|
type=InitRecType.COMPANY,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
return front_page_companies
|
return main_page_companies
|
||||||
|
|
||||||
|
|
||||||
|
def _main_page_get_person_list() -> list[MainPageEntry]:
|
||||||
|
logger.debug("[Call backend] get_company_list")
|
||||||
|
stmt = sql.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,
|
||||||
|
)
|
||||||
|
|
||||||
|
with db.ENGINE.connect() as conn:
|
||||||
|
res = conn.execute(stmt)
|
||||||
|
|
||||||
|
main_page_persons: list[MainPageEntry] = []
|
||||||
|
|
||||||
|
for entry in res.mappings():
|
||||||
|
rec_id = entry["pers_id"]
|
||||||
|
assert rec_id, "no RecID defined"
|
||||||
|
datetime_akt = cast(datetime.datetime, entry["Metadaten_aktualisierung"])
|
||||||
|
datetime_akt = datetime_akt.astimezone()
|
||||||
|
|
||||||
|
surname: str = entry["Stammdaten__name"]
|
||||||
|
first_name: str = entry["Stammdaten__vorname"]
|
||||||
|
names_to_join = [n for n in (first_name, surname) if n]
|
||||||
|
display_name = " ".join(names_to_join)
|
||||||
|
|
||||||
|
main_page_persons.append(
|
||||||
|
MainPageEntry(
|
||||||
|
rec_id=rec_id,
|
||||||
|
display_name=display_name,
|
||||||
|
Metadaten_aktualisierung=datetime_akt,
|
||||||
|
type=InitRecType.PERSON,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return main_page_persons
|
||||||
|
|
||||||
|
|
||||||
|
def main_page_get_entries() -> list[MainPageEntry]:
|
||||||
|
companies = _main_page_get_company_list()
|
||||||
|
persons = _main_page_get_person_list()
|
||||||
|
|
||||||
|
all_entries = companies + persons
|
||||||
|
|
||||||
|
all_entries.sort(key=lambda x: x.Metadaten_aktualisierung, reverse=True)
|
||||||
|
|
||||||
|
return all_entries
|
||||||
|
|||||||
+485
-268
File diff suppressed because it is too large
Load Diff
+73
-2
@@ -1,13 +1,84 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING, TypeAlias
|
import dataclasses as dc
|
||||||
|
import datetime
|
||||||
|
import enum
|
||||||
|
from typing import TYPE_CHECKING, TypeAlias, TypedDict
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import polars as pl
|
import polars as pl
|
||||||
|
|
||||||
UserId: TypeAlias = int
|
UserId: TypeAlias = int
|
||||||
InitRecId: TypeAlias = int
|
RecId: TypeAlias = int
|
||||||
ExtMaId: TypeAlias = int
|
ExtMaId: TypeAlias = int
|
||||||
ExtAnId: TypeAlias = int
|
ExtAnId: TypeAlias = int
|
||||||
|
|
||||||
PolarsSchema: TypeAlias = dict[str, type["pl.DataType"]]
|
PolarsSchema: TypeAlias = dict[str, type["pl.DataType"]]
|
||||||
|
|
||||||
|
|
||||||
|
class InitRecType(enum.IntEnum):
|
||||||
|
COMPANY = enum.auto()
|
||||||
|
PERSON = enum.auto()
|
||||||
|
|
||||||
|
|
||||||
|
# // database interaction data structures
|
||||||
|
# ** externals
|
||||||
|
class CompanyInfo(TypedDict):
|
||||||
|
ma_id: str
|
||||||
|
wce_id: str
|
||||||
|
ma_unternehmensname: str
|
||||||
|
ma_branche: str
|
||||||
|
ma_strasse: str
|
||||||
|
ma_hausnummer: str
|
||||||
|
ma_plz: str
|
||||||
|
ma_ort: str
|
||||||
|
ma_plz_postfach: str
|
||||||
|
ma_postfach: str
|
||||||
|
ma_website: str
|
||||||
|
ma_mail: str
|
||||||
|
ma_telefonnummer: str
|
||||||
|
ma_faxnummer: str
|
||||||
|
ma_ersteintrag_datum: str
|
||||||
|
ma_aktualisierung_datum: str
|
||||||
|
ma_aktualisierung_nutzer: str
|
||||||
|
ma_sollprozess: str
|
||||||
|
ma_auslaendische_mitarbeiter: str
|
||||||
|
ma_quelle_information: str
|
||||||
|
ma_bemerkung: str
|
||||||
|
ma_kontakt: str
|
||||||
|
ma_schlagworte: str
|
||||||
|
ma_archiviert: str
|
||||||
|
|
||||||
|
|
||||||
|
class ContactPersonInfo(TypedDict):
|
||||||
|
an_id: str
|
||||||
|
ma_id: str
|
||||||
|
wce_id: str
|
||||||
|
st_id: str
|
||||||
|
an_sachgebiet: str
|
||||||
|
an_anrede: str
|
||||||
|
an_titel: str
|
||||||
|
an_nachname: str
|
||||||
|
an_vorname: str
|
||||||
|
an_position: str
|
||||||
|
an_mail: str
|
||||||
|
an_festnetz: str
|
||||||
|
an_mobil: str
|
||||||
|
an_faxnummer: str
|
||||||
|
an_hauptansprechpartner: str
|
||||||
|
an_anrede_anschrift: str
|
||||||
|
an_bemerkung: str
|
||||||
|
an_aktualisierung_datum: str
|
||||||
|
an_aktualisierung_nutzer: str
|
||||||
|
an_letztes_kontaktdatum: str
|
||||||
|
an_ersteintrag_datum: str
|
||||||
|
an_archiviert: str
|
||||||
|
|
||||||
|
|
||||||
|
# ** internals
|
||||||
|
@dc.dataclass(slots=True)
|
||||||
|
class MainPageEntry:
|
||||||
|
rec_id: RecId
|
||||||
|
display_name: str
|
||||||
|
Metadaten_aktualisierung: datetime.datetime
|
||||||
|
type: InitRecType
|
||||||
|
|||||||
Reference in New Issue
Block a user