feat(workflow): Erledigt-Feld entfernen und Tages-Workflow-Maske überarbeiten
Das redundante 'erledigt'-Feld wird aus CallLog entfernt (Modell, API, Client, Migration _db_V01_15 DROP COLUMN). Der Erledigt-Status ergibt sich dynamisch aus den zugeordneten Tags (is_erledigend). Die Tages-Workflow-Maske zeigt Datum, Uhrzeit Beginn und Dauer der neuen Notiz als Read-Only-Panel; die Dauer läuft als Timer (mm:ss) mit. Ein Betreff-Feld ergänzt die neue Notiz. Mit flexContent wird der Formular-Inhalt als Flex-Spalte gerendert, das Historie-Panel füllt den verbleibenden Platz und scrollt in sich. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
1 parent
929664453e
commit
6e3cc7375d
9 files changed
+287
-122
No files matched your search
@@ -314,7 +314,6 @@ class CallLog(dbapp.Model):
|
||||
telefon = Column(String(100), nullable=True)
|
||||
notiz = Column(String(2000), nullable=True)
|
||||
wiedervorlage_datum = Column(Date, nullable=True)
|
||||
erledigt = Column(Boolean, nullable=False, default=False)
|
||||
|
||||
projekt = relationship('Projekt')
|
||||
kontaktadresse = relationship('Kontaktadresse', back_populates='call_logs')
|
||||
|
||||
@@ -161,7 +161,7 @@ def create_call_log(data: dict, user_id: int | None = None) -> CallLog:
|
||||
|
||||
- data: dict mit den Feldern projekt_id, kontaktadresse_id, datum,
|
||||
uhrzeit_beginn, dauer, betreff, name_ansprechpartner, telefon,
|
||||
notiz, wiedervorlage_datum, erledigt, tag_ids
|
||||
notiz, wiedervorlage_datum, tag_ids
|
||||
- user_id: ID des angemeldeten Mitarbeiters, der die Notiz erfasst
|
||||
(Ersteller). Wird von der Route übergeben (current_user.id),
|
||||
damit diese Funktion frei vom Flask-Request-Kontext bleibt.
|
||||
@@ -198,7 +198,6 @@ def create_call_log(data: dict, user_id: int | None = None) -> CallLog:
|
||||
call_log.telefon = (data.get("telefon") or "").strip() or None
|
||||
call_log.notiz = (data.get("notiz") or "").strip() or None
|
||||
call_log.wiedervorlage_datum = _parse_date(data.get("wiedervorlage_datum"))
|
||||
call_log.erledigt = bool(data.get("erledigt", False))
|
||||
_set_call_log_tags(call_log, data.get("tag_ids"))
|
||||
session.add(call_log)
|
||||
session.commit()
|
||||
@@ -234,7 +233,6 @@ def update_call_log(data: dict) -> CallLog:
|
||||
call_log.telefon = (data.get("telefon") or "").strip() or None
|
||||
call_log.notiz = (data.get("notiz") or "").strip() or None
|
||||
call_log.wiedervorlage_datum = _parse_date(data.get("wiedervorlage_datum"))
|
||||
call_log.erledigt = bool(data.get("erledigt", False))
|
||||
_set_call_log_tags(call_log, data.get("tag_ids"))
|
||||
session.commit()
|
||||
return call_log
|
||||
|
||||
@@ -366,6 +366,40 @@ def _db_V01_14():
|
||||
session.commit()
|
||||
|
||||
|
||||
def _db_V01_15():
|
||||
"""
|
||||
Entfernt die Spalte 'erledigt' aus der Tabelle 'call_logs'. Der
|
||||
Erledigt-Status einer Gesprächsnotiz ist redundante Information:
|
||||
Er ergibt sich dynamisch daraus, ob einer der zugeordneten Tags
|
||||
is_erledigend=True hat (Kontaktadresse.is_erledigt()). Das Feld
|
||||
wurde aus Modell und Client entfernt.
|
||||
|
||||
SQLite unterstützt DROP COLUMN ab Version 3.35; die Laufzeitumgebung
|
||||
liefert 3.40.1.
|
||||
|
||||
Idempotent: Bei Neuinstallation existiert die Spalte nicht mehr
|
||||
(create_all legt sie nicht mehr an) — der PRAGMA-Check überspringt
|
||||
das DROP COLUMN in diesem Fall.
|
||||
"""
|
||||
from sqlalchemy import text
|
||||
|
||||
result = session.execute(text("PRAGMA table_info(call_logs)"))
|
||||
spalten = {row[1] for row in result}
|
||||
if 'erledigt' in spalten:
|
||||
session.execute(text(
|
||||
"ALTER TABLE call_logs DROP COLUMN erledigt"
|
||||
))
|
||||
# Roh-SQL-Änderungen committen, BEVOR die Systeminfo aktualisiert wird
|
||||
# (dasselbe Muster wie _db_V01_08 bis _db_V01_14): Die DDL-Anweisung
|
||||
# läuft über die Default-Bind-Verbindung — SQLALCHEMY_DATABASE_URI
|
||||
# zeigt auf dieselbe Datei wie der appdb-Bind. Das ORM-Update der
|
||||
# Systeminfo läuft über die appdb-Bind-Verbindung; ohne dieses Commit
|
||||
# blockiert die offene Transaktion das UPDATE ('database is locked').
|
||||
session.commit()
|
||||
_updatesysteminfo('01.15')
|
||||
session.commit()
|
||||
|
||||
|
||||
def checkupdates():
|
||||
"""
|
||||
Ermittelt die aktuelle DB-Version aus der Systeminfo-Tabelle und führt alle
|
||||
|
||||
Reference in new issue
Block a user