Dieses Dokument beschreibt die Geschäftslogik der Bestellverwaltung im Admin-Bereich. Es richtet sich an Operatoren, die Bestellungen im Alltag bearbeiten: Welche Status es gibt, was sie bedeuten, wo Bestellungen und Positionen angezeigt werden, und welche Aktionen wo möglich sind.
Technische Details zum Kundenprozess (Checkout) stehen in ORDER_PROCESS.md. Login und Admin-Konten: ADMIN_SYSTEM.md.
Fünf Seiten sind für die Bestellbearbeitung relevant:
| Seite | Datei | Rolle für Operatoren |
|---|---|---|
| Dashboard | admin/index.php |
Tagesübersicht, offene Arbeit, Statistik |
| Bestellliste | admin/orders.php |
Suchen, filtern, alle Bestellungen finden |
| Bestelldetail | admin/order.php |
Positionen bearbeiten, stornieren |
| Nachbestellungen | admin/backorders.php |
Externe Bestellung und Lieferung verwalten |
| Namensschilder | admin/nametags.php |
Sammelübersicht aller Namensschild-Positionen |
Weitere Admin-Seiten (Produkte, Einstellungen, Admins) haben keinen Bezug zu Bestellstatus oder -anzeige. Kategorien, FAQ und Organisationen werden als Abschnitte innerhalb von Einstellungen (admin/settings.php) gepflegt.
Eine Bestellung hat keinen einzelnen Status, sondern mehrere Felder, die unabhängig voneinander wirken:
flowchart TB
subgraph orderLevel [Bestellung]
opStatus["status"]
end
subgraph lineLevel [Position]
backorder["backorder_status"]
processed["is_processed"]
end
backorder --> processed
status): Wie weit ist die Abarbeitung insgesamt? Wird automatisch aus den Positionen berechnet (open, partial, processed) oder manuell gesetzt (cancelled).backorder_status): Liegt der Artikel auf Lager oder muss extern nachbestellt werden?is_processed): Wurde diese Position ausgegeben/abarbeitet?In Tabellen und Listen erscheint ein Anzeige-Label (z. B. „Offen" oder „Teilweise bearbeitet"). Die Nachbestellung wird auf Positionsebene geführt und erscheint zusätzlich als Badge „Nachbestellung" auf der Detailseite, wenn mindestens eine Position einen Nachbestell-Status hat.
Das sichtbare Label folgt einer festen Priorität. Höhere Priorität überschreibt niedrigere:
| Anzeige-Label | Bedingung | Bedeutung für Operatoren |
|---|---|---|
| Storniert | Bestellung storniert | Bestellung ist ungültig; nur „Stornierung aufheben" möglich |
| Bearbeitet | Alle Positionen bearbeitet | Bestellung abgeschlossen |
| Teilweise bearbeitet | Mindestens eine, nicht alle Positionen bearbeitet | Bestellung in Arbeit |
| Offen | Sonst | Noch keine Position bearbeitet |
Auf der Detailseite ist ggf. sichtbar: Zeitpunkt der internen Weiterleitung (admin_notified_at).
| Wert | Bedeutung | Wie gesetzt |
|---|---|---|
open |
Keine Position bearbeitet | Automatisch |
partial |
Einige Positionen bearbeitet | Automatisch |
processed |
Alle Positionen bearbeitet | Automatisch |
cancelled |
Bestellung storniert | Manuell durch Operator |
Stornierte Bestellungen werden nicht automatisch aus Positionen neu berechnet. Nach „Stornierung aufheben" wird der Status wieder aus den Positionen abgeleitet.
is_processed)backorder_status)| Wert | Anzeige-Label | Bedeutung |
|---|---|---|
| (leer) | — | Normale offene Position (Lager/Abgabe) |
to_be_backordered |
Nachzubestellen | Position muss extern nachbestellt werden |
ordered |
Wartet auf Lieferung | Extern bestellt, Lieferung steht aus |
Manuelle Nachbestellungen (data/manual_backorders.json): Gleicher Ablauf wie bei Bestellpositionen, aber ohne Kundenbestellung — nur auf der Seite Nachbestellungen sichtbar und verwaltbar.
admin/index.php)| Karte | Was gezählt wird |
|---|---|
| Offen | Bestellungen mit operativem Status open |
| Teilweise bearbeitet | status = partial |
| Bearbeitet | status = processed |
| Storniert | status = cancelled |
| Nachbestellung | Summe aller Positionen in to_be_backordered oder ordered (inkl. manueller Nachbestellungen) |
Eine Bestellung erscheint hier nur, wenn:
to_be_backordered / ordered).Bestellungen, bei denen alle offenen Positionen nur noch Nachbestell-Status haben, erscheinen nicht (Weiterbearbeitung über Nachbestellungen).
Spalte Nachbestellung: Zusammenfassung der Nachbestell-Status aller offenen Positionen (-, ein Status-Badge, oder Gemischt).
Sortierung: neueste zuerst.
Eine Position erscheint hier nur, wenn:
Positionen mit Nachzubestellen oder Wartet auf Lieferung erscheinen nur unter Nachbestellungen.
Sortierung: älteste zuerst (FIFO-Arbeitsliste).
Bulk-Aktionen für Nachbestellungen (als bestellt markieren, Lieferung eingetroffen) bleiben auf Nachbestellungen; das Dashboard dient der Übersicht und dem Sprung zur Bestelldetailseite.
admin/orders.php)Filter und Suchfeld (Bestellnummer):
| Filter | Was angezeigt wird |
|---|---|
| Alle | Alle Bestellungen |
| Offen | status = open |
| Teilweise bearbeitet | status = partial |
| Bearbeitet | status = processed |
| Storniert | status = cancelled |
Die Status-Spalte zeigt das Anzeige-Label aus dem operativen Bestellstatus.
admin/order.php)Jede Bestellung ist immer über die Bestellliste oder Dashboard-Links erreichbar — unabhängig vom Status.
| Aktion | Wann sichtbar / erlaubt |
|---|---|
| Als bearbeitet / offen markieren | Bestellung nicht storniert |
| Als Nachbestellung markieren / aufheben | Bestellung nicht storniert; nur Wechsel zwischen (leer) und Nachzubestellen — nicht von Wartet auf Lieferung |
| Bestellung stornieren | Nicht storniert; nicht vollständig Bearbeitet; löscht auf allen Positionen Nachbestell-Status und zugehörige Zeitstempel |
| Stornierung aufheben | Bestellung storniert |
Zusätzliches Badge „Nachbestellung", wenn mindestens eine Position einen Nachbestell-Status hat (nicht bei stornierten Bestellungen, sofern beim Stornieren zurückgesetzt).
Bearbeitet + Nachbestellung: „Als bearbeitet markieren" löscht den Nachbestell-Status der Position sowie backordered_at und ordered_at. Eine bearbeitete Position gilt als ausgeliefert und darf nicht länger in den Nachbestellungen hängen. Umgekehrt: Nachzubestellen kann nicht auf bereits bearbeitete Positionen gesetzt werden.
Bewusste Entscheidung (2026-08-02): Bis v1.3.14 blieb der Nachbestell-Status beim Bearbeiten erhalten, damit z. B. eine Retoure die Kundenbestellung abdecken konnte, während die Nachbestellung weiter auf Lieferantenware wartete. Dieser Fall wird nicht mehr unterstützt — die Kombination bearbeitet + Nachbestell-Status erzeugte Einträge in den Nachbestellungen, die von der Namensschilder-Seite aus nicht mehr auflösbar waren. Wer Lieferantenware ohne Kundenbezug nachverfolgen will, nutzt eine manuelle Nachbestellung.
Das Zurückschalten auf offen stellt den vorherigen Nachbestell-Status nicht wieder her; er muss neu gesetzt werden.
Positionen im Status Wartet auf Lieferung (ordered): Kein Nachbestell-Toggle auf der Detailseite — Weiterbearbeitung nur über Nachbestellungen („Lieferung eingetroffen").
admin/backorders.php)Positionen werden nach Produkt und Größe gruppiert. Spalten Nachzubestellen und Wartet auf Lieferung werden getrennt gezählt.
Kandidaten und Anzeige-Reihenfolge nutzen dieselbe Sortierung nach sort_at (u. a. backordered_at / ordered_at, sonst Bestelldatum).
| Aktion | Wirkung |
|---|---|
| Als bestellt markieren | Verschiebt N Positionen von Nachzubestellen → Wartet auf Lieferung |
| Lieferung eingetroffen | Setzt N Positionen von Wartet auf Lieferung → (leer); Position bleibt offen zur normalen Abarbeitung auf der Detailseite |
Manuelle Nachbestellungen können über ein Formular auf derselben Seite hinzugefügt werden.
admin/nametags.php)Seit v1.3.13 gibt es kein eigenes Datenmodell für Namensschilder mehr (das frühere data/nametags.json und die Konstante NAMETAGS_FILE sind entfallen). Namensschilder sind ganz normale Bestellpositionen; die Seite ist reine Sammelübersicht, damit Operatoren nicht jede Bestellung einzeln nach offenen Namensschildern durchsuchen müssen.
Erkennung: Eine Position gilt als Namensschild, wenn ihr product_name exakt dem Einstellungswert nametag_product_name entspricht (Standard: „Namensschild"). Der Personenname in der Tabelle ist der customer_name der Bestellung.
Die beiden Tabellen lesen denselben backorder_status wie die Nachbestellungen:
| Tabelle | Bedingung |
|---|---|
| Ausstehende Bestellungen | backorder_status ist (leer) oder Nachzubestellen |
| Bestellt, wartet auf Lieferung | backorder_status ist Wartet auf Lieferung |
Bearbeitete Positionen (is_processed) erscheinen in keiner der beiden Tabellen.
Diese drei Punkte sehen bei jedem frischen Lesen wie Fehler aus, sind aber geprüft und so gewollt (Stand 2026-08-02):
nametag_product_name mitzuziehen, verschwindet die gesamte Namensschild-Historie aus der Übersicht. Kein Wechsel auf product_id ohne Rücksprache.backorder_status. Der abschließende Schritt ist „Als bearbeitet markieren" — erst dann verschwindet die Position aus beiden Tabellen und aus den Nachbestellungen. Kein zusätzlicher Zwischenstatus („liegt zur Ausgabe bereit") ohne Rücksprache.Übersicht: Wo erscheint ein Zustand?
| Zustand / Bedingung | Dashboard-Statistik | Aktion erforderlich | Offene Positionen | Bestellliste-Filter | Bestelldetail | Nachbestellungen |
|---|---|---|---|---|---|---|
| Offen | Offen | Ja*, wenn offene Positionen ohne NB | Ja*, nur Positionen ohne NB | Offen, Alle | Ja, bearbeitbar | Ja, wenn NB markiert |
| Teilweise bearbeitet | Teilweise | Ja*, wenn offene Positionen ohne NB | Ja*, nur Positionen ohne NB | Teilweise, Alle | Ja, bearbeitbar | Ja, wenn NB markiert |
| Bearbeitet | Bearbeitet | — | — | Bearbeitet, Alle | Ja (nur Ansehen) | — (NB-Status wird beim Bearbeiten gelöscht) |
| Storniert | Storniert | — | — | Storniert, Alle | Ja (Stornierung aufheben) | — |
| Position Nachzubestellen | In NB-Statistik | Position ausgeblendet | Position ausgeblendet | Bestellung in Liste | Toggle auf Detail | Ja |
| Position Wartet auf Lieferung | In NB-Statistik | Position ausgeblendet | Position ausgeblendet | Bestellung in Liste | Kein Toggle auf Detail | Ja |
| Nur NB-Positionen, Bestellung operativ Offen | Offen | — (keine qualif. Position) | — | Alle, Offen | Ja | Ja |
| Manuelle Nachbestellung | In NB-Statistik | — | — | — | — | Ja |
NB = Nachbestell-Status. „Ja" = nur für unverarbeitete Positionen ohne Nachbestell-Status (Bestellungen: mindestens eine solche Position; Positionen: jede Zeile einzeln).
Zurück auf Bestelldetail → „Als bearbeitet markieren".
stateDiagram-v2
direction LR
state backorder {
none --> toBeBackordered: Detail markieren
toBeBackordered --> ordered: Nachbestellungen bestellt
ordered --> none: Lieferung eingetroffen
toBeBackordered --> none: Detail aufheben
ordered --> none: Als bearbeitet markieren
toBeBackordered --> none: Als bearbeitet markieren
}
Unter Einstellungen (admin/settings.php) im Abschnitt Allgemein:
Die Seite ist in Abschnitte gegliedert (in dieser Reihenfolge): Kategorien, FAQ, Organisationen, Allgemein, Update & Backup und — nur für das Konto admin — Lokale Konfiguration. Kategorien, FAQ und Organisationen haben keine eigenen Seiten mehr. Der Abschnitt Update & Backup zeigt nur den Status und verlinkt auf admin/manage.php; die Aktionen selbst liegen dort (siehe UPDATE_AND_BACKUP.md).
Die folgenden Punkte sind keine Bedienanleitung, sondern dokumentierte bewusste Einschränkungen. Sie wirken beim Lesen des Codes wie Fehler, sind aber geprüft und so gewollt — bitte nicht ohne Rücksprache „korrigieren".
Status „Wartet auf Lieferung" nicht auf Detailseite änderbar
Bewusste Trennung: Weiterführung nur über Nachbestellungen. Operatoren, die nur die Detailseite nutzen, finden keinen Button dafür.
Namensschilder erscheinen zusätzlich unter Nachbestellungen
Beide Seiten arbeiten bewusst auf demselben backorder_status. admin/nametags.php ist nur eine Sammelübersicht, kein eigenes Datenmodell.
„Lieferung eingetroffen" stellt ein Namensschild zurück in „Ausstehende Bestellungen"
Geliefert und nie bestellt teilen sich denselben leeren backorder_status. Abschließender Schritt ist „Als bearbeitet markieren". Kein zusätzlicher Zwischenstatus ohne Rücksprache.
Namensschilder werden über den Produktnamen erkannt, nicht über product_id
Akzeptierter Kompromiss. Ein Umbenennen des Katalogprodukts ohne Anpassung von nametag_product_name blendet die gesamte Historie aus.
„Als bearbeitet markieren" löscht den Nachbestell-Status unwiderruflich
Das Zurückschalten auf offen stellt ihn nicht wieder her. Siehe Abschnitt Bestelldetail.