diff --git a/app/Controllers/AppContentManagementController.php b/app/Controllers/AppContentManagementController.php index a3db36ec..15a95f49 100755 --- a/app/Controllers/AppContentManagementController.php +++ b/app/Controllers/AppContentManagementController.php @@ -73,11 +73,11 @@ class AppContentManagementController extends AdminController ] ], 'client_id' => [ - 'rules' => 'required|integer|is_natural_no_zero', + 'rules' => 'required|integer|is_natural', 'errors' => [ - 'required' => 'Client is required', - 'integer' => 'Invalid client selected', - 'is_natural_no_zero' => 'Invalid client selected' + 'required' => 'Client is required', + 'integer' => 'Invalid client selected', + 'is_natural' => 'Invalid client selected', ] ], 'advertise_image' => [ @@ -85,15 +85,13 @@ class AppContentManagementController extends AdminController . 'is_image[advertise_image]' . '|mime_in[advertise_image,image/jpg,image/jpeg,image/png]' . '|max_size[advertise_image,200]' - . '|min_dims[advertise_image,1640,664]' . '|max_dims[advertise_image,1640,664]', 'errors' => [ 'uploaded' => 'Image is required', 'is_image' => 'File must be an image', 'mime_in' => 'Only JPG, JPEG, PNG allowed', 'max_size' => 'Image size must not exceed 200 KB', - 'min_dims' => 'Image dimensions must be exactly 1640x664 pixels', - 'max_dims' => 'Image dimensions must be exactly 1640x664 pixels', + 'max_dims' => 'Image dimensions must not exceed 1640x664 pixels', ] ], ]; @@ -110,9 +108,11 @@ class AppContentManagementController extends AdminController $file = $this->request->getFile('advertise_image'); $client_id = (int)($sanitized_post_data['client_id'] ?? 0); - $clientExists = $this->clientModel->where('id', $client_id)->where('is_active', 1)->first(); - if (!$clientExists) { - return $this->respond(['status' => false, 'message' => 'Invalid client selected.'], 400); + if ($client_id !== 0) { + $clientExists = $this->clientModel->where('id', $client_id)->where('is_active', 1)->first(); + if (!$clientExists) { + return $this->respond(['status' => false, 'message' => 'Invalid client selected.'], 400); + } } if (!$file || !$file->isValid()) { @@ -123,6 +123,11 @@ class AppContentManagementController extends AdminController return $this->respond(['status' => false, 'message' => 'Only JPG, JPEG, PNG files are allowed.'], 400); } + $dimInfo = @getimagesize($file->getTempName()); + if ($dimInfo === false || (int) $dimInfo[0] !== 1640 || (int) $dimInfo[1] !== 664) { + return $this->respond(['status' => false, 'message' => 'Image dimensions must be exactly 1640x664 pixels.'], 400); + } + $fileName = sanitize_upload_filename($file->getClientName()); $existing = $this->addImgModel->where('name', $fileName)->where('client_id', $client_id)->where('is_active', 1)->first(); if($existing){ return $this->respond(['status' => false, 'message' => 'This file has already been uploaded in active state.'], 400); } diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 3c1d1940..6019a866 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -497,6 +497,7 @@ class EmployeeController extends AdminController batch_files.is_active, batch_files.amount, batch_files.status, + batch_files.icici_status_flag, batch_files.client_branch_id, insurers.short_name as insurer_short_name, tpa.short_name as tpa_short_name, @@ -4367,10 +4368,55 @@ class EmployeeController extends AdminController $not_in_tpa = $this->employeePolicyModel->getTPADataVariationReport($client_id, $client_policy_id, $file_id, $tpa_emp_codes); if (!empty($not_in_tpa) || !empty($not_in_nhance) || !empty($emp_data_wo_tpa_id)) { + $not_in_nhance_button_enable_status = false; + if(count($not_in_tpa)) + { + foreach($not_in_nhance as $nih) + { + if($nih['ref'] === '' || empty($nih['ref'])) + { + $not_in_nhance_button_enable_status = true; + break; + } + } + } + + $not_in_nhance_inception_count = 0; + $not_in_nhance_deletion_count = 0; + foreach ($not_in_nhance as $nih) { + $hasRefKey = array_key_exists('ref', $nih); + $ref = $hasRefKey ? $nih['ref'] : null; + // Empty/null ref: no key, NULL, '', or whitespace-only string. + $refIsEmpty = !$hasRefKey + || $ref === null + || $ref === '' + || (is_string($ref) && trim($ref) === ''); + + $actionIsDeletion = strtoupper(trim((string) ($nih['action_flag_status'] ?? ''))) === 'D'; + + // Every empty/null ref row counts as inception; those that also have flag D additionally count as deletion. + if ($refIsEmpty) { + $not_in_nhance_inception_count++; + if ($actionIsDeletion) { + $not_in_nhance_deletion_count++; + } + } + } + + $not_in_nhance_proceed_button_text = sprintf( + 'Proceed - Inception(%d) + Deletion(%d)', + $not_in_nhance_inception_count, + $not_in_nhance_deletion_count + ); + $response = [ 'not_in_tpa' => $not_in_tpa, 'not_in_nhance' => $not_in_nhance, 'mismatch_data' => $emp_data_wo_tpa_id, + 'not_in_nhance_button_enable_status' => $not_in_nhance_button_enable_status, + 'not_in_nhance_inception_count' => $not_in_nhance_inception_count, + 'not_in_nhance_deletion_count' => $not_in_nhance_deletion_count, + 'not_in_nhance_proceed_button_text' => $not_in_nhance_proceed_button_text, ]; if ($type === 'view') { @@ -4447,10 +4493,10 @@ class EmployeeController extends AdminController { if($generationResult['data']['file_id']) { - sleep(1); + // sleep(1); //initiate update references b/w tpa_api_data and employess (pk update) // $this->reconTpaApiDataWithEmployeepolicies(['file_id' => $file_id]); - sleep(1); + // sleep(1); //initiate deleteion if any // $this->initializeDeletionProcessForTpaApiData(['file_id' => $file_id]); diff --git a/app/Controllers/FhplApiController.php b/app/Controllers/FhplApiController.php index ab31d7c3..542f461b 100644 --- a/app/Controllers/FhplApiController.php +++ b/app/Controllers/FhplApiController.php @@ -1069,6 +1069,11 @@ class FhplApiController extends BaseController 'is_active' => 1, 'created_by' => $file_info[0]['created_by'] ?? null, 'action_flag_status' => $row['IsActive'] == 1 ? 'A' : 'D' + 'si' => $row['BASE_SUMINSURED'], + 'doj' => change_date_format($row['DATE_OF_JOINING'],'Y-m-d\TH:i:s'), + 'endorsement_no' => $row['ENDORSEMENT_NO'] + // 'date_of_exit' => $row['DATE_OF_RESIGN_FROM_POLICY'] + ]; } diff --git a/app/Controllers/HealthIndiaApiController.php b/app/Controllers/HealthIndiaApiController.php index 5e9f79bc..db356888 100644 --- a/app/Controllers/HealthIndiaApiController.php +++ b/app/Controllers/HealthIndiaApiController.php @@ -1092,7 +1092,10 @@ class HealthIndiaApiController extends BaseController 'is_active' => 1, 'created_by' => $file_info[0]['created_by'] ?? null, - 'action_flag_status' => $row['insuredStatus'] == 'Active' ? 'A' : 'D' + 'action_flag_status' => $row['insuredStatus'] == 'Active' ? 'A' : 'D', + 'doj' => change_date_format($row['doj'],), + 'si' => $row['baseSumInsured'], + 'endorsement_no' => $row['endorsementNumber'] ]; } // log_message('error','HEALTH_INDIA - COUNT' . count($mappedRows)); diff --git a/app/Helpers/utility_helper.php b/app/Helpers/utility_helper.php index c0657c30..9498fb88 100755 --- a/app/Helpers/utility_helper.php +++ b/app/Helpers/utility_helper.php @@ -661,6 +661,13 @@ if (! function_exists('change_date_format')) { $date_str = trim($date_str); // Allowed date formats $allowed_formats = [ + + // ISO 8601 datetime (must come before plain Y-m-d to avoid partial match issues) + 'Y-m-d\TH:i:sP', // 2025-07-26T00:00:00+05:30 + 'Y-m-d\TH:i:s\Z', // 2025-07-26T00:00:00Z + 'Y-m-d\TH:i:s', // 2025-07-26T00:00:00 + + // Day Month Year (clear unambiguous formats) 'd M Y', // 01 Dec 2024 'd-M-Y', // 01-Dec-2024 diff --git a/app/Views/batch_list.php b/app/Views/batch_list.php index 8849f24f..e63140ef 100755 --- a/app/Views/batch_list.php +++ b/app/Views/batch_list.php @@ -61,6 +61,11 @@ for ($i = 0; $i < $batch_col_count; $i++) { cursor: pointer; } +/* Allow line breaks in tooltip titles using \n */ +.tooltip-inner { + white-space: pre-line; +} + /* Column widths from max data length (see PHP above). Avoid table-layout:fixed + identical max-width on TH — it fights DataTables col sizing and skews TH vs TD. Do not max-width THEAD cells (sort icons use position:absolute; narrow max clips them). */ @@ -289,15 +294,32 @@ for ($i = 0; $i < $batch_col_count; $i++) {