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, Backups, Updater und — nur für das Konto admin — Lokale Konfiguration. Kategorien, FAQ und Organisationen haben keine eigenen Seiten mehr.
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.