fix: MT-DP-06 Reihenfolge Duplikat-Check vor Status-Check

main
Andreas Ivanovic 2026-06-28 18:20:10 +02:00
parent b04757f9db
commit 51619ceb8f
1 changed files with 8 additions and 6 deletions

View File

@ -113,18 +113,20 @@ public class DokumentServiceImpl implements DokumentService {
public Auftragsbestaetigung erstelleAuftragsbestaetigung(String angebotsNummer) { public Auftragsbestaetigung erstelleAuftragsbestaetigung(String angebotsNummer) {
Angebot angebot = ladeAngebot(angebotsNummer); Angebot angebot = ladeAngebot(angebotsNummer);
// Status-Prüfung (PH-DP-04) // Duplikat-Check zuerst (PH-DP-05 / MT-DP-06): wenn bereits eine AB existiert,
// ist das Angebot zwangsläufig UEBERFUEHRT und beide Prüfungen würden anschlagen.
// Die Spec verlangt in diesem Szenario explizit DuplicateDocumentException.
if (repository.existsFolgedokument(angebotsNummer)) {
throw new DuplicateDocumentException(angebotsNummer);
}
// Allgemeiner Status-Check (PH-DP-04): greift bei anderen Nicht-OFFEN-Zuständen.
if (angebot.getStatus() != DokumentStatus.OFFEN) { if (angebot.getStatus() != DokumentStatus.OFFEN) {
throw new IllegalStateException( throw new IllegalStateException(
"Angebot " + angebotsNummer + " ist nicht mehr OFFEN (Status: " + "Angebot " + angebotsNummer + " ist nicht mehr OFFEN (Status: " +
angebot.getStatus() + "). Auftragsbestätigung kann nicht erzeugt werden."); angebot.getStatus() + "). Auftragsbestätigung kann nicht erzeugt werden.");
} }
// Doppelte AB verhindern (PH-DP-05)
if (repository.existsFolgedokument(angebotsNummer)) {
throw new DuplicateDocumentException(angebotsNummer);
}
// AB erzeugen Positionen 1:1 übernehmen // AB erzeugen Positionen 1:1 übernehmen
Auftragsbestaetigung ab = new Auftragsbestaetigung(); Auftragsbestaetigung ab = new Auftragsbestaetigung();
ab.setDokumentNummer(abGenerator.naechsteNummer()); ab.setDokumentNummer(abGenerator.naechsteNummer());