diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 3e79d7a7..440895a8 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -273,11 +273,13 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->get("get_client_details/(:any)", "ClientController::getClientDetails/$1"); $routes->get("featch_dashboard_data/(:any)", "DashboardController::featch_dashboard_data/$1"); $routes->get("remove_rack_rate/(:any)", "ClientController::removeRackRate/$1"); + $routes->get("get_client_policy_list_for_remainder/(:any)", "EmployeeController::get_client_policy_list_for_remainder/$1"); + $routes->get("send_manual_remainder/(:any)", "DashboardController::sendManualRemainder/$1"); }); $routes->cli('cli/processjob', 'JobWorker::processJob'); $routes->cli('cli/processjobs', 'JobWorker::processJobs'); -$routes->cli('cli/enrollment_status', 'DashboardController::enrollment_status'); +$routes->cli('cli/updatePolicyEnrollmentStatus', 'DashboardController::updatePolicyEnrollmentStatus'); $routes->get("processjob", "JobWorker::processJob"); diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index 79a90517..fe61b51f 100644 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -27,6 +27,10 @@ class DashboardController extends AdminController protected $messageModel; protected $clientModel; protected $userMessageModel; + protected $clientPolicyModel; + protected $notificationModel; + protected $employeePolicyModel; + protected $myLogger; public function __construct() @@ -34,32 +38,37 @@ class DashboardController extends AdminController set_session_context('Dashboard'); $this->messageModel = new MessageModel(); $this->userMessageModel = new UserMessageModel(); + $this->clientPolicyModel = new ClientPolicyModel(); + $this->notificationModel = new NotificationModel(); + $this->employeePolicyModel = new EmployeePolicyModel(); + $this->clientModel = new ClientModel(); + $this->myLogger = \Config\Services::mylogger(); - $this->clientModel = new ClientModel(); + } public function dashboard() { $data = []; - + $results = $this->clientModel->select('clients.id as client_id, clients.client_name, clients.short_name, client_branch.id as client_branch_id, client_branch.branch_name, client_branch.branch_code, employees.id as employee_id, employees.name as employee_name, employees.relationship, employees.emp_code, employees.emp_status, auth_history.user_type, client_policy.policy_type_id, client_policy.id as client_policy_id') - ->join('client_branch', 'clients.id = client_branch.client_id', 'left') - ->join('client_policy', 'client_branch.id = client_policy.client_branch_id', 'left') - ->join('employees', 'client_branch.id = employees.client_branch_id', 'left') - ->join('auth_history', 'employees.id = auth_history.user_id AND "employee" = auth_history.user_type', 'left') - ->findAll(); - + ->join('client_branch', 'clients.id = client_branch.client_id', 'left') + ->join('client_policy', 'client_branch.id = client_policy.client_branch_id', 'left') + ->join('employees', 'client_branch.id = employees.client_branch_id', 'left') + ->join('auth_history', 'employees.id = auth_history.user_id AND "employee" = auth_history.user_type', 'left') + ->findAll(); + $pendingActionsController = new PendingActionsController; $pendingActionsData = $pendingActionsController->getPendingActionsForDashBoard(); $groupedData = []; - + foreach ($results as $row) { $clientId = $row['client_id']; $clientName = $row['client_name']; @@ -70,7 +79,7 @@ class DashboardController extends AdminController $clientPolicyId = $row['client_policy_id']; $policyTypeId = $row['policy_type_id']; - $employeeId =''; + $employeeId = ''; if ($employeeId != $row['employee_id']) { $employeeId = $row['employee_id']; } else { @@ -104,7 +113,7 @@ class DashboardController extends AdminController 'employees' => [] ]; } - + // Add the client policy to the branch's policies list if it exists, not already added, and policyTypeId is not equal to 1 if ($clientPolicyId !== null && $policyTypeId != 1 && !in_array(['client_policy_id' => $clientPolicyId, 'policy_type_id' => $policyTypeId], $groupedData[$clientId]['branches'][$branchId]['client_policies'])) { $groupedData[$clientId]['branches'][$branchId]['client_policies'][] = [ @@ -112,8 +121,8 @@ class DashboardController extends AdminController 'policy_type_id' => $policyTypeId ]; } - - // Append employee info to the branch's employees list if relationship is 'Self' and not already added + + // Append employee error to the branch's employees list if relationship is 'Self' and not already added $employeeKey = $employeeId . '-' . $employeeName; // unique key to identify an employee if ($employeeId !== null && $employeeRelationship == 'Self' && !isset($groupedData[$clientId]['branches'][$branchId]['employees'][$employeeKey])) { $groupedData[$clientId]['branches'][$branchId]['employees'][$employeeKey] = [ @@ -142,7 +151,7 @@ class DashboardController extends AdminController } $client['branches'] = array_values($client['branches']); } - + $data['client_branch_emp_list'] = $groupedData; $session = \Config\Services::session(); $session->set('enrollment_data', json_encode($data)); @@ -150,15 +159,12 @@ class DashboardController extends AdminController $data['pendingActionsData'] = $pendingActionsData; // print_r($data);die; - + echo view('layout/header'); echo view('DashBoard', $data); echo view('layout/footer'); } - - - public function getDashboardNotifications() { @@ -187,89 +193,61 @@ class DashboardController extends AdminController } - public static function enrollment_status() { + public function updatePolicyEnrollmentStatus() + { $clientModel = new ClientModel(); $clientPolicyModel = new ClientPolicyModel(); $notificationModel = new NotificationModel(); $employeePolicyModel = new EmployeePolicyModel(); $myLogger = \Config\Services::mylogger(); - $client_policy_data = $clientPolicyModel->findAll(); + // $myLogger->logme('error', 'enrollment_status function called'); + + $client_policy_data = $clientPolicyModel->getPolicyDetailsForRemainder(); + $myLogger->logme('error', 'Fetched client policy data'); + + // dd($client_policy_data); + $currentDate = date('d'); + // $myLogger->logme('error', 'Current date: ' . $currentDate); // Update policy status based on start and end dates foreach ($client_policy_data as $client_policy) { + $id = $client_policy['id']; $openDate = date('d', strtotime($client_policy['open_date'])); $closeDate = date('d', strtotime($client_policy['close_date'])); + + // $myLogger->logme('error', 'Processing client policy ID: ' . $id); + // $myLogger->logme('error', 'Open date: ' . $openDate . ', Close date: ' . $closeDate); + if ($currentDate == $openDate) { $clientPolicyModel->update($id, ['open_for_enrollment' => 1]); - } - + $myLogger->logme('error', 'Updated policy ID ' . $id . ' to open for enrollment.'); + } + if ($closeDate < $currentDate) { $clientPolicyModel->update($id, ['open_for_enrollment' => 0]); + $myLogger->logme('error', 'Updated policy ID ' . $id . ' to close for enrollment.'); } } - $reminder_whole_mail = []; - - foreach ($client_policy_data as $client_policy) { - // Fetch client data - $client_data = $clientModel->find($client_policy['client_id']); - - // Fetch notification settings - $notification_data = $notificationModel->where('client_id', $client_policy['client_id']) - ->where('template_name', 'member_reminder_mail') - ->first(); - - // Check if notification should be sent - if ($notification_data && $notification_data['enabled'] == 1 && $currentDate == date('d', strtotime($client_policy['reminder_date'])) ) { - // Fetch all employees related to the client policy - $employees = $employeePolicyModel->select('employees.*') - ->join('employees', 'employee_polices.employee_id = employees.id', 'left') - ->where('employee_polices.client_policy_id', $client_policy['id']) - ->where('employees.emp_status', 'draft') - ->where('employee_polices.status', 'draft') - ->where('employees.relationship', 'Self') - ->findAll(); - // Process each employee - foreach ($employees as $employee) { - if($employee['emp_status'] == 'draft' && $employee['relationship'] == 'Self'){ - $params['emp_data'] = $employee; - $params['client_data'] = $client_data; - $params['notification_data'] = $notification_data; - - // Send the mail notification - $reminder_whole_mail[] = sendMailNotification::sendMailNotification('member_reminder_mail', $params); - } - } - } - } - - // Process and queue bulk emails - $temp_whole_data = []; - $count = 0; - - foreach ($reminder_whole_mail as $whole_index => $values) { - foreach ($values as $index => $value) { - $temp_whole_data[] = $value; - $count++; - - if ($count == 20 || ($whole_index == count($reminder_whole_mail) - 1 && $index == count($values) - 1)) { - if (!empty($temp_whole_data)) { - Jobs::addJob(['job_name' => 'bulk_mail', 'payload' => $temp_whole_data]); - $temp_whole_data = []; - $count = 0; - } - } - } - } - if(count($temp_whole_data) > 0){ - Jobs::addJob(['job_name' => 'bulk_mail', 'payload' => $temp_whole_data]); + // Mail send function + // $myLogger->logme('error', 'Calling sendRemainderMail function'); + if( $currentDate == date('d', strtotime($client_policy['reminder_date']))){ + $result = $this->sendRemainderMail($client_policy_data); + }else{ + $result = false; } - return json_encode(true); + // $myLogger->logme('error', 'enrollment_status function completed'); + if($result){ + return json_encode(['status' => true, 'message' => 'Mail send successfully']); + }else{ + return json_encode(['status' => false, 'message' => 'There is no data to send']); + } } + public function featch_dashboard_data($type) { @@ -308,4 +286,128 @@ class DashboardController extends AdminController } + public function sendRemainderMail($client_policy_data) + { + // $this->myLogger->logme('error', 'sendRemainderMail function called'); + + $reminder_whole_mail = []; + + foreach ($client_policy_data as $client_policy) { + + // Fetch client data + $client_data = $this->clientModel->find($client_policy['client_id']); + + // Fetch notification settings + $notification_data = $this->notificationModel + ->where('client_id', $client_policy['client_id']) + ->where('template_name', 'member_reminder_mail') + ->first(); + + // $this->myLogger->logme('error', 'Notification data fetched: ' . json_encode($notification_data)); + + // Check if notification should be sent + if ($notification_data && $notification_data['enabled'] == 1 && !empty($notification_data['mail_content'])) { + $this->myLogger->logme('error', 'Notification should be sent for client policy ID: ' . $client_policy['id']); + + // Fetch all employees related to the client policy + $employees = $this->employeePolicyModel + ->select('employees.*') + ->join('employees', 'employee_polices.employee_id = employees.id', 'left') + ->where('employee_polices.client_policy_id', $client_policy['id']) + ->where('employees.emp_status', 'draft') + ->where('employees.is_active', 1) + ->where('employee_polices.status', 'draft') + ->where('employee_polices.is_active', 1) + ->where('employees.relationship', 'Self') + ->findAll(); + + // Process each employee + foreach ($employees as $employee) { + + if ($employee['emp_status'] == 'draft' && $employee['relationship'] == 'Self') { + $this->myLogger->logme('error', 'Employee status and relationship check passed for employee ID: ' . $employee['id']); + + // Mail params + $params['emp_data'] = $employee; + $params['client_data'] = $client_data; + $params['notification_data'] = $notification_data; + + // Send the mail notification + $mail_result = sendMailNotification::sendMailNotification('member_reminder_mail', $params); + // $this->myLogger->logme('error', 'Mail sent result: ' . json_encode($mail_result)); + $reminder_whole_mail[] = $mail_result; + } + } + } else { + $this->myLogger->logme('error', 'Notification not sent for client policy ID: ' . $client_policy['id']); + } + } + + $this->myLogger->logme('error', 'Whole email, count: ' . $reminder_whole_mail); + + // Process and queue bulk emails + $temp_whole_data = []; + $count = 0; + + foreach ($reminder_whole_mail as $whole_index => $values) { + foreach ($values as $index => $value) { + $temp_whole_data[] = $value; + $count++; + $this->myLogger->logme('error', 'Queueing email, count: ' . $count); + + if ($count == 20 || ($whole_index == count($reminder_whole_mail) - 1 && $index == count($values) - 1)) { + if (!empty($temp_whole_data)) { + Jobs::addJob(['job_name' => 'bulk_mail', 'payload' => $temp_whole_data]); + $this->myLogger->logme('error', 'Added bulk mail job: ' . json_encode($temp_whole_data)); + $temp_whole_data = []; + $count = 0; + } + } + } + } + + if (count($temp_whole_data) > 0) { + Jobs::addJob(['job_name' => 'bulk_mail', 'payload' => $temp_whole_data]); + $this->myLogger->logme('error', 'Added final bulk mail job: ' . json_encode($temp_whole_data)); + return true; + } + + if(count($reminder_whole_mail) > 0){ + return true; + }else{ + return false; + } + + } + + + public function sendManualRemainder($client_id, $client_branch_id) + { + $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); + // 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); + $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); + } + + } 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); + } + } + + + } diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 82328ba1..4f70758b 100644 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -192,6 +192,7 @@ class EmployeeController extends AdminController // } if ($this->request->getMethod() == 'post') { + //validate uploaded file $filename = ''; $validated = $this->validate([ @@ -255,7 +256,7 @@ class EmployeeController extends AdminController //for TPA/insurer upload $data['events'] = ['inception' => 'Inception (Employee + Dependents)', 'missed_inception' => 'Missed Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addition' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement']; //for inception upload - $data['actions'] = ['inception' => 'Inception (Employee + Dependents)', 'missed_inception' => 'Missed Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addtion' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement','enrollment' => 'Enrollment']; + $data['actions'] = ['inception' => 'Inception (Employee + Dependents)', 'missed_inception' => 'Missed Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addtion' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement','enrollment' => 'Enrolment']; $data['import_or_export'] = ['import' => 'Import', 'export' => 'Export']; $data['insurer_or_tpa'] = ['insurer' => 'Insurer', 'tpa' => 'TPA']; @@ -1642,4 +1643,20 @@ class EmployeeController extends AdminController } } + + public function get_client_policy_list_for_remainder($client_id, $client_branch_id) + { + $policies = $this->clientPolicyModel + ->select('client_policy.*, policy_type.policy_type as policy_name') + ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') + ->where('client_policy.client_id', $client_id) + ->where('client_policy.client_branch_id', $client_branch_id) + ->where('client_policy.is_active', 1) + ->where('client_policy.policy_status', 1) + ->whereIn('client_policy.policy_type_id', [2, 3]) + ->findAll(); + + return $this->respond(['status' => true, 'code' => 200, 'data' => $policies], 200); + + } } diff --git a/app/Models/ClientPolicyModel.php b/app/Models/ClientPolicyModel.php index 29027630..506b6605 100644 --- a/app/Models/ClientPolicyModel.php +++ b/app/Models/ClientPolicyModel.php @@ -388,5 +388,26 @@ public function getCliendDataForExcelFileName($client_policy_id){ } +//for this using in CRONE JOB +public function getPolicyDetailsForRemainder($client_id = null, $branch_id = null) +{ + $builder = $this->table('client_policy') + ->where('client_policy.is_addon', 1) + ->where('client_policy.open_for_enrollment', 1) + ->where('client_policy.inception_type', 2) + ->where('client_policy.is_active', 1) + ->where('client_policy.policy_status', 1) + ->whereIn('client_policy.policy_type_id', [2, 3]); + + if ($client_id && $branch_id) { + $builder->where('client_policy.client_id', $client_id) + ->where('client_policy.client_branch_id', $branch_id); + } + + return $builder->get()->getResultArray(); + + + } + } diff --git a/app/Views/DashBoard.php b/app/Views/DashBoard.php index c174e936..8f2a5aff 100644 --- a/app/Views/DashBoard.php +++ b/app/Views/DashBoard.php @@ -59,7 +59,7 @@ body {