Migrationen 003–009, Kundaufträge mit Lieferschein, Abräumen mit Urteil, ntfy/Backup/Zeitfenster, Live-Stream und Mobile-Mehr-Menü.
64 lines
2.3 KiB
SQL
64 lines
2.3 KiB
SQL
CREATE TABLE IF NOT EXISTS customers (
|
|
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
name text NOT NULL,
|
|
email text NOT NULL DEFAULT '',
|
|
notes text NOT NULL DEFAULT '',
|
|
created_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS orders (
|
|
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
customer_id bigint REFERENCES customers (id) ON DELETE SET NULL,
|
|
title text NOT NULL,
|
|
status text NOT NULL DEFAULT 'idee',
|
|
due_at date,
|
|
notes text NOT NULL DEFAULT '',
|
|
quote jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS order_items (
|
|
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
order_id bigint NOT NULL REFERENCES orders (id) ON DELETE CASCADE,
|
|
file_id bigint REFERENCES files (id) ON DELETE SET NULL,
|
|
qty int NOT NULL DEFAULT 1,
|
|
unit_price double precision NOT NULL DEFAULT 0,
|
|
material_type text NOT NULL DEFAULT '',
|
|
color text NOT NULL DEFAULT '',
|
|
done_ok int NOT NULL DEFAULT 0,
|
|
done_bad int NOT NULL DEFAULT 0,
|
|
note text NOT NULL DEFAULT ''
|
|
);
|
|
|
|
ALTER TABLE print_queue ADD COLUMN IF NOT EXISTS order_item_id bigint REFERENCES order_items (id) ON DELETE SET NULL;
|
|
ALTER TABLE runs ADD COLUMN IF NOT EXISTS order_item_id bigint REFERENCES order_items (id) ON DELETE SET NULL;
|
|
|
|
INSERT INTO orders (title, status, notes, quote, created_at)
|
|
SELECT
|
|
p.name,
|
|
CASE p.status
|
|
WHEN 'bereit' THEN 'angebot'
|
|
WHEN 'druckt' THEN 'druckt'
|
|
WHEN 'fertig' THEN 'fertig'
|
|
ELSE 'idee'
|
|
END,
|
|
p.notes,
|
|
p.quote,
|
|
p.created_at
|
|
FROM projects p
|
|
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.title = p.name AND o.created_at = p.created_at);
|
|
|
|
INSERT INTO orders (title, status, notes, created_at)
|
|
SELECT
|
|
i.title,
|
|
CASE i.status WHEN 'erledigt' THEN 'fertig' ELSE 'idee' END,
|
|
i.body,
|
|
i.created_at
|
|
FROM ideas i
|
|
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.title = i.title AND o.created_at = i.created_at);
|
|
|
|
CREATE INDEX IF NOT EXISTS orders_status ON orders (status, updated_at DESC);
|
|
CREATE INDEX IF NOT EXISTS order_items_order ON order_items (order_id);
|
|
CREATE INDEX IF NOT EXISTS runs_order_item ON runs (order_item_id) WHERE order_item_id IS NOT NULL;
|