From b63950ed00e74c25b9fcefb7fbfef92b9d3d0678 Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Mon, 9 Feb 2026 15:50:02 +0530 Subject: [PATCH 1/9] FIX_ISSUE --- app/Controllers/ClientController.php | 6 ++--- app/Controllers/EmployeeServiceController.php | 26 ++++++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 10826d69..43b0fafc 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -6470,9 +6470,9 @@ class ClientController extends AdminController // ---------- EMP SERVICE CONTROLLER -------------------------------------------------------------------------------- $empServiceController = new EmployeeServiceController(); - // $res = $empServiceController->excelFileFormatValidation(['file_id' => '1248']); - // $res = $empServiceController->excelFileDataValidation(['file_id' => '1252']); - // $res = $empServiceController->employeesOnboardPreprocess(['file_id' => 1263]); + // $res = $empServiceController->excelFileFormatValidation(['file_id' => '1264']); + // $res = $empServiceController->excelFileDataValidation(['file_id' => '1264']); + // $res = $empServiceController->employeesOnboardPreprocess(['file_id' => 1264]); // $res = $empServiceController->employeesOnboardPreprocess(['file_id' => 1262]); // $res = $empServiceController->employeesOnboardPreprocess(['file_id' => 1169]); // $res = $empServiceController->employeesOnboardProcess(['file_id' => 835]); diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index 84761c68..bc4bfa7c 100755 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -1402,6 +1402,8 @@ class EmployeeServiceController extends AdminController $employee_data_group_by_family = data_group_by_family($excel_data, 'excel', '', $current_column_action); // dd($employee_data_group_by_family); + + $employee_insert_count = 0; foreach ($employee_data_group_by_family as $emp_id => $family) { @@ -1425,11 +1427,25 @@ class EmployeeServiceController extends AdminController $data = calculate_premium_new(family_data:$family,policy_terms: $policy_terms,slab_details : $slab_details,fileArr: $file, existing_units:$existing_units); // dd($data); $employee_data_group_by_family[$emp_id] = $data; - $this->employeesOnboardProcess(['familiy_data' => $data,'file' => $file]); + $res = $this->employeesOnboardProcess(['familiy_data' => $data,'file' => $file]); + + if($res > 0){ + $employee_insert_count++; + } } - $this->fileModel->where('id', $file_id)->set(['status' => 'success','reason' => ''])->update(); - $this->myLogger->logme("error",'{file_id} uploaded success',['file_id' => $file_id]); + if($employee_insert_count > 0){ + $this->fileModel->where('id', $file_id)->set(['status' => 'success','reason' => ''])->update(); + $this->myLogger->logme("error",'{file_id} uploaded success',['file_id' => $file_id]); + }else{ + $reason = json_encode([ + 'error_summary' => [5 => 1], + 'error_data' => "Rack rate configuration issue: Please check the slab rates configuration" + ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); + $this->fileModel->where('id', $file_id)->set(['status' => 'failed','reason' => $reason])->update(); + $this->myLogger->logme("error",'{file_id} uploaded failed with reason: Rack rate configuration issue: Please check the slab rates configuration',['file_id' => $file_id]); + + } $this->setPullNotification($this->getFileMetaDataByFileId($file_id,'success')); @@ -1842,6 +1858,7 @@ class EmployeeServiceController extends AdminController $policy_details = $this->clientPolicyModel->where('id', $file['policy_id'])->first(); // dd($policy_details); + $employee_insert_count = 0; foreach($familiy_data as $fkey => $value) { if(is_array($value)) @@ -1974,6 +1991,7 @@ class EmployeeServiceController extends AdminController // else{ $emp_policy_id = $employee_policy[0]['id']; } $this->myLogger->logme('error',$log_message); + $employee_insert_count++; }// if end }// is array check end @@ -1982,6 +2000,8 @@ class EmployeeServiceController extends AdminController $this->myLogger->logme('error','######Incoming value is not an array'); } }// for end + + return $employee_insert_count; }//function end From 4a66b3a67efdbd2bfa693ebd7dbb54b30e082fe1 Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Tue, 10 Feb 2026 09:42:33 +0530 Subject: [PATCH 2/9] CHANGE_HR_EMPLOYEE_LIST_THE_INACTIVE_EMP --- app/Controllers/ClientController.php | 4 ++-- app/Controllers/EmployeeRestController.php | 2 +- app/Models/EmployeePolicyModel.php | 11 ++++++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 43b0fafc..b0e59d7a 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -784,10 +784,10 @@ class ClientController extends AdminController ], 'cd_ac_no' => [ - 'rules' => 'required|is_natural_no_zero', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\/_\\-]+$/]', 'errors' => [ 'required' => 'Account number is required', - 'is_natural_no_zero' => 'must be a positive integer', + 'regex_match' => 'Account number can only contain letters, numbers, slashes (/), underscores (_), and hyphens (-)', ] ], diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index 5f8bd879..815d00fd 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -607,7 +607,7 @@ class EmployeeRestController extends AdminController { try { - $empData = $this->employeePolicyModel->getEmployeePolicy(client_id: $this->request->getGet('client_id'), policy_id: $this->request->getGet('client_policy_id'), status: 0, branch_id: $this->request->getGet('client_branch_id')); + $empData = $this->employeePolicyModel->getEmployeePolicy(client_id: $this->request->getGet('client_id'), policy_id: $this->request->getGet('client_policy_id'), status: 0, branch_id: $this->request->getGet('client_branch_id'), staus_type: 'inactive'); if ($empData) { return $this->respond(['status' => 'success', 'code' => 200, 'data' => $empData], 200); diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index 6b9b17f1..aac0cc45 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -222,7 +222,7 @@ class EmployeePolicyModel extends Model // return $res; // } // remarks do not remove - public function getEmployeePolicy($client_id = 0, $policy_id = 0, $status = [], $branch_id = 0, $emp_code = "", $emp_name = "") + public function getEmployeePolicy($client_id = 0, $policy_id = 0, $status = [], $branch_id = 0, $emp_code = "", $emp_name = "", $staus_type = '') { // dd($status); $ecard_download_link = " @@ -356,8 +356,13 @@ class EmployeePolicyModel extends Model // Always check these conditions $result ->where('employee_polices.is_active', 1) - ->where('emp.is_active', 1) - ->where('employee_polices.status !=', 'inactive'); + ->where('emp.is_active', 1); + + if($staus_type == 'inactive'){ + $result->whereIn('employee_polices.status', ['active', 'inactive']); + }else{ + $result->where('employee_polices.status !=', 'inactive'); + } $res = $result->findAll(); From c41934a574f06e1b6e7e1b179776d56d2b1dc0bf Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Tue, 10 Feb 2026 11:23:32 +0530 Subject: [PATCH 3/9] FIX_ISSUE_DROPDOW_CLICK --- app/Views/employee_list.php | 52 +++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/app/Views/employee_list.php b/app/Views/employee_list.php index 42ee6b08..a03e40e4 100755 --- a/app/Views/employee_list.php +++ b/app/Views/employee_list.php @@ -306,17 +306,53 @@ } function handleItemClick(e, item) { - e.preventDefault(); - - // Execute the stored onclick handler + e.preventDefault(); + const onclickAttr = item.getAttribute('data-onclick'); if (onclickAttr) { - eval(onclickAttr); - } + // Regex to separate function name from the inside of the parentheses + // Example: myFunc(this, '123') -> match[1]="myFunc", match[2]="this, '123'" + const match = onclickAttr.match(/^(\w+)\((.*)\)$/); + + if (match) { + const funcName = match[1]; + const argsRaw = match[2]; - // Handle href navigation + if (typeof window[funcName] === 'function') { + // Parse the arguments string into a real array + const args = argsRaw.split(',').map(arg => { + let cleaned = arg.trim(); + + // 1. Handle the 'this' keyword + if (cleaned === 'this') return item; + + // 2. Handle 'event' keyword + if (cleaned === 'event') return e; + + // 3. Handle strings (remove single or double quotes) + if ((cleaned.startsWith("'") && cleaned.endsWith("'")) || + (cleaned.startsWith('"') && cleaned.endsWith('"'))) { + return cleaned.substring(1, cleaned.length - 1); + } + + // 4. Handle numbers + if (!isNaN(cleaned) && cleaned !== "") { + return Number(cleaned); + } + + return cleaned; + }); + + // Execute function: + // .apply(item, args) sets the 'this' inside the function to the clicked element + window[funcName].apply(item, args); + } + } + } + + // Handle standard navigation if it's a link const href = item.getAttribute('href'); - if (href && href !== '#') { + if (href && href !== '#' && !href.includes('javascript:void(0)')) { window.location.href = href; } @@ -324,7 +360,7 @@ activeDropdown.style.display = 'none'; activeDropdown = null; } - + e.stopPropagation(); } From 0d0fc15a03de285cbf3c056e54b6331f94de742f Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Tue, 10 Feb 2026 11:46:02 +0530 Subject: [PATCH 4/9] FIX_IN_ACTIVE_COUNT --- app/Controllers/EmployeeRestController.php | 8 ++++---- app/Models/EmployeePolicyModel.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index 815d00fd..70fcb894 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -607,7 +607,7 @@ class EmployeeRestController extends AdminController { try { - $empData = $this->employeePolicyModel->getEmployeePolicy(client_id: $this->request->getGet('client_id'), policy_id: $this->request->getGet('client_policy_id'), status: 0, branch_id: $this->request->getGet('client_branch_id'), staus_type: 'inactive'); + $empData = $this->employeePolicyModel->getEmployeePolicy(client_id: $this->request->getGet('client_id'), policy_id: $this->request->getGet('client_policy_id'), status: 0, branch_id: $this->request->getGet('client_branch_id'), status_type: 'inactive'); if ($empData) { return $this->respond(['status' => 'success', 'code' => 200, 'data' => $empData], 200); @@ -2360,15 +2360,15 @@ class EmployeeRestController extends AdminController $value['policy_name'] = $policyTypeData->long_name; $value['insurer_name'] = $insurerData->name; $value['insurer_short_name'] = $insurerData->short_name; - $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')); + $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'), status_type: 'inactive'); // dd($employeeDetails); $activeCount = 0; $inactiveCount = 0; if (count($employeeDetails)) { foreach ($employeeDetails as $item) { - if ($item['emp_status'] === 'active') { + if ($item['status'] === 'active') { $activeCount++; - } elseif ($item['emp_status'] === 'inactive') { + } elseif ($item['status'] === 'inactive') { $inactiveCount++; } } diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index aac0cc45..33ecc71b 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -222,7 +222,7 @@ class EmployeePolicyModel extends Model // return $res; // } // remarks do not remove - public function getEmployeePolicy($client_id = 0, $policy_id = 0, $status = [], $branch_id = 0, $emp_code = "", $emp_name = "", $staus_type = '') + public function getEmployeePolicy($client_id = 0, $policy_id = 0, $status = [], $branch_id = 0, $emp_code = "", $emp_name = "", $status_type = '') { // dd($status); $ecard_download_link = " @@ -358,7 +358,7 @@ class EmployeePolicyModel extends Model ->where('employee_polices.is_active', 1) ->where('emp.is_active', 1); - if($staus_type == 'inactive'){ + if($status_type == 'inactive'){ $result->whereIn('employee_polices.status', ['active', 'inactive']); }else{ $result->where('employee_polices.status !=', 'inactive'); From 611814db2a55cb482f8d3cfb3ccc6dc5600dc941 Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Tue, 10 Feb 2026 12:17:57 +0530 Subject: [PATCH 5/9] CHANFE_DOWNLOAD_CD_SPLITUP_FILE_ID_MD5 --- app/Controllers/EmployeeRestController.php | 2 +- app/Models/ClientPolicyModel.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index 70fcb894..a3368b66 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -5447,7 +5447,7 @@ class EmployeeRestController extends AdminController $file_id = $this->request->getGet('id'); // Find record - $record = $this->batchFileModel->where('id', $file_id)->first();; + $record = $this->batchFileModel->where('MD5(id)', $file_id)->first(); if (!$record) { $data['message'] = 'File record not found'; return view('errors/404', $data); diff --git a/app/Models/ClientPolicyModel.php b/app/Models/ClientPolicyModel.php index b11c97f6..762e8c40 100755 --- a/app/Models/ClientPolicyModel.php +++ b/app/Models/ClientPolicyModel.php @@ -316,7 +316,7 @@ class ClientPolicyModel extends Model ->select('user_profiles.first_name as username') ->select("CASE WHEN cash_deposit.file_id IS NOT NULL AND cash_deposit.file_id != '' - THEN CONCAT(" . $this->db->escape($url) . ", cash_deposit.file_id) + THEN CONCAT(" . $this->db->escape($url) . ", MD5(cash_deposit.file_id)) ELSE NULL END AS split_up_url", false) From 6beb9373acfb191f0744b6daac4075334dd91785 Mon Sep 17 00:00:00 2001 From: velz Date: Tue, 10 Feb 2026 15:29:17 +0530 Subject: [PATCH 6/9] FIX_ROUTE_ADDED_IN_ACL --- app/Config/Acl.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Config/Acl.php b/app/Config/Acl.php index 371e1a21..46d26b42 100644 --- a/app/Config/Acl.php +++ b/app/Config/Acl.php @@ -8,6 +8,7 @@ class Acl // ===================== PUBLIC / AUTH ===================== '#^/login#' => ['public' => true], + '#^/downloadCdSplitUpFile#' => ['public' => true], '#^/logout#' => ['public' => true], '#^/auth#' => ['public' => true], '#^/oauth2callback#' => ['public' => true], From 8f8f9ee987af39281cfd026e40737f8032e6b9ae Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Tue, 10 Feb 2026 16:37:51 +0530 Subject: [PATCH 7/9] CHANGE_ADD_AILMENT_MAPPING --- app/Config/Acl.php | 1 + .../TPAClaimsImportServices/AbhiClaimImportService.php | 1 + .../TPAClaimsImportServices/FhplClaimImportService.php | 4 +++- .../TPAClaimsImportServices/IciciClaimImportService.php | 1 + .../TPAClaimsImportServices/MediAssistClaimImportService.php | 1 + .../TPAClaimsImportServices/RcareClaimImportService.php | 2 ++ .../TPAClaimsImportServices/VidalClaimImportService.php | 4 +++- 7 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/Config/Acl.php b/app/Config/Acl.php index 46d26b42..b122e08b 100644 --- a/app/Config/Acl.php +++ b/app/Config/Acl.php @@ -22,6 +22,7 @@ class Acl '#^/util/log_list#' => ['roles' => [ADMIN_ROLE_ID]], '#^/util/view_log#' => ['roles' => [ADMIN_ROLE_ID]], '#^/util/download_log#' => ['roles' => [ADMIN_ROLE_ID]], + '#^/metaDashboardDemo#' => ['roles' => [ADMIN_ROLE_ID, HEAD_ROLE_ID]], // ===================== PUBLIC DOWNLOADS / FORMS ===================== '#^/download-#' => ['public' => true], diff --git a/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php b/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php index 8dcfc672..ffb4b970 100644 --- a/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php @@ -111,6 +111,7 @@ class AbhiClaimImportService extends BaseTpaClaimImportService 'diagnosis' => 'claim_description', 'healthcard_id' => 'tpa_no', 'claim_type' => 'tpa_claim_type', + 'diagnosis' => 'tpa_ailments', ]; diff --git a/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php b/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php index 3ad5dde9..324fd3a7 100644 --- a/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php @@ -174,6 +174,8 @@ class FhplClaimImportService extends BaseTpaClaimImportService 'cheque_no' => 'utr_details', 'uhid_no' => 'tpa_no', 'claim_type' => 'tpa_claim_type', + 'diagnosis' => 'tpa_ailments', + ]; protected $statusMapping = [ @@ -219,7 +221,7 @@ class FhplClaimImportService extends BaseTpaClaimImportService $builder = $this->db->table('claims_dump_fhpl'); return $builder->insertBatch($data); - } + } public function importClaimMaster(array $data): bool diff --git a/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php b/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php index 2cb09e7a..132986a2 100644 --- a/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php @@ -101,6 +101,7 @@ class IciciClaimImportService extends BaseTpaClaimImportService 'uhid' => 'tpa_no', 'rejected_query_desc' => 'claim_description', 'type_of_claim' => 'tpa_claim_type', + 'diagnosis' => 'tpa_ailments', ]; protected $statusMapping = [ diff --git a/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php b/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php index 947775f6..d052c9f5 100644 --- a/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php @@ -152,6 +152,7 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService // Payment 'utr_no' => 'utr_details', 'claim_type' => 'tpa_claim_type', + 'primary_ailment_name' => 'tpa_ailments', ]; protected $statusMapping = [ diff --git a/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php b/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php index 30c12e0d..770caadd 100644 --- a/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php @@ -84,6 +84,8 @@ class RcareClaimImportService extends BaseTpaClaimImportService 'hospital_district' => 'hospital_city', 'diagnosis' => 'claim_description', + 'diagnosis' => 'tpa_ailments', + // Payment 'cheque_neft_number' => 'utr_details', diff --git a/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php b/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php index 8fc34700..c90d580b 100644 --- a/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php @@ -343,7 +343,9 @@ class VidalClaimImportService extends BaseTpaClaimImportService // Meta 'file_id' => 'file_id', - 'type_of_claim' => 'tpa_claim_type', + 'type_of_claim' => 'tpa_claim_type', + 'diagnosis' => 'tpa_ailments', + ]; protected $statusMapping = [ From a01d16763667f31cc4e816201238a9dc93869b80 Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Wed, 11 Feb 2026 09:17:31 +0530 Subject: [PATCH 8/9] FIX_ClaimsSubmitIssuesFixesAndPolicy,EndorsementValidationAlso. --- app/Controllers/EmployeeController.php | 5 +- app/Controllers/LeadsController.php | 34 +- .../PolicyTransactionController.php | 390 +++++++++- app/Controllers/TicketController.php | 724 ++++++++++++------ app/Views/UserList.php | 99 ++- app/Views/add_image_list.php | 67 +- app/Views/bds_dump_file_list.php | 29 +- app/Views/cd_master_add_modal.php | 27 +- app/Views/claim_files_upload.php | 48 +- app/Views/claim_mis_file_list.php | 29 +- app/Views/client_basic_info.php | 15 +- app/Views/client_branch.php | 21 +- app/Views/client_list.php | 82 +- app/Views/client_policy.php | 36 +- app/Views/employee_data_list.php | 30 +- app/Views/endorsement_list.php | 15 +- app/Views/enrollment_list.php | 8 +- app/Views/faq_list.php | 31 +- app/Views/file_list.php | 4 +- app/Views/frontend_content_list.php | 36 +- app/Views/insurer_basic_info.php | 31 +- app/Views/insurer_export_templete.php | 52 +- app/Views/kyc_docs.php | 60 +- app/Views/leads_form.php | 43 +- app/Views/leads_non_eb.php | 34 +- app/Views/nhance_branch_list.php | 53 +- .../policy_transaction_endorsement_form.php | 23 + .../policy_transaction_inception_form.php | 25 + app/Views/pos_list.php | 38 +- app/Views/retail_endorsement_list.php | 42 +- app/Views/rto_master_list.php | 32 +- app/Views/test_members_list.php | 22 +- app/Views/thz_list.php | 35 +- app/Views/thz_notes.php | 70 +- app/Views/ticket_edit_onbording.php | 24 + app/Views/ticket_form_handler.php | 25 + app/Views/ticket_mail_template.php | 19 +- app/Views/ticket_note.php | 52 +- app/Views/ticket_reply.php | 25 +- app/Views/tpa_basic_info.php | 17 +- app/Views/tpa_branch.php | 33 +- app/Views/vehicle_details.php | 31 +- app/Views/vehicle_master_list.php | 34 +- app/Views/vehicle_type_master_list.php | 34 +- 44 files changed, 1954 insertions(+), 630 deletions(-) diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index a8bd7c44..bc12d31b 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -3407,9 +3407,10 @@ class EmployeeController extends AdminController try { $rules = [ 'endorsement_no' => [ - 'rules' => 'required', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\/_\-]+$/]', 'errors' => [ - 'required' => 'Endorsement Number is missing' + 'required' => 'Endorsement Number is missing.', + 'regex_match' => 'Endorsement Number can only contain letters, numbers, slashes (/), underscores (_), and hyphens (-).' ] ], 'status' => [ diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index c8413098..dc577af0 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -380,7 +380,7 @@ class LeadsController extends BaseController { $rules = [ 'lead_type' => [ - 'rules' => 'required', + 'rules' => 'integer', 'errors' => ['required' => 'Lead Type is required'] ], 'issuer' => [ @@ -455,6 +455,38 @@ class LeadsController extends BaseController 'errors' => ['required' => 'Date of Expiry is required'] ]; } + + // 1. MANUALLY VALIDATE FILES BEFORE PROCESSING + // $allFiles = $this->request->getFiles(); + // foreach ($allFiles as $inputName => $files) { + // // If it's a single file, wrap it in an array to use the same logic + // $fileArray = is_array($files) ? $files : [$files]; + + // foreach ($fileArray as $index => $file) { + // if ($file->isValid() && !$file->hasMoved()) { + // $extension = strtolower($file->getExtension()); + + // // Logic: index 0 is Excel only, others are mixed + // if ($index === 0) { + // $allowed = ['xls', 'xlsx']; + // } else { + // $allowed = ['xls', 'xlsx', 'pdf', 'jpg', 'jpeg', 'png']; + // } + + // if (!in_array($extension, $allowed)) { + // // Return 400 Error immediately + // return $this->response->setStatusCode(400)->setJSON([ + // 'status' => false, + // 'message' => 'Input validation failed', + // 'code' => 400, + // 'errors' => [ + // $inputName => "File " . ($index + 1) . " has an invalid extension ($extension). Allowed: " . implode(',', $allowed) + // ] + // ]); + // } + // } + // } + // } if (!$this->validate($rules)) { return $this->response->setStatusCode(400)->setJSON([ diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index 592e7405..62a75808 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -918,6 +918,144 @@ public function createInceptionPolicy() { $post_data = $this->request->getPost(); + + $rules = [ + // ========================================== + // 1. CLIENT SECTION (5 Fields) + // ========================================== + 'client_id' => ['label' => 'Client','rules' => 'required','errors' => ['required' => 'Please select a Client.']], + 'client_type' => ['label' => 'Client Type','rules' => 'required','errors' => ['required' => 'Client Type must be selected.']], + 'industry_type' => ['label' => 'Industry','rules' => 'permit_empty','errors' => []], // No errors needed for permit_empty unless adding other rules + 'gst_no' => ['label' => 'GST Number','rules' => 'permit_empty|regex_match[/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/]','errors' => ['alpha_numeric' => 'GST Number should only contain letters and numbers.','regex_match' => 'Invalid GST format. (Example: 22AAAAA0000A1Z5)']], + 'pan_no' => ['label' => 'PAN Number','rules' => 'permit_empty|regex_match[/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/]','errors' => ['alpha_numeric' => 'PAN Number should only contain letters and numbers.','regex_match' => 'Invalid PAN format. (Example: ABCDE1234F)']], + // ========================================== + // 2. PRE-SALES SECTION (3 Fields) + // ========================================== + 'lead_source' => ['label' => 'Lead Source', 'rules' => 'permit_empty', 'errors' => []], + 'opportunity_id' => ['label' => 'Opportunity', 'rules' => 'permit_empty', 'errors' => []], + 'quotation_ref' => ['label' => 'Quotation Ref', 'rules' => 'permit_empty', 'errors' => []], + + // ========================================== + // 3. POLICY DOCUMENT (2 Fields) + // ========================================== + 'policy_copy' => ['label' => 'Policy Copy', 'rules' => 'permit_empty', 'errors' => []], + 'proposal_form' => ['label' => 'Proposal Form', 'rules' => 'permit_empty', 'errors' => []], + + // ========================================== + // 4. VEHICLE DOCUMENT (2 Fields) + // ========================================== + 'rc_copy' => ['label' => 'RC Copy', 'rules' => 'permit_empty', 'errors' => []], + 'inspection_report' => ['label' => 'Inspection Report', 'rules' => 'permit_empty', 'errors' => []], + + // ========================================== + // 5. SALES SECTION (12 Fields) + // ========================================== + 'base_policy' => ['label' => 'Base Policy', 'rules' => 'permit_empty','errors' => []], + 'policy_no' => ['label' => 'Policy Number', 'rules' => 'required|regex_match[/^[a-zA-Z0-9\/_-]+$/]', + 'errors' => [ + 'required' => 'Policy Number is Must.', + 'regex_match' => 'Policy Number can only contain letters, numbers, and symbols like / - or _' + ]], + 'policy_issue_date' => ['label' => 'Issue Date', 'rules' => 'required|valid_date[Y-m-d]|regex_match[/^\d{4}-\d{2}-\d{2}$/]', + 'errors' => [ + 'required' => 'Policy Issue Date is required.', + 'valid_date' => 'Please provide a valid Policy Issue Date.', + 'regex_match' => 'The Policy Issue Date format is incorrect. ' + ]], + 'month' => ['label' => 'Issue Month', 'rules' => 'required','errors' => [ + 'required' => 'Please select or enter the Policy Issue Month.' + ]], + 'policy_start_date' => ['label' => 'D.O.C', + 'rules' => 'required|valid_date[Y-m-d]|regex_match[/^\d{4}-\d{2}-\d{2}$/]', + 'errors' => [ + 'required' => 'D.O.C (Start Date) is required.', + 'valid_date' => 'Please provide a valid D.O.C date.', + 'regex_match' => 'The D.O.C date format is incorrect. ' + ]], + 'policy_end_date' => ['label' => 'D.O.E', 'rules' => 'required|valid_date[Y-m-d]|regex_match[/^\d{4}-\d{2}-\d{2}$/]','errors' => [ + 'required' => 'D.O.E (Expiry Date) is required.', + 'valid_date' => 'Please provide a valid D.O.E date.', + 'regex_match' => 'The D.O.E date format is incorrect. ' + ]], + 'emp_count' => ['label' => 'No of Insured', 'rules' => 'permit_empty|numeric','errors' => [ + 'numeric' => 'No of Insured must contain only numbers.' + ]], + 'dependent_count' => ['label' => 'No of Dependents', 'rules' => 'permit_empty|numeric','errors' => [ + 'numeric' => 'No of Dependents must contain only numbers.' + ]], + 'installment' => ['label' => 'Installment', 'rules' => 'permit_empty','errors' => []], + 'installment_data' => ['label' => 'Installment Data', 'rules' => 'permit_empty','errors' => []], + 'co_share' => ['label' => 'CoP Yes', 'rules' => 'permit_empty','errors' => []], + 'bro_payable_by' => ['label' => 'Remuneration Pay By', 'rules' => 'permit_empty','errors' => []], + 'renewal_date' => ['label' => 'Renewal Date', 'rules' => 'required|valid_date[Y-m-d]|regex_match[/^\d{4}-\d{2}-\d{2}$/]','errors' => [ + 'required' => 'Renewal Date is required.', + 'valid_date' => 'Please provide a valid Renewal Date.', + 'regex_match' => 'The Renewal Date format is incorrect. ' + ]], + 'sales_generated_by' => ['label' => 'Sales Generated By', 'rules' => 'permit_empty','errors' => [ + // 'required' => 'Please select the person who generated this sale.' + ]], + 'serviced_by' => ['label' => 'Serviced By', 'rules' => 'permit_empty','errors' => [ + // 'required' => 'Please select the service person for this policy.' + ]], + 'pos_id' => ['label' => 'POS', 'rules' => 'permit_empty','errors' => []], + + // ========================================== + // 6. PREMIUM DETAILS (Array Fields - 25 Fields) + // Use .* because these come from the dynamic table + // ========================================== + 'follow_insurer_id.*' => ['label' => 'Insurer', 'rules' => 'required','errors' => ['required' => 'Please select an Insurer.']], + 'co_share_type.*' => ['label' => 'Is Leader', 'rules' => 'permit_empty','errors' => []], + 'cd_ac_no_for_child.*' => ['label' => 'CD Acc No', 'rules' => 'permit_empty','errors' => []], + 'cd_current_balance.*' => ['label' => 'CD Amount', 'rules' => 'permit_empty','errors' => []], + 'follower_policy_no.*' => ['label' => 'Follower Policy No', 'rules' => 'permit_empty','errors' => []], + 'calc_policy_issue_date.*' => ['label' => 'Policy Issue Date', 'rules' => 'required','errors' => [ 'required' => 'Policy Issue Date is required' ]], + 'co_share_per.*' => ['label' => 'Co-Share %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Co-Share % must be a valid decimal.']], + 'non_comm_per_amt.*' => ['label' => 'Non-Comm Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Amount must be numeric.']], + 'base_premium.*' => ['label' => 'Base Premium', 'rules' => 'required|numeric|differs[0]','errors' => [ + 'required' => 'Base Premium is required.', + 'numeric' => 'Base Premium must be a valid number.', + 'differs' => 'Base Premium cannot be zero; please enter a positive or negative value.' + ]], + 'tp_premium.*' => ['label' => 'TP Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'TP Premium must be numeric.']], + 'ter_premium.*' => ['label' => 'TEP Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'TEP Premium must be numeric.']], + 'co_premium.*' => ['label' => 'Co-Premium', 'rules' => 'permit_empty|decimal','errors'=> ['decimal' => 'Co-Premium must be numeric.']], + 'co_tp_premium.*' => ['label' => 'Co-TP Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Co-TP Premium must be numeric.']], + 'co_ter_premium.*' => ['label' => 'Co-TEP Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Co-TEP Premium must be numeric.']], + 'cgst.*' => ['label' => 'CGST', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'CGST must be numeric.']], + 'sgst.*' => ['label' => 'SGST', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'SGST must be numeric.']], + 'igst.*' => ['label' => 'IGST', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'IGST must be numeric.']], + 'gst_amount.*' => ['label' => 'GST Amount', 'rules' => 'permit_empty|decimal|greater_than[0]','errors' => [ + 'decimal' => 'GST Amount must be a valid numeric value.', + 'greater_than' => 'GST Amount cannot be zero; please enter a value greater than 0.' + ]], + 'stamp_duty.*' => ['label' => 'Stamp Duty', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Stamp Duty must be numeric.']], + 'total.*' => ['label' => 'Total', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Total must be a numeric value.']], + 'agreed_bp.*' => ['label' => 'Agreed BP %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Agreed BP % must be numeric.']], + 'agreed_tp.*' => ['label' => 'Agreed TP %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Agreed TP % must be numeric.']], + 'agreed_ter.*' => ['label' => 'Agreed TEP %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Agreed TEP % must be numeric.']], + 'agreed_amount.*' => ['label' => 'Agreed Amount', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Agreed Amount must be numeric.']], + 'actual_bp_amt.*' => ['label' => 'Actual BP Amount', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Actual BP Amount must be numeric.']], + 'actual_tp_amt.*' => ['label' => 'Actual TP Amount', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Actual TP Amount must be numeric.']], + 'actual_tep_amt.*' => ['label' => 'Actual TEP Amount', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Actual TEP Amount must be numeric.']], + 'actual_bp_per.*' => ['label' => 'Actual BP %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Actual BP % must be numeric.']], + 'actual_tp_per.*' => ['label' => 'Actual TP %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Actual TP % must be numeric.']], + 'actual_tep_per.*' => ['label' => 'Actual TEP %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Actual TEP % must be numeric.']], + 'actual_bp_brokerage_amt.*'=> ['label' => 'BP Remuneration', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'BP Remuneration must be numeric.']], + 'actual_tp_brokerage_amt.*'=> ['label' => 'TP Remuneration', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'TP Remuneration must be numeric.']], + 'actual_tep_brokerage_amt.*'=>['label' => 'TEP Remuneration', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'TEP Remuneration must be numeric.']], + 'exp_amt.*' => ['label' => 'Expected Amount', 'rules' => 'permit_empty|decimal','errors' => ['decimal'=> 'The Expected Amount field must contain a valid number.']] + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + $post_data = $post_data ? sanitizeInputArrayAdvanced($post_data) : []; $this->myLogger->logme('error', 'Policy Trancaction form data : '. json_encode($post_data)); @@ -2253,16 +2391,264 @@ public function createEndorsementPolicy() { // $id = $this->request->getPost('id'); + $rules = [ + // ========================================== + // 1. CLIENT SECTION + // ========================================== + 'client_id' => [ + 'label' => 'Client', + 'rules' => 'required', + 'errors' => ['required' => 'Client selection is mandatory.'] + ], + 'client_policy_id' => [ + 'label' => 'Policy', + 'rules' => 'required', + 'errors' => ['required' => 'Please select the policy to endorse.'] + ], + 'client_type' => ['rules' => 'permit_empty','errors' => []], + 'client_branch_id' => ['rules' => 'permit_empty','errors' => []], + + // ========================================== + // 2. ENDORSEMENT SECTION + // ========================================== + 'action_type' => [ + 'label' => 'Endorsement Type', + 'rules' => 'required', + 'errors' => ['required' => 'Select an Endorsement Type.'] + ], + 'endorsement_no' => ['label' => 'Endorsement No','rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9\/_-]+$/]', + 'errors' => [ 'regex_match' => 'Endorsement No can only contain letters, numbers, and symbols like / - or _' ]], + 'data_received_date' => [ + 'label' => 'Data Received Date', + 'rules' => 'required|valid_date[d/m/Y]', + 'errors' => ['required' => 'Data Received Date is required.', 'valid_date' => 'Please provide a valid Data Received Date.'] + ], + 'policy_issue_date' => [ + 'label' => 'Endorsement Issue Date', + 'rules' => 'required|valid_date[d/m/Y]', + 'errors' => ['required' => 'Endorsement Issue Date is required.', 'valid_date' => 'Please provide a valid Endorsement Issue Date.'] + ], + // ========================================== + // ENDORSEMENT SECTION + // ========================================== + 'month' => [ + 'label' => 'Endorsement Issue Month', + 'rules' => 'required', + 'errors' => ['required' => 'Endorsement Issue Month (MM/YYYY) is required.'] + ], + 'endorse_eff_date' => [ + 'label' => 'Endorsement Effective Date', + 'rules' => 'permit_empty|valid_date[d/m/Y]', + 'errors' => ['valid_date' => 'Please provide a valid Endorsement Effective Date.'] + ], + 'emp_count' => [ + 'label' => 'No of Insured', + 'rules' => 'permit_empty|numeric', + 'errors' => ['numeric' => 'No of Insured must be a number.'] + ], + 'dependent_count' => [ + 'label' => 'No of Dependents', + 'rules' => 'permit_empty|numeric', + 'errors' => ['numeric' => 'No of Dependents must be a number.'] + ], + 'last_action_date' => [ + 'label' => 'Latest Action Date', + 'rules' => 'permit_empty|valid_date[d/m/Y]', + 'errors' => ['valid_date' => 'Please provide a valid Latest Action Date.'] + ], + 'install_due_date' => [ + 'label' => 'Installment Due Date', + 'rules' => 'permit_empty|valid_date[d/m/Y]', + 'errors' => ['valid_date' => 'Please provide a valid Installment Due Date.'] + ], + + // ========================================== + // PREMIUM DETAILS (ARRAY FIELDS .*) + // ========================================== + 'follow_insurer_id.*' => [ + 'label' => 'Insurer', + 'rules' => 'required', + 'errors' => ['required' => 'Please select an Insurer.'] + ], + 'calc_policy_issue_date.*' => [ + 'label' => 'Premium Endorsement Issue Date', + 'rules' => 'required', + 'errors' => ['required' => 'Endorsement Issue Date is required.'] + ], + 'co_share_per.*' => [ + 'label' => 'Co-Share %', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Co-Share % must be a valid decimal.'] + ], + 'base_premium.*' => [ + 'label' => 'Base Premium', + 'rules' => 'required|numeric|differs[0]', + 'errors' => [ + 'required' => 'Base Premium is required.', + 'numeric' => 'Base Premium must be a valid number.', + 'differs' => 'Base Premium cannot be zero; please enter a positive or negative value.' + ] + ], + 'total.*' => [ + 'label' => 'Total Premium', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Total Premium must be a valid amount.'], + ], + + // Decimal validation with Labels + 'non_comm_per_amt.*' => [ + 'label' => 'Non-Comm Premium', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Non-Comm Premium must be numeric.'] + ], + 'tp_premium.*' => [ + 'label' => 'TP Premium', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'TP Premium must be numeric.'] + ], + 'ter_premium.*' => [ + 'label' => 'TEP Premium', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'TEP Premium must be numeric.'] + ], + 'co_premium.*' => [ + 'label' => 'Co-Premium', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Co-Premium must be numeric.'] + ], + 'co_tp_premium.*' => [ + 'label' => 'Co-TP Premium', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Co-TP Premium must be numeric.'] + ], + 'co_ter_premium.*' => [ + 'label' => 'Co-TEP Premium', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Co-TEP Premium must be numeric.'] + ], + 'cgst.*' => [ + 'label' => 'CGST', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'CGST must be numeric.'] + ], + 'sgst.*' => [ + 'label' => 'SGST', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'SGST must be numeric.'] + ], + 'igst.*' => [ + 'label' => 'IGST', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'IGST must be numeric.'] + ], + 'gst_amount.*' => [ + 'label' => 'GST Amount', + 'rules' => 'permit_empty|decimal|greater_than[0]', + 'errors' => ['decimal' => 'GST Amount must be numeric.','greater_than' => 'GST Amount cannot be zero; please enter a value greater than 0.'] + ], + 'stamp_duty.*' => [ + 'label' => 'Stamp Duty', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Stamp Duty must be numeric.'] + ], + 'agreed_bp.*' => [ + 'label' => 'Agreed BP %', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Agreed BP % must be numeric.'] + ], + 'agreed_tp.*' => [ + 'label' => 'Agreed TP %', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Agreed TP % must be numeric.'] + ], + 'agreed_ter.*' => [ + 'label' => 'Agreed TEP %', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Agreed TEP % must be numeric.'] + ], + 'agreed_amount.*' => [ + 'label' => 'Agreed Amount', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Agreed Amount must be numeric.'] + ], + + // Finance/Management Specific Labels + 'actual_bp_amt.*' => [ + 'label' => 'Actual BP Amount', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Actual BP Amount must be numeric.'] + ], + 'actual_tp_amt.*' => [ + 'label' => 'Actual TP Amount', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Actual TP Amount must be numeric.'] + ], + 'actual_tep_amt.*' => [ + 'label' => 'Actual TEP Amount', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Actual TEP Amount must be numeric.'] + ], + 'actual_bp_per.*' => [ + 'label' => 'Actual BP %', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Actual BP % must be numeric.'] + ], + 'actual_tp_per.*' => [ + 'label' => 'Actual TP %', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Actual TP % must be numeric.'] + ], + 'actual_tep_per.*' => [ + 'label' => 'Actual TEP %', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Actual TEP % must be numeric.'] + ], + 'actual_bp_brokerage_amt.*' => [ + 'label' => 'BP Remuneration', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'BP Remuneration must be numeric.'] + ], + 'actual_tp_brokerage_amt.*' => [ + 'label' => 'TP Remuneration', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'TP Remuneration must be numeric.'] + ], + 'actual_tep_brokerage_amt.*' => [ + 'label' => 'TEP Remuneration', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'TEP Remuneration must be numeric.'] + ], + 'exp_amt.*' => [ + 'label' => 'Expected Amount', + 'rules' => 'permit_empty|decimal', + 'errors' => ['decimal' => 'Expected Amount must be numeric.'] + ], + 'co_share_type.*' => ['label' => 'Is Leader', 'rules' => 'permit_empty','errors' => []], + 'follower_policy_no.*' => ['label' => 'Follower Policy No', 'rules' => 'permit_empty','errors' => []], + 'co_share_id.*' => ['label' => 'Record ID', 'rules' => 'permit_empty','errors' => []], + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + $data = $this->preparePolicyTransactionData(); + + $id = (isset($data['id']) && !empty($data['id'])) ? $data['id'] : null; + $data['status'] = 'completed'; - $id = $data['id'] ?? null; - // print_r($data); die; if (!$id) { return $this->insertEndorsementTransaction($data); } else { return $this->updateEndorsementTransaction($id, $data); } + } private function preparePolicyTransactionData() diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 9b2c1771..6f69ed45 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -952,6 +952,13 @@ class TicketController extends BaseController { // $ticket_data = $this->ticketMasterModel->where('id', $ticket_id)->where('is_active', 1)->first(); $ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id); + + + // Security Check: Verify if record exists + if (empty($ticket_data)) { + // Redirect or show a 404 to prevent "Undefined array key" errors + return redirect()->to(base_url('ticket/list'))->with('error', 'Ticket not found'); + } $ticket_data = $this->formatDateForClaim($ticket_data, 'd/m/Y'); @@ -1120,117 +1127,197 @@ class TicketController extends BaseController public function createTicket() { - $rules = [ - 'emp_code' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Employee Code is required'] - ], + $request_data = $this->request->getPost(); + $selected_ticket_type = $this->request->getPost('ticket_type_id'); - 'emp_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Employee Name is required'] - ], + // 1. Initialize an empty rules array + $rules = []; + if ($selected_ticket_type == 1 || $selected_ticket_type == 72) { + $rules = [ + // --- EMPLOYEE DETAILS --- + 'emp_code' => ['label' => 'Employee Code','rules' => 'required|alpha_numeric_space', + 'errors' => ['required' => 'Employee Code is required'] + ], + 'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]', + 'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long'] + ], + 'insured_name' => ['label' => 'Insured Name','rules' => 'required', + 'errors' => ['required' => 'Insured Name is required'] + ], + 'relationship' => ['label' => 'Relationship','rules' => 'required', + 'errors' => ['required' => 'Please select a Relationship'] + ], + 'policy_no' => ['label' => 'Policy No','rules' => 'permit_empty','errors' => []], + 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []], + 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required', + 'numeric' => 'Mobile must contain only numbers', + 'exact_length' => 'Mobile must be exactly 10 digits' + ] + ], + 'emp_mail' => ['label' => 'Employee Mail ID','rules' => 'required|valid_email', + 'errors' => ['required' => 'Employee Email is required','valid_email' => 'Please provide a valid email address'] + ], + 'emp_personal_mail' => ['label' => 'Personal Mail ID','rules' => 'permit_empty|valid_email', + 'errors' => ['valid_email' => 'Personal email format is invalid'] + ], + 'client_policy_id' => ['label' => 'Policy','rules' => 'required', + 'errors' => ['required' => 'Please select a Policy'] + ], + 'acm_id' => ['label' => 'Account Manager','rules' => 'required', + 'errors' => ['required' => 'Select an Account Manager'] + ], - 'insured_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Insured Name is required'] - ], + // --- CLAIM DETAILS --- + 'claim_status_id' => ['label' => 'Status','rules' => 'required', + 'errors' => ['required' => 'Claim Status is required'] + ], + 'priority' => ['label' => 'Priority','rules' => 'required', + 'errors' => ['required' => 'Priority is required'] + ], + 'mode_of_intimation' => ['label' => 'Mode of Submission','rules' => 'required', + 'errors' => ['required' => 'Mode of Submission is required'] + ], + 'claim_type' => ['label' => 'Claim Type','rules' => 'required', + 'errors' => ['required' => 'Claim Type is required'] + ], + 'hospital_name' => ['label' => 'Hospital Name','rules' => 'required', + 'errors' => ['required' => 'Hospital Name is required'] + ], + 'hospital_address' => ['label' => 'Hospital Address','rules' => 'required', + 'errors' => ['required' => 'Hospital Address is required'] + ], + 'hospital_city' => ['label' => 'Hospital City','rules' => 'required', + 'errors' => ['required' => 'City is required'] + ], + 'hospital_state' => ['label' => 'Hospital State','rules' => 'required', + 'errors' => ['required' => 'State is required'] + ], + 'hospital_pin_code' => ['label' => 'Hospital Pincode','rules' => 'required|numeric|exact_length[6]', + 'errors' => ['exact_length' => 'Pincode must be 6 digits'] + ], + 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'required|numeric|min_length[10]', + 'errors' => ['min_length' => 'Phone number too short'] + ], + 'doa' => ['label' => 'DOA', 'rules' => 'required', + 'errors' => ['required' => 'Date of Admission is required'] + ], + 'dod' => [ 'label' => 'DOD', 'rules' => 'required', + 'errors' => ['required' => 'Date of Discharge is required'] + ], + 'claim_amount' => [ + 'label' => 'Claim Amount', + 'rules' => 'permit_empty|numeric', + 'errors' => ['numeric' => 'Claim Amount must contain only numbers.'] + ], + 'pod_no' => ['label' => 'POD No','rules' => 'permit_empty','errors' => []], - 'relationship' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Relationship is required'] - ], + // --- ADDITIONAL / CONDITIONAL FIELDS --- + 'claim_number' => ['label' => 'Claim Number','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'Invalid Claim Number.']], + 'denial_date' => ['label' => 'Denial Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Denial Date must be dd/mm/yyyy.']], + 'approved_amount' => ['label' => 'Approved Amount','rules' => 'permit_empty|numeric', + 'errors' => ['numeric' => 'Approved amount must be numeric'] + ], + 'approved_date' => ['label' => 'Approved Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Approved Date must be dd/mm/yyyy.']], + 'approved_letter' => ['label' => 'Approved Letter','rules' => 'permit_empty','errors' => []], + 'approved_description' => ['label' => 'Approved Description','rules' => 'permit_empty','errors' => []], + 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'UTR Details contains invalid characters.']], + 'settled_date' => ['label' => 'Settled Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Settled Date must be dd/mm/yyyy.']], + 'settle_letter' => ['label' => 'Settle Letter','rules' => 'permit_empty','errors' => []], + 'pay_initiate_date' => ['label' => 'Payment Initiate Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Payment Initiate Date must be dd/mm/yyyy.']], + 'cancel_remark' => ['label' => 'Cancel Remark','rules' => 'permit_empty','errors' => []], + 'return_remark' => ['label' => 'Return Remark','rules' => 'permit_empty','errors' => []], + 'awb_no_courier_name' => ['label' => 'AWB No','rules' => 'permit_empty','errors' => []], + 'non_id_reason' => ['label' => 'Non ID Reason','rules' => 'permit_empty','errors' => []], + 'client_id' => ['rules' => 'required','errors' => ['required' => 'Client ID is required']], + 'insurer_id' => ['rules' => 'required','errors' => ['required' => 'Insurer is required'], + 'si_amt' => [ 'label' => 'Sum Insured', 'rules' => 'permit_empty|numeric', 'errors' => ['numeric' => 'Sum Insured must be a valid number.']], + 'registration_date' => ['label' => 'Registration Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Registration Date must be dd/mm/yyyy.']], + 'denial_reason' => ['label' => 'Denial Reason', 'rules' => 'permit_empty|string','errors' => ['string' => 'Invalid characters in Denial Reason.']], + ], + ]; + } else if ($selected_ticket_type == 8) { + $rules = [ + // --- GENERAL DETAILS --- + 'client_name' => ['label' => 'Client Name','rules' => 'required|is_not_list[0]', + 'errors' => [ + 'required' => 'Please select a Client Name.', + 'is_not_list' => 'Please select a valid Client from the list.' + ] + ], + 'vehicle_id' => ['label' => 'Vehicle', + 'rules' => 'required', + 'errors' => [ + 'required' => 'Vehicle selection is required.' + ] + ], + 'client_policy_id' => ['label' => 'Policy','rules' => 'required', + 'errors' => ['required' => 'Please select a Policy.',] + ], + 'insurer_id' => ['label' => 'Insurer ID','rules' => 'required', + 'errors' => ['required' => 'Insurer data is missing. Please re-select the policy.'] + ], + 'emp_mobile' => ['label' => 'Mobile No','rules' => 'permit_empty|numeric|exact_length[10]', + 'errors' => ['numeric' => 'Mobile number must contain only digits.', + 'exact_length' => 'Mobile number must be exactly 10 digits.' + ] + ], + 'emp_mail' => ['label' => 'Mail ID','rules' => 'permit_empty|valid_email', + 'errors' => ['valid_email' => 'Please provide a valid email address format.'] + ], - 'emp_mobile' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Employee Mobile is required'] - ], + // --- CLAIM DETAILS --- + 'ticket_type_id' => ['label' => 'Policy Type','rules' => 'required','errors' => ['required' => 'Policy Type is required.']], + 'claim_status_id' => ['label' => 'Status','rules' => 'required','errors' => ['required' => 'Status is required.']], - 'emp_mail' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Employee Email is required'] - ], + // --- HIDDEN KEYS (Integrity Checks) --- + 'ticket_master_id' => ['label' => 'Ticket Master ID','rules' => 'permit_empty','errors' => []], + 'client_id' => ['label' => 'Client ID','rules' => 'required','errors' => ['required' => 'System error: Client ID is missing.']] + ]; + } else { + $rules = [ + // --- EMPLOYEE DETAILS --- + 'emp_code' => ['label' => 'Employee ID', 'rules' => 'required', + 'errors' => ['required' => 'Employee Code is required'] + ], + 'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]', + 'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long'] + ], + 'emp_mobile' => ['label' => 'Mobile No','rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required', + 'numeric' => 'Mobile must be digits only', + 'exact_length' => 'Mobile must be exactly 10 digits' + ] + ], + 'emp_mail' => ['label' => 'Mail ID','rules' => 'required|valid_email', + 'errors' => ['required' => 'Official email is required','valid_email' => 'Please provide a valid official email'] + ], + 'emp_personal_mail' => ['label' => 'Personal Mail','rules' => 'permit_empty|valid_email', + 'errors' => ['valid_email' => 'Personal email format is invalid'] + ], + 'client_policy_id' => ['label' => 'Policy','rules' => 'required','errors' => ['required' => 'Please select a Policy']], + 'acm_id' => ['label' => 'Account Manager','rules' => 'required','errors' => ['required' => 'Account Manager must be selected']], - 'client_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Client ID is required'] - ], - - 'insurer_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Insurer is required'] - ], - - 'client_policy_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Policy is required'] - ], - - 'claim_status_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Claim Status is required'] - ], - - 'priority' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Priority is required'] - ], - - 'mode_of_intimation' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Mode of Intimation is required'] - ], - - 'claim_type' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Claim Type is required'] - ], - - 'hospital_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital Name is required'] - ], - - 'hospital_address' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital Address is required'] - ], - - 'hospital_city' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital City is required'] - ], - - 'hospital_state' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital State is required'] - ], - - 'hospital_pin_code' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital Pincode is required'] - ], - - 'hospital_phone_no' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital Phone Number is required'] - ], - - 'doa' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Date of Admission is required'] - ], - - 'dod' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Date of Discharge is required'] - ], - - 'claim_amount' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Claim Amount is required'] - ], - ]; + // --- CLAIM DETAILS --- + 'claim_status_id' => ['label' => 'Status','rules' => 'required','errors' => ['required' => 'Claim status is required']], + 'claim_type' => ['label' => 'Claim Type','rules' => 'required','errors' => ['required' => 'Claim type is required']], + 'dob' => ['label' => 'Date of Birth','rules' => 'required','errors' => ['required' => 'Date of Birth is required']], + 'date_of_intimat' => ['label' => 'Date of Intimation','rules' => 'required','errors' => ['required' => 'Intimation date is required']], + 'si_amt' => ['label' => 'Sum Insured','rules' => 'required|numeric','errors' => ['numeric' => 'Sum insured must be a number']], + 'approved_amount' => ['label' => 'Approved Amount','rules' => 'permit_empty|numeric','errors' => ['numeric' => 'Approved amount must be numeric']], + 'approved_date' => ['label' => 'Approved Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Approved Date must be dd/mm/yyyy.']], + 'approved_letter' => ['label' => 'Approved Letter','rules' => 'permit_empty','errors' => []], + 'approved_description' => ['label' => 'Approved Description','rules' => 'permit_empty','errors' => []], + 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'UTR Details contains invalid characters.']], + 'settled_date' => ['label' => 'Settled Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Settled Date must be dd/mm/yyyy.']], + 'settle_letter' => ['label' => 'Settle Letter','rules' => 'permit_empty','errors' => []], + 'pay_initiate_date' => ['label' => 'Payment Initiate Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Payment Initiate Date must be dd/mm/yyyy.']], + 'cancel_remark' => ['label' => 'Cancel Remark','rules' => 'permit_empty','errors' => []], + 'return_remark' => ['label' => 'Return Remark','rules' => 'permit_empty','errors' => []], + ]; + } if (!$this->validate($rules)) { return $this->response->setStatusCode(400)->setJSON([ @@ -1303,119 +1390,198 @@ class TicketController extends BaseController public function updateTicket() { + + $request_data = $this->request->getPost(); + $selected_ticket_type = $this->request->getPost('ticket_type_id'); - $rules = [ - 'emp_code' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Employee Code is required'] - ], + // 1. Initialize an empty rules array + $rules = []; + if ($selected_ticket_type == 1 || $selected_ticket_type == 72) { + $rules = [ + // --- EMPLOYEE DETAILS --- + 'emp_code' => ['label' => 'Employee Code','rules' => 'required|alpha_numeric_space', + 'errors' => ['required' => 'Employee Code is required'] + ], + 'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]', + 'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long'] + ], + 'insured_name' => ['label' => 'Insured Name','rules' => 'required', + 'errors' => ['required' => 'Insured Name is required'] + ], + 'relationship' => ['label' => 'Relationship','rules' => 'required', + 'errors' => ['required' => 'Please select a Relationship'] + ], + 'policy_no' => ['label' => 'Policy No','rules' => 'permit_empty','errors' => []], + 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []], + 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required', + 'numeric' => 'Mobile must contain only numbers', + 'exact_length' => 'Mobile must be exactly 10 digits' + ] + ], + 'emp_mail' => ['label' => 'Employee Mail ID','rules' => 'required|valid_email', + 'errors' => ['required' => 'Employee Email is required','valid_email' => 'Please provide a valid email address'] + ], + 'emp_personal_mail' => ['label' => 'Personal Mail ID','rules' => 'permit_empty|valid_email', + 'errors' => ['valid_email' => 'Personal email format is invalid'] + ], + 'client_policy_id' => ['label' => 'Policy','rules' => 'required', + 'errors' => ['required' => 'Please select a Policy'] + ], + 'acm_id' => ['label' => 'Account Manager','rules' => 'required', + 'errors' => ['required' => 'Select an Account Manager'] + ], - 'emp_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Employee Name is required'] - ], + // --- CLAIM DETAILS --- + 'claim_status_id' => ['label' => 'Status','rules' => 'required', + 'errors' => ['required' => 'Claim Status is required'] + ], + 'priority' => ['label' => 'Priority','rules' => 'required', + 'errors' => ['required' => 'Priority is required'] + ], + 'mode_of_intimation' => ['label' => 'Mode of Submission','rules' => 'required', + 'errors' => ['required' => 'Mode of Submission is required'] + ], + 'claim_type' => ['label' => 'Claim Type','rules' => 'required', + 'errors' => ['required' => 'Claim Type is required'] + ], + 'hospital_name' => ['label' => 'Hospital Name','rules' => 'required', + 'errors' => ['required' => 'Hospital Name is required'] + ], + 'hospital_address' => ['label' => 'Hospital Address','rules' => 'required', + 'errors' => ['required' => 'Hospital Address is required'] + ], + 'hospital_city' => ['label' => 'Hospital City','rules' => 'required', + 'errors' => ['required' => 'City is required'] + ], + 'hospital_state' => ['label' => 'Hospital State','rules' => 'required', + 'errors' => ['required' => 'State is required'] + ], + 'hospital_pin_code' => ['label' => 'Hospital Pincode','rules' => 'required|numeric|exact_length[6]', + 'errors' => ['exact_length' => 'Pincode must be 6 digits'] + ], + 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'required|numeric|min_length[10]', + 'errors' => ['min_length' => 'Phone number too short'] + ], + 'doa' => ['label' => 'DOA', 'rules' => 'required', + 'errors' => ['required' => 'Date of Admission is required'] + ], + 'dod' => [ 'label' => 'DOD', 'rules' => 'required', + 'errors' => ['required' => 'Date of Discharge is required'] + ], + 'claim_amount' => [ + 'label' => 'Claim Amount', + 'rules' => 'permit_empty|numeric', + 'errors' => ['numeric' => 'Claim Amount must contain only numbers.'] + ], + 'pod_no' => ['label' => 'POD No','rules' => 'permit_empty','errors' => []], - 'insured_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Insured Name is required'] - ], + // --- ADDITIONAL / CONDITIONAL FIELDS --- + 'claim_number' => ['label' => 'Claim Number','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'Invalid Claim Number.']], + 'denial_date' => ['label' => 'Denial Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Denial Date must be dd/mm/yyyy.']], + 'approved_amount' => ['label' => 'Approved Amount','rules' => 'permit_empty|numeric', + 'errors' => ['numeric' => 'Approved amount must be numeric'] + ], + 'approved_date' => ['label' => 'Approved Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Approved Date must be dd/mm/yyyy.']], + 'approved_letter' => ['label' => 'Approved Letter','rules' => 'permit_empty','errors' => []], + 'approved_description' => ['label' => 'Approved Description','rules' => 'permit_empty','errors' => []], + 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'UTR Details contains invalid characters.']], + 'settled_date' => ['label' => 'Settled Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Settled Date must be dd/mm/yyyy.']], + 'settle_letter' => ['label' => 'Settle Letter','rules' => 'permit_empty','errors' => []], + 'pay_initiate_date' => ['label' => 'Payment Initiate Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Payment Initiate Date must be dd/mm/yyyy.']], + 'cancel_remark' => ['label' => 'Cancel Remark','rules' => 'permit_empty','errors' => []], + 'return_remark' => ['label' => 'Return Remark','rules' => 'permit_empty','errors' => []], + 'awb_no_courier_name' => ['label' => 'AWB No','rules' => 'permit_empty','errors' => []], + 'non_id_reason' => ['label' => 'Non ID Reason','rules' => 'permit_empty','errors' => []], + 'client_id' => ['rules' => 'required','errors' => ['required' => 'Client ID is required']], + 'insurer_id' => ['rules' => 'required','errors' => ['required' => 'Insurer is required'], + 'si_amt' => [ 'label' => 'Sum Insured', 'rules' => 'permit_empty|numeric', 'errors' => ['numeric' => 'Sum Insured must be a valid number.']], + 'registration_date' => ['label' => 'Registration Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Registration Date must be dd/mm/yyyy.']], + 'denial_reason' => ['label' => 'Denial Reason', 'rules' => 'permit_empty|string','errors' => ['string' => 'Invalid characters in Denial Reason.']], + ], + ]; + } else if ($selected_ticket_type == 8) { + $rules = [ + // --- GENERAL DETAILS --- + 'client_name' => ['label' => 'Client Name','rules' => 'required|is_not_list[0]', + 'errors' => [ + 'required' => 'Please select a Client Name.', + 'is_not_list' => 'Please select a valid Client from the list.' + ] + ], + 'vehicle_id' => ['label' => 'Vehicle', + 'rules' => 'required', + 'errors' => [ + 'required' => 'Vehicle selection is required.' + ] + ], + 'client_policy_id' => ['label' => 'Policy','rules' => 'required', + 'errors' => ['required' => 'Please select a Policy.',] + ], + 'insurer_id' => ['label' => 'Insurer ID','rules' => 'required', + 'errors' => ['required' => 'Insurer data is missing. Please re-select the policy.'] + ], + 'emp_mobile' => ['label' => 'Mobile No','rules' => 'permit_empty|numeric|exact_length[10]', + 'errors' => ['numeric' => 'Mobile number must contain only digits.', + 'exact_length' => 'Mobile number must be exactly 10 digits.' + ] + ], + 'emp_mail' => ['label' => 'Mail ID','rules' => 'permit_empty|valid_email', + 'errors' => ['valid_email' => 'Please provide a valid email address format.'] + ], - 'relationship' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Relationship is required'] - ], + // --- CLAIM DETAILS --- + 'ticket_type_id' => ['label' => 'Policy Type','rules' => 'required','errors' => ['required' => 'Policy Type is required.']], + 'claim_status_id' => ['label' => 'Status','rules' => 'required','errors' => ['required' => 'Status is required.']], - 'emp_mobile' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Employee Mobile is required'] - ], - - 'emp_mail' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Employee Email is required'] - ], - - 'client_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Client ID is required'] - ], - - 'insurer_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Insurer is required'] - ], - - 'client_policy_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Policy is required'] - ], - - 'claim_status_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Claim Status is required'] - ], - - 'priority' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Priority is required'] - ], - - 'mode_of_intimation' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Mode of Intimation is required'] - ], - - 'claim_type' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Claim Type is required'] - ], - - 'hospital_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital Name is required'] - ], - - 'hospital_address' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital Address is required'] - ], - - 'hospital_city' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital City is required'] - ], - - 'hospital_state' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital State is required'] - ], - - 'hospital_pin_code' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital Pincode is required'] - ], - - 'hospital_phone_no' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Hospital Phone Number is required'] - ], - - 'doa' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Date of Admission is required'] - ], - - 'dod' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Date of Discharge is required'] - ], - - 'claim_amount' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Claim Amount is required'] - ], - ]; + // --- HIDDEN KEYS (Integrity Checks) --- + 'ticket_master_id' => ['label' => 'Ticket Master ID','rules' => 'permit_empty','errors' => []], + 'client_id' => ['label' => 'Client ID','rules' => 'required','errors' => ['required' => 'System error: Client ID is missing.']] + ]; + } else { + $rules = [ + // --- EMPLOYEE DETAILS --- + 'emp_code' => ['label' => 'Employee ID', 'rules' => 'required', + 'errors' => ['required' => 'Employee Code is required'] + ], + 'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]', + 'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long'] + ], + 'emp_mobile' => ['label' => 'Mobile No','rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required', + 'numeric' => 'Mobile must be digits only', + 'exact_length' => 'Mobile must be exactly 10 digits' + ] + ], + 'emp_mail' => ['label' => 'Mail ID','rules' => 'required|valid_email', + 'errors' => ['required' => 'Official email is required','valid_email' => 'Please provide a valid official email'] + ], + 'emp_personal_mail' => ['label' => 'Personal Mail','rules' => 'permit_empty|valid_email', + 'errors' => ['valid_email' => 'Personal email format is invalid'] + ], + 'client_policy_id' => ['label' => 'Policy','rules' => 'required','errors' => ['required' => 'Please select a Policy']], + 'acm_id' => ['label' => 'Account Manager','rules' => 'required','errors' => ['required' => 'Account Manager must be selected']], + // --- CLAIM DETAILS --- + 'claim_status_id' => ['label' => 'Status','rules' => 'required','errors' => ['required' => 'Claim status is required']], + 'claim_type' => ['label' => 'Claim Type','rules' => 'required','errors' => ['required' => 'Claim type is required']], + 'dob' => ['label' => 'Date of Birth','rules' => 'required','errors' => ['required' => 'Date of Birth is required']], + 'date_of_intimat' => ['label' => 'Date of Intimation','rules' => 'required','errors' => ['required' => 'Intimation date is required']], + 'si_amt' => ['label' => 'Sum Insured','rules' => 'required|numeric','errors' => ['numeric' => 'Sum insured must be a number']], + 'approved_amount' => ['label' => 'Approved Amount','rules' => 'permit_empty|numeric','errors' => ['numeric' => 'Approved amount must be numeric']], + 'approved_date' => ['label' => 'Approved Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Approved Date must be dd/mm/yyyy.']], + 'approved_letter' => ['label' => 'Approved Letter','rules' => 'permit_empty','errors' => []], + 'approved_description' => ['label' => 'Approved Description','rules' => 'permit_empty','errors' => []], + 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'UTR Details contains invalid characters.']], + 'settled_date' => ['label' => 'Settled Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Settled Date must be dd/mm/yyyy.']], + 'settle_letter' => ['label' => 'Settle Letter','rules' => 'permit_empty','errors' => []], + 'pay_initiate_date' => ['label' => 'Payment Initiate Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Payment Initiate Date must be dd/mm/yyyy.']], + 'cancel_remark' => ['label' => 'Cancel Remark','rules' => 'permit_empty','errors' => []], + 'return_remark' => ['label' => 'Return Remark','rules' => 'permit_empty','errors' => []], + ]; + } if (!$this->validate($rules)) { return $this->response->setStatusCode(400)->setJSON([ 'status' => false, @@ -1424,8 +1590,7 @@ class TicketController extends BaseController 'errors' => $this->validator->getErrors() ]); } - - $request_data = $this->request->getPost(); + $sanitized_data = sanitizeInputArrayAdvanced($request_data); $ticket_data = $this->formatDateForClaim($sanitized_data); $ticket_id = $this->request->getPost('ticket_master_id'); @@ -1604,12 +1769,34 @@ class TicketController extends BaseController } } } elseif ($action == 2) { - $data = $this->request->getPost(); + $request_data = $this->request->getPost(); + + $rules = [ + 'note' => [ + 'label' => 'Add Notes', + 'rules' => 'required|min_length[3]|max_length[1000]', + 'errors' => [ + 'required' => 'The note field cannot be empty.', + 'min_length' => 'The note is too short (minimum 3 characters).', + 'max_length' => 'The note cannot exceed 1000 characters.' + ] + ], + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + + $data = sanitizeInputArrayAdvanced($request_data); // if (isset($data['id']) && $data['id'] != ''){ // print_rr($data);die(); $status = $this->ticketNoteModel->save($data); $id = isset($data['id']) ? $data['id'] : $this->ticketNoteModel->insertID(); - // } if ($status) { return $this->respond(['status' => true, 'id' => $id], 200); @@ -1623,6 +1810,35 @@ class TicketController extends BaseController { $received_data = $this->request->getPost(); + $rules = [ + 'emp_mail' => [ + 'label' => 'To', + 'rules' => 'required|valid_email', + 'errors' => ['required' => 'Recipient email is missing.','valid_email' => 'Please provide a valid email address for the recipient.'] + ], + 'mail_subject' => [ + 'label' => 'Subject', + 'rules' => 'required|min_length[5]', + 'errors' => [ + 'required' => 'Please enter a Subject for the mail.', + 'min_length' => 'Subject should be at least 5 characters long.' + ] + ], + 'content' => [ + 'label' => 'Mail Content', + 'rules' => 'required', + 'errors' => ['required' => 'You cannot send an empty mail.'] + ] + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } // print_r($received_data); die; $received_data['sender'] = 'staff'; $status = $this->ticketMessageModel->insert($received_data); @@ -2773,7 +2989,45 @@ class TicketController extends BaseController public function upload_url() { - $data = $this->request->getPost(); + + $request_data = $this->request->getPost(); + $data = sanitizeInputArrayAdvanced($request_data); + + $rules = [ + 'ticket_id_url' => [ + 'label' => 'Ticket ID URL', + 'rules' => 'required|numeric', + 'errors' => [ + 'required' => 'System could not identify the Number.', + 'numeric' => 'Invalid format.' + ] + ], + 'docs_name.*' => [ + 'label' => 'Required Documents', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_\- ]+$/]', + 'errors' => [ + 'required' => 'Document Name is required', + 'regex_match' => 'Document Name can only contain letters, numbers, hyphens, and underscores' + ] + ], + 'url.*' => [ + 'label' => 'URL', + 'rules' => 'required', + 'errors' => [ + 'required' => 'URL is required', + ] + ] + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + $get_file_data = $this->request->getFiles('file_upload') ?? []; $ticket_id = $data['ticket_id_url']; @@ -3254,12 +3508,40 @@ class TicketController extends BaseController } // -------- END CLAIM DUMP UPLOAD ---------------------------------------------------------------------------------------------- - - public function saveIRDocsJson() { - $ticket_id = $this->request->getPost('ticket_id'); - $required_docs = $this->request->getPost('required_docs'); + $request_data = $this->request->getPost(); + $data = sanitizeInputArrayAdvanced($request_data); + $ticket_id = $data['ticket_id']; + $required_docs = $data['required_docs']; + + $rules = [ + 'ticket_id' => [ + 'label' => 'Ticket ID', + 'rules' => 'required|numeric', + 'errors' => [ + 'required' => 'System could not identify the Number.', + 'numeric' => 'Invalid format.' + ] + ], + 'required_docs' => [ + 'label' => 'Required Documents', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_\- ]+$/]', + 'errors' => [ + 'required' => 'Document Name is required', + 'regex_match' => 'Document Name can only contain letters, numbers, hyphens, and underscores' + ] + ] + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } if(empty($ticket_id)){ return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to save Docs'], 200); diff --git a/app/Views/UserList.php b/app/Views/UserList.php index 674a0d95..571ddda9 100755 --- a/app/Views/UserList.php +++ b/app/Views/UserList.php @@ -1148,15 +1148,28 @@ table.dataTable tbody td { console.error("Error Thrown:", error); console.error("Status:", status); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - }else{toastr.error('Server error occurred.', 'Error');} + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } } }); @@ -1357,15 +1370,31 @@ table.dataTable tbody td { error: function(xhr) { console.log("Error: " + xhr.statusText); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - }else{toastr.error('Server error occurred.', 'Error');} + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + }else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + console.error('Unexpected error:', xhr.responseText); + }, complete: function() { btn.disabled = false; @@ -1426,17 +1455,31 @@ table.dataTable tbody td { }, error: function(xhr) { console.log("Error: " + xhr.statusText); - toastr.error('Server error occurred.', 'Error'); + console.error(xhr.responseText); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - }else{toastr.error('Server error occurred.', 'Error');} + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, complete: function() { btn.disabled = false; diff --git a/app/Views/add_image_list.php b/app/Views/add_image_list.php index 113ce962..d79655f6 100755 --- a/app/Views/add_image_list.php +++ b/app/Views/add_image_list.php @@ -219,39 +219,42 @@ table.dataTable thead th { } }, error: function(xhr, status, error) { - console.error(xhr.responseText); - console.error('Status:', status); - console.error('Error:', error); + // Get the current domain + const hostname = window.location.hostname; + if (hostname === 'localhost' || hostname === '127.0.0.1') { + // DEVELOPER MODE: Show everything in a nice group + console.group("%c Debug: Server Error ", "background: #222; color: #bada55; padding: 2px;"); + console.error("Status:", xhr.status); + console.error("Type:", error); + console.error("Full Response:", xhr.responseText); + console.groupEnd(); + } else { + // LIVE MODE: Only log a simple, non-revealing error + console.error("Server Error: Action could not be completed. Reference Code: " + xhr.responseText); + } - let msg = 'Something went wrong. Please try again later.'; - - switch (xhr.status) { - case 400: - let response = xhr.responseJSON || JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - msg = response.message || 'Bad Request — Invalid input.'; - break; - case 401: - msg = 'Unauthorized — Please log in again.'; - break; - case 403: - msg = 'Forbidden — You do not have permission.'; - break; - case 404: - msg = 'Not Found — Requested URL or resource not found.'; - break; - case 500: - console.log('Internal Server Error — Please contact support.'); - msg = xhr.responseJSON?.message || xhr.responseText || msg; - break; - default: - msg = xhr.responseJSON?.message || xhr.responseText || msg; + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } } diff --git a/app/Views/bds_dump_file_list.php b/app/Views/bds_dump_file_list.php index 0f7f1cd2..b8a39153 100644 --- a/app/Views/bds_dump_file_list.php +++ b/app/Views/bds_dump_file_list.php @@ -196,14 +196,29 @@ error: function(xhr, status, error) { // Handle error response console.error('Upload failed:', error); - console.error('Upload failed:', error); + console.error('Unexpected error:', xhr.responseText); if (xhr.status === 400) { - var response = JSON.parse(xhr.responseText); - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - if (xhr.status === 500) { - var response = JSON.parse(xhr.responseText); - toastr.warning(response.message || 'Validation failed', 'Warning'); + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } }, complete: function() { diff --git a/app/Views/cd_master_add_modal.php b/app/Views/cd_master_add_modal.php index 23ca8ce1..4cc06188 100644 --- a/app/Views/cd_master_add_modal.php +++ b/app/Views/cd_master_add_modal.php @@ -205,14 +205,27 @@ $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } toastr.error('An error occurred while adding the CD account number.', 'Error'); } diff --git a/app/Views/claim_files_upload.php b/app/Views/claim_files_upload.php index cd2b4368..7b9cd814 100644 --- a/app/Views/claim_files_upload.php +++ b/app/Views/claim_files_upload.php @@ -217,6 +217,29 @@ console.log("error in submission of url data"); console.error(xhr.responseText); console.error(status, error); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, complete : function(){ @@ -673,7 +696,30 @@ }, function(xhr, status, error) { console.error('Error fetching data:', error); console.error(xhr.responseText); - toastr.error('An error occurred while saving docs.', 'Error'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + }); } diff --git a/app/Views/claim_mis_file_list.php b/app/Views/claim_mis_file_list.php index 5d9304ef..56a7c04e 100644 --- a/app/Views/claim_mis_file_list.php +++ b/app/Views/claim_mis_file_list.php @@ -235,14 +235,29 @@ error: function(xhr, status, error) { // Handle error response console.error('Upload failed:', error); - console.error('Upload failed:', error); + console.error('Unexpected error:', xhr.responseText); if (xhr.status === 400) { - var response = JSON.parse(xhr.responseText); - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - if (xhr.status === 500) { - var response = JSON.parse(xhr.responseText); - toastr.warning(response.message || 'Validation failed', 'Warning'); + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } }, complete: function() { diff --git a/app/Views/client_basic_info.php b/app/Views/client_basic_info.php index 625efc1e..17722d1c 100755 --- a/app/Views/client_basic_info.php +++ b/app/Views/client_basic_info.php @@ -351,19 +351,28 @@ input:checked + .slider:before { $submitButton.prop('disabled', false); if (xhr.status === 400) { let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages if (response.errors) { $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); } else { toastr.warning(response.message || 'Validation failed', 'Warning'); } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); } else if (xhr.status === 404) { toastr.warning('Resource not found', 'Warning'); } else if (xhr.status === 500) { - toastr.warning('Internal server error', 'Warning'); + toastr.error('Something went wrong . Please try again later.', 'Server Error'); } else { - toastr.warning('Unknown error occurred', 'Warning'); + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } }, 1000); } diff --git a/app/Views/client_branch.php b/app/Views/client_branch.php index c9b1719d..97d8161a 100755 --- a/app/Views/client_branch.php +++ b/app/Views/client_branch.php @@ -558,19 +558,7 @@ $("#branch_form").submit(function(event) { if(xhr.status === 409){ alert('The Current Branch is Already Existing..!!'); } - // if (xhr.status === 400) { - // let response = JSON.parse(xhr.responseText); - // if (response.errors) { - // let errorMessages = ""; - // $.each(response.errors, function (field, message) { - // errorMessages += `• ${message}
`; - // }); - // toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); - // } else { - // toastr.warning(response.message || 'Validation failed', 'Warning'); - // } - // } - if (xhr.status === 400) { + else if (xhr.status === 400) { let response = JSON.parse(xhr.responseText); let errorMessages = ""; let seenMessages = []; // Array to store unique messages @@ -587,6 +575,13 @@ $("#branch_form").submit(function(event) { } else { toastr.warning(response.message || 'Validation failed', 'Warning'); } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } }, 300); }, diff --git a/app/Views/client_list.php b/app/Views/client_list.php index 90bf5f3e..6594af87 100755 --- a/app/Views/client_list.php +++ b/app/Views/client_list.php @@ -378,55 +378,55 @@ $(document).ready(function() `); - $('#toggleButtons').on('change', function() { - let type = $(this).is(':checked') ? 1 : 2; - // $('div.col-6 h4').text( - // $(this).is(':checked') - // ? "GC Client List" - // : "RC Client List" - // ); - let url = '' + type; - $.ajax({ - url: url, - method: 'GET', - success: function(response) { - if (response.status === "success" && Array.isArray(response.data)) { - console.error("#CL 1 : ", response.data); - renderRows(response.data); - } else { - console.error("#CL 2 : ", response.data); - renderRows([]); - } - }, - error: function(xhr, status, error) { - console.error("Error loading:", error); - renderRows([]); - } - }); - }); +$('#toggleButtons').on('change', function() { + let type = $(this).is(':checked') ? 1 : 2; + let url = '' + type; + + $('.loader').fadeIn(); // Show loader during AJAX + + $.ajax({ + url: url, + method: 'GET', + success: function(response) { + $('.loader').fadeOut(); + // Pass response.data directly to the function + if (response.status === "success") { + renderRows(response.data); + } else { + // If the structure is slightly different, pass the whole object + renderRows(response); + } + }, + error: function(xhr, status, error) { + $('.loader').fadeOut(); + console.error("Error loading:", error); + renderRows([]); + } + }); +}); }) - function renderRows(data) { - table.clear(); - if (Array.isArray(data) && data.length) { - data.forEach((row, index) => { - // let clientrm = json_encode($client_rm) - // let account_managers = ""; - // - // clientrm.forEach(client => { - // if (client.client_id == row.id) { - // account_managers += client.account_manager + ", "; - // } - // }); - // account_managers = account_managers.replace(/,\s*$/, ""); - // if (account_managers === "") account_managers = "N/A"; + function renderRows(incomingData) { + + let actualList = []; + if (incomingData && incomingData.clientList) { + actualList = incomingData.clientList; + } else if (Array.isArray(incomingData)) { + actualList = incomingData; + } + + table.clear(); + + if (actualList.length > 0) { + actualList.forEach((row, index) => { + let rowData = [ index + 1, `${row.client_name} (${row.short_name})`, - row.account_managers, + row.account_managers || "N/A", ` diff --git a/app/Views/frontend_content_list.php b/app/Views/frontend_content_list.php index b90f8869..71f8e0ed 100644 --- a/app/Views/frontend_content_list.php +++ b/app/Views/frontend_content_list.php @@ -450,17 +450,31 @@ error: function () { $('.loader, .loader-mask').fadeOut(); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - }else{ - toastr.error("Something went wrong!", 'Error'); - }} + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } + else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } + else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + } }); } diff --git a/app/Views/insurer_basic_info.php b/app/Views/insurer_basic_info.php index f553b093..fa13a529 100755 --- a/app/Views/insurer_basic_info.php +++ b/app/Views/insurer_basic_info.php @@ -264,16 +264,29 @@ input:checked + .slider:before { console.error(status, error); $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - console.log('Something Wrong!', 'warning'); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } } }); diff --git a/app/Views/insurer_export_templete.php b/app/Views/insurer_export_templete.php index 5ad3bdc0..bac14afc 100755 --- a/app/Views/insurer_export_templete.php +++ b/app/Views/insurer_export_templete.php @@ -323,35 +323,31 @@ console.error('Response headers:', xhr.getAllResponseHeaders()); console.error('Response URL:', xhr.responseURL); - // Handle validation errors (CI4) - if (xhr.status === 400) { - - let response = null; - - try { - response = JSON.parse(xhr.responseText); - } catch (e) { - toastr.error('Invalid server response', 'Error'); - return; - } - - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - - return; - } - - // Handle server errors - if (xhr.status >= 500) { - toastr.error('Server error. Please try again later.', 'Error'); - return; - } + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + // Fallback toastr.error('Unexpected error occurred.', 'Error'); }, diff --git a/app/Views/kyc_docs.php b/app/Views/kyc_docs.php index 385817c2..1efa8204 100755 --- a/app/Views/kyc_docs.php +++ b/app/Views/kyc_docs.php @@ -255,16 +255,27 @@ $(document).ready(function () { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + }else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } - toastr.warning('Something Wrong!', 'Warning'); }, 1000); } }); @@ -307,16 +318,27 @@ $(document).ready(function () { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - } - toastr.warning('Something Wrong!', 'warning'); + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + }else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, 1000); } }); diff --git a/app/Views/leads_form.php b/app/Views/leads_form.php index 44ca3949..ef30ba59 100644 --- a/app/Views/leads_form.php +++ b/app/Views/leads_form.php @@ -1697,20 +1697,45 @@ }, error: function(xhr, status, error) { - console.error(xhr.responseText); - console.error(status, error); + const hostname = window.location.hostname; + if (hostname === 'localhost' || hostname === '127.0.0.1') { + // DEVELOPER MODE: Show everything in a nice group + console.group("%c Debug: Server Error ", "background: #222; color: #bada55; padding: 2px;"); + console.error("Status:", xhr.status); + console.error("Type:", error); + console.error("Full Response:", xhr.responseText); + console.groupEnd(); + } else { + // LIVE MODE: Only log a simple, non-revealing error + console.error("Server Error: Action could not be completed. Reference Code: " + xhr.responseText); + } + $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } - } } }); }); diff --git a/app/Views/leads_non_eb.php b/app/Views/leads_non_eb.php index 8b61fc90..8f5a82f8 100644 --- a/app/Views/leads_non_eb.php +++ b/app/Views/leads_non_eb.php @@ -629,23 +629,29 @@ $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - let errorMessages = ""; - let seenMessages = []; // Array to store unique messages - if (response.errors) { - $.each(response.errors, function (field, message) { - // Only add the message if it hasn't been seen before - if (!seenMessages.includes(message)) { - errorMessages += `• ${message}
`; - seenMessages.push(message); // Mark this message as "seen" - } - }); + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } - toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } - } } }); }); diff --git a/app/Views/nhance_branch_list.php b/app/Views/nhance_branch_list.php index d91db327..7dc6f819 100644 --- a/app/Views/nhance_branch_list.php +++ b/app/Views/nhance_branch_list.php @@ -279,20 +279,45 @@ $('.loader-mask').delay(350).fadeOut('slow'); }, function(xhr, status, error) { - console.error('Error fetching data:', error); - console.error(xhr.responseText); - $('.loader').fadeOut(); - $('.loader-mask').delay(350).fadeOut('slow'); - if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - } + $('.loader').fadeOut(); + $('.loader-mask').delay(350).fadeOut('slow'); + // Get the current domain + const hostname = window.location.hostname; + if (hostname === 'localhost' || hostname === '127.0.0.1') { + // DEVELOPER MODE: Show everything in a nice group + console.group("%c Debug: Server Error ", "background: #222; color: #bada55; padding: 2px;"); + console.error("Status:", xhr.status); + console.error("Type:", error); + console.error("Full Response:", xhr.responseText); + console.groupEnd(); + } else { + // LIVE MODE: Only log a simple, non-revealing error + console.error("Server Error: Action could not be completed. Reference Text: " + xhr.responseText); + } + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }); } diff --git a/app/Views/policy_transaction_endorsement_form.php b/app/Views/policy_transaction_endorsement_form.php index 0e15e129..4b4ab0ba 100644 --- a/app/Views/policy_transaction_endorsement_form.php +++ b/app/Views/policy_transaction_endorsement_form.php @@ -913,6 +913,29 @@ console.error(status, error); $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } } }); }); diff --git a/app/Views/policy_transaction_inception_form.php b/app/Views/policy_transaction_inception_form.php index 2fd4092b..7a9c9489 100644 --- a/app/Views/policy_transaction_inception_form.php +++ b/app/Views/policy_transaction_inception_form.php @@ -4098,6 +4098,31 @@ console.error(status, error); $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); + setTimeout(function() { + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + }, 1000); } }); }); diff --git a/app/Views/pos_list.php b/app/Views/pos_list.php index d94e45c2..500fbdfa 100644 --- a/app/Views/pos_list.php +++ b/app/Views/pos_list.php @@ -361,18 +361,34 @@ } $('.loader, .loader-mask').fadeOut(); }, - error: function () { + error: function (xhr) { $('.loader, .loader-mask').fadeOut(); - if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - } + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + console.error('Unexpected error:', xhr.responseText); + } }); } diff --git a/app/Views/retail_endorsement_list.php b/app/Views/retail_endorsement_list.php index 97a163a3..67ad9fce 100755 --- a/app/Views/retail_endorsement_list.php +++ b/app/Views/retail_endorsement_list.php @@ -273,6 +273,15 @@ }); + $(document).on('click', '.emp_data_model', function() { + + var id = $(this).attr('data-id'); + var eno = $(this).attr('data-eno'); + var status = $(this).attr('data-status'); + + fetchRetailEndorsementData(id, eno, status); + }); + function submitRetailEndorsement(e) { e.preventDefault(); // stop normal form submit var form = document.getElementById("retailEndorsementForm"); @@ -310,18 +319,31 @@ } }, error: function(xhr) { - toastr.error("Something went wrong!", 'Error'); console.error(xhr.responseText); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - } + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, complete: function() { btn.disabled = false; diff --git a/app/Views/rto_master_list.php b/app/Views/rto_master_list.php index 3c8c912a..b872d8be 100644 --- a/app/Views/rto_master_list.php +++ b/app/Views/rto_master_list.php @@ -244,15 +244,29 @@ $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - } + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }); } diff --git a/app/Views/test_members_list.php b/app/Views/test_members_list.php index 2a618e2b..5dc58646 100644 --- a/app/Views/test_members_list.php +++ b/app/Views/test_members_list.php @@ -717,14 +717,20 @@ document.addEventListener("DOMContentLoaded", function () { } if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } }else{ toastr.warning('Error uploading file', 'Warning'); } // toastr.warning('Error uploading file', 'Warning'); diff --git a/app/Views/thz_list.php b/app/Views/thz_list.php index 0ee4c871..d055fe91 100644 --- a/app/Views/thz_list.php +++ b/app/Views/thz_list.php @@ -506,18 +506,31 @@ beccause = dataTables_length and dataTables_paginate need in same line thats why } }, error: function(xhr) { - if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - }else{ - toastr.error("Something went wrong!", 'Error');} console.error(xhr.responseText); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + }else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, complete: function() { btn.disabled = false; diff --git a/app/Views/thz_notes.php b/app/Views/thz_notes.php index 914eb751..194ed82d 100644 --- a/app/Views/thz_notes.php +++ b/app/Views/thz_notes.php @@ -571,17 +571,31 @@ data-backdrop="static" } }, error: function(xhr) { - if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - }else{ toastr.error("Something went wrong!", 'Error'); } console.error(xhr.responseText); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, complete: function() { btn.disabled = false; @@ -628,19 +642,31 @@ data-backdrop="static" } }, error: function(xhr) { - if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - }else{ - toastr.error("Something went wrong!", 'Error'); console.error(xhr.responseText); - } + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + }else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, complete: function() { btn.disabled = false;} }); diff --git a/app/Views/ticket_edit_onbording.php b/app/Views/ticket_edit_onbording.php index 35df8a96..45eabbc3 100644 --- a/app/Views/ticket_edit_onbording.php +++ b/app/Views/ticket_edit_onbording.php @@ -264,6 +264,30 @@ // Hide loader $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } } }); } diff --git a/app/Views/ticket_form_handler.php b/app/Views/ticket_form_handler.php index 9b141783..d744931e 100644 --- a/app/Views/ticket_form_handler.php +++ b/app/Views/ticket_form_handler.php @@ -787,6 +787,31 @@ // Hide loader $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); + + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } } }); } diff --git a/app/Views/ticket_mail_template.php b/app/Views/ticket_mail_template.php index ba3cf875..00db4cb5 100644 --- a/app/Views/ticket_mail_template.php +++ b/app/Views/ticket_mail_template.php @@ -436,14 +436,29 @@ $('.loader-mask').delay(350).fadeOut('slow'); if (xhr.status === 400) { let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages if (response.errors) { $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); } else { toastr.warning(response.message || 'Validation failed', 'Warning'); } - } else{toastr.error('Something Wrong!', 'Warning');} + + }else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + }, 1000); } }); diff --git a/app/Views/ticket_note.php b/app/Views/ticket_note.php index c92e5ec0..97c37331 100644 --- a/app/Views/ticket_note.php +++ b/app/Views/ticket_note.php @@ -79,17 +79,63 @@ $(document).ready(function() { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); let message = response.message; - toastr.error(message, 'Error'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + } }, function(xhr, status, error) { console.error('Error fetching data:', error); console.error(xhr.responseText); - toastr.error('An error occurred while fetching the report page.', 'Error'); - $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }); }); diff --git a/app/Views/ticket_reply.php b/app/Views/ticket_reply.php index d83fcbf8..9a732b39 100644 --- a/app/Views/ticket_reply.php +++ b/app/Views/ticket_reply.php @@ -195,7 +195,30 @@ $(document).ready(function() { { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - toastr.error('Something Wrong!', 'warning'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, 1000); } }); diff --git a/app/Views/tpa_basic_info.php b/app/Views/tpa_basic_info.php index 4dce8a77..f258ff2d 100755 --- a/app/Views/tpa_basic_info.php +++ b/app/Views/tpa_basic_info.php @@ -331,14 +331,29 @@ // Handle validation errors (CI4) if (xhr.status === 400) { let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages if (response.errors) { $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); } else { toastr.warning(response.message || 'Validation failed', 'Warning'); } + + }else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } + }, 1000); } }); diff --git a/app/Views/tpa_branch.php b/app/Views/tpa_branch.php index c95dd734..f8e30273 100755 --- a/app/Views/tpa_branch.php +++ b/app/Views/tpa_branch.php @@ -479,16 +479,29 @@ $(document).ready(function () { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - } - toastr.warning('Something Wrong!', 'Warning'); + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, 1000); }, complete: function() { diff --git a/app/Views/vehicle_details.php b/app/Views/vehicle_details.php index 3b57d4dd..466795de 100644 --- a/app/Views/vehicle_details.php +++ b/app/Views/vehicle_details.php @@ -248,21 +248,32 @@ $(document).ready(function() { $('.loader-mask').delay(350).fadeOut('slow'); $submitButton.prop('disabled', false); if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); } else if (xhr.status === 404) { toastr.warning('Resource not found', 'Warning'); } else if (xhr.status === 500) { - toastr.warning('Internal server error', 'Warning'); + toastr.error('Something went wrong . Please try again later.', 'Server Error'); } else { - toastr.warning('Unknown error occurred', 'Warning'); + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); } + }, 1000); } }); diff --git a/app/Views/vehicle_master_list.php b/app/Views/vehicle_master_list.php index d0ef7767..9ddf3e56 100644 --- a/app/Views/vehicle_master_list.php +++ b/app/Views/vehicle_master_list.php @@ -787,16 +787,30 @@ $("#vehicle_form").submit(function(event) { console.error(status, error); $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - } + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } } }); }); diff --git a/app/Views/vehicle_type_master_list.php b/app/Views/vehicle_type_master_list.php index 984f4ecc..b06382b7 100755 --- a/app/Views/vehicle_type_master_list.php +++ b/app/Views/vehicle_type_master_list.php @@ -222,16 +222,30 @@ console.error(xhr.responseText); $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - if (xhr.status === 400) { - let response = JSON.parse(xhr.responseText); - if (response.errors) { - $.each(response.errors, function (field, message) { - toastr.warning(message, 'Validation Error'); - }); - } else { - toastr.warning(response.message || 'Validation failed', 'Warning'); - } - } + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }); } From d6c7c01e2b843310e2753ad0cc95ed48290d9a85 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Wed, 11 Feb 2026 12:21:09 +0530 Subject: [PATCH 9/9] 429 issue : GWM --- app/Config/Routes.php | 4 +- app/Controllers/HealthIndiaApiController.php | 40 +++++++----- app/Controllers/ICICILombardController.php | 64 ++++++++++++++----- .../RestAuthenticationController.php | 9 +-- app/Controllers/VidalApiController.php | 14 ++-- 5 files changed, 85 insertions(+), 46 deletions(-) diff --git a/app/Config/Routes.php b/app/Config/Routes.php index d9bb6ea9..02f194d1 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -774,8 +774,7 @@ $routes->post("retrieveWebhookDataClaim","ClientWebHooksController::pullData_cla //Third party ICICILombard Api Call - -$routes->get('generateAuthToken','FhplApiController::generateAuthToken'); +$routes->get('generateAuthToken','ICICILombardController::generateAuthToken'); $routes->get('createEnrollmentBatch','ICICILombardController::createEnrollmentBatch'); $routes->get('getEnrollmentBatchStatus','ICICILombardController::getEnrollmentBatchStatus'); $routes->get('fetchUHIDDetails','ICICILombardController::fetchUHIDDetails'); @@ -793,6 +792,7 @@ $routes->get('IntimateClaim','MediAssistApiController::IntimateClaim'); $routes->get('IRSubmission','MediAssistApiController::IRSubmission'); $routes->get('ClaimStatusUpdate','MediAssistApiController::ClaimStatusUpdate'); $routes->get('syncTpaClaimToNhance','MediAssistApiController::syncTpaClaimToNhance'); +$routes->get('HealthIndiaGetBenefDetails','HealthIndiaApiController::HealthIndiaGetBenefDetails'); // API service (Don't delete) diff --git a/app/Controllers/HealthIndiaApiController.php b/app/Controllers/HealthIndiaApiController.php index 013a9977..9ac26461 100644 --- a/app/Controllers/HealthIndiaApiController.php +++ b/app/Controllers/HealthIndiaApiController.php @@ -416,8 +416,10 @@ class HealthIndiaApiController extends BaseController try { helper('api'); - $policyNo = $requestData['policy_no'] ?? null; - $client_policy_id = $requestData['client_policy_id'] ?? null; + $policyNo = $requestData['policy_no'] ?? '141600_POLICY_AWAITED'; + $client_policy_id = $requestData['client_policy_id'] ?? 6473; + + if (empty($policyNo)) { log_message('error', 'TPA ID PULL HEALTH_INDIA | policy_no missing in request'); @@ -440,22 +442,24 @@ class HealthIndiaApiController extends BaseController log_message('error', "TPA ID PULL HEALTH_INDIA | called for policy_no: {$policyNo}, client_policy_id: {$client_policy_id}"); // Fetch file download dates - $batchFiles = $this->db->table('batch_files f') - ->select("f.created_at") - ->where('f.client_policy_id', $client_policy_id) - ->where('f.insurer_or_tpa', 'tpa') - ->where('f.actions', 'export') - ->get() - ->getResultArray(); + // $batchFiles = $this->db->table('batch_files f') + // ->select("f.created_at") + // ->where('f.client_policy_id', $client_policy_id) + // ->where('f.insurer_or_tpa', 'tpa') + // ->where('f.actions', 'export') + // ->get() + // ->getResultArray(); - if (empty($batchFiles)) { - log_message('error', 'TPA ID PULL FAILED HEALTH_INDIA | batchFiles is empty for this tpa id pull request'); - if ($function_calling_type == "job") { - return ['status' => false, 'message' => 'batchFiles not found']; - } else { - return $this->respond(['status' => false, 'message' => 'batchFiles not found']); - } - } + + + // if (empty($batchFiles)) { + // log_message('error', 'TPA ID PULL FAILED HEALTH_INDIA | batchFiles is empty for this tpa id pull request'); + // if ($function_calling_type == "job") { + // return ['status' => false, 'message' => 'batchFiles not found']; + // } else { + // return $this->respond(['status' => false, 'message' => 'batchFiles not found']); + // } + // } // Generate Health India Token $tokenResponse = json_decode($this->generateAuthToken()->getBody(), true); @@ -485,6 +489,8 @@ class HealthIndiaApiController extends BaseController $response = call_third_party_api($url, 'POST', $headers, $body); + dd($response); + log_message('error', "TPA ID PULL HEALTH_INDIA | API Response: " . json_encode($response)); if (($response['status'] ?? false) !== true) { diff --git a/app/Controllers/ICICILombardController.php b/app/Controllers/ICICILombardController.php index 20ca8bab..1babfd76 100644 --- a/app/Controllers/ICICILombardController.php +++ b/app/Controllers/ICICILombardController.php @@ -86,32 +86,64 @@ class ICICILombardController extends AdminController // dd($body); - $body = [ - "PolicyNumber" => "4016/PPN/A/O/53167743/00/000", + // $body = [ + // "PolicyNumber" => "4016/PPN/A/O/53167743/00/000", + // "CDBGAccountNumber" => "CD-MUM-0026", + // "CorrelationId" => "550e8400-e29b-41d4-a716-446655440016", + // "MemberDetails" => [ + // [ + // "MemberEmpId" => "EMPID3625562", + // "DOJ" => "21-MAR-2019", + // "InsuredName" => "Jeeva", + // "DOB" => "7-JUL-1993", + // "Relationship" => "SELF", + // "Gender" => "MALE", + // "DOC" => '28-Oct-2025', + // "SumInsured" => "500000", + // "EmailId" => "Jeeva@GMAIL.COM", + // "FlagStatus" => "A" + // ], + // [ + // "MemberEmpId" => "EMPID3625562", + // "DOJ" => "21-MAR-2019", + // "InsuredName" => "Muthu", + // "DOB" => "8-AUG-1970", + // "Relationship" => "MOTHER", + // "Gender" => "FEMALE", + // "DOC" => '28-Oct-2025', + // "EmailId" => "Muthu@GMAIL.COM", + // "FlagStatus" => "A" + // ], + // ] + // ]; + + + $body = [ + "PolicyNumber" => "4016/PPN/A/O/53185987/00/000", "CDBGAccountNumber" => "CD-MUM-0026", - "CorrelationId" => "550e8400-e29b-41d4-a716-446655440014", + "CorrelationId" => "550e8400-e29b-41d4-a716-446655440018", "MemberDetails" => [ [ - "MemberEmpId" => "EMPID3625560", + "MemberEmpId" => "EMPID3625562", "DOJ" => "21-MAR-2019", - "InsuredName" => "Gowtham", + "InsuredName" => "Jeeva", "DOB" => "7-JUL-1993", "Relationship" => "SELF", "Gender" => "MALE", - "DOC" => '2025-10-27', + "DOC" => '19-Nov-2025', "SumInsured" => "500000", - "EmailId" => "Gowtham@GMAIL.COM", + "EmailId" => "Jeeva@GMAIL.COM", "FlagStatus" => "A" ], [ - "MemberEmpId" => "EMPID3625560", + "MemberEmpId" => "EMPID3625562", "DOJ" => "21-MAR-2019", - "InsuredName" => "Lavanya", + "InsuredName" => "Muthu", "DOB" => "8-AUG-1970", "Relationship" => "MOTHER", "Gender" => "FEMALE", - "DOC" => '2025-10-27', - "EmailId" => "Lavanya@GMAIL.COM", + "DOC" => '19-Nov-2025', + "EmailId" => "Muthu@GMAIL.COM", "FlagStatus" => "A" ], ] @@ -146,10 +178,10 @@ class ICICILombardController extends AdminController // dd($headers); - $body = [ - "PolicyNumber" => "4016/PPN/A/O/53167743/00/000", - "BatchId" => "3723144", - "CorrelationId" => "550e8400-e29b-41d4-a716-446655440014" + $body = [ + "PolicyNumber" => "4016/PPN/A/O/53185987/00/000", + "BatchId" => "3725147", + "CorrelationId" => "550e8400-e29b-41d4-a716-446655440018" ]; $response = call_third_party_api($url, 'POST', $headers, $body, true); @@ -183,7 +215,7 @@ class ICICILombardController extends AdminController $body = [ "PolicyNumber" => "4016/PPN/A/O/53167743/00/000", "IMID" => "201580517901", - "CorrelationId" => "550e8400-e29b-41d4-a716-446655440014" + "CorrelationId" => "550e8400-e29b-41d4-a716-446655440018" ]; $response = call_third_party_api($url, 'POST', $headers, $body, true); diff --git a/app/Controllers/RestAuthenticationController.php b/app/Controllers/RestAuthenticationController.php index c743c82f..e4c474a1 100755 --- a/app/Controllers/RestAuthenticationController.php +++ b/app/Controllers/RestAuthenticationController.php @@ -114,7 +114,8 @@ class RestAuthenticationController extends AdminController //check the resend otp (with in 60 seconds don't allow another otp to send) $check = canSendOtp($employeeData); if (!$check['allowed']) { - return $this->respond(['status' => false,'message' => 'OTP already sent. Please wait before retrying.','retry_after_seconds' => $check['retry_after'] ])->setStatusCode(429); // Too Many Requests + return $this->respond(['status' => false,'message' => 'OTP already sent. Please wait before retrying.','retry_after_seconds' => $check['retry_after']], 429); // Too Many Requests + } $this->myLogger->logme("error", "REST-AUTH-CONTROLLER - verifyEmployeeWithMobileNumber: Employee verified with ID = " . $employeeData['employee_id']); @@ -227,7 +228,7 @@ class RestAuthenticationController extends AdminController //check the resend otp (with in 60 seconds don't allow another otp to send) $check = canSendOtp($employeeData); if (!$check['allowed']) { - return $this->respond(['status' => false,'message' => 'OTP already sent. Please wait before retrying.','retry_after_seconds' => $check['retry_after'] ])->setStatusCode(429); // Too Many Requests + return $this->respond(['status' => false,'message' => 'OTP already sent. Please wait before retrying.','retry_after_seconds' => $check['retry_after']], 429); // Too Many Requests } @@ -535,7 +536,7 @@ class RestAuthenticationController extends AdminController //check the resend otp (with in 60 seconds don't allow another otp to send) $check = canSendOtp($HrData); if (!$check['allowed']) { - return $this->respond(['status' => false,'message' => 'OTP already sent. Please wait before retrying.','retry_after_seconds' => $check['retry_after'] ])->setStatusCode(429); // Too Many Requests + return $this->respond(['status' => false,'message' => 'OTP already sent. Please wait before retrying.','retry_after_seconds' => $check['retry_after']], 429); // Too Many Requests } $sql = "UPDATE level_contacts SET otp = ? WHERE mobile = ? AND contact_type = 'client' AND is_active = 1"; @@ -591,7 +592,7 @@ class RestAuthenticationController extends AdminController //check the resend otp (with in 60 seconds don't allow another otp to send) $check = canSendOtp($HrData); if (!$check['allowed']) { - return $this->respond(['status' => false,'message' => 'OTP already sent. Please wait before retrying.','retry_after_seconds' => $check['retry_after'] ])->setStatusCode(429); // Too Many Requests + return $this->respond(['status' => false,'message' => 'OTP already sent. Please wait before retrying.','retry_after_seconds' => $check['retry_after']], 429); // Too Many Requests } $sql = " diff --git a/app/Controllers/VidalApiController.php b/app/Controllers/VidalApiController.php index f84364a9..cba86afd 100644 --- a/app/Controllers/VidalApiController.php +++ b/app/Controllers/VidalApiController.php @@ -29,7 +29,7 @@ class VidalApiController extends BaseController $apiUrl = getenv('VIDAL_API_BASE_URL').'/files/upload-url'; $subscriptionKey = getenv('VIDAL_API_SUBSCRIPTION_KEY'); - log_message('error', "Starting file upload process for filename: $filename | Path: $filePath"); + log_message('error', "TPA CLAIM PUSH | Starting file upload process for filename: $filename | Path: $filePath"); // Step 1: Get signed URL from Vidal API // $filePath = '/opt/lampp/htdocs/nhance/writable/uploads/claim_files/1760013019_73d94af7b96ddc2e3d51.png'; @@ -39,7 +39,7 @@ class VidalApiController extends BaseController "Ocp-Apim-Subscription-Key: $subscriptionKey" ]; - log_message('error', "Requesting signed URL from Vidal API: $apiUrl | Payload: $payload"); + log_message('error', "TPA CLAIM PUSH | Requesting signed URL from Vidal API: $apiUrl | Payload: $payload"); $ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @@ -57,7 +57,7 @@ class VidalApiController extends BaseController $responseData = json_decode($response, true); if (!isset($responseData['data']['signedUrl']) || !isset($responseData['data']['fileId'])) { - log_message('error', "Invalid signed URL response received: " . json_encode($responseData)); + log_message('error', "TPA CLAIM PUSH | Invalid signed URL response received: " . json_encode($responseData)); return ["status" => false, "message" => "Invalid signed URL response", "response" => $responseData]; } @@ -88,12 +88,12 @@ class VidalApiController extends BaseController curl_close($ch2); if ($curlErr) { - log_message('error', "Curl error during file upload: $curlErr"); + log_message('error', "TPA CLAIM PUSH | Curl error during file upload: $curlErr"); return ["status" => false, "message" => "File upload failed", "data" => $curlErr]; } if ($httpCode !== 200 && $httpCode !== 201) { - log_message('error', "File upload failed with HTTP Code: $httpCode | Response: $uploadResponse"); + log_message('error', "TPA CLAIM PUSH | File upload failed with HTTP Code: $httpCode | Response: $uploadResponse"); return [ "status" => false, "message" => "File upload failed", @@ -153,7 +153,7 @@ class VidalApiController extends BaseController ->getRowArray(); // single record if (count($data) && $data['filePath'] == null) { - log_message('error', "Submit claim failed - Claim or File Missing"); + log_message('error', "TPA CLAIM PUSH | Submit claim failed - Claim or File Missing"); return $this->response->setJSON(['status' => false,'message' => 'Claim or File Missing', ]); } @@ -166,7 +166,7 @@ class VidalApiController extends BaseController $upload = $this->uploadFileToVidal($filePath,$filename); if ($upload['status'] !== true) { - log_message('error', "Submit claim failed - File upload failed"); + log_message('error', "TPA CLAIM PUSH | Submit claim failed - File upload failed"); return $this->response->setJSON([ 'status' => false, 'message' => 'File upload failed',