214 lines
8.6 KiB
PHP
Executable File
214 lines
8.6 KiB
PHP
Executable File
<?php
|
|
|
|
class Refout extends MY_Controller
|
|
{
|
|
var $db_smartone;
|
|
public function index()
|
|
{
|
|
echo "REF OUT API";
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->db_smartone = $this->load->database("onedev", true);
|
|
}
|
|
|
|
public function search()
|
|
{
|
|
$prm = $this->sys_input;
|
|
|
|
$max_rst = 10;
|
|
$tot_count =0;
|
|
|
|
$page = $prm['page'];
|
|
if ($page == null)
|
|
$page = 1;
|
|
$offset = ($page - 1) * $max_rst;
|
|
|
|
$q = [
|
|
'search' => isset($prm['search']) ? "%{$prm['search']}%" : '%',
|
|
'company_id'=> isset($prm['company_id']) ? $prm['company_id'] : '0'
|
|
];
|
|
|
|
$q_wh_company = "T_OrderRefOutToM_CompanyID";
|
|
if ($prm['is_internal'] == 'Y')
|
|
$q_wh_company = "T_OrderRefOutToM_BranchID";
|
|
|
|
// QUERY TOTAL
|
|
$sql = "SELECT COUNT(DISTINCT T_OrderHeaderID, IFNULL(b.T_SampleTypeID, a.T_SampleTypeID)) total
|
|
FROM t_orderrefout
|
|
JOIN t_orderheader ON T_OrderRefOutT_OrderHeaderID = T_OrderHeaderID
|
|
JOIN m_patient ON T_OrderHeaderM_PatientId = M_PatientID
|
|
JOIN t_orderdetail ON T_OrderRefOutT_OrderDetailID = T_OrderDetailID
|
|
AND T_OrderDetailVerification = 'X' AND T_OrderDetailIsActive = 'Y'
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TEstID
|
|
JOIN t_sampletype a ON T_TestT_SampleTypeID = a.T_SampleTypeID
|
|
LEFT JOIN t_specimenlocal ON T_SpecimenLocalNat_TestID = T_TestNat_TestID
|
|
AND T_SpecimenLocalIsActive = 'Y'
|
|
LEFT JOIN t_sampletype b ON b.T_SampleTypeID = T_SpecimenLocalT_SampleTypeID
|
|
WHERE T_OrderRefOutIsActive = 'Y'
|
|
AND T_OrderRefOutIsConfirm = 'N'
|
|
AND {$q_wh_company} = ?
|
|
AND T_OrderRefOutDate >= DATE_SUB(now(), INTERVAL 30 DAY)
|
|
AND (T_OrderHeaderLabNumber LIKE ? OR M_PatientName LIKE ?)";
|
|
|
|
$query = $this->db_smartone->query($sql, array($q['company_id'], $q['search'], $q['search']));
|
|
|
|
if ($query) {
|
|
$tot_count = $query->result_array()[0]["total"];
|
|
}
|
|
else {
|
|
$this->sys_error_db("Ref Out count",$this->db_smartone);
|
|
exit;
|
|
}
|
|
|
|
$sql = "SELECT GROUP_CONCAT(T_OrderRefOutID SEPARATOR ',') T_OrderRefOutID,
|
|
T_OrderDetailID, T_OrderHeaderId, T_OrderHeaderLabNumber,
|
|
GROUP_CONCAT(T_TestID) T_TestID, GROUP_CONCAT(T_TestName) T_TestName,
|
|
IFNULL(b.T_SampleTypeID, a.T_SampleTypeID) T_SampleTypeID,
|
|
IFNULL(b.T_SampleTypeName, a.T_SampleTypeName) T_SampleTypeName,
|
|
fn_global_patient_name(T_OrderHeaderM_PatientID) patient_name
|
|
FROM t_orderrefout
|
|
JOIN t_orderheader ON T_OrderRefOutT_OrderHeaderID = T_OrderHeaderID
|
|
JOIN m_patient ON T_OrderHeaderM_PatientId = M_PatientID
|
|
JOIN t_orderdetail ON T_OrderRefOutT_OrderDetailID = T_OrderDetailID
|
|
AND T_OrderDetailVerification = 'X' AND T_OrderDetailIsActive = 'Y'
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TEstID
|
|
JOIN t_sampletype a ON T_TestT_SampleTypeID = a.T_SampleTypeID
|
|
LEFT JOIN t_specimenlocal ON T_SpecimenLocalNat_TestID = T_TestNat_TestID
|
|
AND T_SpecimenLocalIsActive = 'Y'
|
|
LEFT JOIN t_sampletype b ON b.T_SampleTypeID = T_SpecimenLocalT_SampleTypeID
|
|
WHERE T_OrderRefOutIsActive = 'Y'
|
|
AND T_OrderRefOutIsConfirm = 'N'
|
|
AND {$q_wh_company} = ?
|
|
AND T_OrderRefOutDate >= DATE_SUB(now(), INTERVAL 30 DAY)
|
|
AND (T_OrderHeaderLabNumber LIKE ? OR M_PatientName LIKE ?)
|
|
GROUP BY T_OrderHeaderID, T_SampleTypeID
|
|
ORDER BY T_OrderHeaderLabNumber DESC
|
|
limit {$offset}, {$max_rst}";
|
|
|
|
$query = $this->db_smartone->query($sql, array($q['company_id'], $q['search'], $q['search']));
|
|
|
|
if ($query) {
|
|
$rows = $query->result_array();
|
|
|
|
$result = array("total" => $tot_count, "total_page" => ceil($tot_count/$max_rst), "cur_page" => $page, "records" => $rows, "total_display" => sizeof($rows));
|
|
$this->sys_ok($result);
|
|
}
|
|
else {
|
|
$this->sys_error_db("Ref Out rows",$this->db_smartone);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function search_company()
|
|
{
|
|
$prm = $this->sys_input;
|
|
|
|
$max_rst = 10;
|
|
$tot_count = 0;
|
|
$search = isset($prm['search']) ? "%{$prm['search']}%" : '%';
|
|
|
|
$q_lj_company = "JOIN m_company ON T_OrderRefOutToM_CompanyID = M_CompanyID AND M_CompanyIsLabTo = 'Y'";
|
|
$q_cn_company = "M_CompanyID";
|
|
$q_cn_company_name = "M_CompanyName";
|
|
if ($prm['is_internal'] == 'Y') {
|
|
$q_lj_company = "JOIN m_branch ON T_OrderRefOutToM_BranchID = M_BranchID";
|
|
$q_cn_company = "M_BranchID";
|
|
$q_cn_company_name = "M_BranchName";
|
|
}
|
|
|
|
// QUERY TOTAL
|
|
$sql = "SELECT COUNT(DISTINCT {$q_cn_company}) total
|
|
FROM t_orderrefout
|
|
JOIN t_orderdetail ON T_OrderRefOutT_OrderDetailID = T_OrderDetailID
|
|
{$q_lj_company}
|
|
WHERE T_OrderRefOutDate >= DATE_SUB(now(), INTERVAL 30 DAY)
|
|
AND T_OrderRefOutIsActive = 'Y'
|
|
AND T_OrderRefOutIsConfirm = 'N'
|
|
AND T_OrderDetailVerification = 'X'
|
|
AND T_OrderRefOutIsInternal = ?
|
|
AND {$q_cn_company_name} LIKE ?";
|
|
|
|
$query = $this->db_smartone->query($sql, array($prm['is_internal'], $search));
|
|
|
|
if ($query) {
|
|
$tot_count = $query->result_array()[0]["total"];
|
|
}
|
|
else {
|
|
$this->sys_error_db("Order Ref Out count",$this->db_smartone);
|
|
exit;
|
|
}
|
|
|
|
$q_sl_company = "M_CompanyID company_id, M_CompanyName company_name";
|
|
if ($prm['is_internal'] == "Y")
|
|
$q_sl_company = "M_BranchID company_id, M_BranchName company_name";
|
|
|
|
$sql = "SELECT T_OrderRefOutID, {$q_sl_company}
|
|
FROM t_orderrefout
|
|
JOIN t_orderdetail ON T_OrderRefOutT_OrderDetailID = T_OrderDetailID
|
|
{$q_lj_company}
|
|
WHERE T_OrderRefOutDate >= DATE_SUB(now(), INTERVAL 30 DAY)
|
|
AND T_OrderRefOutIsActive = 'Y'
|
|
AND T_OrderRefOutIsConfirm = 'N'
|
|
AND T_OrderDetailVerification = 'X'
|
|
AND T_OrderRefOutIsInternal = ?
|
|
AND {$q_cn_company_name} LIKE ?
|
|
GROUP BY {$q_cn_company}
|
|
limit 0, {$max_rst}";
|
|
|
|
$query = $this->db_smartone->query($sql, array($prm['is_internal'], $search));
|
|
|
|
if ($query) {
|
|
$rows = $query->result_array();
|
|
|
|
$result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows), "q" => "");
|
|
$this->sys_ok($result);
|
|
}
|
|
else {
|
|
$this->sys_error_db("Order Ref Out rows",$this->db_smartone);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function send()
|
|
{
|
|
$prm = $this->sys_input;
|
|
|
|
$max_rst = 10;
|
|
$tot_count = 0;
|
|
|
|
$this->db_smartone->trans_start();
|
|
|
|
// HEADER
|
|
$sql = "INSERT INTO t_orderrefoutheader(T_OrderRefOutHeaderDate, T_OrderRefOutHeaderNumber, T_ORderRefOutHeaderUserID)
|
|
SELECT now(), fn_numbering('REF.OUT'), ? as user_id";
|
|
$query = $this->db_smartone->query($sql, [$this->sys_user['M_UserID']]);
|
|
|
|
if (!$query)
|
|
{
|
|
$this->sys_error_db("REF OUT SEND", $this->db_smartone);
|
|
exit;
|
|
}
|
|
|
|
$id = $this->db_smartone->insert_id();
|
|
|
|
$sql = "UPDATE t_orderrefout
|
|
SET T_OrderRefOutIsConfirm = 'Y', T_OrderRefOutT_OrderRefOutHeaderID = ?, T_OrderRefOutConfirmUserID = ?
|
|
WHERe T_OrderRefOutID IN ({$prm['ids']})";
|
|
|
|
$query = $this->db_smartone->query($sql, [$id, $this->sys_user['M_UserID']]);
|
|
|
|
$this->db_smartone->trans_complete();
|
|
|
|
if ($query) {
|
|
$this->sys_ok($prm['ids']);
|
|
}
|
|
else {
|
|
$this->sys_error_db("Ref Out Confirm", $this->db_smartone);
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
?>
|