diff --git a/app/Config/Database.php b/app/Config/Database.php index 388b1b0..f59b49f 100755 --- a/app/Config/Database.php +++ b/app/Config/Database.php @@ -71,6 +71,20 @@ class Database extends Config 'busyTimeout' => 1000, ]; + public $postDB = [ + 'DSN' => '', + 'hostname' => 'localhost', + 'username' => 'root', + 'password' => 'root', + 'database' => 'other_db', + 'DBDriver' => 'MySQLi', + 'DBPrefix' => '', + 'pConnect' => false, + 'DBDebug' => (ENVIRONMENT !== 'production'), + 'charset' => 'utf8', + 'DBCollat' => 'utf8_general_ci', + ]; + public function __construct() { parent::__construct(); diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 67cbf08..4a21b1c 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -70,6 +70,7 @@ $routes->group("/client", ["filter" => "authMVC"], function ($routes) { $routes->get('deposit/(:num)', 'ClientController::deposit/$1'); $routes->get('remove/(:num)', 'ClientController::removeClient/$1'); $routes->get("list/(:any)", "ClientController::editClientOnboarding/$1"); + $routes->post('wipe', 'ClientController::wipeDemoClient'); // application/config/routes.php // Add a route for the view_Deposit method @@ -157,6 +158,8 @@ $routes->group("/employee", ["filter" => "authMVC"], function ($routes) { $routes->post("test-rack-rate", "EmployeeController::testRackRate"); $routes->get('test_members_list', 'EmployeeController::test_members_list'); $routes->post('get_emp_history','EmployeeController::getEmpHistory'); + $routes->post('download_inception','EmployeeController::download_inception'); + $routes->get('download_file','EmployeeController::download_file'); }); @@ -344,7 +347,7 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->post('saveSIMapping','ClientController::saveSIMapping'); $routes->post('checkSIMapping','ClientController::checkSIMapping'); $routes->post('deleteMapping','ClientController::deleteMapping'); - + $routes->get('removeLevelContacts','ClientController::removeLevelContacts'); }); @@ -445,6 +448,7 @@ $routes->group("/api", ["filter" => "authJWT"], function ($routes) { $routes->post("employeeRest/saveMpin", "RestAuthenticationController::saveMpin"); $routes->post("employeeRest/updateMpin", "RestAuthenticationController::updateMpin"); +$routes->post("employeeRest/forgotMPIN", "RestAuthenticationController::forgotMPIN"); $routes->post("calculatePremium", "EmployeeRestController::calculatePremium"); // $routes->post("employeeRest/createOrUpdateEmployeePolicySiAmount", "EmployeeRestController::createOrUpdateEmployeePolicySiAmount"); @@ -489,10 +493,13 @@ $routes->group("employeeRest", ["filter" => "authJWT"], function ($routes) { $routes->get("getEmployeeActiveOrInactivePolicy", "EmployeeRestController::getEmployeeActiveOrInactivePolicy"); $routes->get("getFEContent", "EmployeeRestController::getFEContent"); $routes->get("getAdvertisementImage", "EmployeeRestController::getAdvertisementImage"); + $routes->post("logHrActivity", "RestAuthenticationController::logHrActivity"); + }); $routes->get("getEmployeeActiveOrInactivePolicy", "EmployeeRestController::getEmployeeActiveOrInactivePolicy"); $routes->get("sendPushNotification", "EmployeeRestController::sendPushNotification"); $routes->post("sendEmail", "EmployeeRestController::send_email"); +$routes->get("getPolicyLevelEmployeeSummaryData", "EmployeeRestController::getPolicyLevelEmployeeSummaryData"); $routes->get("getBackToEnrolledDetails", "EmployeeRestController::getBackToEnrolledDetails"); @@ -505,5 +512,7 @@ $routes->get("sendCroneRemainderMail", "DashboardController::sendCroneRemainderM $routes->get("getEmployeePolicy", "EmployeeRestController::getEmployeePolicy"); $routes->get("getAddOnPolicy", "EmployeeRestController::getAddOnPolicy"); $routes->post("addEmployeeAndDependence", "EmployeeRestController::addEmployeeAndDependence"); +$routes->post("getPreEmployeePolicyCount", "EmployeeRestController::getPreEmployeePolicyCount"); + diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index eb1a2be..678100a 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -138,7 +138,7 @@ class ClientController extends AdminController // Perform the query $builder = $db->table($table); - $isDuplicate = $builder->where($field, $value)->countAllResults() > 0; + $isDuplicate = $builder->where($field, $value)->where('is_active', 1)->countAllResults() > 0; // Return the result return $this->response->setJSON(['isDuplicate' => $isDuplicate]); @@ -866,6 +866,12 @@ class ClientController extends AdminController $data['created_by'] = get_session_userid(); $insert = $this->clientBranchModel->insert($data); + if ($insert) { + $level_contact_data = $this->request->getPost('level_contect_data'); + $level_contact_data = !empty($level_contact_data) ? json_decode($level_contact_data, true) : null; + $this->saveLevelContacts($level_contact_data, $insert); + } + // if ($insert) { // for ($i = 0; $i < count($this->request->getPost('name')); $i++) { // // Prepare data to insert @@ -968,6 +974,11 @@ class ClientController extends AdminController $insert = $this->clientBranchModel->update($id, $data); $this->myLogger->logme('error', 'Client branch EDITED by {data}', ['data' => get_session_userid()]); + if ($insert) { + $level_contact_data = $this->request->getPost('level_contect_data'); + $level_contact_data = !empty($level_contact_data) ? json_decode($level_contact_data, true) : null; + $this->saveLevelContacts($level_contact_data, $id); + } // if ($insert) { @@ -1005,6 +1016,57 @@ class ClientController extends AdminController } } + public function saveLevelContacts($level_contact_data, $branch_id) + { + if (!empty($level_contact_data) && is_array($level_contact_data)) { + foreach ($level_contact_data as $value) { + if (!empty($value['id'])) { + $id = $value['id']; + unset($value['id']); + $this->levelContactModel->update($id, $value); + } else { + unset($value['id']); + $value['contact_type'] = "client"; + $value['ref_id'] = $branch_id ?? null; + $this->levelContactModel->insert($value); + } + } + } + } + + public function removeLevelContacts() + { + $id = $this->request->getGet('id'); + try { + if (empty($id)) { + return $this->respond([ + 'status' => false, + 'message' => 'Invalid ID provided. ID is empty', + 'data' => $id + ], 400); + } + + $updated = $this->levelContactModel->update($id, ['is_active' => 0]); + + if ($updated === false) { + return $this->respond([ + 'status' => false, + 'message' => 'Failed to remove contact' + ], 500); + } + + return $this->respond([ + 'status' => true, + 'message' => 'Contact removed successfully' + ]); + } catch (\Exception $e) { + return $this->respond([ + 'status' => false, + 'message' => 'An error occurred: ' . $e->getMessage() + ], 500); + } + } + public function createClientPolicy() @@ -4435,11 +4497,13 @@ class ClientController extends AdminController $employeeRestController = new EmployeeServiceController(); // $employeeRestController->excelFileDataValidation(['file_id' => 823]); + // $res = $employeeRestController->excelFileFormatValidation(['file_id' => 897]); + // $res = $employeeRestController->getExcelErrorData(['file_id' => 897]); // $employeeRestController->employeesOnboardPreprocess(['file_id' => 644]); // $employeeRestController->employeesOnboardProcess(['file_id' => 835]); // $employeeRestController->employeesEnrollmentInsert(['file_id' => 836]); // $r = Jobs::addJob(['job_name' => 'employeesEnrollmentInsert','payload' => ['file_id' => 721]]); - + // dd($res); // ----------EMP DATA SERVICE CONTROLLER-------------------------------------------------------------------------------- @@ -4816,4 +4880,246 @@ class ClientController extends AdminController return $this->respond(['status'=> false,'code'=>404,'message'=>'Mapping Deletion Failed'],200); } } + + // -------------------- DEMO CLIENT FUNCTION -------------------------------------------------------------------------------------------- + + public function wipeDemoClient() + { + $this->myLogger->logme('error', "========================================"); + $this->myLogger->logme('error', "WIPE DEMO CLIENT FUNCTION STARTED"); + $this->myLogger->logme('error', "========================================"); + + $this->myLogger->logme('error', "Request Payload: " . json_encode($this->request->getPost() ?? [])); + $client_id = $this->request->getPost('client_id'); + + if (empty($client_id)) { + $this->myLogger->logme('error', "ERROR: Client ID is required"); + return $this->respond(['status' => false, 'message' => 'Client id required'], 404); + } + + $this->myLogger->logme('error', "Client ID to wipe: " . $client_id); + $this->myLogger->logme('error', "----------------------------------------"); + + // ======================================== + // 1. CLIENT MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "1. PROCESSING CLIENT MODEL"); + $client_data = $this->clientModel->where('id', $client_id)->where('is_active', 1)->first(); + $this->myLogger->logme('error', " Found Client Data: " . json_encode($client_data ?? [])); + + if (!empty($client_data)) { + $is_deleted = $this->clientModel->where('id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Client data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete client record"); + } + } else { + $this->myLogger->logme('error', " ✗ Client not found or inactive"); + return $this->respond(['status' => false, 'message' => 'Client not found'], 404); + } + $this->myLogger->logme('error', "----------------------------------------"); + + // ======================================== + // 2. CLIENT RM MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "2. PROCESSING CLIENT RM MODEL"); + $client_rm_data = $this->clientRMModel->where('client_id', $client_id)->first(); + $this->myLogger->logme('error', " Found Client RM Data: " . json_encode($client_rm_data ?? [])); + + if (!empty($client_rm_data)) { + $is_deleted = $this->clientRMModel->where('client_id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Client RM data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Client RM record"); + } + } else { + $this->myLogger->logme('error', " ℹ No Client RM data found"); + } + $this->myLogger->logme('error', "----------------------------------------"); + + // ======================================== + // 3. CLIENT KYC DOCS MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "3. PROCESSING CLIENT KYC DOCS MODEL"); + $client_kyc_data = $this->clientKYCDocsModel->where('client_id', $client_id)->findAll(); + $this->myLogger->logme('error', " Found Client KYC Records: " . count($client_kyc_data ?? [])); + $this->myLogger->logme('error', " Client KYC Data: " . json_encode($client_kyc_data ?? [])); + + if (!empty($client_kyc_data)) { + $is_deleted = $this->clientKYCDocsModel->where('client_id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Client KYC Docs data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Client KYC Docs records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Client KYC Docs data found"); + } + $this->myLogger->logme('error', "----------------------------------------"); + + // ======================================== + // 4. CLIENT BRANCH MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "4. PROCESSING CLIENT BRANCH MODEL"); + $client_branch_data = $this->clientBranchModel->where('client_id', $client_id)->findAll(); + $branch_ids = array_column($client_branch_data, 'id') ?? []; + $this->myLogger->logme('error', " Found Client Branch Records: " . count($client_branch_data ?? [])); + $this->myLogger->logme('error', " Branch IDs: " . json_encode($branch_ids)); + $this->myLogger->logme('error', " Client Branch Data: " . json_encode($client_branch_data ?? [])); + + if (!empty($client_branch_data)) { + $is_deleted = $this->clientBranchModel->where('client_id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Client Branch data removed successfully"); + + // Delete related Level Contact data + if (!empty($branch_ids)) { + $this->myLogger->logme('error', " 4a. PROCESSING RELATED LEVEL CONTACT DATA"); + $level_contact_data = $this->levelContactModel->where('contact_type', 'client')->whereIn('ref_id', $branch_ids)->findAll(); + $this->myLogger->logme('error', " Found Level Contact Records: " . count($level_contact_data ?? [])); + $this->myLogger->logme('error', " Level Contact Data: " . json_encode($level_contact_data ?? [])); + + $is_deleted = $this->levelContactModel->where('contact_type', 'client')->whereIn('ref_id', $branch_ids)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Level Contact data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Level Contact records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Branch IDs available for Level Contact deletion"); + } + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Client Branch records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Client Branch data found"); + } + $this->myLogger->logme('error', "----------------------------------------"); + + // ======================================== + // 5. CLIENT POLICY MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "5. PROCESSING CLIENT POLICY MODEL"); + $client_policy_data = $this->clientPolicyModel->where('client_id', $client_id)->findAll(); + $policy_ids = array_column($client_policy_data, 'id') ?? []; + $this->myLogger->logme('error', " Found Client Policy Records: " . count($client_policy_data ?? [])); + $this->myLogger->logme('error', " Policy IDs: " . json_encode($policy_ids)); + $this->myLogger->logme('error', " Client Policy Data: " . json_encode($client_policy_data ?? [])); + + if (!empty($client_policy_data)) { + $is_deleted = $this->clientPolicyModel->where('client_id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Client Policy data removed successfully"); + + // Delete related Employee Policy data + if (!empty($policy_ids)) { + $this->myLogger->logme('error', " 5a. PROCESSING RELATED EMPLOYEE POLICY DATA"); + $employee_policy_data = $this->employeePolicyModel->whereIn('client_policy_id', $policy_ids)->findAll(); + $this->myLogger->logme('error', " Found Employee Policy Records: " . count($employee_policy_data ?? [])); + + $is_deleted = $this->employeePolicyModel->whereIn('client_policy_id', $policy_ids)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Employee Policy data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Employee Policy records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Policy IDs available for Employee Policy deletion"); + } + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Client Policy records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Client Policy data found"); + } + $this->myLogger->logme('error', "----------------------------------------"); + + // ======================================== + // 6. EMPLOYEE MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "6. PROCESSING EMPLOYEE MODEL"); + $employee_data = $this->employeeModel->where('client_id', $client_id)->findAll(); + $this->myLogger->logme('error', " Found Employee Records: " . count($employee_data ?? [])); + + if (!empty($employee_data)) { + $is_deleted = $this->employeeModel->where('client_id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Employee data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Employee records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Employee data found"); + } + $this->myLogger->logme('error', "----------------------------------------"); + + + // ======================================== + // 7. POLICY PREMIUM 1 MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "8. PROCESSING POLICY PREMIUM 1 MODEL"); + $policy_premium1_data = $this->policyPremium1Model->where('client_id', $client_id)->findAll(); + $this->myLogger->logme('error', " Found Policy Premium 1 Records: " . count($policy_premium1_data ?? [])); + + if (!empty($policy_premium1_data)) { + $is_deleted = $this->policyPremium1Model->where('client_id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Policy Premium 1 data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Policy Premium 1 records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Policy Premium 1 data found"); + } + $this->myLogger->logme('error', "----------------------------------------"); + + // ======================================== + // 8. POLICY PREMIUM 2 MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "9. PROCESSING POLICY PREMIUM 2 MODEL"); + $policy_premium2_data = $this->policyPremium2Model->where('client_id', $client_id)->findAll(); + $this->myLogger->logme('error', " Found Policy Premium 2 Records: " . count($policy_premium2_data ?? [])); + + if (!empty($policy_premium2_data)) { + $is_deleted = $this->policyPremium2Model->where('client_id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Policy Premium 2 data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Policy Premium 2 records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Policy Premium 2 data found"); + } + $this->myLogger->logme('error', "----------------------------------------"); + + // ======================================== + // 9. NOTIFICATION MODEL DELETION + // ======================================== + $this->myLogger->logme('error', "10. PROCESSING NOTIFICATION MODEL"); + $notification_data = $this->notificationModel->where('client_id', $client_id)->findAll(); + $this->myLogger->logme('error', " Found Notification Records: " . count($notification_data ?? [])); + $this->myLogger->logme('error', " Notification Data: " . json_encode($notification_data ?? [])); + + if (!empty($notification_data)) { + $is_deleted = $this->notificationModel->where('client_id', $client_id)->delete(); + if ($is_deleted) { + $this->myLogger->logme('error', " ✓ Notification data removed successfully"); + } else { + $this->myLogger->logme('error', " ✗ Failed to delete Notification records"); + } + } else { + $this->myLogger->logme('error', " ℹ No Notification data found"); + } + $this->myLogger->logme('error', "----------------------------------------"); + + + $this->myLogger->logme('error', "========================================"); + $this->myLogger->logme('error', "WIPE DEMO CLIENT FUNCTION COMPLETED"); + $this->myLogger->logme('error', "Client ID: " . $client_id . " - Successfully processed"); + $this->myLogger->logme('error', "========================================"); + + return $this->respond(['status' => true, 'message' => 'Demo client data wiped successfully'], 200); + } } diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index e2e9eaa..28a76c4 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -41,6 +41,10 @@ use CodeIgniter\API\ResponseTrait; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; +use PhpOffice\PhpSpreadsheet\Style\Alignment; +use PhpOffice\PhpSpreadsheet\Style\Fill; +use PhpOffice\PhpSpreadsheet\Style\Border; +use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use Dompdf\Dompdf; use Dompdf\Options; @@ -1325,7 +1329,7 @@ class EmployeeController extends AdminController } //STEP:3 - Update files table status - $this->fileModel->where('id', $file_id)->set(['status' => 'truncated'])->update(); + $this->fileModel->where('id', $file_id)->set(['status' => 'truncated','updated_by' => $loggedInUserID])->update(); $this->myLogger->logme('error', '---- files table updated ----'); //FINAL STEP - Update reverse entry in cash_deposite table @@ -1407,7 +1411,7 @@ class EmployeeController extends AdminController // dd($affectedRows); $affectedRows = $affectedRows * 2; - $this->fileModel->where('id', $file_id)->set(['status' => 'truncated'])->update(); + $this->fileModel->where('id', $file_id)->set(['status' => 'truncated','updated_by' => $loggedInUserID])->update(); } @@ -1472,7 +1476,7 @@ class EmployeeController extends AdminController // STEP 3: //update files table status to "truncated" - $this->fileModel->where('id', $file_id)->set(['status' => 'truncated'])->update(); + $this->fileModel->where('id', $file_id)->set(['status' => 'truncated','updated_by' => $loggedInUserID])->update(); $this->myLogger->logme('error', 'files table updated'); @@ -2473,7 +2477,8 @@ class EmployeeController extends AdminController //------------------------------------------------------------------------------------------------------ - public function test_members_list(){ + public function test_members_list() + { // $model = new EmployeeModel(); // $list = [ // ['relationship' => 'spouse','emp_code' => 'TEST002', 'name' => 'Lakshmi','email_personal' => 'lakshmi@gmail.com','mobile'=>'6382156701','gender'=>'female','dob'=>'1996-05-19','doj'=>'2022-02-01','basic_pay'=>'100000','emp_status'=>'enrolled'], @@ -2496,7 +2501,8 @@ class EmployeeController extends AdminController return $this->loadLayout('test_members_list',$data); } - public function mapEmployees(){ + public function mapEmployees() + { $client_id = $this->request->getPost('client_id'); $branch_id = $this->request->getPost('branch_id'); $policy_id = $this->request->getPost('client_policy_id'); @@ -2530,7 +2536,8 @@ class EmployeeController extends AdminController } } - public function getDataForMapping(){ + public function getDataForMapping() + { $policy_id = $this->request->getPost('policy_id');log_message('error',$policy_id); $data['policy_start_date'] = $this->clientPolicyModel->select('policy_start_date')->where('id',$policy_id)->first()['policy_start_date']; $data['si_amt'] = $this->PolicyPremium2Model->select('si')->where('client_policy_id', $policy_id)->groupBy('si')->findAll(); @@ -2538,7 +2545,8 @@ class EmployeeController extends AdminController return $this->respond(['status' => true, 'code' => 200, 'data' => $data], 200); } - public function unmapEmployees($actionType){ + public function unmapEmployees($actionType) + { $selected_employees = (array)$this->request->getPost('selected'); if($actionType == 0){ for($i = 0;$irequest->getPost('emp_id'); @@ -2708,7 +2714,8 @@ class EmployeeController extends AdminController } - public function formatFieldName($unformattedString){ + public function formatFieldName($unformattedString) + { if (str_contains($unformattedString, '_')) { $data = str_replace('_', ' ', $unformattedString); @@ -2722,4 +2729,100 @@ class EmployeeController extends AdminController } + //------------------------------------------------------------------------------------------------------ + + public function download_inception() + { + $client = $this->request->getPost('client'); + $branch = $this->request->getPost('branch'); + $policies = $this->request->getPost('policies'); + $status = $this->request->getPost('status'); + $empCode = $this->request->getPost('empCode'); + $empName = $this->request->getPost('empName'); + + $result = $this->employeePolicyModel->download_inception( + $client, $branch, $policies, $status, $empCode, $empName + ); + + if (empty($result)) { + return $this->response->setStatusCode(204)->setBody('No data found'); + } + + $formatted = []; + foreach ($result as $index => $row) { + $rowWithSerial = ['S.NO' => $index + 1] + $row; + $formatted[] = $rowWithSerial; + } + $result = $formatted; + + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + + $headers = array_keys($result[0]); + $columnWidth = 20; // standard column width + + $colIndex = 1; + foreach ($headers as $header) { + $columnLetter = Coordinate::stringFromColumnIndex($colIndex); + $cellCoordinate = $columnLetter . '1'; + + $sheet->setCellValue($cellCoordinate, ucfirst(str_replace('_', ' ', $header))); + + $sheet->getColumnDimension($columnLetter)->setWidth($columnWidth); + + $style = $sheet->getStyle($cellCoordinate); + $style->getFont()->setBold(true); + $style->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); + $style->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN); + + $colIndex++; + } + + $rowNum = 2; + foreach ($result as $row) { + $colIndex = 1; + foreach ($row as $cell) { + $columnLetter = Coordinate::stringFromColumnIndex($colIndex); + $cellCoordinate = $columnLetter . $rowNum; + $sheet->setCellValue($cellCoordinate, $cell); + $colIndex++; + } + $rowNum++; + } + + + $exportDir = WRITEPATH . 'exports'; + if (!is_dir($exportDir)) { + mkdir($exportDir, 0777, true); + } else { + chmod($exportDir, 0777); + } + + $filename = 'inception_export_' . date('Ymd_His') . '.xlsx'; + $filepath = $exportDir . '/' . $filename; + + $writer = new Xlsx($spreadsheet); + $writer->save($filepath); + + return $this->response->setJSON([ + 'status' => 'success', + 'downloadUrl' => base_url('employee/download_file?file=' . urlencode($filename)) + ]); + } + + + public function download_file() + { + $filename = $this->request->getGet('file'); + $filepath = WRITEPATH . 'exports/' . $filename; + + if (!file_exists($filepath)) { + return $this->response->setStatusCode(404)->setBody('File not found.'); + } + + return $this->response->download($filepath, null)->setFileName($filename); + } + + + } diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index 240afca..8069280 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -31,6 +31,7 @@ use App\Models\AddImgModel; use App\Models\ClientBranchModel; use App\Models\AuditHistoryModel; use App\Models\SIMappingModel; +use App\Models\InsurerModel; use App\Controllers\Jobs ; @@ -77,6 +78,7 @@ class EmployeeRestController extends AdminController protected $auditHistoryModel; protected $siMappingModel; protected $employeeHelper; + protected $insurerModel; public function __construct() @@ -103,6 +105,7 @@ class EmployeeRestController extends AdminController $this->auditHistoryModel = new AuditHistoryModel(); $this->siMappingModel = new SIMappingModel(); $this->employeeHelper = new EmployeeHelper(); + $this->insurerModel = new InsurerModel(); } @@ -748,7 +751,7 @@ class EmployeeRestController extends AdminController $jwt = $this->request->getHeaderLine('Authorization'); $jwtParts = explode(' ', $jwt); - $token = $jwtParts[2]; + $token = $jwtParts[1]; $decodedPayload = json_decode(base64_decode(explode('.', $token)[1]), true); @@ -1072,6 +1075,7 @@ class EmployeeRestController extends AdminController return $this->respond(['status' => 'failed', 'code' => 404, 'message' => "Client id and Client Policy id is Not Match!" ], 404); } } catch (\Exception $e) { + $this->myLogger->logme("error", ($e->getMessage().' --- '.$e->getLine() . '----' . $e->getTraceAsString())); return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } @@ -1709,22 +1713,128 @@ class EmployeeRestController extends AdminController } + // public function getClientDetails() + // { + // try { + + // $jwt = $this->request->getHeaderLine('Authorization'); + // $jwtParts = explode(' ', $jwt); + // $token = $jwtParts[1]; + // $decodedPayload = json_decode(base64_decode(explode('.', $token)[1]), true); + // $token_type = $decodedPayload['token_type']; + + // if ($token_type == 'pre') { + // $client = $this->clientModel->where('id', $this->request->getGet('client_id'))->first(); + // if ($client) { + // $client['client_logo'] = base_url() . 'public/uploads/logo/' . $client['client_logo']; + // $clientPolicy = $this->clientPolicyModel->where('client_id', $this->request->getGet('client_id')) + // ->where('client_branch_id', $this->request->getGet('client_branch_id'))->findAll(); + // return $this->respond(['status' => 'success', 'code' => 200, 'data' => ['client' => $client, 'client_policy' => $clientPolicy]], 200); + // } else if ($token_type == 'post') { + + // $restAuthController = new RestAuthenticationController; + + // //call and get Client Details data from post enrollment + // $queryParams = [ + // 'client_id' => $this->request->getGet('client_id'), + // 'client_branch_id' => $this->request->getGet('client_branch_id') + // ]; + + // return $restAuthController->callThirdPartyGETAPI($queryParams, 'getClientDetails'); + // } else { + // return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 404); + // } + // } else { + // return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 404); + // } + // } catch (\Exception $e) { + // return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + // } + // } + public function getClientDetails() - { + { + log_message('error', 'STEP 1: getClientDetails called'); + try { + // STEP 2: Extract Authorization header + $jwt = $this->request->getHeaderLine('Authorization'); + log_message('error', 'STEP 2: Authorization header: ' . $jwt); - $client = $this->clientModel->where('id',$this->request->getGet('client_id'))->first(); - if($client) { - $client['client_logo'] = base_url().'public/uploads/logo/'.$client['client_logo']; - $clientPolicy = $this->clientPolicyModel->where('client_id',$this->request->getGet('client_id')) - ->where('client_branch_id',$this->request->getGet('client_branch_id'))->findAll(); - return $this->respond(['status' => 'success','code' => 200,'data' => ['client'=>$client,'client_policy'=>$clientPolicy]], 200); - - }else{ - return $this->respond(['status' => 'failed','code' => 404,'data' => []], 404); + $jwtParts = explode(' ', $jwt); + if (count($jwtParts) < 2) { + log_message('error', 'STEP 2.1: Invalid Authorization header format'); + return $this->respond(['status' => 'failed', 'code' => 400, 'data' => 'Invalid Authorization header'], 400); } + + $token = $jwtParts[1]; + log_message('error', 'STEP 3: Extracted JWT token'); + + $tokenParts = explode('.', $token); + if (count($tokenParts) !== 3) { + log_message('error', 'STEP 3.1: Invalid JWT structure'); + return $this->respond(['status' => 'failed', 'code' => 400, 'data' => 'Invalid JWT token'], 400); + } + + $decodedPayload = json_decode(base64_decode($tokenParts[1]), true); + log_message('error', 'STEP 4: Decoded JWT payload: ' . json_encode($decodedPayload)); + + $token_type = $decodedPayload['token_type'] ?? null; + log_message('error', 'STEP 5: Token type = ' . $token_type); + + $client_id = $this->request->getGet('client_id'); + $client_branch_id = $this->request->getGet('client_branch_id'); + log_message('error', 'STEP 6: Query params - client_id: ' . $client_id . ', client_branch_id: ' . $client_branch_id); + + if ($token_type === 'pre') { + log_message('error', 'STEP 7: Handling "pre" token type'); + + $client = $this->clientModel->where('id', $client_id)->first(); + if ($client) { + log_message('error', 'STEP 8: Found client: ' . json_encode($client)); + + $client['client_logo'] = base_url() . 'public/uploads/logo/' . $client['client_logo']; + + $clientPolicy = $this->clientPolicyModel + ->where('client_id', $client_id) + ->where('client_branch_id', $client_branch_id) + ->findAll(); + + log_message('error', 'STEP 9: Found client policy count: ' . count($clientPolicy)); + + return $this->respond([ + 'status' => 'success', + 'code' => 200, + 'data' => [ + 'client' => $client, + 'client_policy' => $clientPolicy + ] + ], 200); + } else { + log_message('error', 'STEP 10: No client found for client_id: ' . $client_id); + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 404); + } + } elseif ($token_type === 'post') { + log_message('error', 'STEP 11: Handling "post" token type'); + + $restAuthController = new RestAuthenticationController; + + $queryParams = [ + 'client_id' => $client_id, + 'client_branch_id' => $client_branch_id + ]; + + log_message('error', 'STEP 12: Calling post enrollment API with params: ' . json_encode($queryParams)); + + return $restAuthController->callThirdPartyGETAPI($queryParams, 'getClientDetails', ['token' => $jwt]); + } else { + log_message('error', 'STEP 13: Unknown token_type: ' . $token_type); + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 404); + } + } catch (\Exception $e) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); + log_message('error', 'STEP 14: Exception occurred - ' . $e->getMessage()); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } } @@ -2511,8 +2621,7 @@ class EmployeeRestController extends AdminController } - - $ClientPolicyData = $this->clientPolicyModel->select('client_policy.id as client_policy_id , client_policy.client_id as client_id, client_policy.policy_type_id as policy_type_id, client_policy.is_addon as is_addon , client_policy.open_for_enrollment as OpenForEnrollment , client_policy.inception_type as inception_type ') + $ClientPolicyData = $this->clientPolicyModel->select('client_policy.id as client_policy_id , client_policy.client_id as client_id, client_policy.policy_type_id as policy_type_id, client_policy.is_addon as is_addon , client_policy.open_for_enrollment as OpenForEnrollment , client_policy.inception_type as inception_type, client_policy.policy_no as policy_no, client_policy.insurer_id as insurer_id, DATE_FORMAT(client_policy.policy_end_date, "%d-%m-%Y") AS policy_expiry_date ') ->where('client_policy.client_id', $this->request->getGet('client_id') ) ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') ) ->where('client_policy.is_active', 1 ) @@ -2524,8 +2633,12 @@ class EmployeeRestController extends AdminController foreach ($ClientPolicyData as $key => $value) { $policyTypeData = $this->policyTypeModel->where('id',$value['policy_type_id'])->get()->getRow(); + $insurerData = $this->insurerModel->where('id',$value['insurer_id'])->get()->getRow(); + $value['type'] = $policyTypeData->policy_type; $value['policy_name'] = $policyTypeData->long_name; + $value['insurer_name'] = $insurerData->name ?? null; + $value['insurer_short_name'] = $insurerData->short_name ?? null; $employeeDetails = $this->employeePolicyModel->getEmployeePolicy( client_id:$value['client_id'],policy_id: $value['client_policy_id'],status:0,branch_id:$this->request->getGet('client_branch_id')); $enrolledCount = 0; $draftCount = 0; @@ -3308,10 +3421,77 @@ class EmployeeRestController extends AdminController return false; } - + public function getPreEmployeePolicyCount() + { + log_message('error', 'STEP 1: getPreEmployeePolicyCount API called'); + + $request = $this->request->getJSON(true); + $mobile_no = $request['mobile_number'] ?? null; + $client_short_name = $request['client_short_name'] ?? null; + + log_message('error', 'STEP 2: Received input - ' . json_encode($request)); + + // Step 3: Fetch client ID based on short name + $clientId = null; + if (!empty($client_short_name)) { + log_message('error', 'STEP 3: Looking up client with short_name: ' . $client_short_name); + $client_data = $this->clientModel + ->where('is_active', 1) + ->where('short_name', $client_short_name) + ->first(); + + if ($client_data) { + $clientId = $client_data['id']; + log_message('error', 'STEP 4: Found client ID: ' . $clientId); + } else { + log_message('error', 'STEP 4: No client found for short_name: ' . $client_short_name); + } + } else { + log_message('error', 'STEP 3: client_short_name is empty.'); + } + + // Step 5: Validate mobile number + if (empty($mobile_no)) { + log_message('error', 'STEP 5: Mobile number is empty or null. Returning 0.'); + return $this->respond(['data' => 0]); + } + + try { + log_message('error', 'STEP 6: Building employee policy count query'); + + $builder = $this->employeeModel + ->join('employee_polices', 'employees.id = employee_polices.employee_id') + ->join('client_policy cp', 'employee_polices.client_policy_id = cp.id') + ->where('employees.is_active', 1) + ->whereIn('employees.emp_status', ['draft', 'enrolled']) + ->where('employee_polices.is_active', 1) + ->whereIn('employee_polices.status', ['draft', 'enrolled']) + ->where('cp.enrolment_visibility', 1) + ->where('cp.open_for_enrollment', 1) + ->where('cp.policy_status', 1) + ->whereIn('cp.policy_type_id', [1, 2, 6, 7]) + ->where('employees.mobile', $mobile_no) + ->orderBy('employees.created_at', 'desc') + ->groupBy('employee_polices.client_policy_id'); + + if (!empty($clientId)) { + $builder->where('employees.client_id', $clientId); + log_message('error', 'STEP 7: Applied client ID filter: ' . $clientId); + } else { + log_message('error', 'STEP 7: No client ID filter applied.'); + } + + $count = $builder->get()->getNumRows(); + log_message('error', 'STEP 8: Final policy count = ' . $count); + + return $this->respond(['data' => $count]); + } catch (\Throwable $e) { + log_message('error', 'STEP 9: Exception occurred - ' . $e->getMessage()); + return $this->respond(['data' => 0]); + } + } - } \ No newline at end of file diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index ff6ded1..300e6aa 100755 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -24,6 +24,7 @@ use App\Helpers\sendMailNotification; use App\Controllers\Jobs ; use App\Controllers\JobWorker ; +use App\Controllers\EmpDataServiceController; use PhpOffice\PhpSpreadsheet\Spreadsheet; use Kint\Kint; @@ -1804,9 +1805,10 @@ class EmployeeServiceController extends AdminController public function getExcelErrorData($file_id){ try { - $file = $this->fileModel->find($file_id); - $error_data = json_decode($file['reason']); - // dd($error_data); + // $file = $this->fileModel->find($file_id); + $file = $this->fileModel->where('id', $file_id)->first(); + $error_data = json_decode($file['reason']); + // dd($error_data); // return $error_data; $file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name']; @@ -1822,10 +1824,21 @@ class EmployeeServiceController extends AdminController $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); $sheet = $spreadsheet->getActiveSheet(); - $highestRowAndColumn = $sheet->getHighestRowAndColumn(); - $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); - $excelErrorData['excel_header'] = $excel_data[0]; - unset($excel_data[0]); + $highestRowAndColumn = $sheet->getHighestRowAndColumn(); + $excel_data = $sheet->rangeToArray('A1:' . 'N' . $highestRowAndColumn['row']); + $excelErrorData['excel_header'] = $excel_data[0]; + unset($excel_data[0]); + + $excel_data = array_filter($excel_data, function($row) { + // Check if all cells in the row are empty or null + foreach ($row as $cell) { + if (!is_null($cell) && $cell !== '') { + return true; + } + } + return false; + }); + // echo '
';
          // Kint::dump($excel_data);
          if($error_data->error_type == 1){
diff --git a/app/Controllers/RestAuthenticationController.php b/app/Controllers/RestAuthenticationController.php
index 6ebd109..04902bc 100755
--- a/app/Controllers/RestAuthenticationController.php
+++ b/app/Controllers/RestAuthenticationController.php
@@ -9,6 +9,7 @@ use App\Controllers\LoginController;
 use App\Helpers\DepositHelper;
 use App\Helpers\JWTToken;
 use App\Helpers\HttpRequestHelper;
+use App\Helpers\RestAuthHelper;
 
 use CodeIgniter\HTTP\IncomingRequest;
 use CodeIgniter\HTTP\RequestInterface;
@@ -73,29 +74,70 @@ class RestAuthenticationController extends AdminController
         return $response->getBody();
     }
 
-    public function callThirdPartyGETAPI($queryParams, $endPoint)
+    // public function callThirdPartyGETAPI($queryParams, $endPoint)
+    // {
+    //     $client = \Config\Services::curlrequest();
+    //     $url = env('POST_ENROLLMENT_BASEURL') . $endPoint;
+
+    //     $response = $client->get($url, [
+    //         'query' => $queryParams, // pass as query parameters
+    //         'http_errors' => false   // prevent exception on non-200 status
+    //     ]);
+
+    //     return $response->getBody();
+    // }
+
+    public function callThirdPartyGETAPI($queryParams, $endPoint, $params = [])
     {
         $client = \Config\Services::curlrequest();
         $url = env('POST_ENROLLMENT_BASEURL') . $endPoint;
 
-        $response = $client->get($url, [
-            'query' => $queryParams, // pass as query parameters
-            'http_errors' => false   // prevent exception on non-200 status
-        ]);
+        $options = [
+            'query'       => $queryParams,
+            'http_errors' => false,
+        ];
+
+        if (isset($params['token']) && !empty($params['token'])) {
+            $options['headers'] = [
+                'Authorization' => 'Bearer ' . $params['token'],
+                'Accept'        => 'application/json'
+            ];
+        }
+
+        $response = $client->get($url, $options);
 
         return $response->getBody();
     }
 
 
 
+
+
+
    
     // employee auth api's start
 
     public function verifyEmployeeWithMobileNumber()
-    {
+    {   
+        log_message('error', '  ');
+        log_message('error', '************************ PRE START ********************************');
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Verify Employee With Mobile Number: Function called");
+
         try {
             $mobile_number = $this->request->getJSON()->mobile_number;
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: Received mobile_number = " . $mobile_number);
           
+            $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['mobile_number' => $mobile_number]); 
+
+            if(empty($empdata)){
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: No employee data found both PRE & POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                $result = ['user_verification' => false , 'message' => "User not found"];
+                return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200);
+            }
+
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: employee data both PRE & POST = " . json_encode($empdata));
 
             $employeeData = $this->employeeModel->select('employees.relationship,EP.employee_id')
                                     ->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner') 
@@ -106,30 +148,65 @@ class RestAuthenticationController extends AdminController
                                     ->where('EP.is_active', 1)
                                     ->whereIn('EP.status', ['draft', 'enrolled', 'expired'])
                                     ->first();
-        
-          
+            
+            $employeeData = [];
+            if (isset($empdata['pre']) && !empty($empdata['pre'])) {
+                $employeeData = $empdata['pre'];
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: Using PRE data");
+            } elseif (isset($empdata['post']) && !empty($empdata['post'])) {
+                $employeeData = $empdata['post'];
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: Using POST data");
+            }
+            
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: Final employee data to verify = " . json_encode($employeeData));
             
             if (isset($employeeData['employee_id'])) 
             {   
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: Employee verified with ID = " . $employeeData['employee_id']);
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
                 $result = ['user_verification' => true ,'message' => "Verified Successfully" ];
                 return $this->respond(['status' => 'success','code' => 200,'data' => $result],200);
             } else {
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: Employee ID not found, calling third-party API to POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
                 // Call the third-party API function
                 return $this->callThirdPartyAPI($this->request->getJSON(),'verifyEmployeeNumber');
-
             }
         } catch (\Throwable $th) {
+
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: Exception: " . $th->getMessage() . " --- Line: " . $th->getLine() . " --- Trace: " . $th->getTraceAsString());
+            log_message('error', '  ');
+            log_message('error', '************************ PRE END ********************************');
             return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500);
         }
     }
 
     public function verifyEmployeeWithEmailId()
-    {
+    {   
+        log_message('error', '  ');
+        log_message('error', '************************ PRE START ********************************');        
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Verify Employee With EmailId: Function called");
+
         try {
 
             $data = $this->request->getJSON();
-
             $email = $data->email;
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Received Email ID = " . $email);
+
+            $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email]); 
+            // print_r($empdata); die;
+
+            if(empty($empdata)){
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: No employee data found both PRE & POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                $result = ['user_verification' => false , 'message' => "User not found"];
+                return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200);
+            }
+
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: employee data both PRE & POST = " . json_encode($empdata));
 
             $employeeData = $this->employeeModel->select('
                 employees.relationship,
@@ -146,10 +223,18 @@ class RestAuthenticationController extends AdminController
                 ->where('employees.email_corporate', $email)
                 ->where('EP.is_active', 1)
                 ->whereIn('EP.status', ['draft', 'enrolled', 'expired'])
-                ->first();
+            ->first();
+
+            $employeeData = [];
+            if (isset($empdata['pre']) && !empty($empdata['pre'])) {
+                $employeeData = $empdata['pre'];
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Using PRE data");
+            } 
+
 
             if (isset($employeeData['employee_id'])) {
 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Valid employee found, generating OTP");
                 $otp = random_int(100000, 999999);
 
                 //  $update  = $this->employeeModel->where('email_corporate', $email)->where('relationship', 'self')
@@ -160,7 +245,7 @@ class RestAuthenticationController extends AdminController
                     UPDATE employees
                     INNER JOIN employee_polices ON employee_polices.employee_id = employees.id
                     SET employees.otp = ?
-                    WHERE employees.email_corporate = ?
+                    WHERE employees.id = ?
                     AND employees.relationship = 'self'
                     AND employees.is_active = 1
                     AND employee_polices.is_active = 1
@@ -168,12 +253,22 @@ class RestAuthenticationController extends AdminController
                 ";
 
                 $db = db_connect();
-                $update = $db->query($sql, [$otp, $email]);
+                // $update = $db->query($sql, [$otp, $email]);
+                $update = $db->query($sql, [$otp, $employeeData['employee_id']]);
 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: OTP update query executed. SQL = " . $db->getLastQuery());
 
                 if($update)
-                {
-                    $data->otp = $otp; 
+                {   
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: OTP updated successfully in PRE DATABASE");
+                    $data->otp = $otp;  
+                    if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) {
+                        $data->client_id = $empdata['post']['client_id']; 
+                        $data->employee_id = $empdata['post']['employee_id']; 
+                        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Attached otp, client_id and employee_id from POST data to update the otp");
+                    }
+
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Calling callThirdPartyAPI for updateEmpOTP");
                     $this->callThirdPartyAPI($data, 'updateEmpOTP');
 
 
@@ -185,34 +280,60 @@ class RestAuthenticationController extends AdminController
                         'employee_id' => $employeeData['employee_id'],
                         'mail_type' => 'otp_mail',
                     ];
+
                     $subject = 'Nhance user verification - OTP';
                     $mail_content = $otp . ' is your verification code for Nhance.';
+
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Sending OTP email to " . $employeeData['email_corporate']);
                     $res = MailHelper::send_email(['mail' => $employeeData['email_corporate'], 'subject' => $subject, 'common' => $common, 'message' => $mail_content]);
-                    $this->myLogger->logme("info", $res);
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Mail response = " . $res);
 
                     if (json_decode($res)->status == 'success') {
+                        log_message('error', '  ');
+                        log_message('error', '************************ PRE END ********************************');
                         $result = ['user_verification' => true, 'message' => "Verified Successfully"];
                         return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200);
                     } else {
+                        log_message('error', '  ');
+                        log_message('error', '************************ PRE END ********************************');
                         $result = ['user_verification' => false, 'message' => "Mail sending failed , try again"];
                         return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 200);
                     }
                 } else {
-
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: OTP update failed in PRE DATABASE");
+                    log_message('error', '  ');
+                    log_message('error', '************************ PRE END ********************************');
                     $result = ['user_verification' => false, 'message' => "Verification failed , try again"];
                     return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 200);
                 }
             } else {
+
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Employee not found with email in the PRE DATABASE, falling back to third-party API");
+                $apiParams = $this->request->getJSON();
+                if (!empty($empdata['post']['client_id'])) {
+                    $apiParams->client_id = $empdata['post']['client_id']; 
+                }
+                // print_r($apiParams); die;
                 // Call the third-party API function
-                return $this->callThirdPartyAPI($this->request->getJSON(), 'verifyEmployeeEmailId');
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                return $this->callThirdPartyAPI($apiParams, 'verifyEmployeeEmailId');
             }
         } catch (\Throwable $th) {
+            log_message('error', '  ');
+            log_message('error', '************************ PRE END ********************************');
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithEmailId: Exception: " . $th->getMessage() . " --- Line: " . $th->getLine() .  " --- Trace: " . $th->getTraceAsString());
             return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $th], 500);
         }
     }
 
     public function getVerifiedUserData()
