diff --git a/app/Config/Acl.php b/app/Config/Acl.php
index 371e1a21..b122e08b 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],
@@ -21,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/Config/Filters.php b/app/Config/Filters.php
index d96ae232..c9431b94 100755
--- a/app/Config/Filters.php
+++ b/app/Config/Filters.php
@@ -65,7 +65,7 @@ class Filters extends BaseConfig
'before' => [
'HttpRequestLog' => ['except' => 'cli/*'],
'Cors',
- // 'AclFilter' => ['except' => ['login', 'logout', 'auth/*', 'oauth2callback','claim-form-download', 'claims-feedback-form', 'autobookstackLogin','employeeRest/*','processjob','getCommission']],
+ 'AclFilter' => ['except' => ['login', 'logout', 'auth/*', 'oauth2callback','claim-form-download', 'claims-feedback-form', 'autobookstackLogin','employeeRest/*','processjob','getCommission']],
'SecurityInputFilter' => ['except' => ['/client/notification/create','/ticket/crud_mail_template/*','test_mail','leads/sendMail'] ],
'GlobalPostFileUploadGuard'
// 'csrf',
diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php
index 09f34f77..b0e59d7a 100755
--- a/app/Controllers/ClientController.php
+++ b/app/Controllers/ClientController.php
@@ -450,6 +450,8 @@ class ClientController extends AdminController
public function index()
{
$this->myLogger->logme('error', 'Client list function called');
+ // echo "";
+
$headerData['tab_name'] = 'Clients';
$headerData['page_name'] = 'Clients'; // Both Browser Tab name And Page name are same.
// $data['clientList'] = $this->clientModel->getCreatedByUserName(1); // passing client_type
@@ -782,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 (-)',
]
],
@@ -2665,439 +2667,154 @@ class ClientController extends AdminController
return $insert;
}
-
-
// Save Rack Rate function
public function createClientPolicyPremium()
{
-
- // echo json_encode(['key' => $this->request->getPost()]); die;
-
try {
- $data = $this->request->getPost();
- $sanitized_post_data = sanitizeInputArrayAdvanced($data);
+ // 1. Fetch and Sanitize all input at once
+ $rawPost = $this->request->getPost();
+ $data = sanitizeInputArrayAdvanced($rawPost);
- $client_id = $sanitized_post_data['client_id'] ?? null;
- $client_policy_id = $sanitized_post_data['client_policy_id'] ?? null;
- $record = $this->clientPolicyModel->where('client_policy.id', $client_policy_id)->first();
- $premium_type = $sanitized_post_data['premium_type'] ?? null;
- if (!empty($client_id) && $client_id != null) {
- $client_policy_data = $this->clientPolicyModel->where('id', $client_policy_id)->first();
- $client_id = $client_policy_data['client_id'] ?? null;
+ // Extract base variables from the sanitized array
+ $client_id = $data['client_id'] ?? null;
+ $client_policy_id = $data['client_policy_id'] ?? null;
+ $premium_type = $data['premium_type'] ?? null;
+ $policy_grid_id = $data['policy_grid_id'] ?? null;
+ $rack_rate_name = $data['rack_rate_name'] ?? null;
+ $si_or_bp = $data['si_or_bp'] ?? null;
+
+ $record = $this->clientPolicyModel->where('id', $client_policy_id)->first();
+ if (!$record) {
+ return $this->respond(['status' => false, 'message' => 'Policy record not found'], 404);
}
- $branch_units = $this->getBranchUnitsByBranchId($record['client_branch_id']);
- $branch_units = json_decode($branch_units);
+ if (empty($client_id)) {
+ $client_id = $record['client_id'];
+ }
- $policy_grid_id = $sanitized_post_data['policy_grid_id'] ?? null;
- $rack_rate_name = $sanitized_post_data['rack_rate_name'] ?? null;
+ $branch_units_raw = $this->getBranchUnitsByBranchId($record['client_branch_id']);
+ $branch_units = json_decode($branch_units_raw, true);
+ $default_unit = !empty($branch_units) ? $branch_units[0] : null;
+ // Relationship Logic
$relation_data = [
- 'self' => $sanitized_post_data['self'] ?? 'NA',
- 'spouse' => $sanitized_post_data['spouse'] ?? 'NA',
- 'childrens' => $sanitized_post_data['childrens'] ?? 'NA',
- 'parents' => $sanitized_post_data['parents'] ?? 'NA',
- 'parents-in-law' => $sanitized_post_data['parents-in-law'] ?? 'NA',
+ 'self' => $data['self'] ?? 'NA',
+ 'spouse' => $data['spouse'] ?? 'NA',
+ 'childrens' => $data['childrens'] ?? 'NA',
+ 'parents' => $data['parents'] ?? 'NA',
+ 'parents-in-law' => $data['parents-in-law'] ?? 'NA',
];
- $relation_data_for_form_submit_check = [
- $rack_rate_name => [
- 'self' => $sanitized_post_data['self'] ?? 'NA',
- 'spouse' => $sanitized_post_data['spouse'] ?? 'NA',
- 'childrens' => $sanitized_post_data['childrens'] ?? 'NA',
- 'parents' => $sanitized_post_data['parents'] ?? 'NA',
- 'parents-in-law' => $sanitized_post_data['parents-in-law'] ?? 'NA',
- ]
- ];
-
- if ($policy_grid_id == 1 || $policy_grid_id == 2) {
- $relation_data = [
- 'self' => 1,
- 'spouse' => 'NA',
- 'childrens' => 'NA',
- 'parents' => 'NA',
- 'parents-in-law' => 'NA',
- ];
+ if (in_array($policy_grid_id, ['1', '2'])) {
+ $relation_data = ['self' => 1, 'spouse' => 'NA', 'childrens' => 'NA', 'parents' => 'NA', 'parents-in-law' => 'NA'];
}
- // Convert to JSON
$jsonDataForRelation = json_encode($relation_data);
- $json_data_relation_data_for_form_submit_check = json_encode($relation_data_for_form_submit_check);
+ $submit_check_json = json_encode([$rack_rate_name => $relation_data]);
- $si_or_bp = $sanitized_post_data['si_or_bp'] ?? null;
- $basic_multiplier = str_replace(',', '', $sanitized_post_data['basic_multiplier']);
- $premium_multiplier = str_replace(',', '', $sanitized_post_data['premium_multiplier']);
- $multiplier = str_replace(',', '', $sanitized_post_data['multiplier']);
- $basic_pay = str_replace(',', '', $sanitized_post_data['basic_pay']);
-
- $data = [];
- $data['client_id'] = $client_id;
- $data['client_policy_id'] = $client_policy_id;
- $data['policy_grid_id'] = $policy_grid_id;
- $data['premium_type'] = $premium_type;
- $data['rack_rate_name'] = $rack_rate_name;
- $data['additional_relationship'] = $jsonDataForRelation;
-
- $premium = [];
-
- if ($policy_grid_id == '1' || $policy_grid_id == '2') {
- $this->policyPremium1Model->where('client_id', $client_id)->where('client_policy_id', $client_policy_id)->set('is_active', 0)->update();
+ // Deactivate old records
+ if (in_array($policy_grid_id, ['1', '2'])) {
+ $this->policyPremium1Model->where(['client_id' => $client_id, 'client_policy_id' => $client_policy_id])->set(['is_active' => 0])->update();
} else {
- $this->policyPremium2Model->where('client_id', $client_id)->where('client_policy_id', $client_policy_id)->where('rack_rate_name', $rack_rate_name)->set('is_active', 0)->update();
+ $this->policyPremium2Model->where(['client_id' => $client_id, 'client_policy_id' => $client_policy_id, 'rack_rate_name' => $rack_rate_name])->set(['is_active' => 0])->update();
}
+ // Helper closures for cleaning and unit selection
+ $cleanNum = fn($val) => str_replace(',', '', (string)($val ?? '0'));
+ $getUnit = fn($unitArr, $index) => (empty($unitArr[$index]) || $unitArr[$index] === 'undefined') ? $default_unit : $unitArr[$index];
+
+ $insert = false;
+ $baseInsertData = [
+ 'client_id' => $client_id,
+ 'client_policy_id' => $client_policy_id,
+ 'policy_grid_id' => $policy_grid_id,
+ 'premium_type' => $premium_type,
+ 'rack_rate_name' => $rack_rate_name,
+ 'additional_relationship' => $jsonDataForRelation
+ ];
+
+ // --- Logic Switch based on Grid ID ---
+
if ($policy_grid_id == '1') {
-
if ($si_or_bp == '1') {
-
- $premium = str_replace(',', '', $sanitized_post_data['gpa_sum_premium[]']);
- $sum_insure = str_replace(',', '', $sanitized_post_data['gpa_sum_si[]']);
- $multiplier = $sanitized_post_data['gpa_sum_multiplier'] ?? null;
- $unit = $sanitized_post_data['gpa_unit_1[]'] ?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['si'] = $sum_insure[$i];
- $data['premium'] = $premium[$i];
- $data['multiplier'] = $multiplier;
- $data['si_or_bp'] = $sanitized_post_data['si_or_bp'] ?? null;
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $policyPremium = $this->policyPremium1Model->insert($data);
+ $premiums = $data['gpa_sum_premium'] ?? [];
+ foreach ($premiums as $i => $p) {
+ $this->policyPremium1Model->insert(array_merge($baseInsertData, [
+ 'si' => $cleanNum($data['gpa_sum_si'][$i] ?? 0),
+ 'premium' => $cleanNum($p),
+ 'multiplier' => $data['gpa_sum_multiplier'] ?? null,
+ 'si_or_bp' => $si_or_bp,
+ 'unit' => $getUnit($data['gpa_unit_1'] ?? [], $i)
+ ]));
+ $insert = true;
}
} else if ($si_or_bp == '3') {
-
- $premium = str_replace(',', '', $sanitized_post_data['gpa_sum_premium2[]']);
- $sum_insure = str_replace(',', '', $sanitized_post_data['gpa_sum_si2[]']);
- $multiplier = $sanitized_post_data['gpa_sum_multiplier2'] ?? null;
- $grade = $sanitized_post_data['gpa_band[]'] ?? null;
- $unit = $sanitized_post_data['gpa_unit_3[]'] ?? null;
-
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['si'] = $sum_insure[$i];
- $data['premium'] = $premium[$i];
- $data['grade'] = $grade[$i];
- $data['multiplier'] = $multiplier;
- $data['si_or_bp'] = $sanitized_post_data['si_or_bp'] ?? null;
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $policyPremium = $this->policyPremium1Model->insert($data);
+ $premiums = $data['gpa_sum_premium2'] ?? [];
+ foreach ($premiums as $i => $p) {
+ $this->policyPremium1Model->insert(array_merge($baseInsertData, [
+ 'si' => $cleanNum($data['gpa_sum_si2'][$i] ?? 0),
+ 'premium' => $cleanNum($p),
+ 'grade' => $data['gpa_band'][$i] ?? null,
+ 'multiplier' => $data['gpa_sum_multiplier2'] ?? null,
+ 'si_or_bp' => $si_or_bp,
+ 'unit' => $getUnit($data['gpa_unit_3'] ?? [], $i)
+ ]));
+ $insert = true;
}
} else if ($si_or_bp == '2') {
-
- $premium = str_replace(',', '', $sanitized_post_data['gpa_basic_premium[]']);
- $sum_insure = str_replace(',', '', $sanitized_post_data['gpa_basic_si[]']);
- $basic_pay = str_replace(',', '', $sanitized_post_data['basic_pay[]']);
- $unit = $sanitized_post_data['gpa_unit[]'] ?? null;
-
-
- for ($i = 0; $i < count($premium); $i++) {
-
- $data['si_or_bp'] = $sanitized_post_data['si_or_bp'] ?? null;
- $data['basic_multiplier'] = str_replace(',', '', $sanitized_post_data['basic_multiplier']);
- $data['multiplier'] = $sanitized_post_data['premium_multiplier'] ?? null;
- $data['basic_pay'] = $basic_pay[$i];
- $data['si'] = $sum_insure[$i];
- $data['premium'] = $premium[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $policyPremium = $this->policyPremium1Model->insert($data);
+ $premiums = $data['gpa_basic_premium'] ?? [];
+ foreach ($premiums as $i => $p) {
+ $this->policyPremium1Model->insert(array_merge($baseInsertData, [
+ 'si_or_bp' => $si_or_bp,
+ 'basic_multiplier' => $cleanNum($data['basic_multiplier'] ?? 0),
+ 'multiplier' => $cleanNum($data['premium_multiplier'] ?? 0),
+ 'basic_pay' => $cleanNum($data['basic_pay'][$i] ?? 0),
+ 'si' => $cleanNum($data['gpa_basic_si'][$i] ?? 0),
+ 'premium' => $cleanNum($p),
+ 'unit' => $getUnit($data['gpa_unit'] ?? [], $i)
+ ]));
+ $insert = true;
}
- } else {
-
- $data['premium'] = str_replace(',', '', $sanitized_post_data['gpa_basic_premium']);
- $data['si'] = str_replace(',', '', $sanitized_post_data['gpa_basic_si']);
- $data['basic_multiplier'] = str_replace(',', '', $sanitized_post_data['basic_multiplier']);
- $data['multiplier'] = $sanitized_post_data['premium_multiplier'] ?? null;
- $data['basic_pay'] = str_replace(',', '', $sanitized_post_data['basic_pay']);
- $data['si_or_bp'] = $sanitized_post_data['si_or_bp'] ?? null;
-
- $policyPremium = $this->policyPremium1Model->insert($data);
}
-
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '2') {
-
- $premium = $sanitized_post_data['gpa_premium29[]'] ?? null;
- $sum_insure = $sanitized_post_data['gpa_si29[]'] ?? null;
- $unit = $sanitized_post_data['gpa_unit29[]'] ?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
- $dataa = $this->policyPremium1Model->insert($data);
+ } else if (in_array($policy_grid_id, ['2', '9'])) {
+ $premiums = $data['gpa_premium29'] ?? [];
+ $model = ($policy_grid_id == '2') ? $this->policyPremium1Model : $this->policyPremium2Model;
+ foreach ($premiums as $i => $p) {
+ $model->insert(array_merge($baseInsertData, [
+ 'premium' => $cleanNum($p),
+ 'si' => $cleanNum($data['gpa_si29'][$i] ?? 0),
+ 'unit' => $getUnit($data['gpa_unit29'] ?? [], $i)
+ ]));
+ $insert = true;
}
+ } else {
+ // Handles grids 3, 4, 5, 6, 7, 8, 10, 11, 12, 13
+ $pfx = $policy_grid_id . "_";
+ $premiums = $data[$pfx . 'premium'] ?? [];
+ $is_si_array = is_array($data[$pfx . 'si'] ?? null);
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '3') {
-
- $premium = $sanitized_post_data['3_premium[]'] ?? null;
- $sum_insure = $sanitized_post_data['3_si[]'] ?? null;
- $unit = $sanitized_post_data['3_unit[]'] ?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
- $dataa = $this->policyPremium2Model->insert($data);
+ foreach ($premiums as $i => $p) {
+ $this->policyPremium2Model->insert(array_merge($baseInsertData, [
+ 'premium' => $cleanNum($p),
+ 'si' => $cleanNum($is_si_array ? ($data[$pfx . 'si'][$i] ?? 0) : ($data[$pfx . 'si'] ?? 0)),
+ 'unit' => $getUnit($data[$pfx . 'unit'] ?? [], $i),
+ 'age_from' => $data[$pfx . 'age_from'][$i] ?? null,
+ 'age_to' => $data[$pfx . 'age_to'][$i] ?? null,
+ 'grade' => $data[$pfx . 'grade'][$i] ?? null,
+ 'relationship' => $data[$pfx . 'relationship'][$i] ?? null,
+ 'max_si' => $cleanNum($data[$pfx . 'max_si'][$i] ?? 0)
+ ]));
+ $insert = true;
}
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '4') {
-
- $premium = $sanitized_post_data['4_premium[]'] ?? null;
- $sum_insure = $sanitized_post_data['4_si'] ?? null;
- $age_from = $sanitized_post_data['4_age_from[]'] ?? null;
- $age_to = $sanitized_post_data['4_age_to[]'] ?? null;
- $unit = $sanitized_post_data['4_unit[]'] ?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure);
- $data['age_from'] = $age_from[$i];
- $data['age_to'] = $age_to[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $dataa = $this->policyPremium2Model->insert($data);
- }
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '5') {
-
- $premium = $sanitized_post_data['5_premium[]'] ?? null;
- $sum_insure = $sanitized_post_data['5_si[]']?? null;
- $age_from = $sanitized_post_data['5_age_from[]']?? null;
- $age_to = $sanitized_post_data['5_age_to[]']?? null;
- $unit = $sanitized_post_data['5_unit[]']?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- $data['age_from'] = $age_from[$i];
- $data['age_to'] = $age_to[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i] || $unit[$i] == 'undefined')) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $dataa = $this->policyPremium2Model->insert($data);
- }
-
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '6') {
-
- $premium = $sanitized_post_data['6_premium[]']?? null;
- $sum_insure = $sanitized_post_data['6_si']?? null;
- $age_from = $sanitized_post_data['6_age_from[]']?? null;
- $age_to = $sanitized_post_data['6_age_to[]']?? null;
- $unit = $sanitized_post_data['6_unit[]']?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure);
- $data['age_from'] = $age_from[$i];
- $data['age_to'] = $age_to[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $dataa = $this->policyPremium2Model->insert($data);
- }
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '7') {
- $premium = $sanitized_post_data['7_premium[]'] ?? null;
- $sum_insure = $sanitized_post_data['7_si[]'] ?? null;
- $age_from = $sanitized_post_data['7_age_from[]'] ?? null;
- $age_to = $sanitized_post_data['7_age_to[]'] ?? null;
- $unit = $sanitized_post_data['7_unit[]'] ?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- $data['age_from'] = $age_from[$i];
- $data['age_to'] = $age_to[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $dataa = $this->policyPremium2Model->insert($data);
- }
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '8') {
- $premium = $sanitized_post_data['8_premium[]']?? null;
- $sum_insure = $sanitized_post_data['8_si[]']?? null;
- $grade = $sanitized_post_data['8_grade[]']?? null;
- $unit = $sanitized_post_data['8_unit[]']?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- $data['grade'] = $grade[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $dataa = $this->policyPremium2Model->insert($data);
- }
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '9') {
-
- $premium = $sanitized_post_data['gpa_premium29[]']?? null;
- $sum_insure = $sanitized_post_data['gpa_si29[]']?? null;
- $unit = $sanitized_post_data['gpa_unit29[]']?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
- $dataa = $this->policyPremium2Model->insert($data);
- }
-
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '10') {
- $premium = $sanitized_post_data['10_premium[]']?? null;
- $sum_insure = $sanitized_post_data['10_si[]']?? null;
- $age_from = $sanitized_post_data['10_age_from[]']?? null;
- $age_to = $sanitized_post_data['10_age_to[]']?? null;
- $unit = $sanitized_post_data['10_unit[]']?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- $data['age_from'] = $age_from[$i];
- $data['age_to'] = $age_to[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
-
- $policyPremium = $this->policyPremium2Model->insert($data);
- }
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '11') {
-
- $premium = $sanitized_post_data['11_premium[]']?? null;
- $sum_insure = $sanitized_post_data['11_si[]']?? null;
- $grade = $sanitized_post_data['11_grade[]']?? null;
- $max_sum_insure = $sanitized_post_data['11_max_si[]']?? null;
- $unit = $sanitized_post_data['11_unit[]']?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- $data['grade'] = $grade[$i];
- $data['max_si'] = str_replace(',', '', $max_sum_insure[$i]);
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $dataa = $this->policyPremium2Model->insert($data);
- }
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '12') {
-
- $premium = $sanitized_post_data['12_premium[]']?? null;
- $sum_insure = $sanitized_post_data['12_si[]']?? null;
- $relationship = $sanitized_post_data['12_relationship[]']?? null;
- $unit = $sanitized_post_data['12_unit[]']?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- $data['relationship'] = $relationship[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $dataa = $this->policyPremium2Model->insert($data);
- }
- $data = $sanitized_post_data;
- $insert = true;
- } else if ($policy_grid_id == '13') {
-
- $premium = $sanitized_post_data['13_premium[]']?? null;
- $sum_insure = $sanitized_post_data['13_si[]']?? null;
- $age_from = $sanitized_post_data['13_age_from[]']?? null;
- $age_to = $sanitized_post_data['13_age_to[]']?? null;
- $relationship = $sanitized_post_data['13_relationship[]']?? null;
- $unit = $sanitized_post_data['13_unit[]']?? null;
-
- for ($i = 0; $i < count($premium); $i++) {
- $data['premium'] = str_replace(',', '', $premium[$i]);
- $data['si'] = str_replace(',', '', $sum_insure[$i]);
- $data['age_from'] = $age_from[$i];
- $data['age_to'] = $age_to[$i];
- $data['relationship'] = $relationship[$i];
- if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
- $data['unit'] = $branch_units[0];
- } else {
- $data['unit'] = $unit[$i];
- }
-
- $dataa = $this->policyPremium2Model->insert($data);
- }
- $data = $sanitized_post_data;
- $insert = true;
}
if ($insert) {
- return $this->respond(['status' => true, 'code' => 200, 'data' => $data, 'rack_rate_json' => $json_data_relation_data_for_form_submit_check,], 200);
- } else {
- return $this->respond(['status' => false, 'code' => 404, 'data' => $data, 'message' => 'no data found'], 200);
+ return $this->respond(['status' => true, 'code' => 200, 'data' => $data, 'rack_rate_json' => $submit_check_json], 200);
}
+
+ return $this->respond(['status' => false, 'code' => 404, 'message' => 'No data found'], 200);
} catch (\Exception $e) {
- echo 'Error: ' . $e->getMessage() . ' at line no ' . $e->getLine();
+ return $this->respond(['status' => false, 'message' => $e->getMessage() . ' line ' . $e->getLine()], 500);
}
}
@@ -6731,12 +6448,12 @@ class ClientController extends AdminController
// $response = $ticketServiceController->getClaimExcelErrorData(["file_id" => 41]);
// $response = $ticketServiceController->claimDumpOnBoardProcess(["file_id" => 17]);
// $response = $ticketServiceController->extractExcelData("claims_dump_form_client.xlsx");
- // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 52]); //reliance
- // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 50]); //fhpl
// $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 51]); //abhi
- // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 48]); //vidal
+ // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 50]); //fhpl
// $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 53]); //icici
// $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 54]); //mediassist
+ // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 52]); //reliance
+ // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 48]); //vidal
// $response = $ticketServiceController->tpaClaimDumpToTicketMasterImporters(["file_id" => 48]); //vidal
// $response = $ticketServiceController->tpaClaimDumpToTicketMasterImporters(["file_id" => 54]); //mediassist
@@ -6753,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/EmployeeController.php b/app/Controllers/EmployeeController.php
index b279f1f2..bc12d31b 100755
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -581,6 +581,8 @@ class EmployeeController extends AdminController
$filePath = ROOTPATH . 'public/sample_excel/sample_multievent_file.xlsx';
}else if ($actionType == 'bds_upload') {
$filePath = ROOTPATH . 'public/sample_excel/sample_bds_bulk_upload_excel.xlsx';
+ }else if ($actionType == 'claim_dump_upload') {
+ $filePath = ROOTPATH . 'public/sample_excel/sample_claim_dump_upload_excel.xlsx';
}
// Check if the file exists
@@ -2744,27 +2746,26 @@ class EmployeeController extends AdminController
{
$rules = [
- 'emp_code' => [
- 'rules' => 'required',
- 'errors' => [
- 'required' => 'Employee Code is missing'
- ]
- ],
-
- 'name' => [
- 'rules' => 'required|min_length[2]|max_length[100]',
- 'errors' => [
- 'required' => 'Employee name is required',
- 'min_length' => 'Name must be at least 2 characters',
- 'max_length' => 'Name cannot exceed 100 characters'
- ]
- ],
- 'gender' => [
- 'rules' => 'permit_empty|in_list[M,F]',
- 'errors' => [
- 'in_list' => 'Invalid gender selected'
- ]
- ],
+ // 'emp_code' => [
+ // 'rules' => 'required',
+ // 'errors' => [
+ // 'required' => 'Employee Code is missing'
+ // ]
+ // ],
+ // 'name' => [
+ // 'rules' => 'required|min_length[2]|max_length[100]',
+ // 'errors' => [
+ // 'required' => 'Employee name is required',
+ // 'min_length' => 'Name must be at least 2 characters',
+ // 'max_length' => 'Name cannot exceed 100 characters'
+ // ]
+ // ],
+ // 'gender' => [
+ // 'rules' => 'permit_empty|in_list[M,F]',
+ // 'errors' => [
+ // 'in_list' => 'Invalid gender selected'
+ // ]
+ // ],
'email_corporate' => [
'rules' => 'required|valid_email',
'errors' => [
@@ -2772,7 +2773,6 @@ class EmployeeController extends AdminController
'valid_email' => 'Enter a valid email address'
]
],
-
'mobile' => [
'rules' => 'required|numeric|exact_length[10]',
'errors' => [
@@ -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/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php
index 7ca38900..a3368b66 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'), 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++;
}
}
@@ -2457,6 +2457,7 @@ class EmployeeRestController extends AdminController
$result = $clientController->view_Deposit($insurerId, $requestFrom = 'rest', $param = ['client_id' => $clientId, 'cd_ac_pk' => $cdAccountPrimaryKey]);
$data['insurer_name'] = $result['insurerName']->name;
+ $data['insurer_short_name'] = $result['insurerName']->short_name;
$data['account_number'] = $result['insurerName']->cd_master_account_no;
$data['total_deposit'] = $result['deposiamount']->total_credit;
$data['total_consumed'] = $result['deposiamount']->total_withdraw;
@@ -2501,6 +2502,12 @@ class EmployeeRestController extends AdminController
$search_data = $this->request->getJSON(true); // Get JSON as associative array
+ if ( isset($search_data['client_id']) &&is_string($search_data['client_id']) && preg_match('/^[a-f0-9]{32}$/i', $search_data['client_id'])) {
+ $client_data = $this->clientModel->where('MD5(id)', $search_data['client_id'])->first();
+ $search_data['client_id'] = $client_data['id'] ?? null;
+ }
+
+
$client_id = isset($search_data['client_id']) ? (int) $search_data['client_id'] : 0;
unset($search_data['client_id']);
unset($search_data['client_branch_id']);
@@ -2612,7 +2619,7 @@ class EmployeeRestController extends AdminController
$builder->where('tm.is_active', 1);
if ($client_id > 0) {
- $builder->where('md5(tm.client_id)', $client_id);
+ $builder->where('tm.client_id', $client_id);
}
if (!empty($from_date) && !empty($to_date)) {
@@ -5440,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/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
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/ThzController.php b/app/Controllers/ThzController.php
index 713a8fb7..827b6587 100644
--- a/app/Controllers/ThzController.php
+++ b/app/Controllers/ThzController.php
@@ -62,7 +62,6 @@ class ThzController extends BaseController
public function ticketSave()
{
- try {
$rules = [
'client_id' => [
'rules' => 'permit_empty|integer',
@@ -70,6 +69,7 @@ class ThzController extends BaseController
'integer' => 'Invalid client selected'
]
],
+
'mobile' => [
'rules' => 'required|regex_match[/^[0-9]{10}$/]',
@@ -97,17 +97,24 @@ class ThzController extends BaseController
],
'empcode' => [
- 'rules' => 'permit_empty|max_length[50]',
+ 'rules' => 'permit_empty|alpha_numeric_punct|max_length[50]',
'errors' => [
+ 'alpha_numeric_punct' => 'Employee code contains invalid characters.',
'max_length' => 'Employee code is too long'
]
],
'ticket_type' => [
- 'rules' => 'required|in_list[Sales,Service]',
+ 'rules' => 'required',
+ 'errors' => [
+ 'required' => 'Please select a Ticket Type.'
+ ]
+ ],
+
+ 'ticket_type' => [
+ 'rules' => 'required',
'errors' => [
'required' => 'Ticket Type is required',
- 'in_list' => 'Invalid Ticket Type selected'
]
],
@@ -119,11 +126,12 @@ class ThzController extends BaseController
],
'subject' => [
- 'rules' => 'required|min_length[5]|max_length[150]',
+ 'rules' => 'required|min_length[3]|max_length[150]|regex_match[/^[a-zA-Z0-9 .,\-_()&\/\?]+$/]',
'errors' => [
- 'required' => 'Subject is required',
- 'min_length' => 'Subject must be at least 5 characters',
- 'max_length' => 'Subject cannot exceed 150 characters'
+ 'required' => 'Subject is required.',
+ 'min_length' => 'Subject must be at least 3 characters long.',
+ 'max_length' => 'Subject cannot exceed 150 characters',
+ 'regex_match' => 'Subject contains invalid characters (Avoid quotes and special symbols).'
]
],
@@ -151,6 +159,7 @@ class ThzController extends BaseController
'errors' => $this->validator->getErrors()
]);
}
+ try {
$request_post_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_post_data);
diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php
index abb02e17..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'];
@@ -3096,7 +3350,7 @@ class TicketController extends BaseController
public function claimDumpUpload()
{
- $data['tab_name'] = "Claim Dupm Upload";
+ $data['tab_name'] = "Claim Dump Upload";
$data['page_name'] = "Claims";
$data['tpa_list'] = $this->TPAModel->where('is_active', 1)->findAll();
@@ -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/Controllers/TicketServiceController.php b/app/Controllers/TicketServiceController.php
index 602f0708..f95f547d 100644
--- a/app/Controllers/TicketServiceController.php
+++ b/app/Controllers/TicketServiceController.php
@@ -1844,23 +1844,6 @@ class TicketServiceController extends BaseController
// --------------------------------------------------------------------------------------------------------------------------------
-
- public function tpaClaimImporter($params)
- {
- $file_id = $params['file_id'];
- $tpa_claims_files_data = $this->claimDumpFileModel->where('id', $file_id)->first();
-
-
- if($this->vidal_primary_key == $tpa_claims_files_data['tpa_id']){
-
- }else if($this->icici_primary_key == $tpa_claims_files_data['tpa_id']){
-
- }else{
- $this->myLogger->logme('error', 'No TPA found to import');
- return ['status' => false, 'message' => 'No TPA found to import'];
- }
- }
-
public function tpaClaimDumpImporter($params)
{
$file_id = $params['file_id'] ?? null; // Move outside try to ensure catch can see it
@@ -1980,45 +1963,6 @@ class TicketServiceController extends BaseController
}
}
- public function tpaClaimDumpToTicketMasterImportBatchSeperater($params)
- {
- try {
-
- $file_id = $params['file_id'] ?? null;
- $fileData = $this->claimDumpFileModel->where('id', $file_id)->first();
-
- if (!$fileData) {
- return ['status' => false, 'message' => 'Invalid file ID No file data found to import'];
- }
-
- $handler = TpaClaimsImportFactory::make($fileData['tpa_id'] ?? 0);
- $result = $handler->runTicketMasterInsert($params);
-
- return $result;
-
- } catch (\Throwable $th) {
-
- $this->myLogger->logme("error", 'TICKET_MASTER_CLAIM_IMPORTER_JOB :' .($th->getMessage() . ' --- ' . $th->getLine() . '----' . $th->getTraceAsString()));
-
- $errorData = [
- 'message' => $th->getMessage(),
- 'file' => $th->getFile(),
- 'line' => $th->getLine(),
- 'code' => $th->getCode(),
- 'trace' => $th->getTraceAsString(),
- 'trace_array' => $th->getTrace(), // full array version (optional)
- 'function' => $th->getTrace()[0]['function'] ?? null,
- 'class' => $th->getTrace()[0]['class'] ?? null,
- ];
-
- return [
- 'status' => false,
- 'message' => $th->getMessage(),
- 'error_data' => json_encode($errorData, JSON_PRETTY_PRINT)
- ];
- }
- }
-
public function readExcelBySheetName(string $filePath, string $sheetName): array
{
if (!file_exists($filePath)) {
diff --git a/app/Filters/Cors.php b/app/Filters/Cors.php
index 3cfd1252..60a97a89 100644
--- a/app/Filters/Cors.php
+++ b/app/Filters/Cors.php
@@ -38,7 +38,7 @@ class Cors implements FilterInterface
*
* @var string
*/
- protected string $allowedMethods = 'GET,POST,PUT,PATCH,DELETE,OPTIONS';
+ protected string $allowedMethods = 'GET,POST,OPTIONS';
/**
* HTTP headers allowed in CORS requests
diff --git a/app/Helpers/JWTToken.php b/app/Helpers/JWTToken.php
index 311182d4..c964bac7 100755
--- a/app/Helpers/JWTToken.php
+++ b/app/Helpers/JWTToken.php
@@ -30,16 +30,16 @@ class JWTToken
try{
$token = JWT::encode($request_data ,$secret_Key,'HS512');
$id = $request_data['id'];
- $data["token_time_out"] = time() + getenv('TOKENTIMEOUT');
+ $update["token_time_out"] = time() + getenv('TOKENTIMEOUT');
if(isset($data['emp_code'])){
$model = new EmployeeModel();
- $model->update($id, $data);
+ $model->update($id, $update);
}else{
$models = new LevelContactModel();
$id = $request_data['post_hr_id'];
- $models->update($id, $data);
+ $models->update($id, $update);
}
diff --git a/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php b/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php
index 3ee5c066..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',
];
@@ -148,20 +149,7 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
}
$builder = $this->db->table('claims_dump_abhi');
-
- foreach ($data as $value) {
-
- if (!$builder->insert($value)) {
-
- // 🔍 Debug purpose
- log_message('error', print_r($this->db->error(), true));
- log_message('error', $this->db->getLastQuery());
-
- return false;
- }
- }
-
- return true;
+ return $builder->insertBatch($data);
}
@@ -321,8 +309,14 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
$item['emp_code'] = $employee_data['emp_code'] ?? null;
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
- $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
- $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ if (!empty($employee_data['insured_emp_id'])) {
+ $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
+ $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ }else{
+ $reason = 'This Dependent employee not exist in our system.';
+ $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
+ continue;
+ }
} else {
$reason = 'This employee not exist in our system.';
diff --git a/app/Libraries/TPAClaimsImportServices/BaseTpaClaimImportService.php b/app/Libraries/TPAClaimsImportServices/BaseTpaClaimImportService.php
index f2e94cfa..3a6a5777 100644
--- a/app/Libraries/TPAClaimsImportServices/BaseTpaClaimImportService.php
+++ b/app/Libraries/TPAClaimsImportServices/BaseTpaClaimImportService.php
@@ -92,6 +92,7 @@ abstract class BaseTpaClaimImportService
$message = '';
$hasExecutedTask = false;
+ $status = true;
// Process Mapped Data
if (!empty($ticketMasterData['mapped_array'])) {
@@ -102,6 +103,8 @@ abstract class BaseTpaClaimImportService
}
$message .= 'Ticket Master Claim bulk insert success. ';
$hasExecutedTask = true;
+ }else{
+ $status = false;
}
// Process Rejected Reasons
@@ -113,7 +116,7 @@ abstract class BaseTpaClaimImportService
}
$message .= empty($ticketMasterData['mapped_array'])
- ? 'Those employees not in our system. '
+ ? 'Those employee or dependent not in our system. '
: 'Ticket Master Claim rejected reason updated successfully. ';
$hasExecutedTask = true;
}
@@ -126,7 +129,7 @@ abstract class BaseTpaClaimImportService
// 2. Commit the transaction
$this->db->transCommit();
- return ['status' => true, 'message' => trim($message)];
+ return ['status' => $status, 'message' => trim($message)];
} catch (\Throwable $th) {
// 3. Rollback on crash
diff --git a/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php b/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php
index f4410b55..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 = [
@@ -217,11 +219,8 @@ class FhplClaimImportService extends BaseTpaClaimImportService
return false;
}
- $ClaimsDumpFhplModel = new ClaimsDumpFhplModel();
- $result = $ClaimsDumpFhplModel->insertBatch($data);
-
- return true;
-
+ $builder = $this->db->table('claims_dump_fhpl');
+ return $builder->insertBatch($data);
}
@@ -381,8 +380,14 @@ class FhplClaimImportService extends BaseTpaClaimImportService
$item['emp_code'] = $employee_data['emp_code'] ?? null;
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
- $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
- $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ if (!empty($employee_data['insured_emp_id'])) {
+ $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
+ $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ }else{
+ $reason = 'This Dependent employee not exist in our system.';
+ $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
+ continue;
+ }
} else {
$reason = 'This employee not exist in our system.';
diff --git a/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php b/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php
index fb1d731f..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 = [
@@ -135,29 +136,8 @@ class IciciClaimImportService extends BaseTpaClaimImportService
return false;
}
- try {
-
-
- $ClaimsDumpFhplModel = new ClaimsDumpFhplModel();
- $result = $ClaimsDumpFhplModel->insertBatch($data);
-
- return true;
-
- } catch (\Throwable $th) {
-
- $errorData = [
- 'message' => $th->getMessage(),
- 'file' => $th->getFile(),
- 'line' => $th->getLine(),
- 'code' => $th->getCode(),
- 'trace' => $th->getTraceAsString(),
- 'trace_array' => $th->getTrace(), // full array version (optional)
- 'function' => $th->getTrace()[0]['function'] ?? null,
- 'class' => $th->getTrace()[0]['class'] ?? null,
- ];
- return false;
- }
-
+ $builder = $this->db->table('claims_dump_icici');
+ return $builder->insertBatch($data);
}
@@ -317,8 +297,14 @@ class IciciClaimImportService extends BaseTpaClaimImportService
$item['emp_code'] = $employee_data['emp_code'] ?? null;
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
- $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
- $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ if (!empty($employee_data['insured_emp_id'])) {
+ $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
+ $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ }else{
+ $reason = 'This Dependent employee not exist in our system.';
+ $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
+ continue;
+ }
} else {
$reason = 'This employee not exist in our system.';
diff --git a/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php b/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php
index 0c68ece9..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 = [
@@ -334,8 +335,14 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
$item['emp_code'] = $employee_data['emp_code'] ?? null;
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
- $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
- $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ if (!empty($employee_data['insured_emp_id'])) {
+ $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
+ $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ }else{
+ $reason = 'This Dependent employee not exist in our system.';
+ $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
+ continue;
+ }
} else {
$reason = 'This employee not exist in our system.';
diff --git a/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php b/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php
index a75289a2..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',
@@ -124,28 +126,8 @@ class RcareClaimImportService extends BaseTpaClaimImportService
return false;
}
- try {
-
- $builder = $this->db->table('claims_dump_reliance');
- $builder->insertBatch($data);
-
- return true;
-
- } catch (\Throwable $th) {
-
- $errorData = [
- 'message' => $th->getMessage(),
- 'file' => $th->getFile(),
- 'line' => $th->getLine(),
- 'code' => $th->getCode(),
- 'trace' => $th->getTraceAsString(),
- 'trace_array' => $th->getTrace(), // full array version (optional)
- 'function' => $th->getTrace()[0]['function'] ?? null,
- 'class' => $th->getTrace()[0]['class'] ?? null,
- ];
- dd($errorData);
- return false;
- }
+ $builder = $this->db->table('claims_dump_reliance');
+ return $builder->insertBatch($data);
}
@@ -305,8 +287,14 @@ class RcareClaimImportService extends BaseTpaClaimImportService
$item['emp_code'] = $employee_data['emp_code'] ?? null;
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
- $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
- $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ if (!empty($employee_data['insured_emp_id'])) {
+ $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
+ $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ }else{
+ $reason = 'This Dependent employee not exist in our system.';
+ $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
+ continue;
+ }
} else {
$reason = 'This employee not exist in our system.';
diff --git a/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php b/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php
index 50ef9924..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 = [
@@ -364,9 +366,8 @@ class VidalClaimImportService extends BaseTpaClaimImportService
}
$builder = $this->db->table('claims_dump_vidal');
- $builder->insertBatch($data);
+ return $builder->insertBatch($data);
- return true;
}
@@ -541,7 +542,7 @@ class VidalClaimImportService extends BaseTpaClaimImportService
}
// Meta fields
- $item['claim_status_id'] = $statusMapping[$row['status']] ?? 61;
+ $item['claim_status_id'] = $statusMapping[$row['claim_status']] ?? 61;
$item['file_id'] = $file_id;
$item['claim_dump_ref_id'] = $row['id'];
$item['created_by'] = $file_data['created_by'] ?? null;
@@ -620,8 +621,14 @@ class VidalClaimImportService extends BaseTpaClaimImportService
$item['emp_name'] = $employee_data['id'] ?? null;
$item['emp_mail'] = $employee_data['insurer_id'] ?? null;
$item['emp_mobile'] = $employee_data['tpa_id'] ?? null;
- $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
- $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ if (!empty($employee_data['insured_emp_id'])) {
+ $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
+ $item['insured_name'] = $employee_data['insured_name'] ?? null;
+ }else{
+ $reason = 'This Dependent employee not exist in our system.';
+ $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
+ continue;
+ }
}else{
$reason = " This policy no ( " . $row['insurer_policy_number'] ." ) does not exist in our system";
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
diff --git a/app/Models/BdsPlacementModel.php b/app/Models/BdsPlacementModel.php
index 82edfce5..947f8a0f 100644
--- a/app/Models/BdsPlacementModel.php
+++ b/app/Models/BdsPlacementModel.php
@@ -57,6 +57,64 @@ class BdsPlacementModel extends Model
public function getClientInstallmentDetails()
+ {
+ // 1. Fetch common data ONCE (Heads, Admins, Business Team)
+ // This saves hundreds of redundant queries
+ $heads = $this->db->table('user_profiles')
+ ->select('email')->where(['role' => 5, 'is_active' => 1])
+ ->get()->getResultArray();
+
+ $admins = $this->db->table('user_profiles')
+ ->select('email')->where(['role' => 1, 'is_active' => 1])
+ ->get()->getResultArray();
+
+ $businessTeam = $this->db->table("user_teams ut")
+ ->select("up.email")
+ ->join('user_profiles up', 'up.id = ut.user_id AND up.is_active = 1')
+ ->where(["ut.team_id" => 7, "ut.is_active" => 1])
+ ->get()->getResultArray();
+
+ // 2. Main Query
+ $builder = $this->db->table("bds_installment_payment_details bipd")
+ ->select("bipd.*, ct.client_name, ct.short_name, cb.branch_name, leads.salse_person_id, cp.policy_no")
+ ->join("policy_transaction pt", "pt.id = bipd.pt_id")
+ ->join("clients ct", "ct.id = pt.client_id")
+ ->join("client_branch cb", "cb.id = pt.client_branch_id")
+ ->join("leads", "leads.id = bipd.lead_id")
+ ->join("client_policy cp", "cp.id = pt.client_policy_id")
+ ->where("bipd.is_active", 1)
+ ->where("bipd.payment_date", date('Y-m-d', strtotime('+15 days')));
+
+ $data = $builder->get()->getResultArray();
+
+ // Loop through to extract sales person details
+ // 3. Simple Loop for Sales Person (Since it relies on a JSON ID)
+ foreach ($data as &$row) {
+ $sales_person_ids = json_decode($row['salse_person_id'], true);
+ $sales_person_id = $sales_person_ids[0] ?? null;
+
+ if ($sales_person_id) {
+ $user = $this->db->table('user_profiles')
+ ->select('email') // or whatever field
+ ->where('id', (int)$sales_person_id) // Cast to int for extra safety
+ ->get()
+ ->getRowArray();
+
+ $row['sales_person'] = $user['email'] ?? 'N/A';
+ } else {
+ $row['sales_person'] = 'Not Assigned';
+ }
+
+ // Assign the pre-fetched data
+ $row['heads'] = $heads;
+ $row['admins'] = $admins;
+ $row['buisness_team'] = $businessTeam;
+ }
+
+
+ return $data;
+ }
+ public function getClientInstallmentDetails_olds()
{
$builder = $this->db->table("bds_installment_payment_details bipd")
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)
diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php
index 6b9b17f1..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 = "")
+ public function getEmployeePolicy($client_id = 0, $policy_id = 0, $status = [], $branch_id = 0, $emp_code = "", $emp_name = "", $status_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($status_type == 'inactive'){
+ $result->whereIn('employee_polices.status', ['active', 'inactive']);
+ }else{
+ $result->where('employee_polices.status !=', 'inactive');
+ }
$res = $result->findAll();
diff --git a/app/Models/InsurerModel.php b/app/Models/InsurerModel.php
index d264c231..a08b3c9e 100755
--- a/app/Models/InsurerModel.php
+++ b/app/Models/InsurerModel.php
@@ -64,6 +64,7 @@ class InsurerModel extends Model
->select('
insurers.id,
insurers.name,
+ insurers.short_name,
cd_master.cd_ac_no AS cd_master_account_no
')
->join('insurers', 'insurers.id = client_policy.insurer_id')
diff --git a/app/Views/UserList.php b/app/Views/UserList.php
index ca47296c..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');
+ }
}
});
@@ -1177,7 +1190,7 @@ table.dataTable tbody td {
var student_id = $(this).attr('data-id');
$.get(''+student_id, function (data) {
console.log(data);
- toastr.success('User removed successfully', 'success');
+ toastr.success('User removed successfully', 'Success');
window.location.reload()
})
}
@@ -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;
@@ -1969,7 +2012,7 @@ table.dataTable tbody td {
checkDuplicateTableFieldValue(table, field, value, function(isDuplicate) {
if (isDuplicate) {
- toastr.warning(message, 'WARNING');
+ toastr.warning(message, 'Warning');
// $(input).val('')
$('#' + submitButId).prop('disabled', true);
} else{
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 bd6e23ff..b8a39153 100644
--- a/app/Views/bds_dump_file_list.php
+++ b/app/Views/bds_dump_file_list.php
@@ -182,9 +182,9 @@
console.log('Upload successful:', response);
if (response.status == true) {
- toastr.success(response.message, "SUCCESS");
+ toastr.success(response.message, "Success");
} else {
- toastr.error(response.message, "ERROR");
+ toastr.error(response.message, "Error");
}
// Reset form
@@ -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() {
@@ -222,7 +237,7 @@
// Check file size (optional - set max size as needed, e.g., 10MB)
var maxSize = 10 * 1024 * 1024; // 10MB in bytes
if (file.size > maxSize) {
- toastr.warning('File size should not exceed 10MB');
+ toastr.warning('File size should not exceed 10MB', 'Warning');
$(this).val(''); // Clear the input
return false;
}
diff --git a/app/Views/cd_master_add_modal.php b/app/Views/cd_master_add_modal.php
index d07b87d4..4cc06188 100644
--- a/app/Views/cd_master_add_modal.php
+++ b/app/Views/cd_master_add_modal.php
@@ -187,7 +187,7 @@
}
} else {
- toastr.warning(res.message, 'WARNING');
+ toastr.warning(res.message, 'Warning');
}
//this function for reset the form values after submitting the form or closing the form
@@ -205,16 +205,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');
}
- toastr.error('An error occurred while adding the CD account number.', 'ERROR');
+ toastr.error('An error occurred while adding the CD account number.', 'Error');
}
});
});
@@ -338,13 +351,13 @@
$('#cd_client_id').val('').select2();
$('#insurer_id_for_cd').val('').select2();
$('#insurer_branch_id').val('').select2();
- toastr.warning(response.message, 'WARNING');
+ toastr.warning(response.message, 'Warning');
}
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
- toastr.error('An error occurred while checking the CD amount.', 'ERROR');
+ toastr.error('An error occurred while checking the CD amount.', 'Error');
});
}
}
diff --git a/app/Views/cd_master_list.php b/app/Views/cd_master_list.php
index 754b632c..57c23757 100755
--- a/app/Views/cd_master_list.php
+++ b/app/Views/cd_master_list.php
@@ -312,7 +312,7 @@ table.dataTable thead th {
has('success')) : ?>
- toastr.success('= session()->getFlashdata('success') ?>', 'success');
+ toastr.success('= session()->getFlashdata('success') ?>', 'Success');
})
@@ -381,10 +381,10 @@ table.dataTable thead th {
// console.log(res.status == true);
if(res){
if (res.status == true) {
- toastr.success('CD removed successfully.', 'success');
+ toastr.success('CD removed successfully.', 'Success');
location.reload();
} else {
- toastr.warning('Failed to remove CD.', 'warning');
+ toastr.warning('Failed to remove CD.', 'Warning');
}
}
},
diff --git a/app/Views/claim_dump_file_list.php b/app/Views/claim_dump_file_list.php
index 0cf55ed9..1330cded 100644
--- a/app/Views/claim_dump_file_list.php
+++ b/app/Views/claim_dump_file_list.php
@@ -185,7 +185,7 @@