db->query($sql, [$nolab]);
if (!$qry) {
$this->reply_error(
$this->db->error()["message"] . "\n|" . $this->db->last_query()
);
exit();
}
$rows = $qry->result_array();
foreach ($rows as $idx => $r) {
$rows[$idx]["Process"] =
" Debug ";
}
$this->print_table_style();
$this->print_table($rows, array_keys($rows[0]));
}
function list($date = "", $format = "html")
{
if ($date == "") {
$date = date("Y-m-d");
}
$start = $date . " 00:00:01";
$end = $date . " 23:59:59";
$sql = "select
T_OrderHeaderDate, T_OrderHeaderLabNumber,
AutoValidDate,
AutoValidHaveReq HaveRequirement,
AutoValidIsOk,
T_OrderDetailT_TestName T_TestName,
-- Nat_MethodeName,
Nat_ConditionName,
replace(AutoValidNote,'\n','
') Note
,replace(AutoVerifTrendAnalysisNote,'\n','
') VerifNote
,T_OrderDetailID
from auto_valid
join auto_verif on AutoValidT_OrderDetailID = AutoVerifT_OrderDetailID
join t_orderdetail on AutoValidT_OrderDetailID = T_OrderDetailID
and T_OrderDetailIsActive = 'Y'
join t_orderheader on T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
join t_test on T_OrderDetailT_TestID = T_TestID
and T_TestNat_GroupID = 1
left join nat_methode on AutoValidNat_MethodeID = Nat_MethodeID
left join nat_condition on AutoValidNat_ConditionID = Nat_ConditionID
where T_OrderHeaderDate >= ? and T_OrderHeaderDate <= ?
order by T_OrderHeaderID, T_TestSasCode
";
$qry = $this->db->query($sql, [$start, $end]);
if (!$qry) {
echo "Error : " .
$this->db->error()["message"] .
" | " .
$this->db->last_query();
exit();
}
$rows = $qry->result_array();
$header = [];
$header[] = [
"TotalPx" => 0,
"TotalAutoValid" => 0,
];
$prevLabNo = "";
foreach ($rows as $idx => $r) {
if ($r["HaveRequirement"] == "N" && $r["AutoValidIsOk"] == "Y") {
$header[0]["TotalAutoValid"]++;
}
$header[0]["TotalPx"]++;
if ($r["T_OrderHeaderLabNumber"] == $prevLabNo) {
$rows[$idx]["T_OrderHeaderLabNumber"] = "";
$rows[$idx]["T_OrderHeaderDate"] = "";
}
$prevLabNo = $r["T_OrderHeaderLabNumber"];
$rows[$idx]["Telusur"] =
" Check ";
if ($r["AutoValidIsReviewRange"] != "Y") {
$rows[$idx]["AutoValidNote"] .=
($r["AutoValidNote"] != "" ? "|" : "") . $r["VerifNote"];
}
unset($rows[$idx]["T_OrderDetailID"]);
unset($rows[$idx]["VerifNote"]);
}
if ($format == "html") {
$this->print_table_style();
$this->print_table($header, array_keys($header[0]));
$this->print_table($rows, array_keys($rows[0]));
}
}
function index()
{
$this->list();
}
function get_param()
{
$jparam = file_get_contents("php://input");
$param = json_decode($jparam, true);
return $param;
}
function calculate($id, $debug = false)
{
$sql = "select T_OrderDetailID, T_OrderDetailT_OrderHeaderID,
ifnull(T_OrderReqStatus,'Y') T_OrderReqStatus,
T_TestName, T_OrderDetailID, T_OrderDetailVerDate, T_OrderDetailVerUserID,
T_OrderDetailResult, T_OrderDetailNat_NormalValueID, T_OrderDetailNat_MethodeID,
M_UserUserName, T_OrderDetailMinValue,T_OrderDetailMinValueInclusive,
T_OrderDetailMaxValue, T_OrderDetailMaxValueInclusive, T_OrderdetailNat_MethodeName,
T_TestNat_TestID, ifnull(AutoVerifReviewRangeIsOK,'N') ReviewRangeIsOK,
AutoVerifTrendAnalysisImage
from t_orderdetail
join t_test on T_OrderDetailIsActive = 'Y'
and T_OrderDetailT_TestID = T_TestID
and T_OrderDetailVerification = 'Y'
and T_TestIsResult = 'Y'
join auto_verif on AutoVerifT_OrderDetailID = T_OrderDetailID
join m_user on T_OrderDetailVerUserID = M_UserID
left join t_orderreq on T_OrderDetailT_OrderHeaderID = T_OrderReqT_OrderHeaderID
and T_OrderReqIsActive = 'Y'
where T_OrderDetailID = ?
and T_OrderDetailID not in (select AutoValidT_OrderDetailID from auto_valid where AutoValidIsActive = 'Y' )";
if ($debug) {
$sql = "select T_OrderDetailID, T_OrderDetailT_OrderHeaderID,
ifnull(T_OrderReqStatus,'Y') T_OrderReqStatus,
T_TestName, T_OrderDetailID, T_OrderDetailVerDate, T_OrderDetailVerUserID,
T_OrderDetailResult, T_OrderDetailNat_NormalValueID, T_OrderDetailNat_MethodeID,
M_UserUserName, T_OrderDetailMinValue,T_OrderDetailMinValueInclusive,
T_OrderDetailMaxValue, T_OrderDetailMaxValueInclusive, T_OrderdetailNat_MethodeName,
T_TestNat_TestID, ifnull(AutoVerifReviewRangeIsOK,'N') ReviewRangeIsOK,
AutoVerifTrendAnalysisImage
from t_orderdetail
join t_test on T_OrderDetailIsActive = 'Y'
and T_OrderDetailT_TestID = T_TestID
and T_OrderDetailVerification = 'Y'
and T_TestIsResult = 'Y'
join auto_verif on AutoVerifT_OrderDetailID = T_OrderDetailID
join m_user on T_OrderDetailVerUserID = M_UserID
left join t_orderreq on T_OrderDetailT_OrderHeaderID = T_OrderReqT_OrderHeaderID
and T_OrderReqIsActive = 'Y'
where T_OrderDetailID = ?";
}
$qry = $this->db->query($sql, [$id]);
if (!$qry) {
$this->reply_error(
$this->db->error()["message"] . "\n|" . $this->db->last_query()
);
exit();
}
$rows = $qry->result_array();
if (count($rows) == 0) {
if ($debug) {
echo "OrderDetail Not Found";
}
return false;
}
$r = $rows[0];
$haveReq = "N";
if ($r["T_OrderReqStatus"] != "Y") {
$haveReq = "Y";
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => "Tidak berlaku, karena ada catatan",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
if ($r["ReviewRangeIsOK"] != "Y") {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" =>
"Tidak berlaku, Review Range tidak terpenuhi",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
if (!is_numeric($r["T_OrderDetailResult"])) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => "Tidak berlaku, karena hasil bukan numerik",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
if (
!(
$r["T_OrderDetailNat_NormalValueID"] > 0 &&
$r["T_OrderDetailNat_MethodeID"] > 0
)
) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" =>
"Tidak berlaku, karena tidak ada Normal Value atau Methode",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
$minValue = $r["T_OrderDetailMinValue"];
$maxValue = $r["T_OrderDetailMaxValue"];
$minInclusive = $r["T_OrderDetailMinValueInclusive"];
$maxInclusive = $r["T_OrderDetailMaxValueInclusive"];
$methodeID = $r["T_OrderDetailNat_MethodeID"];
$methode = $r["T_OrderdetailNat_MethodeName"];
$value = $r["T_OrderDetailResult"];
$theTestName = $r["T_TestName"];
$nat_test_id = $r["T_TestNat_TestID"];
$headerID = $r["T_OrderDetailT_OrderHeaderID"];
try {
$n_value = floatval($value);
$n_minValue = floatval($minValue);
$n_maxValue = floatval($maxValue);
} catch (Exception $e) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" =>
"Multirule tidak berlaku karena Normal Value Min / Max tidak numerik",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
// Klasifikasi hasil
$conditionID = 0;
$condition = "Unknown";
if (
$n_value < $n_minValue ||
($n_value <= $n_minValue && $minInclusive == "N")
) {
$conditionID = 1;
$condition = "Low";
} elseif (
$n_value > $n_maxValue ||
($n_value >= $n_maxValue && $maxInclusive == "N")
) {
$conditionID = 3;
$condition = "High";
} else {
$conditionID = 2;
$condition = "Normal";
}
if ($conditionID == 0) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => "Multirule tidak berlaku karena kondisi Low/Normal/High tidak bisa ditentukan [ $n_value | min : $n_minValue | max : $n_maxValue ]",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
$sql = "select * from nat_multirule
where NatMultiruleIsActive = 'Y' and NatMultiruleNat_TestID = ?
and ( NatMultiruleNat_MethodeID is null or NatMultiruleNat_MethodeID = 0 or NatMultiruleNat_MethodeID = ?
or NatMultiruleIsAllMethode='Y' )
and NatMultiruleNat_ConditionID = ?
order by NatMultiruleNat_MethodeID desc
limit 0,1";
$qry = $this->db->query($sql, [$nat_test_id, $methodeID, $conditionID]);
if ($debug) {
$arr = [];
$arr[] = ["Query" => $this->db->last_query()];
$this->print_table_style();
$this->print_table($arr, array_keys($arr[0]));
}
if (!$qry) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" =>
"Multirule tidak berlaku karena multirule belum di setup [ $theTestName | kondisi : $condition | methode : $methode ]" .
$this->db->error()["message"],
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
$rows_rule = $qry->result_array();
if (count($rows_rule) == 0) {
if ($conditionID == 2) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => "Terpenuhi, $theTestName untuk kondisi $condition dengan methode $methode tidak memiliki reflex test.",
"AutoValidIsOk" => "Y",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" =>
$r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => "Tidak terpenuhi, $theTestName untuk kondisi $condition dengan methode $methode tidak memiliki reflex test.",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
$r_rule = $rows_rule[0];
$mrID = $r_rule["NatMultiruleID"];
if (count($rows_rule) > 0) {
// print_r($rows_rule);
}
//Extra Low
if ($conditionID == 1) {
try {
$n_x_low = floatval($r_rule["NatMultiruleExtraLow"]);
} catch (Exception $e) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" =>
"Tidak berlaku, karena masterdata extra low bukan numerik",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_MethodeID" =>
$r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
if ($n_x_low > $n_value) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => "Tidak berlaku, karena hasil lebih rendah dari extra low [ $n_value < $n_x_low ]",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_MethodeID" =>
$r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
}
//Extra Hight
if ($conditionID == 3) {
try {
$n_x_high = floatval($r_rule["NatMultiruleExtraHigh"]);
} catch (Exception $e) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" =>
"Tidak berlaku, karena masterdata extra high bukan numerik",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" =>
$r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
if ($n_x_high < $n_value) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => "Tidak berlaku, karena hasil lebih tinggi dari extra hight [ $n_value > $n_x_high]",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" =>
$r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
}
//Argument 1
$sql = "select distinct Nat_ReflexTestID,
Nat_TestName, Nat_ConditionName, Nat_TestID,
Nat_ReflexTestNat_ConditionID,
T_OrderDetailNat_NormalValueID, T_OrderDetailResult, T_OrderDetailNat_MethodeName,
T_OrderDetailMaxValueInclusive, T_OrderDetailMinValueInclusive,
T_OrderDetailMinValue, T_OrderDetailMaxValue, T_OrderDetailVerification
from
nat_reflextest
join nat_condition on Nat_ReflexTestNat_ConditionID = Nat_ConditionID and Nat_ReflexTestIsActive = 'Y'
join nat_test on Nat_ReflexTestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y'
and Nat_ReflexTestIsActive = 'Y' and Nat_ReflexTestNatMultiRuleID = ?
join t_test on Nat_TestID = T_TestNat_TestID and T_TestIsActive = 'Y'
join t_orderdetail on T_TestID = T_OrderDetailT_TestID
and T_OrderDetailIsActive = 'Y' and T_OrderDetailT_OrderHeaderID = ?
order by Nat_ReflexTestID, Nat_ReflexTestNat_RelationID desc";
$qry = $this->db->query($sql, [$mrID, $headerID]);
if (!$qry) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" =>
"Tidak berlaku, karena $theTestName dengan kondisi $condition, tidak memiliki masterdata Argument 1" .
"|" .
$this->db->error()["message"],
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
$rows_reflex = $qry->result_array();
if (count($rows_reflex) == 0) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => "Tidak berlaku, karena $theTestName dengan kondisi $condition, tidak memiliki masterdata Argument 1",
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
$argument_1_list = [];
$arr_px_1 = [];
foreach ($rows_reflex as $rfx) {
$rfx_conditionID = $rfx["Nat_ReflexTestNat_ConditionID"];
$rfx_conditionName = $rfx["Nat_ConditionName"];
$rfx_nat_TestID = $rfx["Nat_TestID"];
if (isset($arr_px_1[$rfx_nat_TestID])) {
$rfx_idx = $arr_px_1[$rfx_nat_TestID];
} else {
$argument_1_list[] = [
"px" => $rfx["Nat_TestName"],
"pxID" => $rfx["Nat_TestID"],
"reflexID" => $rfx["Nat_ReflexTestID"],
"is_ok" => false,
"is_show_mandatory" => false,
"condition" => $rfx_conditionName,
"conditionID" => $rfx_conditionID,
"note" => "",
];
$rfx_idx = count($argument_1_list) - 1;
$arr_px_1[$rfx_nat_TestID] = $rfx_idx;
}
// nat test ini sdh terpenuhi
if ($argument_1_list[$rfx_idx]["is_ok"] === true) {
continue;
}
if ($rfx["T_OrderDetailVerification"] != "Y") {
$argument_1_list[$rfx_idx]["note"] =
"Reflex Test [" .
$rfx["Nat_TestName"] .
"] belum di verifikasi";
continue;
}
if (!($rfx["T_OrderDetailNat_NormalValueID"] > 0)) {
$argument_1_list[$rfx_idx]["note"] =
"Reflex Test [" .
$rfx["Nat_TestName"] .
"] belum memiliki nilai normal";
continue;
}
try {
$d_value = floatval($rfx["T_OrderDetailResult"]);
$d_min_value = floatval($rfx["T_OrderDetailMinValue"]);
$d_max_value = floatval($rfx["T_OrderDetailMaxValue"]);
$d_min_inclusive = $rfx["T_OrderDetailMinValueInclusive"];
$d_max_inclusive = $rfx["T_OrderDetailMaxValueInclusive"];
$rfx_condition = "Unknown";
$argument_1_list[$rfx_idx]["result"] = $rfx_condition;
if (
$d_value < $d_min_value ||
($d_value <= $d_min_value && $d_min_inclusive == "N")
) {
$rfx_conditionID = 1;
$rfx_condition = "Low";
} elseif (
$d_value > $d_max_value ||
($d_value >= $d_max_value && $d_max_inclusive == "N")
) {
$rfx_conditionID = 3;
$rfx_condition = "High";
} else {
$rfx_conditionID = 2;
$rfx_condition = "Normal";
}
if ($rfx_conditionID == 0) {
$argument_1_list[$rfx_idx]["note"] =
"Reflex Test [" .
$rfx["Nat_TestName"] .
"] kondisi [ Low/Normal/Hight ] tidak bisa ditentukan ";
continue;
}
$argument_1_list[$rfx_idx]["result"] = $rfx_condition;
if ($rfx_conditionID == $rfx["Nat_ReflexTestNat_ConditionID"]) {
$argument_1_list[$rfx_idx]["note"] =
"Reflex Test [" .
$rfx["Nat_TestName"] .
"] hasil $rfx_condition, Argument 1 " .
$rfx["Nat_ConditionName"];
$argument_1_list[$rfx_idx]["is_ok"] = true;
$argument_1_list[$rfx_idx]["is_show_mandatory"] = true;
$argument_1_list[$rfx_idx]["reflexID"] =
$rfx["Nat_ReflexTestID"];
$argument_1_list[$rfx_idx][
"condition"
] = $rfx_conditionName;
$argument_1_list[$rfx_idx][
"conditionID"
] = $rfx_conditionID;
} else {
$argument_1_list[$rfx_idx]["note"] =
"Reflex Test [" .
$rfx["Nat_TestName"] .
"] hasil $rfx_condition, Argument 1 " .
$rfx["Nat_ConditionName"];
$argument_1_list[$rfx_idx]["reflexID"] =
$rfx["Nat_ReflexTestID"];
$argument_1_list[$rfx_idx]["is_ok"] = false;
}
} catch (Exception $e) {
$argument_1_list[$rfx_idx]["note"] =
"Reflex Test [" .
$rfx["Nat_TestName"] .
"] kondisi [ Low/Normal/Hight ] tidak bisa ditentukan ( konversi numerik )";
continue;
}
if ($debug) {
//echo "
";
//print_r($argument_1_list);
//echo "";
}
}
$flag_error = false;
$s_ids = "0";
//cari reflex yg memenuhi
foreach ($argument_1_list as $list) {
if ($list["is_ok"] == false) {
$flag_error = true;
continue;
}
$s_ids .= "," . $list["reflexID"];
}
// Mandatory
$sql = "select Nat_ReflexTestID,
Nat_TestName, Nat_ConditionName, Nat_TestID,
Nat_ReflexMandatoryNat_ConditionID, Nat_ConditionName,
T_OrderDetailNat_NormalValueID, T_OrderDetailResult, T_OrderDetailNat_MethodeName,
T_OrderDetailMaxValueInclusive, T_OrderDetailMinValueInclusive,
T_OrderDetailMinValue, T_OrderDetailMaxValue, T_OrderDetailVerification
from
nat_reflextest
join nat_reflexmandatory on Nat_ReflexMandatoryNat_ReflexTestID in ( $s_ids )
and Nat_ReflexTestID = Nat_ReflexMandatoryNat_ReflexTestID and Nat_ReflexTestIsActive = 'Y'
join nat_condition on Nat_ReflexMandatoryNat_ConditionID = Nat_ConditionID and Nat_ReflexMandatoryIsActive = 'Y'
join nat_test on Nat_ReflexMandatoryNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y'
and Nat_ReflexMandatoryIsActive = 'Y'
join t_test on Nat_TestID = T_TestNat_TestID and T_TestIsActive = 'Y'
join t_orderdetail on T_TestID = T_OrderDetailT_TestID
and T_OrderDetailIsActive = 'Y' and T_OrderDetailT_OrderHeaderID = ?
order by Nat_ReflexTestID, Nat_ReflexTestNat_RelationID desc";
$qry = $this->db->query($sql, [$headerID]);
$reflex_id_not_ok = [];
if ($qry) {
$mdt_rows = $qry->result_array();
foreach ($mdt_rows as $r_mdt) {
$is_ok = false;
$is_display = true;
$result = "";
if ($r_mdt["T_OrderDetailVerification"] != "Y") {
$result = "Belum di verifikasi";
continue;
}
if (!($r_mdt["T_OrderDetailNat_NormalValueID"] > 0)) {
$result = "Belum memiliki nilai normal";
continue;
}
if ($result == "") {
try {
$d_value = floatval($r_mdt["T_OrderDetailResult"]);
$d_min_value = floatval(
$r_mdt["T_OrderDetailMinValue"]
);
$d_max_value = floatval(
$r_mdt["T_OrderDetailMaxValue"]
);
$d_min_inclusive =
$r_mdt["T_OrderDetailMinValueInclusive"];
$d_max_inclusive =
$r_mdt["T_OrderDetailMaxValueInclusive"];
$mdt_condition = "Unknown";
if (
$d_value < $d_min_value ||
($d_value <= $d_min_value &&
$d_min_inclusive == "N")
) {
$mdt_conditionID = 1;
$mdt_condition = "Low";
} elseif (
$d_value > $d_max_value ||
($d_value >= $d_max_value &&
$d_max_inclusive == "N")
) {
$mdt_conditionID = 3;
$mdt_condition = "High";
} else {
$mdt_conditionID = 2;
$mdt_condition = "Normal";
}
if ($mdt_conditionID == 0) {
$result =
"Mandatory Reflex Test [" .
$rfx["Nat_TestName"] .
"] kondisi [ Low/Normal/Hight ] tidak bisa ditentukan ";
}
} catch (Exception $e) {
$result =
"Mandatory Reflex Test [" .
$rfx["Nat_TestName"] .
"] kondisi [ Low/Normal/Hight ] tidak bisa ditentukan ( konversi numerik )";
}
if (
$mdt_conditionID ==
$r_mdt["Nat_ReflexMandatoryNat_ConditionID"]
) {
$result =
$r_mdt["Nat_TestName"] . " kondisi : " . $condition;
$is_ok = true;
} else {
$result =
$r_mdt["Nat_TestName"] . " kondisi : " . $condition;
$is_ok = false;
}
}
$mandatory[] = [
"reflexID" => $r_mdt["Nat_ReflexTestID"],
"px" => $r_mdt["Nat_TestName"],
"condition" => $r_mdt["Nat_ConditionName"],
"is_display" => $is_display,
"result" => $result,
"is_ok" => $is_ok,
];
if (!$is_ok) {
$reflex_id_not_ok[] = $r_mdt["Nat_ReflexTestID"];
}
}
}
$arr_notes = [];
if ($debug) {
//echo " Reflex ID Not OK :\n";
//print_r($reflex_id_not_ok);
//echo "";
}
foreach ($argument_1_list as $x_idx => $l) {
if (in_array($l["reflexID"], $reflex_id_not_ok)) {
$argument_1_list[$x_idx]["is_ok"] = false;
$x_mandatory = array_filter($mandatory, function ($m) use (
$reflex_id_not_ok
) {
if (in_array($m["reflexID"], $reflex_id_not_ok)) {
return true;
}
});
foreach ($x_mandatory as $m) {
$argument_1_list[$x_idx]["note"] = $m["result"];
}
continue;
}
$argument_1_list[$x_idx]["mandatory"] = [];
foreach ($mandatory as $m) {
if ($m["reflexID"] == $l["reflexID"]) {
$argument_1_list[$x_idx]["mandatory"][] = $m;
}
}
}
$flag_error = false;
$notes = "";
//print_r($argument_1_list);
foreach ($argument_1_list as $list) {
if ($list["is_ok"] == false) {
$flag_error = true;
}
if ($notes != "") {
$notes .= "\n";
}
$notes .= $list["note"];
}
if ($flag_error) {
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => $notes,
"AutoValidIsOk" => "N",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
return [
"AutoValidT_OrderDetailID" => $r["T_OrderDetailID"],
"AutoValidHaveReq" => $haveReq,
"AutoValidIsReviewRange" => $r["ReviewRangeIsOK"],
"AutoValidNote" => $notes,
"AutoValidIsOk" => "Y",
"AutoValidVerifDate" => $r["T_OrderDetailVerDate"],
"AutoValidVerifUserID" => $r["T_OrderDetailVerUserID"],
"AutoValidVerifUserName" => $r["M_UserUserName"],
"AutoValidNat_ConditionID" => $conditionID,
"AutoValidNat_NormalValueID" =>
$r["T_OrderDetailNat_NormalValueID"],
"AutoValidNat_MethodeID" => $r["T_OrderDetailNat_MethodeID"],
"AutoValidT_OrderDetailResult" => $r["T_OrderDetailResult"],
"image" => $r["AutoVerifTrendAnalysisImage"],
];
}
function debug($id)
{
$result = $this->calculate($id, true);
if ($result === false) {
echo "No Auto Valid Response";
exit();
}
$this->print_table_style();
$img =
"";
unset($result["image"]);
$this->print_table([$result], array_keys($result));
echo "| $k | "; } echo "
| " . $r[$k] . " | "; } echo "