-    {
+    {   
+        log_message('error', '  ');
+        log_message('error', '************************ PRE START ********************************');
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Get Verified User Data: Function called");
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: Received payload = " . json_encode($this->request->getJSON() ?? []));
+
         try {
            
             $otp_verification = isset($this->request->getJSON()->otp_verification) ? $this->request->getJSON()->otp_verification : null;
@@ -222,9 +343,25 @@ class RestAuthenticationController extends AdminController
             $email_id = isset($this->request->getJSON()->email_id) ? $this->request->getJSON()->email_id : null;
 
             if (isset($this->request->getJSON()->login_by_hr)) 
-            {
+            {   
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: login_by_hr detected, fetching employee data directly");
                 $employeeData = $this->employeeModel->where('id', $this->request->getJSON()->employee_id)->where('relationship', 'self')->where('emp_status !=', 'truncated')->where('is_active', 1)->first();
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: employeeData (login_by_hr) = " . json_encode($employeeData));
             }else{
+
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: Fetching empdata via RestAuthHelper");
+                $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'otp' => $otp, 'mobile_number' => $mobile_number ]); 
+                // print_r($empdata); die;
+
+                if(empty($empdata)){
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: empdata is empty");
+                    log_message('error', '  ');
+                    log_message('error', '************************ PRE END ********************************');
+                    return $this->respond(['status' => 'failed','code' => 404,'data' => []],200);                
+                }
+
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: empdata = " . json_encode($empdata));
+
                 if (isset($mobile_number)) 
                 {
                     // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->where('emp_status !=', 'truncated')->where('is_active', 1)->first();
@@ -240,13 +377,40 @@ class RestAuthenticationController extends AdminController
                         ->whereIn('EP.status', ['draft', 'enrolled'])
                         ->first();
                 } else {
-                    $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('otp', $otp)->where('relationship', 'self')->where('emp_status !=', 'truncated')->where('is_active', 1)->first();
+                    // $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('otp', $otp)->where('relationship', 'self')->where('emp_status !=', 'truncated')->where('is_active', 1)->first();
+                     $employeeData = $this->employeeModel
+                        ->select('employees.*')
+                        ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                        ->where('employees.email_corporate', $email_id)
+                        ->where('employees.relationship', 'Self')
+                        ->where('employee_polices.is_active', 1)
+                        ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                        ->where('employees.is_active', 1)
+                        ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                        ->where('employees.otp', $otp)
+                        ->orderBy('id', 'desc')
+                        ->first();
                 }   
+
+                $employeeData = [];
+                if (isset($empdata['pre']) && !empty($empdata['pre'])) {
+                    $employeeData = $empdata['pre'];
+                     $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: Using PRE data from empdata");
+                } 
+
             }
 
-            
+            $requestData = $this->request->getJSON();
+            if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) {
+                $requestData->client_id = $empdata['post']['client_id']; 
+                $requestData->employee_id = $empdata['post']['employee_id']; 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: Added client_id and employee_id to requestData for to get the POST employee data");
+            }
+            // print_r($requestData); die;
+
             if ($employeeData && $otp_verification == true || $employeeData && isset($this->request->getJSON()->login_by_hr) || $employeeData && isset($this->request->getJSON()->otp) ) 
-            {
+            {   
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: Verified employee found");
                 $auth =  HttpRequestHelper::getRequestInfo();
                 if ($auth) {
                     $data = [
@@ -259,26 +423,38 @@ class RestAuthenticationController extends AdminController
                      $this->authHistoryModel->insert($data);                    
                 }
               
-
+                // print_r($employeeData); die;
+                unset($employeeData['employee_id']);
+                $employeeData['token_type'] = "pre";
                 $result = JWTToken::encode($employeeData);
                 
                 if(isset($this->request->getJSON()->otp)){ 
-                    $this->employeeModel->where('email_corporate', $email_id)->where('otp', $otp)->where('relationship', 'self')->set(['otp'=>null])->update();
+                    $this->employeeModel->where('id', $employeeData['id'])->where('otp', $otp)->where('relationship', 'self')->set(['otp'=>null])->update();
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: Reset the otp to null");
                 }
 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: Calling third-party API - getVerifiedUserData to get the POST employee data");
+                log_message('error', '  '); 
+                log_message('error', '************************ PRE END ********************************');
                 // Call the third-party API function
-                $apiResponse = $this->callThirdPartyAPI($this->request->getJSON(),'getVerifiedUserData');
+                $apiResponse = $this->callThirdPartyAPI($requestData,'getVerifiedUserData');
                 return $this->respond(['status' => 'success','code' => 200,'data' => $result , 'post_enrollment'=> json_decode($apiResponse, true)],200);
 
             } else {
 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - getVerifiedUserData: Employee not verified - calling third-party API fallback to get the POST employee data"); 
+                log_message('error', '  '); 
+                log_message('error', '************************ PRE END ********************************');
                 // Call the third-party API function
-                $apiResponse = $this->callThirdPartyAPI($this->request->getJSON(),'getVerifiedUserData');
-                return $this->respond(['status' => 'failed','code' => 404,'data' => "Invalid OTP" , 'post_enrollment'=> json_decode($apiResponse, true)],200);
+                $apiResponse = $this->callThirdPartyAPI($requestData,'getVerifiedUserData');
+                return $this->respond(['status' => 'failed','code' => 404,'data' => [] , 'post_enrollment'=> json_decode($apiResponse, true)],200);
 
             }
         } catch (\Exception $e) {
-            return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()],500);
+            $this->myLogger->logme("error", "Exception: " . $e->getMessage() . " --- Line: " . $e->getLine() . " --- Trace: " . $e->getTraceAsString());
+            log_message('error', '  ');
+            log_message('error', '************************ PRE END ********************************');
+            return $this->respond(['status' => 'failed','code' => 500,'data' =>[], 'error' => $e->getMessage()],500);
         }
     }
 
