some new updates

This commit is contained in:
Flatlogic Bot 2026-04-26 02:28:28 +00:00
parent a2cefc7b7a
commit bf43c58e3a
2 changed files with 178 additions and 1 deletions

View 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;

View File

@ -145,11 +145,16 @@ CREATE TABLE IF NOT EXISTS `sales_orders` (
`sale_date` datetime NOT NULL DEFAULT current_timestamp(),
`created_at` datetime NOT NULL DEFAULT current_timestamp(),
`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`),
UNIQUE KEY `receipt_no` (`receipt_no`),
KEY `idx_sale_mode` (`sale_mode`),
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;
-- Table structure for `settings`