/** * Nummernvergabe der Auftragsbestätigungen: AB-JJJJ-NNNN, lückenlos je Berliner Kalenderjahr (Übersicht V4, L3). * vergibNummer schreibt nichts und sperrt nicht selbst: der Aufrufer hält SPERRE_NUMMER (konstanten.js), und die Nummer * ist erst mit dem Speichern der AB vergeben. Eine Nummer, die schon in Gebrauch ist, wird übersprungen. */ import { berlinDate } from '../finance/dates.js' import { findAuftragByNummer, listAuftraege } from './auftragStore.js' export function formatNummer(jahr, laufnummer) { if (!Number.isInteger(jahr) || jahr < 2000 || jahr > 9999 || !Number.isInteger(laufnummer) || laufnummer < 1 || laufnummer > 9999) { throw new RangeError('Ungültige Auftragsnummer.') } return `AB-${jahr}-${String(laufnummer).padStart(4, '0')}` } export async function vergibNummer(jetzt = new Date()) { const jahr = Number(berlinDate(jetzt).slice(0, 4)) const vorhandene = await listAuftraege({ jahr }) let laufnummer = vorhandene.reduce((groesste, a) => Math.max(groesste, Number.isSafeInteger(a.laufnummer) ? a.laufnummer : 0), 0) + 1 while (await findAuftragByNummer(formatNummer(jahr, laufnummer))) laufnummer += 1 return { nummer: formatNummer(jahr, laufnummer), jahr, laufnummer } }