@@ -352,7 +528,7 @@ class RestAuthenticationController extends AdminController
                     $subject = 'Nhance user verification - OTP';
                     $mail_content = $otp . ' is your verification code for Nhance.';
                     $res = MailHelper::send_email(['mail' => $email, 'subject' => $subject, 'common' => $common, 'message' => $mail_content]);
-                    $this->myLogger->logme("info", $res);
+                    $this->myLogger->logme("error", $res);
 
                     if (json_decode($res)->status == 'success') {
                         $result = ['user_verification' => true, 'message' => "Verified Successfully"];
@@ -377,13 +553,12 @@ class RestAuthenticationController extends AdminController
         }
     }
     
-
     public function getVerifiedHrData()
     {
         try {
             // mobile number 
             $otp_verification = isset($this->request->getJSON()->otp_verification) ? $this->request->getJSON()->otp_verification : null;
-            $mobile_number = isset($this->request->getJSON()->mobile_number) ? $this->request->getJSON()->mobile_number : null;
+            $mobile_number = isset($this->request->getJSON()->mobile_no) ? $this->request->getJSON()->mobile_no : null;
             // email id
             $otp = isset($this->request->getJSON()->otp) ? $this->request->getJSON()->otp : null;
             $email = isset($this->request->getJSON()->email) ? $this->request->getJSON()->email : null;
@@ -413,7 +588,7 @@ class RestAuthenticationController extends AdminController
                 }
               
 
-                if(isset($this->request->getJSON()->mobile_number)){ 
+                if(isset($this->request->getJSON()->mobile_no)){ 
 
                     $hrData = $this->hrModel ->select('level_contacts.* , client_branch.client_id as client_id')
                                             ->join('client_branch', 'level_contacts.ref_id = client_branch.id', 'left')
@@ -440,7 +615,8 @@ class RestAuthenticationController extends AdminController
                 $HRAccessRes = $this->callThirdPartyGETAPI($queryParams,'getHRAccessData');
                 $HRAccessData = json_decode($HRAccessRes,true);
                 if(isset($HRAccessData['data']['allowed_modules'])){ $hrData['0']['allowed_modules'] =  json_decode($HRAccessData['data']['allowed_modules'],true)['pre']; }else{ $hrData['0']['allowed_modules'] = []; }
-
+                
+                $hrData['0']['token_type'] = 'pre';
                 $result = JWTToken::encode($hrData['0']);
   
                 // Call the third-party API function
@@ -479,48 +655,125 @@ class RestAuthenticationController extends AdminController
 
 
     public function saveMpin()
-    {
+    {   
+        log_message('error', '  ');
+        log_message('error', '************************ PRE START ********************************');
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Save Mpin: Function called");
+        $payload = $this->request->getJSON() ?? [];
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - saveMpin: Request payload = " . json_encode($payload));
+
         try {
    
             $mobile_number = isset($this->request->getJSON()->mobile_number) ? $this->request->getJSON()->mobile_number : null;
             $email_id = isset($this->request->getJSON()->email_id) ? $this->request->getJSON()->email_id : null;
 
-            if (isset($mobile_number)) {
-                $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first();
-            } else {
-                $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('relationship', 'self')->first();
+            $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number ]); 
+            // print_r($empdata); die;
+
+            if(empty($empdata)){
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - saveMpin: No employee data found both PRE and POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                $result = ['user_verification' => false , 'message' => "User not found"];
+                return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200);
             }
 
-            $mpin = $this->request->getJSON()->mpin;
-          
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - saveMpin: empdata = " . json_encode($empdata));
 
-            
+            if (isset($mobile_number)) {
+                // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first();
+                $employeeData = $this->employeeModel
+                                    ->select('employees.*')
+                                    ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                    ->where('employees.mobile', $mobile_number)
+                                    ->where('employees.relationship', 'Self')
+                                    ->where('employee_polices.is_active', 1)
+                                    ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                                    ->where('employees.is_active', 1)
+                                    ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                                    ->orderBy('id', 'desc')
+                                    ->first();
+            } else {
+                // $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('relationship', 'self')->first();
+                   $employeeData = $this->employeeModel
+                                    ->select('employees.*')
+                                    ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                    ->where('employees.email_corporate', $email_id)
+                                    ->where('employees.relationship', 'Self')
+                                    ->where('employee_polices.is_active', 1)
+                                    ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                                    ->where('employees.is_active', 1)
+                                    ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                                    ->orderBy('id', 'desc')
+                                    ->first();
+            }
+
+            $employeeData = [];
+            if (isset($empdata['pre']) && !empty($empdata['pre'])) {
+                $employeeData = $empdata['pre'];
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - saveMpin: Using PRE data from empdata");
+            } 
+
+            $mpin = $this->request->getJSON()->mpin;
+            $is_mpin_skipped = $this->request->getJSON()->is_mpin_skipped;
+            $is_biometric_enabled = $this->request->getJSON()->is_biometric_enabled;
+          
+            $mpin_data_to_updata = [
+                'mpin' => $mpin,
+                'is_mpin_skipped' => $is_mpin_skipped,
+                'is_biometric_enabled' => $is_biometric_enabled
+            ];
+
+            $requestData = $this->request->getJSON();
+            if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) {
+                $requestData->client_id = $empdata['post']['client_id']; 
+                $requestData->employee_id = $empdata['post']['employee_id']; 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - saveMpin: Added client_id & employee_id to requestData to get the POST employee data");
+            }
             
             if ($employeeData) {
                 $id= $employeeData["id"];
-                $updateMpin = $this->employeeModel->where('id', $id)->set('mpin', $mpin)->update();
+                $updateMpin = $this->employeeModel->where('id', $id)->set($mpin_data_to_updata)->update();
                 if($updateMpin){
-                    $this->callThirdPartyAPI($this->request->getJSON(), 'updateEmpMPIN');
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - saveMpin: MPIN updated successfully");
+                    log_message('error', '  ');
+                    log_message('error', '************************ PRE END ********************************');
+                    $this->callThirdPartyAPI($requestData, 'saveMpin');
                     $result = ['user_verification' => true , 'message' => "Mpin Updated"];
                     return $this->respond(['status' => 'success','code' => 200,'data' => $result],200);
                 }else{
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - saveMpin: MPIN update failed");
+                    log_message('error', '  ');
+                    log_message('error', '************************ PRE END ********************************');
                     $result = ['user_verification' => true , 'message' => "Mpin Not Updated"];
                     return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200);
                 }
                
                
             } else {
-
-                return $this->callThirdPartyAPI($this->request->getJSON(), 'saveMpin');
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - saveMpin: Employee not found in final check, calling third-party API to the POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                return $this->callThirdPartyAPI($requestData, 'saveMpin');
             }
 
         } catch (\Throwable $th) {
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Exception: " . $th->getMessage() . " --- Line: " . $th->getLine() . " --- Trace: " . $th->getTraceAsString());
+            log_message('error', '  ');
+            log_message('error', '************************ PRE END ********************************');
             return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500);
         }
     }
 
     public function updateMpin()
