From 9a3988072a05e7a2432b245b43a186878a90d766 Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Wed, 5 Feb 2025 12:44:23 +0530 Subject: [PATCH] FIX_LIST : RV --- app/Controllers/EmployeeController.php | 1 + app/Controllers/TicketController.php | 161 +++++++++++----------- app/Models/TicketMasterModel.php | 180 +++++++++++++++++++++++-- 3 files changed, 253 insertions(+), 89 deletions(-) diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 06bb8532..a613c87b 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -2225,6 +2225,7 @@ class EmployeeController extends AdminController } } + //UPDATE EMPLOYEE public function update_emp_data() { $data = $this->request->getPost(); diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 630313e1..800ce03d 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -141,52 +141,68 @@ class TicketController extends BaseController } public function ticketSearch($action = null) - { + { + $db = db_connect(); + + $subquery = $db->table('ticket_history th') + ->select([ + 'th.ticket_id', + "CASE + WHEN DATEDIFF( + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) + ) BETWEEN 0 AND 6 THEN '0-6 Days' + WHEN DATEDIFF( + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) + ) BETWEEN 7 AND 12 THEN '7-12 Days' + WHEN DATEDIFF( + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) + ) BETWEEN 13 AND 20 THEN '13-20 Days' + ELSE 'Above 20 Days' + END AS tat" + ]) + ->join('ticket_master tm', 'tm.id = th.ticket_id', 'right') + ->where('tm.is_active', 1) + ->groupBy('th.ticket_id, tm.created_at'); + //action 1 get last 100 rows, action 2 filter and get all rows related to that if ($action == 1) { - $data = $this->ticketMasterModel - ->select(" + $query = $db->table('ticket_master tm') + ->select([ + 'tm.id', + 'tcs.claim_status AS status', + 'tm.claim_number AS claim_no', + 'tm.tpa_id', + 'tm.emp_name', + 'i.name AS insurer_name', + 'c.client_name', + 'tm.insured_name', + 'c.short_name', + 'DATE_FORMAT(tm.created_at, "%d-%m-%Y") AS ticket_created_date', + 'COALESCE(tat_category.tat, "0-6 Days") AS tat' + ]) + ->join('insurers i', 'i.id = tm.insurer_id AND i.is_active = 1', 'left') + ->join('clients c', 'c.id = tm.client_id AND c.is_active = 1', 'left') + ->join('ticket_claim_status tcs', 'tcs.id = tm.claim_status_id AND tcs.is_active = 1', 'left') + ->join("({$subquery->getCompiledSelect()}) tat_category", 'tm.id = tat_category.ticket_id', 'left') + ->where('tm.is_active', 1) + ->orderBy('tm.id', 'DESC'); - ticket_master.id, - ticket_claim_status.claim_status as status, - ticket_master.claim_number as claim_no, - ticket_master.tpa_id, - ticket_master.emp_name, - insurers.name as insurer_name, - clients.client_name, - ticket_master.insured_name, - clients.short_name, - DATE_FORMAT(ticket_master.created_at, '%d-%m-%Y') as ticket_created_date, - CASE - WHEN DATEDIFF( - ticket_master.updated_at, - COALESCE(ticket_master.updated_at, ticket_history.created_at) - ) BETWEEN 0 AND 6 THEN '0-6 Days' - WHEN DATEDIFF( - ticket_master.updated_at, - COALESCE(ticket_master.updated_at, ticket_history.created_at) - ) BETWEEN 7 AND 12 THEN '7-12 Days' - WHEN DATEDIFF( - ticket_master.updated_at, - COALESCE(ticket_master.updated_at, ticket_history.created_at) - ) BETWEEN 13 AND 20 THEN '13-20 Days' - ELSE 'Above 20 Days' - END AS tat + $data = $query->get()->getResultArray(); - ") - ->join('insurers', 'insurers.id = ticket_master.insurer_id and insurers.is_active = 1', 'left') - ->join('clients', 'clients.id = ticket_master.client_id and clients.is_active = 1', 'left') - ->join('ticket_claim_status', 'ticket_claim_status.id = ticket_master.claim_status_id and ticket_claim_status.is_active = 1', 'left') - ->join('ticket_history', "ticket_master.id = ticket_history.ticket_id") - ->where('ticket_master.is_active', 1) - ->where('ticket_history.is_active', 1) - ->groupBy('ticket_master.id') - ->orderBy('ticket_master.id', 'DESC') - ->limit(100) - ->findAll(); - - // dd($data); + // dd(db_connect()->getLastQuery()); return $data; @@ -200,46 +216,33 @@ class TicketController extends BaseController } } // print_rr($where); - $data = $this->ticketMasterModel - ->select(" - ticket_master.id, - ticket_claim_status.claim_status as status, - ticket_master.claim_number as claim_no, - ticket_master.tpa_id, - ticket_master.emp_name, - insurers.name as insurer_name, - clients.client_name,ticket_master.insured_name, - clients.short_name, - DATE_FORMAT(ticket_master.created_at, '%d-%m-%Y') as ticket_created_date, - CASE - WHEN DATEDIFF( - ticket_master.updated_at, - COALESCE(ticket_master.updated_at, ticket_history.created_at) - ) BETWEEN 0 AND 6 THEN '0-6 Days' - WHEN DATEDIFF( - ticket_master.updated_at, - COALESCE(ticket_master.updated_at, ticket_history.created_at) - ) BETWEEN 7 AND 12 THEN '7-12 Days' - WHEN DATEDIFF( - ticket_master.updated_at, - COALESCE(ticket_master.updated_at, ticket_history.created_at) - ) BETWEEN 13 AND 20 THEN '13-20 Days' - ELSE 'Above 20 Days' - END AS tat - ") - ->join('insurers', 'insurers.id = ticket_master.insurer_id and insurers.is_active = 1', 'left') - ->join('clients', 'clients.id = ticket_master.client_id and clients.is_active = 1', 'left') - ->join('ticket_claim_status', 'ticket_claim_status.id = ticket_master.claim_status_id and ticket_claim_status.is_active = 1', 'left') - ->join('ticket_history', "ticket_master.id = ticket_history.ticket_id") - ->where('ticket_master.is_active', 1) - ->where('ticket_history.is_active', 1) + $query = $db->table('ticket_master tm') + ->select([ + 'tm.id', + 'tcs.claim_status AS status', + 'tm.claim_number AS claim_no', + 'tm.tpa_id', + 'tm.emp_name', + 'i.name AS insurer_name', + 'c.client_name', + 'tm.insured_name', + 'c.short_name', + 'DATE_FORMAT(tm.created_at, "%d-%m-%Y") AS ticket_created_date', + 'COALESCE(tat_category.tat, "0-6 Days") AS tat' + ]) + ->join('insurers i', 'i.id = tm.insurer_id AND i.is_active = 1', 'left') + ->join('clients c', 'c.id = tm.client_id AND c.is_active = 1', 'left') + ->join('ticket_claim_status tcs', 'tcs.id = tm.claim_status_id AND tcs.is_active = 1', 'left') + ->join("({$subquery->getCompiledSelect()}) tat_category", 'tm.id = tat_category.ticket_id', 'left') + ->where('tm.is_active', 1) ->where($where) - ->groupBy('ticket_master.id') - ->orderBy('ticket_master.id', 'DESC') - ->findAll(); - // print_rr($data); - // log_message('error',' Claims Master Data '.json_encode($data));die(); + ->orderBy('tm.id', 'DESC'); + + $data = $query->get()->getResultArray(); + // print_rr($data); + // log_message('error',' Claims Master Data '.json_encode($data));die(); // print_rr($data);die(); + return $data; } } diff --git a/app/Models/TicketMasterModel.php b/app/Models/TicketMasterModel.php index b22fbd1e..adce7dff 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -147,6 +147,155 @@ class TicketMasterModel extends Model } //get TAT report BAND wise Data + // public function getTATReport($ticket_type = null, $start_date = null, $end_date = null) + // { + // //set default last 3 months data date + // $fromDate = date('Y-m-d', strtotime('-90 days')); + // $toDate = date('Y-m-d 23:59:59'); + + // if (!empty($start_date) && !empty($end_date)) { + // $fromDate = change_date_format($start_date); + // $toDate = change_date_format($end_date); + // } + // $ticket_type_data_1 = ""; + // $ticket_type_data_2 = ""; + // if(!empty($ticket_type)){ + // $ticket_type_data_1 = "AND ticket_type = $ticket_type"; + // $ticket_type_data_2 = "AND tm.ticket_type_id = $ticket_type"; + // } + + // // Fetch claim statuses from the `ticket_claim_status` table + // $statusQuery = " SELECT + // id, claim_status, ticket_type + // FROM ticket_claim_status + // Where is_active = 1 + // $ticket_type_data_1 + // "; + // $statusResult = $this->db->query($statusQuery)->getResultArray(); + // // dd($statusResult); + + // // Initialize dynamic query parts + // $dynamicSelect = ''; + + // // Loop through each claim status and generate the COALESCE and CASE statements for the SELECT + // foreach ($statusResult as $status) { + + // $columnName = $status['claim_status']; // Default column name + + // if (empty($ticket_type)) { + // // Append the insurance type prefix based on `ticket_type` + // switch ($status['ticket_type']) { + // case 1: + // $columnName = "GMC - {$status['claim_status']}"; + // break; + // case 2: + // $columnName = "GPA - {$status['claim_status']}"; + // break; + // case 3: + // $columnName = "EDLI - {$status['claim_status']}"; + // break; + // case 4: + // $columnName = "GTLI - {$status['claim_status']}"; + // break; + // } + // } + + // $dynamicSelect .= " + // COALESCE( + // SUM( + // CASE + // WHEN subquery.status_id = {$status['id']} THEN 1 + // ELSE 0 + // END + // ), + // 0 + // ) AS `$columnName`, "; + // } + + // // Remove the trailing comma from the SELECT part + // $dynamicSelect = rtrim($dynamicSelect, ', '); + // // dd($dynamicSelect); + + + // // Construct the full SQL query + // $sql = " + // SELECT + // tc.TAT_Category, + // $dynamicSelect + // FROM + // ( + // SELECT 'Above 20 Days' AS TAT_Category + // UNION ALL + // SELECT '13-20 Days' + // UNION ALL + // SELECT '7-12 Days' + // UNION ALL + // SELECT '0-6 Days' + // ) AS tc + // LEFT JOIN ( + // SELECT + // tm.id AS ticket_id, + // tcs.claim_status, + // tcs.id AS status_id, + // CASE + // WHEN DATEDIFF( + // COALESCE(th.created_at, tm.created_at), + // COALESCE( + // (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = tm.id), + // tm.created_at + // ) + // ) BETWEEN 0 AND 6 THEN '0-6 Days' + // WHEN DATEDIFF( + // COALESCE(th.created_at, tm.created_at), + // COALESCE( + // (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = tm.id), + // tm.created_at + // ) + // ) BETWEEN 7 AND 12 THEN '7-12 Days' + // WHEN DATEDIFF( + // COALESCE(th.created_at, tm.created_at), + // COALESCE( + // (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = tm.id), + // tm.created_at + // ) + // ) BETWEEN 13 AND 20 THEN '13-20 Days' + // ELSE 'Above 20 Days' + // END AS TAT_Category + // FROM + // ticket_master tm + // JOIN ticket_history th ON tm.id = th.ticket_id + // JOIN ticket_claim_status tcs ON th.field_name = 'claim_status_id' + // AND th.new_value = tcs.id + // WHERE + // tm.ticket_type_id = tcs.id + // $ticket_type_data_2 + // AND tm.created_at >= '$fromDate' + // AND tm.created_at <= '$toDate' + // AND tm.is_active = 1 + // AND th.is_active = 1 + // AND tcs.is_active = 1 + // ) AS subquery ON tc.TAT_Category = subquery.TAT_Category + // GROUP BY + // tc.TAT_Category + // ORDER BY + // FIELD(tc.TAT_Category, 'Above 20 Days', '13-20 Days', '7-12 Days', '0-6 Days'); + // "; + + // // Execute the query and return the result + // $data = $this->db->query($sql)->getResultArray(); + // // print_rr($this->db->getLastQuery(), $data); die; + + // // $tableData = []; + // // if (!empty($data)) { + // // // Extract table headers from the first row keys + // // $headers = array_keys($data[0]); + // // $tableData['headers'] = $headers; + // // $tableData['body'] = $data; + // // } + + // return $data; + // } + public function getTATReport($ticket_type = null, $start_date = null, $end_date = null) { //set default last 3 months data date @@ -161,7 +310,7 @@ class TicketMasterModel extends Model $ticket_type_data_2 = ""; if(!empty($ticket_type)){ $ticket_type_data_1 = "AND ticket_type = $ticket_type"; - $ticket_type_data_2 = "AND tm.ticket_type_id = $ticket_type"; + $ticket_type_data_2 = "WHERE tm.ticket_type_id = $ticket_type"; } // Fetch claim statuses from the `ticket_claim_status` table @@ -233,36 +382,47 @@ class TicketMasterModel extends Model SELECT '0-6 Days' ) AS tc LEFT JOIN ( + SELECT th.ticket_id, tcs.claim_status, tcs.id AS status_id, CASE WHEN DATEDIFF( - tm.updated_at, - COALESCE(tm.updated_at, th.created_at) + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) ) BETWEEN 0 AND 6 THEN '0-6 Days' WHEN DATEDIFF( - tm.updated_at, - COALESCE(tm.updated_at, th.created_at) + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) ) BETWEEN 7 AND 12 THEN '7-12 Days' WHEN DATEDIFF( - tm.updated_at, - COALESCE(tm.updated_at, th.created_at) + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) ) BETWEEN 13 AND 20 THEN '13-20 Days' ELSE 'Above 20 Days' END AS TAT_Category + FROM ticket_master tm JOIN ticket_history th ON tm.id = th.ticket_id - JOIN ticket_claim_status tcs ON th.field_name = 'claim_status_id' - AND th.new_value = tcs.id + JOIN ticket_claim_status tcs ON th.field_name = 'claim_status_id' AND th.new_value = tcs.id $ticket_type_data_2 AND tm.created_at >= '$fromDate' AND tm.created_at <= '$toDate' AND tm.is_active = 1 AND th.is_active = 1 AND tcs.is_active = 1 + ) AS subquery ON tc.TAT_Category = subquery.TAT_Category GROUP BY tc.TAT_Category @@ -278,7 +438,7 @@ class TicketMasterModel extends Model // Execute the query and return the result $data = $this->db->query($sql)->getResultArray(); - // dd($this->db->getLastQuery(), $data); + // print_rr($this->db->getLastQuery(), $data); die; // $tableData = []; // if (!empty($data)) {