some new updates
This commit is contained in:
parent
a2cefc7b7a
commit
bf43c58e3a
172
db/migrations/2026-04-26_production_sales_orders_sync.sql
Normal file
172
db/migrations/2026-04-26_production_sales_orders_sync.sql
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
-- Production sync for current sales/POS/Eid release.
|
||||||
|
-- Safe to import on an existing production database.
|
||||||
|
-- This consolidates the sales_orders columns/indexes now required by the app.
|
||||||
|
|
||||||
|
SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
DROP PROCEDURE IF EXISTS apply_production_sales_orders_sync;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE PROCEDURE apply_production_sales_orders_sync()
|
||||||
|
BEGIN
|
||||||
|
-- sales_orders.customer_id
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND COLUMN_NAME = 'customer_id'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD COLUMN customer_id INT(10) UNSIGNED DEFAULT NULL AFTER role_name;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- sales_orders.payment_status
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND COLUMN_NAME = 'payment_status'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD COLUMN payment_status VARCHAR(20) NOT NULL DEFAULT 'paid' AFTER payment_method;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- sales_orders.vat_amount
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND COLUMN_NAME = 'vat_amount'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD COLUMN vat_amount DECIMAL(10,3) NOT NULL DEFAULT 0.000 AFTER subtotal;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- sales_orders.paid_amount
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND COLUMN_NAME = 'paid_amount'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD COLUMN paid_amount DECIMAL(10,3) NOT NULL DEFAULT 0.000 AFTER total_amount;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- sales_orders.due_amount
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND COLUMN_NAME = 'due_amount'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD COLUMN due_amount DECIMAL(10,3) NOT NULL DEFAULT 0.000 AFTER paid_amount;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- sales_orders.order_type
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND COLUMN_NAME = 'order_type'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD COLUMN order_type VARCHAR(30) NOT NULL DEFAULT 'standard' AFTER status;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- sales_orders.delivery_status
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND COLUMN_NAME = 'delivery_status'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD COLUMN delivery_status VARCHAR(30) NOT NULL DEFAULT 'pending' AFTER order_type;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- sales_orders.delivery_date
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND COLUMN_NAME = 'delivery_date'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD COLUMN delivery_date DATE DEFAULT NULL AFTER delivery_status;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- sales_orders indexes used by the current Eid Orders queries.
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND INDEX_NAME = 'idx_order_type'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD INDEX idx_order_type (order_type);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM INFORMATION_SCHEMA.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'sales_orders'
|
||||||
|
AND INDEX_NAME = 'idx_delivery_date'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE sales_orders
|
||||||
|
ADD INDEX idx_delivery_date (delivery_date);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- Backfill / normalize values for existing rows.
|
||||||
|
UPDATE sales_orders
|
||||||
|
SET paid_amount = CASE
|
||||||
|
WHEN COALESCE(payment_status, 'paid') = 'unpaid' THEN 0
|
||||||
|
WHEN COALESCE(paid_amount, 0) = 0 THEN total_amount
|
||||||
|
ELSE paid_amount
|
||||||
|
END
|
||||||
|
WHERE paid_amount IS NULL OR paid_amount = 0;
|
||||||
|
|
||||||
|
UPDATE sales_orders
|
||||||
|
SET due_amount = GREATEST(total_amount - COALESCE(paid_amount, 0), 0)
|
||||||
|
WHERE due_amount IS NULL OR ABS(due_amount - GREATEST(total_amount - COALESCE(paid_amount, 0), 0)) > 0.0005;
|
||||||
|
|
||||||
|
UPDATE sales_orders
|
||||||
|
SET payment_status = CASE
|
||||||
|
WHEN COALESCE(due_amount, 0) <= 0.0005 THEN 'paid'
|
||||||
|
WHEN COALESCE(paid_amount, 0) > 0 THEN 'partial'
|
||||||
|
ELSE 'unpaid'
|
||||||
|
END
|
||||||
|
WHERE payment_status IS NULL OR TRIM(payment_status) = '' OR payment_status NOT IN ('paid', 'partial', 'unpaid');
|
||||||
|
|
||||||
|
UPDATE sales_orders
|
||||||
|
SET order_type = 'standard'
|
||||||
|
WHERE order_type IS NULL OR TRIM(order_type) = '';
|
||||||
|
|
||||||
|
UPDATE sales_orders
|
||||||
|
SET delivery_status = CASE
|
||||||
|
WHEN COALESCE(status, 'completed') = 'completed' THEN 'delivered'
|
||||||
|
ELSE 'pending'
|
||||||
|
END
|
||||||
|
WHERE delivery_status IS NULL OR TRIM(delivery_status) = '';
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
CALL apply_production_sales_orders_sync();
|
||||||
|
DROP PROCEDURE IF EXISTS apply_production_sales_orders_sync;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS;
|
||||||
|
|
||||||
|
-- Optional verification after import:
|
||||||
|
-- SHOW COLUMNS FROM sales_orders;
|
||||||
|
-- SHOW INDEX FROM sales_orders;
|
||||||
@ -145,11 +145,16 @@ CREATE TABLE IF NOT EXISTS `sales_orders` (
|
|||||||
`sale_date` datetime NOT NULL DEFAULT current_timestamp(),
|
`sale_date` datetime NOT NULL DEFAULT current_timestamp(),
|
||||||
`created_at` datetime NOT NULL DEFAULT current_timestamp(),
|
`created_at` datetime NOT NULL DEFAULT current_timestamp(),
|
||||||
`status` varchar(20) NOT NULL DEFAULT 'completed',
|
`status` varchar(20) NOT NULL DEFAULT 'completed',
|
||||||
|
`order_type` varchar(30) NOT NULL DEFAULT 'standard',
|
||||||
|
`delivery_status` varchar(30) NOT NULL DEFAULT 'pending',
|
||||||
|
`delivery_date` date DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `receipt_no` (`receipt_no`),
|
UNIQUE KEY `receipt_no` (`receipt_no`),
|
||||||
KEY `idx_sale_mode` (`sale_mode`),
|
KEY `idx_sale_mode` (`sale_mode`),
|
||||||
KEY `idx_branch_code` (`branch_code`),
|
KEY `idx_branch_code` (`branch_code`),
|
||||||
KEY `idx_sale_date` (`sale_date`)
|
KEY `idx_sale_date` (`sale_date`),
|
||||||
|
KEY `idx_order_type` (`order_type`),
|
||||||
|
KEY `idx_delivery_date` (`delivery_date`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- Table structure for `settings`
|
-- Table structure for `settings`
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user