-    {
+    {   
+        log_message('error', '  ');
+        log_message('error', '************************ PRE START ********************************');
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Update Mpin: Function called");
+        
+        $payload = $this->request->getJSON() ?? [];
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateMpin: Request payload = " . json_encode($payload));
+
         try {
 
             $mobile_number = isset($this->request->getJSON()->mobile_number) ? $this->request->getJSON()->mobile_number : null;
@@ -528,52 +781,171 @@ class RestAuthenticationController extends AdminController
             $old_mpin = $this->request->getJSON()->old_mpin;
             $mpin = $this->request->getJSON()->new_mpin;
 
-            if (isset($mobile_number)) 
-            {
-                $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('mpin', $old_mpin)->where('relationship', 'self')->first();
-            }else{
-                $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('mpin', $old_mpin)->where('relationship', 'self')->first();
+            $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number, 'old_mpin' => $old_mpin ]); 
+            // print_r($empdata); die;
+
+            if(empty($empdata)){
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateMpin: No employee data found both PRE and POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+
+                $result = ['user_verification' => false , 'message' => "User not found"];
+                return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200);
+            }
+
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateMpin: empdata = " . json_encode($empdata));
+
+            if (isset($mobile_number)) {
+                // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('mpin', $old_mpin)->where('relationship', 'self')->first();
+                $employeeData = $this->employeeModel
+                                    ->select('employees.*')
+                                    ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                    ->where('employees.mobile', $mobile_number)
+                                    ->where('employees.relationship', 'Self')
+                                    ->where('employee_polices.is_active', 1)
+                                    ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                                    ->where('employees.is_active', 1)
+                                    ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                                    ->where('employees.mpin', $old_mpin)
+                                    ->orderBy('id', 'desc')
+                                    ->first();
+            } else {
+                // $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('mpin', $old_mpin)->where('relationship', 'self')->first();
+                   $employeeData = $this->employeeModel
+                                    ->select('employees.*')
+                                    ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                    ->where('employees.email_corporate', $email_id)
+                                    ->where('employees.relationship', 'Self')
+                                    ->where('employee_polices.is_active', 1)
+                                    ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                                    ->where('employees.is_active', 1)
+                                    ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                                    ->where('employees.mpin', $old_mpin)
+                                    ->orderBy('id', 'desc')
+                                    ->first();
             }
           
-              
+            $employeeData = [];
+            if (isset($empdata['pre']) && !empty($empdata['pre'])) {
+                $employeeData = $empdata['pre'];
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateMpin: Using PRE data from empdata");
+            } 
+
+            $requestData = $this->request->getJSON();
+            if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) {
+                $requestData->client_id = $empdata['post']['client_id']; 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateMpin: Added client_id & employee_id to requestData to get the POST employee data");
+            }
             
             if ($employeeData) {
+
                 $id= $employeeData["id"];
                 $updateMpin = $this->employeeModel->where('id', $id)->set('mpin', $mpin)->update();
                 if($updateMpin){
-                    $this->callThirdPartyAPI($this->request->getJSON(), 'updateEmpMPIN');
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateMpin: MPIN updated successfully");
+                    log_message('error', '  ');
+                    log_message('error', '************************ PRE END ********************************');
+                    $this->callThirdPartyAPI($requestData, 'updateMpin');
                     $result = ['mpin_verification' => true , 'message' => "Mpin Updated"];
                     return $this->respond(['status' => 'success','code' => 200,'data' => $result],200);
                 }else{
+                    $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateMpin: MPIN update failed");
+                    log_message('error', '  ');
+                    log_message('error', '************************ PRE END ********************************');
+
                     $result = ['mpin_verification' => true , 'message' => "Mpin Not Updated"];
                     return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200);
                 }
