ORDER_PROCESS.md 5.1 KB

Order Process

Überblick

Das System bildet keinen klassischen E-Commerce-Checkout ab, sondern einen internen PSA-Anforderungsprozess mit optionaler E-Mail-Bestätigung vor der internen Weiterleitung.

  • Einstieg: index.php -> product.php -> cart.php -> checkout.php
  • Persistenz: data/orders.json
  • Kernlogik: includes/functions.php
  • Interne Bearbeitung: admin/orders.php
  • Nachbestellungen: admin/backorders.php
  • Einstellungen für Bestätigung/Weiterleitung: admin/settings.php

Hinweis:

  • config.php liefert Startwerte, wirksam im Betrieb sind die normalisierten Einstellungen aus data/settings.json (über getSystemSettings()).

Ablauf (Endnutzer)

  1. Produkt wird in product.php in den Warenkorb gelegt (optional mit Größe).
  2. Der Warenkorb (cart.php) enthält pro Produkt nur einen Eintrag; erneutes Hinzufügen aktualisiert ggf. die Größe statt eine Menge zu erhöhen.
  3. Checkout (checkout.php) erfasst:
    • Name
    • E-Mail
    • Organisation (Pflicht, muss aktiv sein)
    • Kommentar (optional)
  4. createOrder(...) erzeugt eine Bestellnummer (ORDER_PREFIX-JAHR-LFDNR, z. B. FWFS-2026-001) und speichert die Bestellung.
  5. Nach dem Speichern wird der Warenkorb geleert und auf order-success.php weitergeleitet.

Potenzielle Freigaben / Bestätigungen

1) Organisation als Vorbedingung

Eine Bestellung ist nur möglich, wenn die gewählte Organisation existiert und als aktiv markiert ist. Inaktive/ungültige Organisationen blockieren den Abschluss.

2) Optionale E-Mail-Bestätigung durch Besteller

Die Einstellung order_confirmation_required steuert, ob eine Bestätigung nötig ist:

  • Aktiviert:
    • Status beim Anlegen: confirmation_status = pending
    • Es wird eine Bestätigungs-Mail mit Token-Link (order-confirm.php?token=...) versendet.
    • Interne Weiterleitung an die Empfängeradresse erfolgt erst nach erfolgreicher Bestätigung.
    • Frist über order_confirmation_expiry_days; danach confirmation_status = expired.
  • Deaktiviert:
    • Status beim Anlegen: confirmation_status = not_required
    • Bestellung wird direkt intern weitergeleitet.

3) Keine separate Admin-Freigabe vor Eingang

Es gibt keinen expliziten Admin-Approve-Schritt, der den Eingang einer Bestellung freischaltet. Die formale Freigabelogik ist die optionale E-Mail-Bestätigung durch den Besteller.

Interner Prozess nach Eingang

In admin/orders.php werden Bestellungen nach Status geführt und manuell bearbeitet:

  • open: keine Position bearbeitet
  • partial: mindestens eine Position bearbeitet
  • processed: alle Positionen bearbeitet
  • cancelled: Bestellung storniert
  • zusätzlich pending/expired über confirmation_status

Regeln:

  • Positionsbearbeitung ist gesperrt, solange Bestellung pending oder expired ist.
  • Stornierung ist jederzeit möglich (solange noch nicht storniert).
  • Zeitstempel für interne Weiterleitung (admin_notified_at) wird gesetzt, wenn die Admin-Benachrichtigungsmail erfolgreich versendet wurde.

Nachbestellungen (nur Admin)

Wenn Artikel nicht auf Lager sind, können Admins Positionen als Nachbestellung markieren. Der Vorgang ist nur im Admin-Bereich sichtbar, nicht im Frontend.

Daten pro Position

Jede Bestellposition kann optional folgende Felder haben:

  • backorder_status: "" (keine), to_be_backordered, ordered
  • backordered_at, ordered_at (Zeitstempel)

Zustände

  1. Nachzubestellen (to_be_backordered): Position ist als Nachbestellung markiert, externe Bestellung steht noch aus.
  2. Wartet auf Lieferung (ordered): Extern bestellt, Lieferung ausstehend.

Aktionen

Aktion Ort Wirkung
Als Nachbestellung markieren admin/orders.php (pro Position) Setzt to_be_backordered
Nachbestellung aufheben admin/orders.php Setzt backorder_status zurück auf "" (nur aus Zustand 1)
Als bestellt markieren admin/backorders.php Verschiebt N Positionen von to_be_backordered nach ordered (FIFO)
Lieferung eingetroffen admin/backorders.php Setzt N Positionen von ordered zurück auf "" (FIFO); Position bleibt offen zur normalen Abarbeitung

In admin/backorders.php werden Positionen nach Produkt und Größe gruppiert. Die Spalten Nachzubestellen und Wartet auf Lieferung werden getrennt gezählt, damit neu markierte Artikel nicht mit bereits bestellten vermischt werden.

Nachbestellte Positionen erscheinen weiterhin in Offene Positionen auf dem Dashboard, zusätzlich mit einem Nachbestell-Badge.

Abweichungen zum Standard-Webshop

  • Kein Payment-Schritt (kein Warenwert, keine Zahlungsarten, keine Zahlungsfreigabe).
  • Keine Mengenlogik im Warenkorb (pro Produkt nur ein Eintrag, keine Stückzahl).
  • Keine Lieferadresse / kein Versandprozess / kein Fulfillment-Tracking.
  • Keine Endnutzer-Bestellhistorie oder Kundenkonto-Workflow.
  • Optionaler Double-Opt-in-ähnlicher Schritt per E-Mail-Bestätigung vor interner Weiterleitung.
  • Bearbeitung ist positionsbasiert im Admin (operativer Abarbeitungsstatus statt klassischer Versandstatus).
  • Legacy-Routen reservation.php und orders.php (Frontend) sowie admin/reservations.php leiten auf die Bestellverwaltung um.