feat(agrarmonitor): fehlende Lieferantennummern vergeben
Build and Push Multi-Platform Images / build-and-push (push) Successful in 1m1s

Neuer Bereich „Lieferantennummern überprüfen“ in den Agrarmonitor-
Einstellungen. Er vergibt allen aktiven Lieferanten ohne
Lieferantennummer eine fortlaufende Nummer im Schema 1555xxxx, ab der
höchsten vergebenen Nummer (Inaktive zählen mit, Altlasten werden
ignoriert).

- Vorschau „Lieferant → neue Nummer“, geschrieben wird erst nach
  Bestätigung; Einzelmodus zum Testen an einem Lieferanten
- formData wird wie in der Weboberfläche aus #form_detail aufgebaut,
  nur die Lieferantennummer ändert sich
- Dublettencheck über vorhanden.php, Erfolgskontrolle durch Neuladen
  des Details, Abbruch beim ersten Fehler
- Lauf im Hintergrund mit Status-Abfrage (wegen Proxy-Timeouts),
  Listenfilter werden danach zurückgesetzt
- HTML-Parsing mit cheerio, Unit-Tests für Parser und Vergabe-Ablauf

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bjoernpoettkerandClaude Opus 5.5 committed 2026-09-28 08:51:13 +02:00
1 parent 029009182a
commit 3d4125b29a
11 files changed
+1507 -3

No files matched your search

+54
View File
@@ -258,6 +258,46 @@ export interface SyncCorrespondentsResult {
conflicts: SyncConflict[];
}
export interface LieferantennummerKandidat {
kundeId: number;
name: string;
neueNummer: string;
}
export interface LieferantennummerVorschau {
maximum: number;
naechsteNummer: number;
kandidaten: LieferantennummerKandidat[];
}
export type LieferantennummerEintragStatus = 'vergeben' | 'uebersprungen' | 'pruefen' | 'fehler';
export interface LieferantennummerEintrag {
kundeId: number;
name: string;
status: LieferantennummerEintragStatus;
nummer?: string;
hinweis?: string;
}
export interface LieferantennummerLaufErgebnis {
modus: 'alle' | 'einzeln';
gestartetAm: string;
beendetAm: string | null;
gesamt: number;
vergeben: number;
uebersprungen: number;
zuPruefen: number;
fehler: number;
abgebrochen: boolean;
eintraege: LieferantennummerEintrag[];
}
export interface LieferantennummerStatus {
aktiv: boolean;
lauf: LieferantennummerLaufErgebnis | null;
}
export const agrarmonitorApi = {
getStatus: () =>
api.get<AgrarmonitorStatusData>('/api/agrarmonitor/status').then((r) => r.data),
@@ -277,4 +317,18 @@ export const agrarmonitorApi = {
api.post<SyncCorrespondentsResult>('/api/agrarmonitor/sync-correspondents').then((r) => r.data),
mergeCorrespondents: (keepId: number, deleteId: number) =>
api.post<{ mergedDocuments: number }>('/api/agrarmonitor/merge-correspondents', { keepId, deleteId }).then((r) => r.data),
getLieferantennummernStatus: () =>
api.get<LieferantennummerStatus>('/api/agrarmonitor/lieferantennummern/status').then((r) => r.data),
lieferantennummernVorschau: () =>
api
.post<LieferantennummerVorschau>('/api/agrarmonitor/lieferantennummern/vorschau', {}, { timeout: 120_000 })
.then((r) => r.data),
lieferantennummernVergeben: (startNummer: number, nurKundeId?: number) =>
api
.post<LieferantennummerStatus>(
'/api/agrarmonitor/lieferantennummern/vergeben',
{ startNummer, nurKundeId },
{ timeout: 120_000 },
)
.then((r) => r.data),
};