-- Invoice management tables -- Customers table CREATE TABLE customers ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, ico VARCHAR(20), dic VARCHAR(20), address TEXT, city VARCHAR(100), zip VARCHAR(10), country VARCHAR(100) DEFAULT 'Česká republika', email VARCHAR(255), phone VARCHAR(50), notes TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by INTEGER, updated_by INTEGER ); -- Invoices table CREATE TABLE invoices ( id SERIAL PRIMARY KEY, invoice_number VARCHAR(50) NOT NULL UNIQUE, invoice_type VARCHAR(20) DEFAULT 'faktura', variable_symbol VARCHAR(20), constant_symbol VARCHAR(20), specific_symbol VARCHAR(20), issue_date TIMESTAMP NOT NULL, due_date TIMESTAMP NOT NULL, taxable_supply_date TIMESTAMP, -- Supplier information (auto-filled from club settings) supplier_name VARCHAR(255) NOT NULL, supplier_ico VARCHAR(20), supplier_dic VARCHAR(20), supplier_address TEXT, supplier_city VARCHAR(100), supplier_zip VARCHAR(10), supplier_country VARCHAR(100) DEFAULT 'Česká republika', -- Supplier bank information bank_name VARCHAR(255), bank_account VARCHAR(50), bank_iban VARCHAR(50), bank_swift VARCHAR(20), -- Customer information customer_id INTEGER REFERENCES customers(id), customer_name VARCHAR(255) NOT NULL, customer_ico VARCHAR(20), customer_dic VARCHAR(20), customer_address TEXT, customer_city VARCHAR(100), customer_zip VARCHAR(10), customer_country VARCHAR(100) DEFAULT 'Česká republika', customer_email VARCHAR(255), customer_phone VARCHAR(50), -- Financial summary subtotal_ex_vat DECIMAL(12,2) DEFAULT 0, vat_amount DECIMAL(12,2) DEFAULT 0, total_amount DECIMAL(12,2) NOT NULL, paid_amount DECIMAL(12,2) DEFAULT 0, -- Status and dates status VARCHAR(50) DEFAULT 'draft', payment_status VARCHAR(50) DEFAULT 'unpaid', sent_at TIMESTAMP, paid_at TIMESTAMP, -- Notes and metadata notes TEXT, internal_notes TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by INTEGER NOT NULL, updated_by INTEGER ); -- Invoice items table CREATE TABLE invoice_items ( id SERIAL PRIMARY KEY, invoice_id INTEGER NOT NULL REFERENCES invoices(id) ON DELETE CASCADE, name VARCHAR(255) NOT NULL, description TEXT, quantity DECIMAL(10,2) NOT NULL DEFAULT 1, unit VARCHAR(50) DEFAULT 'ks', unit_price DECIMAL(12,2) NOT NULL, vat_rate DECIMAL(5,2) DEFAULT 21.00, vat_amount DECIMAL(12,2), total_price_ex_vat DECIMAL(12,2), total_price_with_vat DECIMAL(12,2), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Invoice payments table CREATE TABLE invoice_payments ( id SERIAL PRIMARY KEY, invoice_id INTEGER NOT NULL REFERENCES invoices(id) ON DELETE CASCADE, amount DECIMAL(12,2) NOT NULL, payment_date TIMESTAMP NOT NULL, payment_method VARCHAR(100), reference_number VARCHAR(255), notes TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by INTEGER, updated_by INTEGER ); -- Invoice documents table CREATE TABLE invoice_documents ( id SERIAL PRIMARY KEY, invoice_id INTEGER NOT NULL REFERENCES invoices(id) ON DELETE CASCADE, name VARCHAR(255) NOT NULL, type VARCHAR(100), file_name VARCHAR(500), file_path VARCHAR(500), file_size BIGINT, mime_type VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by INTEGER, updated_by INTEGER ); -- Invoice settings table (singleton) CREATE TABLE invoice_settings ( id SERIAL PRIMARY KEY, -- Default supplier information default_supplier_name VARCHAR(255), default_supplier_ico VARCHAR(20), default_supplier_dic VARCHAR(20), default_supplier_address TEXT, default_supplier_city VARCHAR(100), default_supplier_zip VARCHAR(10), default_supplier_country VARCHAR(100) DEFAULT 'Česká republika', -- Default bank information default_bank_name VARCHAR(255), default_bank_account VARCHAR(50), default_bank_iban VARCHAR(50), default_bank_swift VARCHAR(20), -- Invoice defaults default_due_days INTEGER DEFAULT 14, default_vat_rate DECIMAL(5,2) DEFAULT 21.00, default_payment_method VARCHAR(100), invoice_number_prefix VARCHAR(20) DEFAULT 'FV', next_invoice_number INTEGER DEFAULT 1, -- Email settings email_subject VARCHAR(255), email_body TEXT, send_emails BOOLEAN DEFAULT false, -- Other settings currency VARCHAR(3) DEFAULT 'CZK', language VARCHAR(10) DEFAULT 'cs', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by INTEGER, updated_by INTEGER ); -- Indexes for performance CREATE INDEX idx_customers_ico ON customers(ico); CREATE INDEX idx_customers_email ON customers(email); CREATE INDEX idx_invoices_number ON invoices(invoice_number); CREATE INDEX idx_invoices_status ON invoices(status); CREATE INDEX idx_invoices_payment_status ON invoices(payment_status); CREATE INDEX idx_invoices_customer_id ON invoices(customer_id); CREATE INDEX idx_invoices_issue_date ON invoices(issue_date); CREATE INDEX idx_invoices_due_date ON invoices(due_date); CREATE INDEX idx_invoice_items_invoice_id ON invoice_items(invoice_id); CREATE INDEX idx_invoice_payments_invoice_id ON invoice_payments(invoice_id); CREATE INDEX idx_invoice_documents_invoice_id ON invoice_documents(invoice_id); -- Insert default invoice settings INSERT INTO invoice_settings ( default_supplier_name, default_due_days, default_vat_rate, invoice_number_prefix, next_invoice_number, currency, language ) VALUES ( 'Fotbalový klub', 14, 21.00, 'FV', 1, 'CZK', 'cs' );