23 lines
1.2 KiB
JavaScript
23 lines
1.2 KiB
JavaScript
/**
|
|
* 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 }
|
|
}
|