Files
BE_IBL/application/controllers/qc-v2/Process.php
2026-04-15 15:23:57 +07:00

977 lines
36 KiB
PHP

<?php
class Process extends MY_Controller
{
var $db_onedev;
public function index()
{
echo "Process API";
}
public function __construct()
{
parent::__construct();
$this->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);
}
}
}