diff --git a/client/src/lib/schein.ts b/client/src/lib/schein.ts index a10673c..977ed76 100644 --- a/client/src/lib/schein.ts +++ b/client/src/lib/schein.ts @@ -19,9 +19,10 @@ export function scheinInfo(typ: ScheinTyp): ScheinInfo { : { name: 'Materialschein', plural: 'Materialscheine', liste: 'Materialliste', druckTitel: 'Materialschein', betreff: 'Materialverbrauch', listBase: '/', detailBase: '/projekte' }; } -// Legt zu einem Materialschein einen leeren Bestellschein mit denselben Kopfdaten an -// (Projekt/Baustelle, Kunde, Auftrags-Nr., Datum, Monteur, Notiz). Beide Scheine sind danach -// unabhängig voneinander – Löschen geht nur im jeweiligen Reiter. +// Legt zu einem Materialschein einen leeren Bestellschein an. Titel des Bestellscheins ist der +// Kundenname (Auftraggeber; fehlt er, die Baustelle). Die Baustelle selbst steht in der Notiz, +// damit nichts verloren geht. Beide Scheine sind danach unabhängig voneinander – Löschen geht +// nur im jeweiligen Reiter. export interface ScheinKopf { titel: string; auftraggeber: string; @@ -33,12 +34,17 @@ export interface ScheinKopf { export const normName = (s: string) => s.trim().toLowerCase().replace(/\s+/g, ' '); +const bestellTitel = (kopf: Pick) => kopf.auftraggeber.trim() || kopf.titel.trim(); + export async function bestellscheinFuerKopf(kopf: ScheinKopf): Promise { - return api.projekte.create({ ...kopf, typ: 'Bestell' }); + const baustelle = kopf.auftraggeber.trim() && kopf.titel.trim() ? `Baustelle: ${kopf.titel.trim()}` : ''; + const notiz = [baustelle, kopf.notiz.trim()].filter(Boolean).join(' +'); + return api.projekte.create({ ...kopf, titel: bestellTitel(kopf), notiz, typ: 'Bestell' }); } -// Gibt es zu Projekt + Kunde schon einen Bestellschein? (Schutz vor versehentlichen Doppelten) +// Gibt es zu diesem Kunden schon einen Bestellschein? (Schutz vor versehentlichen Doppelten) export async function findeBestellschein(kopf: Pick): Promise { const alle = await api.projekte.list('Bestell'); - return alle.find(p => normName(p.titel) === normName(kopf.titel) && normName(p.auftraggeber ?? '') === normName(kopf.auftraggeber)); + return alle.find(p => normName(p.titel) === normName(bestellTitel(kopf))); } diff --git a/client/src/pages/ProjektDetail.tsx b/client/src/pages/ProjektDetail.tsx index 5907f91..ac7ccd5 100644 --- a/client/src/pages/ProjektDetail.tsx +++ b/client/src/pages/ProjektDetail.tsx @@ -92,7 +92,7 @@ export default function ProjektDetail({ typ }: { typ: ScheinTyp }) { setBestellBusy(true); try { const vorhanden = await findeBestellschein(kopf); - if (vorhanden && !confirm(`Es gibt bereits einen Bestellschein "${vorhanden.titel}"${vorhanden.auftraggeber ? ' (' + vorhanden.auftraggeber + ')' : ''}. Trotzdem einen weiteren anlegen?`)) { + if (vorhanden && !confirm(`Es gibt bereits einen Bestellschein "${vorhanden.titel}" für diesen Kunden. Trotzdem einen weiteren anlegen?`)) { navigate(`/bestellungen/${vorhanden.id}`); return; }