134 lines
4.5 KiB
SQL
134 lines
4.5 KiB
SQL
-- Existing installation patch for partial payments + WhatsApp toggle/test settings support
|
|
-- Safe to import from phpMyAdmin on an already-installed database.
|
|
-- It only adds missing columns/settings and backfills payment amounts/status.
|
|
|
|
SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS;
|
|
SET FOREIGN_KEY_CHECKS = 0;
|
|
|
|
DROP PROCEDURE IF EXISTS apply_existing_install_patch;
|
|
DELIMITER $$
|
|
CREATE PROCEDURE apply_existing_install_patch()
|
|
BEGIN
|
|
-- users.avatar
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM INFORMATION_SCHEMA.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND TABLE_NAME = 'users'
|
|
AND COLUMN_NAME = 'avatar'
|
|
) THEN
|
|
ALTER TABLE users
|
|
ADD COLUMN avatar VARCHAR(255) DEFAULT NULL;
|
|
END IF;
|
|
|
|
-- branches.avatar
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM INFORMATION_SCHEMA.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND TABLE_NAME = 'branches'
|
|
AND COLUMN_NAME = 'avatar'
|
|
) THEN
|
|
ALTER TABLE branches
|
|
ADD COLUMN avatar VARCHAR(255) DEFAULT NULL;
|
|
END IF;
|
|
|
|
-- 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;
|
|
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';
|
|
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;
|
|
|
|
-- Backfill / normalize payment values for existing invoices.
|
|
UPDATE sales_orders
|
|
SET paid_amount = CASE
|
|
WHEN payment_status = 'unpaid' THEN 0
|
|
ELSE total_amount
|
|
END
|
|
WHERE paid_amount IS NULL OR paid_amount = 0;
|
|
|
|
UPDATE sales_orders
|
|
SET due_amount = GREATEST(total_amount - paid_amount, 0);
|
|
|
|
UPDATE sales_orders
|
|
SET payment_status = CASE
|
|
WHEN due_amount <= 0.0005 THEN 'paid'
|
|
WHEN paid_amount > 0 THEN 'partial'
|
|
ELSE 'unpaid'
|
|
END;
|
|
|
|
-- Settings keys used by the new WhatsApp tab and toggle.
|
|
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES ('wablas_enabled', '1');
|
|
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES ('wablas_token', '');
|
|
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES ('wablas_secret_key', '');
|
|
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES ('wablas_template_created', '');
|
|
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES ('wablas_template_pending', '');
|
|
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES ('wablas_template_accepted', '');
|
|
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES ('wablas_template_completed', '');
|
|
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES ('wablas_template_rejected', '');
|
|
END $$
|
|
DELIMITER ;
|
|
|
|
CALL apply_existing_install_patch();
|
|
DROP PROCEDURE IF EXISTS apply_existing_install_patch;
|
|
|
|
SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS;
|
|
|
|
-- Optional verification after import:
|
|
-- SHOW COLUMNS FROM sales_orders;
|
|
-- SELECT setting_key, setting_value FROM settings WHERE setting_key LIKE 'wablas%';
|