diff --git a/app/Config/Routes.php b/app/Config/Routes.php index d2802469..a6e3eb12 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -72,6 +72,7 @@ $routes->group("/dashboard", ["filter" => "authMVC"], function ($routes) { $routes->get('get-notification', 'DashboardController::getDashboardNotifications'); $routes->get('acknowledge-notification/(:segment)', 'DashboardController::acknowledgeMessage/$1'); $routes->get('get-pending-action', 'PendingActionsController::getPendingActions'); + $routes->post("prepareClaimSearchData","DashboardController::prepareClaimSearchData"); }); $routes->group("/client", ["filter" => "authMVC"], function ($routes) { diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index f4eb8d34..78d1b86e 100755 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -21,6 +21,10 @@ use App\Models\NotificationModel; use App\Models\EmployeePolicyModel; use App\Controllers\PendingActionsContrller; use App\Controllers\EmpDataServiceController; +use App\Models\TicketMasterModel; +use App\Models\LeadsModel; +use App\Models\TicketClaimStatusModel; + class DashboardController extends AdminController { @@ -33,8 +37,12 @@ class DashboardController extends AdminController protected $notificationModel; protected $employeePolicyModel; protected $policyTransactionModel; + protected $leadModel; + protected $ticketModel; + protected $ticketStatusModel; protected $policyStatus; protected $colorShades; + protected $claimDashLimit; protected $myLogger; @@ -48,9 +56,76 @@ class DashboardController extends AdminController $this->employeePolicyModel = new EmployeePolicyModel(); $this->clientModel = new ClientModel(); $this->policyTransactionModel = new PolicyTransactionModel(); + $this->ticketModel = new TicketMasterModel(); + $this->leadModel = new LeadsModel(); + $this->ticketStatusModel = new TicketClaimStatusModel(); $this->myLogger = \Config\Services::mylogger(); + $this->claimDashLimit = [ + 1 => [ + 'non_id' => 3, + 'id_not_generated' => 3, + 'cda' => 3, + 'information_required' => 3, + 'under_process' => 3, + 'rejected' => 3, + 'approved' => 3, + 'payment_initiated' => 3, + 'settled' => 3, + 'closed' => 3, + 'cancelled' => 3, + 'returned' => 3 + ], + + 2 => [ + 'claim_intimation' => 3, + 'intimation_to_insurer' => 3, + 'client_pending' => 3, + 'insurer_pending' => 3, + 'investigation' => 3, + 'approved' => 3, + 'closed' => 3, + 'not_covered' => 3, + 'settled' => 3, + 'coverage_check' => 3, + 'cancelled' => 3, + 'returned' => 3, + 'rejected' => 3, + 'dv_sent_to_insured' => 3 + ], + 3 => [ + 'claim_intimation' => 3, + 'intimation_to_insurer' => 3, + 'client_pending' => 3, + 'insurer_pending' => 3, + 'investigation' => 3, + 'approved' => 3, + 'closed' => 3, + 'not_covered' => 3, + 'settled' => 3, + 'coverage_check' => 3, + 'cancelled' => 3, + 'returned' => 3, + 'rejected' => 3 + ], + 4 => [ + 'claim_intimation' => 3, + 'intimation_to_insurer' => 3, + 'client_pending' => 3, + 'insurer_pending' => 3, + 'investigation' => 3, + 'approved' => 3, + 'closed' => 3, + 'not_covered' => 3, + 'settled' => 3, + 'coverage_check' => 3, + 'cancelled' => 3, + 'returned' => 3, + 'rejected' => 3 + ] + ]; + $this->policyStatus = [ 'under_process' => 'Under Process', 'client_pending' => 'Client Pending', @@ -92,7 +167,6 @@ class DashboardController extends AdminController 'linear-gradient(45deg, #494f4f, #353d3d)' // SilverChalice shade 6 ] ]; - } public function dashboard() @@ -100,8 +174,8 @@ class DashboardController extends AdminController $data = []; - if (in_array(get_role_id(), [1,2,3,5]) || (in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(BUSINESS_TEAM_ID, user_team()))) { - + if (in_array(get_role_id(), [1, 2, 3, 5]) || (in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(BUSINESS_TEAM_ID, user_team()))) { + $db = db_connect(); $sql = "SELECT clients.id AS client_id, @@ -169,17 +243,65 @@ class DashboardController extends AdminController $data['financeTeamStatusData'] = $financeTeamStatusData; $data['policyStatus'] = $this->policyStatus; $data['colorShades'] = $this->colorShades; - // print_r($data);die; - } + $data['claim_data'] = $this->getClaimData(); + $data['lead_data'] = $this->getLeadData(); + $data['page_name'] = 'Dashboard'; echo view('layout/header', $data); echo view('DashBoard', $data); echo view('layout/footer'); } - + + public function getLeadData(){ + + } + + public function getClaimData() + { + + $results = $this->ticketStatusModel + ->select("ticket_type as ticket_type_id, claim_status") + ->where("is_active", 1) + ->findAll(); + + $claim_status = []; + + foreach ($results as $row) { + if (empty($row['ticket_type_id']) || empty($row['claim_status'])) { + continue; // Skip if either value is empty + } + $typeId = $row['ticket_type_id']; + $status = $row['claim_status']; + + // Initialize if not set + if (!isset($claim_status[$typeId])) { + $claim_status[$typeId] = []; + } + + // Use associative array keys to mimic a set + $claim_status[$typeId][$status] = true; + } + + // Convert set-like structure to plain array + foreach ($claim_status as $typeId => $statuses) { + $claim_status[$typeId] = array_keys($statuses); + } + $data = $this->ticketModel->getDashData($claim_status, $this->claimDashLimit); + + // dd($data); + // foreach ($data as $dat){ + // foreach ($dat as $key => $value){ + // echo($key . " => ". $value); + // } + // } + // die(); + return $data; + + } + public function getDashboardNotifications() { @@ -212,29 +334,29 @@ class DashboardController extends AdminController { $clientPolicyModel = new ClientPolicyModel(); $myLogger = \Config\Services::mylogger(); - + $client_policy_data = $clientPolicyModel->getPolicyDetailsForEnrollment(); $myLogger->logme('error', 'Fetched client policy data for Enrollment Status update'); - + // dd($client_policy_data); $currentDate = date('d-m-Y'); $openEnrollment = []; $closeEnrollment = []; - + // Update policy status based on start and end dates foreach ($client_policy_data as $client_policy) { $id = $client_policy['id']; $openDate = date('d-m-Y', strtotime($client_policy['open_date'])); $closeDate = date('d-m-Y', strtotime($client_policy['close_date'])); - + if ($currentDate == $openDate) { $clientPolicyModel->update($id, ['open_for_enrollment' => 1]); $openEnrollment[] = $id; $myLogger->logme('error', 'Updated policy ID ' . $id . ' to open for enrollment.'); } - + if ($closeDate < $currentDate) { $clientPolicyModel->update($id, ['open_for_enrollment' => 0]); $closeEnrollment[] = $id; @@ -243,37 +365,36 @@ class DashboardController extends AdminController } $myLogger->logme('error', 'enrollment_status function completed'); - $myLogger->logme('error', 'updated Open Enrollment Policy count : "'.count($openEnrollment).'" and Close Enrollment Policy count : "'.count($closeEnrollment).'"'); + $myLogger->logme('error', 'updated Open Enrollment Policy count : "' . count($openEnrollment) . '" and Close Enrollment Policy count : "' . count($closeEnrollment) . '"'); return $this->respond([ - 'status' => true, - 'message' => 'updated Open and Close Enrollment successfully', - 'open_policy_count' => count($openEnrollment), + 'status' => true, + 'message' => 'updated Open and Close Enrollment successfully', + 'open_policy_count' => count($openEnrollment), 'close_policy_count' => count($closeEnrollment), - 'open_policy_ids' => $openEnrollment, + 'open_policy_ids' => $openEnrollment, 'close_policy_ids' => $closeEnrollment, ]); - } - + public function sendCroneRemainderMail() { $clientPolicyModel = new ClientPolicyModel(); $myLogger = \Config\Services::mylogger(); - - + + $client_policy_data = $clientPolicyModel->getPolicyDetailsForRemainder(); $myLogger->logme('error', 'Fetched client policy data'); // dd($client_policy_data); - + // Mail send function $result = $this->sendRemainderMail($client_policy_data, 'crone'); $myLogger->logme('error', 'sendCroneRemainderMail function completed'); - - if($result){ + + if ($result) { return json_encode(['status' => true, 'message' => 'Mail send successfully']); - }else{ + } else { return json_encode(['status' => false, 'message' => 'There is no data to send']); } } @@ -285,29 +406,22 @@ class DashboardController extends AdminController $data = []; - if($type == 'insurer'){ + if ($type == 'insurer') { $data = $pendingActionsData['uhid']; - - }else if($type == 'TPA'){ + } else if ($type == 'TPA') { $data = $pendingActionsData['tpa']; - - }else if($type == 'I'){ + } else if ($type == 'I') { $data = $pendingActionsData['inception']; - - }else if($type == 'D'){ + } else if ($type == 'D') { $data = $pendingActionsData['deletion']; - - }else if($type == 'C'){ + } else if ($type == 'C') { $data = $pendingActionsData['correction']; - - }else if($type == 'SI'){ + } else if ($type == 'SI') { $data = $pendingActionsData['si_enhancement']; - - }else if($type == 'policy'){ + } else if ($type == 'policy') { $data = $pendingActionsData['policy']; - - }else if($type == 'ticket'){ + } else if ($type == 'ticket') { $data = $pendingActionsData['uhid']; } @@ -421,7 +535,6 @@ class DashboardController extends AdminController $reminder_whole_mail[] = $mail_result; } } - } else { // crone if (!empty($client_policy['reminder_date'])) { @@ -511,15 +624,12 @@ class DashboardController extends AdminController // $this->myLogger->logme('error', 'Mail sent result: ' . json_encode($mail_result)); $reminder_whole_mail[] = $mail_result; } - } } - } else { $this->myLogger->logme('error', "SEND REMAINDER CRONE --- Remainder date is empty()"); } } - } else { $this->myLogger->logme('error', 'Notification setup not found or not enabled'); @@ -549,29 +659,28 @@ class DashboardController extends AdminController public function sendManualReminder($client_id, $client_branch_id, $client_policy_id = null) { - $this->myLogger->logme('error','Log Works'); + $this->myLogger->logme('error', 'Log Works'); $this->myLogger->logme('error', "sendManualRemainder called with client_id: {$client_id}, client_branch_id: {$client_branch_id}"); - + $client_policy_data = $this->clientPolicyModel->getPolicyDetailsForRemainder($client_id, $client_branch_id, $client_policy_id); // print_r($client_policy_data); die; // print_r($this->clientPolicyModel->getLastQuery()); die; // $this->myLogger->logme('error', "Policy details fetched: " . json_encode($client_policy_data)); - + if ($client_policy_data) { $result = $this->sendRemainderMail($client_policy_data); - log_message('error',json_encode($result)); - $this->myLogger->logme('error',$result); + log_message('error', json_encode($result)); + $this->myLogger->logme('error', $result); $this->myLogger->logme('error', "Manual Remainder Mail sending result: " . ($result ? 'success' : 'failure')); - + if ($result) { $this->myLogger->logme('error', 'Manual Remainder Mail sent successfully'); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Mail sent successfully'], 200); } else { $this->myLogger->logme('error', 'Failed to send manual remainder mail, no data to send'); - return $this->respond(['status' => false, 'code' => 200, 'message' => 'There is no data to send','message2' => 'Failed' ], 200); + return $this->respond(['status' => false, 'code' => 200, 'message' => 'There is no data to send', 'message2' => 'Failed'], 200); } - } else { $this->myLogger->logme('error', 'No policy data found to send'); return $this->respond(['status' => false, 'code' => 200, 'message' => 'There is no data to send', 'message2' => 'No policy data found to send'], 200); @@ -581,19 +690,17 @@ class DashboardController extends AdminController public function sendManualEcard($client_id, $client_branch_id, $policy_id) { $this->myLogger->logme('error', "sendManualEcard called with client_id: {$client_id}, client_branch_id: {$client_branch_id}, policy id : {$policy_id}"); - - $notification = $this->notificationModel->where('client_id', $client_id)->where('template_name', 'member_ecard_mail')->first(); - // print_r(($notification)); die; - if($notification && $notification['enabled'] == 0 && $notification['mail_content'] == '') - { - return $this->respond(['status' => false, 'code' => 400, 'message' => 'No template found','message2' => 'Failed' ], 200); - } - + + $notification = $this->notificationModel->where('client_id', $client_id)->where('template_name', 'member_ecard_mail')->first(); + // print_r(($notification)); die; + if ($notification && $notification['enabled'] == 0 && $notification['mail_content'] == '') { + return $this->respond(['status' => false, 'code' => 400, 'message' => 'No template found', 'message2' => 'Failed'], 200); + } + $emp_data = $this->employeePolicyModel->getEmployeePolicyForEcard($policy_id); - if(count($emp_data) == 0) - { - return $this->respond(['status' => false, 'code' => 400, 'message' => 'No employees found','message2' => 'Failed' ], 200); + if (count($emp_data) == 0) { + return $this->respond(['status' => false, 'code' => 400, 'message' => 'No employees found', 'message2' => 'Failed'], 200); } $ids = array_column($emp_data, 'id'); // print_r(($ids)); die; @@ -603,9 +710,8 @@ class DashboardController extends AdminController // $empEmpDataServiceController = new EmpDataServiceController(); // $empEmpDataServiceController->sendMailForDownloadingECard($ids); - + return $this->respond(['status' => true, 'code' => 200, 'message' => 'Mail Queued'], 200); - } public function data_construct_for_bds($data) @@ -622,7 +728,7 @@ class DashboardController extends AdminController 'instalment_pending' => [], 'completed' => [], ]; - + // Loop through results and group them by their status foreach ($data as $row) { switch ($row['status']) { @@ -655,8 +761,25 @@ class DashboardController extends AdminController break; } } - + return $groupedData; } + public function prepareClaimSearchData(){ + + $received_data = $this->request->getPost(); + $ticketTypeId = $received_data['ticketTypeId']; + $status = $received_data['status']; + + $status = strtoupper($status); + $status = str_replace('_', ' ', $status); + + $data = $this->ticketModel + ->select("tcs.id as claim_status_id") + ->join("ticket_claim_status tcs", "tcs.ticket_type = " . (int)$ticketTypeId) + ->where("tcs.claim_status", $status) + ->first(); + $data['ticket_type_id'] = $ticketTypeId; + return $this->respond(['status' => "success","data" => $data],200); + } } diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 4b42394a..b9d62ff5 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -182,8 +182,18 @@ class TicketController extends BaseController } else { $data['ticket_data'] = $this->ticketSearch(); - $html = view('ticket_list', $data); - return $this->respond(['status' => true, 'html' => $html], 200); + $isFromDashboard = $this->request->getPost("is_dashboard"); + + if (isset($isFromDashboard) && !empty($isFromDashboard) && $isFromDashboard == 1) { + $data['page_name'] = "Claims"; + $data['claim_status'] = $this->claimStatus->select('id,ticket_type,claim_status')->where('is_active', 1)->findAll(); + $data['client_list'] = $this->clientModel->select('id,client_name')->where('is_active', 1)->findAll(); + return $this->loadLayout('ticket_search', $data); + }else{ + $html = view('ticket_list', $data); + return $this->respond(['status' => true, 'html' => $html], 200); + } + } } @@ -260,10 +270,10 @@ class TicketController extends BaseController } else { $search_data = $this->request->getPost(); - // print_r($search_data); + // print_r($search_data); die() $where = []; foreach ($search_data as $search_objects => $key) { - if ($key != null && $key != '' && $key != 0) { + if ($key != null && $key != '' && $key != 0 && $search_objects != 'is_dashboard') { $where[$search_objects] = $key; } } diff --git a/app/Models/PolicyTransactionModel.php b/app/Models/PolicyTransactionModel.php index b43669b2..b5d42e54 100644 --- a/app/Models/PolicyTransactionModel.php +++ b/app/Models/PolicyTransactionModel.php @@ -1361,7 +1361,10 @@ class PolicyTransactionModel extends Model $builder->orderBy('policy_transaction.id', 'desc'); - return $builder->get()->getResultArray(); + $returnData = $builder->get()->getResultArray(); + + + return $returnData; } public function getFinanceReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) diff --git a/app/Models/TicketMasterModel.php b/app/Models/TicketMasterModel.php index 1612c08e..4bd247dc 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -75,10 +75,10 @@ class TicketMasterModel extends Model 'pay_initiate_date', 'emp_personal_mail', 'client_policy_id' - - ]; - - + + ]; + + // Callbacks protected $allowCallbacks = true; protected $beforeInsert = ["checkAndADDCreatedByValue"]; @@ -93,7 +93,7 @@ class TicketMasterModel extends Model protected function checkAndADDCreatedByValue(array $data) { // Check if 'updated_by' value is null or empty - if (empty($data['data']['created_by'])) { + if (empty($data['data']['created_by'])) { // Set 'updated_by' value to the current session user ID $data['data']['created_by'] = get_session_userid(); } @@ -104,7 +104,7 @@ class TicketMasterModel extends Model protected function checkAndUpdateUpdatedByValue(array $data) { // Check if 'updated_by' value is null or empty - if (empty($data['data']['updated_by'])) { + if (empty($data['data']['updated_by'])) { // Set 'updated_by' value to the current session user ID $data['data']['updated_by'] = get_session_userid(); } @@ -130,21 +130,21 @@ class TicketMasterModel extends Model public function getTemplateDataByTicketID($ticket_id) { $template_data = $this - ->select("ticket_mail_template.*, CASE + ->select("ticket_mail_template.*, CASE WHEN employees.email_corporate IS NULL OR employees.email_corporate = '' THEN ticket_master.emp_mail ELSE employees.email_corporate END as emp_mail, ,ticket_master.claim_status_id") - ->join('ticket_claim_status', 'ticket_master.claim_status_id = ticket_claim_status.id and ticket_claim_status.is_active = 1') - ->join('ticket_mail_template', ' + ->join('ticket_claim_status', 'ticket_master.claim_status_id = ticket_claim_status.id and ticket_claim_status.is_active = 1') + ->join('ticket_mail_template', ' ticket_claim_status.trigger_type = ticket_mail_template.trigger_type and ticket_claim_status.ticket_type = ticket_mail_template.ticket_type and ticket_mail_template.is_active = 1') - ->join('employees','employees.id = ticket_master.emp_id','left') - ->where('ticket_master.id', $ticket_id) - ->where('ticket_master.is_active', 1) - ->where('ticket_claim_status.is_active', 1) - ->first(); + ->join('employees', 'employees.id = ticket_master.emp_id', 'left') + ->where('ticket_master.id', $ticket_id) + ->where('ticket_master.is_active', 1) + ->where('ticket_claim_status.is_active', 1) + ->first(); return $template_data; } @@ -173,16 +173,16 @@ class TicketMasterModel extends Model ->join('clients', 'ticket_master.client_id = clients.id', 'left') ->join('insurers', 'ticket_master.insurer_id = insurers.id', 'left') ->join('tpa', 'ticket_master.tpa_id = tpa.id', 'left') - ->join('ticket_notes', 'ticket_master.id = ticket_notes.ticket_id and ticket_notes.is_active = 1 and ticket_notes.is_auto_query = 1','left') + ->join('ticket_notes', 'ticket_master.id = ticket_notes.ticket_id and ticket_notes.is_active = 1 and ticket_notes.is_auto_query = 1', 'left') ->join('user_profiles', 'ticket_master.acm_id = user_profiles.id', 'left') - ->join('employees','employees.id = ticket_master.emp_id','left') + ->join('employees', 'employees.id = ticket_master.emp_id', 'left') ->where('ticket_master.id', $ticket_id) ->where('ticket_master.is_active', 1) ->first(); return $ticket_data; } - + //get TAT report BAND wise Data // public function getTATReport($ticket_type = null, $start_date = null, $end_date = null) // { @@ -210,7 +210,7 @@ class TicketMasterModel extends Model // "; // $statusResult = $this->db->query($statusQuery)->getResultArray(); // // dd($statusResult); - + // // Initialize dynamic query parts // $dynamicSelect = ''; @@ -248,12 +248,12 @@ class TicketMasterModel extends Model // 0 // ) AS `$columnName`, "; // } - + // // Remove the trailing comma from the SELECT part // $dynamicSelect = rtrim($dynamicSelect, ', '); // // dd($dynamicSelect); - + // // Construct the full SQL query // $sql = " // SELECT @@ -317,7 +317,7 @@ class TicketMasterModel extends Model // 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; @@ -329,12 +329,12 @@ class TicketMasterModel extends Model // // $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 $fromDate = date('Y-m-d', strtotime('-90 days')); $toDate = date('Y-m-d 23:59:59'); @@ -345,9 +345,9 @@ class TicketMasterModel extends Model } $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 = "WHERE tm.ticket_type_id = $ticket_type"; + if (!empty($ticket_type)) { + $ticket_type_data_1 = "AND ticket_type = $ticket_type"; + $ticket_type_data_2 = "WHERE tm.ticket_type_id = $ticket_type"; } // Fetch claim statuses from the `ticket_claim_status` table @@ -359,7 +359,7 @@ class TicketMasterModel extends Model "; $statusResult = $this->db->query($statusQuery)->getResultArray(); // dd($statusResult); - + // Initialize dynamic query parts $dynamicSelect = ''; @@ -397,12 +397,12 @@ class TicketMasterModel extends Model 0 ) AS `$columnName`, "; } - + // Remove the trailing comma from the SELECT part $dynamicSelect = rtrim($dynamicSelect, ', '); // dd($dynamicSelect); - + // Construct the full SQL query $sql = " SELECT @@ -472,7 +472,7 @@ class TicketMasterModel extends Model '0-6 Days' ); "; - + // Execute the query and return the result $data = $this->db->query($sql)->getResultArray(); // print_rr($this->db->getLastQuery(), $data); die; @@ -484,12 +484,13 @@ class TicketMasterModel extends Model // $tableData['headers'] = $headers; // $tableData['body'] = $data; // } - + return $data; } - public function tpaWiseReport($policy_type = null ,$start_date = null, $end_date = null){ - $ticket_type_data_1 = ""; + public function tpaWiseReport($policy_type = null, $start_date = null, $end_date = null) + { + $ticket_type_data_1 = ""; $ticket_type_data_2 = ""; if (!empty($policy_type)) { @@ -511,8 +512,17 @@ class TicketMasterModel extends Model $dynamicSelect .= " COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) AS `{$status['claim_status']}`, "; - if (in_array($status['claim_status'], ['ID NOT GENERATED', 'NON ID', 'CDA', 'INFORMATION REQUIRED','UNDER PROCESS - CLAIM NO. UPDATION', - 'UNDER PROCESS - INVESTIGATION STATUS','UNDER PROCESS - QUERY DOCUMENT RECEIVED','APPROVED','PAYMENT INITIATED'])) { + if (in_array($status['claim_status'], [ + 'ID NOT GENERATED', + 'NON ID', + 'CDA', + 'INFORMATION REQUIRED', + 'UNDER PROCESS - CLAIM NO. UPDATION', + 'UNDER PROCESS - INVESTIGATION STATUS', + 'UNDER PROCESS - QUERY DOCUMENT RECEIVED', + 'APPROVED', + 'PAYMENT INITIATED' + ])) { $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; } // Include in total count @@ -553,47 +563,47 @@ class TicketMasterModel extends Model // print_rr($result);die(); return $result; - } - public function accountManagerWiseReport($policy_type = null ,$start_date = null, $end_date = null){ + public function accountManagerWiseReport($policy_type = null, $start_date = null, $end_date = null) + { if ($policy_type == 1) { $ticket_type_data_1 = ""; - $ticket_type_data_2 = ""; + $ticket_type_data_2 = ""; - if (!empty($policy_type)) { - $ticket_type_data_1 = "AND ticket_type = $policy_type"; - $ticket_type_data_2 = "AND master.ticket_type_id = $policy_type"; - } + if (!empty($policy_type)) { + $ticket_type_data_1 = "AND ticket_type = $policy_type"; + $ticket_type_data_2 = "AND master.ticket_type_id = $policy_type"; + } - // Fetch claim statuses dynamically - $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; - $statusResult = $this->db->query($statusQuery)->getResultArray(); + // Fetch claim statuses dynamically + $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; + $statusResult = $this->db->query($statusQuery)->getResultArray(); - // Initialize dynamic query parts - $dynamicSelect = ''; - $dynamicTotal = ''; + // Initialize dynamic query parts + $dynamicSelect = ''; + $dynamicTotal = ''; - // Loop through each claim status and generate the CASE statements - foreach ($statusResult as $status) { - $dynamicSelect .= " + // Loop through each claim status and generate the CASE statements + foreach ($statusResult as $status) { + $dynamicSelect .= " COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) AS `{$status['claim_status']}`, "; - // Include in total count - $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; + // Include in total count + $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; - // Include only closed-related statuses in total2 count + // Include only closed-related statuses in total2 count - } + } - // Remove the trailing commas and `+` signs - $dynamicSelect = rtrim($dynamicSelect, ', '); - $dynamicTotal = rtrim($dynamicTotal, ' +'); - // print_rr($dynamicSelect); - // Construct the final SQL query - $sql = " + // Remove the trailing commas and `+` signs + $dynamicSelect = rtrim($dynamicSelect, ', '); + $dynamicTotal = rtrim($dynamicTotal, ' +'); + // print_rr($dynamicSelect); + // Construct the final SQL query + $sql = " SELECT user_profiles.first_name AS ACM_NAME, $dynamicSelect, @@ -614,44 +624,49 @@ class TicketMasterModel extends Model // dd($result); return $result; - - - }else{ + } else { $ticket_type_data_1 = ""; $ticket_type_data_2 = ""; - + if (!empty($policy_type)) { $ticket_type_data_1 = "AND ticket_type = $policy_type"; $ticket_type_data_2 = "AND master.ticket_type_id = $policy_type"; } - + // Fetch claim statuses dynamically $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; $statusResult = $this->db->query($statusQuery)->getResultArray(); - + // Initialize dynamic query parts $dynamicSelect = ''; $dynamicTotal = ''; $dynamicClosedTotal = ''; - + // Loop through each claim status and generate the CASE statements foreach ($statusResult as $status) { $dynamicSelect .= " COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) AS `{$status['claim_status']}`, "; - - if (in_array($status['claim_status'], ['CLAIM INTIMATION', 'INTIMATION TO INSURER', 'CLIENT PENDING', 'INSURER PENDING','INVESTIGATION', - 'APPROVED','ON HOLD'])) { + + if (in_array($status['claim_status'], [ + 'CLAIM INTIMATION', + 'INTIMATION TO INSURER', + 'CLIENT PENDING', + 'INSURER PENDING', + 'INVESTIGATION', + 'APPROVED', + 'ON HOLD' + ])) { $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; } // Include in total count // $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; - + // Include only closed-related statuses in total2 count if (in_array($status['claim_status'], ['CLOSED', 'SETTLED', 'NOT COVERED'])) { $dynamicClosedTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; } } - + // Remove the trailing commas and `+` signs $dynamicSelect = rtrim($dynamicSelect, ', '); $dynamicTotal = rtrim($dynamicTotal, ' +'); @@ -675,10 +690,10 @@ class TicketMasterModel extends Model GROUP BY user_profiles.id; "; - + // Execute the query $result = $this->db->query($sql)->getResultArray(); - + // print_rr($result);die(); return $result; } @@ -705,6 +720,82 @@ class TicketMasterModel extends Model // dd($data, db_connect()->getLastQuery()); return $data; } - - + + public function getDashData($claim_statuses, $limit) + { + $finalResults = []; + + foreach ($claim_statuses as $typeId => $statuses) { + $builder = $this->db->table('ticket_master tm'); + + // Start with ticket_type_id in SELECT + $selects = ['tm.ticket_type_id']; + + // Dynamically build status counts with COALESCE to handle missing values + foreach ($statuses as $status) { + $alias = strtolower($status); + $alias = str_replace(' ', '_', $alias); + $selects[] = "COALESCE(SUM(CASE WHEN tcs.claim_status = " . $this->db->escape($status) . " AND tm.ticket_type_id = {$typeId} THEN 1 ELSE 0 END), 0) AS `{$alias}`"; + } + + $builder->select(implode(',', $selects)); + $builder->join('ticket_claim_status tcs', 'tm.claim_status_id = tcs.id', 'left'); + + // Subquery for latest status change, with LEFT JOIN to avoid missing ticket_type_id + $builder->join( + '(SELECT ticket_id, MAX(created_at) AS last_claim_status_change + FROM ticket_history + WHERE field_name = \'claim_status_id\' + GROUP BY ticket_id) th', + 'tm.id = th.ticket_id', + 'left' + ); + + // Set the date limit based on the status + foreach ($statuses as $status) { + $dateLimit = $limit[$typeId][$status] ?? 3; + $dateThreshold = date('Y-m-d H:i:s', strtotime("-{$dateLimit} days")); + + $builder->groupStart() + ->where('th.last_claim_status_change <=', $dateThreshold) + ->orWhere('th.last_claim_status_change IS NULL') + ->groupEnd(); + } + + + $builder->where('tm.ticket_type_id', $typeId); + $builder->where('tm.is_active', 1); + $builder->where('tm.claim_status_id is not null'); + + $builder->groupBy('tm.ticket_type_id'); + + $query = $builder->get(); + $result = $query->getRowArray(); + + // Add Total count + $total = 0; + foreach ($result as $key => $res) { + // Ensure that ticket_type_id is excluded from the sum + if ($key !== 'ticket_type_id') { + $total += $res; + } + } + $result['total'] = $total; + + // If no result, initialize an empty result for the ticket_type_id + if (!$result) { + $result = ['ticket_type_id' => $typeId, 'total' => 0]; + foreach ($statuses as $status) { + $alias = strtolower($status); + $alias = str_replace(' ', '_', $alias); + $result[$alias] = 0; + } + } + + // Add the result to the final array + $finalResults[$typeId] = $result; + } + + return $finalResults; + } } diff --git a/app/Views/DashBoard.php b/app/Views/DashBoard.php index 3102ab15..55b75fc5 100755 --- a/app/Views/DashBoard.php +++ b/app/Views/DashBoard.php @@ -218,8 +218,27 @@ +
+
+
+
+
+
+
+
+
+
+
+
+