ORDER_PROCESS.md 3.7 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
  • 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.

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 und admin/backorders.php leiten auf die Bestellverwaltung um und sind kein eigener Prozess mehr.