-- Migration 0003: echte PayPal-Zahlungsabwicklung + realistischer Status "zahlungOffen". -- -- Zwei Dinge ändern sich: -- 1. Neue Spalte "paypal_order_id" — speichert die echte, von PayPal bestätigte Bestell-ID als -- Zahlungsbeleg (siehe functions/api/paypal/capture-order.js). -- 2. Der Status-Wertebereich bekommt "zahlungOffen" dazu (für Überweisung/Vorkasse, bevor das -- Geld wirklich da ist) — vorher wurde JEDE Bestellung sofort als "bezahlt" markiert, auch -- wenn noch gar nichts überwiesen war. Das war in der Phase-1-Testphase okay, ist aber ein -- echtes Geschäftsrisiko (Ware könnte vor Zahlungseingang verschickt werden). -- -- SQLite kann CHECK-Constraints nicht per ALTER TABLE ändern — deshalb wird die Tabelle nach dem -- Standard-SQLite-Vorgehen neu aufgebaut: neue Tabelle mit korrektem Constraint anlegen, alle -- bestehenden Zeilen 1:1 rüberkopieren (bestehende "bezahlt"-Bestellungen bleiben "bezahlt" — -- die waren ja im alten Phase-1-System tatsächlich abgeschlossen), alte Tabelle löschen, neue -- umbenennen. PRAGMA foreign_keys=OFF; CREATE TABLE orders_new ( id INTEGER PRIMARY KEY AUTOINCREMENT, bestellnummer TEXT UNIQUE, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'zahlungOffen' CHECK (status IN ('zahlungOffen', 'bezahlt', 'bearbeitung', 'versandVorbereitet', 'versendet', 'abgeschlossen', 'storniert')), kunde_name TEXT NOT NULL, kunde_email TEXT NOT NULL, land TEXT NOT NULL CHECK (land IN ('de', 'at', 'ch', 'lu')), strasse TEXT, plz TEXT, ort TEXT, zahlungsart TEXT, tracking TEXT, gutschein_code TEXT, paypal_order_id TEXT, zwischensumme REAL NOT NULL DEFAULT 0, versandkosten REAL NOT NULL DEFAULT 0, rabatt_gesamt REAL NOT NULL DEFAULT 0, summe REAL NOT NULL DEFAULT 0, treuebonus_verwendet INTEGER NOT NULL DEFAULT 0, abo_rabatt_verwendet INTEGER NOT NULL DEFAULT 0 ); INSERT INTO orders_new ( id, bestellnummer, created_at, updated_at, status, kunde_name, kunde_email, land, strasse, plz, ort, zahlungsart, tracking, gutschein_code, paypal_order_id, zwischensumme, versandkosten, rabatt_gesamt, summe, treuebonus_verwendet, abo_rabatt_verwendet ) SELECT id, bestellnummer, created_at, updated_at, status, kunde_name, kunde_email, land, strasse, plz, ort, zahlungsart, tracking, gutschein_code, NULL, zwischensumme, versandkosten, rabatt_gesamt, summe, treuebonus_verwendet, abo_rabatt_verwendet FROM orders; DROP TABLE orders; ALTER TABLE orders_new RENAME TO orders; CREATE INDEX IF NOT EXISTS idx_orders_status ON orders(status); CREATE INDEX IF NOT EXISTS idx_orders_land ON orders(land); CREATE INDEX IF NOT EXISTS idx_orders_created_at ON orders(created_at); CREATE INDEX IF NOT EXISTS idx_orders_gutschein_email ON orders(gutschein_code, kunde_email); PRAGMA foreign_keys=ON;