3901 lines
167 KiB
PHP
3901 lines
167 KiB
PHP
<?php
|
|
class Patientstatusday extends MY_Controller
|
|
{
|
|
var $db_onedev;
|
|
public function index()
|
|
{
|
|
echo "Patientstatusday API";
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->db_onedev = $this->load->database("onedev", true);
|
|
}
|
|
|
|
private function _check_is_supervisor() {
|
|
$prm = $this->sys_input;
|
|
$userid = 0;
|
|
if (isset($this->sys_user['M_UserID'])) {
|
|
$userid = $this->sys_user['M_UserID'];
|
|
} elseif (isset($this->sys_user['id'])) {
|
|
$userid = $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'])) {
|
|
$userid = $payload['M_UserID'];
|
|
}
|
|
}
|
|
}
|
|
if ($userid > 0) {
|
|
$sql_check = "SELECT ug.M_UserGroupName FROM m_user u
|
|
LEFT JOIN m_usergroup ug ON u.M_UserM_UserGroupID = ug.M_UserGroupID
|
|
WHERE u.M_UserID = {$userid} LIMIT 1";
|
|
$group = $this->db_onedev->query($sql_check)->row_array();
|
|
if ($group && stripos($group['M_UserGroupName'], 'supervisor') !== false) {
|
|
$this->sys_error("Akses Ditolak: Supervisor tidak diizinkan melihat rincian detail timeline.");
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
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";
|
|
|
|
$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";
|
|
|
|
$query = $this->db_onedev->query($sql);
|
|
$rows = $query->result_array();
|
|
if($rows){
|
|
foreach($rows as $k => $v){
|
|
$xno = ($k + 1) + $number_offset;
|
|
$rows[$k]['xno'] = $xno;
|
|
|
|
$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";
|
|
$details = $this->db_onedev->query($sql)->result_array();
|
|
|
|
// DETAILS ORDER
|
|
$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();
|
|
if($query){
|
|
$details_order[$i]['status'] = $query->status;
|
|
}
|
|
}
|
|
$rows[$k]['details_order'] = $details_order;
|
|
|
|
// DETAILS SAMPLING
|
|
$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 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 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_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_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;
|
|
}
|
|
|
|
$status = 'N';
|
|
if(intval($count_all) > 0 && 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_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'){
|
|
$count_all = 0;
|
|
$count_done = 0;
|
|
if($j['flag_nonlab'] == 'N'){
|
|
$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 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_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_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;
|
|
}
|
|
|
|
$status = 'N';
|
|
if(intval($count_all) > 0 && 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_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'){
|
|
$count_all = 0;
|
|
$count_done = 0;
|
|
if($j['flag_nonlab'] == 'N'){
|
|
$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 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_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_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;
|
|
}
|
|
|
|
$status = 'N';
|
|
if(intval($count_all) > 0 && 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_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'){
|
|
$count_all = 0;
|
|
$count_done = 0;
|
|
|
|
if($j['flag_nonlab'] == 'Y'){
|
|
// NON-LAB: pakai so_reactionlog
|
|
$sql = "SELECT COUNT(*) as xcount
|
|
FROM one_lab.so_resultentry
|
|
JOIN one_lab.t_orderdetail ON So_ResultEntryT_OrderDetailID = T_OrderDetailID
|
|
JOIN one_lab.group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID
|
|
AND Group_ResultDetailIsActive = 'Y'
|
|
WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']}
|
|
AND Group_ResultDetailGroup_ResultID = {$j['group_id']}
|
|
AND T_OrderDetailIsActive = 'Y'";
|
|
$count_all = $this->db_onedev->query($sql)->row()->xcount;
|
|
|
|
$sql = "SELECT COUNT(DISTINCT So_REActionLogSo_ResultEntryID) as xcount
|
|
FROM one_lab.so_reactionlog
|
|
JOIN one_lab.so_resultentry ON So_REActionLogSo_ResultEntryID = So_ResultEntryID
|
|
JOIN one_lab.t_orderdetail ON So_ResultEntryT_OrderDetailID = T_OrderDetailID
|
|
JOIN one_lab.group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID
|
|
AND Group_ResultDetailIsActive = 'Y'
|
|
WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']}
|
|
AND Group_ResultDetailGroup_ResultID = {$j['group_id']}
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
AND So_REActionLogAction = 'UPDATE_ACT'";
|
|
$count_done = $this->db_onedev->query($sql)->row()->xcount;
|
|
} else {
|
|
// LAB: pakai t_orderdetail langsung (bukan t_orderheader_group_result)
|
|
// agar akurat ketika ada penambahan pemeriksaan baru
|
|
$sql = "SELECT COUNT(*) as xcount
|
|
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_OrderDetailIsActive = 'Y'";
|
|
$count_all = $this->db_onedev->query($sql)->row()->xcount;
|
|
|
|
$sql = "SELECT COUNT(*) as xcount
|
|
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_OrderDetailIsActive = 'Y'
|
|
AND T_OrderDetailVerification = 'Y'";
|
|
$count_done = $this->db_onedev->query($sql)->row()->xcount;
|
|
}
|
|
|
|
$status = 'N';
|
|
if(intval($count_all) > 0 && 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_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'){
|
|
$count_all = 0;
|
|
$count_done = 0;
|
|
|
|
if($j['flag_nonlab'] == 'Y'){
|
|
// NON-LAB: pakai so_reactionlog
|
|
$sql = "SELECT COUNT(*) as xcount
|
|
FROM one_lab.so_resultentry
|
|
JOIN one_lab.t_orderdetail ON So_ResultEntryT_OrderDetailID = T_OrderDetailID
|
|
JOIN one_lab.group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID
|
|
AND Group_ResultDetailIsActive = 'Y'
|
|
WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']}
|
|
AND Group_ResultDetailGroup_ResultID = {$j['group_id']}
|
|
AND T_OrderDetailIsActive = 'Y'";
|
|
$count_all = $this->db_onedev->query($sql)->row()->xcount;
|
|
|
|
$sql = "SELECT COUNT(DISTINCT So_REActionLogSo_ResultEntryID) as xcount
|
|
FROM one_lab.so_reactionlog
|
|
JOIN one_lab.so_resultentry ON So_REActionLogSo_ResultEntryID = So_ResultEntryID
|
|
JOIN one_lab.t_orderdetail ON So_ResultEntryT_OrderDetailID = T_OrderDetailID
|
|
JOIN one_lab.group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID
|
|
AND Group_ResultDetailIsActive = 'Y'
|
|
WHERE T_OrderDetailT_OrderHeaderID = {$v['xid']}
|
|
AND Group_ResultDetailGroup_ResultID = {$j['group_id']}
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
AND So_REActionLogAction = 'VALIDATION'";
|
|
$count_done = $this->db_onedev->query($sql)->row()->xcount;
|
|
} else {
|
|
// LAB: pakai t_orderdetail langsung (bukan t_orderheader_group_result)
|
|
// agar akurat ketika ada penambahan pemeriksaan baru
|
|
$sql = "SELECT COUNT(*) as xcount
|
|
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_OrderDetailIsActive = 'Y'";
|
|
$count_all = $this->db_onedev->query($sql)->row()->xcount;
|
|
|
|
$sql = "SELECT COUNT(*) as xcount
|
|
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_OrderDetailIsActive = 'Y'
|
|
AND T_OrderDetailValidation = 'Y'";
|
|
$count_done = $this->db_onedev->query($sql)->row()->xcount;
|
|
}
|
|
|
|
$status = 'N';
|
|
if(intval($count_all) > 0 && 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_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'){
|
|
if($j['flag_nonlab'] == 'N'){
|
|
$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;
|
|
} else {
|
|
$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_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_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) > 0 && 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;
|
|
}
|
|
|
|
$this->_check_is_supervisor();
|
|
|
|
$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(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_lang'
|
|
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;
|
|
}
|
|
|
|
$this->_check_is_supervisor();
|
|
|
|
$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_so = " SampleSoByStepCode = 'SAMPLING.Sampling.Unsampled' OR
|
|
SampleSoByStepCode = 'SAMPLING.Sampling.Sampled' OR
|
|
SampleSoByStepCode = 'SAMPLING.Sampling.Received' ";
|
|
if($prm['action'] == 'verif'){
|
|
$x_status_so = " SampleSoByStepCode = 'SAMPLING.Verification.Verify' ";
|
|
}
|
|
if($prm['action'] == '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();
|
|
|
|
$sql_check_lab = "SELECT IFNULL(Nat_TestIsNonLab, '') as Nat_TestIsNonLab
|
|
FROM group_resultdetail
|
|
JOIN t_test ON Group_ResultDetailT_TestID = T_TestID
|
|
LEFT JOIN nat_test ON T_TestNat_TestID = Nat_TestID
|
|
WHERE Group_ResultDetailGroup_ResultID = {$prm['group_id']}
|
|
LIMIT 1";
|
|
$check_lab_rst = $this->db_onedev->query($sql_check_lab)->row_array();
|
|
$is_lab = true;
|
|
if ($check_lab_rst && $check_lab_rst['Nat_TestIsNonLab'] != '') {
|
|
$is_lab = false;
|
|
}
|
|
|
|
if($is_lab){
|
|
// ================================================================
|
|
// LAB - RESUME
|
|
// ================================================================
|
|
if($prm['action'] == 'verif'){
|
|
$sql_resume = "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}";
|
|
} else if($prm['action'] == 'process'){
|
|
$sql_resume = "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}";
|
|
} else {
|
|
$sql_resume = "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_OrderSampleReceiveUserID = receive_user.M_UserID
|
|
WHERE T_OrderSampleT_OrderHeaderID = {$xid}";
|
|
}
|
|
$data_resume = $this->db_onedev->query($sql_resume)->result_array();
|
|
|
|
// ================================================================
|
|
// LAB - RECORDS (log_sample)
|
|
// ================================================================
|
|
$arr_datas = array();
|
|
|
|
if($prm['action'] == 'verif'){
|
|
// Verifikasi → langsung dari log, tidak ada duplikat
|
|
$sql_log = "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 Log_SampleID as SampleByStepID,
|
|
Log_SampleBarcode as T_BarcodeLabBarcode,
|
|
T_SampleTypeName,
|
|
Log_SampleDate as SampleByStepDateTime,
|
|
Log_SampleCode as SampleByStepM_StatusSampleCode,
|
|
M_UserUsername,
|
|
IFNULL(JSON_UNQUOTE(JSON_EXTRACT(Log_SampleJson, '$.requirement_status')), 'Y') as SampleByStepRequirementStatus,
|
|
Nat_RequirementName
|
|
FROM one_lab_log.log_sample
|
|
LEFT JOIN t_barcodelab ON Log_SampleBarcode = T_BarcodeLabBarcode AND T_BarcodeLabT_OrderHeaderID = {$xid}
|
|
LEFT JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID
|
|
LEFT JOIN m_user ON Log_SampleUserID = M_UserID
|
|
LEFT JOIN nat_requirement ON json_contains(JSON_EXTRACT(Log_SampleJson, '$.requirements'), Nat_RequirementID)
|
|
WHERE Log_SampleOrderID = {$xid}
|
|
AND Log_SampleCode = 'SAMPLING.Verification.Verify'
|
|
) x
|
|
GROUP BY SampleByStepID
|
|
ORDER BY SampleByStepDateTime ASC";
|
|
|
|
} else if($prm['action'] == 'process'){
|
|
// Process → langsung dari log, tidak ada duplikat
|
|
$sql_log = "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 Log_SampleID as SampleByStepID,
|
|
Log_SampleBarcode as T_BarcodeLabBarcode,
|
|
T_SampleTypeName,
|
|
Log_SampleDate as SampleByStepDateTime,
|
|
Log_SampleCode as SampleByStepM_StatusSampleCode,
|
|
M_UserUsername,
|
|
IFNULL(JSON_UNQUOTE(JSON_EXTRACT(Log_SampleJson, '$.requirement_status')), 'Y') as SampleByStepRequirementStatus,
|
|
Nat_RequirementName
|
|
FROM one_lab_log.log_sample
|
|
LEFT JOIN t_barcodelab ON Log_SampleBarcode = T_BarcodeLabBarcode AND T_BarcodeLabT_OrderHeaderID = {$xid}
|
|
LEFT JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID
|
|
LEFT JOIN m_user ON Log_SampleUserID = M_UserID
|
|
LEFT JOIN nat_requirement ON json_contains(JSON_EXTRACT(Log_SampleJson, '$.requirements'), Nat_RequirementID)
|
|
WHERE Log_SampleOrderID = {$xid}
|
|
AND Log_SampleCode = 'SAMPLING.Handling.Process'
|
|
) x
|
|
GROUP BY SampleByStepID
|
|
ORDER BY SampleByStepDateTime ASC";
|
|
|
|
} else {
|
|
// Sampling default:
|
|
// Step 1: Unsampled pertama per barcode (dari log)
|
|
// Step 2: Sampled dari t_ordersample (lebih akurat)
|
|
// Step 3: Received dari t_ordersample (lebih akurat)
|
|
$sql_log = "SELECT SampleByStepID,
|
|
T_BarcodeLabBarcode,
|
|
T_SampleTypeName,
|
|
SampleByStepDateTime,
|
|
SampleByStepM_StatusSampleCode,
|
|
M_UserUsername,
|
|
SampleByStepRequirementStatus,
|
|
requirements,
|
|
group_id,
|
|
group_name,
|
|
xform, xfilm
|
|
FROM (
|
|
-- STEP 1: Unsampled pertama per barcode dari log
|
|
SELECT
|
|
Log_SampleID as SampleByStepID,
|
|
Log_SampleBarcode as T_BarcodeLabBarcode,
|
|
T_SampleTypeName,
|
|
Log_SampleDate as SampleByStepDateTime,
|
|
Log_SampleCode as SampleByStepM_StatusSampleCode,
|
|
IFNULL(u.M_UserUsername, 'Sistem') as M_UserUsername,
|
|
IFNULL(JSON_UNQUOTE(JSON_EXTRACT(Log_SampleJson, '$.requirement_status')), 'Y') as SampleByStepRequirementStatus,
|
|
NULL as requirements,
|
|
1 as group_id,
|
|
'LAB' as group_name,
|
|
NULL as xform, NULL as xfilm
|
|
FROM one_lab_log.log_sample
|
|
LEFT JOIN t_barcodelab ON Log_SampleBarcode = T_BarcodeLabBarcode AND T_BarcodeLabT_OrderHeaderID = {$xid}
|
|
LEFT JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID
|
|
LEFT JOIN m_user u ON Log_SampleUserID = u.M_UserID
|
|
WHERE Log_SampleOrderID = {$xid}
|
|
AND Log_SampleCode = 'SAMPLING.Sampling.Unsampled'
|
|
AND Log_SampleID = (
|
|
SELECT MIN(ls2.Log_SampleID)
|
|
FROM one_lab_log.log_sample ls2
|
|
WHERE ls2.Log_SampleOrderID = {$xid}
|
|
AND ls2.Log_SampleBarcode = Log_SampleBarcode
|
|
AND ls2.Log_SampleCode = 'SAMPLING.Sampling.Unsampled'
|
|
)
|
|
|
|
UNION ALL
|
|
|
|
-- STEP 2: Sampled dari t_ordersample
|
|
SELECT
|
|
CONCAT('s_', T_OrderSampleID) as SampleByStepID,
|
|
T_BarcodeLabBarcode,
|
|
T_SampleTypeName,
|
|
CONCAT(DATE_FORMAT(T_OrderSampleSamplingDate,'%Y-%m-%d'), ' ', TIME_FORMAT(T_OrderSampleSamplingTime,'%H:%i:%s')) as SampleByStepDateTime,
|
|
'SAMPLING.Sampling.Sampled' as SampleByStepM_StatusSampleCode,
|
|
IFNULL(sampling_user.M_UserUsername, 'Sistem') as M_UserUsername,
|
|
'Y' as SampleByStepRequirementStatus,
|
|
NULL as requirements,
|
|
1 as group_id,
|
|
'LAB' as group_name,
|
|
NULL as xform, NULL as xfilm
|
|
FROM t_ordersample
|
|
JOIN t_barcodelab ON T_OrderSampleT_BarcodeLabID = T_BarcodeLabID
|
|
JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID
|
|
LEFT JOIN m_user sampling_user ON T_OrderSampleSamplingUserID = sampling_user.M_UserID
|
|
WHERE T_OrderSampleT_OrderHeaderID = {$xid}
|
|
AND T_OrderSampleSampling = 'Y'
|
|
|
|
UNION ALL
|
|
|
|
-- STEP 3: Received dari t_ordersample
|
|
SELECT
|
|
CONCAT('r_', T_OrderSampleID) as SampleByStepID,
|
|
T_BarcodeLabBarcode,
|
|
T_SampleTypeName,
|
|
CONCAT(DATE_FORMAT(T_OrderSampleReceiveDate,'%Y-%m-%d'), ' ', TIME_FORMAT(T_OrderSampleReceiveTime,'%H:%i:%s')) as SampleByStepDateTime,
|
|
'SAMPLING.Sampling.Received' as SampleByStepM_StatusSampleCode,
|
|
IFNULL(receive_user.M_UserUsername, 'Sistem') as M_UserUsername,
|
|
'Y' as SampleByStepRequirementStatus,
|
|
NULL as requirements,
|
|
1 as group_id,
|
|
'LAB' as group_name,
|
|
NULL as xform, NULL as xfilm
|
|
FROM t_ordersample
|
|
JOIN t_barcodelab ON T_OrderSampleT_BarcodeLabID = T_BarcodeLabID
|
|
JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID
|
|
LEFT JOIN m_user receive_user ON T_OrderSampleReceiveUserID = receive_user.M_UserID
|
|
WHERE T_OrderSampleT_OrderHeaderID = {$xid}
|
|
AND T_OrderSampleReceive = 'Y'
|
|
) x
|
|
ORDER BY SampleByStepDateTime ASC,
|
|
FIELD(SampleByStepM_StatusSampleCode,
|
|
'SAMPLING.Sampling.Unsampled',
|
|
'SAMPLING.Sampling.Sampled',
|
|
'SAMPLING.Sampling.Received'
|
|
) ASC";
|
|
}
|
|
|
|
$datas = $this->db_onedev->query($sql_log)->result_array();
|
|
foreach($datas as $k => $v){
|
|
$found = $this->search_exist($arr_datas, $v['SampleByStepDateTime'], $v['SampleByStepM_StatusSampleCode'], $v['M_UserUsername']);
|
|
if ($found == -1) {
|
|
$xv = array(
|
|
"datetime" => $v['SampleByStepDateTime'],
|
|
"status" => $v['SampleByStepM_StatusSampleCode'],
|
|
"user" => $v["M_UserUsername"] ? $v["M_UserUsername"] : 'Sistem',
|
|
"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"] ? $v["M_UserUsername"] : 'Sistem',
|
|
"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'];
|
|
array_push(
|
|
$xarr,
|
|
array(
|
|
"SampleByStepID" => $v["SampleByStepID"],
|
|
"T_BarcodeLabBarcode" => $v["T_BarcodeLabBarcode"],
|
|
"T_SampleTypeName" => $v["T_SampleTypeName"],
|
|
"M_UserUsername" => $v["M_UserUsername"] ? $v["M_UserUsername"] : 'Sistem',
|
|
"SampleByStepRequirementStatus"=> $v["SampleByStepRequirementStatus"],
|
|
"requirements" => $v["requirements"],
|
|
"group_id" => $v["group_id"],
|
|
"xform" => $v["xform"],
|
|
"xfilm" => $v["xfilm"]
|
|
)
|
|
);
|
|
$arr_datas[$found]['details'] = $xarr;
|
|
}
|
|
}
|
|
|
|
} else {
|
|
// ================================================================
|
|
// NON-LAB - RESUME
|
|
// ================================================================
|
|
if($prm['action'] == 'verif'){
|
|
$sql_resume = "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";
|
|
} else if($prm['action'] == 'process'){
|
|
$sql_resume = "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";
|
|
} else {
|
|
$sql_resume = "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";
|
|
}
|
|
$data_resume = $this->db_onedev->query($sql_resume)->result_array();
|
|
|
|
// ================================================================
|
|
// NON-LAB - RECORDS (sample_so_by_step)
|
|
// ================================================================
|
|
$sql_log = "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";
|
|
|
|
$datas = $this->db_onedev->query($sql_log)->result_array();
|
|
$arr_datas = array();
|
|
foreach($datas as $k => $v){
|
|
$found = $this->search_exist($arr_datas, $v['SampleByStepDateTime'], $v['SampleByStepM_StatusSampleCode'], $v['M_UserUsername']);
|
|
if ($found == -1) {
|
|
$xv = array(
|
|
"datetime" => $v['SampleByStepDateTime'],
|
|
"status" => $v['SampleByStepM_StatusSampleCode'],
|
|
"user" => $v["M_UserUsername"] ? $v["M_UserUsername"] : 'Sistem',
|
|
"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"] ? $v["M_UserUsername"] : 'Sistem',
|
|
"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'];
|
|
array_push(
|
|
$xarr,
|
|
array(
|
|
"SampleByStepID" => $v["SampleByStepID"],
|
|
"T_BarcodeLabBarcode" => $v["T_BarcodeLabBarcode"],
|
|
"T_SampleTypeName" => $v["T_SampleTypeName"],
|
|
"M_UserUsername" => $v["M_UserUsername"] ? $v["M_UserUsername"] : 'Sistem',
|
|
"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;
|
|
}
|
|
|
|
$this->_check_is_supervisor();
|
|
|
|
$prm = $this->sys_input;
|
|
$xid = $prm["xid"];
|
|
|
|
$sql = "SELECT *,'{$prm['group_name']}' as group_name, '{$prm['action']}' as action
|
|
FROM one_lab.t_orderheader
|
|
JOIN one_lab.m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
WHERE
|
|
T_OrderHeaderID = {$xid}";
|
|
$data_header = $this->db_onedev->query($sql)->row_array();
|
|
|
|
// 1. Cek tipe grup (LAB atau NON-LAB)
|
|
$sql_check = "SELECT IFNULL(Nat_TestIsNonLab, '') as Nat_TestIsNonLab,
|
|
Group_ResultFlagNonLab,
|
|
Group_ResultName,
|
|
IFNULL(Nat_GroupCode, '') as Nat_GroupCode
|
|
FROM one_lab.group_result
|
|
JOIN one_lab.group_resultdetail ON Group_ResultID = Group_ResultDetailGroup_ResultID
|
|
JOIN one_lab.t_test ON Group_ResultDetailT_TestID = T_TestID
|
|
LEFT JOIN one_lab.nat_test ON T_TestNat_TestID = Nat_TestID
|
|
LEFT JOIN one_lab.nat_group ON Nat_TestNat_GroupID = Nat_GroupID
|
|
WHERE Group_ResultID = {$prm['group_id']} LIMIT 1";
|
|
$check_query = $this->db_onedev->query($sql_check);
|
|
$check_rst = $check_query ? $check_query->row_array() : null;
|
|
|
|
$is_lab = true;
|
|
$nat_group_code = '';
|
|
$is_other_lab = false;
|
|
if ($check_rst) {
|
|
if ($check_rst['Nat_TestIsNonLab'] != '') {
|
|
if ($check_rst['Group_ResultFlagNonLab'] == 'N') {
|
|
$is_other_lab = true;
|
|
} else {
|
|
$is_lab = false;
|
|
}
|
|
} elseif ($check_rst['Group_ResultFlagNonLab'] == 'Y') {
|
|
$is_lab = false;
|
|
}
|
|
$nat_group_code = $check_rst['Nat_GroupCode'];
|
|
}
|
|
|
|
$datas = array();
|
|
|
|
if ($is_lab) {
|
|
// LAB - ambil dari log_orderdetail
|
|
$sql = "
|
|
SELECT
|
|
o.T_OrderDetailID,
|
|
o.T_OrderDetailT_TestSasCode as sascode,
|
|
o.T_OrderDetailT_TestName as test_name,
|
|
UPPER(IF(l.Log_OrderDetailStatus = '' OR l.Log_OrderDetailStatus IS NULL, 'RESULTENTRY', l.Log_OrderDetailStatus)) as log_status,
|
|
DATE_FORMAT(l.Log_OrderDetailCreated,'%d-%m-%Y %H:%i') as log_datetime,
|
|
l.Log_OrderDetailCreated as raw_date,
|
|
IFNULL(u.M_UserUsername, 'Sistem') as log_username,
|
|
l.Log_OrderDetailResult as result
|
|
FROM one_lab_log.log_orderdetail l
|
|
JOIN one_lab.t_orderdetail o ON l.Log_OrderDetailT_OrderDetailID = o.T_OrderDetailID
|
|
LEFT JOIN one_lab.m_user u ON l.Log_OrderDetailUserID = u.M_UserID
|
|
JOIN one_lab.group_resultdetail ON Group_ResultDetailT_TestID = o.T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y'
|
|
JOIN one_lab.group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultID = {$prm['group_id']}
|
|
WHERE o.T_OrderDetailT_OrderHeaderID = {$xid} AND o.T_OrderDetailIsActive = 'Y'
|
|
ORDER BY l.Log_OrderDetailCreated ASC
|
|
";
|
|
$q_lab = $this->db_onedev->query($sql);
|
|
if ($q_lab) {
|
|
$datas = $q_lab->result_array();
|
|
|
|
if ($is_other_lab) {
|
|
$db_debug = $this->db_onedev->db_debug;
|
|
$this->db_onedev->db_debug = false;
|
|
|
|
foreach ($datas as &$v) {
|
|
$raw_date = $v['raw_date'];
|
|
$det_id = $v['T_OrderDetailID'];
|
|
|
|
$queries = [
|
|
"SELECT Log_OtherCytologiJSON as res, Log_OtherCytologiDatetime as ddate FROM one_lab_log.log_other_cytologi WHERE Log_OtherCytologiOther_CytologiID IN (SELECT Other_CytologiID FROM one_lab.other_cytologi WHERE Other_CytologiT_OrderDetailID = {$det_id}) AND Log_OtherCytologiDatetime <= '{$raw_date}' ORDER BY Log_OtherCytologiDatetime DESC LIMIT 1",
|
|
"SELECT Log_OtherFNAJSON as res, Log_OtherFNADatetime as ddate FROM one_lab_log.log_other_fna WHERE Log_OtherFNAOther_FNAID IN (SELECT Other_FNAID FROM one_lab.other_fna WHERE Other_FNAT_OrderDetailID = {$det_id}) AND Log_OtherFNADatetime <= '{$raw_date}' ORDER BY Log_OtherFNADatetime DESC LIMIT 1",
|
|
"SELECT Log_OtherLcprepJSON as res, Log_OtherLcprepDateTime as ddate FROM one_lab_log.log_other_lcprep WHERE Log_OtherLcprepOther_LcprepID IN (SELECT Other_LcprepID FROM one_lab.other_lcprep WHERE Other_LcprepT_OrderDetailID = {$det_id}) AND Log_OtherLcprepDateTime <= '{$raw_date}' ORDER BY Log_OtherLcprepDateTime DESC LIMIT 1",
|
|
"SELECT Log_OtherMikroJSON as res, Log_OtherMikroCreated as ddate FROM one_lab_log.log_other_mikro WHERE Log_OtherMikroOther_MikroID IN (SELECT Other_MikroID FROM one_lab.other_mikro WHERE Other_MikroT_OrderDetailID = {$det_id}) AND Log_OtherMikroCreated <= '{$raw_date}' ORDER BY Log_OtherMikroCreated DESC LIMIT 1",
|
|
"SELECT Log_OtherPatologiAnatomyJSON as res, Log_OtherPatologiAnatomyCreated as ddate FROM one_lab_log.log_other_patologianatomy WHERE Log_OtherPatologiAnatomyLog_OtherPatologiAnatomyID IN (SELECT Other_PatologiAnatomyID FROM one_lab.other_patologianatomy WHERE Other_PatologiAnatomyT_OrderDetailID = {$det_id}) AND Log_OtherPatologiAnatomyCreated <= '{$raw_date}' ORDER BY Log_OtherPatologiAnatomyCreated DESC LIMIT 1",
|
|
"SELECT Log_OtherPapsmearJSON as res, Log_OtherPapsmearDatetime as ddate FROM one_lab_log.log_other_papsmear WHERE Log_OtherPapsmearOther_PapsmearID IN (SELECT Other_PapsmearID FROM one_lab.other_papsmear WHERE Other_PapsmearT_OrderDetailID = {$det_id}) AND Log_OtherPapsmearDatetime <= '{$raw_date}' ORDER BY Log_OtherPapsmearDatetime DESC LIMIT 1"
|
|
];
|
|
|
|
$best_date = null;
|
|
$best_res = null;
|
|
|
|
foreach ($queries as $q) {
|
|
$q_det = @$this->db_onedev->query($q);
|
|
if ($q_det && $q_det->num_rows() > 0) {
|
|
$det = $q_det->row_array();
|
|
if ($best_date === null || strtotime($det['ddate']) > strtotime($best_date)) {
|
|
$best_date = $det['ddate'];
|
|
$best_res = $det['res'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($best_res !== null) {
|
|
$res_json = json_decode($best_res, true);
|
|
if (is_array($res_json)) {
|
|
$v['result'] = "Formulir telah diisi (Lihat detail pada form)";
|
|
} else {
|
|
$v['result'] = $best_res ? $best_res : "Lihat detail pada form";
|
|
}
|
|
}
|
|
}
|
|
unset($v);
|
|
$this->db_onedev->db_debug = $db_debug;
|
|
}
|
|
}
|
|
|
|
} else {
|
|
// NON-LAB - cek nat_group_code untuk menentukan sumber data
|
|
// Nat_GroupCode = 4 = Layanan Medis lainnya (Pemeriksaan Fisik, dll) → pakai t_samplingso
|
|
// Nat_GroupCode = 2 = Elektromedis, 3 = Radiologi → pakai so_resultentry
|
|
|
|
if ($nat_group_code == '4' || $nat_group_code == '') {
|
|
// Layanan Medis lainnya → ambil dari t_samplingso
|
|
$sql_re = "SELECT
|
|
o.T_OrderDetailID,
|
|
o.T_OrderDetailT_TestSasCode as sascode,
|
|
o.T_OrderDetailT_TestName as test_name,
|
|
IF(T_SamplingSoProcessDate IS NOT NULL, 'SAMPLING', NULL) as step1_status,
|
|
DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y %H:%i') as step1_datetime,
|
|
proc_user.M_UserUsername as step1_username,
|
|
IF(T_SamplingSoDoneDate IS NOT NULL, 'DONE', NULL) as step2_status,
|
|
DATE_FORMAT(T_SamplingSoDoneDate,'%d-%m-%Y %H:%i') as step2_datetime,
|
|
done_user.M_UserUsername as step2_username,
|
|
IF(T_SamplingSoVerifyDate IS NOT NULL, 'VERIF', NULL) as step3_status,
|
|
DATE_FORMAT(T_SamplingSoVerifyDate,'%d-%m-%Y %H:%i') as step3_datetime,
|
|
verif_user.M_UserUsername as step3_username,
|
|
IF(T_SamplingSoReceiveAdmDate IS NOT NULL, 'PROCESS', NULL) as step4_status,
|
|
DATE_FORMAT(T_SamplingSoReceiveAdmDate,'%d-%m-%Y %H:%i') as step4_datetime,
|
|
adm_user.M_UserUsername as step4_username
|
|
FROM t_orderdetail o
|
|
JOIN t_test ON o.T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y'
|
|
JOIN group_resultdetail ON Group_ResultDetailT_TestID = o.T_OrderDetailT_TestID
|
|
AND Group_ResultDetailIsActive = 'Y'
|
|
LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = o.T_OrderDetailT_OrderHeaderID
|
|
AND T_SamplingSoT_TestID = o.T_OrderDetailT_TestID
|
|
AND T_SamplingSoIsActive = 'Y'
|
|
LEFT JOIN m_user proc_user ON T_SamplingSoProcessUserID = proc_user.M_UserID
|
|
LEFT JOIN m_user done_user ON T_SamplingSoDoneUserID = done_user.M_UserID
|
|
LEFT JOIN m_user verif_user ON T_SamplingSoVerifyUserID = verif_user.M_UserID
|
|
LEFT JOIN m_user adm_user ON T_SamplingSoReceiveAdmUserID = adm_user.M_UserID
|
|
WHERE o.T_OrderDetailT_OrderHeaderID = {$xid}
|
|
AND Group_ResultDetailGroup_ResultID = {$prm['group_id']}
|
|
AND o.T_OrderDetailIsActive = 'Y'
|
|
GROUP BY o.T_OrderDetailID";
|
|
|
|
$q_re = $this->db_onedev->query($sql_re);
|
|
if ($q_re) {
|
|
$re_list = $q_re->result_array();
|
|
foreach ($re_list as $re) {
|
|
$steps = [
|
|
[
|
|
'status' => $re['step1_status'],
|
|
'datetime' => $re['step1_datetime'],
|
|
'username' => $re['step1_username']
|
|
],
|
|
[
|
|
'status' => $re['step2_status'],
|
|
'datetime' => $re['step2_datetime'],
|
|
'username' => $re['step2_username']
|
|
],
|
|
[
|
|
'status' => $re['step3_status'],
|
|
'datetime' => $re['step3_datetime'],
|
|
'username' => $re['step3_username']
|
|
],
|
|
[
|
|
'status' => $re['step4_status'],
|
|
'datetime' => $re['step4_datetime'],
|
|
'username' => $re['step4_username']
|
|
],
|
|
];
|
|
foreach ($steps as $step) {
|
|
if ($step['status'] === null) continue;
|
|
$datas[] = [
|
|
'sascode' => $re['sascode'],
|
|
'test_name' => $re['test_name'],
|
|
'log_status' => $step['status'],
|
|
'log_datetime' => $step['datetime'],
|
|
'log_username' => $step['username'] ? $step['username'] : 'Sistem',
|
|
'result' => '-'
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
} else {
|
|
// Elektromedis / Radiologi → ambil dari so_resultentry & so_reactionlog
|
|
$sql_re = "SELECT
|
|
re.So_ResultEntryID,
|
|
re.So_ResultEntryNonlab_TemplateID as template_id,
|
|
IFNULL(nt.NonlabTemplateFlagOther, 'N') as flag_other,
|
|
o.T_OrderDetailT_TestSasCode as sascode,
|
|
o.T_OrderDetailT_TestName as test_name
|
|
FROM one_lab.so_resultentry re
|
|
JOIN one_lab.t_orderdetail o ON re.So_ResultEntryT_OrderDetailID = o.T_OrderDetailID
|
|
JOIN one_lab.group_resultdetail gd ON o.T_OrderDetailT_TestID = gd.Group_ResultDetailT_TestID
|
|
AND gd.Group_ResultDetailIsActive = 'Y'
|
|
LEFT JOIN one_lab.nonlab_template nt ON re.So_ResultEntryNonlab_TemplateID = nt.NonlabTemplateID
|
|
WHERE o.T_OrderDetailT_OrderHeaderID = {$xid}
|
|
AND gd.Group_ResultDetailGroup_ResultID = {$prm['group_id']}
|
|
AND o.T_OrderDetailIsActive = 'Y'";
|
|
|
|
$q_re = $this->db_onedev->query($sql_re);
|
|
if ($q_re) {
|
|
$re_list = $q_re->result_array();
|
|
foreach ($re_list as $re) {
|
|
$re_id = $re['So_ResultEntryID'];
|
|
|
|
$sql_react = "SELECT
|
|
So_REActionLogAction as log_status,
|
|
DATE_FORMAT(So_REActionLogDate,'%d-%m-%Y %H:%i') as log_datetime,
|
|
So_REActionLogDate as raw_date,
|
|
u.M_UserUsername as log_username
|
|
FROM one_lab.so_reactionlog
|
|
LEFT JOIN one_lab.m_user u ON So_REActionLogUserID = u.M_UserID
|
|
WHERE So_REActionLogSo_ResultEntryID = {$re_id}
|
|
ORDER BY So_REActionLogDate ASC";
|
|
$q_react = $this->db_onedev->query($sql_react);
|
|
if (!$q_react) continue;
|
|
|
|
$reactions = $q_react->result_array();
|
|
foreach ($reactions as $reaction) {
|
|
$result_text = "Lihat detail pada form";
|
|
$raw_date = $reaction['raw_date'];
|
|
$template_id = $re['template_id'];
|
|
$flag_other = $re['flag_other'];
|
|
|
|
if ($flag_other == 'N') {
|
|
$sql_det = "SELECT Log_ResultEntrySoAfterSON as res
|
|
FROM one_lab_log.log_resultentry_so_detail
|
|
WHERE Log_ResultEntrySoSo_ResultEntryID = {$re_id}
|
|
AND Log_ResultEntrySoDate <= '{$raw_date}'
|
|
ORDER BY Log_ResultEntrySoDate DESC LIMIT 1";
|
|
$q_det = $this->db_onedev->query($sql_det);
|
|
if ($q_det && $q_det->num_rows() > 0) {
|
|
$det = $q_det->row_array();
|
|
$res_json = json_decode($det['res'], true);
|
|
if (is_array($res_json) && count($res_json) > 0) {
|
|
$texts = [];
|
|
foreach ($res_json as $r) {
|
|
if (isset($r['So_ResultEntryDetailResult']) && $r['So_ResultEntryDetailResult'] !== '') {
|
|
$texts[] = $r['So_ResultEntryDetailResult'];
|
|
}
|
|
}
|
|
if (count($texts) > 0) $result_text = implode(", ", $texts);
|
|
} else {
|
|
$result_text = $det['res'];
|
|
}
|
|
}
|
|
} else {
|
|
$sql_det = "";
|
|
if ($template_id == 27) {
|
|
$sql_det = "SELECT Log_ResultEntryFisikUmumAfterJSON as res
|
|
FROM one_lab_log.log_resultentry_fisik_umum
|
|
WHERE Log_ResultEntryFisikUmumT_OrderHeaderID = {$xid}
|
|
AND Log_ResultEntryFisikUmumDate <= '{$raw_date}'
|
|
ORDER BY Log_ResultEntryFisikUmumDate DESC LIMIT 1";
|
|
} else if ($template_id == 52) {
|
|
$sql_det = "SELECT Log_ResultEntrySDSAfterJSON as res, Log_ResultEntrySDSDate as ddate
|
|
FROM one_lab_log.log_resultentrysds
|
|
WHERE Log_ResultEntrySDSSo_ResultEntryID = {$re_id}
|
|
AND Log_ResultEntrySDSDate <= '{$raw_date}'
|
|
UNION ALL
|
|
SELECT Log_ResultEntrySDSIdentityAfterJSON as res, Log_ResultEntrySDSIdentityDate as ddate
|
|
FROM one_lab_log.log_resultentrysdsidentity
|
|
WHERE Log_ResultEntrySDSIdentitySo_ResultEntryID = {$re_id}
|
|
AND Log_ResultEntrySDSIdentityDate <= '{$raw_date}'
|
|
UNION ALL
|
|
SELECT Log_ResultEntrySDSInterpretationAfterJSON as res, Log_ResultEntrySDSInterpretationDate as ddate
|
|
FROM one_lab_log.log_resultentrysdsinterpretation
|
|
WHERE Log_ResultEntrySDSInterpretationSo_ResultEntryID = {$re_id}
|
|
AND Log_ResultEntrySDSInterpretationDate <= '{$raw_date}'
|
|
UNION ALL
|
|
SELECT Log_ResultEntrySDSTypeAfterJSON as res, Log_ResultEntrySDSTypeDate as ddate
|
|
FROM one_lab_log.log_resultentrysds_type
|
|
WHERE Log_ResultEntrySDSTypeSo_ResultEntryID = {$re_id}
|
|
AND Log_ResultEntrySDSTypeDate <= '{$raw_date}'
|
|
ORDER BY ddate DESC LIMIT 1";
|
|
} else if ($template_id == 53) {
|
|
$sql_det = "SELECT Log_ResultEntrySrq29ConclusionAfterJSON as res, Log_ResultEntrySrq29ConclusionDate as ddate
|
|
FROM one_lab_log.log_resultentry_srq29_conclusion
|
|
WHERE Log_ResultEntrySrq29ConclusionSo_ResultEntryID = {$re_id}
|
|
AND Log_ResultEntrySrq29ConclusionDate <= '{$raw_date}'
|
|
UNION ALL
|
|
SELECT Log_ResultEntrySrq29QuestionAfterJSON as res, Log_ResultEntrySrq29QuestionDate as ddate
|
|
FROM one_lab_log.log_resultentry_srq29_question
|
|
WHERE Log_ResultEntrySrq29QuestionSo_ResultEntryID = {$re_id}
|
|
AND Log_ResultEntrySrq29QuestionDate <= '{$raw_date}'
|
|
ORDER BY ddate DESC LIMIT 1";
|
|
} else if ($template_id == 57) {
|
|
$sql_det = "SELECT Log_ResultEntrySmwtAfterJSON as res, Log_ResultEntrySmwtDate as ddate
|
|
FROM one_lab_log.log_resultentry_smwt
|
|
WHERE Log_ResultEntrySmwtSo_ResultentryID = {$re_id}
|
|
AND Log_ResultEntrySmwtDate <= '{$raw_date}'
|
|
UNION ALL
|
|
SELECT Log_ResultEntrySmwtDetailsAfterJSON as res, Log_ResultEntrySmwtDetailsDate as ddate
|
|
FROM one_lab_log.log_resultentry_smwt_details
|
|
WHERE Log_ResultEntrySmwtDetailsSo_ResultentrySmwtID = {$re_id}
|
|
AND Log_ResultEntrySmwtDetailsDate <= '{$raw_date}'
|
|
ORDER BY ddate DESC LIMIT 1";
|
|
} else if ($template_id == 58) {
|
|
$sql_det = "SELECT Log_ResultEntryFisioterapiAfterJSON as res
|
|
FROM one_lab_log.log_resultentry_fisioterapi
|
|
WHERE Log_ResultEntryFisioterapiSo_ResultEntryID = {$re_id}
|
|
AND Log_ResultEntryFisioterapiDate <= '{$raw_date}'
|
|
ORDER BY Log_ResultEntryFisioterapiDate DESC LIMIT 1";
|
|
}
|
|
|
|
if ($sql_det != "") {
|
|
$q_det = $this->db_onedev->query($sql_det);
|
|
if ($q_det && $q_det->num_rows() > 0) {
|
|
$det = $q_det->row_array();
|
|
$res_json = json_decode($det['res'], true);
|
|
if (is_array($res_json)) {
|
|
$result_text = "Formulir telah diisi (Lihat detail pada form)";
|
|
} else {
|
|
$result_text = $det['res'] ? $det['res'] : "Lihat detail pada form";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$log_status = strtoupper($reaction['log_status']);
|
|
if ($log_status == 'INSERT' || $log_status == 'UPDATE') {
|
|
$log_status = 'RESULTENTRY';
|
|
}
|
|
|
|
$datas[] = [
|
|
'sascode' => $re['sascode'],
|
|
'test_name' => $re['test_name'],
|
|
'log_status' => $log_status,
|
|
'log_datetime' => $reaction['log_datetime'],
|
|
'log_username' => $reaction['log_username'] ? $reaction['log_username'] : 'Sistem',
|
|
'result' => $result_text
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Sort semua data NON-LAB berdasarkan datetime
|
|
usort($datas, function($a, $b) {
|
|
return strtotime($a['log_datetime']) - strtotime($b['log_datetime']);
|
|
});
|
|
}
|
|
|
|
// Grouping data berdasarkan datetime + status + username
|
|
$arr_datas = array();
|
|
foreach ($datas as $k => $v) {
|
|
$found = $this->search_exist($arr_datas, $v['log_datetime'], $v['log_status'], $v['log_username']);
|
|
if ($found == -1) {
|
|
$xv = array(
|
|
"datetime" => $v['log_datetime'],
|
|
"status" => $v['log_status'],
|
|
"user" => $v["log_username"],
|
|
"group_id" => $prm['group_id'],
|
|
"details" => array(
|
|
array(
|
|
"sascode" => $v["sascode"],
|
|
"test_name" => $v["test_name"],
|
|
"result" => $v["result"]
|
|
)
|
|
)
|
|
);
|
|
array_push($arr_datas, $xv);
|
|
} else {
|
|
$xarr = $arr_datas[$found]['details'];
|
|
array_push(
|
|
$xarr,
|
|
array(
|
|
"sascode" => $v["sascode"],
|
|
"test_name" => $v["test_name"],
|
|
"result" => $v["result"]
|
|
)
|
|
);
|
|
$arr_datas[$found]['details'] = $xarr;
|
|
}
|
|
}
|
|
|
|
$result = array("header" => $data_header, "records" => $arr_datas);
|
|
$this->sys_ok($result);
|
|
}
|
|
|
|
function getdata_print(){
|
|
if (! $this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$this->_check_is_supervisor();
|
|
|
|
$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,$username){
|
|
$rtn = -1;
|
|
foreach($datas as $k => $v){
|
|
if($v['datetime'] == $xtime && $v['status'] == $status && $v['user'] == $username){
|
|
$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) {
|
|
// Sesuaikan format data current_language agar cocok dengan composite key di list (id-is_si)
|
|
if (!empty($data['M_LanguageID'])) {
|
|
$is_si = $data['second_lang_is_si'] === 'Y' ? 'Y' : 'N';
|
|
$si_text = $is_si === 'Y' ? ' (SI)' : '';
|
|
$data['M_LanguageID'] = $data['M_LanguageID'] . '-' . $is_si;
|
|
$data['M_LanguageName'] = $data['M_LanguageName'] . $si_text;
|
|
}
|
|
$current_language = $data;
|
|
}
|
|
}
|
|
|
|
// Ambil list semua bahasa yang aktif
|
|
$sql_list = "SELECT M_LangID as id, M_LangName as name
|
|
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) {
|
|
$rows = $query_list->result_array();
|
|
$si = [["is_si" => "N", "si_text" => ""], ["is_si" => "Y", "si_text" => "(SI)"]];
|
|
foreach ($rows as $v) {
|
|
foreach ($si as $w) {
|
|
$item = $v;
|
|
$item['is_si'] = $w['is_si'];
|
|
$item['name'] .= $w['si_text'] == '' ? '' : ' ' . $w['si_text'];
|
|
$item['key'] = $item['id'] . '-' . $item['is_si'];
|
|
|
|
// Mapping ke M_LanguageID dan M_LanguageName agar langsung dikenali oleh v-autocomplete Vue
|
|
$item['M_LanguageID'] = $item['key'];
|
|
$item['M_LanguageName'] = $item['name'];
|
|
|
|
$language_list[] = $item;
|
|
}
|
|
}
|
|
}
|
|
|
|
$result = array(
|
|
"current_language" => $current_language,
|
|
"language_list" => $language_list
|
|
);
|
|
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function save_second_language()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$xid = isset($prm["xid"]) ? intval($prm["xid"]) : 0;
|
|
|
|
if (isset($prm["new_language_id"]) && strpos($prm["new_language_id"], '-') !== false) {
|
|
$parts = explode('-', $prm["new_language_id"]);
|
|
$new_lang_id = intval($parts[0]);
|
|
$new_lang_is_si = (isset($parts[1]) && $parts[1] === 'Y') ? 'Y' : 'N';
|
|
} else {
|
|
$new_lang_id = isset($prm["new_lang_id"]) ? intval($prm["new_lang_id"]) : (isset($prm["new_language_id"]) ? intval($prm["new_language_id"]) : 0);
|
|
$new_lang_is_si = (isset($prm["new_lang_is_si"]) && $prm["new_lang_is_si"] === 'Y') ? 'Y' : 'N';
|
|
}
|
|
|
|
if ($xid <= 0) {
|
|
$this->sys_error("Parameter order tidak valid");
|
|
exit;
|
|
}
|
|
|
|
$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'];
|
|
}
|
|
}
|
|
}
|
|
|
|
// 1. Ambil data bahasa kedua lama dari addon
|
|
$sql_old = "SELECT
|
|
a.T_OrderHeaderAddOnSecondM_LangID,
|
|
a.T_OrderHeaderAddOnSecondLangIsSI,
|
|
l.M_LangName
|
|
FROM t_orderheaderaddon a
|
|
LEFT JOIN m_lang l ON a.T_OrderHeaderAddOnSecondM_LangID = l.M_LangID
|
|
WHERE a.T_OrderHeaderAddOnT_OrderHeaderID = {$xid}
|
|
AND a.T_OrderHeaderAddOnIsActive = 'Y'
|
|
LIMIT 1";
|
|
|
|
$old_data = $this->db_onedev->query($sql_old)->row_array();
|
|
if (!$old_data) {
|
|
$this->sys_error("Data order header addon tidak ditemukan");
|
|
exit;
|
|
}
|
|
|
|
// 2. Jika ada ID bahasa baru, ambil nama bahasanya untuk kebutuhan log
|
|
$new_lang_name = '-';
|
|
if ($new_lang_id > 0) {
|
|
$sql_new = "SELECT M_LangName FROM m_lang WHERE M_LangID = {$new_lang_id} AND M_LangIsActive = 'Y'";
|
|
$new_lang_row = $this->db_onedev->query($sql_new)->row_array();
|
|
if (!$new_lang_row) {
|
|
$this->sys_error("Bahasa baru tidak ditemukan");
|
|
exit;
|
|
}
|
|
$new_lang_name = $new_lang_row['M_LangName'];
|
|
if ($new_lang_is_si === 'Y') {
|
|
$new_lang_name .= ' (SI)';
|
|
}
|
|
}
|
|
|
|
// 3. Cek apakah ada perubahan antara data yang lama dengan yang baru
|
|
if (
|
|
$old_data['T_OrderHeaderAddOnSecondM_LangID'] == $new_lang_id &&
|
|
$old_data['T_OrderHeaderAddOnSecondLangIsSI'] == $new_lang_is_si
|
|
) {
|
|
$this->sys_error("Bahasa kedua tidak ada perubahan");
|
|
exit;
|
|
}
|
|
|
|
$old_lang_name = $old_data['M_LangName'] ? $old_data['M_LangName'] : '-';
|
|
if ($old_data['T_OrderHeaderAddOnSecondLangIsSI'] === 'Y' && $old_lang_name !== '-') {
|
|
$old_lang_name .= ' (SI)';
|
|
}
|
|
|
|
// 4. Siapkan JSON untuk atribut log
|
|
$attr_json = json_encode(array(
|
|
"old" => array(
|
|
"id" => $old_data['T_OrderHeaderAddOnSecondM_LangID'],
|
|
"is_si" => $old_data['T_OrderHeaderAddOnSecondLangIsSI'],
|
|
"name" => $old_lang_name
|
|
),
|
|
"new" => array(
|
|
"id" => $new_lang_id,
|
|
"is_si" => $new_lang_is_si,
|
|
"name" => $new_lang_name
|
|
)
|
|
), JSON_UNESCAPED_UNICODE);
|
|
|
|
$this->db_onedev->trans_start();
|
|
|
|
// 5. Update Tabel Utama (t_orderheaderaddon)
|
|
$this->db_onedev->where('T_OrderHeaderAddOnT_OrderHeaderID', $xid);
|
|
$this->db_onedev->where('T_OrderHeaderAddOnIsActive', 'Y');
|
|
$this->db_onedev->update('t_orderheaderaddon', array(
|
|
'T_OrderHeaderAddOnSecondM_LangID' => $new_lang_id > 0 ? $new_lang_id : null,
|
|
'T_OrderHeaderAddOnSecondLangIsSI' => $new_lang_is_si
|
|
));
|
|
|
|
// 6. Insert log ke order_attr
|
|
$this->db_onedev->insert('one_lab.order_attr', array(
|
|
'orderAttrT_OrderHeaderID' => $xid,
|
|
'orderAttrType' => 'spv_order_lang',
|
|
'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 bahasa: " . $error['message']
|
|
: "Gagal menyimpan perubahan bahasa kedua";
|
|
$this->sys_error($msg);
|
|
exit;
|
|
}
|
|
|
|
$this->sys_ok(array(
|
|
"message" => "Bahasa kedua berhasil diubah.",
|
|
"xid" => $xid,
|
|
"new_lang_id" => $new_lang_id,
|
|
"new_lang_is_si" => $new_lang_is_si,
|
|
"new_lang_name" => $new_lang_name
|
|
));
|
|
}
|
|
}
|