-               
-               
+    
             } else {
-                return $this->callThirdPartyAPI($this->request->getJSON(), 'updateMpin');
+
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateMpin: Employee not found in final check, calling third-party API to the POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                return $this->callThirdPartyAPI($requestData, 'updateMpin');
 
             }
+
         } catch (\Throwable $th) {
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Exception: " . $th->getMessage() . " --- Line: " . $th->getLine() . " --- Trace: " . $th->getTraceAsString());
+            log_message('error', '  ');
+            log_message('error', '************************ PRE END ********************************');
             return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500);
         }
     }
 
     public function verifyMpin()
     {
+        log_message('error', '  ');
+        log_message('error', '************************ PRE START ********************************');
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Verify Mpin: Function called");
+
+        $payload = $this->request->getJSON() ?? [];
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyMpin: Request payload = " . json_encode($payload));
+
         try {
 
             $mobile_number = isset($this->request->getJSON()->mobile_number) ? $this->request->getJSON()->mobile_number : null;
             $email_id = isset($this->request->getJSON()->email_id) ? $this->request->getJSON()->email_id : null;
             $mpin = $this->request->getJSON()->mpin;
 
-            if (isset($mobile_number)) {
-                $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first();
-            } else {
-                $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('relationship', 'self')->first();
+            $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number]); 
+            // print_r($empdata); die;
+
+            if(empty($empdata)){
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyMpin: No employee data found both PRE and POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                return $this->respond(['status' => 'failed', 'code'   => 404, 'data' => []], 200);
             }
 
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyMpin: empdata = " . json_encode($empdata));
+
+            if (isset($mobile_number)) {
+                // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first();
+                 $employeeData = $this->employeeModel
+                                    ->select('employees.*')
+                                    ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                    ->where('employees.mobile', $mobile_number)
+                                    ->where('employees.relationship', 'Self')
+                                    ->where('employee_polices.is_active', 1)
+                                    ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                                    ->where('employees.is_active', 1)
+                                    ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                                    ->orderBy('id', 'desc')
+                                    ->first();
+            } else {
+                // $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('relationship', 'self')->first();
+                    $employeeData = $this->employeeModel
+                        ->select('employees.*')
+                        ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                        ->where('employees.email_corporate', $email_id)
+                        ->where('employees.relationship', 'Self')
+                        ->where('employee_polices.is_active', 1)
+                        ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                        ->where('employees.is_active', 1)
+                        ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                        ->orderBy('id', 'desc')
+                        ->first();
+            }
+
+            $employeeData = [];
+            if (isset($empdata['pre']) && !empty($empdata['pre'])) {
+                $employeeData = $empdata['pre'];
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyMpin: Using PRE data from empdata");
+            } 
+
+            $requestData = $this->request->getJSON();
+            if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) {
+                $requestData->client_id = $empdata['post']['client_id']; 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyMpin: Added client_id to requestData to get the POST employee data");
+            }
+
+
             if ($employeeData && $mpin == $employeeData["mpin"]) {
+
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyMpin: Verified employee found");
+
                 $auth =  HttpRequestHelper::getRequestInfo();
                 if ($auth) {
                     $data = [
@@ -587,53 +959,263 @@ class RestAuthenticationController extends AdminController
                     $authdata = $this->authHistoryModel->insert($data);
                 }
 
+                unset($employeeData['employee_id']);
+                $employeeData['token_type'] = "pre";
                 $result = JWTToken::encode($employeeData);
+
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyMpin: Calling third-party API - verifyMpin to get the POST employee data");
+                log_message('error', '  '); 
+                log_message('error', '************************ PRE END ********************************');
+
                 // Call the third-party API function
-                $apiResponse = $this->callThirdPartyAPI($this->request->getJSON(), 'verifyMpin');
+                $apiResponse = $this->callThirdPartyAPI($requestData, 'verifyMpin');
                 return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result, 'post_enrollment' => json_decode($apiResponse, true)], 200);
             } else {
 
-                // Call the third-party API function
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyMpin: Employee not verified - calling third-party API fallback to get the POST employee data"); 
+                log_message('error', '  '); 
+                log_message('error', '************************ PRE END ********************************');
 
-                $apiResponse = $this->callThirdPartyAPI($this->request->getJSON(), 'verifyMpin');
+
+                // Call the third-party API function
+                $apiResponse = $this->callThirdPartyAPI($requestData, 'verifyMpin');
                 return $this->respond(['status' => 'failed', 'code' => 404, 'data' => "Invalid OTP", 'post_enrollment' => json_decode($apiResponse, true)], 200);
 
                 //$apiResponse = $this->callThirdPartyAPI($this->request->getJSON(),'/getVerifiedUserData');
                 // return $this->respond(['status' => 'failed','code' => 404,'data' => "Invalid OTP", 'post_enrollment'=> json_decode($apiResponse, true)],200);
 
             }
+
         } catch (\Exception $e) {
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Exception: " . $e->getMessage() . " --- Line: " . $e->getLine() . " --- Trace: " . $e->getTraceAsString());
+            log_message('error', '  ');
+            log_message('error', '************************ PRE END ********************************');
             return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500);
             return $this->respond(['status' => 'failed', 'code' => 200, 'post_enrollment' => json_decode($apiResponse, true)], 200);
         }
     }
 
     public function checkMpin()
-    {
+    { 
+        log_message('error', '  ');
+        log_message('error', '************************ PRE START ********************************');
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Check Mpin: Function called");
+
+        $payload = $this->request->getJSON() ?? [];
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - checkMpin: Request payload = " . json_encode($payload));
+
         try {
             $mobile_number = isset($this->request->getJSON()->mobile_number) ? $this->request->getJSON()->mobile_number : null;
             $email_id = isset($this->request->getJSON()->email_id) ? $this->request->getJSON()->email_id : null;
 
+            $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number, 'check_mpin' => true]); 
+            // print_r($empdata); die;
+
+            if(empty($empdata)){
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - checkMpin: No employee data found both PRE and POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+
+                return $this->respond(['status' => 'failed','code' => 404,'data' => "Mpin - not found", 'Mpin' =>null],200);
+            }
+
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - checkMpin: empdata = " . json_encode($empdata));
+
             if (isset($mobile_number)) 
             {
-                $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first();
+                // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first();
+                $employeeData = $this->employeeModel
+                                    ->select('employees.*')
+                                    ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                    ->where('employees.mobile', $mobile_number)
+                                    ->where('employees.relationship', 'Self')
+                                    ->where('employee_polices.is_active', 1)
+                                    ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                                    ->where('employees.is_active', 1)
+                                    ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                                    ->orderBy('id', 'desc')
+                                    ->first();
             }else{
-                $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('relationship', 'self')->first();
+                // $employeeData = $this->employeeModel->where('email_corporate', $email_id)->where('relationship', 'self')->first();
+                 $employeeData = $this->employeeModel
+                        ->select('employees.*')
+                        ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                        ->where('employees.email_corporate', $email_id)
+                        ->where('employees.relationship', 'Self')
+                        ->where('employee_polices.is_active', 1)
+                        ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                        ->where('employees.is_active', 1)
+                        ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                        ->orderBy('id', 'desc')
+                        ->first();
+            }
+
+                      
+            $employeeData = [];
+            if (isset($empdata['pre']) && !empty($empdata['pre'])) {
+                $employeeData = $empdata['pre'];
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - checkMpin: Using PRE data from empdata");
+            } 
+
+            $requestData = $this->request->getJSON();
+            if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) {
+                $requestData->client_id = $empdata['post']['client_id']; 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - checkMpin: Added client_id to requestData to get the POST employee data");
             }
             
+            
             if ($employeeData &&  $employeeData["mpin"] != null) {
-               
-                return $this->respond(['status' => 'success','code' => 200,'data' => "Mpin - exist" , 'Mpin' =>$employeeData["mpin"]],200);
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - checkMpin: Mpin - Exist");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                return $this->respond(['status' => 'success','code' => 200,'data' => "Mpin - exist" , 'Mpin' =>$employeeData["mpin"], 'is_mpin_skipped' => $employeeData['is_mpin_skipped'], 'is_biometric_enabled' => $employeeData['is_biometric_enabled']],200);
             } else {
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - checkMpin: Mpin - not found in PRE so call the thirdpartapi to the POST to check the MPIN");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
                 // return $this->respond(['status' => 'failed','code' => 404,'data' => "Mpin - not found", 'Mpin' =>null],200);
-                return $this->callThirdPartyAPI($this->request->getJSON(), 'checkMpin');
-
+                return $this->callThirdPartyAPI($requestData, 'checkMpin');
             }
