Bestellschein aus Materialschein: Titel = Kundenname, Baustelle in der Notiz
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
64e7239dc7
commit
98df3ec80a
@@ -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<ScheinKopf, 'titel' | 'auftraggeber'>) => kopf.auftraggeber.trim() || kopf.titel.trim();
|
||||
|
||||
export async function bestellscheinFuerKopf(kopf: ScheinKopf): Promise<Projekt> {
|
||||
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<ScheinKopf, 'titel' | 'auftraggeber'>): Promise<Projekt | undefined> {
|
||||
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)));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user