Call_Log: Ansprechpartner als Select aus Kontaktadressen des Projekts

Im Call-Log-Formular wird "Name Ansprechpartner" durch ein Select ersetzt,
das die Kontaktadressen des gewählten Projekts anbietet, sofern der Name nicht
bereits voreingestellt ist (z. B. aus der Kontaktadressenliste). Bei Auswahl
einer Kontaktadresse werden Name und Telefon automatisch übernommen. Bei
Projektwechsel werden Ansprechpartner und Telefon zurückgesetzt.

Kontaktadressenliste: add_call-Button pro Zeile, der eine Gesprächsnotiz mit
den ForeignKeys aus der Kontaktadresse (projektId, kundenName, name, telefon)
anlegt.

AGENTS.md: Vorgabe ergänzt — Farben priorisiert aus app-theme.css.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
gg committed 2026-09-01 18:21:28 +02:00
1 parent ad24981a0b
commit a8838a1a38
3 files changed
+71 -4

No files matched your search

+29 -2
View File
@@ -4,7 +4,7 @@ import { Input, iInput, Textarea, iTextarea} from "./widgets/inputs"
import {Select, iSelect, iSelectOption} from "./widgets/select"
import {Treenode, iTreenode, Treetable, iTreetable, TopbarButton, iTopbarButton} from "./widgets/Treetable_V2"
import {iKontaktadresse, getKontaktadressenByProjektId, getNewKontaktadresseId, addKontaktadresse, updateKontaktadresse} from "../models/kontaktadresse"
import {iProjekt, getProjekte} from "../models/projekt"
import {iProjekt, getProjekte, getProjektById} from "../models/projekt"
function createKontaktadresseTreenodes(projektId: number | null = null): iTreenode[] {
let filteredKontaktadressen = getKontaktadressenByProjektId(projektId)
@@ -67,6 +67,30 @@ export const kontaktadresseliste: m.ClosureComponent = (vnode) => {
})
}
const addCallLog = (kontaktadresse: iKontaktadresse, e: Event) => {
e.stopPropagation()
const now = new Date()
const datum = now.toISOString().split('T')[0]
const uhrzeit = now.toTimeString().split(':')[0] + ':' + now.toTimeString().split(':')[1]
// Kundennamen über das Projekt auflösen.
const projekt = getProjektById(kontaktadresse.projektId)
m.route.set("/call_log", {
id: -1,
kundenName: projekt ? projekt.kundenName : "",
projektId: kontaktadresse.projektId,
projektName: kontaktadresse.projektName,
datum: datum,
uhrzeitBeginn: uhrzeit,
dauer: "",
betreff: "",
nameAnsprechpartner: kontaktadresse.name,
telefon: kontaktadresse.telefon,
notiz: "",
wiedervorlageDatum: "",
erledigt: false
})
}
const columnmapper: (node: iTreenode) => any[] = (node: iTreenode) => {
let kontaktadresse: iKontaktadresse = node.nodevalue
@@ -77,7 +101,10 @@ export const kontaktadresseliste: m.ClosureComponent = (vnode) => {
m("span", kontaktadresse.email),
m("span", kontaktadresse.ort),
m("span", kontaktadresse.projektName),
m("button.w3-button.w3-small", {style: {padding: '0 2px'}, onclick: (e: Event) => editKontaktadresse(kontaktadresse, e)}, m("i.material-icons", "edit"))
m("div", {style: {display: 'flex', gap: '0', 'white-space': 'nowrap'}},
m("button.w3-button.w3-small", {style: {padding: '0 2px'}, onclick: (e: Event) => editKontaktadresse(kontaktadresse, e)}, m("i.material-icons", "edit")),
m("button.w3-button.w3-small", {title: "Gesprächsnotiz hinzufügen", style: {padding: '0 2px'}, onclick: (e: Event) => addCallLog(kontaktadresse, e)}, m("i.material-icons", "add_call"))
)
]
}