+            
         } catch (\Exception $e) {
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Exception: " . $e->getMessage() . " --- Line: " . $e->getLine() . " --- Trace: " . $e->getTraceAsString());
+            log_message('error', '  ');
+            log_message('error', '************************ PRE END ********************************');
             return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()],500);
         }
     }
 
+    public function forgotMPIN()
+    {   
+        log_message('error', '  ');
+        log_message('error', '************************ PRE START ********************************');
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Forgot Mpin: Function called");
+
+        $payload = $this->request->getJSON() ?? [];
+        $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - forgotMPIN: Request payload = " . json_encode($payload));
+
+        try {
+
+            $json = $this->request->getJSON();
+            $mobile_number = $json->mobile_number ?? null;
+            $email_id = $json->email_id ?? null;
+
+            // Step 1: Check input
+            if (!$mobile_number && !$email_id) {
+                log_message('error', 'Mobile number and email ID are both missing.');
+                return $this->respond([
+                    'status' => 'failed',
+                    'code' => 400,
+                    'message' => 'Mobile number or email ID is required.'
+                ], 400);
+            }
+
+            $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number]); 
+            // print_r($empdata); die;
+
+            if(empty($empdata)){
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - forgotMpin: No employee data found both PRE and POST");
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+
+                return $this->respond(['status' => 'failed','code' => 404,'data' => "Mpin - not found", 'Mpin' =>null],200);
+            }
+
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - forgotMPIN: empdata = " . json_encode($empdata));
+
+            // Step 2: Fetch employee data
+            if ($mobile_number) {
+                log_message('info', 'Looking up employee by mobile number: ' . $mobile_number);
+                $employeeData = $this->employeeModel
+                                    ->select('employees.*')
+                                    ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                    ->where('employees.mobile', $mobile_number)
+                                    ->where('employees.relationship', 'Self')
+                                    ->where('employee_polices.is_active', 1)
+                                    ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                                    ->where('employees.is_active', 1)
+                                    ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                                    ->orderBy('id', 'desc')
+                                    ->first();
+            } else {
+                log_message('info', 'Looking up employee by email: ' . $email_id);
+                $employeeData = $this->employeeModel
+                                    ->select('employees.*')
+                                    ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                    ->where('employees.email_corporate', $email_id)
+                                    ->where('employees.relationship', 'Self')
+                                    ->where('employee_polices.is_active', 1)
+                                    ->whereIn('employee_polices.status', ['draft', 'enrolled'])
+                                    ->where('employees.is_active', 1)
+                                    ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                                    ->orderBy('id', 'desc')
+                                    ->first();
+            }
+
+            $employeeData = [];
+            if (isset($empdata['pre']) && !empty($empdata['pre'])) {
+                $employeeData = $empdata['pre'];
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - forgotMPIN: Using PRE data from empdata");
+            } 
+
+            if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) {
+                $json->client_id = $empdata['post']['client_id']; 
+                $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - forgotMPIN: Added client_id to requestData to get the POST employee data");
+            }
+
+            // Step 3: Found employee
+            if (!empty($employeeData)) {
+                log_message('info', 'Employee found: ID = ' . $employeeData['id']);
+
+                $updateData = [
+                    'mpin' => null,
+                    'is_mpin_skipped' => null,
+                    'is_biometric_enabled' => null
+                ];
+
+                log_message('info', 'Updating employee MPIN fields to null for ID: ' . $employeeData['id']);
+
+                $updated = $this->employeeModel->where('id', $employeeData['id'])->set($updateData)->update();
+
+                if ($updated) {
+                    $this->callThirdPartyAPI($json, 'forgotMPIN');
+                    log_message('info', 'MPIN reset successful for employee ID: ' . $employeeData['id']);
+                    log_message('error', '  ');
+                    log_message('error', '************************ PRE END ********************************');
+                    return $this->respond(['status' => 'success','code' => 200,'message' => 'MPIN reset successfully.' ], 200);
+                } else {
+                    log_message('error', 'Failed to update MPIN fields for employee ID: ' . $employeeData['id']);
+                    log_message('error', '  ');
+                    log_message('error', '************************ PRE END ********************************');
+                    return $this->respond([
+                        'status' => 'failed',
+                        'code' => 500,
+                        'message' => 'Could not reset MPIN values.',
+                    ], 500);
+                }
+            } else {
+                // Step 4: Not found in local DB — call external fallback
+                log_message('warning', 'Employee not found locally. Falling back to third-party API.');
+                log_message('error', '  ');
+                log_message('error', '************************ PRE END ********************************');
+                return $this->callThirdPartyAPI($json, 'forgotMPIN');
+            }
+        } catch (\Throwable $e) {
+            $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - Exception: " . $e->getMessage() . " --- Line: " . $e->getLine() . " --- Trace: " . $e->getTraceAsString());
+            log_message('error', '  ');
+            log_message('error', '************************ PRE END ********************************');
+            return $this->respond(['status' => 'failed','code' => 500,'message' => 'Server error: ' . $e->getMessage() ], 500);
+        }
+    }
+
+    public function logHrActivity()
+    {
+        $log_data = $this->request->getJSON();
+        $postDB = \Config\Database::connect('postDB');
+        // print_r($json);die();
+        $postDB->table('user_activity_history')->insert($log_data);
+        return $this->respond(['status' => 'success','code' => 200,'data' => "logged",],200);
+
+    }
 
-    
 }
\ No newline at end of file
diff --git a/app/Helpers/RestAuthHelper.php b/app/Helpers/RestAuthHelper.php
new file mode 100644
index 0000000..27d16b0
--- /dev/null
+++ b/app/Helpers/RestAuthHelper.php
@@ -0,0 +1,436 @@
+ $mobile_number,
+    //         'email_id'      => $email_id,
+    //         'otp'           => $otp,
+    //         '$old_mpin'     => $old_mpin,
+    //     ];
+
+    //     $pre_data  = self::getPreEmployeeData($params);
+    //     $post_data = self::getPostEmployeeData($params);
+
+    //     // Return empty array if both are missing
+    //     if (empty($pre_data) && empty($post_data)) {
+    //         return [];
+    //     }
+
+    //     // Determine the latest record
+    //     $latest_key = null;
+    //     if (!empty($pre_data) && !empty($post_data)) {
+    //         $latest_key = strtotime($pre_data['created_at']) > strtotime($post_data['created_at']) ? 'pre' : 'post';
+    //     } elseif (!empty($pre_data)) {
+    //         $latest_key = 'pre';
+    //     } elseif (!empty($post_data)) {
+    //         $latest_key = 'post';
+    //     }
+
+    //     // Compare client_short_name only if both records exist
+    //     if (!empty($pre_data) && !empty($post_data)) {
+    //         $latest_data = $latest_key === 'pre' ? $pre_data : $post_data;
+    //         $other_data  = $latest_key === 'pre' ? $post_data : $pre_data;
+
+    //         if ($latest_data['client_short_name'] === $other_data['client_short_name']) {
+    //             return [
+    //                 'pre'  => $pre_data,
+    //                 'post' => $post_data,
+    //             ];
+    //         }
+    //     }
+
+    //     // If one of the data is missing or client names mismatch
+    //     return [
+    //         'pre'  => $latest_key === 'pre' ? $pre_data : [],
+    //         'post' => $latest_key === 'post' ? $post_data : [],
+    //     ];
+    // }
+
+    // public static function getPreEmployeeData(array $params)
+    // {
+    //     $employeeModel = new EmployeeModel();
+
+    //     $mobile_number = $params['mobile_number'] ?? null;
+    //     $email_id      = $params['email_id'] ?? null;
+    //     $otp      = $params['otp'] ?? null;
+    //     $old_mpin      = $params['old_mpin'] ?? null;
+
+    //     if (!empty($mobile_number)) {
+    //         $builder = $employeeModel
+    //             ->select('employees.id as employee_id, employees.*')
+    //             ->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner')
+    //             ->where('employees.is_active', 1)
+    //             ->where("TRIM(employees.relationship) = 'self'", null, false)
+    //             ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+    //             ->where('employees.mobile', $mobile_number)
+    //             ->where('EP.is_active', 1)
+    //             ->whereIn('EP.status', ['draft', 'enrolled']);
+
+    //         if (!empty($old_mpin)) {
+    //             $builder->where('employees.mpin', $old_mpin);
+    //         }
+
+    //         $employeeData = $builder->orderBy('employees.id', 'desc')->first();
+
+    //     } elseif (!empty($email_id)) {
+    //         $builder = $employeeModel
+    //             ->select('employees.id as employee_id, employees.*')
+    //             ->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner')
+    //             ->where('employees.is_active', 1)
+    //             ->where("TRIM(employees.relationship) = 'self'", null, false)
+    //             ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+    //             ->where('employees.email_corporate', $email_id)
+    //             ->where('EP.is_active', 1)
+    //             ->whereIn('EP.status', ['draft', 'enrolled']);
+
+    //         if (!empty($otp)) {
+    //             $builder->where('employees.otp', $otp);
+    //         }
+
+    //         if (!empty($old_mpin)) {
+    //             $builder->where('employees.mpin', $old_mpin);
+    //         }
+
+    //         $employeeData = $builder->orderBy('employees.id', 'desc')->first();
+
+    //     } else {
+    //         return null;
+    //     }
+
+    //     if($employeeData){
+    //         $clientModel = new ClientModel;
+    //         $client_data = $clientModel->where('is_active', 1)->where('id', $employeeData['client_id'])->first();
+    //         $employeeData['client_short_name'] = $client_data['short_name'];
+    //     }
+
+    //     return $employeeData;
+    // }
+
+    // public static function getPostEmployeeData(array $params)
+    // {   
+    //     // print_r($params); die;
+    //     $mobile_number = $params['mobile_number'] ?? null;
+    //     $email_id      = $params['email_id'] ?? null;
+    //     $otp      = $params['otp'] ?? null;
+    //     $old_mpin      = $params['old_mpin'] ?? null;
+
+
+    //     if (!empty($mobile_number) || !empty($email_id)) {
+
+    //         $client = \Config\Services::curlrequest();
+    //         $endPoint = 'getPostEmployeeDataForAuth';
+    //         $url = env('POST_ENROLLMENT_BASEURL') . $endPoint;
+
+    //         $postData = [];
+
+    //         if (!empty($mobile_number)) {
+    //             $postData['mobile_number'] = $mobile_number;
+    //         }
+
+    //         if (!empty($email_id)) {
+    //             $postData['email_id'] = $email_id;
+    //         }
+
+    //         if (!empty($otp)) {
+    //             $postData['otp'] = $otp;
+    //         }
+
+    //         if (!empty($old_mpin)) {
+    //             $postData['old_mpin'] = $old_mpin;
+    //         }
+
+    //         $response = $client->post( $url, ['json' => $postData, 'http_errors' => false]);
+    //         $post_json = $response->getBody();
+    //         $post_data = json_decode($post_json, true);
+
+    //         return $post_data['data'];
+    //     }
+    // }
+
+    public static function getPreAndPostDataByEmailOrMobile($params)
+    {
+        log_message('error', 'Function getPreAndPostDataByEmailOrMobile called with: ' . json_encode($params));
+
+        $mobile_number = $params['mobile_number'] ?? null;
+        $email_id      = $params['email_id'] ?? null;
+        $otp           = $params['otp'] ?? null;
+        $old_mpin      = $params['old_mpin'] ?? null;
+        $check_mpin    = $params['check_mpin'] ?? null;
+
+        if (empty($mobile_number) && empty($email_id)) {
+            log_message('error', 'Both mobile_number and email_id are empty. Returning null.');
+            return null;
+        }
+
+        $params = [
+            'mobile_number' => $mobile_number,
+            'email_id'      => $email_id,
+            'otp'           => $otp,
+            'old_mpin'      => $old_mpin,
+        ];
+
+        $pre_data  = self::getPreEmployeeData($params);
+        $post_data = self::getPostEmployeeData($params);
+
+        log_message('error', 'Pre Data: ' . json_encode($pre_data));
+        log_message('error', 'Post Data: ' . json_encode($post_data));
+
+        if (empty($pre_data) && empty($post_data)) {
+            log_message('error', 'Both pre_data and post_data are empty. Returning empty array.');
+            return [];
+        }
+
+        $latest_key = null;
+        if (!empty($pre_data) && !empty($post_data)) {
+            $latest_key = strtotime($pre_data['created_at']) > strtotime($post_data['created_at']) ? 'pre' : 'post';
+        } elseif (!empty($pre_data)) {
+            $latest_key = 'pre';
+        } elseif (!empty($post_data)) {
+            $latest_key = 'post';
+        }
+
+        log_message('error', 'Latest key determined as: ' . $latest_key);
+
+        if (!empty($pre_data) && !empty($post_data)) {
+            $latest_data = $latest_key === 'pre' ? $pre_data : $post_data;
+            $other_data  = $latest_key === 'pre' ? $post_data : $pre_data;
+
+            if ($latest_data['client_short_name'] === $other_data['client_short_name']) {
+                log_message('error', 'client_short_name match. Returning both records.');
+
+                if ($check_mpin !== null && ($pre_data['mpin'] !== null || $post_data['mpin'] !== null)) {
+
+                    // Case: Pre MPIN is missing, update it from Post
+                    if ($pre_data['mpin'] === null && $post_data['mpin'] !== null) {
+                        $data = [
+                            'client_id'   => $pre_data['client_id'],
+                            'employee_id' => $pre_data['id'],
+                            'mpin'        => $post_data['mpin'],
+                            'is_mpin_skipped' => $post_data['is_mpin_skipped'],
+                            'is_biometric_enabled' => $post_data['is_biometric_enabled'],
+                        ];
+                        $response = self::updatePreMpin($data);
+
+                        // Case: Post MPIN is missing, update it from Pre
+                    } elseif ($post_data['mpin'] === null && $pre_data['mpin'] !== null) {
+                        $data = [
+                            'client_id'   => $post_data['client_id'],
+                            'employee_id' => $post_data['id'],
+                            'mpin'        => $pre_data['mpin'],
+                            'is_mpin_skipped'        => $pre_data['is_mpin_skipped'],
+                            'is_biometric_enabled'   => $pre_data['is_biometric_enabled'],
+                        ];
+                        $response = self::updatePostMpin($data);
+                    }
+                }
+
+                return ['pre' => $pre_data, 'post' => $post_data];
+            }
+        }
+
+        $result = [
+            'pre'  => $latest_key === 'pre' ? $pre_data : [],
+            'post' => $latest_key === 'post' ? $post_data : [],
+        ];
+
+        log_message('error', 'Returning data: ' . json_encode($result));
+        return $result;
+    }
+
+    public static function getPreEmployeeData(array $params)
+    {
+        log_message('error', 'Function getPreEmployeeData called with: ' . json_encode($params));
+
+        $employeeModel = new EmployeeModel();
+
+        $mobile_number = $params['mobile_number'] ?? null;
+        $email_id      = $params['email_id'] ?? null;
+        $otp           = $params['otp'] ?? null;
+        $old_mpin      = $params['old_mpin'] ?? null;
+
+        $employeeData = null;
+
+        if (!empty($mobile_number)) {
+            log_message('error', 'Searching employee by mobile_number: ' . $mobile_number);
+
+            $builder = $employeeModel
+                ->select('employees.id as employee_id, employees.*')
+                ->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner')
+                ->where('employees.is_active', 1)
+                ->where("TRIM(employees.relationship) = 'self'", null, false)
+                ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                ->where('employees.mobile', $mobile_number)
+                ->where('EP.is_active', 1)
+                ->whereIn('EP.status', ['draft', 'enrolled']);
+
+            if (!empty($old_mpin)) {
+                $builder->where('employees.mpin', $old_mpin);
+            }
+
+            $employeeData = $builder->orderBy('employees.id', 'desc')->first();
+        } elseif (!empty($email_id)) {
+            log_message('error', 'Searching employee by email_id: ' . $email_id);
+
+            $builder = $employeeModel
+                ->select('employees.id as employee_id, employees.*')
+                ->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner')
+                ->where('employees.is_active', 1)
+                ->where("TRIM(employees.relationship) = 'self'", null, false)
+                ->whereIn('employees.emp_status', ['draft', 'enrolled'])
+                ->where('employees.email_corporate', $email_id)
+                ->where('EP.is_active', 1)
+                ->whereIn('EP.status', ['draft', 'enrolled']);
+
+            if (!empty($otp)) {
+                $builder->where('employees.otp', $otp);
+            }
+
+            if (!empty($old_mpin)) {
+                $builder->where('employees.mpin', $old_mpin);
+            }
+
+            $employeeData = $builder->orderBy('employees.id', 'desc')->first();
+        } else {
+            log_message('warning', 'No mobile or email found. Returning null.');
+            return null;
+        }
+
+        log_message('error', 'Pre employee data fetched: ' . json_encode($employeeData));
+
+        if ($employeeData) {
+            $clientModel = new ClientModel;
+            $client_data = $clientModel->where('is_active', 1)->where('id', $employeeData['client_id'])->first();
+            $employeeData['client_short_name'] = $client_data['short_name'] ?? '';
+            log_message('error', 'Client short name attached: ' . $employeeData['client_short_name']);
+        }
+
+        return $employeeData;
+    }
+
+    public static function getPostEmployeeData(array $params)
+    {
+        log_message('error', 'Function getPostEmployeeData called with: ' . json_encode($params));
+
+        $mobile_number = $params['mobile_number'] ?? null;
+        $email_id      = $params['email_id'] ?? null;
+        $otp           = $params['otp'] ?? null;
+        $old_mpin      = $params['old_mpin'] ?? null;
+
+        if (!empty($mobile_number) || !empty($email_id)) {
+            $client = \Config\Services::curlrequest();
+            $endPoint = 'getPostEmployeeDataForAuth';
+            $url = env('POST_ENROLLMENT_BASEURL') . $endPoint;
+
+            $postData = [];
+
+            if (!empty($mobile_number)) {
+                $postData['mobile_number'] = $mobile_number;
+            }
+
+            if (!empty($email_id)) {
+                $postData['email_id'] = $email_id;
+            }
+
+            if (!empty($otp)) {
+                $postData['otp'] = $otp;
+            }
+
+            if (!empty($old_mpin)) {
+                $postData['old_mpin'] = $old_mpin;
+            }
+
+            log_message('error', 'Sending POST to external API: ' . $url);
+            log_message('error', 'POST payload: ' . json_encode($postData));
+
+            $response = $client->post($url, ['json' => $postData, 'http_errors' => false]);
+
+            $post_json = $response->getBody();
+            // log_message('error', 'Response from API: ' . $post_json);
+
+            $post_data = json_decode($post_json, true);
+
+            $data = $post_data['data'] ?? [];
+            log_message('error', 'Parsed post_data: ' . json_encode($data));
+            return $data;
+        }
+
+        log_message('warning', 'No mobile or email present in params for post fetch.');
+    }
+
+    public static function updatePreMpin(array $params)
+    {
+        log_message('info', 'Function updatePostMpin called with: ' . json_encode($params));
+
+        $employee_id = $params['employee_id'] ?? null;
+        $mpin        = $params['mpin'] ?? null;
+
+        if (empty($employee_id) || empty($mpin)) {
+            log_message('error', 'Missing employee_id or mpin in updatePreMpin');
+            return false;
+        }
+
+        try {
+            $employeeModel = new EmployeeModel();
+            $result = $employeeModel
+                ->where('id', $employee_id)
+                ->set('mpin', $mpin)
+                ->update();
+
+            log_message('info', 'MPIN update status (Pre): ' . var_export($result, true));
+            return $result;
+        } catch (\Exception $e) {
+            log_message('error', 'Exception in updatePreMpin: ' . $e->getMessage());
+            return false;
+        }
+    }
+
+    public static function updatePostMpin(array $params)
+    {
+        if (isset($params['mpin']) && isset($params['employee_id'])) {
+
+            $client = \Config\Services::curlrequest();
+            $endPoint = 'updateEmpMPIN';
+            $url = env('POST_ENROLLMENT_BASEURL') . $endPoint;
+
+            log_message('info', '[updatePostMpin] Sending POST to external API: ' . $url);
+            log_message('debug', '[updatePostMpin] Request Payload: ' . json_encode($params));
+
+            $response = $client->post($url, ['json' => $params, 'http_errors' => false]);
+
+            $post_json = $response->getBody();
+            log_message('info', '[updatePostMpin] Raw API Response: ' . $post_json);
+
+            $post_data = json_decode($post_json, true);
+
+            $data = $post_data['data'] ?? [];
+            log_message('debug', '[updatePostMpin] Parsed Response Data: ' . json_encode($data));
+
+            return $data;
+        }
+
+        log_message('warning', '[updatePostMpin] Missing required parameters: employee_id or mpin');
+        return false;
+    }
+}
diff --git a/app/Models/EmployeeModel.php b/app/Models/EmployeeModel.php
index 97c2dfe..3a23f98 100755
--- a/app/Models/EmployeeModel.php
+++ b/app/Models/EmployeeModel.php
@@ -42,7 +42,9 @@ class EmployeeModel extends Model
         "token_time_out",
         "emp_type",
         "unit",
