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 = "