diff --git a/seed_company.sql b/seed_company.sql new file mode 100644 index 0000000..05d9d6a --- /dev/null +++ b/seed_company.sql @@ -0,0 +1,339 @@ +-- ================================================================ +-- Seed data — set the target company_id here before running +-- Databases: wms (settings) + wms2 (operational) +-- ================================================================ + +SET @cid = 12; -- ← change this to the target company_id + +SET FOREIGN_KEY_CHECKS = 0; + +-- ──────────────────────────────────────────────────────────────── +-- wms: Company settings +-- Keys match CompanySettingManager defaults +-- ──────────────────────────────────────────────────────────────── +INSERT INTO wms.company_setting (company_id, setting_key, value, updated_at) VALUES +(@cid, 'advanced_location', '0', NOW()), +(@cid, 'default_stock_status', '0', NOW()), +(@cid, 'auto_invoice_and_credit_note', '0', NOW()), +(@cid, 'auto_complete_on_ship', '0', NOW()), +(@cid, 'location_label_rack', 'Location', NOW()), +(@cid, 'location_label_zone', 'Zone', NOW()), +(@cid, 'location_label_aisle', 'Aisle', NOW()); + +-- ──────────────────────────────────────────────────────────────── +-- Warehouses (ids 1 & 2 match existing td_stock_1 / td_stock_2) +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.md_warehouse AUTO_INCREMENT = 1; + +INSERT INTO wms2.md_warehouse (id, company_id, warehouse_name, location, manager, description, status) VALUES +(1, @cid, 'Main Warehouse', '123 Industrial Rd, Bangkok 10400', 0, 'Primary receiving and dispatch', 1), +(2, @cid, 'Cold Storage', '456 Commerce St, Bangkok 10600', 0, 'Temperature-controlled items', 1); + +-- ──────────────────────────────────────────────────────────────── +-- Product categories +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.md_product_category AUTO_INCREMENT = 1; + +INSERT INTO wms2.md_product_category (id, company_id, category, slug, description, status) VALUES +(1, @cid, 'Electronics', 'electronics', 'Electronic devices and accessories', 1), +(2, @cid, 'Packaging', 'packaging', 'Packaging and protective materials', 1), +(3, @cid, 'Raw Materials', 'raw-materials', 'Components and raw materials', 1); + +-- ──────────────────────────────────────────────────────────────── +-- Contact types +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.md_contact_type AUTO_INCREMENT = 1; + +INSERT INTO wms2.md_contact_type (id, company_id, contact_type, description, status) VALUES +(1, @cid, 'Supplier', 'Product suppliers and vendors', 1), +(2, @cid, 'Customer', 'End customers and buyers', 1); + +-- ──────────────────────────────────────────────────────────────── +-- Contacts +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.md_contact AUTO_INCREMENT = 1; + +INSERT INTO wms2.md_contact + (id, company_id, contact_name, tax_id, organization, branch, + contact_type, billing_address, shipping_location, shipping_address, + remark, contact_image, status) VALUES +(1, @cid, 'Somchai Jaidee', '1234567890123', 'ABC Tech Supplies Co., Ltd.', 'Head Office', 1, + '789 Supplier Lane, Bangrak, Bangkok 10500', 'Bangkok', + '789 Supplier Lane, Bangrak, Bangkok 10500', 'Primary electronics supplier', '', 1), +(2, @cid, 'Malee Srisakul', '9876543210123', 'Malee Trading Co., Ltd.', 'Head Office', 2, + '321 Customer Ave, Sathon, Bangkok 10120', 'Bangkok', + '321 Customer Ave, Sathon, Bangkok 10120', 'Retail customer', '', 1), +(3, @cid, 'Wanchai Piyamas', '5678901234567', 'TechCore Solutions Co., Ltd.','Head Office', 2, + '654 Tech Park, Pak Kret, Nonthaburi 11120','Nonthaburi', + '654 Tech Park, Pak Kret, Nonthaburi 11120','Corporate B2B client', '', 1); + +-- ──────────────────────────────────────────────────────────────── +-- Products +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.md_product AUTO_INCREMENT = 1; + +INSERT INTO wms2.md_product + (id, company_id, product_name, sku, barcode, price, cost_price, uom, + min_stock, reorder_point, category, description, status) VALUES +(1, @cid, 'Laptop A14 Pro', 'LAP-001', '8851234567001', 35000.0000, 28000.00, 'pcs', 5.0000, 10.0000, 1, 'High-performance 14-inch laptop', 1), +(2, @cid, 'USB Hub Pro 7-Port', 'USB-001', '8851234567002', 1200.0000, 800.00, 'pcs', 10.0000, 20.0000, 1, '7-port USB 3.0 hub with power adapter', 1), +(3, @cid, 'Bubble Wrap Roll 50m', 'PKG-001', '8851234567003', 350.0000, 200.00, 'roll', 5.0000, 10.0000, 2, 'Protective bubble wrap 50-metre roll', 1), +(4, @cid, 'PCB Module Type-A', 'RAW-001', '8851234567004', 850.0000, 620.00, 'pcs', 20.0000, 40.0000, 3, 'PCB module for electronic assembly', 1), +(5, @cid, 'Wireless Mouse BT5', 'MOU-001', '8851234567005', 990.0000, 650.00, 'pcs', 10.0000, 20.0000, 1, 'Bluetooth 5.0 ergonomic wireless mouse', 1); + +-- ──────────────────────────────────────────────────────────────── +-- Lots +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.md_lot AUTO_INCREMENT = 1; + +INSERT INTO wms2.md_lot (id, company_id, product_sku, lot_number, expiry_date, description) VALUES +(1, @cid, 'LAP-001', 'LAP-LOT-001', '2027-12-31', 'Batch January 2026'), +(2, @cid, 'USB-001', 'USB-LOT-001', '2028-06-30', 'Batch January 2026'), +(3, @cid, 'PKG-001', 'PKG-LOT-001', '2027-03-31', 'Batch January 2026'), +(4, @cid, 'RAW-001', 'RAW-LOT-001', '2026-12-31', 'Batch February 2026'), +(5, @cid, 'MOU-001', 'MOU-LOT-001', '2028-12-31', 'Batch February 2026'); + +-- ──────────────────────────────────────────────────────────────── +-- Storage configuration (simple mode: zone / aisle fields empty) +-- md_storage.warehouse stores warehouse id as varchar +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.md_storage AUTO_INCREMENT = 1; + +INSERT INTO wms2.md_storage + (id, company_id, warehouse, zone, aisle_from, aisle_to, rack_from, rack_to, description, status) VALUES +(1, @cid, '1', '', '', '', 'A1', 'A5', 'Main shelf row A', 1), +(2, @cid, '1', '', '', '', 'B1', 'B3', 'Main shelf row B', 1), +(3, @cid, '2', '', '', '', 'C1', 'C3', 'Cold storage racks', 1); + +-- ──────────────────────────────────────────────────────────────── +-- Racks (simple mode: zone = aisle = rack label) +-- Mirrors PurchaseOrderManager::receivePo(): +-- if ($zone === '' && $rack !== '') $zone = $aisle = $rack; +-- td_stock_id = id of the occupying stock-in row in td_stock_{warehouse} +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.md_rack AUTO_INCREMENT = 1; + +INSERT INTO wms2.md_rack + (id, company_id, td_stock_id, warehouse, storage_id, zone, aisle, rack, product_sku) VALUES +-- Warehouse 1 — row A (A1–A5) +( 1, @cid, 1, 1, 1, 'A1','A1','A1', 'LAP-001'), -- td_stock_1 row 1 +( 2, @cid, 2, 1, 1, 'A2','A2','A2', 'USB-001'), -- td_stock_1 row 2 +( 3, @cid, 4, 1, 1, 'A3','A3','A3', 'MOU-001'), -- td_stock_1 row 4 +( 4, @cid, 0, 1, 1, 'A4','A4','A4', NULL), +( 5, @cid, 0, 1, 1, 'A5','A5','A5', NULL), +-- Warehouse 1 — row B (B1–B3) +( 6, @cid, 3, 1, 2, 'B1','B1','B1', 'PKG-001'), -- td_stock_1 row 3 +( 7, @cid, 5, 1, 2, 'B2','B2','B2', 'RAW-001'), -- td_stock_1 row 5 +( 8, @cid, 0, 1, 2, 'B3','B3','B3', NULL), +-- Warehouse 2 — cold storage (C1–C3) +( 9, @cid, 1, 2, 3, 'C1','C1','C1', 'RAW-001'), -- td_stock_2 row 1 +(10, @cid, 2, 2, 3, 'C2','C2','C2', 'PKG-001'), -- td_stock_2 row 2 +(11, @cid, 0, 2, 3, 'C3','C3','C3', NULL); + +-- ──────────────────────────────────────────────────────────────── +-- Stock movements — Warehouse 1 (td_stock_1) +-- status 1 = approved; balance already counted in warehouse_balance +-- lot_number / serial_number are NOT NULL in schema → use '' not NULL +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.td_stock_1 AUTO_INCREMENT = 1; + +INSERT INTO wms2.td_stock_1 + (id, ref_id, company_id, uuid, type, ref_warehouse, date, + product_sku, lot_number, serial_number, source, source_id, + `in`, `out`, price, zone, aisle, rack, + contact_id, description, status, log) VALUES +-- IN from PO-20260108-0001 +(1, 0, @cid, 'SEED260110_01', 'in', '', '2026-01-10 09:00:00', + 'LAP-001','LAP-LOT-001','', 'po', 1, + 10.0000, 0.0000, 28000.0000, 'A1','A1','A1', + 1, 'PO-20260108-0001', 1, '{}'), +(2, 0, @cid, 'SEED260110_02', 'in', '', '2026-01-10 09:05:00', + 'USB-001','USB-LOT-001','', 'po', 1, + 50.0000, 0.0000, 800.0000, 'A2','A2','A2', + 1, 'PO-20260108-0001', 1, '{}'), +-- IN manual +(3, 0, @cid, 'SEED260115_01', 'in', '', '2026-01-15 10:00:00', + 'PKG-001','PKG-LOT-001','', '', 0, + 30.0000, 0.0000, 200.0000, 'B1','B1','B1', + 0, 'Manual stock-in', 1, '{}'), +(4, 0, @cid, 'SEED260201_01', 'in', '', '2026-02-01 09:00:00', + 'MOU-001','MOU-LOT-001','', '', 0, + 25.0000, 0.0000, 650.0000, 'A3','A3','A3', + 0, 'Manual stock-in', 1, '{}'), +(5, 0, @cid, 'SEED260205_01', 'in', '', '2026-02-05 09:00:00', + 'RAW-001','RAW-LOT-001','', '', 0, + 100.0000, 0.0000, 620.0000, 'B2','B2','B2', + 0, 'Manual stock-in', 1, '{}'), +-- OUT for Sales Orders (ref_id = stock-in row consumed) +(6, 1, @cid, 'SEED260305_01', 'out', '', '2026-03-05 14:00:00', + 'LAP-001','LAP-LOT-001','', 'order', 1, + 0.0000, 3.0000, 35000.0000, 'A1','A1','A1', + 2, 'ORD-20260304-0001', 1, '{}'), +(7, 2, @cid, 'SEED260310_01', 'out', '', '2026-03-10 14:00:00', + 'USB-001','USB-LOT-001','', 'order', 2, + 0.0000, 15.0000, 1200.0000, 'A2','A2','A2', + 3, 'ORD-20260309-0001', 1, '{}'); + +-- ──────────────────────────────────────────────────────────────── +-- Stock movements — Warehouse 2 (td_stock_2) +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.td_stock_2 AUTO_INCREMENT = 1; + +INSERT INTO wms2.td_stock_2 + (id, ref_id, company_id, uuid, type, ref_warehouse, date, + product_sku, lot_number, serial_number, source, source_id, + `in`, `out`, price, zone, aisle, rack, + contact_id, description, status, log) VALUES +(1, 0, @cid, 'SEED260201_C1', 'in', '', '2026-02-01 10:00:00', + 'RAW-001','RAW-LOT-001','', '', 0, + 50.0000, 0.0000, 620.0000, 'C1','C1','C1', + 0, 'Manual stock-in', 1, '{}'), +(2, 0, @cid, 'SEED260215_C2', 'in', '', '2026-02-15 10:00:00', + 'PKG-001','PKG-LOT-001','', '', 0, + 20.0000, 0.0000, 200.0000, 'C2','C2','C2', + 0, 'Manual stock-in', 1, '{}'); + +-- ──────────────────────────────────────────────────────────────── +-- Warehouse balance (monthly summaries — approved movements only) +-- ──────────────────────────────────────────────────────────────── +INSERT INTO wms2.warehouse_balance + (company_id, warehouse_id, product_sku, month, total_in, total_out) VALUES +-- 2026-01 Warehouse 1 +(@cid, 1, 'LAP-001', '2026-01', 10.0000, 0.0000), +(@cid, 1, 'USB-001', '2026-01', 50.0000, 0.0000), +(@cid, 1, 'PKG-001', '2026-01', 30.0000, 0.0000), +-- 2026-02 Warehouse 1 +(@cid, 1, 'MOU-001', '2026-02', 25.0000, 0.0000), +(@cid, 1, 'RAW-001', '2026-02', 100.0000, 0.0000), +-- 2026-02 Warehouse 2 +(@cid, 2, 'RAW-001', '2026-02', 50.0000, 0.0000), +(@cid, 2, 'PKG-001', '2026-02', 20.0000, 0.0000), +-- 2026-03 Warehouse 1 (outbound) +(@cid, 1, 'LAP-001', '2026-03', 0.0000, 3.0000), +(@cid, 1, 'USB-001', '2026-03', 0.0000, 15.0000); + +-- ──────────────────────────────────────────────────────────────── +-- Purchase Order (status 3 = fully received, payment 1 = paid) +-- items JSON mirrors PurchaseOrderManager::receivePo() write-back +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.td_purchase_order AUTO_INCREMENT = 1; + +INSERT INTO wms2.td_purchase_order + (id, company_id, uuid, po_number, contact_id, po_date, expected_date, + warehouse_id, status, payment_status, + subtotal, discount, tax, shipping_fee, grand_total, + items, notes, log, created_at) VALUES +(1, @cid, + MD5('po-1-testco'), + 'PO-20260108-0001', 1, '2026-01-08', '2026-01-10', + 1, 3, 1, + 320000.00, 0.00, 22400.00, 0.00, 342400.00, + '[{"id":0,"product_sku":"LAP-001","product_name":"Laptop A14 Pro","quantity":10,"unit_price":28000,"total_price":280000,"received_qty":10,"stock_in_id":1,"receive_wh":1,"receive_zone":"A1","receive_aisle":"A1","receive_rack":"A1"},{"id":1,"product_sku":"USB-001","product_name":"USB Hub Pro 7-Port","quantity":50,"unit_price":800,"total_price":40000,"received_qty":50,"stock_in_id":2,"receive_wh":1,"receive_zone":"A2","receive_aisle":"A2","receive_rack":"A2"}]', + 'Initial electronics stock', + '[{"user_id":null,"dt":"2026-01-08 08:30:00","action":"create"},{"user_id":null,"dt":"2026-01-08 09:00:00","action":"confirm"},{"user_id":null,"dt":"2026-01-10 09:05:00","action":"receive","new_status":3}]', + '2026-01-08 08:30:00'); + +-- ──────────────────────────────────────────────────────────────── +-- Sales Orders (status 3 = completed, payment 1 = paid) +-- items JSON mirrors OrderManager::confirmOrder() write-back +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.td_order AUTO_INCREMENT = 1; + +INSERT INTO wms2.td_order + (id, company_id, uuid, order_number, contact_id, order_date, + status, payment_status, + subtotal, discount, tax, shipping_fee, shipping_tracking_number, grand_total, + items, notes, log, created_at) VALUES +(1, @cid, + MD5('ord-1-testco'), + 'ORD-20260304-0001', 2, '2026-03-04', + 3, 1, + 105000.0000, 0.0000, 7350.0000, 0.0000, 'TH123456789', 112350.0000, + '[{"product_sku":"LAP-001","product_name":"Laptop A14 Pro","quantity":3,"price":35000,"warehouse_id":1,"zone":"A1","aisle":"A1","rack":"A1","lot_number":"LAP-LOT-001","serial_number":"","stock_out_id":6}]', + '', + '[{"user_id":null,"dt":"2026-03-04 10:00:00","action":"create"},{"user_id":null,"dt":"2026-03-04 10:30:00","action":"confirm"},{"user_id":null,"dt":"2026-03-05 14:00:00","action":"complete"}]', + '2026-03-04 10:00:00'), +(2, @cid, + MD5('ord-2-testco'), + 'ORD-20260309-0001', 3, '2026-03-09', + 3, 1, + 18000.0000, 0.0000, 1260.0000, 150.0000, 'TH987654321', 19410.0000, + '[{"product_sku":"USB-001","product_name":"USB Hub Pro 7-Port","quantity":15,"price":1200,"warehouse_id":1,"zone":"A2","aisle":"A2","rack":"A2","lot_number":"USB-LOT-001","serial_number":"","stock_out_id":7}]', + 'Urgent — priority dispatch', + '[{"user_id":null,"dt":"2026-03-09 11:00:00","action":"create"},{"user_id":null,"dt":"2026-03-09 11:30:00","action":"confirm"},{"user_id":null,"dt":"2026-03-10 14:00:00","action":"complete"}]', + '2026-03-09 11:00:00'); + +-- ──────────────────────────────────────────────────────────────── +-- Invoices (doc_type invoice, status 2 = paid) +-- ──────────────────────────────────────────────────────────────── +ALTER TABLE wms2.td_invoice AUTO_INCREMENT = 1; + +INSERT INTO wms2.td_invoice + (id, company_id, uuid, doc_type, invoice_number, ref_invoice_id, order_id, + contact_id, issued_date, due_date, + subtotal, discount, tax, shipping_fee, grand_total, + items, status, notes, log) VALUES +(1, @cid, + MD5('inv-1-testco'), + 'invoice', 'INV-20260305-0001', 0, 1, 2, + '2026-03-05', '2026-03-19', + 105000.0000, 0.0000, 7350.0000, 0.0000, 112350.0000, + '[{"product_sku":"LAP-001","product_name":"Laptop A14 Pro","quantity":3,"price":35000,"subtotal":105000}]', + 2, '', + '[{"user_id":null,"dt":"2026-03-05 14:30:00","action":"issue"},{"user_id":null,"dt":"2026-03-12 10:00:00","action":"pay"}]'), +(2, @cid, + MD5('inv-2-testco'), + 'invoice', 'INV-20260310-0001', 0, 2, 3, + '2026-03-10', '2026-03-24', + 18000.0000, 0.0000, 1260.0000, 150.0000, 19410.0000, + '[{"product_sku":"USB-001","product_name":"USB Hub Pro 7-Port","quantity":15,"price":1200,"subtotal":18000}]', + 2, '', + '[{"user_id":null,"dt":"2026-03-10 14:30:00","action":"issue"},{"user_id":null,"dt":"2026-03-18 09:00:00","action":"pay"}]'); + +-- ──────────────────────────────────────────────────────────────── +-- Barcodes +-- SKU format : SKU|{sku}|{lot}|{serial} (serial blank = no tracking) +-- LOC format : LOC|{warehouse_id}|{rack} (simple mode) +-- ──────────────────────────────────────────────────────────────── +INSERT INTO wms2.md_barcode + (company_id, barcode_type, barcode, + product_sku, lot_number, serial_number, + warehouse_id, zone, aisle, rack, + print_count, last_printed_dt, status) VALUES +-- SKU labels +(@cid,'sku','SKU|LAP-001|LAP-LOT-001|', 'LAP-001','LAP-LOT-001',NULL, NULL,NULL,NULL,NULL, 1,'2026-01-10 09:30:00',1), +(@cid,'sku','SKU|USB-001|USB-LOT-001|', 'USB-001','USB-LOT-001',NULL, NULL,NULL,NULL,NULL, 1,'2026-01-10 09:30:00',1), +(@cid,'sku','SKU|PKG-001|PKG-LOT-001|', 'PKG-001','PKG-LOT-001',NULL, NULL,NULL,NULL,NULL, 1,'2026-01-15 10:30:00',1), +(@cid,'sku','SKU|RAW-001|RAW-LOT-001|', 'RAW-001','RAW-LOT-001',NULL, NULL,NULL,NULL,NULL, 1,'2026-02-01 09:30:00',1), +(@cid,'sku','SKU|MOU-001|MOU-LOT-001|', 'MOU-001','MOU-LOT-001',NULL, NULL,NULL,NULL,NULL, 1,'2026-02-01 09:30:00',1), +-- Location labels — Warehouse 1 +(@cid,'loc','LOC|1|A1', NULL,NULL,NULL, 1,NULL,NULL,'A1', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|1|A2', NULL,NULL,NULL, 1,NULL,NULL,'A2', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|1|A3', NULL,NULL,NULL, 1,NULL,NULL,'A3', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|1|A4', NULL,NULL,NULL, 1,NULL,NULL,'A4', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|1|A5', NULL,NULL,NULL, 1,NULL,NULL,'A5', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|1|B1', NULL,NULL,NULL, 1,NULL,NULL,'B1', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|1|B2', NULL,NULL,NULL, 1,NULL,NULL,'B2', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|1|B3', NULL,NULL,NULL, 1,NULL,NULL,'B3', 1,'2026-01-05 08:00:00',1), +-- Location labels — Warehouse 2 +(@cid,'loc','LOC|2|C1', NULL,NULL,NULL, 2,NULL,NULL,'C1', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|2|C2', NULL,NULL,NULL, 2,NULL,NULL,'C2', 1,'2026-01-05 08:00:00',1), +(@cid,'loc','LOC|2|C3', NULL,NULL,NULL, 2,NULL,NULL,'C3', 1,'2026-01-05 08:00:00',1); + +-- ──────────────────────────────────────────────────────────────── +-- Rack log (occupy events matching each occupied rack above) +-- md_rack_id references explicit ids 1–11 set above +-- ──────────────────────────────────────────────────────────────── +INSERT INTO wms2.md_rack_log + (company_id, md_rack_id, user_id, dt, login, action, product_sku, td_stock_id) VALUES +-- Warehouse 1 +(@cid, 1, NULL, '2026-01-10 09:00:00', '2026-01-10 09:00:00', 'occupy', 'LAP-001', 1), +(@cid, 2, NULL, '2026-01-10 09:05:00', '2026-01-10 09:05:00', 'occupy', 'USB-001', 2), +(@cid, 6, NULL, '2026-01-15 10:00:00', '2026-01-15 10:00:00', 'occupy', 'PKG-001', 3), +(@cid, 3, NULL, '2026-02-01 09:00:00', '2026-02-01 09:00:00', 'occupy', 'MOU-001', 4), +(@cid, 7, NULL, '2026-02-05 09:00:00', '2026-02-05 09:00:00', 'occupy', 'RAW-001', 5), +-- Warehouse 2 +(@cid, 9, NULL, '2026-02-01 10:00:00', '2026-02-01 10:00:00', 'occupy', 'RAW-001', 1), +(@cid, 10, NULL, '2026-02-15 10:00:00', '2026-02-15 10:00:00', 'occupy', 'PKG-001', 2); + +SET FOREIGN_KEY_CHECKS = 1;