-        "mpin"
+        "mpin",
+        "is_mpin_skipped",
+        "is_biometric_enabled",
     ];
 
       // Callbacks
diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php
index ff80bc7..d29c75f 100755
--- a/app/Models/EmployeePolicyModel.php
+++ b/app/Models/EmployeePolicyModel.php
@@ -1849,4 +1849,99 @@ class EmployeePolicyModel extends Model
 
         return $result[0];
     }
+
+    public function download_inception($client_id = 0, $branch_id = 0,  $policy_id = 0, $status = [], $emp_code = "", $emp_name = ""){
+            
+        $result = $this->select([
+
+            'emp.emp_code AS `Emp ID`',
+            'emp.name AS `Name of Emp/Dep`',
+            "DATE_FORMAT(emp.dob, '%d-%b-%Y') AS `DOB`",
+            'emp.gender As `Gender`',
+            'emp.relationship As `Relationship`',
+
+            'employee_polices.basic_cover_si As `Basic cover SI`',
+
+            "DATE_FORMAT(employee_polices.date_coverage, '%d-%b-%Y') AS `Date of Coverage`",
+            "DATE_FORMAT(emp.doj, '%d-%b-%Y') AS `DOJ`",
+            'emp.basic_pay As `Basic Pay`',
+            'emp.band  As `Band/Grade`',
+            'emp.designation  As `Designation`',
+
+            'emp.mobile as Phone',
+            'emp.email_corporate As Email',
+
+            'COALESCE(employee_polices.pre_existing_alignments, 0) as `PRE EXISTING AILMENTS`',
+
+            'emp.change_event',
+            'employee_polices.date_of_exit',
+            'employee_polices.reason_for_exit',
+
+            'emp.unit'
+             
+        ])
+            ->join('employees emp', 'employee_polices.employee_id = emp.id')
+            ->join('client_policy cp', 'employee_polices.client_policy_id = cp.id') //cp - client policy
+            ->join('policies pm', 'cp.policy_id = pm.id', 'left') //pm - policy master
+            ->join('policy_type', 'policy_type.id = cp.policy_type_id')
+            ->join('insurers im', 'cp.insurer_id = im.id', 'left') //im - insurer master
+            ->join('insurer_branch ib', 'cp.insurer_branch_id = ib.id', 'left') //ib - insurer branch
+            ->join('tpa tpam', 'cp.tpa_id = tpam.id', 'left') //tpam - tpa master
+            ->join('tpa_branch tpab', 'cp.tpa_branch_id = tpab.id', 'left') //tpab - tpa branch
+            ->join('clients cm', 'cp.client_id = cm.id') //cm - client master
+            ->join('client_branch', 'emp.client_branch_id = client_branch.id') //cm - client master
+            ->orderBy('emp.emp_code', 'ASC')
+            ->orderBy('employee_polices.employee_id', 'ASC');
+
+       
+            // Conditionally add where clauses
+        if ($client_id != 0 && !empty(trim($client_id))) {
+            $result->where('emp.client_id', $client_id);
+        }
+        if ($branch_id != 0 && !empty(trim($branch_id))) {
+            $result->where('emp.client_branch_id', $branch_id);
+        }
+        if ($policy_id != 0 && !empty(trim($policy_id))) {
+            $result->where('employee_polices.client_policy_id', $policy_id);
+        }
+
+        // if (is_array($status) && count($status) > 0) {
+
+        //     $result->where('employee_polices.status !=', 'expired');
+
+        //     if (in_array("active", $status)) {
+
+        //         $result->where('employee_polices.tpa_id IS NOT NULL');
+        //         $result->where('employee_polices.uhid IS NOT NULL');
+        //         $result->whereIn('employee_polices.status', $status);
+        //     } elseif (in_array("pending", $status)) {
+
+        //         $result->where('employee_polices.tpa_id IS NULL');
+        //         $result->where('employee_polices.uhid IS NULL');
+        //         $result->whereIn('employee_polices.status', array_merge($status, ['active']));
+        //     } else {
+
+        //         $result->whereIn('employee_polices.status', $status);
+        //     }
+        // }
+
+        $result->where('employee_polices.status =', 'enrolled');
+
+        if (!empty(trim($emp_code))) {
+            $result->where('emp.emp_code', $emp_code);
+        }
+        if (!empty(trim($emp_name))) {
+            $result->like('emp.name', $emp_name);
+        }
+
+        // Always check these conditions
+        $result->where('employee_polices.is_active', 1)
+        ->where('emp.is_active', 1);
+
+        $res = $result->findAll();
+
+        return $res;
+    }
+
+
 }
\ No newline at end of file
diff --git a/app/Models/FileModel.php b/app/Models/FileModel.php
index c6f04f6..5b27a7d 100755
--- a/app/Models/FileModel.php
+++ b/app/Models/FileModel.php
@@ -19,7 +19,8 @@ class FileModel extends Model
         "client_id",
         "policy_id",
         "client_branch_id",
-        "uploaded_by"
+        "uploaded_by",
+        "updated_by"
     ];
 
 
