From 667d8d2a1d67620441f5cc98de15b3a7eb89e099 Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Fri, 12 Jun 2026 11:36:43 +0700 Subject: [PATCH] FHM09062601IBL - trigger sync_order_total: update orderSubtotal+orderTotal otomatis Co-Authored-By: Claude Sonnet 4.6 --- ...-06-12-create-trigger-sync-order-total.sql | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 sql/manual_changes/2026-06-12-create-trigger-sync-order-total.sql diff --git a/sql/manual_changes/2026-06-12-create-trigger-sync-order-total.sql b/sql/manual_changes/2026-06-12-create-trigger-sync-order-total.sql new file mode 100644 index 00000000..7a370b30 --- /dev/null +++ b/sql/manual_changes/2026-06-12-create-trigger-sync-order-total.sql @@ -0,0 +1,88 @@ +-- Stored procedure: hitung total dari 3 tabel dan update orderSubtotal+orderTotal +DROP PROCEDURE IF EXISTS one_klinik.sync_order_total; + +DELIMITER $$ + +CREATE PROCEDURE one_klinik.sync_order_total(IN p_order_id INT) +BEGIN + DECLARE v_total DECIMAL(15,2); + SET v_total = ( + COALESCE((SELECT SUM(orderDetailOrderT_PriceTotal) + FROM one_klinik.order_detail_order + WHERE orderDetailOrderOrderID = p_order_id + AND orderDetailOrderIsActive = 'Y'), 0) + + + COALESCE((SELECT SUM(orderVaccineTotal) + FROM one_klinik.order_vaccine + WHERE orderVaccineOrderID = p_order_id + AND orderVaccineIsActive = 'Y'), 0) + + + COALESCE((SELECT SUM(orderTindakanTotal) + FROM one_klinik.order_tindakan + WHERE orderTindakanOrderID = p_order_id + AND orderTindakanIsActive = 'Y'), 0) + ); + UPDATE one_klinik.`order` + SET orderSubtotal = v_total, + orderTotal = v_total + WHERE orderID = p_order_id; +END$$ + +-- ── order_detail_order ──────────────────────────────────────────────────────── +DROP TRIGGER IF EXISTS one_klinik.trg_odo_ai$$ +CREATE TRIGGER one_klinik.trg_odo_ai + AFTER INSERT ON one_klinik.order_detail_order + FOR EACH ROW + CALL one_klinik.sync_order_total(NEW.orderDetailOrderOrderID)$$ + +DROP TRIGGER IF EXISTS one_klinik.trg_odo_au$$ +CREATE TRIGGER one_klinik.trg_odo_au + AFTER UPDATE ON one_klinik.order_detail_order + FOR EACH ROW + CALL one_klinik.sync_order_total(NEW.orderDetailOrderOrderID)$$ + +DROP TRIGGER IF EXISTS one_klinik.trg_odo_ad$$ +CREATE TRIGGER one_klinik.trg_odo_ad + AFTER DELETE ON one_klinik.order_detail_order + FOR EACH ROW + CALL one_klinik.sync_order_total(OLD.orderDetailOrderOrderID)$$ + +-- ── order_vaccine ───────────────────────────────────────────────────────────── +DROP TRIGGER IF EXISTS one_klinik.trg_ov_ai$$ +CREATE TRIGGER one_klinik.trg_ov_ai + AFTER INSERT ON one_klinik.order_vaccine + FOR EACH ROW + CALL one_klinik.sync_order_total(NEW.orderVaccineOrderID)$$ + +DROP TRIGGER IF EXISTS one_klinik.trg_ov_au$$ +CREATE TRIGGER one_klinik.trg_ov_au + AFTER UPDATE ON one_klinik.order_vaccine + FOR EACH ROW + CALL one_klinik.sync_order_total(NEW.orderVaccineOrderID)$$ + +DROP TRIGGER IF EXISTS one_klinik.trg_ov_ad$$ +CREATE TRIGGER one_klinik.trg_ov_ad + AFTER DELETE ON one_klinik.order_vaccine + FOR EACH ROW + CALL one_klinik.sync_order_total(OLD.orderVaccineOrderID)$$ + +-- ── order_tindakan ──────────────────────────────────────────────────────────── +DROP TRIGGER IF EXISTS one_klinik.trg_ot_ai$$ +CREATE TRIGGER one_klinik.trg_ot_ai + AFTER INSERT ON one_klinik.order_tindakan + FOR EACH ROW + CALL one_klinik.sync_order_total(NEW.orderTindakanOrderID)$$ + +DROP TRIGGER IF EXISTS one_klinik.trg_ot_au$$ +CREATE TRIGGER one_klinik.trg_ot_au + AFTER UPDATE ON one_klinik.order_tindakan + FOR EACH ROW + CALL one_klinik.sync_order_total(NEW.orderTindakanOrderID)$$ + +DROP TRIGGER IF EXISTS one_klinik.trg_ot_ad$$ +CREATE TRIGGER one_klinik.trg_ot_ad + AFTER DELETE ON one_klinik.order_tindakan + FOR EACH ROW + CALL one_klinik.sync_order_total(OLD.orderTindakanOrderID)$$ + +DELIMITER ;