Files
BE_IBL/application/controllers/mockup/fo/mergeemailv1/Patient.php
2026-04-15 15:24:34 +07:00

1166 lines
38 KiB
PHP

<?php
class Patient extends MY_Controller
{
var $db_onedev;
public function index()
{
echo "Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_onedev = $this->load->database("onedev", true);
}
function add_verifications_label($orderid)
{
$query = " SELECT Result_VerificationsID as id,
IFNULL(Result_VerificationsValueID,0) as xid,
IFNULL(Result_VerificationsValueCheck,'N') as chex,
IF(ISNULL(Result_VerificationsValueID),'',Result_VerificationsValueNote) as note,
Result_VerificationsLabel as label
FROM result_verifications
LEFT JOIN result_verifications_value ON Result_VerificationsValueResult_VerificationsID = Result_VerificationsID AND
Result_VerificationsValueSo_ResultEntryID = $orderid
WHERE
Result_VerificationIsActive = 'Y'
GROUP BY Result_VerificationsID
";
$rows = $this->db_onedev->query($query)->result_array();
foreach ($rows as $k => $v) {
if ($v['chex'] == 'N')
$rows[$k]['chex'] = false;
else
$rows[$k]['chex'] = true;
}
return $rows;
}
function search()
{
$prm = $this->sys_input;
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$nolab = $prm["nolab"];
$nama = $prm["name"];
$status = $prm["status"];
$company = $prm["company"]["M_CompanyID"];
$where_status = " AND (ISNULL(Result_HandOverEmailID))";
$xstatus = "IF(ISNULL(Result_ProcessToOfficeID),'N','Y') as status_ready";
$filter_status = "LEFT JOIN result_processtooffice ON Result_ProcessToOfficeT_OrderHeaderID = T_OrderHeaderID AND
Result_ProcessToOfficeT_OrderDeliveryID = T_OrderDeliveryID AND
Result_ProcessToOfficeT_OrderPromiseID = T_OrderPromiseID
LEFT JOIN result_handoveremail ON Result_HandOverEmailT_OrderHeaderID = T_OrderHeaderID AND
Result_HandOverEmailT_OrderDeliveryID = T_OrderDeliveryID AND
Result_HandOverEmailT_OrderPromiseID = T_OrderPromiseID
";
$paramxid = "0 as xid";
if ($status != 'N') {
$xstatus = "'Y' as status_ready";
$where_status = '';
$paramxid = "Result_HandOverEmailID as xid";
$filter_status = "JOIN result_handoveremail ON Result_HandOverEmailT_OrderHeaderID = T_OrderHeaderID AND
Result_HandOverEmailT_OrderPromiseID = T_OrderPromiseID AND
Result_HandOverEmailT_OrderDeliveryID = T_OrderDeliveryID AND
Result_HandOverEmailIsActive = 'Y' AND Result_HandOverEmailStatus = '{$status}'";
}
$filter_company = '';
if (intval($company) > 0) {
$filter_company = " AND M_CompanyID = {$company}";
}
$order_date = $prm["startdate"];
if (!isset($prm['current_page']))
$prm['current_page'] = 1;
$sql_where = "";
$number_limit = 10;
$number_offset = ($prm['current_page'] - 1) * $number_limit;
if ($nolab != "") {
$sql_where = " AND ( T_OrderHeaderLabNumber like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' OR M_PatientName like '%$nolab%' ) ";
}
$sql = "SELECT COUNT(*) as total FROM (
SELECT
T_OrderHeaderID as order_id,
T_OrderDeliveryID as delivery_id,
T_OrderPromiseID as order_promise_id
FROM t_orderheader
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderDetailT_TestIsResult = 'Y'
JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND
T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND
T_OrderPromiseIsActive = 'Y'
JOIN t_orderdelivery ON T_orderDeliveryT_OrderHeaderID = T_OrderHeaderID AND
T_OrderDeliveryM_DeliveryTypeID = 3 AND T_OrderDeliveryIsActive = 'Y'
$filter_status
WHERE
(
DATE(T_OrderHeaderDate) = '{$order_date}'
) AND
T_OrderHeaderIsActive = 'Y'
$sql_where $where_status
GROUP BY T_OrderHeaderID, T_OrderPromiseID, T_OrderDeliveryID
) xz";
//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("m_doctor count", $this->db_onedev);
exit;
}
$sql = "SELECT $paramxid,
T_OrderHeaderID as order_id,
T_OrderDeliveryID as delivery_id,
T_OrderDeliveryDestination as email_address,
T_OrderPromiseID as order_promise_id,
T_OrderHeaderLabNumber as noreg,
M_CompanyID,
M_CompanyName,
T_OrderHeaderLabNumberExt as noreg_ext,
CONCAT(IFNULL(M_TitleName,''),' ',M_PatientName) as patient_fullname,
DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date,
DATE_FORMAT(T_OrderPromiseDateTime,'%d-%m-%Y %H:%i') as promise_date,
DATE(T_OrderPromiseDateTime) as order_promise_date,
M_CompanyName as company_name,
IF(M_MouIsBill = 'Y','Y',Last_StatusPaymentIsLunas) as status_payment,
'' as staff_name,
'' as send_time,
'' as receiver_time,
'Y' as status_ready,
'Y' as status_complete_format,
T_OrderHeaderIsCito as iscito,
M_DeliveryName as label_delivery,
'' as not_found_format,
'N' as status_send,
'' as not_ready,
$xstatus
FROM t_orderheader
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID
JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_company
JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderDetailT_TestIsResult = 'Y'
JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND
T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND
T_OrderPromiseIsActive = 'Y'
JOIN t_orderdelivery ON T_orderDeliveryT_OrderHeaderID = T_OrderHeaderID AND
T_OrderDeliveryM_DeliveryTypeID = 3 AND T_OrderDeliveryIsActive = 'Y'
JOIN m_delivery ON T_OrderDeliveryM_DeliveryID = M_DeliveryID
JOIN last_statuspayment ON Last_StatusPaymentT_OrderHeaderID = T_OrderHeaderID
$filter_status
WHERE
(
DATE(T_OrderHeaderDate) = '{$order_date}'
) AND
T_OrderHeaderIsActive = 'Y'
$sql_where $where_status
GROUP BY T_OrderHeaderID, T_OrderDeliveryID
Order BY T_OrderPromiseDateTime ASC, T_OrderHeaderID ASC, T_OrderDeliveryID ASC
limit $number_limit offset $number_offset";
//echo $sql;
$query = $this->db_onedev->query($sql);
$rows = $query->result_array();
$sql_rows = $this->db_onedev->last_query();
if ($rows) {
foreach ($rows as $k => $v) {
$arr_not_ready = array();
$sql = "SELECT IFNULL(Result_ProcessToOfficeID,'0') as xid, Group_ResultName as testname
FROM t_orderdetail
JOIN group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID AND Group_ResultDetailIsActive = 'Y'
JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'N'
LEFT JOIN result_processtooffice ON Result_ProcessToOfficeT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
Result_ProcessToOfficeT_OrderDeliveryID = {$v['delivery_id']} AND
Result_ProcessToOfficeT_OrderPromiseID = {$v['order_promise_id']} AND
Result_ProcessToOfficeGroup_ResultID = Group_ResultID
WHERE
T_OrderDetailT_OrderHeaderID = {$v['order_id']} AND
T_OrderDetailT_OrderPromiseID = {$v['order_promise_id']} AND
T_OrderDetailT_TestIsResult = 'Y' AND
T_OrderDetailIsActive = 'Y'
GROUP BY Group_ResultID
UNION
SELECT IFNULL(Result_ProcessToOfficeID,'0') as xid, T_TestName as testname
FROM t_orderdetail
JOIN group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID AND Group_ResultDetailIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y'
JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagPerTest = 'Y'
LEFT JOIN result_processtooffice ON Result_ProcessToOfficeT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
Result_ProcessToOfficeT_OrderDeliveryID = {$v['delivery_id']} AND
Result_ProcessToOfficeT_OrderPromiseID = {$v['order_promise_id']} AND
Result_ProcessToOfficeGroup_ResultID = T_TestID
WHERE
T_OrderDetailT_OrderHeaderID = {$v['order_id']} AND
T_OrderDetailT_OrderPromiseID = {$v['order_promise_id']} AND
T_OrderDetailT_TestIsResult = 'Y' AND
T_OrderDetailIsActive = 'Y'
GROUP BY T_TestID";
//echo $sql.";";
$rows_not_ready = $this->db_onedev->query($sql)->result_array();
foreach ($rows_not_ready as $k_nr => $v_nr) {
if ($v_nr['xid'] == '0' || $v_nr['xid'] == 0) {
array_push($arr_not_ready, $v_nr['testname']);
}
}
if (count($arr_not_ready) > 0) {
$rows[$k]['status_ready'] = 'N';
$rows[$k]['not_ready'] = join($arr_not_ready, ',');
}
//echo $rows[$k]['status_ready'];
$arr_not_found_format = array();
$sql = "SELECT '0' as rpo_id, IFNULL(T_EmailNonLabID,'0') as xid, Group_ResultName as testname, Group_ResultID as group_test_id
FROM t_orderdetail
JOIN group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID AND Group_ResultDetailIsActive = 'Y'
JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'Y' AND Group_ResultFlagPerTest = 'N'
LEFT JOIN t_email_nonlab ON T_EmailNonLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_EmailNonLabResultEntryID = 0 AND
T_EmailNonLabType = Group_ResultName
LEFT JOIN result_processtooffice ON Result_ProcessToOfficeT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
Result_ProcessToOfficeT_OrderDeliveryID = {$v['delivery_id']} AND
Result_ProcessToOfficeT_OrderPromiseID = {$v['order_promise_id']}
WHERE
T_OrderDetailT_OrderHeaderID = {$v['order_id']} AND
T_OrderDetailT_OrderPromiseID = {$v['order_promise_id']} AND
T_OrderDetailIsActive = 'Y'
UNION
SELECT '0' as rpo_id, IFNULL(T_EmailNonLabID,'0') as xid, T_TestName as testname, T_TestID as group_test_id
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y'
JOIN group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID AND Group_ResultDetailIsActive = 'Y'
JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'Y' AND Group_ResultFlagPerTest = 'Y'
LEFT JOIN so_resultentry ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
LEFT JOIN t_email_nonlab ON T_EmailNonLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_EmailNonLabResultEntryID = So_ResultEntryID
LEFT JOIN result_processtooffice ON Result_ProcessToOfficeT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
Result_ProcessToOfficeT_OrderDeliveryID = {$v['delivery_id']} AND
Result_ProcessToOfficeT_OrderPromiseID = {$v['order_promise_id']}
WHERE
T_OrderDetailT_OrderHeaderID = {$v['order_id']} AND
T_OrderDetailIsActive = 'Y'
";
//echo $sql.";";
$rows_not_found_format = $this->db_onedev->query($sql)->result_array();
if ($rows_not_found_format) {
foreach ($rows_not_found_format as $ki => $vi) {
if ($vi['xid'] == '0' || $vi['xid'] == 0) {
//echo $vi['testname'];
array_push($arr_not_found_format, $vi['testname']);
}
}
}
if (count($arr_not_found_format) > 0) {
$rows[$k]['status_complete_format'] = 'N';
$rows[$k]['status_ready'] = 'N';
$rows[$k]['test_not_ready'] = join($arr_not_found_format, ',');
}
//echo $rows[$k]['status_ready'];
$sql = "SELECT COUNT(*) as xcount
FROM result_handoveremail
WHERE
Result_HandOverEmailT_OrderHeaderID = {$v['order_id']} AND
Result_HandOverEmailT_OrderPromiseID = {$v['order_promise_id']} AND
Result_HandOverEmailT_OrderDeliveryID = {$v['delivery_id']} AND
Result_HandOverEmailStatus = 'S' AND
Result_HandOverEmailIsActive = 'Y'
";
$xrow_status = $this->db_onedev->query($sql)->row();
if ($xrow_status->xcount > 0) {
$rows[$k]['status_send'] = 'Y';
}
}
}
$companies = array(array('M_CompanyID' => '0', 'M_CompanyName' => 'Semua'));
$sql = "SELECT
M_CompanyID,
M_CompanyName
FROM t_orderheader
JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderDetailT_TestIsResult = 'Y'
JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND
T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND
T_OrderPromiseIsActive = 'Y'
JOIN t_orderdelivery ON T_orderDeliveryT_OrderHeaderID = T_OrderHeaderID AND
T_OrderDeliveryM_DeliveryTypeID = 3 AND T_OrderDeliveryIsActive = 'Y'
LEFT JOIN result_processtooffice ON Result_ProcessToOfficeT_OrderHeaderID = T_OrderHeaderID AND
Result_ProcessToOfficeT_OrderDeliveryID = T_OrderDeliveryID AND
Result_ProcessToOfficeT_OrderPromiseID = T_OrderPromiseID
LEFT JOIN result_handoveremail ON Result_HandOverEmailT_OrderHeaderID = T_OrderHeaderID AND
Result_HandOverEmailT_OrderDeliveryID = T_OrderDeliveryID AND
Result_HandOverEmailT_OrderPromiseID = T_OrderPromiseID
WHERE
(
DATE(T_OrderHeaderDate) = '{$order_date}'
) AND
T_OrderHeaderIsActive = 'Y' AND
ISNULL(Result_HandOverEmailID)
GROUP BY M_CompanyID";
$xcompanies = $this->db_onedev->query($sql)->result_array();
if ($xcompanies) {
foreach ($xcompanies as $kc => $vc) {
array_push($companies, $vc);
}
}
//echo $this->db_onedev->last_query();
$result = array("total" => $tot_page, "companies" => $companies, "records" => $rows, "sql" => $sql_rows);
$this->sys_ok($result);
exit;
}
public function save()
{
try {
$xprm = $this->sys_input;
//# cek token valid
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$xuserid = $this->sys_user['M_UserID'];
//# ambil parameter input
//print_r($xprm);
$prm = $xprm['patient'];
$xstatus = $xprm['act'];
$fostatusid = 3;
$fologcode = 'FO.VERIFICATION.CONFIRM';
$id = $prm['T_OrderHeaderID'];
echo $xstatus;
if ($xstatus == 'N') {
$fostatusid = 4;
$fologcode = 'FO.VERIFICATION.REJECT';
} else {
$this->save_barcode_new($id);
}
//print_r($prm);
$xverificationnote = $prm['verification_note'];
//echo $xverificationnote;
$sql = "update t_orderheader
set
T_OrderHeaderVerificationNote = '{$xverificationnote}'
where
T_OrderHeaderID = $id";
//echo $sql;
$query = $this->db_onedev->query($sql);
$sql = "insert into fo_status(
Fo_StatusDate,
Fo_StatusT_OrderHeaderID,
Fo_StatusM_StatusID,
Fo_StatusM_UserID,
Fo_StatusCreated,
Fo_StatusUpdated)
values( now(), ?, ?, ?, now(),now())";
//echo $sql;
$query = $this->db_onedev->query(
$sql,
array(
$id,
$fostatusid,
$xuserid
)
);
if (!$query) {
$this->sys_error_db("fo_status insert");
exit;
}
$data_log = array();
$data_log['orderid'] = $id;
$json_dt_log = json_encode($data_log);
$sql = "insert into one_log.log_fo(
Log_FoDate,
Log_FoCode,
Log_FoJson,
Log_FoUserID)
values( now(), ?, ?, ?)";
//echo $sql;
$query = $this->db_onedev->query(
$sql,
array(
$fologcode,
$json_dt_log,
$xuserid
)
);
if (!$query) {
$this->sys_error_db("one_log.fo_log insert");
exit;
}
if ($xstatus == 'Y') {
$msg = 'Verifikasi berhasil dilakukan';
} else {
$msg = 'Tolak Verifikasi berhasil dilakukan';
$sql = "INSERT INTO t_ordermessage (
T_OrderMessageT_OrderHeaderID,
T_OrderMessageType,
T_OrderMessageMessage,
T_OrderMessageFromUserID,
T_OrderMessageCreated,
T_OrderMessageLastUpdated
)
VALUES(
{$id},
'FO.VERIFICATION.REJECT',
'{$xverificationnote}',
{$xuserid},
NOW(),
NOW()
)";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("one_log.t_ordermessage insert");
exit;
}
}
$rows = array('message' => $msg);
$result = array("total" => 0, "records" => $rows);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function save_barcode_new($orderid)
{
$xuserid = $this->sys_user['M_UserID'];
$query = " SELECT T_SampleTypeID as id,
T_SampleTypeName as name,
'' as children
FROM t_orderheader
JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID
WHERE
T_OrderHeaderID = {$orderid}
GROUP BY T_SampleTypeID
";
//echo $query ;
$barcodes = $this->db_onedev->query($query)->result();
foreach ($barcodes as $k => $v) {
$query = "SELECT T_SampleTypeID as id, IFNULL(T_BarcodeLabID,0) as xid,
IF(ISNULL(T_BarcodeLabID),'Y',T_BarcodeLabIsActive) as chex,
T_TestName as testname,
T_SampleTypeName as samplename,
IF(ISNULL(T_BarcodeLabID),CONCAT(T_OrderHeaderLabNumber,'.',T_SampleTypeID,'.',1),T_BarcodeLabBarcode) as barcodenumber
FROM t_orderdetail
JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID
LEFT JOIN t_barcodelab ON T_BarcodeLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
T_BarcodeLabT_SampleTypeID = T_TestT_SampleTypeID AND T_BarcodeLabIsActive = 'Y'
WHERE
T_OrderDetailT_OrderHeaderID = {$orderid} AND T_SampleTypeID = {$v->id}
GROUP BY T_BarcodeLabID ";
$v->children = $this->db_onedev->query($query)->result_array();
//$v->children = $barcode_data;
foreach ($v->children as $ki => $vi) {
if ($vi['chex'] == 'N')
$v->children[$ki]['chex'] = false;
else
$v->children[$ki]['chex'] = true;
$sql = "insert into t_barcodelab(
T_BarcodeLabT_OrderHeaderID,
T_BarcodeLabBarcode,
T_BarcodeLabT_SampleTypeID,
T_BarcodeLabCreated,
T_BarcodeLabLastUpdated,
T_BarcodeLabUserID)
values( ?, ?, ?, now(),now(),?)";
$query = $this->db_onedev->query(
$sql,
array(
$orderid,
$v->children[$ki]['barcodenumber'],
$v->children[$ki]['id'],
$xuserid
)
);
// echo $this->db_onedev->last_query();
if (!$query) {
$this->sys_error_db("t_barcodelab insert");
exit;
}
}
}
//insert log
$supplies = array();
$query = " SELECT M_SuppliesID as id,
IFNULL(T_OrderSuppliesID,0) as xid,
IF(ISNULL(T_OrderSuppliesID),'N',T_OrderSuppliesIsActive) as chex,
IFNULL(T_OrderSuppliesQty,1) as qty,
M_SuppliesName as name,
IF(ISNULL(T_OrderSuppliesID),NOW(),T_OrderSuppliesLastUpdated) as lastupdated,
IF(ISNULL(T_OrderSuppliesID),NOW(),T_OrderSuppliesLastUpdated) as tx_lastupdated
FROM m_supplies
JOIN t_ordersupplies ON T_OrderSuppliesT_OrderHeaderID = $orderid AND T_OrderSuppliesM_SuppliesID = M_SuppliesID
WHERE
M_SuppliesIsActive = 'Y'
";
//echo $query ;
$supplies = $this->db_onedev->query($query)->result_array();
foreach ($supplies as $k => $v) {
if ($v['chex'] == 'N')
$supplies[$k]['chex'] = false;
else
$supplies[$k]['chex'] = true;
}
$dt_log = array('orderid' => $orderid, 'supplies' => $supplies, 'barcode' => $barcodes);
$fologcode = 'FO.Verification.BarcodeSupplies';
$json_dt_log = json_encode($dt_log);
$sql = "insert into one_log.log_supplies_barcode(
Log_SuppliesBarcodeDate,
Log_SuppliesBarcodeCode,
Log_SuppliesBarcodeJson,
Log_SuppliesBarcodeUserID)
values( now(), ?, ?, ?)";
//echo $sql;
$query = $this->db_onedev->query(
$sql,
array(
$fologcode,
$json_dt_log,
$xuserid
)
);
if (!$query) {
$this->sys_error_db("one_log.log_supplies_barcode insert");
exit;
}
}
function saveverifications($id, $verifications, $type, $userid)
{
try {
//$xverificationtypeid = $this->db_onedev->query("SELECT * FROM fo_verificationtype WHERE Fo_VerificationTypeGroup = '{$type}' AND Fo_VerificationTypeIsActive = 'Y'")->row()->Fo_VericationTypeID;
//echo $xverificationtypeid;
//print_r($verifications);
foreach ($verifications as $k => $v) {
//print_r($v);
if (intval($v['xid']) == 0) {
$sql = "insert into fo_verification(
Fo_VerificationT_OrderHeaderID,
Fo_VerificationFo_VericationTypeID,
Fo_VerificationIsOK,
Fo_VerificationReason,
Fo_VerificationCreated,
Fo_VerificationLastUpdated,
Fo_VerificationUserID)
values( ?, ?, ?, ?, now(),now(),?)";
//echo $sql;
$query = $this->db_onedev->query(
$sql,
array(
$id,
$v['id'],
$v['chex'] == true ? 'Y' : 'N',
$v['note'],
$userid
)
);
if (!$query) {
$this->sys_error_db("fo_verification insert");
exit;
}
}
}
return true;
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function saveverification_delivery($id, $deliveries, $userid)
{
try {
foreach ($deliveries as $k => $v) {
if ($v['id'] === 0) {
$sql = "insert into fo_verification_delivery_add(
Fo_VerificationDeliveryAddT_OrderHeaderID,
Fo_VerificationDeliveryAddM_DeliveryID,
Fo_VerificationDeliveryAddM_DeliveryTypeID,
Fo_VerificationDeliveryAddDestination,
Fo_VerificationDeliveryAddAddressID,
Fo_VerificationDeliveryAddM_KelurahanID,
Fo_VerificationDeliveryAddOK,
Fo_VerificationDeliveryAddReason,
Fo_VerificationDeliveryAddCreated,
Fo_VerificationDeliveryAddLastUpdated,
Fo_VerificationDeliveryAddUserID)
values( ?, ?, ?, ?,?,?,?,?, now(),now(),?)";
//echo $sql;
$query = $this->db_onedev->query(
$sql,
array(
$id,
$v['deliveryid'],
$v['typedeliveryid'],
$v['destination'],
$v['addressid'],
$v['vilageid'],
$v['chex'] == true ? 'Y' : 'N',
$v['note'],
$userid
)
);
if (!$query) {
echo $this->db_onedev->last_query();
$this->sys_error_db("fo_verification_delivery_add insert");
exit;
}
} else {
$sql = "insert into fo_verification_delivery(
Fo_VerificationDeliveryT_OrderHeaderID,
Fo_VerificationDeliveryT_OrderDeliveryID,
Fo_VerificationDeliveryIsOK,
Fo_VerificationDeliveryReason,
Fo_VerificationDeliveryCreated,
Fo_VerificationDeliveryLastUpdated,
Fo_VerificationDeliveryUserID)
values( ?, ?, ?, ?, now(),now(),?)";
//echo $sql;
$query = $this->db_onedev->query(
$sql,
array(
$id,
$v['id'],
$v['chex'] == true ? 'Y' : 'N',
$v['note'],
$userid
)
);
if (!$query) {
echo $this->db_onedev->last_query();
$this->sys_error_db("fo_verification_delivery insert");
exit;
}
//echo $this->db_onedev->last_query();
}
}
return true;
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function lookup_barcodes()
{
try {
$prm = $this->sys_input;
//# cek token valid
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql = "SELECT T_BarcodeLabID as id, 'barcode' as type,T_BarcodeLabID,T_BarcodeLabBarcode, T_BarcodeLabCounter, T_SampleTypeName, 'N' as chex
FROM t_barcodelab
JOIN t_sampletype ON T_BarcodeLabT_SampleTypeID = T_SampleTypeID
WHERE
T_BarcodeLabT_OrderHeaderID = {$prm['ohid']} AND T_BarcodeLabIsActive = 'Y'
UNION
SELECT T_OrderHeaderID as id, 'formulir' as type, 0,T_OrderHeaderLabNumber as T_BarcodeLabBarcode, 1, 'Formulir' as T_SampleTypeName, 'N' as chex
FROM t_orderheader
WHERE
T_OrderHeaderID = {$prm['ohid']}
";
//echo $sql;
$rows = $this->db_onedev->query($sql)->result_array();
if ($rows) {
foreach ($rows as $k => $v) {
if ($v['chex'] == 'N')
$rows[$k]['chex'] = false;
else
$rows[$k]['chex'] = true;
}
}
$result = array("total" => 0, "records" => $rows);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function saveverification_px($id, $pxs, $userid)
{
try {
foreach ($pxs as $k => $v) {
if (intval($v['id']) == 0) {
$cxh = $v['chex'] == true ? 'Y' : 'N';
$sql = "insert into fo_verification_test_add(
Fo_VerificationTestAddT_OrderHeaderID,
Fo_VerificationTestAddT_TestID,
Fo_VerificationTestAddBruto,
Fo_VerificationTestAddDiscount,
Fo_VerificationTestAddTotal,
Fo_VerificationTestAddIsOK,
Fo_VerificationTestAddIsCito,
Fo_VerificationTestAddCreated,
Fo_VerificationTestAddLastUpdated,
Fo_VerificationTestAddUserID)
values( $id, {$v['pxid']}, {$v['bruto']}, {$v['discount']},{$v['total']},'{$cxh}','{$v['flagcito']}',now(),now(),{$userid})";
//echo $sql;
$query = $this->db_onedev->query($sql);
//echo $this->db_onedev->last_query();
if (!$query) {
$this->sys_error_db("fo_verification_test_add insert");
exit;
}
} else {
$sql = "insert into fo_verification_test(
Fo_VerificationTestT_OrderHeaderID,
Fo_VerificationTestT_OrderDetailID,
Fo_VerificationTestIsOK,
Fo_VerificationTestReason,
Fo_VerificationTestCreated,
Fo_VerificationTestLastUpdated,
Fo_VerificationTestUserID)
values( ?, ?, ?, ?, now(),now(),?)";
//echo $sql;
$query = $this->db_onedev->query(
$sql,
array(
$id,
$v['id'],
$v['chex'] == true ? 'Y' : 'N',
$v['note'],
$userid
)
);
//echo $this->db_onedev->last_query();
if (!$query) {
$this->sys_error_db("fo_verification_test insert");
exit;
}
}
}
return true;
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function verify()
{
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userid = $this->sys_user["M_UserID"];
$xstatus = $prm['act'];
if ($xstatus == 'Y') {
$msg = "Berhasil melakukan verifikasi";
$query = " INSERT INTO result_verifications_value (
Result_VerificationsValueSo_ResultEntryID,
Result_VerificationsValueResult_VerificationsID,
Result_VerificationsValueCheck,
Result_VerificationsValueNote,
Result_VerificationsValueUserID,
Result_VerificationsValueCreated
)
SELECT {$prm['trx_id']},
Result_VerificationsID,
'Y',
'',
{$userid},
NOW()
FROM result_verifications
WHERE
Result_VerificationIsActive = 'Y'
ON DUPLICATE KEY UPDATE
Result_VerificationsValueCheck = 'Y',
Result_VerificationsValueNote = '',
Result_VerificationsValueUserID = {$userid},
Result_VerificationsValueLastUpdated = NOW()
";
//echo $query;
$this->db_onedev->query($query);
$sql = "UPDATE so_resultentry SET So_ResultEntryStatus = 'VAL2' , So_ResultEntryValidation2 = 'Y' WHERE So_ResultEntryID = {$prm['trx_id']}";
$this->db_onedev->query($sql);
} else {
$msg = "Tolak untuk perbaikan";
$verifications = $prm['verifications'];
foreach ($verifications as $k => $v) {
$chx = $v['chex'] == true ? 'Y' : 'N';
$query = " INSERT INTO result_verifications_value (
Result_VerificationsValueSo_ResultEntryID,
Result_VerificationsValueResult_VerificationsID,
Result_VerificationsValueCheck,
Result_VerificationsValueNote,
Result_VerificationsValueUserID,
Result_VerificationsValueCreated
)
values( {$prm['trx_id']},
{$v['id']},
'{$chx}',
'{$v['note']}',
{$userid},
NOW()
)
ON DUPLICATE KEY UPDATE
Result_VerificationsValueCheck = '{$chx}',
Result_VerificationsValueNote = '{$v['note']}',
Result_VerificationsValueUserID = {$userid},
Result_VerificationsValueLastUpdated = NOW()
";
//echo $query;
$this->db_onedev->query($query);
}
}
$result = array("total" => 0, "records" => array('status' => 'OK', 'message' => $msg));
$this->sys_ok($result);
}
function getstatuspergroup()
{
try {
//# cek token valid
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$rows = array();
$noreg_ext = $prm['noreg_ext'];
$sql = "SELECT T_OrderHeaderID, T_OrderDetailID,
Group_ResultID, Nat_GroupName, Group_ResultName,
T_OrderDetailT_TestName,
T_OrderDetailT_TestIsResult,
So_ResultEntryID,
-- F(ISNULL(Result_ProcessToOfficeID),'N','Y') as status_serahhasil,
IF(T_OrderPromiseDateTime > NOW(), 'N', 'Y') AS statuspromise,
DATE_FORMAT(T_OrderPromiseDateTime,'%d-%m-%Y %H:%i') as promise_date
FROM t_orderheader
-- Mencari janji hasil (T_OrderPromiseDateTime) Berdasarkan (T_OrderHeaderLabNumberExt)
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderHeaderLabNumberExt = '{$noreg_ext}'
AND T_OrderHeaderIsActive = 'Y'
AND T_OrderDetailT_TestIsResult = 'Y'
JOIN group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID
AND Group_ResultDetailIsActive = 'Y'
JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID
AND Group_ResultIsActive = 'Y'
-- check status promise tanggal berapa
JOIN t_orderpromise ON T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID
AND T_OrderPromiseIsActive ='Y'
AND T_OrderDetailT_OrderPromiseID = T_OrderPromiseID
-- Mencari Nama nat test name nya (Nat_GroupName)
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
JOIN nat_group ON T_TestNat_GroupID = Nat_GroupID
AND Nat_GroupIsActive = 'Y'
-- check sudah serah terima hasil belum
JOIN t_orderdelivery ON T_OrderDeliveryT_OrderHeaderID = T_OrderHeaderID AND T_OrderDeliveryM_DeliveryTypeID = 3 AND
T_OrderDeliveryIsActive = 'Y'
LEFT JOIN result_processtooffice ON Result_ProcessToOfficeT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
Result_ProcessToOfficeT_OrderDeliveryID = T_OrderDeliveryID AND
Result_ProcessToOfficeT_OrderPromiseID = T_OrderPromiseID AND
Result_ProcessToOfficeGroup_ResultID = Group_ResultID AND
Result_ProcessToOfficeStatus = 'S'
LEFT JOIN so_resultentry ON T_OrderHeaderID = So_ResultEntryT_OrderHeaderID
AND T_OrderDetailID = So_ResultEntryT_OrderDetailID
AND So_ResultEntryIsActive = 'Y'
ORDER BY Nat_GroupID, promise_date";
$rows = $this->db_onedev->query($sql)->result_array();
$grouped = [];
$count_total_group = 0;
$count_total_done_promise = 0;
foreach ($rows as $row) {
$groupName = $row['Nat_GroupName'];
$groupresultname = $row['Group_ResultName'];
$promiseDate = $row['promise_date'];
$ResultEntryID = $row['So_ResultEntryID'];
$orderheaderid = $row['T_OrderHeaderID'];
$orderdetail_ids = $row['T_OrderDetailID'];
$statuspromise = $row['statuspromise'] === 'Y';
// $testname = $row['T_OrderDetailT_TestName'];
// Inisialisasi group jika belum ada
if (!isset($grouped[$groupName])) {
$grouped[$groupName] = [
'statuspromise' => $statuspromise,
'promises' => [],
'orderdetailid' => [],
'Group_ResultName' => [],
'details' => [],
];
$count_total_group++;
if ($statuspromise === true) {
$count_total_done_promise++;
}
} else {
// Jika salah satu status janji = false, seluruh grup = false
if ($statuspromise === false) {
$grouped[$groupName]['statuspromise'] = false;
}
}
// Tambahkan data jika statuspromise masih true dan belum ada nama groupresult-nya
if (
$grouped[$groupName]['statuspromise'] === true &&
!in_array($groupresultname, $grouped[$groupName]['Group_ResultName'])
) {
$grouped[$groupName]['Group_ResultName'][] = $groupresultname;
}
// Tambahkan ke daftar orderdetail dan test
$grouped[$groupName]['orderdetail_id'][] = $orderdetail_ids;
// Add promise if not exists
if (!in_array($promiseDate, $grouped[$groupName]['promises'])) {
$grouped[$groupName]['promises'][] = $promiseDate;
}
if (!isset($grouped[$groupName]['details'][$groupresultname])) {
$grouped[$groupName]['details'][$groupresultname] = [
'resultentryid' => [],
];
}
// Tambahkan orderdetail ID ke detail
$grouped[$groupName]['details'][$groupresultname]['resultentryid'][] = $ResultEntryID;
}
$available_merge = 'Y';
if ($count_total_group == 1) {
// Jika hanya 1 group dan belum ada yang selesai, maka N
if ($count_total_done_promise < 1) {
$available_merge = 'N';
}
} elseif ($count_total_group >= 2) {
// Jika 2 atau lebih group, minimal harus ada 2 promise yang selesai
if ($count_total_done_promise < 2 || $count_total_done_promise < $count_total_group) {
$available_merge = 'N';
}
}
// Transform to frontend format
foreach ($grouped as $groupName => $data) {
$detailList = [];
foreach ($data['details'] as $detailName => $detailData) {
$detailList[] = [
'name' => $detailName,
'resultentryid' => $detailData['resultentryid'],
];
}
$info_promises[] = [
'group' => $groupName,
'ohid' => $orderheaderid,
'resultentryid' => $ResultEntryID,
'statuspromise' => $data['statuspromise'],
'promises' => $data['promises'],
'orderdetailid' => $data['orderdetail_id'],
'resultnames' => $data['Group_ResultName'],
'details' => $detailList,
];
}
$result = array("total" => 0, "records" => $info_promises, "available_merges" => $available_merge);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function merge_report()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getinfo()
{
try {
//# cek token valid
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$rows = array();
$sql = " SELECT COUNT(*) as xcount
FROM (
SELECT *
FROM t_orderdelivery
JOIN t_orderheader ON T_OrderDeliveryT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND
DATE(T_OrderPromiseDateTime) = '{$prm['startdate']}' AND
T_OrderPromiseIsActive = 'Y'
WHERE
T_OrderDeliveryM_DeliveryTypeID = 3 AND T_OrderDeliveryIsActive = 'Y'
GROUP BY T_OrderDeliveryID
) x
";
//echo $sql ;
$rows['total'] = $this->db_onedev->query($sql)->row()->xcount;
$sql = " SELECT COUNT(*) as xcount
FROM (
SELECT *
FROM t_orderdelivery
JOIN t_orderheader ON T_OrderDeliveryT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND
DATE(T_OrderPromiseDateTime) = '{$prm['startdate']}' AND
T_OrderPromiseIsActive = 'Y'
JOIN result_handoveremail ON Result_HandOverEmailT_OrderHeaderID = T_OrderHeaderID AND
Result_HandOverEmailT_OrderPromiseID = T_OrderPromiseID AND
Result_HandOverEmailT_OrderDeliveryID = T_OrderDeliveryID AND
Result_HandOverEmailStatus = 'D'
WHERE
T_OrderDeliveryM_DeliveryTypeID = 3 AND T_OrderDeliveryIsActive = 'Y'
GROUP BY T_OrderDeliveryID
) x
";
//echo $sql ;
$rows['done'] = $this->db_onedev->query($sql)->row()->xcount;
$sql = " SELECT COUNT(*) as xcount
FROM (
SELECT *
FROM t_orderdelivery
JOIN t_orderheader ON T_OrderDeliveryT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND
DATE(T_OrderPromiseDateTime) = '{$prm['startdate']}' AND
T_OrderPromiseIsActive = 'Y'
JOIN result_handoveremail ON Result_HandOverEmailT_OrderHeaderID = T_OrderHeaderID AND
Result_HandOverEmailT_OrderPromiseID = T_OrderPromiseID AND
Result_HandOverEmailT_OrderDeliveryID = T_OrderDeliveryID AND
Result_HandOverEmailStatus = 'S'
WHERE
T_OrderDeliveryM_DeliveryTypeID = 3 AND T_OrderDeliveryIsActive = 'Y'
GROUP BY T_OrderDeliveryID
) x
";
//echo $sql ;
$rows['send'] = $this->db_onedev->query($sql)->row()->xcount;
$sql = "SELECT COUNT(*) as xcount
FROM (
SELECT *
FROM t_orderdelivery
JOIN t_orderheader ON T_OrderDeliveryT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND
DATE(T_OrderPromiseDateTime) = '{$prm['startdate']}' AND
T_OrderPromiseIsActive = 'Y'
JOIN result_handoveremail ON Result_HandOverEmailT_OrderHeaderID = T_OrderHeaderID AND
Result_HandOverEmailT_OrderPromiseID = T_OrderPromiseID AND
Result_HandOverEmailT_OrderDeliveryID = T_OrderDeliveryID AND
Result_HandOverEmailStatus = 'X'
WHERE
T_OrderDeliveryM_DeliveryTypeID = 3 AND T_OrderDeliveryIsActive = 'Y'
GROUP BY T_OrderDeliveryID
) x
";
//echo $sql ;
$rows['fail'] = $this->db_onedev->query($sql)->row()->xcount;
$sql = " SELECT COUNT(*) as xcount
FROM (
SELECT *
FROM t_orderdelivery
JOIN t_orderheader ON T_OrderDeliveryT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND
DATE(T_OrderPromiseDateTime) = '{$prm['startdate']}' AND
T_OrderPromiseIsActive = 'Y'
JOIN result_handoveremail ON Result_HandOverEmailT_OrderHeaderID = T_OrderHeaderID AND
Result_HandOverEmailT_OrderPromiseID = T_OrderPromiseID AND
Result_HandOverEmailT_OrderDeliveryID = T_OrderDeliveryID AND
Result_HandOverEmailStatus = 'S'
WHERE
T_OrderDeliveryM_DeliveryTypeID = 3 AND T_OrderDeliveryIsActive = 'Y' AND
NOW() > DATE_ADD(Result_HandOverEmailSendDateTime, INTERVAL 1 HOUR)
GROUP BY T_OrderDeliveryID
) x
";
//echo $sql ;
$rows['warning'] = $this->db_onedev->query($sql)->row()->xcount;
$result = array("total" => 0, "records" => $rows);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
}