diff --git a/app/Views/client_basic_info.php b/app/Views/client_basic_info.php
index 08c991a..ab3233a 100755
--- a/app/Views/client_basic_info.php
+++ b/app/Views/client_basic_info.php
@@ -98,7 +98,7 @@ input:checked + .slider:before {
                                 
                                 
+                                    placeholder="Enter Short Name" value="" name="short_name" onkeyup="validateInput(this, 'clients', 'short_name', 'clientBtnSubmit')" required>
                             
                         
 
@@ -137,7 +137,7 @@ input:checked + .slider:before {
 
                     
+ id="clientBtnSubmit">Submit
diff --git a/app/Views/client_branch.php b/app/Views/client_branch.php index 2622d41..9ef5c5a 100755 --- a/app/Views/client_branch.php +++ b/app/Views/client_branch.php @@ -160,7 +160,7 @@
- +
+ id="branchBtnSubmit">Submit
@@ -352,6 +355,9 @@ $("#branch_form").submit(function(event) { var selectedValues = $("#selected").val(); console.log(selectedValues, selectedValues); + let level_contect_data = getContactsData(); + console.log('level_contect_data', level_contect_data); + event.preventDefault(); branch_PrimaryKey = $('#client_id_branch').val(); @@ -375,11 +381,14 @@ $("#branch_form").submit(function(event) { var formData = new FormData($('#branch_form')[0]); const jsonString = JSON.stringify(selectedValues); + const level_contect_data_json_string = JSON.stringify(level_contect_data); console.log('jsonString', jsonString); + console.log('level_contect_data_json_string', level_contect_data_json_string); // Append the JSON string to the FormData object formData.append('units', jsonString); + formData.append('level_contect_data', level_contect_data_json_string); $.ajax({ data: formData, @@ -500,6 +509,8 @@ $('body').on('click', '.btnBranchEdit', function() { dataType: 'json', success: function(res) { + console.log('client branch edit data response : ', res); + setTimeout(function() { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); @@ -530,10 +541,24 @@ $('body').on('click', '.btnBranchEdit', function() { appendOption(res.data.units) - $('#name').val(res.contact[0].name); - $('#email').val(res.contact[0].email); - $('#mobile').val(res.contact[0].mobile); - $('#designation').val(res.contact[0].designation); + // $('#name').val(res.contact[0].name); + // $('#email').val(res.contact[0].email); + // $('#mobile').val(res.contact[0].mobile); + // $('#designation').val(res.contact[0].designation); + + if (res.contact && res.contact.length > 0 && res.contact[0]) { + $('#branch_table_pk').val(res.contact[0].id || ''); + $('#name').val(res.contact[0].name || ''); + $('#email').val(res.contact[0].email || ''); + $('#mobile').val(res.contact[0].mobile || ''); + $('#designation').val(res.contact[0].designation || ''); + } else { + $('#branch_table_pk').val(''); + $('#name').val(''); + $('#email').val(''); + $('#mobile').val(''); + $('#designation').val(''); + } res.contact.shift(); // console.log(res.contact.length) @@ -559,12 +584,12 @@ $('body').on('click', '.btnBranchEdit', function() { console.log(branch_form_action); }); -$("#remove_btn").click(function() { - $("#name").val(''); - $("#email").val(''); - $("#mobile").val(''); - $("#designation").val(''); -}) +// $("#remove_btn").click(function() { +// $("#name").val(''); +// $("#email").val(''); +// $("#mobile").val(''); +// $("#designation").val(''); +// }) // Initialize the contact count function appendContactHtml(contact = false, reset = false) { @@ -584,6 +609,7 @@ function appendContactHtml(contact = false, reset = false) {
+
@@ -596,11 +622,11 @@ function appendContactHtml(contact = false, reset = false) {
- +
- +
@@ -623,20 +649,50 @@ function appendContactHtml(contact = false, reset = false) { } function removeContact(button) { + var uniqueId = button.id.split("_")[0]; + console.log('uniqueId', uniqueId); var contactSection = document.getElementById(uniqueId); + console.log('contactSection', contactSection); - if (contactSection) { - contactSection.parentNode.removeChild(contactSection); - contactCount--; + confirmActionSweertAlert("Do you want to remove this contact?", "Yes, Proceed!", "No, Cancel").then((confirmed) => { + if(confirmed){ + if (contactSection) { - if (contactCount < 3) { - var addButton = document.querySelector('.ac'); - if (addButton) { - addButton.style.display = 'block'; + let unique_param = uniqueId + '_branch_table_pk'; + console.log('unique_param', unique_param); + let other_id = $('#' + unique_param).val(); + console.log('other_id', other_id); + + contactSection.parentNode.removeChild(contactSection); + contactCount--; + + if (contactCount < 3) { + var addButton = document.querySelector('.ac'); + if (addButton) { + addButton.style.display = 'block'; + } + } + + if(other_id){ + removeLevelContacts(other_id); + } + + }else{ + + $("#name").val(''); + $("#email").val(''); + $("#mobile").val(''); + $("#designation").val(''); + + let first_id = $('#branch_table_pk').val(); + console.log('first_id', first_id); + if(first_id){ + removeLevelContacts(first_id); + } } } - } + }); } function storeButtonId(id) { @@ -772,6 +828,75 @@ function checkMobileNumber(input) { }); } + +function validateInput(input, table, field, submitBtnId){ + + let value = $(input).val(); + let label = $(input).closest('.form-group').find('label').text().replace('*', '').trim(); + + let message = "Value is duplicate!"; + if(label){ + message = label + " already exists!"; + } + + checkDuplicateTableFieldValue(table, field, value, function(isDuplicate) { + if (isDuplicate) { + toastr.warning(message, 'WARNING'); + // $(input).val('') + $('#'+submitBtnId).prop('disabled', true); + } else{ + $('#'+submitBtnId).prop('disabled', false); + } + }); + +} + +function getContactsData() { + const contacts = []; + + const ids = $('input[name="branch_table_pk[]"]'); + const names = $('input[name="name[]"]'); + const mobiles = $('input[name="mobile[]"]'); + const emails = $('input[name="email[]"]'); + const designations = $('input[name="designation[]"]'); + + for (let i = 0; i < ids.length; i++) { + contacts.push({ + id: $(ids[i]).val() || null, + name: $(names[i]).val(), + mobile: $(mobiles[i]).val(), + email: $(emails[i]).val(), + designation: $(designations[i]).val() + }); + } + + return contacts; +} + +function removeLevelContacts(id){ + + let url = ''; + + let requestData = { + id: id, + }; + + // Send AJAX request + sendAjaxRequestForGlobal(url, 'GET', requestData, function(response) { + + console.log('Data fetched successfully:', response); + if (response.status == true) { + toastr.success(response.message, 'SUCCESS'); + } else { + toastr.warning(response.message, 'WARNING'); + } + + }, function(xhr, status, error) { + console.error('Error fetching data:', error); + console.error(xhr.responseText); + }); +} + + + + function featchClient(){ - \ No newline at end of file diff --git a/app/Views/employee_data_list.php b/app/Views/employee_data_list.php index b01fd75..292827e 100755 --- a/app/Views/employee_data_list.php +++ b/app/Views/employee_data_list.php @@ -75,6 +75,19 @@ border-radius: 5px; box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); } +.btn-inception { + background-color: #02a8b5; /* Bootstrap primary blue */ + color: white; + border: none; + padding: 6px 12px; + font-weight: 500; + border-radius: 4px; +} + +.btn-inception:hover { + background-color: #05676eff; +} + @@ -88,6 +101,7 @@

Employees

+ @@ -105,6 +119,8 @@ + + @@ -144,6 +160,8 @@ + + @@ -394,7 +412,8 @@ $(document).ready(function() { extend: 'csv', text: 'CSV', title: 'Member-List', - }, + } + , { extend: 'excelHtml5', text: 'Excel', @@ -428,6 +447,15 @@ $(document).ready(function() { }); } } + , + { + + text: 'Export As Inception', + className: 'btn-inception', + action: function (e, dt, node, config) { + downloadInception(); + } + } ], language: { search: "_INPUT_", @@ -779,4 +807,56 @@ function get_emp_history(input, emp_id) { // modalInstance.hide(); // } // } + +function downloadInception(){ + + let client = $('#clients').val(); + let branch = $('#branch_id').val(); + let policies = $('#policies').val(); + let status = $('#status2').val(); + let empCode = $('#emp_code').val(); + let empName = $('#emp_name').val(); + + $('.loader').fadeIn(); + $('.loader-mask').fadeIn(); + + $.ajax({ + type: 'POST', + url: "", + data: { + client: client, + branch: branch, + policies: policies, + status: status, + empCode: empCode, + empName: empName + }, + success: function(response) { + if (response.status === 'success') { + $('', { + href: response.downloadUrl, + download: '', + style: 'display:none' + }).appendTo('body')[0].click(); + } else { + alert(response.message || 'Download failed'); + } + }, + error: function(xhr, status, error) { + console.error('Error:', error); + }, + complete: function() { + $('.loader').fadeOut(); + $('.loader-mask').delay(350).fadeOut('slow'); + console.log('AJAX request finished.'); + } + }); + + + + + + +} + \ No newline at end of file diff --git a/app/Views/enrollment_dash.php b/app/Views/enrollment_dash.php index c6aa284..21469aa 100755 --- a/app/Views/enrollment_dash.php +++ b/app/Views/enrollment_dash.php @@ -1,4 +1,4 @@ -
+
@@ -6,20 +6,20 @@ style="padding: 0.5rem !important;background-color: white;">
-
-
-
-

Enrolled + style="color: black;font-size: 15px;">Enrolled
diff --git a/app/Views/layout/header.php b/app/Views/layout/header.php index eb9311d..0a07011 100755 --- a/app/Views/layout/header.php +++ b/app/Views/layout/header.php @@ -91,6 +91,14 @@ min-height: 0; } + body[data-sidebar-size=condensed] .navbar-custom { + left: 155px !important; + } + + body[data-sidebar-size=condensed] .logo-box { + width: 155px !important; + } + .navbar-custom { top: -10px !important; height: 61px !important; @@ -536,7 +544,7 @@
+ + + + - + - + diff --git a/app/Views/login_old.php b/app/Views/login_old.php new file mode 100644 index 0000000..4434f46 --- /dev/null +++ b/app/Views/login_old.php @@ -0,0 +1,94 @@ + + + + + + NHANCE + + + + + + + /assets/images/Nhance_Favi.svg"> + + + /assets/css/bootstrap-material.min.css" rel="stylesheet" type="text/css" + id="bs-default-stylesheet" /> + /assets/css/app-material.min.css" rel="stylesheet" type="text/css" + id="app-default-stylesheet" /> + + /assets/css/bootstrap-material-dark.min.css" rel="stylesheet" type="text/css" + id="bs-dark-stylesheet" /> + /assets/css/app-material-dark.min.css" rel="stylesheet" type="text/css" + id="app-dark-stylesheet" /> + + + /assets/css/icons.min.css" rel="stylesheet" type="text/css" /> + + + + + + + +
+
+ +
+ /assets/images/Nhance-Logo-Final.png" width="200"> +
+ +
+
+ + +
+
+
+ + + getFlashdata('error')) : ?> + +
+

+
+
+ + +
+
+
+ +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/app/Views/policy_gmc_terms.php b/app/Views/policy_gmc_terms.php index 0d9b2bd..fdb3ae5 100755 --- a/app/Views/policy_gmc_terms.php +++ b/app/Views/policy_gmc_terms.php @@ -1223,13 +1223,9 @@ $('body').on('click', '.btnPolicyMaster', function() { if (jsonObject[key]['either-parents-pil'] == 1) { $('#family_floaters').val('EPORPIL'); - } else if (jsonObject[key].parents == 1 && jsonObject[key][ - 'parents-in-law' - ] == 1) { + } else if (jsonObject[key].parents == 1 && jsonObject[key]['parents-in-law'] == 1) { $('#family_floaters').val('2EPORPIL'); - } else if (jsonObject[key].parents == 2 && jsonObject[key][ - 'parents-in-law' - ] == 2) { + } else if (jsonObject[key].parents == 2 && jsonObject[key]['parents-in-law'] == 2) { $('#family_floaters').val('4EPORPIL'); } else if (jsonObject[key].parents == 1) { $('#family_floaters').val('1P'); @@ -1240,7 +1236,7 @@ $('body').on('click', '.btnPolicyMaster', function() { } else if (jsonObject[key]['parents-in-law'] == 2) { $('#family_floaters').val('2PIL'); } else if (jsonObject[key]['either-parents-pil'] == 2) { - $('#family_floaters').val('4EPORPIL'); + $('#family_floaters').val('2EPORPIL'); } } diff --git a/public/assets/images/action_on_policies_sb.png b/public/assets/images/action_on_policies_sb.png new file mode 100644 index 0000000..aa07ba5 Binary files /dev/null and b/public/assets/images/action_on_policies_sb.png differ diff --git a/public/assets/images/app_content_mng_sb.png b/public/assets/images/app_content_mng_sb.png new file mode 100644 index 0000000..d2b1372 Binary files /dev/null and b/public/assets/images/app_content_mng_sb.png differ diff --git a/public/assets/images/background_theme.jpg b/public/assets/images/background_theme.jpg new file mode 100644 index 0000000..b225b4b Binary files /dev/null and b/public/assets/images/background_theme.jpg differ diff --git a/public/assets/images/bg_image.png b/public/assets/images/bg_image.png new file mode 100644 index 0000000..0588d07 Binary files /dev/null and b/public/assets/images/bg_image.png differ diff --git a/public/assets/images/claims_sb.png b/public/assets/images/claims_sb.png new file mode 100644 index 0000000..e27eeaf Binary files /dev/null and b/public/assets/images/claims_sb.png differ diff --git a/public/assets/images/clients_sb.png b/public/assets/images/clients_sb.png new file mode 100644 index 0000000..1c1983e Binary files /dev/null and b/public/assets/images/clients_sb.png differ diff --git a/public/assets/images/leads_sb.png b/public/assets/images/leads_sb.png new file mode 100644 index 0000000..84c6d6f Binary files /dev/null and b/public/assets/images/leads_sb.png differ diff --git a/public/assets/images/masters_sb.png b/public/assets/images/masters_sb.png new file mode 100644 index 0000000..63e786f Binary files /dev/null and b/public/assets/images/masters_sb.png differ diff --git a/public/assets/images/policy_transactions_sb.png b/public/assets/images/policy_transactions_sb.png new file mode 100644 index 0000000..af24033 Binary files /dev/null and b/public/assets/images/policy_transactions_sb.png differ diff --git a/public/assets/images/user_manual_sb.png b/public/assets/images/user_manual_sb.png new file mode 100644 index 0000000..f36c9f4 Binary files /dev/null and b/public/assets/images/user_manual_sb.png differ
EMP Code Relationship GenderEmailMobile Date of Birth Policy name Insurer name -