-- Customers table CREATE TABLE IF NOT EXISTS customers ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, code VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(255), phone VARCHAR(50), address TEXT, contact_person VARCHAR(255), notes TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Purchase Orders table CREATE TABLE IF NOT EXISTS purchase_orders ( id SERIAL PRIMARY KEY, po_number VARCHAR(100) UNIQUE NOT NULL, customer_id INTEGER NOT NULL REFERENCES customers(id) ON DELETE CASCADE, status VARCHAR(20) DEFAULT 'draft' CHECK (status IN ('draft', 'confirmed', 'in_production', 'completed', 'cancelled')), order_date DATE DEFAULT CURRENT_DATE, due_date DATE, notes TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Purchase Order Items (line items linking products with quantities) CREATE TABLE IF NOT EXISTS purchase_order_items ( id SERIAL PRIMARY KEY, purchase_order_id INTEGER NOT NULL REFERENCES purchase_orders(id) ON DELETE CASCADE, product_id INTEGER NOT NULL REFERENCES products(id) ON DELETE RESTRICT, quantity INTEGER NOT NULL DEFAULT 1, unit_price NUMERIC(12, 4) DEFAULT 0, notes TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Indexes CREATE INDEX IF NOT EXISTS idx_purchase_orders_customer_id ON purchase_orders(customer_id); CREATE INDEX IF NOT EXISTS idx_purchase_orders_status ON purchase_orders(status); CREATE INDEX IF NOT EXISTS idx_purchase_orders_po_number ON purchase_orders(po_number); CREATE INDEX IF NOT EXISTS idx_purchase_order_items_po_id ON purchase_order_items(purchase_order_id); CREATE INDEX IF NOT EXISTS idx_purchase_order_items_product_id ON purchase_order_items(product_id); CREATE INDEX IF NOT EXISTS idx_customers_code ON customers(code);