import m from "mithril" /** * Datenmodell für eine Gesprächsnotiz (Call-Log). */ export interface iCallLog { id: number kundenName: string projektId: number projektName: string datum: string uhrzeitBeginn: string dauer: string betreff: string nameAnsprechpartner: string telefon: string notiz: string wiedervorlageDatum: string erledigt: boolean } /** * In-Memory-Datenspeicher für Gesprächsnotizen. Wird als Fallback solange * verwendet, bis die serverseitigen REST-Endpunkte verfügbar sind. */ export const callLogDaten: iCallLog[] = [ {id: 1, kundenName: "Musterfirma GmbH", projektId: 1, projektName: "Website-Relaunch", datum: "2024-01-20", uhrzeitBeginn: "09:30", dauer: "45", betreff: "Anforderungen klären", nameAnsprechpartner: "Herr Schmidt", telefon: "+49 123 45678", notiz: "Kunde möchte responsive Design und neue Farbgestaltung. Budget noch offen.", wiedervorlageDatum: "2024-01-27", erledigt: false}, {id: 2, kundenName: "Musterfirma GmbH", projektId: 1, projektName: "Website-Relaunch", datum: "2024-01-25", uhrzeitBeginn: "14:00", dauer: "30", betreff: "Feedback zum Design", nameAnsprechpartner: "Frau Müller", telefon: "+49 123 45679", notiz: "Design-Entwürfe wurden positiv aufgenommen. Kleine Änderungen an der Navigation nötig.", wiedervorlageDatum: "2024-02-01", erledigt: false}, {id: 3, kundenName: "Beispiel AG", projektId: 2, projektName: "E-Commerce Plattform", datum: "2024-02-10", uhrzeitBeginn: "10:00", dauer: "60", betreff: "Technische Anforderungen", nameAnsprechpartner: "Herr Weber", telefon: "+49 123 45680", notiz: "Payment-Gateway und Versand-Schnittstellen müssen integriert werden. Zeitplan besprochen.", wiedervorlageDatum: "2024-02-15", erledigt: true}, {id: 4, kundenName: "Beispiel AG", projektId: 3, projektName: "CRM-System", datum: "2024-02-18", uhrzeitBeginn: "11:15", dauer: "20", betreff: "Schulungstermin", nameAnsprechpartner: "Frau Bauer", telefon: "+49 123 45681", notiz: "Schulung für 10 Mitarbeiter geplant. Raum noch zu buchen.", wiedervorlageDatum: "2024-02-20", erledigt: false}, {id: 5, kundenName: "Test Unternehmen", projektId: 4, projektName: "Mobile App", datum: "2024-03-05", uhrzeitBeginn: "15:45", dauer: "35", betreff: "Feature-Request", nameAnsprechpartner: "Herr König", telefon: "+49 123 45682", notiz: "Kunde wünscht Push-Benachrichtigungen und Offline-Modus.", wiedervorlageDatum: "2024-03-12", erledigt: false} ] /** * Liefert die nächste freie Call-Log-ID auf Basis des In-Memory-Speichers. * Sobald die serverseitige ID-Vergabe verfügbar ist, entfällt diese Funktion. */ export function getNewCallLogId(): number { if (callLogDaten.length === 0) { return 1 } return Math.max(...callLogDaten.map((log: iCallLog) => log.id)) + 1 } /** * Fügt eine neue Gesprächsnotiz dem In-Memory-Speicher hinzu. */ export function addCallLogData(log: iCallLog): void { callLogDaten.push(log) } /** * Aktualisiert eine bestehende Gesprächsnotiz im In-Memory-Speicher. */ export function updateCallLogData(log: iCallLog): void { const index = callLogDaten.findIndex((l: iCallLog) => l.id === log.id) if (index !== -1) { callLogDaten[index] = log } } /** * Liefert eine Kopie aller Gesprächsnotizen aus dem In-Memory-Speicher. */ export function getCallLogs(): iCallLog[] { return [...callLogDaten] } /** * Liefert die Gesprächsnotizen eines bestimmten Projekts. Ist projektId null, * werden alle Gesprächsnotizen zurückgegeben. */ export function getCallLogsByProjektId(projektId: number | null): iCallLog[] { return projektId ? callLogDaten.filter((l: iCallLog) => l.projektId === projektId) : [...callLogDaten] } /* ------------------------------------------------------------------ */ /* REST-API-Aufrufe (Client-Seite) */ /* ------------------------------------------------------------------ */ /* Die folgenden Funktionen kapseln die Kommunikation mit den */ /* serverseitigen REST-Endpunkten. Die Endpunkte sind noch nicht */ /* implementiert und werden später nachgereicht. */ /* ------------------------------------------------------------------ */ /** * Basis-Pfad der Call-Log-REST-Endpunkte. */ const CALLLOG_REST_BASE = "/xhr/calllog" /** * Lädt die Liste der Gesprächsnotizen vom Server. */ export function fetchCallLogs(): Promise { return m.request({ method: "GET", url: CALLLOG_REST_BASE + "/list" }).then((result) => result as iCallLog[]) } /** * Lädt eine einzelne Gesprächsnotiz anhand ihrer ID vom Server. */ export function fetchCallLogById(id: number): Promise { return m.request({ method: "GET", url: CALLLOG_REST_BASE + "/get", params: {id: id} }).then((result) => result as iCallLog) } /** * Legt eine neue Gesprächsnotiz serverseitig an. */ export function createCallLogREST(log: iCallLog): Promise { return m.request({ method: "POST", url: CALLLOG_REST_BASE + "/create", body: log }).then((result) => result as iCallLog) } /** * Aktualisiert eine bestehende Gesprächsnotiz serverseitig. */ export function updateCallLogREST(log: iCallLog): Promise { return m.request({ method: "PUT", url: CALLLOG_REST_BASE + "/update", body: log }).then((result) => result as iCallLog) } /** * Löscht eine Gesprächsnotiz serverseitig anhand ihrer ID. */ export function deleteCallLogREST(id: number): Promise { return m.request({ method: "DELETE", url: CALLLOG_REST_BASE + "/delete", params: {id: id} }).then(() => undefined) }