浏览代码

fixing styling of admin config checkboxes, adding docs for order process

Medowar 3 周之前
父节点
当前提交
62e136fce3
共有 3 个文件被更改,包括 95 次插入2 次删除
  1. 2 2
      admin/settings.php
  2. 17 0
      assets/css/style.css
  3. 76 0
      docs/ORDER_PROCESS.md

+ 2 - 2
admin/settings.php

@@ -70,7 +70,7 @@ include __DIR__ . "/../includes/header.php";
         </div>
 
         <div class="form-group">
-            <label>
+            <label class="checkbox-label">
                 <input type="checkbox" name="order_confirmation_required" value="1" <?php echo !empty(
                     $settings["order_confirmation_required"]
                 )
@@ -88,7 +88,7 @@ include __DIR__ . "/../includes/header.php";
         </div>
 
         <div class="form-group">
-            <label>
+            <label class="checkbox-label">
                 <input type="checkbox" name="attach_order_pdf_to_admin_email" value="1" <?php echo !empty(
                     $settings["attach_order_pdf_to_admin_email"]
                 )

+ 17 - 0
assets/css/style.css

@@ -307,6 +307,23 @@ code {
     color: var(--brand-text);
 }
 
+.form-group input[type="checkbox"] {
+    width: auto;
+    padding: 0;
+    border: 0;
+    border-radius: 0;
+    background: transparent;
+    margin: 0.15rem 0 0;
+    flex-shrink: 0;
+}
+
+.form-group label.checkbox-label {
+    display: flex;
+    align-items: flex-start;
+    gap: 0.55rem;
+    margin-bottom: 0;
+}
+
 ::placeholder {
     color: var(--brand-muted);
 }

+ 76 - 0
docs/ORDER_PROCESS.md

@@ -0,0 +1,76 @@
+# 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.