347 lines
12 KiB
SQL
347 lines
12 KiB
SQL
-- Date: 2026-04-23
|
|
-- Commit message stem: Fix resultentry save trigger log created
|
|
-- Target: devone / one_lab
|
|
-- Reason:
|
|
-- t_orderdetail_au failed on UPDATE with:
|
|
-- ERROR 1136 (21S01): Column count doesn't match value count at row 1
|
|
-- Root cause:
|
|
-- INSERT into one_lab_log.log_orderdetail listed Log_OrderDetailCreated
|
|
-- but did not provide a corresponding VALUES entry.
|
|
-- Fix:
|
|
-- restore the trigger and add NOW() for Log_OrderDetailCreated.
|
|
|
|
DELIMITER //
|
|
|
|
DROP TRIGGER IF EXISTS t_orderdetail_au//
|
|
|
|
CREATE TRIGGER t_orderdetail_au AFTER UPDATE ON t_orderdetail
|
|
FOR EACH ROW
|
|
BEGIN
|
|
|
|
DECLARE count_lab INTEGER;
|
|
DECLARE cnt_rst_a INTEGER;
|
|
DECLARE cnt_rst_b INTEGER;
|
|
DECLARE cnt_ver_n INTEGER;
|
|
DECLARE cnt_val_n INTEGER;
|
|
DECLARE cnt_rst CHAR(1);
|
|
DECLARE cnt_ver CHAR(1);
|
|
DECLARE cnt_val CHAR(1);
|
|
DECLARE ROUNDING double;
|
|
DECLARE TYPE_LOG VARCHAR(50);
|
|
|
|
DECLARE ref CHAR(1);
|
|
DECLARE ref_id INTEGER;
|
|
|
|
DECLARE nat_test_id INTEGER;
|
|
DECLARE curr_pre_analytic CHAR(1);
|
|
DECLARE pre_analytic CHAR(1) DEFAULT 'N';
|
|
|
|
DECLARE sumx DOUBLE;
|
|
SET sumx = 0;
|
|
|
|
SET sumx = (
|
|
SELECT SUM(IFNULL(T_OrderDetailTotal, 0))
|
|
FROM t_orderdetail
|
|
WHERE T_OrderDetailT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
);
|
|
|
|
SET sumx = (
|
|
SELECT SUM(IFNULL(T_OrderDetailTotal, 0))
|
|
FROM t_orderdetail
|
|
WHERE T_OrderDetailT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
);
|
|
|
|
IF sumx IS NULL THEN
|
|
SET sumx = 0;
|
|
END IF;
|
|
|
|
SET ROUNDING = MOD(sumx, 500);
|
|
SET sumx = sumx - MOD(sumx, 500);
|
|
|
|
UPDATE t_orderheader
|
|
SET T_OrderHeaderSubTotal = sumx,
|
|
T_OrderHeaderRounding = ROUNDING
|
|
WHERE T_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID;
|
|
|
|
IF NEW.T_OrderDetailIsActive = 'N'
|
|
AND OLD.T_OrderDetailIsActive = 'Y'
|
|
AND NEW.T_OrderDetailT_TestIsPrice = 'Y' THEN
|
|
INSERT INTO one_log.log_px(Log_PxCode, Log_PxJson, Log_PxUserID)
|
|
SELECT 'FO.DELPX',
|
|
JSON_OBJECT('test_id', NEW.T_OrderDetailT_TestID, 'old_is_active', 'Y', 'new_is_active', 'N'),
|
|
0;
|
|
END IF;
|
|
|
|
IF NEW.T_OrderDetailIsActive = 'N' AND OLD.T_OrderDetailIsActive = 'Y' THEN
|
|
UPDATE so_resultentry
|
|
SET So_ResultEntryIsActive = 'N'
|
|
WHERE So_ResultEntryT_OrderDetailID = NEW.T_OrderDetailID;
|
|
|
|
UPDATE t_samplingso
|
|
SET T_SamplingSoIsActive = 'N'
|
|
WHERE T_SamplingSoT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID
|
|
AND T_SamplingSoT_TestID = NEW.T_OrderDetailT_TestID;
|
|
|
|
SET count_lab = (
|
|
SELECT COUNT(T_OrderDetailID)
|
|
FROM t_orderdetail
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
|
|
JOIN nat_group ON Nat_GroupID = T_TestNat_GroupID
|
|
AND Nat_GroupCode = 1
|
|
AND Nat_GroupIsActive = 'Y'
|
|
WHERE T_OrderDetailIsActive = 'Y'
|
|
AND T_OrderDetailT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID
|
|
);
|
|
|
|
IF count_lab = 0 THEN
|
|
UPDATE helper_order
|
|
SET Helper_OrderIsLAB = 'N'
|
|
WHERE Helper_OrderT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID;
|
|
ELSE
|
|
UPDATE helper_order
|
|
SET Helper_OrderIsLAB = 'Y'
|
|
WHERE Helper_OrderT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID;
|
|
END IF;
|
|
END IF;
|
|
|
|
IF NEW.T_OrderDetailT_TestIsResult = 'Y' THEN
|
|
SELECT COUNT(T_OrderDetailID),
|
|
SUM(IF(T_OrderDetailResult <> '' AND T_OrderDetailResult IS NOT NULL, 1, 0)),
|
|
SUM(IF(T_OrderDetailVerification = 'Y', 1, 0)),
|
|
SUM(IF(T_OrderDetailValidation = 'Y', 1, 0))
|
|
INTO cnt_rst_a, cnt_rst_b, cnt_ver_n, cnt_val_n
|
|
FROM t_orderdetail
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
|
|
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
|
|
AND DocumentationGroupDetailIsActive = 'Y'
|
|
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
|
|
AND DocumentationGroupName = 'lab'
|
|
WHERE T_OrderDetailIsActive = 'Y'
|
|
AND T_OrderDetailT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID
|
|
AND T_OrderDetailT_TestIsResult = 'Y';
|
|
|
|
IF OLD.T_OrderDetailResult <> NEW.T_OrderDetailResult THEN
|
|
IF cnt_rst_a = cnt_rst_b THEN
|
|
SET cnt_rst = 'Y';
|
|
ELSE
|
|
SET cnt_rst = 'N';
|
|
END IF;
|
|
|
|
UPDATE t_orderheaderaddon
|
|
SET T_OrderHeaderAddonResultDone = cnt_rst
|
|
WHERE T_OrderHeaderAddOnT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID;
|
|
END IF;
|
|
|
|
IF OLD.T_OrderDetailVerification <> NEW.T_OrderDetailVerification THEN
|
|
IF cnt_rst_a = cnt_ver_n THEN
|
|
SET cnt_ver = 'Y';
|
|
ELSE
|
|
SET cnt_ver = 'N';
|
|
END IF;
|
|
|
|
IF cnt_rst_a <> cnt_ver_n AND cnt_ver_n > 0 THEN
|
|
SET cnt_ver = 'P';
|
|
END IF;
|
|
|
|
UPDATE t_orderheaderaddon
|
|
SET T_OrderHeaderAddonVerificationDone = cnt_ver
|
|
WHERE T_OrderHeaderAddOnT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID;
|
|
END IF;
|
|
|
|
IF OLD.T_OrderDetailValidation <> NEW.T_OrderDetailValidation THEN
|
|
IF cnt_rst_a = cnt_val_n THEN
|
|
SET cnt_val = 'Y';
|
|
ELSE
|
|
SET cnt_val = 'N';
|
|
END IF;
|
|
|
|
IF cnt_rst_a <> cnt_val_n AND cnt_val_n > 0 THEN
|
|
SET cnt_val = 'P';
|
|
END IF;
|
|
|
|
UPDATE t_orderheaderaddon
|
|
SET T_OrderHeaderAddonValidationDone = cnt_val
|
|
WHERE T_OrderHeaderAddOnT_OrderHeaderID = NEW.T_OrderDetailT_OrderHeaderID;
|
|
END IF;
|
|
END IF;
|
|
|
|
IF NEW.T_OrderDetailT_TestIsResult = 'Y' THEN
|
|
IF NEW.T_OrderDetailResult <> OLD.T_OrderDetailResult
|
|
OR (NEW.T_OrderDetailResult IS NOT NULL AND OLD.T_OrderDetailResult IS NULL) THEN
|
|
SELECT T_OrderDetailAddOnRef, T_OrderDetailAddOnRefID
|
|
INTO ref, ref_id
|
|
FROM t_orderdetailaddon
|
|
WHERE T_OrderDetailAddOnT_OrderDetailID = NEW.T_OrderDetailID
|
|
AND T_OrderDetailAddOnIsActive = 'Y'
|
|
LIMIT 1;
|
|
|
|
IF ref = 'X' THEN
|
|
INSERT INTO xfer_internal(
|
|
Xfer_InternalType,
|
|
Xfer_InternalDataType,
|
|
Xfer_InternalSrcM_BranchID,
|
|
Xfer_InternalDestM_BranchID,
|
|
Xfer_InternalRefID,
|
|
Xfer_InternalJson
|
|
)
|
|
SELECT 'O',
|
|
'RES.RESULT',
|
|
Xfer_InternalDestM_BranchID,
|
|
Xfer_InternalSrcM_BranchID,
|
|
Xfer_InternalRefID,
|
|
JSON_OBJECT(
|
|
'ref_detail_id', Xfer_InternalDetailSrcRefID,
|
|
'test_id', NEW.T_OrderDetailT_TestID,
|
|
'test_result', NEW.T_OrderDetailResult,
|
|
'test_result_note', IFNULL(NEW.T_OrderDetailNote, ''),
|
|
'normal_id', NEW.T_OrderDetailNat_NormalValueID,
|
|
'methode_id', NEW.T_OrderDetailNat_MethodeID
|
|
)
|
|
FROM xfer_internaldetail
|
|
JOIN xfer_internal ON Xfer_InternalID = Xfer_InternalDetailXfer_InternalID
|
|
WHERE Xfer_InternalDetailID = ref_id;
|
|
END IF;
|
|
|
|
SET nat_test_id = (
|
|
SELECT T_TestNat_TestID
|
|
FROM t_test
|
|
WHERE T_TestID = NEW.T_OrderDetailT_TestID
|
|
);
|
|
|
|
SET curr_pre_analytic = (
|
|
SELECT T_OrderDetailAddOnPreAnalytic
|
|
FROM t_orderdetailaddon
|
|
WHERE T_OrderDetailAddOnT_OrderDetailID = NEW.T_OrderDetailID
|
|
AND T_OrderDetailAddOnIsActive = 'Y'
|
|
);
|
|
|
|
IF curr_pre_analytic = 'N' THEN
|
|
SET pre_analytic = (
|
|
SELECT PreAnalyticIsOk
|
|
FROM pre_analytic
|
|
WHERE PreAnalyticNat_TestID = nat_test_id
|
|
AND PreAnalyticDate = DATE(NOW())
|
|
AND PreAnalyticIsActive = 'Y'
|
|
LIMIT 1
|
|
);
|
|
|
|
IF pre_analytic IS NULL THEN
|
|
SET pre_analytic = 'N';
|
|
END IF;
|
|
|
|
UPDATE t_orderdetailaddon
|
|
SET T_OrderDetailAddOnPreAnalytic = pre_analytic,
|
|
T_OrderDetailAddOnPreAnalyticDate = NOW()
|
|
WHERE T_OrderDetailAddOnT_OrderDetailID = NEW.T_OrderDetailID;
|
|
END IF;
|
|
END IF;
|
|
|
|
IF OLD.T_OrderDetailVerification <> 'Y' AND NEW.T_OrderDetailVerification = 'Y' THEN
|
|
SELECT T_OrderDetailAddOnRef, T_OrderDetailAddOnRefID
|
|
INTO ref, ref_id
|
|
FROM t_orderdetailaddon
|
|
WHERE T_OrderDetailAddOnT_OrderDetailID = NEW.T_OrderDetailID
|
|
AND T_OrderDetailAddOnIsActive = 'Y'
|
|
LIMIT 1;
|
|
|
|
IF ref = 'X' THEN
|
|
INSERT INTO xfer_internal(
|
|
Xfer_InternalType,
|
|
Xfer_InternalDataType,
|
|
Xfer_InternalSrcM_BranchID,
|
|
Xfer_InternalDestM_BranchID,
|
|
Xfer_InternalRefID,
|
|
Xfer_InternalJson
|
|
)
|
|
SELECT 'O',
|
|
'RES.VERIFY',
|
|
Xfer_InternalDestM_BranchID,
|
|
Xfer_InternalSrcM_BranchID,
|
|
Xfer_InternalRefID,
|
|
JSON_OBJECT(
|
|
'ref_detail_id', Xfer_InternalDetailSrcRefID,
|
|
'test_id', NEW.T_OrderDetailT_TestID,
|
|
'test_result', NEW.T_OrderDetailResult,
|
|
'delta_check', NEW.T_OrderDetailVerDeltaCheck,
|
|
'trend_analysis', NEW.T_OrderDetailVerTrendAnalysis,
|
|
'verification', NEW.T_OrderDetailVerification,
|
|
'verification_date', NEW.T_OrderDetailVerDate,
|
|
'normal_id', NEW.T_OrderDetailNat_NormalValueID
|
|
)
|
|
FROM xfer_internaldetail
|
|
JOIN xfer_internal ON Xfer_InternalID = Xfer_InternalDetailXfer_InternalID
|
|
WHERE Xfer_InternalDetailID = ref_id;
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
|
|
UPDATE t_orderdetail_ss
|
|
SET t_orderDetailSsH1Result = NEW.T_OrderDetailResult
|
|
WHERE t_orderDetailSsH1ID = NEW.T_OrderDetailID;
|
|
|
|
IF NEW.T_OrderDetailResult <> OLD.T_OrderDetailResult THEN
|
|
SET TYPE_LOG = 'RESULTENTRY_TR';
|
|
|
|
INSERT INTO one_lab_log.log_orderdetail(
|
|
Log_OrderDetailStatus,
|
|
Log_OrderDetailT_OrderDetailID,
|
|
Log_OrderDetailResult,
|
|
Log_OrderDetailJSON,
|
|
Log_OrderDetailCreated,
|
|
Log_OrderDetailUserID
|
|
)
|
|
VALUES(
|
|
TYPE_LOG,
|
|
NEW.T_OrderDetailID,
|
|
NEW.T_OrderDetailResult,
|
|
JSON_OBJECT(
|
|
'T_OrderDetailID', NEW.T_OrderDetailID,
|
|
'T_OrderDetailT_TestID', NEW.T_OrderDetailT_TestID,
|
|
'T_OrderDetailT_TestCode', NEW.T_OrderDetailT_TestCode,
|
|
'T_OrderDetailT_TestSasCode', NEW.T_OrderDetailT_TestSasCode,
|
|
'T_OrderDetailT_TestName', NEW.T_OrderDetailT_TestName,
|
|
'T_OrderDetailT_TestIsResult', NEW.T_OrderDetailT_TestIsResult,
|
|
'T_OrderDetailT_TestIsPrice', NEW.T_OrderDetailT_TestIsPrice,
|
|
'T_OrderDetailReq', NEW.T_OrderDetailReq,
|
|
'T_OrderDetailReqNote', NEW.T_OrderDetailReqNote,
|
|
'T_OrderDetailIsCito', NEW.T_OrderDetailIsCito,
|
|
'T_OrderDetailPrice', NEW.T_OrderDetailPrice,
|
|
'T_OrderDetailDisc', NEW.T_OrderDetailDisc,
|
|
'T_OrderDetailDiscAmount', NEW.T_OrderDetailDiscAmount,
|
|
'T_OrderDetailDiscTotal', NEW.T_OrderDetailDiscTotal,
|
|
'T_OrderDetailTotal', NEW.T_OrderDetailTotal,
|
|
'T_OrderDetailHasResult', NEW.T_OrderDetailHasResult,
|
|
'T_OrderDetailResult', NEW.T_OrderDetailResult,
|
|
'T_OrderDetailResult_OLD', OLD.T_OrderDetailResult,
|
|
'T_OrderDetailResultFlag', NEW.T_OrderDetailResultFlag,
|
|
'T_OrderDetailNote', NEW.T_OrderDetailNote,
|
|
'T_OrderDetailNat_UnitID', NEW.T_OrderDetailNat_UnitID,
|
|
'T_OrderDetailNat_UnitName', NEW.T_OrderDetailNat_UnitName,
|
|
'T_OrderDetailT_OrderPromiseID', NEW.T_OrderDetailT_OrderPromiseID,
|
|
'T_OrderDetailNat_InstrumentID', NEW.T_OrderDetailNat_InstrumentID,
|
|
'T_OrderDetailVerDeltaCheck', NEW.T_OrderDetailVerDeltaCheck,
|
|
'T_OrderDetailVerTrendAnalysis', NEW.T_OrderDetailVerTrendAnalysis,
|
|
'T_OrderDetailVerification', NEW.T_OrderDetailVerification,
|
|
'T_OrderDetailVerDate', NEW.T_OrderDetailVerDate,
|
|
'T_OrderDetailVerUserID', NEW.T_OrderDetailVerUserID,
|
|
'T_OrderDetailValMRState', NEW.T_OrderDetailValMRState,
|
|
'T_OrderDetailValidation', NEW.T_OrderDetailValidation,
|
|
'T_OrderDetailValDate', NEW.T_OrderDetailValDate,
|
|
'T_OrderDetailValUserID', NEW.T_OrderDetailValUserID,
|
|
'T_OrderDetailNat_NormalValueID', NEW.T_OrderDetailNat_NormalValueID,
|
|
'T_OrderDetailNormalValueNote', NEW.T_OrderDetailNormalValueNote,
|
|
'T_OrderDetailNormalValueDescription', NEW.T_OrderDetailNormalValueDescription,
|
|
'T_OrderDetailMinValue', NEW.T_OrderDetailMinValue,
|
|
'T_OrderDetailMaxValue', NEW.T_OrderDetailMaxValue
|
|
),
|
|
NOW(),
|
|
NEW.T_OrderDetailLastUpdatedUserID
|
|
);
|
|
END IF;
|
|
|
|
END//
|
|
|
|
DELIMITER ;
|