38471-vm/db/migrations/20260318_multi_outlet_schema.sql
2026-03-18 09:45:33 +00:00

66 lines
3.5 KiB
SQL

-- Multi-Outlet Implementation
-- 1. Create outlet_stock table
CREATE TABLE IF NOT EXISTS outlet_stock (
id INT AUTO_INCREMENT PRIMARY KEY,
outlet_id INT NOT NULL,
item_id INT NOT NULL,
quantity DECIMAL(15, 2) DEFAULT 0.00,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY unique_item_outlet (outlet_id, item_id),
CONSTRAINT fk_outlet_stock_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE CASCADE,
CONSTRAINT fk_outlet_stock_item FOREIGN KEY (item_id) REFERENCES stock_items(id) ON DELETE CASCADE
);
-- 2. Migrate existing stock to Default Outlet (ID 1)
-- We assume Outlet 1 exists (created in previous migration)
INSERT INTO outlet_stock (outlet_id, item_id, quantity)
SELECT 1, id, stock_quantity FROM stock_items
ON DUPLICATE KEY UPDATE quantity = stock_items.stock_quantity;
-- 3. Add outlet_id to tables
-- Invoices
ALTER TABLE invoices ADD COLUMN IF NOT EXISTS outlet_id INT DEFAULT NULL;
ALTER TABLE invoices ADD CONSTRAINT fk_invoices_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE SET NULL;
UPDATE invoices SET outlet_id = 1 WHERE outlet_id IS NULL;
-- POS Transactions
ALTER TABLE pos_transactions ADD COLUMN IF NOT EXISTS outlet_id INT DEFAULT NULL;
ALTER TABLE pos_transactions ADD CONSTRAINT fk_pos_trans_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE SET NULL;
UPDATE pos_transactions SET outlet_id = 1 WHERE outlet_id IS NULL;
-- POS Held Carts
ALTER TABLE pos_held_carts ADD COLUMN IF NOT EXISTS outlet_id INT DEFAULT NULL;
ALTER TABLE pos_held_carts ADD CONSTRAINT fk_pos_carts_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE SET NULL;
UPDATE pos_held_carts SET outlet_id = 1 WHERE outlet_id IS NULL;
-- Quotations
ALTER TABLE quotations ADD COLUMN IF NOT EXISTS outlet_id INT DEFAULT NULL;
ALTER TABLE quotations ADD CONSTRAINT fk_quotations_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE SET NULL;
UPDATE quotations SET outlet_id = 1 WHERE outlet_id IS NULL;
-- LPOs
ALTER TABLE lpos ADD COLUMN IF NOT EXISTS outlet_id INT DEFAULT NULL;
-- Note: lpos might already have outlet_id from a previous failed attempt or partial migration, checking IF NOT EXISTS is good.
-- We need to check if the foreign key exists before adding it to avoid errors, or just try adding it.
-- For simplicity in this environment, we'll try to add it. If it fails, it might be due to duplicate name.
-- Let's use a safe procedure for FKs if possible, or just standard ALTER.
-- safe bet:
ALTER TABLE lpos ADD CONSTRAINT fk_lpos_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE SET NULL;
UPDATE lpos SET outlet_id = 1 WHERE outlet_id IS NULL;
-- Sales Returns
ALTER TABLE sales_returns ADD COLUMN IF NOT EXISTS outlet_id INT DEFAULT NULL;
ALTER TABLE sales_returns ADD CONSTRAINT fk_sales_returns_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE SET NULL;
UPDATE sales_returns SET outlet_id = 1 WHERE outlet_id IS NULL;
-- Purchase Returns
ALTER TABLE purchase_returns ADD COLUMN IF NOT EXISTS outlet_id INT DEFAULT NULL;
ALTER TABLE purchase_returns ADD CONSTRAINT fk_purchase_returns_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE SET NULL;
UPDATE purchase_returns SET outlet_id = 1 WHERE outlet_id IS NULL;
-- Expenses
ALTER TABLE expenses ADD COLUMN IF NOT EXISTS outlet_id INT DEFAULT NULL;
ALTER TABLE expenses ADD CONSTRAINT fk_expenses_outlet FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE SET NULL;
UPDATE expenses SET outlet_id = 1 WHERE outlet_id IS NULL;