Add status/name/nolab/company filters to search_v2

Previously search_v2 ignored all filters from the request.
Now status=''/any, name, nolab, company are applied dynamically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
sas.fajri
2026-05-24 22:36:26 +07:00
parent 46c3138f3c
commit 2d6c2b9fa2

View File

@@ -397,18 +397,42 @@ class Patient extends MY_Controller
$startdate = isset($prm["startdate"]) && $prm["startdate"] != '' ? $prm["startdate"] : date('Y-m-d');
$enddate = isset($prm["enddate"]) && $prm["enddate"] != '' ? $prm["enddate"] : date('Y-m-d');
$name = isset($prm["name"]) ? trim($prm["name"]) : '';
$nolab = isset($prm["nolab"]) ? trim($prm["nolab"]) : '';
$status = isset($prm["status"]) ? trim($prm["status"]) : '';
$company = isset($prm["company"]["M_CompanyID"]) ? (int)$prm["company"]["M_CompanyID"] : 0;
$page = isset($prm["page"]) && $prm["page"] > 0 ? (int)$prm["page"] : 1;
$limit = 8;
$offset = ($page - 1) * $limit;
// Build dynamic WHERE filters
$extra_where = '';
$extra_params = array();
if ($status != '') {
$extra_where .= ' AND tse.T_SendEmailStatus = ?';
$extra_params[] = $status;
}
if ($name != '') {
$extra_where .= ' AND tse.T_SendEmailPatientName LIKE ?';
$extra_params[] = '%' . $name . '%';
}
if ($nolab != '') {
$extra_where .= ' AND toh.T_OrderHeaderLabNumber LIKE ?';
$extra_params[] = '%' . $nolab . '%';
}
if ($company > 0) {
$extra_where .= ' AND toh.T_OrderHeaderM_CompanyID = ?';
$extra_params[] = $company;
}
// ================= TOTAL DATA =================
$sql_count = "SELECT COUNT(*) as total
FROM t_send_email tse
JOIN t_orderheader toh
JOIN t_orderheader toh
ON tse.T_SendEmailT_OrderHeaderID = toh.T_OrderHeaderID
JOIN (
SELECT
SELECT
T_OrderPromiseT_OrderHeaderID,
MAX(T_OrderPromiseDateTime) AS T_OrderPromiseDateTime
FROM t_orderpromise
@@ -418,14 +442,15 @@ class Patient extends MY_Controller
ON tp_latest.T_OrderPromiseT_OrderHeaderID = toh.T_OrderHeaderID
WHERE tse.T_SendEmailIsActive = 'Y'
AND DATE(tp_latest.T_OrderPromiseDateTime)
BETWEEN ? AND ?";
BETWEEN ? AND ?
{$extra_where}";
$query_count = $this->db_onedev->query($sql_count, array($startdate, $enddate));
$query_count = $this->db_onedev->query($sql_count, array_merge(array($startdate, $enddate), $extra_params));
$total_data = $query_count->row()->total;
// ================= DATA DENGAN LIMIT =================
$sql = "SELECT
$sql = "SELECT
tse.T_SendEmailT_OrderHeaderID as order_id,
tse.T_SendEmailT_OrderHeaderID as T_OrderHeaderID,
tse.T_SendEmailPatientName,
@@ -438,17 +463,17 @@ class Patient extends MY_Controller
DATE(tp_latest.T_OrderPromiseDateTime) AS order_promise_date,
toh.T_OrderHeaderLabNumber AS No_Reg,
mc.M_CompanyName AS Kel_Pelanggan,
(SELECT T_OrderDeliveryID
FROM t_orderdelivery
WHERE T_OrderDeliveryT_OrderHeaderID = tse.T_SendEmailT_OrderHeaderID
AND T_OrderDeliveryM_DeliveryTypeID = 3
AND T_OrderDeliveryIsActive = 'Y'
(SELECT T_OrderDeliveryID
FROM t_orderdelivery
WHERE T_OrderDeliveryT_OrderHeaderID = tse.T_SendEmailT_OrderHeaderID
AND T_OrderDeliveryM_DeliveryTypeID = 3
AND T_OrderDeliveryIsActive = 'Y'
LIMIT 1) as delivery_id
FROM t_send_email tse
JOIN t_orderheader toh
JOIN t_orderheader toh
ON tse.T_SendEmailT_OrderHeaderID = toh.T_OrderHeaderID
JOIN (
SELECT
SELECT
T_OrderPromiseT_OrderHeaderID,
MAX(T_OrderPromiseDateTime) AS T_OrderPromiseDateTime
FROM t_orderpromise
@@ -456,19 +481,19 @@ class Patient extends MY_Controller
GROUP BY T_OrderPromiseT_OrderHeaderID
) tp_latest
ON tp_latest.T_OrderPromiseT_OrderHeaderID = toh.T_OrderHeaderID
JOIN m_company mc
JOIN m_company mc
ON toh.T_OrderHeaderM_CompanyID = mc.M_CompanyID
WHERE tse.T_SendEmailIsActive = 'Y'
AND DATE(tp_latest.T_OrderPromiseDateTime)
BETWEEN ? AND ?
{$extra_where}
ORDER BY toh.T_OrderHeaderDate ASC
LIMIT ? OFFSET ?";
$query = $this->db_onedev->query($sql, array(
$startdate,
$enddate,
$limit,
$offset
$query = $this->db_onedev->query($sql, array_merge(
array($startdate, $enddate),
$extra_params,
array($limit, $offset)
));
if (!$query) {