diff --git a/application/controllers/cpone/mcuoffline/Preregisterv3.php b/application/controllers/cpone/mcuoffline/Preregisterv3.php index 2e6ab86..dd36213 100644 --- a/application/controllers/cpone/mcuoffline/Preregisterv3.php +++ b/application/controllers/cpone/mcuoffline/Preregisterv3.php @@ -591,6 +591,25 @@ class Preregisterv3 extends MY_Controller } } + $qry_sync_project = $this->db->query( + "CALL cpone.sp_upsert_mcu_project_by_mgm_mcuid(?)", + array(intval($prm['xid'])) + ); + if (!$qry_sync_project) { + $last_qry = $this->db->last_query(); + $this->db->trans_rollback(); + $this->sys_error("call sp_upsert_mcu_project_by_mgm_mcuid : " . $last_qry); + exit; + } + if (isset($this->db->conn_id) && $this->db->conn_id instanceof mysqli) { + while ($this->db->conn_id->more_results() && $this->db->conn_id->next_result()) { + $dummyResult = $this->db->conn_id->store_result(); + if ($dummyResult instanceof mysqli_result) { + $dummyResult->free(); + } + } + } + if ($this->db->trans_status() === FALSE) { $this->db->trans_rollback(); $this->sys_error("Transaction Failed"); diff --git a/scripts/sql/2026-05-05_create_sp_upsert_mcu_project.sql b/scripts/sql/2026-05-05_create_sp_upsert_mcu_project.sql new file mode 100644 index 0000000..2840787 --- /dev/null +++ b/scripts/sql/2026-05-05_create_sp_upsert_mcu_project.sql @@ -0,0 +1,51 @@ +DROP PROCEDURE IF EXISTS cpone.sp_upsert_mcu_project_by_mgm_mcuid; +DELIMITER $$ +CREATE PROCEDURE cpone.sp_upsert_mcu_project_by_mgm_mcuid(IN p_mgm_mcuid INT) +BEGIN + INSERT INTO cpone_dashboard.mcu_project ( + Mcu_ProjectMcuID, + Mcu_ProjectCorporateID, + Mcu_ProjectCorporateName, + Mcu_ProjectNumber, + Mcu_ProjectLabel, + Mcu_ProjectBranchID, + Mcu_ProjectStartDate, + Mcu_ProjectEndDate, + Mcu_ProjectIsActive, + Mcu_ProjectTotalParticipant, + Mcu_ProjectSyncedAt + ) + SELECT + mm.Mgm_McuID, + mm.Mgm_McuCorporateID, + c.CorporateName AS Mcu_ProjectCorporateName, + mm.Mgm_McuNumber, + mm.Mgm_McuLabel, + mm.Mgm_McuM_BranchID, + NULLIF(mm.Mgm_McuStartDate, '0000-00-00') AS Mcu_ProjectStartDate, + NULLIF(mm.Mgm_McuEndDate, '0000-00-00') AS Mcu_ProjectEndDate, + mm.Mgm_McuIsActive, + ( + SELECT COUNT(*) + FROM cpone.mcu_preregister_patients pp + WHERE pp.Mcu_PreregisterPatientsMgm_McuID = mm.Mgm_McuID + ) AS Mcu_ProjectTotalParticipant, + NOW() AS Mcu_ProjectSyncedAt + FROM cpone.mgm_mcu mm + LEFT JOIN cpone.corporate c + ON c.CorporateID = mm.Mgm_McuCorporateID + WHERE mm.Mgm_McuID = p_mgm_mcuid + ON DUPLICATE KEY UPDATE + Mcu_ProjectCorporateID = VALUES(Mcu_ProjectCorporateID), + Mcu_ProjectCorporateName = VALUES(Mcu_ProjectCorporateName), + Mcu_ProjectNumber = VALUES(Mcu_ProjectNumber), + Mcu_ProjectLabel = VALUES(Mcu_ProjectLabel), + Mcu_ProjectBranchID = VALUES(Mcu_ProjectBranchID), + Mcu_ProjectStartDate = VALUES(Mcu_ProjectStartDate), + Mcu_ProjectEndDate = VALUES(Mcu_ProjectEndDate), + Mcu_ProjectIsActive = VALUES(Mcu_ProjectIsActive), + Mcu_ProjectTotalParticipant = VALUES(Mcu_ProjectTotalParticipant), + Mcu_ProjectSyncedAt = NOW(); + +END$$ +DELIMITER ; diff --git a/scripts/sql/2026-05-05_create_trigger_mgm_mcu_sync_mcu_project.sql b/scripts/sql/2026-05-05_create_trigger_mgm_mcu_sync_mcu_project.sql new file mode 100644 index 0000000..9779616 --- /dev/null +++ b/scripts/sql/2026-05-05_create_trigger_mgm_mcu_sync_mcu_project.sql @@ -0,0 +1,19 @@ +DROP TRIGGER IF EXISTS cpone.trg_mgm_mcu_ai_sync_mcu_project; +DELIMITER $$ +CREATE TRIGGER cpone.trg_mgm_mcu_ai_sync_mcu_project +AFTER INSERT ON cpone.mgm_mcu +FOR EACH ROW +BEGIN + CALL cpone.sp_upsert_mcu_project_by_mgm_mcuid(NEW.Mgm_McuID); +END$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS cpone.trg_mgm_mcu_au_sync_mcu_project; +DELIMITER $$ +CREATE TRIGGER cpone.trg_mgm_mcu_au_sync_mcu_project +AFTER UPDATE ON cpone.mgm_mcu +FOR EACH ROW +BEGIN + CALL cpone.sp_upsert_mcu_project_by_mgm_mcuid(NEW.Mgm_McuID); +END$$ +DELIMITER ;