CREATE TABLE quotes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trainer_id INTEGER NOT NULL REFERENCES trainers(id) ON DELETE CASCADE,
student_id INTEGER NOT NULL REFERENCES students(id) ON DELETE CASCADE,
title TEXT NOT NULL,
intro TEXT,
-- persönliche Anrede/Einleitung in Mail & Angebotsseite
lines TEXT NOT NULL DEFAULT '[]',
-- JSON: [{ label,
qty,
price_cents }]
total_cents INTEGER NOT NULL DEFAULT 0,
valid_until TEXT,
-- ISO-Datum; danach nicht mehr annehmbar
status TEXT NOT NULL DEFAULT 'draft'
CHECK(status IN ('draft','sent','accepted','declined','expired','cancelled')),
token TEXT UNIQUE,
-- öffentlicher Annahme-Link
auto_invoice INTEGER NOT NULL DEFAULT 1,
proposed_service_id INTEGER REFERENCES services(id) ON DELETE SET NULL,
proposed_starts_at TEXT,
-- optionaler Terminvorschlag
invoice_id INTEGER,
-- nach Annahme
booking_id INTEGER,
-- nach Annahme (wenn Terminvorschlag)
sent_at TEXT,
decided_at TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
)