From 2d6c2b9fa26142eea36c57de67139c58878c56c1 Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Sun, 24 May 2026 22:36:26 +0700 Subject: [PATCH] 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 --- .../mockup/fo/resultemailv7/Patient.php | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/application/controllers/mockup/fo/resultemailv7/Patient.php b/application/controllers/mockup/fo/resultemailv7/Patient.php index a43b7136..32e34c3f 100644 --- a/application/controllers/mockup/fo/resultemailv7/Patient.php +++ b/application/controllers/mockup/fo/resultemailv7/Patient.php @@ -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) {