Initial import

This commit is contained in:
sas.fajri
2026-05-25 20:01:37 +07:00
commit 710d7c1b97
10371 changed files with 2381698 additions and 0 deletions

View File

@@ -0,0 +1,162 @@
<?php
class Rv_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// OVERRIDE
$max_rst = 9999;
$offset = 0;
// QUERY TOTAL
$sql = "SELECT count(DISTINCT T_OrderHeaderID) total
from t_orderheader
JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeadeRID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive= 'Y' AND T_OrderDetailVerification = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
left join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID
join m_doctor db on T_OrderHeaderSenderM_DoctorID = db.M_DoctorID
JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou on T_OrderHeaderM_MouID = M_MouID
-- JOIN helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
-- AND Helper_OrderIsLAB = 'Y'
where T_OrderHeaderIsActive = 'Y'
and (T_OrderHeaderAddOnWorklistReceiveDateTime LIKE ? OR T_OrderPromiseDateTime LIKE ?)
and
( M_PatientName LIKE ?
or T_OrderHeaderLabNumber like ?
)
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$sdate, $sdate, $search, $search ]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "SELECT *,
CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('\"', T_OrderPromiseDateTime, '\"') SEPARATOR ','), ']') order_promise FROM (
SELECT T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName,
M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP, M_SexName,
da.M_DoctorID doctor_pj_id, fn_global_doctor_name(da.M_DoctorID) doctor_pj_name,
db.M_DoctorID doctor_sender_id, fn_global_doctor_name(db.M_DoctorID) doctor_sender_name,
M_MouID, M_MouName, M_CompanyID, M_CompanyName,
T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote,
la.Nat_LangID M_LangID, la.Nat_LangCode M_LangCode, la.Nat_LangName M_LangName, T_OrderHeaderLangIsSI,
lb.Nat_LangID SecondM_LangID, lb.Nat_LangCode SecondM_LangCode, lb.Nat_LangName SecondM_LangName, T_OrderHeaderAddOnSecondLangIsSI,
T_OrderHeaderIsCito, fn_global_delivery_items(T_OrderHeaderID) as deliveries,
T_OrderPromiseDateTime, fn_process_history(T_OrderHeaderID) is_history
from t_orderheader
JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeadeRID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive= 'Y' AND T_OrderDetailVerification = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
left join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID
join m_doctor db on T_OrderHeaderSenderM_DoctorID = db.M_DoctorID
JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou on T_OrderHeaderM_MouID = M_MouID
JOIN m_sex on M_PatientM_SexID = M_SexID
-- JOIN helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
-- AND Helper_OrderIsLAB = 'Y'
JOIN nat_lang la ON T_OrderHeaderM_LangID = la.Nat_LangID
LEFT JOIN nat_lang lb ON T_OrderHeaderAddOnSecondM_LangID = lb.Nat_LangID
where T_OrderHeaderIsActive = 'Y'
and (T_OrderHeaderAddOnWorklistReceiveDateTime LIKE ? OR T_OrderPromiseDateTime LIKE ?)
and
( M_PatientName LIKE ?
or T_OrderHeaderLabNumber like ?
)
order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ASC, T_OrderHeaderLabNumber DESC) x
GROUP BY T_OrderHeaderID
order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ASC, T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$sdate, $sdate, $search, $search ]);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v) {
$rows[$k]['data'] = json_decode($v['data']);
$rows[$k]['delivery'] = [];
$r = $this->db_smartone->query("CALL sp_fo_payment_get_delivery('{$v['T_OrderHeaderID']}')");
$this->clean_mysqli_connection($this->db_smartone->conn_id);
if ($r) {
$d = $r->row();
$rows[$k]['delivery'] = json_decode($d->delivery);
}
$rows[$k]['deliveries'] = JSON_DECODE($v['deliveries']);
$rows[$k]['order_promise'] = JSON_DECODE($v['order_promise']);
foreach($rows[$k]['order_promise'] as $l => $w)
$rows[$k]['order_promise'][$l] = date('d-m-Y H:i', strtotime($w));
}
$result = array("total" => $tot_count, "total_page" => ceil($tot_count/$max_rst), "cur_page" => $page, "records" => $rows, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
public function info_req()
{
$prm = $this->sys_input;
$sql = "CALL sp_process_result_reqs(?)";
$query = $this->db_smartone->query($sql, [$prm['order_id']]);
if ($query)
{
$row = $query->row();
$this->sys_ok(json_decode($row->data));
exit;
}
$this->sys_error_db("RESULT REQ", $this->db_smartone);
}
}

