Files
PackControl/pirp/tools/migrate_recurring.sql

43 lines
1.7 KiB
SQL

-- Wiederkehrende Rechnungen (Abo-Rechnungen)
-- Migration ausführen mit: psql -U pirp_user -d pirp -f tools/migrate_recurring.sql
-- Abo-Vorlagen
CREATE TABLE IF NOT EXISTS recurring_templates (
id SERIAL PRIMARY KEY,
template_name VARCHAR(100) NOT NULL,
customer_id INTEGER NOT NULL REFERENCES customers(id) ON DELETE RESTRICT,
interval_type VARCHAR(20) NOT NULL CHECK (interval_type IN ('monthly', 'quarterly', 'yearly')),
start_date DATE NOT NULL,
end_date DATE,
next_due_date DATE NOT NULL,
vat_mode VARCHAR(10) NOT NULL DEFAULT 'klein',
vat_rate NUMERIC(5,2) NOT NULL DEFAULT 19.00,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
notes_internal TEXT,
created_at TIMESTAMPTZ DEFAULT now()
);
-- Positionen der Abo-Vorlage
CREATE TABLE IF NOT EXISTS recurring_template_items (
id SERIAL PRIMARY KEY,
template_id INTEGER NOT NULL REFERENCES recurring_templates(id) ON DELETE CASCADE,
position_no INTEGER NOT NULL,
description TEXT NOT NULL,
quantity NUMERIC(12,2) NOT NULL DEFAULT 1,
unit_price NUMERIC(12,2) NOT NULL DEFAULT 0
);
-- Log der generierten Rechnungen
CREATE TABLE IF NOT EXISTS recurring_log (
id SERIAL PRIMARY KEY,
template_id INTEGER NOT NULL REFERENCES recurring_templates(id) ON DELETE CASCADE,
invoice_id INTEGER REFERENCES invoices(id) ON DELETE SET NULL,
generated_at TIMESTAMPTZ DEFAULT now(),
due_date DATE NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'generated'
);
-- Indices
CREATE INDEX IF NOT EXISTS idx_recurring_next_due ON recurring_templates(next_due_date) WHERE is_active = TRUE;
CREATE INDEX IF NOT EXISTS idx_recurring_log_template ON recurring_log(template_id);