Files
tickte-system/src/lib/worksheetFlow.js
T
2026-10-16 13:28:20 +00:00

52 lines
2.3 KiB
JavaScript

/* Folgen eines neuen Arbeitsblatts.
Kennt kein Appwrite: die Seite reicht die Schreibzugriffe herein. */
import { kundenartGesetzt } from './kundenFelder'
export const KUNDENART_ZUGESAGT_HINWEIS =
'Das Arbeitsblatt ist gespeichert, der Lead wurde aber noch nicht zum festen Kunden gemacht: Die Kundenart fehlt. Lege sie beim Kunden unter „Rechnungsdaten“ fest und wähle dann „Zum festen Kunden machen“.'
// Akquise-Automatik: das Ergebnis im Arbeitsblatt steuert den Kundenstatus.
// "customer" = Zugesagt, "lost" = Abgesagt, sonst keine Aenderung.
export function acquisitionOutcome(ticket, newStatus) {
if (ticket?.type !== 'Akquise' || !ticket.customerId) return null
if (newStatus === 'Zugesagt') return 'customer'
if (newStatus === 'Abgesagt') return 'lost'
return null
}
// Ist die Kundenart des Kunden gesetzt? Fail-closed: nicht ladbar, null oder ohne getCustomer heisst "nicht gesetzt".
async function kundenartDesKunden(getCustomer, customerId) {
try {
const doc = await getCustomer?.(customerId)
return kundenartGesetzt(doc?.kundenart)
} catch {
return false
}
}
/* 1. Arbeitsblatt anlegen. 2. Bei Erfolg den Ticket-Status nachziehen, wenn er abweicht.
3. Bei Akquise-Tickets den Kundenstatus setzen (Fehler werden verschluckt). "Zugesagt" stuft den Lead nur hoch,
wenn seine Kundenart gesetzt ist; sonst bleiben Blatt und Ticketstatus, der Lead bleibt Lead und das Ergebnis traegt
einen Hinweis. Rueckgabe ist das Ergebnis von createWorksheet (ggf. mit hinweis). */
export async function createWorksheetFlow({ ticket, worksheetData, user, createWorksheet, updateTicket, updateCustomer, getCustomer, now = () => new Date() }) {
const result = await createWorksheet(worksheetData, user)
if (!result?.success) return result
const newStatus = worksheetData?.newStatus
if (newStatus !== ticket.status) {
await updateTicket(ticket.$id, { status: newStatus })
}
const customerStatus = acquisitionOutcome(ticket, newStatus)
if (customerStatus === 'customer' && !(await kundenartDesKunden(getCustomer, ticket.customerId))) {
return { ...result, hinweis: KUNDENART_ZUGESAGT_HINWEIS }
}
if (customerStatus) {
try {
await updateCustomer(ticket.customerId, { customerStatus, updatedAt: now().toISOString() })
} catch { /* nicht kritisch */ }
}
return result
}