View File

@@ -0,0 +1,374 @@
<?php
class Rv_px extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_old()
{
$prm = $this->sys_input;
$max_rst = 99;
$id = $prm["order_id"];
// QUERY TOTAL
// $sql = "";
// $query = $this->db_smartone->query($sql);
// if ($query) {
// $tot_count = $query->result_array()[0]["total"];
// }
// else {
// $this->sys_error_db("re count", $this->db_smartone);
// exit;
// }
$tot_count = 0;
$sql = "SELECT T_TestID
FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TEstID = T_TestID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_TestParentT_TestID = 0";
$query = $this->db_smartone->query($sql, [$id]);
if ($query) {
$rst = [];
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$sql = "WITH RECURSIVE ancestors AS
(
SELECT t_testid, t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, 1 level,
T_OrderDetailValMRState mr_state,
T_OrderDetailValidation validation,
T_OrderDetailValidation validation_old,
T_OrderDetailReqStatus sample_handling_perfect
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND t_testid = ?
UNION
SELECT g.t_testid, g.t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, level+1 level,
T_OrderDetailValMRState mr_state,
T_OrderDetailValidation validation,
T_OrderDetailValidation validation_old,
T_OrderDetailReqStatus sample_handling_perfect
FROM ancestors a, t_orderdetail f
JOIN t_test g ON f.T_OrderDetailT_TestID = g.T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND g.t_testparentt_testid = a.t_testid and g.t_testisactive = 'Y' )
SELECT * FROM ancestors;";
$query = $this->db_smartone->query($sql, [$id, $v['T_TestID'], $id]);
$r = $query->result_array();
foreach($r as $k => $v) {
if ($v['mr_state'] == "X")
{
$tmp = $this->db_smartone->query("SELECT fn_process_rv_mrstate('{$v['id']}') x")
->row();
$v['mr_state'] = $tmp->x;
}
// Sample Handling & Verification Perfect
if ($v['sample_handling_perfect'] == 'X')
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$id}', '{$v['t_testid']}') c")
->row();
$v['sample_handling_perfect'] = $y->c;
}
// Override
if ($y->c == "N")
{
$v['mr_state'] = "N";
}
$rst[] = $v;
}
}
$result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 99;
$id = $prm["order_id"];
$lang = $this->lang_default_code;
$lang_id = isset($prm['lang_id']) ? $prm['lang_id'] : '0';
if ($lang_id != 0)
{
$l = $this->db_smartone->where("Nat_LangID", $lang_id)->get("nat_lang")->row();
$lang = $l->Nat_LangCode;
}
$tot_count = 0;
// if ($lang == $this->lang_default_code)
// {
$sql = "SELECT *, cOUNT(a2.T_OrderDetailID) level FROM (
SELECT x.T_OrderDetailVerification verification,
IFNULL(y.T_OrderDetailT_TestID, x.T_OrderDetailT_TestID) t_testid,
IFNULL(y.T_OrderDetailT_TestName, y.T_OrderDetailT_TestName) t_testname,
y.T_OrderDetailResult result, y.T_OrderDetailResult result_old, y.T_OrderDetailNote note, y.T_OrderDetailNote note_old, x.T_OrderDetailID id,
x.T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
x.T_OrderDetailResultFlag result_flag,
x.T_OrderDetailValMRState mr_state,
x.T_OrderDetailValidation validation,
x.T_OrderDetailValidation validation_old,
y.T_OrderDetailReqStatus sample_handling_perfect,
y.T_OrderDetailNat_NormalValueID normal_id,
y.T_OrderDetailNormalValueNote normal_note, y.T_OrderDetailNat_UnitName unit_name,
y.T_OrderdetailNat_MethodeID methode_id, y.T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, a.T_TestID tx_id, count(T_ResultInstrumentID) as result_instrument_n,
x.T_OrderDetailVerification, T_OrderSampleReceive sample_receive,
T_OrderSampleProcessing sample_processing, T_OrderSampleWorklistReceive sample_worklist_receive,
PreAnalyticID pre_analytic,
T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code,
tx.T_TestSasCode,
T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status,
T_OrderDetailAddOnRef ref
FROM t_orderdetail x
JOIN t_test tx ON x.T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = tx.T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
LEFT JOIN t_orderdetail y ON x.T_OrderDetailT_TestSasCode LIKE CONCAT(y.T_OrderDetailT_TestSasCode, '%')
AND x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID
AND y.T_OrderDetailIsActive = 'Y'
LEFT JOIN t_orderdetailaddon ON x.T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID
JOIN t_orderheader ON y.T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
LEFT JOIN t_test a ON y.T_OrderDetailT_TestID = a.T_TestID
AND a.T_TestIsNonLab = ''
LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive, T_OrderSampleProcessing, T_OrderSampleWorklistReceive
FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = ?
AND T_OrderSampleIsactive = 'Y'
GROUP BY T_OrderSampleT_SampleTypeID) os ON a.T_TestT_SampleTypeID = os.T_OrderSampleT_SampleTypeID
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = x.T_OrderDetailID
LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = a.T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y'
WHERE x.T_OrderDetailT_OrderHeaderID = ?
AND x.T_OrderDetailIsActive = 'Y'
GROUP BY y.T_OrderDetailT_TestID
ORDER BY y.T_OrderDetailT_TestSasCode ASC) a1
LEFT JOIN t_orderdetail a2 ON a2.T_OrderDetailT_OrderHeaderID = a1.order_id
AND a2.T_OrderDetailIsActive = 'Y'
AND a1.test_sas_code LIKE CONCAT(a2.T_OrderDetailT_testSasCode, '%')
GROUP BY a1.t_testid
order by a1.T_TestSasCode
";
$query = $this->db_smartone->query($sql, [$id, $id]);
// $sql = "SELECT a.t_testid, a.t_testname,
// T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
// T_OrderDetailT_TestIsResult is_result, COUNT(b.T_TestID) level,
// T_OrderDetailValMRState mr_state,
// T_OrderDetailValidation validation,
// T_OrderDetailValidation validation_old,
// T_OrderDetailReqStatus sample_handling_perfect, T_OrderDetailNat_NormalValueID normal_id,
// T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
// T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
// a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
// T_OrderDetailVerification
// FROM t_orderdetail
// JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
// AND a.T_TestIsNonLab = ''
// LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
// LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
// WHERE T_OrderDetailT_OrderHeaderID = ?
// AND T_OrderDetailIsActive = 'Y'
// GROUP BY a.T_TestID
// ORDER BY T_OrderDetailT_TestSasCode ASC
// ";
// $query = $this->db_smartone->query($sql, [$id]);
// }
// else
// {
// $sql = "SELECT a.t_testid, a.t_testname,
// T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
// T_OrderDetailT_TestIsResult is_result, COUNT(b.T_TestID) level,
// T_OrderDetailValMRState mr_state,
// T_OrderDetailValidation validation,
// T_OrderDetailValidation validation_old,
// T_OrderDetailReqStatus sample_handling_perfect, T_OrderDetailNat_NormalValueID normal_id,
// T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
// T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
// a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n
// FROM t_orderdetail
// JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
// AND a.T_TestIsNonLab = ''
// LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
// JOIN t_orderdetaillang ON T_OrderDetailLangT_OrderDetailID = T_OrderDetailID
// AND T_OrderDetailLangIsActive = 'Y'
// AND T_OrderDetailLangNat_LangID = ?
// WHERE T_OrderDetailT_OrderHeaderID = ?
// AND T_OrderDetailIsActive = 'Y'
// GROUP BY a.T_TestID
// ORDER BY T_OrderDetailT_TestSasCode ASC
// ";
// $query = $this->db_smartone->query($sql, [$lang_id, $id ]);
// }
if ($query) {
$rst = [];
$rows = $query->result_array();
// echo json_encode($rows); return;
// echo $this->db_smartone->last_query(); return;
foreach($rows as $k => $v)
{
if ($v['is_result'] == "Y" && $v['is_quantitative'] == "N")
{
$v['template'] = [];
$x = $this->db_smartone->query("CALL sp_master_resulttemplate_get('{$v['t_testid']}')");
$this->clean_mysqli_connection($this->db_smartone->conn_id);
if ($x)
$v['template'] = $x->result_array();
}
if ($v['mr_state'] == "X")
{
$tmp = $this->db_smartone->query("SELECT fn_process_rv_mrstate('{$v['id']}') x")
->row();
$v['mr_state'] = $tmp->x;
}
// Sample Handling & Verification Perfect
if ($v['sample_handling_perfect'] == 'X')
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$id}', '{$v['t_testid']}') c")
->row();
$v['sample_handling_perfect'] = $y->c;
}
// Override
if ($y->c == "N")
{
$v['mr_state'] = "N";
}
if ($v['sample_handling_perfect']== 'Y' && $v['mr_state'] == 'Y' && $v['verification'] == 'Y')
$v['validation'] = 'Y';
// IF Rujukan, by pas Pre Analytik
if ($v['ref'] == 'Y')
$v['pre_analytic'] = 'Y';
$rst[] = $v;
}
$result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["id"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Verification Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailVerDeltaCheck', $v->delta)
->set('T_OrderDetailVerTrendAnalysis', $v->trend)
->set('T_OrderDetailVerification', $v->verification)
->set('T_OrderDetailVerDate', date('Y-m-d H:i:s'))
->set('T_OrderDetailVerUserID', $this->sys_user->M_UserID)
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$ids[] = $v->id;
}
$this->sys_ok($ids);
}
}
public function search_group()
{
$prm = $this->sys_input;
$max_rst = 12;
// QUERY TOTAL
$sql = "select count(*) total
from t_worklist
where T_WorklistIsActive = 'Y'
order by T_WorklistName ASC";
$query = $this->db_smartone->query($sql);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist count", $this->db_smartone);
exit;
}
$sql = "select T_WorklistID group_id, T_WorklistName group_name
from t_worklist
where T_WorklistIsActive = 'Y'
order by T_WorklistName ASC
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
$rows[$k]['data'] = json_decode($v['data']);
$result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,407 @@
<?php
class Rv_validation extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Result Validation API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function mr_state()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$data = ["image"=>"http://blog.aylien.com/wp-content/uploads/2016/07/Screen-Shot-2016-07-21-at-18.46.42.png",
"note"=>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
"title"=>"Multi Rule"];
$this->sys_ok($data);
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["data"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Validation Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailValMRState', $v->mr_state)
->set('T_OrderDetailValidation', $v->validation)
->set('T_OrderDetailValDate', $v->validation == "Y" ? date('Y-m-d H:i:s') : null)
->set('T_OrderDetailValUserID', $this->sys_user['M_UserID'])
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$ids[] = $v->id;
}
// LOG Process
$order = $this->db_smartone->select('T_OrderDetailT_OrderHeaderID id, T_OrderHeaderLabNumber lab_number', false)
->join('t_orderheader', 'T_OrderHeaderID = T_OrderDetailT_OrderHeaderID')
->where('T_OrderDetailID', $data[0]->id)
->get('t_orderdetail')
->row();
$dblog = $this->load->database("onelog", true);
$dblog->set('Log_ProcessCode', 'PROCESS.Result.Validation')
->set('Log_ProcessOrderID', $order->id)
->set('Log_ProcessOrderNumber', $order->lab_number)
->set('Log_ProcessJson', json_encode($data))
->set('Log_ProcessUserID', $this->sys_user['M_UserID'])
->insert('log_process');
// END OF Log Process
$this->sys_ok($ids);
}
}
// public function validate()
// {
// $prm = $this->sys_input;
// $data = json_decode($prm["data"]);
// if (sizeof($data) < 1)
// {
// $this->sys_error_db("RE Validation Confirmation", $this->db_smartone);
// exit;
// }
// else
// {
// $ids = [];
// foreach ($data as $k => $v)
// {
// $this->db_smartone->set('T_OrderDetailValMRState', $v->mr_state)
// ->set('T_OrderDetailValidation', $v->validation)
// ->set('T_OrderDetailValDate', $v->validation == "Y" ? date('Y-m-d H:i:s') : null)
// ->set('T_OrderDetailValUserID', $this->sys_user['M_UserID'])
// ->where('T_OrderDetailID', $v->id)
// ->update('t_orderdetail');
// $ids[] = $v->id;
// }
// // LOG Process
// $order = $this->db_smartone->select('T_OrderDetailT_OrderHeaderID id, T_OrderHeaderLabNumber lab_number', false)
// ->join('t_orderheader', 'T_OrderHeaderID = T_OrderDetailT_OrderHeaderID')
// ->where('T_OrderDetailID', $data[0]->id)
// ->get('t_orderdetail')
// ->row();
// $dblog = $this->load->database("onelog", true);
// $dblog->set('Log_ProcessCode', 'PROCESS.Result.Validation')
// ->set('Log_ProcessOrderID', $order->id)
// ->set('Log_ProcessOrderNumber', $order->lab_number)
// ->set('Log_ProcessJson', json_encode($data))
// ->set('Log_ProcessUserID', $this->sys_user['M_UserID'])
// ->insert('log_process');
// // END OF Log Process
// $this->sys_ok($ids);
// }
// }
function print_count()
{
$this->firstprint();
$prm = $this->sys_input;
$sql = "UPDATE t_orderdetail SET T_OrderDetailPrintCount = T_OrderDetailPrintCount + 1
WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailValidation = 'Y'
AND T_OrderDetailIsActive = 'Y'";
$query = $this->db_smartone->query($sql, [$prm['order_id']]);
if ($query)
{
$this->sys_ok($this->db_smartone->last_query());
}
else
$this->sys_error_db("Print Count", $this->db_smartone);
}
public function reject()
{
$prm = $this->sys_input;
// QUERY TOTAL
$sql = "CALL sp_process_result_validation_reject(?, ?)";
$query = $this->db_smartone->query($sql, [$prm['id'], $prm['action']]);
if ($query) {
$row = $query->row();
$this->sys_ok($row);
}
else {
$this->sys_error_db("REJECT VALIDATION", $this->db_smartone);
}
}
public function unvalidate()
{
$prm = $this->sys_input;
$order_id = $prm["order_id"];
$this->db_smartone->set('T_OrderDetailValidation', "N")
->set('T_OrderDetailValDate', null)
->set('T_OrderDetailValUserID', 0)
->where('T_OrderDetailT_OrderHeaderID', $prm['order_id'])
->where('T_OrderDetailIsActive', 'Y')
->where('T_OrderDetailValidation', 'Y')
->update('t_orderdetail');
$q = $this->db_smartone->last_query();
// LOG Process
$order = $this->db_smartone->select('T_OrderDetailT_OrderHeaderID id, T_OrderHeaderLabNumber lab_number', false)
->join('t_orderheader', 'T_OrderHeaderID = T_OrderDetailT_OrderHeaderID')
->where('T_OrderDetailT_OrderHeaderID', $prm['order_id'])
->get('t_orderdetail')
->row();
$dblog = $this->load->database("onelog", true);
$dblog->set('Log_ProcessCode', 'PROCESS.Result.Unvalidation')
->set('Log_ProcessOrderID', $order->id)
->set('Log_ProcessOrderNumber', $order->lab_number)
->set('Log_ProcessJson', '{}')
->set('Log_ProcessUserID', $this->sys_user['M_UserID'])
->insert('log_process');
// END OF Log Process
$this->sys_ok($q);
}
// Copas Fajri
function firstprint()
{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userid = $this->sys_user["M_UserID"];
$prm['T_OrderHeaderID'] = $prm['order_id'];
$datarows = [];
$query = " SELECT T_OrderDetailID,T_TestName
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y'
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID AND DocumentationGroupName = 'lab'
WHERE
T_OrderDetailT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
T_OrderDetailValidation = 'Y' AND
T_OrderDetailPrintCount = 0 AND
T_OrderDetailT_OrderPromiseID <> 0 AND
( T_OrderDetailResult <> '' OR T_OrderDetailResult IS NOT NULL ) AND
T_OrderDetailIsActive = 'Y'
GROUP BY T_OrderDetailID";
//echo $query;
$datarows = $this->db_smartone->query($query)->result_array();
$ids = array();
$testname = array();
if($datarows) {
foreach($datarows as $k => $v) {
$sql = "UPDATE t_orderdetail SET T_OrderDetailPrintCount = 1 WHERE T_OrderDetailID = {$v['T_OrderDetailID']}";
$this->db_smartone->query($sql);
array_push($ids,$v['T_OrderDetailID']);
array_push($testname,$v['T_TestName']);
}
}
$join_ids = "[".join(",",$ids)."]";
$join_testname = "[".join(",",$testname)."]";
$sql = "SELECT t_orderdelivery.*, M_DeliveryTypeCode as code
FROM t_orderdelivery
JOIN m_deliverytype ON T_OrderDeliveryM_DeliveryTypeID = M_DeliveryTypeID
WHERE
T_OrderDeliveryT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
T_OrderDeliveryIsActive = 'Y'
GROUP BY T_OrderDeliveryID
";
//echo $sql;
$result_delivery = $this->db_smartone->query($sql)->result_array();
$arr_deliveryid = array();
foreach($result_delivery as $i => $j){
array_push($arr_deliveryid,$j["T_OrderDeliveryM_DeliveryID"]);
}
foreach($result_delivery as $k => $v){
if($v['code'] == 'PICKUP'){
$sql = "INSERT INTO result_frontoffice(
Result_FrontOfficeT_OrderHeaderID,
Result_FrontOfficeIds,
Result_FrontOfficeStatus,
Result_FrontOfficeType,
Result_FrontOfficeTestName,
Result_FrontOfficeCreated,
Result_FrontOfficeUserID
)
VALUES(
{$prm['T_OrderHeaderID']},
'{$join_ids}',
'P',
'lab',
'Pemeriksaan Laboratorium',
NOW(),
{$userid}
) ON DUPLICATE KEY UPDATE
Result_FrontOfficeStatus = 'P',
Result_FrontOfficeUserID = {$userid}
";
$this->db_smartone->query($sql);
$sql = "SELECT * FROM result_frontoffice
WHERE Result_FrontOfficeT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
Result_FrontOfficeIds = '{$join_ids}' AND
Result_FrontOfficeType = 'lab'";
$rst_log = $this->db_smartone->query($sql)->result_array();
$dt_log = json_encode($rst_log);
$sql = "INSERT INTO one_log.log_result_front_office(
Log_ResultFrontOfficeDateTime,
Log_ResultFrontOfficeJson,
Log_ResultFrontOfficeUserID
)
VALUES(
NOW(),
'{$dt_log}',
{$userid}
)";
$this->db_smartone->query($sql);
}
if($v['code'] == 'EMAIL'){
$type = "MANUAL";
if(in_array(1,$arr_deliveryid) && (in_array(3,$arr_deliveryid) || in_array(5,$arr_deliveryid) || in_array(11,$arr_deliveryid))){
$type = "FO";
}
$sql = "INSERT INTO result_sendemail(
Result_SendEmailT_OrderHeaderID,
Result_SendEmailActionBy,
Result_SendEmailIds,
Result_SendEmailT_OrderDeliveryID,
Result_SendEmailStatus,
Result_SendEmailType,
Result_SendEmailT_TestName,
Result_SendEmailCreated,
Result_SendEmailUserID
)
VALUES(
{$prm['T_OrderHeaderID']},
'{$type}',
'{$join_ids}',
{$v['T_OrderDeliveryID']},
'P',
'lab',
'Pemeriksaan Laboratorium',
NOW(),
{$userid}
) ON DUPLICATE KEY UPDATE
Result_SendEmailStatus = 'P',
Result_SendEmailUserID = {$userid}
";
$this->db_smartone->query($sql);
$sql = "SELECT * FROM result_sendemail
WHERE
Result_SendEmailT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
Result_SendEmailIds = '{$join_ids}' AND
Result_SendEmailT_OrderDeliveryID = {$v['T_OrderDeliveryID']} AND
Result_SendEmailType = 'lab' LIMIT 1";
$dt_log = json_encode($this->db_smartone->query($sql)->row_array());
$sql = "INSERT INTO one_log.log_resultsendemail (
Log_ResultSendEmailDatetime,
Log_ResultSendEmailJson,
Log_ResultSendEmailUserID
)
VALUES(
NOW(),
'{$dt_log}',
{$userid}
)";
$this->db_smartone->query($sql);
}
if($v['code'] == 'ADDRESS'){
$sql = "INSERT INTO result_sendcourier(
Result_SendCourierT_OrderHeaderID,
Result_SendCourierIds,
Result_SendCourierT_OrderDeliveryID,
Result_SendCourierStatus,
Result_SendCourierType,
Result_SendCourierT_TestName,
Result_SendCourierCreated,
Result_SendCourierUserID
)
VALUES(
{$prm['T_OrderHeaderID']},
'{$join_ids}',
{$v['T_OrderDeliveryID']},
'P',
'lab',
'Pemeriksaan Laboratorium',
NOW(),
{$userid}
) ON DUPLICATE KEY UPDATE
Result_SendCourierStatus = 'P',
Result_SendCourierUserID = {$userid}
";
$this->db_smartone->query($sql);
$sql = "SELECT * FROM result_sendcourier
WHERE
Result_SendCourierT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
Result_SendCourierIds = '{$join_ids}' AND
Result_SendCourierT_OrderDeliveryID = {$v['T_OrderDeliveryID']} AND
Result_SendCourierType = 'lab' LIMIT 1";
$dt_log = json_encode($this->db_smartone->query($sql)->row_array());
$sql = "INSERT INTO one_log.log_resultsendcourier (
Log_ResultSendCourierDateTime,
Log_ResultSendCourierJson,
Log_ResultSendCourierUserID
)
VALUES(
NOW(),
'{$dt_log}',
{$userid}
)";
$this->db_smartone->query($sql);
}
//echo $sql;
}
return;
// $result = array(
// "total" => count($datarows) ,
// "records" => $datarows,
// );
// $this->sys_ok($result);
// exit;
}
}

View File

@@ -0,0 +1,58 @@
<?php
class Rv_verification extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Result Validation API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function mr()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$data = ["image"=>"http://blog.aylien.com/wp-content/uploads/2016/07/Screen-Shot-2016-07-21-at-18.46.42.png",
"note"=>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
"title"=>"Multi Rule"];
$this->sys_ok($data);
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["data"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Validation Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailValMRState', $v->mr_state)
->set('T_OrderDetailValidation', $v->validation)
->set('T_OrderDetailValDate', $v->validation == "Y" ? date('Y-m-d H:i:s') : null)
->set('T_OrderDetailValUserID', $this->sys_user['M_UserID'])
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$ids[] = $v->id;
}
$this->sys_ok($ids);
}
}
}