46 lines
1.8 KiB
SQL
46 lines
1.8 KiB
SQL
-- 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);
|