Dev #7

Merged
foefl merged 74 commits from dev into main 2026-07-31 14:19:01 +00:00
4 changed files with 181 additions and 5 deletions
Showing only changes of commit 39d4327e19 - Show all commits
@@ -0,0 +1,73 @@
"""adding consulting sessions
Revision ID: 2afa4e506448
Revises: 1a8e957522a4
Create Date: 2026-07-09 14:21:24.586706
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
import wce_crm.db
# revision identifiers, used by Alembic.
revision: str = "2afa4e506448"
down_revision: Union[str, Sequence[str], None] = "1a8e957522a4"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
"beratung_vorgang",
sa.Column("vorgang_id", sa.Integer(), autoincrement=True, nullable=False),
sa.Column("un_id", sa.Integer(), nullable=True),
sa.Column("pers_id", sa.Integer(), nullable=True),
sa.Column("titel", sa.Text(), nullable=False),
sa.Column("beratungs_typ", sa.String(length=20), nullable=False),
sa.Column("erstellt", wce_crm.db.UTCDateTime(), nullable=False),
sa.Column("aktualisiert", wce_crm.db.UTCDateTime(), nullable=True),
sa.ForeignKeyConstraint(
["pers_id"],
["grunderfassung_personen.pers_id"],
),
sa.ForeignKeyConstraint(
["un_id"],
["grunderfassung_unternehmen.un_id"],
),
sa.PrimaryKeyConstraint("vorgang_id"),
)
op.create_table(
"beratung_einzelberatung",
sa.Column("beratung_id", sa.Integer(), autoincrement=True, nullable=False),
sa.Column("vorgang_id", sa.Integer(), nullable=False),
sa.Column("nutzer_id", sa.Integer(), nullable=False),
sa.Column("nutzer_name", sa.String(length=20), nullable=False),
sa.Column("zeitstempel", wce_crm.db.UTCDateTime(), nullable=False),
sa.Column("ansprechpartner", sa.Text(), nullable=False),
sa.Column("kommunikationsweg", sa.Text(), nullable=False),
sa.Column("thema_crm_matrix", sa.Text(), nullable=True),
sa.Column("anmerkungen", sa.Text(), nullable=True),
sa.Column("rueckmeldung", sa.Text(), nullable=True),
sa.Column("erstellt", wce_crm.db.UTCDateTime(), nullable=False),
sa.Column("aktualisiert", wce_crm.db.UTCDateTime(), nullable=True),
sa.ForeignKeyConstraint(
["vorgang_id"],
["beratung_vorgang.vorgang_id"],
),
sa.PrimaryKeyConstraint("beratung_id"),
)
# ### end Alembic commands ###
def downgrade() -> None:
"""Downgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table("beratung_einzelberatung")
op.drop_table("beratung_vorgang")
# ### end Alembic commands ###
+7 -5
View File
@@ -85,7 +85,7 @@ Beratung_Vorgang | Beratung kann an Unternehmen allein (pauschal), Person allein
pers_id int nullable -> Grunderfassung_Personen(pers_id) | sowohl Pauschal- als auch Individualberatung bei Personenbindung möglich pers_id int nullable -> Grunderfassung_Personen(pers_id) | sowohl Pauschal- als auch Individualberatung bei Personenbindung möglich
titel text titel text
beratung_typ berat_typ(pauschal, individual) beratung_typ berat_typ(pauschal, individual)
erstellt "timestamp with time zone"=`datetime.datetime.now(datetime.UTC)` nullable erstellt "timestamp with time zone"=`datetime.datetime.now(datetime.UTC)`
aktualisiert "timestamp with time zone"=`datetime.datetime.now(datetime.UTC)` nullable {on_update: `datetime.datetime.now(datetime.UTC)`} aktualisiert "timestamp with time zone"=`datetime.datetime.now(datetime.UTC)` nullable {on_update: `datetime.datetime.now(datetime.UTC)`}
temporaer bool | Gibt an, ob der Vorgang losgelöst von der Grunderfassung gestartet wurde (Daten müssen nachträglich zugeordnet werden); theoretisch auch erfüllt, wenn `un_id` und `pers_id` beide NULL sind temporaer bool | Gibt an, ob der Vorgang losgelöst von der Grunderfassung gestartet wurde (Daten müssen nachträglich zugeordnet werden); theoretisch auch erfüllt, wenn `un_id` und `pers_id` beide NULL sind
@@ -93,12 +93,14 @@ Beratung_Vorgang | Beratung kann an Unternehmen allein (pauschal), Person allein
Beratung_Einzelberatung | Änderungen müssen über einen DB-Trigger an Elterntabelle zurückgeschrieben werden Beratung_Einzelberatung | Änderungen müssen über einen DB-Trigger an Elterntabelle zurückgeschrieben werden
beratung_id int pk {autoIncrement} beratung_id int pk {autoIncrement}
vorgang_id int -> Beratung_Vorgang(vorgang_id) | Jede Beratung muss zu einem Beratungsvorgang gehören. vorgang_id int -> Beratung_Vorgang(vorgang_id) | Jede Beratung muss zu einem Beratungsvorgang gehören.
erstellt "timestamp with time zone"=`datetime.datetime.now(datetime.UTC)` nullable | gekoppelt mit Elterntabelle 'Beratung_Vorgang' über Trigger erstellt "timestamp with time zone"=`datetime.datetime.now(datetime.UTC)` | gekoppelt mit Elterntabelle 'Beratung_Vorgang' über Trigger
aktualisiert "timestamp with time zone"=`datetime.datetime.now(datetime.UTC)` nullable {on_update: `datetime.datetime.now(datetime.UTC)`} | gekoppelt mit Elterntabelle 'Beratung_Vorgang' über Trigger aktualisiert "timestamp with time zone"=`datetime.datetime.now(datetime.UTC)` nullable {on_update: `datetime.datetime.now(datetime.UTC)`} | gekoppelt mit Elterntabelle 'Beratung_Vorgang' über Trigger
nutzer_id int | externe Nutzerverwaltung nutzer_id int | externe Nutzerverwaltung
nutzer_name text | externe Nuttzerverwaltung nutzer_name text | externe Nutzerverwaltung
ansprechpartner text nullable zeitstempel "timestamp with time zone" | Nutzereingabe
thema text nullable | Verlinkung ins CRM, genaue Gestaltung noch unklar ansprechpartner text
kommunikationsweg text
thema_crm_matrix text nullable | Verlinkung ins CRM, genaue Gestaltung noch unklar
anmerkungen text nullable anmerkungen text nullable
rueckmeldung txt nullable rueckmeldung txt nullable
+33
View File
@@ -178,6 +178,7 @@ class FlatBaseModel(BaseModel):
return dict(items) return dict(items)
# ** InitRec
class Grunderfassung_Unternehmen(FlatBaseModel): class Grunderfassung_Unternehmen(FlatBaseModel):
# default in SQLAlchemy with lambda and timezone-aware datetime # default in SQLAlchemy with lambda and timezone-aware datetime
Metadaten_erstellung: AwareDatetime | None = None Metadaten_erstellung: AwareDatetime | None = None
@@ -342,3 +343,35 @@ class Grunderfassung_Sprachen(BaseModel):
SP_nachweis: str | None SP_nachweis: str | None
SP_art_nachweis: str | None = None SP_art_nachweis: str | None = None
SP_datum_nachweis: datetime.date | None = None SP_datum_nachweis: datetime.date | None = None
# ** Consulting
class Beratungsgespraech(BaseModel):
model_config = ConfigDict(str_strip_whitespace=True)
un_id: int | None
pers_id: int | None
titel: str
beratungs_typ: str
# default in SQLAlchemy with lambda and timezone-aware datetime
erstellt: AwareDatetime | None = None
aktualisiert: AwareDatetime | None = None # see above
class Beratungsgespraech_Vorgang(BaseModel):
model_config = ConfigDict(str_strip_whitespace=True)
vorgang_id: int
nutzer_id: int
nutzer_name: str
zeitstempel: AwareDatetime
ansprechpartner: str
kommunikationsweg: str
thema_crm_matrix: str | None
anmerkungen: str | None
rueckmeldung: str | None
# default in SQLAlchemy with lambda and timezone-aware datetime
erstellt: AwareDatetime | None = None
aktualisiert: AwareDatetime | None = None # see above
+68
View File
@@ -374,3 +374,71 @@ zuordnung_personen_unternehmen: sql.Table = Table(
onupdate=lambda: datetime.datetime.now(datetime.UTC), onupdate=lambda: datetime.datetime.now(datetime.UTC),
), ),
) )
beratung_vorgang: sql.Table = Table(
"beratung_vorgang",
MD_MAIN,
Column(
"vorgang_id",
sql.Integer,
primary_key=True,
autoincrement=True,
),
Column("un_id", sql.ForeignKey("grunderfassung_unternehmen.un_id"), nullable=True),
Column("pers_id", sql.ForeignKey("grunderfassung_personen.pers_id"), nullable=True),
Column("titel", sql.Text, nullable=False),
Column("beratungs_typ", sql.String(20), nullable=False),
Column(
"erstellt",
UTCDateTime,
nullable=False,
default=lambda: datetime.datetime.now(datetime.UTC),
),
Column(
"aktualisiert",
UTCDateTime,
nullable=True,
default=lambda: datetime.datetime.now(datetime.UTC),
onupdate=lambda: datetime.datetime.now(datetime.UTC),
),
)
beratung_einzelberatung: sql.Table = Table(
"beratung_einzelberatung",
MD_MAIN,
Column(
"beratung_id",
sql.Integer,
primary_key=True,
autoincrement=True,
),
Column("vorgang_id", sql.ForeignKey("beratung_vorgang.vorgang_id"), nullable=False),
Column("nutzer_id", sql.Integer, nullable=False),
Column("nutzer_name", sql.String(20), nullable=False),
Column(
"zeitstempel",
UTCDateTime,
nullable=False,
default=lambda: datetime.datetime.now(datetime.UTC),
),
Column("ansprechpartner", sql.Text, nullable=False),
Column("kommunikationsweg", sql.Text, nullable=False),
Column("thema_crm_matrix", sql.Text, nullable=True),
Column("anmerkungen", sql.Text, nullable=True),
Column("rueckmeldung", sql.Text, nullable=True),
Column(
"erstellt",
UTCDateTime,
nullable=False,
default=lambda: datetime.datetime.now(datetime.UTC),
),
Column(
"aktualisiert",
UTCDateTime,
nullable=True,
default=lambda: datetime.datetime.now(datetime.UTC),
onupdate=lambda: datetime.datetime.now(datetime.UTC),
),
)