db_onedev = $this->load->database("onedev", true); } function bckp_search() { $prm = $this->sys_input; if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $search = $prm["search"]; $companyid = isset($prm["companyid"])?$prm["companyid"]:0; if(!isset($prm['current_page'])) $prm['current_page'] = 1; $number_limit = 15; $number_offset = ($prm['current_page'] - 1) * $number_limit ; $sql_where = ""; if ($search != "") { $prm['current_page'] = 1; $sql_where = " AND ( T_OrderHeaderLabNumberExt like '%{$search}%' OR T_OrderHeaderLabNumber like '%{$search}%' OR M_PatientName like '%{$search}%' ) "; } $filter_company = ""; if($companyid != 0 ){ $filter_company = " AND T_OrderHeaderM_CompanyID = {$companyid}"; } $sql = " SELECT COUNT(*) as total FROM ( SELECT '' as xno, T_OrderHeaderID as xid, DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y') as order_date, T_OrderHeaderLabNumber as no_reg, CONCAT(M_TitleName,' ',M_PatientName) as patient_name, M_CompanyName as company_name, M_MouName as mou_name, T_OrderHeaderIsCito as status_cito, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime, '%d-%m-%Y %H:%m') ORDER BY T_OrderPromiseDateTime ASC) as order_promise, '' as details_order, '' as details_sampling, '' as details_verifications, '' as details_process, '' as details_result_verification, '' as details_result_validation, '' as details_print, T_OrderHeaderLabNumberExt as no_reg_ext FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderPromiseDateTime) = '{$prm['xdate']}' $sql_where GROUP BY T_OrderHeaderID UNION SELECT '' as xno, T_OrderHeaderID as xid, DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y') as order_date, T_OrderHeaderLabNumber as no_reg, CONCAT(M_TitleName,' ',M_PatientName) as patient_name, M_CompanyName as company_name, M_MouName as mou_name, T_OrderHeaderIsCito as status_cito, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime, '%d-%m-%Y %H:%m') ORDER BY T_OrderPromiseDateTime ASC) as order_promise, '' as details_order, '' as details_sampling, '' as details_verifications, '' as details_process, '' as details_result_verification, '' as details_result_validation, '' as details_print, T_OrderHeaderLabNumberExt as no_reg_ext FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID LEFT JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderHeaderDate) = '{$prm['xdate']}' $sql_where GROUP BY T_OrderHeaderID )x "; //echo $sql; $query = $this->db_onedev->query($sql); $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("t_samplestorageout count", $this->db_onedev); exit; } $sql = " SELECT * FROM ( SELECT '' as xno, T_OrderHeaderID as xid, DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, T_OrderHeaderLabNumber as no_reg, CONCAT(M_TitleName,' ',M_PatientName) as patient_name, M_CompanyName as company_name, M_MouName as mou_name, T_OrderHeaderIsCito as status_cito, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime, '%d-%m-%Y %H:%i') ORDER BY T_OrderPromiseDateTime ASC) as order_promise, '' as details_order, '' as details_sampling, '' as details_verifications, '' as details_process, '' as details_result_verification, '' as details_result_validation, '' as details_print, T_OrderHeaderLabNumberExt as no_reg_ext FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderPromiseDateTime) = '{$prm['xdate']}' $sql_where GROUP BY T_OrderHeaderID UNION SELECT '' as xno, T_OrderHeaderID as xid, DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, T_OrderHeaderLabNumber as no_reg, CONCAT(M_TitleName,' ',M_PatientName) as patient_name, M_CompanyName as company_name, M_MouName as mou_name, T_OrderHeaderIsCito as status_cito, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime, '%d-%m-%Y %H:%i') ORDER BY T_OrderPromiseDateTime ASC) as order_promise, '' as details_order, '' as details_sampling, '' as details_verifications, '' as details_process, '' as details_result_verification, '' as details_result_validation, '' as details_print, T_OrderHeaderLabNumberExt as no_reg_ext FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID LEFT JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderHeaderDate) = '{$prm['xdate']}' $sql_where GROUP BY T_OrderHeaderID )x ORDER BY xid ASC limit $number_limit offset $number_offset "; //echo $sql; $query = $this->db_onedev->query($sql); $rows = $query->result_array(); if($rows){ $no = 1; foreach($rows as $k => $v){ $xno = ($k + 1) + $number_offset; $rows[$k]['xno'] = $xno; //print_r($v); $sql = "SELECT GROUP_CONCAT(DISTINCT T_OrderDetailID SEPARATOR ',') as ids, Group_ResultName as group_name, Group_ResultID as group_id, Group_ResultFlagNonLab as flag_nonlab, '' as status FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} AND T_OrderDetailIsActive = 'Y' GROUP BY Group_ResultID UNION SELECT T_OrderDetailID as xid, T_TestName as group_name, Group_ResultID as group_id, Group_ResultFlagNonLab as flag_nonlab, '' as status FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'Y' WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} AND T_OrderDetailIsActive = 'Y' GROUP BY T_OrderDetailT_TestID; "; //echo $sql; $details = $this->db_onedev->query($sql)->result_array(); $details_order = $details; foreach($details_order as $i => $j){ $details_order[$i]['status'] = 'N'; $sql = "SELECT fn_patient_status_order({$v['xid']}) as status"; $query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); if($query){ $details_order[$i]['status'] = $query->status; } } $rows[$k]['details_order'] = $details_order; $details_sampling = $details; foreach($details_sampling as $i => $j){ $details_sampling[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ if($j['flag_nonlab'] == 'N'){ $sql = "SELECT fn_patient_status_get_sampling_lab({$v['xid']},'{$j['ids']}') as status"; } else{ $sql = "SELECT fn_patient_status_get_sampling_non_lab({$v['xid']},'{$j['ids']}') as status"; } $query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); if($query){ $details_sampling[$i]['status'] = $query->status; } } else{ $details_sampling[$i]['status'] = 'N'; } } $rows[$k]['details_sampling'] = $details_sampling; $details_verifications = $details; foreach($details_verifications as $i => $j){ $details_verifications[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ if($j['flag_nonlab'] == 'N'){ $sql = "SELECT fn_patient_status_get_sample_verification_lab({$v['xid']},'{$j['ids']}') as status"; //echo $sql; } else{ $sql = "SELECT fn_patient_status_get_sample_verification_non_lab({$v['xid']},'{$j['ids']}') as status"; } $query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); if($query){ $details_verifications[$i]['status'] = $query->status; } } else{ $details_verifications[$i]['status'] = 'N'; } } $rows[$k]['details_verifications'] = $details_verifications; $details_process = $details; foreach($details_process as $i => $j){ $details_process[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ if($j['flag_nonlab'] == 'N'){ $sql = "SELECT fn_patient_status_get_process_lab({$v['xid']},'{$j['ids']}') as status"; } else{ $sql = "SELECT fn_patient_status_get_process_non_lab({$v['xid']},'{$j['ids']}') as status"; } $query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); if($query){ $details_process[$i]['status'] = $query->status; } } else{ $details_process[$i]['status'] = 'N'; } } $rows[$k]['details_process'] = $details_process; $details_result_verification = $details; foreach($details_result_verification as $i => $j){ $details_result_verification[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ $sql = "SELECT fn_patient_status_get_result_verification({$v['xid']},'{$j['ids']}') as status"; $query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); if($query){ $details_result_verification[$i]['status'] = $query->status; } } else{ $details_result_verification[$i]['status'] = 'N'; } } $rows[$k]['details_result_verification'] = $details_result_verification; $details_result_validation = $details; foreach($details_result_validation as $i => $j){ $details_result_validation[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ $sql = "SELECT fn_patient_status_get_result_validation({$v['xid']},'{$j['ids']}') as status"; $query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); if($query){ $details_result_validation[$i]['status'] = $query->status; } } else{ $details_result_validation[$i]['status'] = 'N'; } } $rows[$k]['details_result_validation'] = $details_result_validation; $details_print = $details; foreach($details_print as $i => $j){ $details_print[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ $sql = "SELECT fn_patient_status_get_result_print({$v['xid']},'{$j['ids']}') as status"; $query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); if($query){ $details_print[$i]['status'] = $query->status; } } else{ $details_print[$i]['status'] = 'N'; } } $rows[$k]['details_print'] = $details_print; } } $result = array("total" => $tot_page,"total_all"=>$tot_count, "records" => $rows, "sql"=> ''); $this->sys_ok($result); exit; } function search() { $prm = $this->sys_input; if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $search = $prm["search"]; $companyid = isset($prm["companyid"])?$prm["companyid"]:0; if(!isset($prm['current_page'])) $prm['current_page'] = 1; $number_limit = 15; $number_offset = ($prm['current_page'] - 1) * $number_limit ; $sql_where = ""; if ($search != "") { $prm['current_page'] = 1; $sql_where = " AND ( T_OrderHeaderLabNumberExt like '%{$search}%' OR T_OrderHeaderLabNumber like '%{$search}%' OR M_PatientName like '%{$search}%' ) "; } $filter_company = ""; if($companyid != 0 ){ $filter_company = " AND T_OrderHeaderM_CompanyID = {$companyid}"; } $sql = " SELECT COUNT(*) as total FROM ( SELECT '' as xno, T_OrderHeaderID as xid, DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y') as order_date, T_OrderHeaderLabNumber as no_reg, CONCAT(M_TitleName,' ',M_PatientName) as patient_name, M_CompanyName as company_name, M_MouName as mou_name, T_OrderHeaderIsCito as status_cito, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime, '%d-%m-%Y %H:%m') ORDER BY T_OrderPromiseDateTime ASC) as order_promise, '' as details_order, '' as details_sampling, '' as details_verifications, '' as details_process, '' as details_result_verification, '' as details_result_validation, '' as details_print, T_OrderHeaderLabNumberExt as no_reg_ext FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderPromiseDateTime) = '{$prm['xdate']}' $sql_where GROUP BY T_OrderHeaderID UNION SELECT '' as xno, T_OrderHeaderID as xid, DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y') as order_date, T_OrderHeaderLabNumber as no_reg, CONCAT(M_TitleName,' ',M_PatientName) as patient_name, M_CompanyName as company_name, M_MouName as mou_name, T_OrderHeaderIsCito as status_cito, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime, '%d-%m-%Y %H:%m') ORDER BY T_OrderPromiseDateTime ASC) as order_promise, '' as details_order, '' as details_sampling, '' as details_verifications, '' as details_process, '' as details_result_verification, '' as details_result_validation, '' as details_print, T_OrderHeaderLabNumberExt as no_reg_ext FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID LEFT JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderHeaderDate) = '{$prm['xdate']}' $sql_where GROUP BY T_OrderHeaderID )x "; //echo $sql; $query = $this->db_onedev->query($sql); $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("t_samplestorageout count", $this->db_onedev); exit; } $sql = " SELECT * FROM ( SELECT '' as xno, T_OrderHeaderID as xid, DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, T_OrderHeaderLabNumber as no_reg, CONCAT(M_TitleName,' ',M_PatientName) as patient_name, M_CompanyName as company_name, M_MouName as mou_name, T_OrderHeaderIsCito as status_cito, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime, '%d-%m-%Y %H:%i') ORDER BY T_OrderPromiseDateTime ASC) as order_promise, '' as details_order, '' as details_sampling, '' as details_verifications, '' as details_process, '' as details_result_verification, '' as details_result_validation, '' as details_print, T_OrderHeaderLabNumberExt as no_reg_ext FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderPromiseDateTime) = '{$prm['xdate']}' $sql_where GROUP BY T_OrderHeaderID UNION SELECT '' as xno, T_OrderHeaderID as xid, DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, T_OrderHeaderLabNumber as no_reg, CONCAT(M_TitleName,' ',M_PatientName) as patient_name, M_CompanyName as company_name, M_MouName as mou_name, T_OrderHeaderIsCito as status_cito, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime, '%d-%m-%Y %H:%i') ORDER BY T_OrderPromiseDateTime ASC) as order_promise, '' as details_order, '' as details_sampling, '' as details_verifications, '' as details_process, '' as details_result_verification, '' as details_result_validation, '' as details_print, T_OrderHeaderLabNumberExt as no_reg_ext FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID LEFT JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderHeaderDate) = '{$prm['xdate']}' $sql_where GROUP BY T_OrderHeaderID )x ORDER BY xid ASC limit $number_limit offset $number_offset "; //echo $sql; $query = $this->db_onedev->query($sql); $rows = $query->result_array(); if($rows){ $no = 1; foreach($rows as $k => $v){ $xno = ($k + 1) + $number_offset; $rows[$k]['xno'] = $xno; //print_r($v); $sql = "SELECT GROUP_CONCAT(DISTINCT T_OrderDetailID SEPARATOR ',') as ids, Group_ResultName as group_name, Group_ResultID as group_id, Group_ResultFlagNonLab as flag_nonlab, '' as status FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} AND T_OrderDetailIsActive = 'Y' GROUP BY Group_ResultID UNION SELECT T_OrderDetailID as xid, T_TestName as group_name, Group_ResultID as group_id, Group_ResultFlagNonLab as flag_nonlab, '' as status FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'Y' WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} AND T_OrderDetailIsActive = 'Y' GROUP BY T_OrderDetailT_TestID; "; //echo $sql; $details = $this->db_onedev->query($sql)->result_array(); $details_order = $details; foreach($details_order as $i => $j){ $details_order[$i]['status'] = 'N'; $sql = "SELECT fn_patient_status_order({$v['xid']}) as status"; $query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); if($query){ $details_order[$i]['status'] = $query->status; } } $rows[$k]['details_order'] = $details_order; $details_sampling = $details; foreach($details_sampling as $i => $j){ $details_sampling[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ $count_all = 0; $count_done = 0; if($j['flag_nonlab'] == 'N'){ //$sql = "SELECT fn_patient_status_get_sampling_lab({$v['xid']},'{$j['ids']}') as status"; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderSampleID FROM t_ordersample JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderSampleT_OrderHeaderID JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_barcodelab ON T_BarcodeLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderSampleT_BarcodeLabID = T_BarcodeLabID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderSampleT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderSampleID ) x_all"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderSampleID FROM t_ordersample JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderSampleT_OrderHeaderID JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_barcodelab ON T_BarcodeLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderSampleT_BarcodeLabID = T_BarcodeLabID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderSampleT_OrderHeaderID = {$v['xid']} AND T_OrderSampleReceive = 'Y' GROUP BY T_OrderSampleID ) x_done"; $count_done = $this->db_onedev->query($sql)->row()->xcount; } else{ //$sql = "SELECT fn_patient_status_get_sampling_non_lab({$v['xid']},'{$j['ids']}') as status"; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderDetailID FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderDetailID ) x_all"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderDetailID FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} JOIN t_samplingso ON T_OrderDetailT_OrderHeaderID = T_SamplingSoT_OrderHeaderID AND T_SamplingSoT_TestID = T_OrderDetailT_TestID AND T_SamplingSoDoneDate IS NOT NULL WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderDetailID ) x_done"; $count_done = $this->db_onedev->query($sql)->row()->xcount; } //$query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); $status = 'N'; if(intval($count_all) == intval($count_done)) $status = 'Y'; else if(intval($count_all) > intval($count_done) && intval($count_done) > 0) $status = 'P'; $details_sampling[$i]['status'] = $status ; } else{ $details_sampling[$i]['status'] = 'N'; } } $rows[$k]['details_sampling'] = $details_sampling; $details_verifications = $details; foreach($details_verifications as $i => $j){ $details_verifications[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ if($j['flag_nonlab'] == 'N'){ //$sql = "SELECT fn_patient_status_get_sampling_lab({$v['xid']},'{$j['ids']}') as status"; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderSampleID FROM t_ordersample JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderSampleT_OrderHeaderID JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_barcodelab ON T_BarcodeLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderSampleT_BarcodeLabID = T_BarcodeLabID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderSampleT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderSampleID ) x_all"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderSampleID FROM t_ordersample JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderSampleT_OrderHeaderID JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_barcodelab ON T_BarcodeLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderSampleT_BarcodeLabID = T_BarcodeLabID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderSampleT_OrderHeaderID = {$v['xid']} AND T_OrderSampleVerification = 'Y' GROUP BY T_OrderSampleID ) x_done"; $count_done = $this->db_onedev->query($sql)->row()->xcount; } else{ //$sql = "SELECT fn_patient_status_get_sampling_non_lab({$v['xid']},'{$j['ids']}') as status"; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderDetailID FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderDetailID ) x_all"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderDetailID FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} JOIN t_samplingso ON T_OrderDetailT_OrderHeaderID = T_SamplingSoT_OrderHeaderID AND T_SamplingSoT_TestID = T_OrderDetailT_TestID AND T_SamplingSoVerifyDate IS NOT NULL WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderDetailID ) x_done"; $count_done = $this->db_onedev->query($sql)->row()->xcount; } //$query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); $status = 'N'; if(intval($count_all) == intval($count_done)) $status = 'Y'; else if(intval($count_all) > intval($count_done) && intval($count_done) > 0) $status = 'P'; $details_verifications[$i]['status'] = $status; } else{ $details_verifications[$i]['status'] = 'N'; } } $rows[$k]['details_verifications'] = $details_verifications; $details_process = $details; foreach($details_process as $i => $j){ $details_process[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ if($j['flag_nonlab'] == 'N'){ //$sql = "SELECT fn_patient_status_get_sampling_lab({$v['xid']},'{$j['ids']}') as status"; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderSampleID FROM t_ordersample JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderSampleT_OrderHeaderID JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_barcodelab ON T_BarcodeLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderSampleT_BarcodeLabID = T_BarcodeLabID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderSampleT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderSampleID ) x_all"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderSampleID FROM t_ordersample JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderSampleT_OrderHeaderID JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_barcodelab ON T_BarcodeLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderSampleT_BarcodeLabID = T_BarcodeLabID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderSampleT_OrderHeaderID = {$v['xid']} AND T_OrderSampleHandling = 'Y' GROUP BY T_OrderSampleID ) x_done"; $count_done = $this->db_onedev->query($sql)->row()->xcount; } else{ //$sql = "SELECT fn_patient_status_get_sampling_non_lab({$v['xid']},'{$j['ids']}') as status"; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderDetailID FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderDetailID ) x_all"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderDetailID FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} JOIN t_samplingso ON T_OrderDetailT_OrderHeaderID = T_SamplingSoT_OrderHeaderID AND T_SamplingSoT_TestID = T_OrderDetailT_TestID AND T_SamplingSoM_DoctorID <> 0 AND T_SamplingSoReceiveAdmDate IS NOT NULL WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderDetailID ) x_done"; $count_done = $this->db_onedev->query($sql)->row()->xcount; } //$query = $this->db_onedev->query($sql)->row(); //echo $this->db_onedev->last_query(); $status = 'N'; if(intval($count_all) == intval($count_done)) $status = 'Y'; else if(intval($count_all) > intval($count_done) && intval($count_done) > 0) $status = 'P'; $details_process[$i]['status'] = $status; } else{ $details_process[$i]['status'] = 'N'; } } $rows[$k]['details_process'] = $details_process; $details_result_verification = $details; foreach($details_result_verification as $i => $j){ $details_result_verification[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ $sql = "SELECT COUNT(*) as xcount FROM t_orderheader_group_result WHERE T_OrderHeaderGroupResultT_OrderHeaderID = {$v['xid']} AND T_OrderHeaderGroupResultGroup_ResultID = {$j['group_id']} AND T_OrderHeaderGroupResultIsActive = 'Y'"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM t_orderheader_group_result WHERE T_OrderHeaderGroupResultT_OrderHeaderID = {$v['xid']} AND T_OrderHeaderGroupResultGroup_ResultID = {$j['group_id']} AND T_OrderHeaderVerification = 'Y' AND T_OrderHeaderGroupResultIsActive = 'Y'"; $count_done = $this->db_onedev->query($sql)->row()->xcount; $status = 'N'; if(intval($count_all) == intval($count_done)) $status = 'Y'; else if(intval($count_all) > intval($count_done) && intval($count_done) > 0) $status = 'P'; $details_result_verification[$i]['status'] = $status; } else{ $details_result_verification[$i]['status'] = 'N'; } } $rows[$k]['details_result_verification'] = $details_result_verification; $details_result_validation = $details; foreach($details_result_validation as $i => $j){ $details_result_validation[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ $sql = "SELECT COUNT(*) as xcount FROM t_orderheader_group_result WHERE T_OrderHeaderGroupResultT_OrderHeaderID = {$v['xid']} AND T_OrderHeaderGroupResultGroup_ResultID = {$j['group_id']} AND T_OrderHeaderGroupResultIsActive = 'Y'"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM t_orderheader_group_result WHERE T_OrderHeaderGroupResultT_OrderHeaderID = {$v['xid']} AND T_OrderHeaderGroupResultGroup_ResultID = {$j['group_id']} AND T_OrderHeaderValidation = 'Y' AND T_OrderHeaderGroupResultIsActive = 'Y'"; $count_done = $this->db_onedev->query($sql)->row()->xcount; $status = 'N'; if(intval($count_all) == intval($count_done)) $status = 'Y'; else if(intval($count_all) > intval($count_done) && intval($count_done) > 0) $status = 'P'; $details_result_validation[$i]['status'] = $status; } else{ $details_result_validation[$i]['status'] = 'N'; } } $rows[$k]['details_result_validation'] = $details_result_validation; $details_print = $details; foreach($details_print as $i => $j){ $details_print[$i]['status'] = 'N'; $status_fo_ver = $details_order[0]['status']; if($status_fo_ver == 'Y'){ $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderDetailID FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} GROUP BY T_OrderDetailID ) x_all"; $count_all = $this->db_onedev->query($sql)->row()->xcount; $sql = "SELECT COUNT(*) as xcount FROM ( SELECT T_OrderDetailID FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N' AND Group_ResultID = {$j['group_id']} WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']} AND T_OrderDetailPrintCount > 0 GROUP BY T_OrderDetailID ) x_done"; $count_done = $this->db_onedev->query($sql)->row()->xcount; $status = 'N'; if(intval($count_all) == intval($count_done)) $status = 'Y'; else if(intval($count_all) > intval($count_done) && intval($count_done) > 0) $status = 'P'; $details_print[$i]['status'] = $status; } else{ $details_print[$i]['status'] = 'N'; } } $rows[$k]['details_print'] = $details_print; } } $result = array("total" => $tot_page,"total_all"=>$tot_count, "records" => $rows, "sql"=> ''); $this->sys_ok($result); exit; } function searchcompany(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $max_rst = 12; $tot_count =0; $q = [ 'search' => '%' ]; if ($prm['search'] != '') { $q['search'] = "%{$prm['search']}%"; } // QUERY TOTAL $sql = "SELECT count(*) as total FROM m_company WHERE M_CompanyName like ? AND M_CompanyIsActive = 'Y'"; $query = $this->db_onedev->query($sql,$q['search']); //echo $query; if ($query) { $tot_count = $query->result_array()[0]["total"]; } else { $this->sys_error_db("m_city count",$this->db_onedev); exit; } $rows = array('id'=>0,'name'=>'Semua'); $sql = " SELECT M_CompanyID as id, M_CompanyName as name FROM m_company WHERE M_CompanyName like ? AND M_CompanyIsActive = 'Y' ORDER BY M_CompanyName DESC "; $query = $this->db_onedev->query($sql, array($q['search'])); if ($query) { $rows = $query->result_array(); array_push($rows,array('id'=>0,'name'=>'Semua')); //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("m_company rows",$this->db_onedev); exit; } } function getdata_order(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = $prm["xid"]; $sql = "SELECT * FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID WHERE T_OrderHeaderID = {$xid}"; $data_header = $this->db_onedev->query($sql)->row_array(); $datas = array(); $sql = " SELECT * FROM ( SELECT DATE_FORMAT(OrderLogCreated,'%d.%m.%Y %H:%i') as xdatetime, 'order' as type, JSON_OBJECT( 'company_name',M_CompanyName, 'mou_name', M_MouName, 'doctor_name',CONCAT(M_DoctorPrefix,M_DoctorPrefix2,' ',M_DoctorName,' ',M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3), 'doctor_address',M_DoctorAddressDescription, 'alias_doctor',orderLogT_OrderHeaderAddOnAliasDoctorName, 'alias_doctor_name',orderLogT_OrderHeaderAddOnAliasDoctorAddress, 'age',OrderLogAge, 'fo_note',IFNULL(OrderLogFoNote,'-'), 'subtotal',OrderLogSubtotal, 'total',OrderLogTotal, 'details',OrderLogDetails, 'deliveries',OrderLogDeliveries, 'promises',OrderLogPromises ) as data, M_UserUsername as username FROM order_log JOIN m_user ON OrderLogUserID = M_UserID JOIN m_doctor ON OrderLogM_DoctorSenderID = M_DoctorID JOIN m_company ON OrderLogM_CompanyID = M_CompanyID JOIN m_mou ON OrderLogM_MouID = M_MouID JOIN m_doctoraddress ON OrderLogM_DoctorSenderAddressID = M_DoctorAddressID WHERE OrderLogT_OrderHeaderID = {$xid} UNION SELECT DATE_FORMAT(orderAttrCreated,'%d.%m.%Y %H:%i') as xdatetime, orderAttrType as type, orderAttrJson as data, M_UserUsername as username FROM order_attr JOIN m_user ON orderAttrUserID = M_UserID WHERE orderAttrT_OrderHeaderID = {$xid} AND ( orderAttrType = 'req_change_dob' OR orderAttrType = 'change_dob' ) UNION SELECT DATE_FORMAT(orderAttrCreated,'%d.%m.%Y %H:%i') as xdatetime, orderAttrType as type, orderAttrJson as data, M_UserUsername as username FROM order_attr JOIN m_user ON orderAttrUserID = M_UserID WHERE orderAttrT_OrderHeaderID = {$xid} AND orderAttrType = 'spv_order_doctor' UNION SELECT DATE_FORMAT(orderAttrCreated,'%d.%m.%Y %H:%i') as xdatetime, orderAttrType as type, orderAttrJson as data, M_UserUsername as username FROM order_attr JOIN m_user ON orderAttrUserID = M_UserID WHERE orderAttrT_OrderHeaderID = {$xid} AND orderAttrType = 'spv_order_company' UNION SELECT DATE_FORMAT(OrderPxCreated,'%d.%m.%Y %H:%i') as xdatetime, OrderPxType as type, OrderPxJson as data, M_UserUsername as username FROM order_px JOIN m_user ON OrderPxUserID = M_UserID WHERE OrderPxT_OrderHeaderID = {$xid} AND OrderPxType = 'spv_test' UNION SELECT DATE_FORMAT(OrderPxCreated,'%d.%m.%Y %H:%i') as xdatetime, OrderPxType as type, JSON_OBJECT('mou',OrderPxMou,'data',OrderPxJson) as data, M_UserUsername as username FROM order_px JOIN m_user ON OrderPxUserID = M_UserID WHERE OrderPxT_OrderHeaderID = {$xid} AND OrderPxType = 'update_mou' UNION SELECT DATE_FORMAT(Order_DeliveryCreated,'%d.%m.%Y %H:%i') as xdatetime, 'order_delivery' as type, Order_DeliveryJson as data, M_UserUsername as username FROM order_delivery JOIN m_user ON Order_DeliveryUserID = M_UserID WHERE Order_DeliveryT_OrdeheaderID = {$xid} UNION SELECT DATE_FORMAT(F_PaymentCreated,'%d.%m.%Y %H:%i') as xdatetime, 'payment' as type, F_PaymentID as data, M_UserUsername as username FROM f_payment JOIN m_user ON F_PaymentM_UserID = M_UserID WHERE F_PaymentT_OrderHeaderID = {$xid} UNION SELECT DATE_FORMAT(Fo_StatusDate,'%d.%m.%Y %H:%i') as xdatetime, 'fo_verification' as type, Fo_StatusID as data, M_UserUsername as username FROM fo_status JOIN m_user ON Fo_StatusM_UserID = M_UserID WHERE Fo_StatusT_OrderHeaderID = {$xid} AND Fo_StatusM_StatusID IN (3,4) UNION SELECT DATE_FORMAT(orderAttrCreated,'%d.%m.%Y %H:%i') as xdatetime, 'change_promise' as type, orderAttrJson as data, M_UserUsername as username FROM order_attr JOIN m_user ON orderAttrUserID = M_UserID WHERE orderAttrT_OrderHeaderID = {$xid} AND ( orderAttrType = 'spv_promise' OR orderAttrType = 'patlist_promise' ) UNION SELECT DATE_FORMAT(OrderPayloadCreated,'%d.%m.%Y %H:%i') as xdatetime, 'order_payload' as type, OrderPayloadJSON as data, M_UserUsername as username FROM one_lab_log.order_payload JOIN m_user ON OrderPayloadUserID = M_UserID WHERE OrderPayloadM_PatientID = {$data_header['T_OrderHeaderM_PatientID']} AND DATE(OrderPayloadCreated) = DATE('{$data_header['T_OrderHeaderDate']}') UNION SELECT DATE_FORMAT(Patient_SignatureCreated,'%d.%m.%Y %H:%i') as xdatetime, 'patient_signature' as type, JSON_OBJECT('url', Patient_SignatureUrl) as data, IFNULL(M_UserUsername, '-') as username FROM patient_signature LEFT JOIN m_user ON Patient_SignatureCreatedUserID = M_UserID WHERE Patient_SignatureM_PatientID = {$data_header['T_OrderHeaderM_PatientID']} AND DATE(Patient_SignatureCreated) = DATE('{$data_header['T_OrderHeaderDate']}') AND Patient_SignatureIsActive = 'Y' UNION SELECT DATE_FORMAT(Log_SignatureCreated,'%d.%m.%Y %H:%i') as xdatetime, 'log_signature' as type, JSON_OBJECT( 'before_url', Log_SignatureBeforeUrl, 'after_url', Log_SignatureAfterUrl ) as data, IFNULL(M_UserUsername, '-') as username FROM one_lab_log.log_signature LEFT JOIN m_user ON Log_SignatureUserID = M_UserID WHERE Log_SignatureM_PatientID = {$data_header['T_OrderHeaderM_PatientID']} AND DATE(Log_SignatureCreated) = DATE('{$data_header['T_OrderHeaderDate']}') UNION SELECT DATE_FORMAT(OrderLogPxCreated,'%d.%m.%Y %H:%i') as xdatetime, CONCAT('order_log_px_', LOWER(OrderLogPxType)) as type, JSON_OBJECT( 'action', OrderLogPxType, 'test_name', OrderLogPxT_TestName, 'packet_name', OrderLogPxT_PacketName, 'price', OrderLogPxT_PriceTotal, 'raw_data', OrderLogPxJson ) as data, IFNULL(M_UserUsername, '-') as username FROM one_lab.order_log_px LEFT JOIN m_user ON OrderLogPxUserID = M_UserID WHERE OrderLogPxJson LIKE '%\"T_OrderDetailT_OrderHeaderID\":\"{$xid}\"%' UNION SELECT DATE_FORMAT(Order_MouLogCreated,'%d.%m.%Y %H:%i') as xdatetime, 'change_mou_log' as type, JSON_OBJECT( 'from_mou_name', Order_MouLogFromM_MouName, 'to_mou_name', Order_MouLogToMouName, 'px_before', IFNULL(Order_MouLogPXBefore, ''), 'px_after', IFNULL(Order_MouLogPXAfter, '') ) as data, IFNULL(M_UserUsername, '-') as username FROM one_lab_log.order_mou_log LEFT JOIN m_user ON Order_MouLogCreatedUserID = M_UserID WHERE Order_MouLogT_OrderHeaderID = {$xid} ) x ORDER BY xdatetime ASC"; //echo $sql; $datas = $this->db_onedev->query($sql)->result_array(); foreach($datas as $k => $v){ if($v['type'] == 'order'){ $datas[$k]['data'] = json_decode($v['data']); $datas[$k]['data']->details = json_decode($datas[$k]['data']->details); $datas[$k]['data']->deliveries = json_decode($datas[$k]['data']->deliveries); $datas[$k]['data']->promises = json_decode($datas[$k]['data']->promises); foreach($datas[$k]['data']->deliveries as $kdev => $vdev){ $sql = "SELECT * FROM m_delivery WHERE M_DeliveryID = {$vdev->delivery_id}"; //echo $sql; $datas[$k]['data']->deliveries[$kdev]->delivery_code = $this->db_onedev->query($sql)->row()->M_DeliveryName; } } else if($v['type'] == 'fo_verification'){ $sql = "SELECT * FROM fo_verificationsvalue JOIN fo_verificationslabel ON Fo_VerificationsValueFo_VerificationsLabelID = Fo_VerificationsLabelID WHERE Fo_VerificationsValueT_OrderHeaderID = {$xid} ORDER BY Fo_VerificationsLabelOrder ASC"; $datas[$k]['data'] = $this->db_onedev->query($sql)->result_array(); } else if($v['type'] == 'update_mou'){ $xdt = json_decode($v['data']); $xdt->mou = json_decode($xdt->mou); $xdt->data = json_decode($xdt->data); $datas[$k]['data'] = $xdt; } else if($v['type'] == 'payment'){ $sql = "SELECT * FROM f_payment WHERE F_PaymentID = {$v['data']}"; $payment_header = $this->db_onedev->query($sql)->row_array(); $sql = "SELECT f_paymentdetail.*, M_PaymentTypeCode, CASE WHEN M_PaymentTypeCode = 'CASH' THEN M_PaymentTypeName WHEN M_PaymentTypeCode = 'DEBIT' THEN CONCAT(M_PaymentTypeName,' : ',card_bank.Nat_BankName,'+',bank.Nat_BankName,' [ ',M_BankAccountNo,' ]') WHEN M_PaymentTypeCode = 'CREDIT' THEN CONCAT(M_PaymentTypeName,' : ',card_bank.Nat_BankName,'+',bank.Nat_BankName,' [ ',M_BankAccountNo,' ]') WHEN M_PaymentTypeCode = 'TRANSFER' THEN CONCAT(M_PaymentTypeName,'+',bank.Nat_BankName,' [ ',M_BankAccountNo,' ]') ELSE CONCAT(M_PaymentTypeName,' [ ',F_PaymentDetailNote,' ]') END as name FROM f_paymentdetail JOIN m_paymenttype ON F_PaymentDetailM_PaymentTypeID = M_PaymentTypeID LEFT JOIN nat_bank card_bank ON F_PaymentDetailCardNat_BankID = card_bank.Nat_BankID LEFT JOIN m_bank_account ON F_PaymentDetailM_BankAccountID = M_BankAccountID LEFT JOIN nat_bank bank ON M_BankAccountNat_BankID = bank.Nat_BankID WHERE F_PaymentDetailF_PaymentID = '{$v['data']}' AND F_PaymentDetailIsActive = 'Y'"; //echo $sql; $payment_details = $this->db_onedev->query($sql)->result_array(); $datas[$k]['data'] = array('header'=>$payment_header,'details'=>$payment_details); } else{ $datas[$k]['data'] = json_decode($v['data']); } } $result = array("header"=>$data_header,"records" => $datas); $this->sys_ok($result); } function getdata_sampling(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = $prm["xid"]; $sql = "SELECT *,'{$prm['group_name']}' as group_name FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID WHERE T_OrderHeaderID = {$xid}"; $data_header = $this->db_onedev->query($sql)->row_array(); $x_status = " SampleByStepM_StatusSampleCode = 'SAMPLING.Sampling.Unsampled' OR SampleByStepM_StatusSampleCode = 'SAMPLING.Sampling.Sampled' OR SampleByStepM_StatusSampleCode = 'SAMPLING.Sampling.Received' "; $x_status_so = " SampleSoByStepCode = 'SAMPLING.Sampling.Unsampled' OR SampleSoByStepCode = 'SAMPLING.Sampling.Sampled' OR SampleSoByStepCode = 'SAMPLING.Sampling.Received' "; if($prm['action'] == 'verif'){ $x_status = " SampleByStepM_StatusSampleCode = 'SAMPLING.Verification.Verify' "; $x_status_so = " SampleSoByStepCode = 'SAMPLING.Verification.Verify' "; } if($prm['action'] == 'process'){ $x_status = " SampleByStepM_StatusSampleCode = 'SAMPLING.Handling.Process' "; $x_status_so = " SampleSoByStepCode = 'SAMPLING.Handling.Process' "; } $datas = array(); $sql = "SELECT * from group_result WHERE Group_ResultID = {$prm['group_id']}"; $group_rst = $this->db_onedev->query($sql)->row_array(); if($group_rst['Group_ResultFlagNonLab'] == 'N'){ $sql = "SELECT T_OrderSampleT_OrderHeaderID as order_id, T_OrderSampleT_SampleTypeID as sample_id, T_SampleTypeName as sample_name, T_OrderSampleT_SampleStationID as station_id, T_BarcodeLabBarcode as barcode, T_OrderSampleSampling as sampling_status, DATE_FORMAT(T_OrderSampleSamplingDate,'%d-%m-%Y') as sampling_date, DATE_FORMAT(T_OrderSampleSamplingTime,'%H:%i') as sampling_time, T_OrderSampleSamplingUserID as sampling_user_id, sampling_user.M_UserUsername as sampling_username, T_OrderSampleReceive as reveice_status, DATE_FORMAT(T_OrderSampleReceiveDate,'%d-%m-%Y') as receive_date, DATE_FORMAT(T_OrderSampleReceiveTime,'%H:%i') as receive_time, T_OrderSampleReceiveUserID as receive_user_id, receive_user.M_UserUsername as receive_username FROM t_barcodelab JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID LEFT JOIN t_ordersample ON T_OrderSampleT_BarcodeLabID = T_BarcodeLabID LEFT JOIN m_user sampling_user ON T_OrderSampleSamplingUserID = sampling_user.M_UserID LEFT JOIN m_user receive_user ON T_OrderSampleSamplingUserID = receive_user.M_UserID WHERE T_OrderSampleT_OrderHeaderID = {$xid}"; //echo $sql; if($prm['action'] == 'verif'){ $sql = "SELECT T_OrderSampleT_OrderHeaderID as order_id, T_OrderSampleT_SampleTypeID as sample_id, T_SampleTypeName as sample_name, T_OrderSampleT_SampleStationID as station_id, T_BarcodeLabBarcode as barcode, T_OrderSampleSampling as sampling_status, DATE_FORMAT(T_OrderSampleSamplingDate,'%d-%m-%Y') as sampling_date, DATE_FORMAT(T_OrderSampleSamplingTime,'%H:%i') as sampling_time, T_OrderSampleSamplingUserID as sampling_user_id, sampling_user.M_UserUsername as sampling_username, T_OrderSampleVerification as reveice_status, DATE_FORMAT(T_OrderSampleVerificationDate,'%d-%m-%Y') as receive_date, DATE_FORMAT(T_OrderSampleVerificationTime,'%H:%i') as receive_time, T_OrderSampleVerificationUserID as receive_user_id, receive_user.M_UserUsername as receive_username FROM t_barcodelab JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID LEFT JOIN t_ordersample ON T_OrderSampleT_BarcodeLabID = T_BarcodeLabID LEFT JOIN m_user sampling_user ON T_OrderSampleSamplingUserID = sampling_user.M_UserID LEFT JOIN m_user receive_user ON T_OrderSampleVerificationUserID = receive_user.M_UserID WHERE T_OrderSampleT_OrderHeaderID = {$xid}"; } if($prm['action'] == 'process'){ $sql = "SELECT T_OrderSampleT_OrderHeaderID as order_id, T_OrderSampleT_SampleTypeID as sample_id, T_SampleTypeName as sample_name, T_OrderSampleT_SampleStationID as station_id, T_BarcodeLabBarcode as barcode, T_OrderSampleSampling as sampling_status, DATE_FORMAT(T_OrderSampleSamplingDate,'%d-%m-%Y') as sampling_date, DATE_FORMAT(T_OrderSampleSamplingTime,'%H:%i') as sampling_time, T_OrderSampleSamplingUserID as sampling_user_id, sampling_user.M_UserUsername as sampling_username, T_OrderSampleHandling as reveice_status, DATE_FORMAT(T_OrderSampleHandlingDate,'%d-%m-%Y') as receive_date, DATE_FORMAT(T_OrderSampleHandlingTime,'%H:%i') as receive_time, T_OrderSampleHandlingUserID as receive_user_id, receive_user.M_UserUsername as receive_username FROM t_barcodelab JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID LEFT JOIN t_ordersample ON T_OrderSampleT_BarcodeLabID = T_BarcodeLabID LEFT JOIN m_user sampling_user ON T_OrderSampleSamplingUserID = sampling_user.M_UserID LEFT JOIN m_user receive_user ON T_OrderSampleHandlingUserID = receive_user.M_UserID WHERE T_OrderSampleT_OrderHeaderID = {$xid}"; //echo $sql; } } else{ $sql = "SELECT T_OrderHeaderID as order_id, T_TestID as sample_id, T_TestName as sample_name, T_OrderHeaderLabNumberExt as barcode, IF(ISNULL(T_SamplingSoProcessDate),'N','Y') as sampling_status, DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y') as sampling_date, DATE_FORMAT(T_SamplingSoProcessTime,'%H:%i') as sampling_time, sampling_user.M_UserUsername as sampling_username, IF(ISNULL(T_SamplingSoDoneDate),'N','Y') as reveice_status, DATE_FORMAT(T_SamplingSoDoneDate,'%d-%m-%Y') as receive_date, DATE_FORMAT(T_SamplingSoDoneTime,'%H:%i') as receive_time, T_SamplingSoDoneUserID as receive_user_id, receive_user.M_UserUsername as receive_username FROM t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultID = {$prm['group_id']} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' LEFT JOIN m_user sampling_user ON T_SamplingSoProcessUserID = sampling_user.M_UserID LEFT JOIN m_user receive_user ON T_SamplingSoDoneUserID = receive_user.M_UserID WHERE T_OrderHeaderID = {$xid} AND T_OrderHeaderIsActive = 'Y' GROUP BY T_OrderDetailID"; //echo $sql; if($prm['action'] == 'verif'){ $sql = "SELECT T_OrderHeaderID as order_id, T_TestID as sample_id, T_TestName as sample_name, T_OrderHeaderLabNumberExt as barcode, IF(ISNULL(T_SamplingSoProcessDate),'N','Y') as sampling_status, DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y') as sampling_date, DATE_FORMAT(T_SamplingSoProcessTime,'%H:%i') as sampling_time, sampling_user.M_UserUsername as sampling_username, IF(ISNULL(T_SamplingSoVerifyDate),'N','Y') as reveice_status, DATE_FORMAT(T_SamplingSoVerifyDate,'%d-%m-%Y') as receive_date, DATE_FORMAT(T_SamplingSoVerifyTime,'%H:%i') as receive_time, T_SamplingSoVerifyUserID as receive_user_id, receive_user.M_UserUsername as receive_username FROM t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultID = {$prm['group_id']} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' LEFT JOIN m_user sampling_user ON T_SamplingSoProcessUserID = sampling_user.M_UserID LEFT JOIN m_user receive_user ON T_SamplingSoVerifyUserID = receive_user.M_UserID WHERE T_OrderHeaderID = {$xid} AND T_OrderHeaderIsActive = 'Y' GROUP BY T_OrderDetailID"; } if($prm['action'] == 'process'){ $sql = "SELECT T_OrderHeaderID as order_id, T_TestID as sample_id, T_TestName as sample_name, T_OrderHeaderLabNumberExt as barcode, IF(ISNULL(T_SamplingSoProcessDate),'N','Y') as sampling_status, DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y') as sampling_date, DATE_FORMAT(T_SamplingSoProcessTime,'%H:%i') as sampling_time, sampling_user.M_UserUsername as sampling_username, IF(ISNULL(T_SamplingSoReceiveAdmDate),'N','Y') as reveice_status, DATE_FORMAT(T_SamplingSoReceiveAdmDate,'%d-%m-%Y') as receive_date, DATE_FORMAT(T_SamplingSoReceiveAdmTime,'%H:%i') as receive_time, T_SamplingSoReceiveAdmUserID as receive_user_id, receive_user.M_UserUsername as receive_username FROM t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultID = {$prm['group_id']} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' LEFT JOIN m_user sampling_user ON T_SamplingSoProcessUserID = sampling_user.M_UserID LEFT JOIN m_user receive_user ON T_SamplingSoReceiveAdmUserID = receive_user.M_UserID WHERE T_OrderHeaderID = {$xid} AND T_OrderHeaderIsActive = 'Y' GROUP BY T_OrderDetailID"; } } $data_resume = $this->db_onedev->query($sql)->result_array(); $arr_datas = array(); if($group_rst['Group_ResultFlagNonLab'] == 'N'){ $sql = "SELECT SampleByStepID, T_BarcodeLabBarcode, T_SampleTypeName, SampleByStepDateTime, SampleByStepM_StatusSampleCode, M_UserUsername, SampleByStepRequirementStatus, GROUP_CONCAT(Nat_RequirementName separator ', ') as requirements, 1 as group_id, 'LAB' as group_name, NULL xform, NULL xfilm FROM ( SELECT SampleByStepID, T_BarcodeLabBarcode, T_SampleTypeName, SampleByStepDateTime, SampleByStepM_StatusSampleCode, M_UserUsername, SampleByStepRequirementStatus, Nat_RequirementName FROM sample_by_step JOIN t_barcodelab ON SampleByStepT_BarcodeLabID = T_BarcodeLabID JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID LEFT JOIN m_user ON SampleByStepUserID = M_UserID LEFT JOIN nat_requirement ON json_contains(SampleByStepRequirements, Nat_RequirementID) WHERE SampleByStepT_OrderHeaderID = {$xid} AND ( {$x_status} ) ) x GROUP BY SampleByStepID"; //echo $sql; } else { $sql = "SELECT SampleByStepID, T_BarcodeLabBarcode, T_SampleTypeName, SampleByStepDateTime, SampleByStepM_StatusSampleCode, M_UserUsername, SampleByStepRequirementStatus, GROUP_CONCAT(Nat_RequirementName separator ', ') as requirements, Group_ResultID as group_id, Group_ResultName as group_name, xform, xfilm FROM ( SELECT SampleSoByStepID SampleByStepID, T_OrderHeaderLabNumberExt T_BarcodeLabBarcode, T_TestName T_SampleTypeName , SampleSoByStepDateTime SampleByStepDateTime, SampleSoByStepCode SampleByStepM_StatusSampleCode, M_UserUsername, SampleSoByStepRequirementStatus SampleByStepRequirementStatus, Nat_RequirementName, Group_ResultID, Group_ResultName, CONCAT(T_SamplingSoFormKv,'^',T_SamplingSoFormMa,'^',T_SamplingSoFormSecond,'^',T_SamplingSoFormExpose) as xform, CONCAT(T_SamplingSoFilmType,'^',T_SamplingSoFilmAmount) as xfilm FROM sample_so_by_step JOIN t_test ON SampleSoByStepT_TestID = T_TestID JOIN group_resultdetail ON Group_ResultDetailT_TestID = SampleSoByStepT_TestID AND Group_ResultDetailIsActive = 'Y' LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = SampleSoByStepT_OrderHeaderID AND T_SamplingSoT_TestID = SampleSoByStepT_TestID LEFT JOIN t_samplingso_form ON T_SamplingSoFormT_SamplingSOID = T_SamplingSoID LEFT JOIN t_samplingso_film ON T_SamplingSoFilmT_SamplingSoID = T_SamplingSoID JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultID = {$prm['group_id']} JOIN t_orderheader ON SampleSoByStepT_OrderHeaderID = T_OrderHeaderID LEFT JOIN m_user ON SampleSoByStepUserID = M_UserID LEFT JOIN nat_requirement ON json_contains(SampleSoByStepReuirements, Nat_RequirementID) WHERE SampleSoByStepT_OrderHeaderID = {$xid} AND ( {$x_status_so} ) ) x GROUP BY SampleByStepID"; //echo $sql; } $datas = $this->db_onedev->query($sql)->result_array(); foreach($datas as $k => $v){ $found = $this->search_exist($arr_datas,$v['SampleByStepDateTime'],$v['SampleByStepM_StatusSampleCode']); if ($found == -1) { $xv = array( "datetime" => $v['SampleByStepDateTime'], "status" => $v['SampleByStepM_StatusSampleCode'], "user" => $v["M_UserUsername"], "group_id" => $v["group_id"], "details" => array( array( "SampleByStepID" => $v["SampleByStepID"], "T_BarcodeLabBarcode" => $v["T_BarcodeLabBarcode"], "T_SampleTypeName" => $v["T_SampleTypeName"], "M_UserUsername" => $v["M_UserUsername"], "SampleByStepRequirementStatus" => $v["SampleByStepRequirementStatus"], "requirements" => $v["requirements"], "group_id" => $v["group_id"], "xform" => $v["xform"], "xfilm" => $v["xfilm"] ) ) ); array_push($arr_datas,$xv); } else{ $xarr = $arr_datas[$found]['details']; //print_r($xarr); array_push( $xarr, array( "SampleByStepID" => $v["SampleByStepID"], "T_BarcodeLabBarcode" => $v["T_BarcodeLabBarcode"], "T_SampleTypeName" => $v["T_SampleTypeName"], "M_UserUsername" => $v["M_UserUsername"], "SampleByStepRequirementStatus" => $v["SampleByStepRequirementStatus"], "requirements" => $v["requirements"], "group_id" => $v["group_id"], "xform" => $v["xform"], "xfilm" => $v["xfilm"] ) ); $arr_datas[$found]['details'] = $xarr; } } $result = array("header"=>$data_header,"resume"=>$data_resume,"records" => $arr_datas); $this->sys_ok($result); } function getdata_result(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = $prm["xid"]; $sql = "SELECT *,'{$prm['group_name']}' as group_name, '{$prm['action']}' as action FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID WHERE T_OrderHeaderID = {$xid}"; $data_header = $this->db_onedev->query($sql)->row_array(); $datas = array(); $sql = " SELECT T_OrderDetailT_TestSasCode as sascode, T_OrderDetailResult as result, T_OrderDetailT_TestIsResult as is_result, T_OrderDetailT_TestIsPrice as is_price, T_OrderDetailT_TestName as test_name, T_OrderDetailVerification as ver_status, DATE_FORMAT(T_OrderDetailVerDate,'%d-%m-%Y %H:%i') as ver_date, ver_user.M_UserUsername as ver_username, T_OrderDetailValidation as val_status, DATE_FORMAT(T_OrderDetailValDate,'%d-%m-%Y %H:%i') as val_date, val_user.M_UserUsername as val_username, IF(T_OrderDetailPrintCount > 0,'Y','N') as print_status, DATE_FORMAT(T_OrderDetailPrintTime,'%d-%m-%Y %H:%i') as print_date, print_user.M_UserUsername as print_username FROM t_orderdetail JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultID = {$prm['group_id']} LEFT JOIN m_user ver_user ON T_OrderDetailVerUserID = ver_user.M_UserID LEFT JOIN m_user val_user ON T_OrderDetailValUserID = val_user.M_UserID LEFT JOIN m_user print_user ON T_OrderDetailPrintBy = print_user.M_UserID WHERE T_OrderDetailT_OrderHeaderID = {$xid} AND T_OrderDetailIsActive = 'Y' "; // echo $sql; $arr_datas = $this->db_onedev->query($sql)->result_array(); $result = array("header"=>$data_header,"records" => $arr_datas); $this->sys_ok($result); } function getdata_print(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = $prm["xid"]; $arr_datas = array('group_name' => $prm['group_name'],'patient_name' => $prm['patient_name'],'no_reg' => $prm['no_reg'], 'no_reg_ext' => $prm['no_reg_ext'],'data_internal' => array(),'data_external' => array()); $sql = "SELECT result_processtooffice.*, Group_ResultName as group_name, sender.M_UserUsername as sender_name, receiver.M_UserUsername as receiver_name, DATE_FORMAT(Result_ProcessToOfficeSendTime,'%d-%m-%Y %H:%i') as sent_time, DATE_FORMAT(Result_ProcessToOfficeReceiveTime,'%d-%m-%Y %H:%i') as received_time, Result_ProcessToOfficeStatus as status, M_DeliveryTypeCode as delivery_type, DATE_FORMAT(T_OrderPromiseDateTime,'%d-%m-%Y %H:%i') as promise_time FROM result_processtooffice JOIN t_orderpromise ON Result_ProcessToOfficeT_OrderPromiseID = T_OrderPromiseID JOIN group_result ON Result_ProcessToOfficeGroup_ResultID = Group_ResultID JOIN m_delivery ON Result_ProcessToOfficeT_OrderDeliveryM_DeliveryID = M_DeliveryID JOIN m_deliverytype ON Result_ProcessToOfficeT_OrderDeliveryM_DeliveryTypeID = M_DeliveryTypeID JOIN m_user sender ON Result_ProcessToOfficeSendBy = sender.M_UserID LEFT JOIN m_user receiver ON Result_ProcessToOfficeReceivedBy = receiver.M_UserID WHERE Result_ProcessToOfficeIsActive = 'Y' AND Result_ProcessToOfficeT_OrderHeaderID = {$prm['xid']} UNION SELECT result_processtooffice.*, Group_ResultName as group_name, sender.M_UserUsername as sender_name, receiver.M_UserUsername as receiver_name, DATE_FORMAT(Result_ProcessToOfficeSendTime,'%d-%m-%Y %H:%i') as sent_time, DATE_FORMAT(Result_ProcessToOfficeReceiveTime,'%d-%m-%Y %H:%i') as received_time, Result_ProcessToOfficeStatus as status, M_DeliveryTypeCode as delivery_type, DATE_FORMAT(T_OrderPromiseDateTime,'%d-%m-%Y %H:%i') as promise_time FROM result_processtooffice JOIN t_orderpromise ON Result_ProcessToOfficeT_OrderPromiseID = T_OrderPromiseID JOIN group_resultdetail ON Result_ProcessToOfficeGroup_ResultID = Group_ResultDetailT_TestID JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID JOIN m_delivery ON Result_ProcessToOfficeT_OrderDeliveryM_DeliveryID = M_DeliveryID JOIN m_deliverytype ON Result_ProcessToOfficeT_OrderDeliveryM_DeliveryTypeID = M_DeliveryTypeID JOIN m_user sender ON Result_ProcessToOfficeSendBy = sender.M_UserID LEFT JOIN m_user receiver ON Result_ProcessToOfficeReceivedBy = receiver.M_UserID WHERE Result_ProcessToOfficeIsActive = 'Y' AND Result_ProcessToOfficeT_OrderHeaderID = {$prm['xid']}"; //echo $sql; $data_rst = $this->db_onedev->query($sql)->result_array(); if($data_rst){ $arr_datas['data_internal'] = $data_rst; } $sql = "SELECT T_OrderDeliveryID as id, M_DeliveryName as delivery_name, T_OrderDeliveryDestination as destinastion, M_DeliveryTypeCode as delivery_type, 'Y' as xshow, '' as details FROM t_orderdelivery JOIN m_delivery ON T_OrderDeliveryM_DeliveryID = M_DeliveryID JOIN m_deliverytype ON T_OrderDeliveryM_DeliveryTypeID = M_DeliveryTypeID WHERE T_OrderDeliveryT_OrderHeaderID = {$prm['xid']} AND T_OrderDeliveryIsActive = 'Y'"; $data_delivery = $this->db_onedev->query($sql)->result_array(); if($data_delivery){ foreach($data_delivery as $k => $v){ if($v['delivery_type'] == 'PICKUP'){ $sql = "SELECT M_UserUsername as sender_name, DATE_FORMAT(Result_HandOverPatientDateTime,'%d-%m-%Y %H:%i') as sent_time, Result_HandOverPatientReceiverName as receiver_name, IFNULL(Result_HandOverPatientReceiverHp,'') as receiver_hp, IFNULL(Result_HandOverPatientReceiverInfo,'') as receiver_info, DATE_FORMAT(T_OrderPromiseDateTime,'%d-%m-%Y %H:%i') as promise_time FROM result_handoverpatient LEFT JOIN m_user ON Result_HandOverPatientOfficer = M_UserID JOIN t_orderpromise ON Result_HandOverPatientT_OrderPromiseID = T_OrderPromiseID WHERE Result_HandOverPatientT_OrderHeaderID = {$prm['xid']} AND Result_HandOverPatientIsActive = 'Y'"; $data_details = $this->db_onedev->query($sql)->result_array(); if($data_details){ $data_delivery[$k]['details'] = $data_details; } } if($v['delivery_type'] == 'EMAIL'){ $sql = "SELECT M_UserUsername as sender_name, DATE_FORMAT(Result_HandOverEmailSendDateTime,'%d-%m-%Y %H:%i') as sent_time, DATE_FORMAT(Result_HandOverEmailReceivedDateTime,'%d-%m-%Y %H:%i') as received_time, DATE_FORMAT(T_OrderPromiseDateTime,'%d-%m-%Y %H:%i') as promise_time, Result_HandOverEmailStatus as status FROM result_handoveremail LEFT JOIN m_user ON Result_HandOverEmailOfficer = M_UserID JOIN t_orderpromise ON Result_HandOverEmailT_OrderPromiseID = T_OrderPromiseID WHERE Result_HandOverEmailT_OrderHeaderID = {$prm['xid']} AND Result_HandOverEmailIsActive = 'Y' AND Result_HandOverEmailT_OrderDeliveryID = {$v['id']}"; $data_details = $this->db_onedev->query($sql)->result_array(); if($data_details){ $data_delivery[$k]['details'] = $data_details; } } if($v['delivery_type'] == 'WHATSAPP'){ $sql = " SELECT Tx_WhatsappDetailID as xid, Group_ResultName as group_name, Tx_WhatsappDestination as destination, Tx_WhatsappDetailUuid as uuid, DATE_FORMAT(Tx_WhatsappDetailSend,'%d-%m-%Y %H:%i') as send_time, DATE_FORMAT(Tx_WhatsappDetailReceive,'%d-%m-%Y %H:%i') as received_time, DATE_FORMAT(Tx_WhatsappDetailRead,'%d-%m-%Y %H:%i') as read_time, Tx_WhatsappDetailIsSend as isSend, Tx_WhatsappDetailIsReceive as isReceive, Tx_WhatsappDetailIsRead as isRead FROM tx_whatsappdetail JOIN tx_whatsapp ON Tx_WhatsappDetailTx_WhatsappID = Tx_WhatsappID AND Tx_WhatsappT_OrderHeaderID = {$prm['xid']} JOIN group_result ON Tx_WhatsappGroup_ResultID = Group_ResultID WHERE Tx_WhatsappIsActive = 'Y' UNION SELECT Tx_WhatsappDetailID as xid, Group_ResultName as group_name, Tx_WhatsappDestination as destination, Tx_WhatsappDetailUuid as uuid, DATE_FORMAT(Tx_WhatsappDetailSend,'%d-%m-%Y %H:%i') as send_time, DATE_FORMAT(Tx_WhatsappDetailReceive,'%d-%m-%Y %H:%i') as received_time, DATE_FORMAT(Tx_WhatsappDetailRead,'%d-%m-%Y %H:%i') as read_time, Tx_WhatsappDetailIsSend as isSend, Tx_WhatsappDetailIsReceive as isReceive, Tx_WhatsappDetailIsRead as isRead FROM tx_whatsappdetail JOIN tx_whatsapp ON Tx_WhatsappDetailTx_WhatsappID = Tx_WhatsappID AND Tx_WhatsappT_OrderHeaderID = {$prm['xid']} JOIN group_resultdetail ON Tx_WhatsappGroup_ResultID = Group_ResultDetailT_TestID JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID WHERE Tx_WhatsappIsActive = 'Y' "; //echo $sql; $data_details = $this->db_onedev->query($sql)->result_array(); if($data_details){ $data_delivery[$k]['details'] = $data_details; } } if($v['delivery_type'] == 'ADDRESS'){ $sql = " SELECT * FROM ( SELECT CONCAT('dibuat spk : ',Result_CourierSPKNumbering) as status, DATE_FORMAT(Result_CourierDetailStepByStepLastUpdated,'%d.%m.%Y %H:%i') as xtime, M_UserUsername as username, '' as xperson, '' as xnote, Result_CourierSPKDetailID as xid, Result_CourierDetailStepByStepID as stepid FROM result_courierspk_detail_step_by_step JOIN result_courierspk_detail ON Result_CourierDetailStepByStepResult_CourierSPKDetailID = Result_CourierSPKDetailID JOIN result_courierspk ON Result_CourierSPKDetailResult_CourierSPKID = Result_CourierSPKID JOIN m_user ON Result_CourierDetailStepByStepUserID = M_UserID WHERE Result_CourierSPKDetailT_OrderDeliveryID = {$v['id']} AND Result_CourierDetailStepByStepStatus = 'N' UNION SELECT CONCAT('dikonfirmasi spv : ',Result_CourierSPKNumbering) as status, DATE_FORMAT(Result_CourierDetailStepByStepLastUpdated,'%d.%m.%Y %H:%i') as xtime, M_UserUsername as username, '' as xperson, '' as xnote, Result_CourierSPKDetailID as xid, Result_CourierDetailStepByStepID as stepid FROM result_courierspk_detail_step_by_step JOIN result_courierspk_detail ON Result_CourierDetailStepByStepResult_CourierSPKDetailID = Result_CourierSPKDetailID JOIN result_courierspk ON Result_CourierSPKDetailResult_CourierSPKID = Result_CourierSPKID JOIN m_user ON Result_CourierDetailStepByStepUserID = M_UserID WHERE Result_CourierSPKDetailT_OrderDeliveryID = {$v['id']} AND Result_CourierDetailStepByStepStatus = 'O' UNION SELECT 'dikonfirmasi spv' as status, DATE_FORMAT(Result_CourierDetailStepByStepLastUpdated,'%d.%m.%Y %H%i') as xtime, M_UserUsername as username, '' as xperson, '' as xnote, Result_CourierSPKDetailID as xid, Result_CourierDetailStepByStepID as stepid FROM result_courierspk_detail_step_by_step JOIN result_courierspk_detail ON Result_CourierDetailStepByStepResult_CourierSPKDetailID = Result_CourierSPKDetailID JOIN result_courierspk ON Result_CourierSPKDetailResult_CourierSPKID = Result_CourierSPKID JOIN m_user ON Result_CourierDetailStepByStepUserID = M_UserID WHERE Result_CourierSPKDetailT_OrderDeliveryID = {$v['id']} AND Result_CourierDetailStepByStepStatus = 'X' UNION SELECT CONCAT('diserahkan ke kurir : ',Result_CourierSPKNumbering) as status, DATE_FORMAT(Result_CourierDetailStepByStepLastUpdated,'%d.%m.%Y %H:%i') as xtime, M_UserUsername as username, '' as xperson, '' as xnote, Result_CourierSPKDetailID as xid, Result_CourierDetailStepByStepID as stepid FROM result_courierspk_detail_step_by_step JOIN result_courierspk_detail ON Result_CourierDetailStepByStepResult_CourierSPKDetailID = Result_CourierSPKDetailID JOIN result_courierspk ON Result_CourierSPKDetailResult_CourierSPKID = Result_CourierSPKID JOIN m_user ON Result_CourierDetailStepByStepUserID = M_UserID WHERE Result_CourierSPKDetailT_OrderDeliveryID = {$v['id']} AND Result_CourierDetailStepByStepStatus = 'S' UNION SELECT CONCAT('selesai : ',Result_CourierSPKNumbering) as status, DATE_FORMAT(Result_CourierDetailStepByStepLastUpdated,'%d.%m.%Y %H:%i') as xtime, M_UserUsername as username, Result_CourierComingHomeDetailsReceiver as xperson, UPPER(M_CourierStatusReceiveName) as xnote, Result_CourierSPKDetailID as xid, Result_CourierDetailStepByStepID as stepid FROM result_courierspk_detail_step_by_step JOIN result_courierspk_detail ON Result_CourierDetailStepByStepResult_CourierSPKDetailID = Result_CourierSPKDetailID JOIN result_courierspk ON Result_CourierSPKDetailResult_CourierSPKID = Result_CourierSPKID JOIN result_couriercominghome_details ON Result_CourierComingHomeDetailsResult_CourierSPKDetailID = Result_CourierSPKDetailID JOIN m_user ON Result_CourierDetailStepByStepUserID = M_UserID JOIN m_courierstatusreceive ON Result_CourierComingHomeDetailsM_CourierStatusReceiveID = M_CourierStatusReceiveID WHERE Result_CourierSPKDetailT_OrderDeliveryID = {$v['id']} AND Result_CourierDetailStepByStepStatus = 'D' ) x GROUP BY xid,status ORDER BY stepid ASC "; //echo $sql; $data_details = $this->db_onedev->query($sql)->result_array(); if($data_details){ $data_delivery[$k]['details'] = $data_details; } } } } $arr_datas['data_external'] = $data_delivery; $result = $arr_datas; $this->sys_ok($result); } function search_exist($datas,$xtime,$status){ $rtn = -1; foreach($datas as $k => $v){ if($v['datetime'] == $xtime && $v['status'] == $status){ $rtn = $k; } } return $rtn; } function get_mou_list(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $company_id = isset($prm['company_id']) ? $prm['company_id'] : 0; $sql = "SELECT M_MouID, M_MouName FROM m_mou WHERE M_MouIsActive = 'Y' AND M_MouM_CompanyID = {$company_id} ORDER BY M_MouName ASC"; $query = $this->db_onedev->query($sql); if($query){ $this->sys_ok($query->result_array()); } else { $this->sys_error("Gagal mengambil data MOU"); } } function get_mou(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = $prm["xid"]; // T_OrderHeaderID // Ambil MOU yang sedang dipakai pada order ini $sql = "SELECT m.M_MouID, m.M_MouName, h.T_OrderHeaderID, h.T_OrderHeaderLabNumber FROM t_orderheader h JOIN m_mou m ON h.T_OrderHeaderM_MouID = m.M_MouID WHERE h.T_OrderHeaderID = {$xid} AND h.T_OrderHeaderIsActive = 'Y'"; $query = $this->db_onedev->query($sql); $current_mou = array(); if($query){ $row = $query->row_array(); if($row){ $current_mou = $row; } } // Ambil daftar MOU berdasarkan company pertama registrasi pasien $sql = "SELECT M_MouID, M_MouName FROM m_mou WHERE M_MouIsActive = 'Y' AND M_MouM_CompanyID = ( SELECT T_OrderHeaderM_CompanyID FROM t_orderheader WHERE T_OrderHeaderID = {$xid} AND T_OrderHeaderIsActive = 'Y' ) ORDER BY M_MouName ASC"; $query = $this->db_onedev->query($sql); $mou_list = array(); if($query){ $mou_list = $query->result_array(); } $result = array( "current_mou" => $current_mou, "mou_list" => $mou_list ); $this->sys_ok($result); } function save_mou(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = $prm["xid"]; $new_mou_id = $prm["new_mou_id"]; // Ambil User ID secara aman dari session atau JWT payload $user_id = 0; if (isset($this->sys_user['M_UserID'])) { $user_id = $this->sys_user['M_UserID']; } elseif (isset($this->sys_user['id'])) { $user_id = $this->sys_user['id']; } elseif (isset($prm['token'])) { $token_parts = explode('.', $prm['token']); if (count($token_parts) == 3) { $payload = json_decode(base64_decode($token_parts[1]), true); if (isset($payload['M_UserID'])) { $user_id = $payload['M_UserID']; } } } $sql = "SELECT m.M_MouID, m.M_MouName FROM t_orderheader h JOIN m_mou m ON h.T_OrderHeaderM_MouID = m.M_MouID WHERE h.T_OrderHeaderID = {$xid} AND h.T_OrderHeaderIsActive = 'Y'"; $old_mou = $this->db_onedev->query($sql)->row_array(); if(!$old_mou){ $this->sys_error("Data order tidak ditemukan"); exit; } $sql = "SELECT M_MouID, M_MouName FROM m_mou WHERE M_MouID = {$new_mou_id} AND M_MouIsActive = 'Y'"; $new_mou = $this->db_onedev->query($sql)->row_array(); if(!$new_mou){ $this->sys_error("MOU baru tidak ditemukan"); exit; } if($old_mou['M_MouID'] == $new_mou_id){ $this->sys_error("MOU baru sama dengan MOU lama"); exit; } $this->db_onedev->trans_start(); // 1. Update Order Header menggunakan Query Builder (lebih aman dari SQL Injection & karakter kutip) $this->db_onedev->where('T_OrderHeaderID', $xid); $this->db_onedev->update('t_orderheader', array( 'T_OrderHeaderM_MouID' => $new_mou_id )); // 2. Insert log histori perubahan MOU $log_data = array( 'Order_MouLogT_OrderHeaderID' => $xid, 'Order_MouLogFromMouID' => $old_mou['M_MouID'], 'Order_MouLogFromM_MouName' => $old_mou['M_MouName'], 'Order_MouLogToMouID' => $new_mou['M_MouID'], 'Order_MouLogToMouName' => $new_mou['M_MouName'], 'Order_MouLogCreated' => date('Y-m-d H:i:s'), 'Order_MouLogCreatedUserID' => $user_id ); $this->db_onedev->insert('one_lab_log.order_mou_log', $log_data); $this->db_onedev->trans_complete(); if($this->db_onedev->trans_status() === FALSE){ // Tampilkan detail error SQL agar lebih mudah dilakukan debugging $error = $this->db_onedev->error(); $msg = (isset($error['message']) && $error['message'] != '') ? "Gagal menyimpan: " . $error['message'] : "Gagal menyimpan perubahan MOU"; $this->sys_error($msg); exit; } $result = array( "xid" => $xid, "old_mou_id" => $old_mou['M_MouID'], "old_mou_name" => $old_mou['M_MouName'], "new_mou_id" => $new_mou['M_MouID'], "new_mou_name" => $new_mou['M_MouName'] ); $this->sys_ok($result); } function search_pemeriksaan() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $keyword = isset($prm["keyword"]) ? $prm["keyword"] : ""; $xid = isset($prm["xid"]) ? (int)$prm["xid"] : 0; $mouCompanyID = 0; if ($xid > 0) { // Cari MouID dari order yang bersangkutan $sql_mou = "SELECT T_OrderHeaderM_MouID FROM t_orderheader WHERE T_OrderHeaderID = ?"; $qry_mou = $this->db_onedev->query($sql_mou, [$xid]); if ($qry_mou && $qry_mou->num_rows() > 0) { $mouCompanyID = $qry_mou->row()->T_OrderHeaderM_MouID; } } $sql_param = array($mouCompanyID, "%$keyword%"); $query = $this->db_onedev->query("CALL sp_fo_px_search_v2(?, ?)", $sql_param); $this->clean_mysqli_connection($this->db_onedev->conn_id); if ($query) { $rows = $query->result_array(); $id_to_remove = []; foreach ($rows as $k => $v) { $rows[$k]['requirement'] = []; if ($v['px_type'] == "PX") { $x = $this->db_onedev->query("SELECT fn_fo_requirement_get('{$v['T_TestID']}') x")->row(); if ($x && $x->x != null) { $rows[$k]['requirement'] = json_decode($x->x); } } if ($v['is_packet'] == 'N') { $tests = $v['T_PriceT_TestID']; $panels = ''; } else { $tests = ''; $panels = $v['T_PriceT_TestID']; } $sql_param_promise = array($tests, $panels); $sql_promise = "select fn_fo_find_promise_by_px(?, ?) as x"; $x = $this->db_onedev->query($sql_promise, $sql_param_promise)->row(); if ($x && $x->x != null) { $rows[$k]['promise'] = $x->x; } $rows[$k]['nat_test'] = json_decode($v['nat_test']); $rows[$k]['child_test'] = json_decode($v['child_test']); // IF PROFILE/PANEL if ($v['px_type'] == "PR" || $v['px_type'] == "PXR") { if ($v['T_TestID'] == null) { $id_to_remove[] = $k; continue; } else { foreach ($rows[$k]['child_test'] as $l => $w) { $rows[$k]['child_test'][$l]->requirement = []; $rows[$k]['child_test'][$l]->nat_test = json_decode($w->nat_test); $rows[$k]['child_test'][$l]->promise = null; $x_req = $this->db_onedev->query("SELECT fn_fo_requirement_get('{$w->T_TestID}') x")->row(); if ($x_req && $x_req->x != null) { $rows[$k]['child_test'][$l]->requirement = json_decode($x_req->x); } $x_prom = $this->db_onedev->query("SELECT fn_fo_find_promise_by_one_px('{$w->T_TestID}') x")->row(); if ($x_prom && $x_prom->x != null) { $rows[$k]['child_test'][$l]->promise = $x_prom->x; } } } } } // REMOVE INDEXES (Bersihkan data kosong) foreach ($id_to_remove as $l => $w) { $offset = $w - $l; array_splice($rows, $offset, 1); } $this->sys_ok($rows); } else { $this->sys_error("Gagal melakukan pencarian pemeriksaan"); } } function get_pemeriksaan() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = isset($prm["xid"]) ? (int)$prm["xid"] : 0; if ($xid == 0) { $this->sys_error("Parameter order tidak valid"); exit; } $sql = "SELECT T_OrderDetailOrderID as T_OrderDetailID, T_OrderDetailOrderT_TestID as T_OrderDetailT_TestID, IF(T_OrderDetailOrderIsPacket = 'Y', T_OrderDetailOrderT_PacketName, T_OrderDetailOrderT_TestName) as T_TestName, T_OrderDetailOrderT_PriceAmount as T_OrderDetailPrice, ((T_OrderDetailOrderT_PriceDisc/100) * T_OrderDetailOrderT_PriceAmount) + T_OrderDetailOrderT_PriceDiscRp as T_OrderDetailDiscTotal, T_OrderDetailOrderT_PriceTotal as T_OrderDetailTotal FROM t_orderdetailorder WHERE T_OrderDetailOrderT_OrderHeaderID = ? AND T_OrderDetailOrderIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$xid]); if ($query) { $this->sys_ok($query->result_array()); } else { $this->sys_error("Gagal mengambil data pemeriksaan"); } } // function get_pemeriksaan() { // if (! $this->isLogin) { // $this->sys_error("Invalid Token"); // exit; // } // $prm = $this->sys_input; // $xid = isset($prm["xid"]) ? (int)$prm["xid"] : 0; // if ($xid == 0) { // $this->sys_error("Parameter order tidak valid"); // exit; // } // $sql = "SELECT DATE_FORMAT(OrderPxCreated,'%d.%m.%Y %H:%i') as xdatetime, // OrderPxType as type, // OrderPxJson as data, // M_UserUsername as username // FROM order_px // JOIN m_user ON OrderPxUserID = M_UserID // WHERE // OrderPxT_OrderHeaderID = {$xid} AND // OrderPxType = 'spv_test' // ORDER BY OrderPxCreated ASC"; // $query = $this->db_onedev->query($sql); // if ($query) { // $datas = $query->result_array(); // foreach($datas as $k => $v){ // $datas[$k]['data'] = json_decode($v['data']); // } // $this->sys_ok($datas); // } else { // $this->sys_error("Gagal mengambil data pemeriksaan"); // } // } function add_pemeriksaan() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = isset($prm["xid"]) ? $prm["xid"] : 0; $tests = isset($prm["tests"]) ? $prm["tests"] : array(); // Ambil User ID secara aman dari session atau JWT payload $user_id = 0; if (isset($this->sys_user['M_UserID'])) { $user_id = $this->sys_user['M_UserID']; } elseif (isset($this->sys_user['id'])) { $user_id = $this->sys_user['id']; } elseif (isset($prm['token'])) { $token_parts = explode('.', $prm['token']); if (count($token_parts) == 3) { $payload = json_decode(base64_decode($token_parts[1]), true); if (isset($payload['M_UserID'])) { $user_id = $payload['M_UserID']; } } } $this->db_onedev->trans_start(); $tests_to_add = array(); $tests_to_delete = array(); foreach ($tests as $test) { $action = isset($test['action']) ? strtoupper($test['action']) : ''; $test_name = isset($test['T_TestName']) ? $test['T_TestName'] : ''; $price = isset($test['T_OrderDetailPrice']) ? $test['T_OrderDetailPrice'] : 0; if ($action == 'ADD') { $tests_to_add[] = $test; } elseif ($action == 'DELETE') { $tests_to_delete[] = $test; } if ($action == 'ADD' || $action == 'DELETE') { // Pastikan T_OrderDetailT_OrderHeaderID ada di JSON agar bisa dilacak oleh query SELECT log $test['T_OrderDetailT_OrderHeaderID'] = (string)$xid; $log_data = array( 'OrderLogPxType' => $action, 'OrderLogPxT_TestName' => $test_name, 'OrderLogPxT_PacketName' => '', 'OrderLogPxT_PriceTotal' => $price, 'OrderLogPxJson' => json_encode($test), 'OrderLogPxUserID' => $user_id, 'OrderLogPxCreated' => date('Y-m-d H:i:s') ); $res_log = $this->db_onedev->insert('one_lab.order_log_px', $log_data); if (!$res_log) { $this->sys_error("Gagal menyimpan log pemeriksaan: " . $this->db_onedev->error()['message']); exit; } } } if (!empty($tests_to_add)) { $save_res = $this->save_pemeriksaan_detail($tests_to_add, $xid, $user_id); if (!$save_res['status']) { $this->sys_error($save_res['message']); exit; } } if (!empty($tests_to_delete)) { $del_res = $this->delete_pemeriksaan_detail($tests_to_delete, $xid, $user_id); if (!$del_res['status']) { $this->sys_error($del_res['message']); exit; } } $this->db_onedev->trans_complete(); if ($this->db_onedev->trans_status() === FALSE) { $error = $this->db_onedev->error(); $msg = (isset($error['message']) && $error['message'] != '') ? "Gagal menyimpan pemeriksaan: " . $error['message'] : "Gagal menyimpan perubahan pemeriksaan"; $this->sys_error($msg); exit; } $this->sys_ok(array("message" => "Perubahan pemeriksaan berhasil disimpan.")); } function save_pemeriksaan_detail($details, $header_id, $userid) { $return = [ "status" => true, "message" => "", "data" => [] ]; $tests = []; foreach ($details as $k => $v) { $dt_test_price = []; $test_id = isset($v['T_OrderDetailT_TestID']) ? $v['T_OrderDetailT_TestID'] : (isset($v['T_TestID']) ? $v['T_TestID'] : 0); $sql = "SELECT * FROM t_test WHERE T_TestID = ?"; $query = $this->db_onedev->query($sql, [$test_id]); if (!$query || $query->num_rows() == 0) { return ["status" => false, "message" => "Terjadi kesalahan saat memilih data test"]; } $dt_test = $query->row_array(); $child_test = isset($v['child_test']) ? $v['child_test'] : []; if (is_string($child_test)) { $decoded = json_decode($child_test, true); $child_test = is_array($decoded) ? $decoded : []; } $dt_test_price['T_TestID'] = $dt_test['T_TestID']; $dt_test_price['T_TestName'] = $dt_test['T_TestName']; $dt_test_price['px_type'] = isset($v['px_type']) ? $v['px_type'] : 'PX'; $dt_test_price['T_PriceAmount'] = isset($v['T_OrderDetailPrice']) ? $v['T_OrderDetailPrice'] : 0; $dt_test_price['T_PriceDisc'] = 0; $dt_test_price['T_PriceDiscRp'] = isset($v['T_OrderDetailDiscTotal']) ? $v['T_OrderDetailDiscTotal'] : 0; $dt_test_price['T_PriceSubTotal'] = $dt_test_price['T_PriceAmount'] - $dt_test_price['T_PriceDiscRp']; $dt_test_price['T_PriceTotal'] = $dt_test_price['T_PriceSubTotal']; $dt_test_price['child_test'] = $child_test; $tests[] = $dt_test_price; } foreach ($tests as $k => $detail) { $sql_orderdetailorder = "INSERT INTO t_orderdetailorder( T_OrderDetailOrderT_OrderHeaderID, T_OrderDetailOrderT_TestID, T_OrderDetailOrderT_TestName, T_OrderDetailOrderIsPacket, T_OrderDetailOrderPacketType, T_OrderDetailOrderT_PacketID, T_OrderDetailOrderT_PacketName, T_OrderDetailOrderT_PriceAmount, T_OrderDetailOrderT_PriceDisc, T_OrderDetailOrderT_PriceDiscRp, T_OrderDetailOrderT_PriceSubTotal, T_OrderDetailOrderT_PriceTotal, T_OrderDetailOrderCreated, T_OrderDetailOrderCreatedUserID, T_OrderDetailOrderJsonChildren ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,?)"; $prm_detail_order = [ $header_id, $detail['px_type'] == 'PX' ? $detail['T_TestID'] : '0', $detail['px_type'] == 'PX' ? $detail['T_TestName'] : '', $detail['px_type'] != 'PX' ? 'Y' : 'N', $detail['px_type'] != 'PX' ? $detail['px_type'] : 'PX', $detail['px_type'] != 'PX' ? $detail['T_TestID'] : '0', $detail['px_type'] != 'PX' ? $detail['T_TestName'] : '', $detail['T_PriceAmount'], $detail['T_PriceDisc'], $detail['T_PriceDiscRp'], $detail['T_PriceSubTotal'], $detail['T_PriceTotal'], $userid, json_encode($detail['child_test']) ]; $query_detail_order = $this->db_onedev->query($sql_orderdetailorder, $prm_detail_order); if (!$query_detail_order) { return ["status" => false, "message" => "Terjadi kesalahan saat menyimpan data detail order: " . $this->db_onedev->error()['message']]; } $detail_order_id = $this->db_onedev->insert_id(); if ($detail['px_type'] != 'PX') { if (count($detail['child_test']) == 0) { return ["status" => false, "message" => "Detail packet tidak boleh kosong"]; } foreach ($detail['child_test'] as $k => $child_test_packet) { $child_test_packet['test_id'] = isset($child_test_packet['T_TestID']) ? $child_test_packet['T_TestID'] : 0; $child_test_packet['test_name'] = isset($child_test_packet['T_TestName']) ? $child_test_packet['T_TestName'] : ''; $child_test_packet['T_PriceAmount'] = isset($child_test_packet['T_PriceAmount']) ? $child_test_packet['T_PriceAmount'] : 0; $detail_insert = $this->insert_pemeriksaan_detail($header_id, $detail_order_id, $child_test_packet, $userid); if ($detail_insert['status'] == 'N') { return ["status" => false, "message" => $detail_insert['message']]; } } } else { $detail_insert = $this->insert_pemeriksaan_detail($header_id, $detail_order_id, $detail, $userid); if ($detail_insert['status'] == 'N') { return ["status" => false, "message" => "Terjadi kesalahan saat menyimpan data detail order " . $detail['T_TestName']]; } } } return $return; } function insert_pemeriksaan_detail($header_id, $detail_order_id, $detail, $userid) { $result = [ 'status' => 'Y', 'message' => 'Success' ]; $test_id = isset($detail['T_TestID']) ? $detail['T_TestID'] : (isset($detail['test_id']) ? $detail['test_id'] : 0); $sql = "SELECT * FROM t_test WHERE T_TestID = ?"; $query = $this->db_onedev->query($sql, [$test_id]); if (!$query || $query->num_rows() == 0) { $result['status'] = 'N'; $result['message'] = 'Test tidak ditemukan'; return $result; } $dt_test = $query->row_array(); $price = isset($detail['T_PriceAmount']) ? $detail['T_PriceAmount'] : (isset($detail['price']) ? $detail['price'] : 0); $disc = isset($detail['T_PriceDisc']) ? $detail['T_PriceDisc'] : (isset($detail['disc']) ? $detail['disc'] : 0); $disc_rp = isset($detail['T_PriceDiscRp']) ? $detail['T_PriceDiscRp'] : (isset($detail['disc_rp']) ? $detail['disc_rp'] : 0); $subtotal = isset($detail['T_PriceSubTotal']) ? $detail['T_PriceSubTotal'] : $price; $total = isset($detail['T_PriceTotal']) ? $detail['T_PriceTotal'] : $subtotal; $sql_unit = "SELECT Nat_UnitID, Nat_UnitName FROM t_test JOIN nat_test ON T_TestNat_TestID = Nat_TestID JOIN nat_unit ON Nat_TestNat_UnitID = Nat_UnitID WHERE T_TestID = ? LIMIT 1"; $dt_unit = $this->db_onedev->query($sql_unit, [$test_id])->row_array(); $sql_orderdetail = "INSERT INTO t_orderdetail( T_OrderDetailT_OrderHeaderID, T_OrderDetailT_OrderDetailOrderID, T_OrderDetailT_TestID, T_OrderDetailT_TestCode, T_OrderDetailT_TestSasCode, T_OrderDetailT_TestName, T_OrderDetailT_TestIsResult, T_OrderDetailT_TestIsPanel, T_OrderDetailT_TestIsPanelChildren, T_OrderDetailT_TestIsPanelChildrenPrintNota, T_OrderDetailT_TestIsPrice, T_OrderDetailIsCito, T_OrderDetailPrice, T_OrderDetailPriceForDisc, T_OrderDetailDisc, T_OrderDetailDiscAmount, T_OrderDetailDiscTotal, T_OrderDetailTotal, T_OrderDetailReq, T_OrderDetailReqNote, T_OrderDetailNat_UnitID, T_OrderDetailNat_UnitName, T_OrderDetailCreatedUserID, T_OrderDetailCreated ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'N','',?,?,?,NOW())"; $prm_orderdetail = [ $header_id, $detail_order_id, $dt_test['T_TestID'], $dt_test['T_TestCode'], $dt_test['T_TestSasCode'], $dt_test['T_TestName'], $dt_test['T_TestIsResult'], 'N', 'N', 'N', $dt_test['T_TestIsPrice'], 'N', $dt_test['T_TestIsPrice'] == 'N' ? 0 : $price, $dt_test['T_TestIsPrice'] == 'N' ? 0 : $price, $dt_test['T_TestIsPrice'] == 'N' ? 0 : $disc, $dt_test['T_TestIsPrice'] == 'N' ? 0 : $disc_rp, $dt_test['T_TestIsPrice'] == 'N' ? 0 : $subtotal, $dt_test['T_TestIsPrice'] == 'N' ? 0 : $total, $dt_unit ? $dt_unit['Nat_UnitID'] : 0, $dt_unit ? $dt_unit['Nat_UnitName'] : '', $userid ]; $query_orderdetail = $this->db_onedev->query($sql_orderdetail, $prm_orderdetail); if (!$query_orderdetail) { $result['status'] = 'N'; $result['message'] = 'Terjadi kesalahan saat menyimpan data detail order: ' . $this->db_onedev->error()['message']; return $result; } // Insert Child Tests $sql_child = "SELECT * FROM t_test WHERE T_TestSasCode LIKE ? AND T_TestIsActive = 'Y' AND T_TestSasCode != ?"; $query_child = $this->db_onedev->query($sql_child, [$dt_test['T_TestSasCode'] . '%', $dt_test['T_TestSasCode']]); if ($query_child) { $rows_test_child = $query_child->result_array(); foreach ($rows_test_child as $test_child) { $sql_child_unit = "SELECT Nat_UnitID, Nat_UnitName FROM t_test JOIN nat_test ON T_TestNat_TestID = Nat_TestID JOIN nat_unit ON Nat_TestNat_UnitID = Nat_UnitID WHERE T_TestID = ? LIMIT 1"; $dt_child_unit = $this->db_onedev->query($sql_child_unit, [$test_child['T_TestID']])->row_array(); $prm_orderdetail_child = [ $header_id, $detail_order_id, $test_child['T_TestID'], $test_child['T_TestCode'], $test_child['T_TestSasCode'], $test_child['T_TestName'], $test_child['T_TestIsResult'], 'N', 'N', 'N', $test_child['T_TestIsPrice'], 'N', 0, 0, 0, 0, 0, 0, $dt_child_unit ? $dt_child_unit['Nat_UnitID'] : 0, $dt_child_unit ? $dt_child_unit['Nat_UnitName'] : '', $userid ]; $query_child_insert = $this->db_onedev->query($sql_orderdetail, $prm_orderdetail_child); if (!$query_child_insert) { $result['status'] = 'N'; $result['message'] = 'Terjadi kesalahan saat menyimpan data child test: ' . $this->db_onedev->error()['message']; return $result; } } } return $result; } function delete_pemeriksaan_detail($details, $header_id, $userid) { $return = [ "status" => true, "message" => "", "data" => [] ]; // Cek apakah sample sudah diterima lab $sql_sampled = "SELECT COUNT(*) as total FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = ? AND T_OrderSampleReceive = 'Y'"; $sampled = $this->db_onedev->query($sql_sampled, [$header_id])->row()->total; if ($sampled > 0) { return ["status" => false, "message" => "Pemeriksaan tidak dapat dihapus, sebagian atau seluruh sampel sudah diterima lab"]; } foreach ($details as $detail) { $detail_order_id = isset($detail['T_OrderDetailID']) ? (int)$detail['T_OrderDetailID'] : 0; if ($detail_order_id == 0) { return ["status" => false, "message" => "ID Pemeriksaan tidak valid untuk dihapus"]; } // Set tidak aktif pada t_orderdetailorder (parent) $this->db_onedev->where('T_OrderDetailOrderID', $detail_order_id); $this->db_onedev->where('T_OrderDetailOrderT_OrderHeaderID', $header_id); $this->db_onedev->update('t_orderdetailorder', array('T_OrderDetailOrderIsActive' => 'N')); // Set tidak aktif pada t_orderdetail (children) $this->db_onedev->where('T_OrderDetailT_OrderDetailOrderID', $detail_order_id); $this->db_onedev->where('T_OrderDetailT_OrderHeaderID', $header_id); $this->db_onedev->update('t_orderdetail', array('T_OrderDetailIsActive' => 'N')); } return $return; } function delete_pemeriksaan() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = isset($prm["xid"]) ? $prm["xid"] : 0; $detail_id = isset($prm["detail_id"]) ? $prm["detail_id"] : 0; $user_id = 0; if (isset($this->sys_user['M_UserID'])) { $user_id = $this->sys_user['M_UserID']; } elseif (isset($this->sys_user['id'])) { $user_id = $this->sys_user['id']; } elseif (isset($prm['token'])) { $token_parts = explode('.', $prm['token']); if (count($token_parts) == 3) { $payload = json_decode(base64_decode($token_parts[1]), true); if (isset($payload['M_UserID'])) { $user_id = $payload['M_UserID']; } } } if ($xid == 0 || $detail_id == 0) { $this->sys_error("Parameter tidak valid"); exit; } $sql = "SELECT T_OrderDetailOrderID, T_OrderDetailOrderT_TestID, T_OrderDetailOrderT_TestName, T_OrderDetailOrderT_PriceTotal, T_OrderDetailOrderIsActive FROM t_orderdetailorder WHERE T_OrderDetailOrderID = {$detail_id} AND T_OrderDetailOrderT_OrderHeaderID = {$xid} AND T_OrderDetailOrderIsActive = 'Y'"; $existing = $this->db_onedev->query($sql)->row_array(); if (!$existing) { $this->sys_error("Data pemeriksaan tidak ditemukan atau sudah dihapus"); exit; } $sql = "SELECT COUNT(*) as total FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = {$xid} AND T_OrderSampleReceive = 'Y'"; $sampled = $this->db_onedev->query($sql)->row()->total; if ($sampled > 0) { $this->sys_error("Pemeriksaan tidak dapat dihapus, sampel sudah diterima lab"); exit; } $this->db_onedev->trans_start(); $this->db_onedev->where('T_OrderDetailOrderID', $detail_id); $this->db_onedev->where('T_OrderDetailOrderT_OrderHeaderID', $xid); $this->db_onedev->update('t_orderdetailorder', array( 'T_OrderDetailOrderIsActive' => 'N' )); $this->db_onedev->where('T_OrderDetailT_OrderDetailOrderID', $detail_id); $this->db_onedev->where('T_OrderDetailT_OrderHeaderID', $xid); $this->db_onedev->update('t_orderdetail', array( 'T_OrderDetailIsActive' => 'N' )); $log_data = array( 'OrderLogPxType' => 'DELETE', 'OrderLogPxT_TestName' => $existing['T_OrderDetailOrderT_TestName'], 'OrderLogPxT_PacketName' => '', 'OrderLogPxT_PriceTotal' => $existing['T_OrderDetailOrderT_PriceTotal'], 'OrderLogPxJson' => json_encode(array( 'T_OrderDetailT_OrderHeaderID' => "{$xid}", 'T_OrderDetailID' => $existing['T_OrderDetailOrderID'], 'T_OrderDetailT_TestID' => $existing['T_OrderDetailOrderT_TestID'], 'T_OrderDetailT_TestName' => $existing['T_OrderDetailOrderT_TestName'], 'T_OrderDetailPrice' => $existing['T_OrderDetailOrderT_PriceTotal'], 'action' => 'DELETE' )), 'OrderLogPxUserID' => $user_id, 'OrderLogPxCreated' => date('Y-m-d H:i:s') ); $res_log = $this->db_onedev->insert('one_lab.order_log_px', $log_data); if (!$res_log) { $this->sys_error("Gagal menyimpan log hapus pemeriksaan: " . $this->db_onedev->error()['message']); exit; } $this->db_onedev->trans_complete(); if ($this->db_onedev->trans_status() === FALSE) { $error = $this->db_onedev->error(); $msg = (isset($error['message']) && $error['message'] != '') ? "Gagal menghapus pemeriksaan: " . $error['message'] : "Gagal menghapus pemeriksaan"; $this->sys_error($msg); exit; } $this->sys_ok(array( "message" => "Pemeriksaan berhasil dihapus.", "xid" => $xid, "detail_id" => $detail_id, "test_name" => $existing['T_OrderDetailOrderT_TestName'] )); } function search_doctor() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $keyword = isset($prm['keyword']) ? $prm['keyword'] : (isset($prm['search']) ? $prm['search'] : ''); $id = isset($prm['id']) ? (int)$prm['id'] : 0; $q = [ 'search' => '%' ]; if ($keyword != '') { $q['search'] = "%{$keyword}%"; } $sql = "SELECT M_DoctorID, M_DoctorIsDefault, IF(M_DoctorPJID IS NULL, 'Y', 'N') M_DoctorIsPJ, CONCAT('[ ',M_DoctorCode,' ] ',IFNULL(M_DoctorPrefix, ''), ' ',IFNULL(M_DoctorPrefix2, ''), ' ',M_DoctorName,' ',IFNULL(M_DoctorSufix, ''), ' ',IFNULL(M_DoctorSufix2, ''), ' ',IFNULL(M_DoctorSufix3, '')) as M_DoctorName, fn_fo_delivery_code('DOCTOR', 'EMAIL', 0) as delivery_email_code, IF(M_DoctorEmail IS NULL OR M_DoctorEmail = '', 'N', M_DoctorEmailIsDefault) email_default, IFNULL( concat('[', group_concat(JSON_OBJECT('description',M_DoctorAddressNote,'M_DoctorAddressNote',M_DoctorAddressNote,'M_DoctorAddressDescription', M_DoctorAddressDescription, 'M_DoctorAddressID', M_DoctorAddressID, 'delivery_default', M_DoctorAddressDeliveryDefault, 'delivery_code', fn_fo_delivery_code('DOCTOR', 'ADDRESS', M_DoctorAddressID)) SEPARATOR ','), ']'), '[]') as address, M_DoctorNote from m_doctor join m_doctoraddress on M_DoctorAddressIsActive = 'Y' and M_DoctorAddressM_DoctorID = M_DoctorID left join m_doctorpj on M_DoctorPJM_DoctorID = M_DoctorID and M_DoctorPjIsactive = 'Y' where M_DoctorIsActive = 'Y'"; $params = []; if ($id > 0) { $sql .= " AND M_DoctorID = ? "; $params[] = $id; } else { $sql .= " AND CONCAT('[ ',M_DoctorCode,' ] ',IFNULL(M_DoctorPrefix, ''), ' ',IFNULL(M_DoctorPrefix2, ''), ' ',M_DoctorName,' ',IFNULL(M_DoctorSufix, ''), ' ',IFNULL(M_DoctorSufix2, ''), ' ',IFNULL(M_DoctorSufix3, '')) like ? "; $params[] = $q['search']; } $sql .= " group by M_DoctorID limit 30"; $query = $this->db_onedev->query($sql, $params); if ($query) { $rows = $query->result_array(); foreach ($rows as $k => $v) { $rows[$k]['address'] = json_decode($v['address']); foreach ($rows[$k]['address'] as $k_a => $v_a) { $rows[$k]['address'][$k_a]->description = $rows[$k]['address'][$k_a]->M_DoctorAddressNote . " : " . $rows[$k]['address'][$k_a]->M_DoctorAddressDescription; } } $result = array("total" => 0, "records" => $rows, "total_display" => sizeof($rows)); $this->sys_ok($result); } else { $this->sys_error_db("m_doctor rows", $this->db_onedev); exit; } } function save_doctor_pengirim() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $xid = isset($prm["xid"]) ? $prm["xid"] : 0; $user_id = 0; if (isset($this->sys_user['M_UserID'])) { $user_id = $this->sys_user['M_UserID']; } elseif (isset($this->sys_user['id'])) { $user_id = $this->sys_user['id']; } elseif (isset($prm['token'])) { $token_parts = explode('.', $prm['token']); if (count($token_parts) == 3) { $payload = json_decode(base64_decode($token_parts[1]), true); if (isset($payload['M_UserID'])) { $user_id = $payload['M_UserID']; } } } if ($xid == 0) { $this->sys_error("Parameter xid tidak valid"); exit; } $new_doctor_id = isset($prm["new_doctor_id"]) ? $prm["new_doctor_id"] : 0; $new_doctor_address_id = isset($prm["new_doctor_address_id"]) ? $prm["new_doctor_address_id"] : 0; if ($new_doctor_id == 0) { $this->sys_error("Dokter baru tidak boleh kosong"); exit; } $sql = "SELECT h.T_OrderHeaderID, h.T_OrderHeaderSenderM_DoctorID, h.T_OrderHeaderSenderM_DoctorAddressID, TRIM(CONCAT( IFNULL(d.M_DoctorPrefix, ''), IFNULL(d.M_DoctorPrefix2, ''), ' ', IFNULL(d.M_DoctorName, ''), ' ', IFNULL(d.M_DoctorSufix, ''), IFNULL(d.M_DoctorSufix2, ''), IFNULL(d.M_DoctorSufix3, '') )) as old_doctor_name, CONCAT( h.T_OrderHeaderSenderM_DoctorID, '^', h.T_OrderHeaderSenderM_DoctorAddressID ) as old_doctor_id_combined, CONCAT( TRIM(CONCAT( IFNULL(d.M_DoctorPrefix, ''), IFNULL(d.M_DoctorPrefix2, ''), ' ', IFNULL(d.M_DoctorName, ''), ' ', IFNULL(d.M_DoctorSufix, ''), IFNULL(d.M_DoctorSufix2, ''), IFNULL(d.M_DoctorSufix3, '') )), '^', IFNULL(da.M_DoctorAddressDescription, '') ) as old_doctor_name_combined FROM t_orderheader h LEFT JOIN m_doctor d ON h.T_OrderHeaderSenderM_DoctorID = d.M_DoctorID LEFT JOIN m_doctoraddress da ON h.T_OrderHeaderSenderM_DoctorAddressID = da.M_DoctorAddressID WHERE h.T_OrderHeaderID = {$xid} AND h.T_OrderHeaderIsActive = 'Y'"; $q_old = $this->db_onedev->query($sql); if (!$q_old) { $this->sys_error("Gagal mengambil data dokter lama: " . $this->db_onedev->error()['message']); exit; } $old_data = $q_old->row_array(); if (!$old_data) { $this->sys_error("Data order tidak ditemukan"); exit; } $sql = "SELECT d.M_DoctorID, da.M_DoctorAddressID, TRIM(CONCAT( IFNULL(d.M_DoctorPrefix, ''), IFNULL(d.M_DoctorPrefix2, ''), ' ', IFNULL(d.M_DoctorName, ''), ' ', IFNULL(d.M_DoctorSufix, ''), IFNULL(d.M_DoctorSufix2, ''), IFNULL(d.M_DoctorSufix3, '') )) as new_doctor_name, CONCAT( d.M_DoctorID, '^', da.M_DoctorAddressID ) as new_doctor_id_combined, CONCAT( TRIM(CONCAT( IFNULL(d.M_DoctorPrefix, ''), IFNULL(d.M_DoctorPrefix2, ''), ' ', IFNULL(d.M_DoctorName, ''), ' ', IFNULL(d.M_DoctorSufix, ''), IFNULL(d.M_DoctorSufix2, ''), IFNULL(d.M_DoctorSufix3, '') )), '^', IFNULL(da.M_DoctorAddressDescription, '') ) as new_doctor_name_combined FROM m_doctor d JOIN m_doctoraddress da ON da.M_DoctorAddressM_DoctorID = d.M_DoctorID AND da.M_DoctorAddressID = {$new_doctor_address_id} WHERE d.M_DoctorID = {$new_doctor_id} AND d.M_DoctorIsActive = 'Y'"; $q_new = $this->db_onedev->query($sql); if (!$q_new) { $this->sys_error("Gagal mengambil data dokter baru: " . $this->db_onedev->error()['message']); exit; } $new_data = $q_new->row_array(); if (!$new_data) { $this->sys_error("Dokter baru tidak ditemukan"); exit; } if ( $old_data['T_OrderHeaderSenderM_DoctorID'] == $new_doctor_id && $old_data['T_OrderHeaderSenderM_DoctorAddressID'] == $new_doctor_address_id ) { $this->sys_error("Dokter pengirim tidak berubah"); exit; } $attr_json = json_encode(array( "old" => array( "id" => $old_data['old_doctor_id_combined'], "name" => $old_data['old_doctor_name_combined'] ), "new" => array( "id" => $new_data['new_doctor_id_combined'], "name" => $new_data['new_doctor_name_combined'] ) ), JSON_UNESCAPED_UNICODE); $this->db_onedev->trans_start(); $this->db_onedev->where('T_OrderHeaderID', $xid); $this->db_onedev->update('t_orderheader', array( 'T_OrderHeaderSenderM_DoctorID' => $new_doctor_id, 'T_OrderHeaderSenderM_DoctorAddressID' => $new_doctor_address_id )); $this->db_onedev->insert('one_lab.order_attr', array( 'orderAttrT_OrderHeaderID' => $xid, 'orderAttrType' => 'spv_order_doctor', 'orderAttrJson' => $attr_json, 'orderAttrCreated' => date('Y-m-d H:i:s'), 'orderAttrUserID' => $user_id )); $this->db_onedev->trans_complete(); if ($this->db_onedev->trans_status() === FALSE) { $error = $this->db_onedev->error(); $msg = (isset($error['message']) && $error['message'] != '') ? "Gagal menyimpan perubahan dokter: " . $error['message'] : "Gagal menyimpan perubahan dokter pengirim"; $this->sys_error($msg); exit; } $this->sys_ok(array( "message" => "Dokter pengirim berhasil diubah.", "xid" => $xid, "old_doctor_id" => $old_data['T_OrderHeaderSenderM_DoctorID'], "old_doctor_name" => $old_data['old_doctor_name'], "new_doctor_id" => $new_data['M_DoctorID'], "new_doctor_name" => $new_data['new_doctor_name'] )); } public function get_doctor_addresses() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $doctor_id = isset($prm['doctor_id']) ? (int)$prm['doctor_id'] : 0; if ($doctor_id == 0) { $this->sys_error("ID Dokter tidak valid"); exit; } $sql = "SELECT M_DoctorAddressID, M_DoctorAddressDescription, M_DoctorAddressNote, M_DoctorAddressDeliveryDefault FROM m_doctoraddress WHERE M_DoctorAddressM_DoctorID = ? AND M_DoctorAddressIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$doctor_id]); if ($query) { $rows = $query->result_array(); $this->sys_ok(["records" => $rows]); } else { $this->sys_error_db("m_doctoraddress rows", $this->db_onedev); exit; } } function get_second_language() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $order_id = isset($prm['xid']) ? intval($prm['xid']) : (isset($prm['order_id']) ? intval($prm['order_id']) : 0); if ($order_id <= 0) { $this->sys_error("Parameter order_id tidak valid"); exit; } // Ambil bahasa kedua yang sedang dipakai pada order ini $sql = "SELECT a.T_OrderHeaderAddOnSecondM_LangID as M_LanguageID, a.T_OrderHeaderAddOnSecondLangIsSI as second_lang_is_si, l.M_LangName as M_LanguageName FROM t_orderheaderaddon a LEFT JOIN m_lang l ON a.T_OrderHeaderAddOnSecondM_LangID = l.M_LangID WHERE a.T_OrderHeaderAddOnT_OrderHeaderID = ? AND a.T_OrderHeaderAddOnIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, [$order_id]); $current_language = ['M_LanguageID' => null, 'second_lang_is_si' => null, 'M_LanguageName' => null]; if ($query) { $data = $query->row_array(); if ($data) { $current_language = $data; } } // Ambil list semua bahasa yang aktif $sql_list = "SELECT M_LangID as M_LanguageID, M_LangName as M_LanguageName FROM m_lang WHERE M_LangIsActive = 'Y' ORDER BY M_LangName ASC"; $query_list = $this->db_onedev->query($sql_list); $language_list = array(); if ($query_list) { $language_list = $query_list->result_array(); } $result = array( "current_language" => $current_language, "language_list" => $language_list ); $this->sys_ok($result); exit; } }