db_onedev = $this->load->database("onedev", true); $this->resp = array( "status" => "ERR", "message" => "" ); } public function reply() { echo json_encode($this->resp); exit; } public function get_data(){ $prm = $this->sys_input; $startdate = $prm['startdate']; $enddate = $prm['enddate']; $instrumentid = $prm['instrumentid']; $controlid = $prm['controlid']; $testid = $prm['testid']; $sql = "select Nat_QcControlName, Nat_QcControlLotNumber, Nat_QcControlExpired, Nat_QcLevelName, Nat_InstrumentName, Nat_TestName, M_QcResultDate, M_QcResultValue, ifnull(Nat_QcRuleCode,'') Marking, Nat_QcMean,Nat_QcSd,Nat_QcTea, M_QcIsStat, M_QcStatMean, M_QcStatSd from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y' join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID join nat_qc_level on Nat_QcControlNat_QcLevelID = Nat_QcLevelID join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID join nat_test on Nat_QcNat_TestID = Nat_TestID left join nat_qc_rule on M_QcResultNat_QcRuleID = Nat_QcRuleID "; $qry = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid)); //echo $this->db_onedev->last_query(); if (!$qry) { $this->resp["message"] = "{$this->now()} ERR : " . $this->db_onedev->error()["message"] . "\n" . "|" . $this->db_onedev->last_query() . "\n"; $this->reply(); } $rows = $qry->result_array(); $result = array(); foreach ($rows as $idx => $r) { if ($idx == 0) { $isStat = $r["M_QcIsStat"] == "Y"; $result = array( "control" => $r["Nat_QcControlName"], "level" => $r["Nat_QcLevelName"], "lotNumber" => $r["Nat_QcControlLotNumber"], "instrument" => $r["Nat_InstrumentName"], "ed" => $r["Nat_QcControlExpired"], "test" => $r["Nat_TestName"], "mean" => $isStat ? $r["M_QcStatMean"] : $r["Nat_QcMean"], "sd" => $isStat ? $r["M_QcStatSd"] : $r["Nat_QcSd"], "tea" => $r["Nat_QcTea"], "value" => array(), "mark" => array(), "date" => array() ); } $result["date"][] = $r["M_QcResultDate"]; $result["value"][] = $r["M_QcResultValue"]; $result["mark"][] = $r["Marking"]; } $this->resp["status"] = "OK"; $this->resp["data"] = array( "total" => 1, "records" => $result ); $this->reply(); } function get_detail(){ try { //# cek token valid if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $startdate = $prm['startdate']; $enddate = $prm['enddate']; $instrumentid = $prm['instrumentid']; $controlid = $prm['controlid']; $testid = $prm['testid']; $mean_group = $prm['group_mean']; $rows = []; $sql ="SELECT round(avg(M_QcResultValue),2) as mean from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y'"; $mean_actual = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array()[0]["mean"]; $sql ="SELECT round(stddev(M_QcResultValue),2) as sd from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y'"; $sd_actual = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array()[0]["sd"]; $sql ="SELECT COUNT(*) as xnumber from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y'"; $xnumber = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array()[0]["xnumber"]; $sql ="SELECT MIN(M_QcResultValue) as min from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y'"; $min = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array()[0]["min"]; $sql ="SELECT MAX(M_QcResultValue) as max from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y'"; $max = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array()[0]["max"]; $sql ="SELECT IFNULL(M_QcStatMean,Nat_QcMean) as mean from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y'"; $mean_last = $this->db_onedev->query($sql, array($instrumentid,$controlid,$testid))->result_array()[0]["mean"]; $sql ="SELECT IFNULL(M_QcStatSd,Nat_QcSd) as sd from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y'"; $sd_last = $this->db_onedev->query($sql, array($instrumentid,$controlid,$testid))->result_array()[0]["sd"]; $sql ="SELECT IFNULL(M_QcStatTea,Nat_QcTea) as tea from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y'"; $tea = $this->db_onedev->query($sql, array($instrumentid,$controlid,$testid))->result_array()[0]["tea"]; $sql ="SELECT round(($sd_last/$mean_last)*100,1) as cv"; $cv = $this->db_onedev->query($sql)->result_array()[0]["cv"]; if($mean_group == 0){ $bias = 0; $sql ="SELECT round(abs($bias)+(2*$cv),1) as te"; $te = $this->db_onedev->query($sql)->result_array()[0]["te"]; $sigma = 0; }else{ $sql ="SELECT round((($mean_last-$mean_group)/$mean_group)*100,1)as bias"; $bias = $this->db_onedev->query($sql)->result_array()[0]["bias"]; $sql ="SELECT round(abs($bias)+(2*$cv),1) as te"; $te = $this->db_onedev->query($sql)->result_array()[0]["te"]; $sql ="SELECT ($tea-abs($bias))/$cv as sigma"; $sigma = $this->db_onedev->query($sql)->result_array()[0]["sigma"]; } //echo $this->db_onedev->last_query(); $result = array( "total" => 1 , "mean_actual" => $mean_actual, "sd_actual" => $sd_actual, "mean_last" => $mean_last, "sd_last" => $sd_last, "tea" => $tea, "cv" => $cv, "bias" => $bias, "te" => $te, "sigma"=> $sigma, "xnumber" => $xnumber, "xrange" => $min.' - '.$max ); $this->sys_ok($result); } catch(Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function getqcid(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $instrumentid = $prm['instrumentid']; $controlid = $prm['controlid']; $testid = $prm['testid']; $sql ="SELECT M_QcID, Nat_QcGroupMean, Nat_QcGroupSd FROM nat_qc JOIN m_qc ON M_QcNat_QcID = Nat_QcID AND M_QcIsActive = 'Y' WHERE Nat_QcNat_QcControlID = $controlid AND Nat_QcNat_InstrumentID = $instrumentid AND Nat_QcNat_TestID = $testid AND Nat_QcIsActive = 'Y'"; //echo $query; $query = $this->db_onedev->query($sql); // echo $this->db_onedev->last_query(); if ($query) { $rows = $query->result_array(); } else { $this->sys_error_db("nat_qc select"); exit; } $result = array( "total" => count($rows) , "records" => $rows, ); $this->sys_ok($result); exit; } function get_data_graphic(){ try { //# cek token valid if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $startdate = $prm['startdate']; $enddate = $prm['enddate']; $instrumentid = $prm['instrumentid']; $controlid = $prm['controlid']; $testid = $prm['testid']; $rows = []; $sql ="select Nat_QcControlName, Nat_QcControlLotNumber, Nat_QcControlExpired, Nat_QcLevelName, Nat_InstrumentName, Nat_TestName, M_QcResultDate, M_QcResultValue, ifnull(Nat_QcRuleCode,'') Marking, Nat_QcMean,Nat_QcSd,Nat_QcTea, M_QcIsStat, M_QcStatMean, M_QcStatSd from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y' join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID join nat_qc_level on Nat_QcControlNat_QcLevelID = Nat_QcLevelID join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID join nat_test on Nat_QcNat_TestID = Nat_TestID left join nat_qc_rule on M_QcResultNat_QcRuleID = Nat_QcRuleID GROUP BY M_QcID"; //echo $query; $rows['details'] = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array(); $sql ="select DATE_FORMAT(M_QcResultDate, '%d') as x, CONCAT(M_QcResultValue, ' :',ifnull(Nat_QcRuleCode,'')) as y, ifnull(Nat_QcRuleCode,'') as rule from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y' join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID join nat_qc_level on Nat_QcControlNat_QcLevelID = Nat_QcLevelID join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID join nat_test on Nat_QcNat_TestID = Nat_TestID left join nat_qc_rule on M_QcResultNat_QcRuleID = Nat_QcRuleID GROUP BY M_QcResultID ORDER BY M_QcResultDate ASC, M_QcResultID ASC"; // echo $query; $rows['date'] = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array(); $sql ="select M_QcResultValue from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y' join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID join nat_qc_level on Nat_QcControlNat_QcLevelID = Nat_QcLevelID join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID join nat_test on Nat_QcNat_TestID = Nat_TestID left join nat_qc_rule on M_QcResultNat_QcRuleID = Nat_QcRuleID GROUP BY M_QcResultID ORDER BY M_QcResultDate ASC, M_QcResultID ASC"; //echo $query; $rows['value'] = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array(); $sql ="select ifnull(Nat_QcRuleCode,'') Marking from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcResultIsActive = 'Y' and M_QcResultDate >= ? and M_QcResultDate <= ? join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcNat_InstrumentID = ? and Nat_QcNat_QcControlID = ? and Nat_QcNat_TestID = ? and Nat_QcIsActive = 'Y' join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID join nat_qc_level on Nat_QcControlNat_QcLevelID = Nat_QcLevelID join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID join nat_test on Nat_QcNat_TestID = Nat_TestID left join nat_qc_rule on M_QcResultNat_QcRuleID = Nat_QcRuleID GROUP BY M_QcResultID ORDER BY M_QcResultDate ASC, M_QcResultID ASC"; //echo $query; $rows['mark'] = $this->db_onedev->query($sql, array($startdate, $enddate, $instrumentid,$controlid,$testid))->result_array(); //echo $this->db_onedev->last_query(); $result = array( "total" => count($rows) , "records" => $rows, ); $this->sys_ok($result); } catch(Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } public function calc() { try { $prm = $this->sys_input; $qcresultID = $prm['qcresultid']; $sql = "select M_QcResultID, M_QcResultM_QcID, M_QcResultDate, M_QcResultValue, IFNULL(M_QcStatMean,Nat_QcMean) as Nat_QcMean, IFNULL(M_QcStatSd,Nat_QcSd) as Nat_QcSd, Nat_QcTea from m_qc_result join m_qc on M_QcResultM_QcID = M_QcID and M_QcIsActive = 'Y' join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcIsActive = 'Y' where M_QcResultID = ?"; $qry = $this->db_onedev->query($sql, array($qcresultID)); if (!$qry) { $this->resp["message"] = "{$this->now()} ERR : " . $this->db_onedev->error()["message"] . "\n" . "|" . $this->db_onedev->last_query() . "\n"; $this->reply(); } $rows = $qry->result_array(); foreach ($rows as $idx => $r) { $mean = $r["Nat_QcMean"]; $sd = $r["Nat_QcSd"]; $TEa = $r["Nat_QcTea"]; $value = $r["M_QcResultValue"]; $id = $r["M_QcResultID"]; $qcID = $r["M_QcResultM_QcID"]; $ruleID = 0; $x12s= $this->is_1_2s($idx, $value, $mean, $sd); if($x12s > 0){ $x1_3s = $this->is_1_3s($idx, $value, $mean, $sd); if($x1_3s == 0){ $x2_2s= $this->is_2_2s($idx, $value, $mean, $sd, $id, $qcID); if($x2_2s == 0){ $xR_4s = $this->is_R_4s($idx, $value, $mean, $sd, $id, $qcID); if($xR_4s == 0){ $x4_1s = $this->is_4_1s($idx, $value, $mean, $sd, $id, $qcID); if($x4_1s == 0){ $x10x = $this->is_10x($idx, $value, $mean, $sd, $id, $qcID); if($x10x == 0){ $ruleID = $x12s; }else{ $ruleID = $x10x; } }else{ $ruleID = $x4_1s; } }else{ $ruleID = $xR_4s; } }else{ $ruleID = $x2_2s; } }else{ $ruleID = $x1_3s; } }else{ $ruleID = 0; } $sql = "update m_qc_result set M_QcResultNat_QcRuleID = ? where M_QcResultID = ?"; $qry = $this->db_onedev->query($sql, array($ruleID,$id)); //echo $this->db_onedev->last_query(); if (!$qry) { $this->resp["message"] = "{$this->now()} ERR : " . $this->db_onedev->error()["message"] . "\n" . "|" . $this->db_onedev->last_query() . "\n"; $this->reply(); } } $this->resp["status"] = "OK"; $this->reply(); } catch(Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } // rule // 1 : 1 2s public function is_1_2s($idx, $value, $mean, $sd) { if ($value < $mean - 2 * $sd || $value > $mean + 2*$sd) { return 1; } return 0; } // 8 : 1 3s public function is_1_3s($idx, $value, $mean, $sd) { //echo "$value | $mean | $sd \n"; if ($value < $mean - 3 * $sd || $value > $mean + 3*$sd) { return 8; } return 0; } // 7 : 2 2s public function is_2_2s($idx, $value, $mean, $sd, $id, $qcID) { $x = $this->db_onedev->query("SELECT M_QcResultValue FROM m_qc_result WHERE M_QcResultID < $id AND M_QcResultM_QcID = $qcID ORDER BY M_QcResultID DESC LIMIT 1")->row(); $y = $this->db_onedev->query("SELECT count(*) as count FROM(SELECT M_QcResultValue FROM m_qc_result WHERE M_QcResultID < $id AND M_QcResultM_QcID = $qcID ORDER BY M_QcResultID DESC LIMIT 1)a")->row(); $jml = $y->count; if($jml == 0){ return 0; }else{ $prev_value = $x->M_QcResultValue; if ($value < $mean - 2 * $sd && $prev_value < $mean - 2*$sd) { return 7; } if ($value > $mean + 2 * $sd && $prev_value > $mean + 2*$sd) { return 7; } return 0; } } // 2 : R 4s public function is_R_4s($idx, $value, $mean, $sd, $id, $qcID) { $x = $this->db_onedev->query("SELECT M_QcResultValue FROM m_qc_result WHERE M_QcResultID < $id AND M_QcResultM_QcID = $qcID ORDER BY M_QcResultID DESC LIMIT 1")->row(); $y = $this->db_onedev->query("SELECT count(*) as count FROM(SELECT M_QcResultValue FROM m_qc_result WHERE M_QcResultID < $id AND M_QcResultM_QcID = $qcID ORDER BY M_QcResultID DESC LIMIT 1)a")->row(); $prev_value = $x->M_QcResultValue; $jml = $y->count; if($jml == 0){ return 0; }else{ if ($value < $mean - 2 * $sd && $prev_value > $mean + 2*$sd) { return 2; } if ($value > $mean + 2 * $sd && $prev_value < $mean - 2*$sd) { return 2; } return 0; } } // 3 : 4 1s public function is_4_1s($idx, $value, $mean, $sd, $id, $qcID) { $x = $this->db_onedev->query("SELECT M_QcResultValue FROM m_qc_result WHERE M_QcResultID < $id AND M_QcResultM_QcID = $qcID ORDER BY M_QcResultID DESC LIMIT 3")->result_array(); $y = $this->db_onedev->query("SELECT count(*) as count FROM(SELECT M_QcResultValue FROM m_qc_result WHERE M_QcResultID < $id AND M_QcResultM_QcID = $qcID ORDER BY M_QcResultID DESC LIMIT 3)a")->row(); $jml = $y->count; if($jml < 3){ return 0; }else{ $value3 = $x[0]["M_QcResultValue"]; $value2 = $x[1]["M_QcResultValue"]; $value1 = $x[2]["M_QcResultValue"]; $val_1sd = $mean + $sd; $val_1sd_neg = $mean - $sd; // echo "$value1 | $value2 | $value3 | $value | $val_1sd | $val_1sd_neg \n"; if ($value1 > $val_1sd && $value2 > $val_1sd && $value3 > $val_1sd && $value > $val_1sd) { return 3; } if ($value1 < $val_1sd_neg && $value2 < $val_1sd_neg && $value3 < $val_1sd_neg && $value < $val_1sd_neg) { return 3; } return 0; } } // 4 : 10x public function is_10x($idx, $value, $mean, $sd, $id, $qcID) { $x = $this->db_onedev->query("SELECT M_QcResultValue FROM m_qc_result WHERE M_QcResultID < $id AND M_QcResultM_QcID = $qcID ORDER BY M_QcResultID DESC LIMIT 9")->result_array(); $y = $this->db_onedev->query("SELECT count(*) as count FROM(SELECT M_QcResultValue FROM m_qc_result WHERE M_QcResultID < $id AND M_QcResultM_QcID = $qcID ORDER BY M_QcResultID DESC LIMIT 9)a")->row(); $jml = $y->count; if($jml < 9){ return 0; }else{ $value9 = $x[0]["M_QcResultValue"]; $value8 = $x[1]["M_QcResultValue"]; $value7 = $x[2]["M_QcResultValue"]; $value6 = $x[3]["M_QcResultValue"]; $value5 = $x[4]["M_QcResultValue"]; $value4 = $x[5]["M_QcResultValue"]; $value3 = $x[6]["M_QcResultValue"]; $value2 = $x[7]["M_QcResultValue"]; $value1 = $x[8]["M_QcResultValue"]; $val_1sd = $mean + $sd; $val_1sd_neg = $mean - $sd; if ($value1 < $mean && $value2 < $mean && $value3 < $mean && $value4 < $mean && $value5 < $mean && $value6 < $mean && $value7 < $mean && $value8 < $mean && $value9 < $mean && $value < $mean) { return 4; } if ($value1 > $mean && $value2 > $mean && $value3 > $mean && $value4 > $mean && $value5 > $mean && $value6 > $mean && $value7 > $mean && $value8 > $mean && $value9 > $mean && $value > $mean) { return 4; } return 0; } } function lookuprule(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $control = $prm['control']; $max_rst = 12; $tot_count =0; $sql = "SELECT count(*) as total FROM nat_qc_rule WHERE Nat_QcRuleIsActive = 'Y' AND Nat_QcRuleID IN(1,2,3,4,7,8)"; $query = $this->db_onedev->query($sql); //echo $query; if ($query) { $tot_count = $query->result_array()[0]["total"]; } else { $this->sys_error_db("nat_qc_rule count",$this->db_onedev); exit; } $sql = " SELECT Nat_QcRuleID,Nat_QcRuleCode, 'Y' as isactive FROM nat_qc_rule WHERE Nat_QcRuleIsActive = 'Y' AND Nat_QcRuleID IN(1,2,3,4,7,8) ORDER BY Nat_QcRuleID ASC "; $query = $this->db_onedev->query($sql); if ($query) { $rows = $query->result_array(); //echo $this->db_onedev->last_query(); $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); $this->sys_ok($result); } else { $this->sys_error_db("nat_qc_rule rows",$this->db_onedev); exit; } } public function setfactory() { try { //# cek token valid if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } //# ambil parameter input $prm = $this->sys_input; $natqcid = $prm['natqcid']; $mean = $prm['mean']; $sd = $prm['sd']; $tea = $prm['tea']; $startdate = $prm['startdate']; $enddate = $prm['enddate']; $userid = $this->sys_user["M_UserID"]; $query = "UPDATE m_qc SET M_QcIsStat = 'Y', M_QcStatMean = $mean, M_QcStatSd = $sd, M_QcUserID = $userid, M_QcLastUpdated = now() WHERE M_QcNat_QcID = $natqcid"; $update_m_qc= $this->db_onedev->query($query); //echo $query; if (!$query) { $this->sys_error_db("m_qc update"); exit; } $query = "INSERT INTO m_qc_log( M_QcLogNat_QcID, M_QcLogStartDate, M_QcLogEndDate, M_QcLogIsStat, M_QcLogStatMean, M_QcLogStatSd, M_QcLogStatTea, M_QcLogCreated, M_QcLogLastUpdated, M_QcLogUserID) VALUES ($natqcid, '{$startdate}', '{$enddate}', 'Y', $mean, $sd, $tea, now(), now(), $userid)"; $insert_m_qc= $this->db_onedev->query($query); // echo $this->db_onedev->last_query(); if (!$query) { $this->sys_error_db("m_qc_log insert"); exit; } $result = array ("total" => 1, "records" => array("xid" => 0)); $this->sys_ok($result); $last_id = $this->db_onedev->insert_id(); } catch(Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } public function qc_byidname(){ try { //# cek token valid if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $controlid = $prm['controlid']; $test = $prm['test']; $sdate = $prm['sdate']; $limit = ' LIMIT 10'; $number_limit = 10; $number_offset = ($prm['page'] - 1) * $number_limit ; $sql = "select COUNT(*) as total FROM(SELECT * from m_qc join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcIsActive = 'Y' join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID and Nat_QcControlIsActive = 'Y' and Nat_QcControlID = $controlid join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID and Nat_InstrumentIsActive = 'Y' JOIN t_instrument_local ON T_InstrumentLocalNat_InstrumentID = Nat_InstrumentID AND T_InstrumentLocalIsActive = 'Y' join nat_test on Nat_QcNat_TestID = Nat_TestID and Nat_TestName like CONCAT('%','{$test}','%') and Nat_TestIsActive = 'Y' left join m_qc_result on M_QcResultM_QcID = M_QcID and M_QcResultDate = '{$sdate}' and M_QcResultIsActive ='Y' LEFT JOIN nat_qc_rule ON M_QcResultNat_QcRuleID = Nat_QcRuleID WHERE M_QcIsActive = 'Y') a"; // $total = $this->db_onedev->query($sql,$sql_param)->row()->total; $query = $this->db_onedev->query($sql); //echo $this->db_onedev->last_query(); $tot_count = 0; $tot_page = 0; if ($query) { $tot_count = $query->result_array()[0]["total"]; $tot_page = ceil($tot_count/$number_limit); } else { $this->sys_error_db("nat_qc count", $this->db_onedev); exit; } $sql = "select distinct M_QcID, M_QcStatMean, M_QcStatSd, M_QcStatTea, M_QcResultID, M_QcResultValue, M_QcResultValue as M_QcResultValueOld, M_QcResultIsInstrument , M_QcResultDate, Nat_QcControlID , Nat_QcControlName , Nat_InstrumentID, Nat_InstrumentName, Nat_TestID , Nat_TestName, IFNULL(M_QcStatMean,Nat_QcMean) as Nat_QcMean, IFNULL(M_QcStatSd,Nat_QcSd) as Nat_QcSd, Nat_QcTea, Nat_QcRuleID, Nat_QcRuleCode, Nat_QcLevelID, Nat_QcLevelName from m_qc join nat_qc on M_QcNat_QcID = Nat_QcID and Nat_QcIsActive = 'Y' join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID and Nat_QcControlIsActive = 'Y' and Nat_QcControlID = $controlid join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID and Nat_InstrumentIsActive = 'Y' JOIN t_instrument_local ON T_InstrumentLocalNat_InstrumentID = Nat_InstrumentID AND T_InstrumentLocalIsActive = 'Y' join nat_test on Nat_QcNat_TestID = Nat_TestID and Nat_TestName like CONCAT('%','{$test}','%') and Nat_TestIsActive = 'Y' left join m_qc_result on M_QcResultM_QcID = M_QcID and M_QcResultDate = '{$sdate}' and M_QcResultIsActive ='Y' LEFT JOIN nat_qc_rule ON M_QcResultNat_QcRuleID = Nat_QcRuleID join nat_qc_level ON Nat_QcLevelID = Nat_QcControlNat_QcLevelID WHERE M_QcIsActive = 'Y' order by Nat_InstrumentName ASC, Nat_QcControlName ASC, Nat_TestName ASC limit $number_limit offset $number_offset"; $sql_param = array($search); $query = $this->db_onedev->query($sql); //echo $this->db_onedev->last_query(); if ($query) { $rows = $query->result_array(); } else { $this->sys_error_db("nat_qc select"); exit; } $result = array ("total" => $tot_page, "total_filter"=>count($rows),"records" => $rows); $this->sys_ok($result); } catch(Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } public function control_byidname(){ try { //# cek token valid if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $instrumentid = $prm['instrumentid']; $control = $prm['control']; $limit = ' LIMIT 10'; $number_limit = 10; $number_offset = ($prm['page'] - 1) * $number_limit ; $sql = "select COUNT(*) as total FROM(SELECT * from nat_qc_control join nat_qc_level ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID AND Nat_QcControlIsActive = 'Y' AND Nat_QcLevelIsActive = 'Y' AND Nat_QcControlName like CONCAT('%','{$control}','%') join nat_qc ON Nat_QcControlID = Nat_QcNat_QcControlID AND Nat_QcIsActive = 'Y' join nat_instrument ON Nat_QcNat_InstrumentID = Nat_InstrumentID AND Nat_InstrumentIsActive = 'Y' AND Nat_InstrumentID = $instrumentid JOIN t_instrument_local ON T_InstrumentLocalNat_InstrumentID = Nat_InstrumentID AND T_InstrumentLocalIsActive = 'Y' JOIN m_qc ON M_QcNat_QcID = Nat_QcID AND M_QcIsActive = 'Y' GROUP BY Nat_QcControlID) a"; // $total = $this->db_onedev->query($sql,$sql_param)->row()->total; $query = $this->db_onedev->query($sql); //echo $this->db_onedev->last_query(); $tot_count = 0; $tot_page = 0; if ($query) { $tot_count = $query->result_array()[0]["total"]; $tot_page = ceil($tot_count/$number_limit); } else { $this->sys_error_db("nat_qc count", $this->db_onedev); exit; } $sql = "SELECT distinct Nat_QcControlID, Nat_QcControlName, Nat_QcControlLotNumber, DATE_FORMAT(Nat_QcControlExpired, '%d-%m-%Y') as Nat_QcControlExpired, Nat_InstrumentID, Nat_InstrumentName, Nat_QcLevelID, Nat_QcID, Nat_QcLevelName from nat_qc_control join nat_qc_level ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID AND Nat_QcControlIsActive = 'Y' AND Nat_QcLevelIsActive = 'Y' AND Nat_QcControlName like CONCAT('%','{$control}','%') join nat_qc ON Nat_QcControlID = Nat_QcNat_QcControlID AND Nat_QcIsActive = 'Y' join nat_instrument ON Nat_QcNat_InstrumentID = Nat_InstrumentID AND Nat_InstrumentIsActive = 'Y' AND Nat_InstrumentID = $instrumentid JOIN t_instrument_local ON T_InstrumentLocalNat_InstrumentID = Nat_InstrumentID AND T_InstrumentLocalIsActive = 'Y' JOIN m_qc ON M_QcNat_QcID = Nat_QcID AND M_QcIsActive = 'Y' GROUP BY Nat_QcControlID order by Nat_InstrumentName ASC, Nat_QcControlName ASC, Nat_QcLevelID ASC limit $number_limit offset $number_offset"; $sql_param = array($search); $query = $this->db_onedev->query($sql); //echo $this->db_onedev->last_query(); if ($query) { $rows = $query->result_array(); } else { $this->sys_error_db("nat_qc select"); exit; } $result = array ("total" => $tot_page, "total_filter"=>count($rows),"records" => $rows); $this->sys_ok($result); } catch(Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } }