Rechnungsmodul: Entwurf/Ausstellen/Bezahlt/Storno, PDF, Firmenstammdaten
This commit is contained in:
parent
012f0aa0db
commit
43dc5bc827
18 changed files with 783 additions and 3 deletions
54
migrations/016_invoices.sql
Normal file
54
migrations/016_invoices.sql
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
-- Rechnungen: Entwurf ist frei änderbar, ab "Ausstellen" unveränderlich (nur per Storno korrigierbar,
|
||||
-- niemals nachträglich bearbeitet oder gelöscht – siehe docs/rechnungen.md).
|
||||
CREATE TABLE company_settings (
|
||||
id TINYINT PRIMARY KEY DEFAULT 1,
|
||||
name VARCHAR(200) NULL, street VARCHAR(200) NULL, zip VARCHAR(20) NULL, city VARCHAR(100) NULL, country CHAR(2) NULL DEFAULT 'DE',
|
||||
tax_number VARCHAR(50) NULL, -- Steuernummer
|
||||
vat_id VARCHAR(30) NULL, -- USt-IdNr.
|
||||
bank_name VARCHAR(150) NULL, iban VARCHAR(34) NULL, bic VARCHAR(11) NULL,
|
||||
invoice_prefix VARCHAR(10) NOT NULL DEFAULT 'RE',
|
||||
default_due_days INT NOT NULL DEFAULT 14,
|
||||
payment_methods JSON NOT NULL DEFAULT (JSON_ARRAY('Überweisung')),
|
||||
footer_text VARCHAR(500) NULL,
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
INSERT INTO company_settings (id) VALUES (1);
|
||||
INSERT INTO number_sequences (name, next_value) VALUES ('invoice', 1000) ON DUPLICATE KEY UPDATE name = name;
|
||||
|
||||
CREATE TABLE invoices (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
number VARCHAR(30) NULL UNIQUE, -- erst ab "Ausstellen" vergeben; Entwurf hat keine Nummer
|
||||
org_id CHAR(36) NOT NULL REFERENCES organizations(id),
|
||||
status ENUM('draft','open','paid','cancelled') NOT NULL DEFAULT 'draft',
|
||||
issue_date DATE NULL,
|
||||
due_date DATE NULL,
|
||||
currency CHAR(3) NOT NULL DEFAULT 'EUR',
|
||||
total_net_cents INT NOT NULL DEFAULT 0,
|
||||
total_tax_cents INT NOT NULL DEFAULT 0,
|
||||
total_gross_cents INT NOT NULL DEFAULT 0,
|
||||
payment_method VARCHAR(50) NULL,
|
||||
note VARCHAR(500) NULL,
|
||||
paid_at DATETIME(3) NULL,
|
||||
cancels_invoice_id CHAR(36) NULL REFERENCES invoices(id), -- gesetzt bei einer Stornorechnung (negative Beträge)
|
||||
cancelled_by_invoice_id CHAR(36) NULL REFERENCES invoices(id), -- Rückverweis von der stornierten Rechnung auf ihr Storno
|
||||
created_by CHAR(36) NOT NULL REFERENCES users(id),
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
issued_at DATETIME(3) NULL,
|
||||
cancelled_at DATETIME(3) NULL,
|
||||
KEY idx_inv_org (org_id), KEY idx_inv_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE invoice_items (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
invoice_id CHAR(36) NOT NULL REFERENCES invoices(id),
|
||||
contract_id CHAR(36) NULL REFERENCES contracts(id),
|
||||
description VARCHAR(300) NOT NULL,
|
||||
quantity DECIMAL(10,2) NOT NULL DEFAULT 1,
|
||||
unit_price_net_cents INT NOT NULL,
|
||||
tax_bp INT NOT NULL,
|
||||
net_cents INT NOT NULL,
|
||||
tax_cents INT NOT NULL,
|
||||
gross_cents INT NOT NULL,
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
KEY idx_ii_invoice (invoice_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
Loading…
Add table
Add a link
Reference in a new issue