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:
gg committed 2026-09-27 10:18:09 +02:00
1 parent 929664453e
commit 6e3cc7375d
9 files changed
+287 -122

No files matched your search

+2 -9
View File
@@ -52,7 +52,6 @@ export const call_log_liste: m.ClosureComponent = (vnode) => {
telefon: "",
notiz: "",
wiedervorlage_datum: "",
erledigt: false,
from_liste: "1"
}
if (filterProjektId !== null) {
@@ -105,7 +104,6 @@ export const call_log_liste: m.ClosureComponent = (vnode) => {
m("span", log.dauer + " min"),
m("span", log.betreff, ...tagBadges),
m("span", log.wiedervorlage_datum),
m("span", log.erledigt ? "Erledigt" : "Offen"),
m("button.w3-button.w3-small", {title: "Gesprächsnotiz bearbeiten", style: {padding: '0 2px'}, onclick: (e: Event) => editCallLog(log, e)}, m("i.material-icons", "edit"))
]
}
@@ -200,7 +198,6 @@ export const Call_Log: m.ClosureComponent = (vnode) => {
telefon: string
notiz: string
wiedervorlage_datum: string
erledigt: boolean
} = {
id: -1,
projekt_id: -1,
@@ -214,8 +211,7 @@ export const Call_Log: m.ClosureComponent = (vnode) => {
name_ansprechpartner: "",
telefon: "",
notiz: "",
wiedervorlage_datum: "",
erledigt: false
wiedervorlage_datum: ""
}
// Ist das Projekt voreingestellt (Liste wurde projektgefiltert)?
let projektVoreingestellt: boolean = false
@@ -312,7 +308,6 @@ export const Call_Log: m.ClosureComponent = (vnode) => {
currentLog.telefon = routeParams && routeParams.telefon ? routeParams.telefon : ""
currentLog.notiz = routeParams && routeParams.notiz ? routeParams.notiz : ""
currentLog.wiedervorlage_datum = routeParams && routeParams.wiedervorlage_datum ? routeParams.wiedervorlage_datum : ""
currentLog.erledigt = routeParams && (routeParams.erledigt === true || routeParams.erledigt === "true")
// Kontaktadresse-ID aus den Route-Params übernehmen, wenn die
// Maske aus der Kontaktadressenliste geöffnet wurde.
currentLog.kontaktadresse_id = routeParams && routeParams.kontaktadresse_id ? parseInt(routeParams.kontaktadresse_id) : -1
@@ -391,7 +386,6 @@ export const Call_Log: m.ClosureComponent = (vnode) => {
telefon: (formData.get("telefon") as string) || "",
notiz: (formData.get("notiz") as string) || "",
wiedervorlage_datum: currentLog.wiedervorlage_datum || "",
erledigt: formData.get("erledigt") === "on",
tag_ids: formData.getAll("tag_ids").map((v) => parseInt(v as string)).filter((n) => !isNaN(n))
}
if (currentLog.id === -1) {
@@ -540,8 +534,7 @@ export const Call_Log: m.ClosureComponent = (vnode) => {
currentLog.wiedervorlage_datum = (e.target as HTMLInputElement).value
guard.markDirty()
}
} as iInput)),
m("label", m(Input, {name: "erledigt", type: "checkbox", value: currentLog.erledigt} as iInput), "Erledigt")
} as iInput))
])
)
)