diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index e9d2aea9..c16dd299 100755
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -737,6 +737,7 @@ $routes->group("employeeRest", ["filter" => ['GlobalPostFileUploadGuard', 'ratel
$routes->get("getFEContent", "EmployeeRestController::getFEContent");
$routes->get("getAdvertisementImage", "EmployeeRestController::getAdvertisementImage");
$routes->get("getEcardURL", "EmployeeRestController::getEcardURL");
+ $routes->post("sendMailForIndividualEmployeeEcard", "EmployeeRestController::sendMailForIndividualEmployeeEcard");
diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php
index 0af6898a..d9f3ea9c 100755
--- a/app/Controllers/ClientController.php
+++ b/app/Controllers/ClientController.php
@@ -471,7 +471,7 @@ class ClientController extends AdminController
$headerData['page_name'] = 'Clients'; // Both Browser Tab name And Page name are same.
// $data['clientList'] = $this->clientModel->getCreatedByUserName(1); // passing client_type
$data['client_rm'] = $this->clientRMModel->getAllClientRM();
- $data['lead_data'] = $this->leadsModel->getLeadForInsertClientList();
+ $data['lead_data'] = $this->leadsModel->getLeadForInsertClientList([1, 3]);
$rawList = $this->clientModel->getCreatedByUserName(1);
$clientRM = $data['client_rm'];
@@ -1037,7 +1037,7 @@ class ClientController extends AdminController
$editData['client_branch'] = $this->clientBranchModel->where(['client_id' => $id, 'is_active' => 1])->findAll();
$editData['client_relation'] = $this->clientRMModel->where(['client_id' => $id, 'is_active' => 1])->findAll();
$editData['client_branch']['role'] = get_role_id();
- $editData['lead_data'] = $this->leadsModel->getLeadForInsertClientList(null, $id);
+ $editData['lead_data'] = $this->leadsModel->getLeadForInsertClientList(null, $id, 'update');
$clientPoliceData = $this->clientPolicyModel->getClientPolicyByClientId($id);
foreach ($clientPoliceData as $key => $value) {
diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php
index 176fba86..ee3caadd 100755
--- a/app/Controllers/EmployeeRestController.php
+++ b/app/Controllers/EmployeeRestController.php
@@ -1677,19 +1677,55 @@ class EmployeeRestController extends AdminController
}
}
+ $responseData = [
+ 'level_1' => $level_1,
+ 'level_2' => $level_2,
+ ];
+
+ $tpaNetworkHospitals = $this->getTpaNetworkHospitalsByClientId($client_id);
+
+ if (! empty($tpaNetworkHospitals)) {
+ $responseData['tpa_network_hospitals'] = $tpaNetworkHospitals;
+ }
+
return $this->respond([
'status' => 'success',
'code' => 200,
- 'data' => [
- 'level_1' => $level_1,
- 'level_2' => $level_2,
- ],
+ 'data' => $responseData,
], 200);
+
} catch (\Exception $e) {
return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500);
}
}
+ private function getTpaNetworkHospitalsByClientId($client_id)
+ {
+ $tpaRecords = $this->clientPolicyModel
+ ->select('tpa.name as tpa_name, tpa.network_hospitals')
+ ->join('tpa', 'client_policy.tpa_id = tpa.id', 'left')
+ ->where('MD5(client_policy.client_id)', $client_id)
+ ->where('client_policy.is_active', 1)
+ ->where('tpa.is_active', 1)
+ ->where('tpa.network_hospitals IS NOT NULL', null, false)
+ ->where('tpa.network_hospitals !=', '')
+ ->groupBy('tpa.id')
+ ->findAll();
+
+ $tpaNetworkHospitals = [];
+
+ foreach ($tpaRecords as $tpaRecord) {
+ $tpaName = trim((string) ($tpaRecord['tpa_name'] ?? ''));
+ $networkHospitals = trim((string) ($tpaRecord['network_hospitals'] ?? ''));
+
+ if ($tpaName !== '' && $networkHospitals !== '') {
+ $tpaNetworkHospitals[$tpaName] = $networkHospitals;
+ }
+ }
+
+ return $tpaNetworkHospitals;
+ }
+
public function getAddOnPolicy()
{
try {
@@ -5133,14 +5169,12 @@ class EmployeeRestController extends AdminController
try {
//for inception upload
- if($type == 'EB'){
+ if ($type == 'EB') {
- $data['actions'] = ['addition' => 'Addition (Employee + Dependents)', 'missed_inception' => 'Missed Inception (Employee + Dependents)', 'dependent_addition' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement'];
- }
- else
- {
- $data['actions'] = ['addition' => 'Adding New Assets', 'deletion' => 'Removing Assets', 'correction' => 'Correction of assets details'];
- }
+ $data['actions'] = ['all' => 'All', 'addition' => 'Addition (Employee + Dependents)', 'missed_inception' => 'Missed Inception (Employee + Dependents)', 'dependent_addition' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement'];
+ } else {
+ $data['actions'] = ['addition' => 'Adding New Assets', 'deletion' => 'Removing Assets', 'correction' => 'Correction of assets details'];
+ }
return $this->respond([
'status' => true,
@@ -5868,4 +5902,30 @@ class EmployeeRestController extends AdminController
], 200);
}
+ public function sendMailForIndividualEmployeeEcard()
+ {
+ $received_data = $this->request->getJSON(true) ?? [];
+
+ $id = $received_data['emp_policy_id'] ?? null;
+ $client_policy_id = $received_data['client_policy_id'] ?? null;
+
+ if (empty($id)) {
+ return $this->respond(['status' => false, 'code' => 404, 'message' => 'emp_policy_id is required'], 200);
+ }
+
+ if (empty($client_policy_id)) {
+ return $this->respond(['status' => false, 'code' => 404, 'message' => 'client_policy_id is required'], 200);
+ }
+
+ $ids[] = $id;
+ $empDataServiceController = new EmpDataServiceController();
+ $result = $empDataServiceController->sendMailForDownloadingECard(['ids' => $ids, 'client_policy_id' => $client_policy_id], 1);
+
+ if (isset($result['status']) && $result['status'] == true) {
+ return $this->respond(['status' => true, 'code' => 200, 'message' => 'Mail sent successfully', 'result' => $result], 200);
+ }
+
+ return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to sent mail.', 'result' => $result], 200);
+ }
+
}
diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php
index ecf2d49a..6db0be9d 100755
--- a/app/Controllers/EmployeeServiceController.php
+++ b/app/Controllers/EmployeeServiceController.php
@@ -19,6 +19,7 @@ use App\Models\MessageModel;
use App\Models\ClientBranchModel;
use App\Models\NotificationModel;
use App\Models\InsurerModel;
+use App\Models\TicketMasterModel;
use App\Helpers\sendMailNotification;
@@ -46,6 +47,7 @@ class EmployeeServiceController extends AdminController
protected $clientBranchModel;
protected $notificationModel;
protected $insurerModel;
+ protected $ticketMasterModel;
protected $general_relationships = [
'self' => [
@@ -355,10 +357,13 @@ class EmployeeServiceController extends AdminController
'col_idx' => 6,
'col_cell_name' => 'G',
'col_name' => 'Claim status',
- 'is_mandatory' => ['D'],
+ 'is_mandatory' => false,
+ // 'is_mandatory' => ['D'],
+ 'is_column_optional' => true,
'data_type' => 'str',
'format' => null,
- 'allowed_values' => [0,1]
+ 'allowed_values' => null
+ // 'allowed_values' => [0,1]
]
];
@@ -779,6 +784,7 @@ class EmployeeServiceController extends AdminController
$this->clientBranchModel = new ClientBranchModel();
$this->notificationModel = new NotificationModel();
$this->insurerModel = new InsurerModel();
+ $this->ticketMasterModel = new TicketMasterModel();
}
public function excelFileFormatValidation($params)
@@ -842,8 +848,22 @@ class EmployeeServiceController extends AdminController
$excel_columns = ($excel_data[0]);
// var_dump($total_defined_columns);die();
$excel_columns_count = count($excel_columns);
- if($total_defined_columns != $excel_columns_count)
- {
+ $optional_column_count = 0;
+ foreach ($columns_to_check as $column_config) {
+ if (!empty($column_config['is_column_optional'])) {
+ $optional_column_count++;
+ }
+ }
+ $min_required_columns = $total_defined_columns - $optional_column_count;
+
+ if ($optional_column_count > 0) {
+ if ($excel_columns_count < $min_required_columns || $excel_columns_count > $total_defined_columns) {
+ $message = "File columns count mismatch. Expected between $min_required_columns and $total_defined_columns and received - $excel_columns_count";
+ $this->myLogger->logme('error',($message . ' for file id ' . $file_id));
+ $this->fileModel->where('id', $file_id)->set(['status' => 'failed','reason' => json_encode(['error_summary' => array_count_values([5]),'error_data' => $message])])->update();
+ return array('error_summary' => [5], 'error_data' => $message);
+ }
+ } elseif ($total_defined_columns != $excel_columns_count) {
//columns count mismatch
$message = "File columns count mismatch. Expected - $total_defined_columns and received - $excel_columns_count";
// echo $message;
@@ -1532,38 +1552,52 @@ class EmployeeServiceController extends AdminController
return (count($employee_data_group_by_family));
}
+ /**
+ * Returns claim_status for deletion: 1 if an active claim exists in ticket_master for the employee and policy, else 0.
+ */
+ protected function getEmployeeClaimStatusForDeletion(int $emp_id, int $client_policy_id): int
+ {
+ $claim = $this->ticketMasterModel
+ ->where('emp_id', $emp_id)
+ ->where('client_policy_id', $client_policy_id)
+ ->where('is_active', 1)
+ ->first();
+
+ return $claim ? 1 : 0;
+ }
+
//deletion of emp
public function employeeDisembark($params)
{
- helper('excel_util_helper');
+ helper('excel_util_helper');
//get file name
$file_id = $params['file_id'];
$file = $this->fileModel->find((int)$file_id);
// dd($file);
- $file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name'];
+ $file_name_with_path = WRITEPATH . "/uploads/excel/" . $file['file_name'];
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
$sheet = $spreadsheet->getActiveSheet();
-
+
$highestRowAndColumn = $sheet->getHighestRowAndColumn();
$allowedHighestColumn = end($this->deletion_excel_columns);
$excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
// $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
-
+
// dd($excel_data);
unset($excel_data[0]);
// kint::dump($excel_data);
$endorsement_data = [];
- $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
+ $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'], $file['policy_id']);
$insurer = new InsurerModel();
$insurer = ($insurer->find((int)$policy_terms[0]->insurer_id));
// kint::dump($insurer);
//make closure funciton which is going to use only by this method
- $endorsement = function($data,$file,$row) use ($insurer){
+ $endorsement = function ($data, $file, $row) use ($insurer) {
$group_key = rand(100000, 999999);
- $row[4] = change_date_format($row[4],'d-M-Y','Y-m-d');// date of exit from excel
+ $row[4] = change_date_format($row[4], 'd-M-Y', 'Y-m-d'); // date of exit from excel
// Kint::dump($row[4]);
// check if insurer configured with add one day for deletion
// if($insurer['deletion_add_day'] == true)
@@ -1572,115 +1606,103 @@ class EmployeeServiceController extends AdminController
// }
// dd($row[4]);
//for emp table
- // $this->empEndorsementModel->save(['pk' => (int)$data['emp_id'],'emp_code' => $data['emp_code'],'table_name' => 'employees','actions' => 'd','name' => $data['name'],'field_name' => 'emp_status','old_value' => $data['emp_status'],'new_value' => 'deactivate','created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
+ // $this->empEndorsementModel->save(['pk' => (int)$data['emp_id'],'emp_code' => $data['emp_code'],'table_name' => 'employees','actions' => 'd','name' => $data['name'],'field_name' => 'emp_status','old_value' => $data['emp_status'],'new_value' => 'deactivate','created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
// dd( $this->empEndorsementModel->getLastQuery());
// $this->empEndorsementModel->save(['pk' => (int)$data['emp_id'],'emp_code' => $data['emp_code'],'table_name' => 'employees','actions' => 'd','name' => $data['name'],'field_name' => 'change_event','old_value' => $data['change_event'],'new_value' => 'deletion','created_by' => $file['created_by'],'remarks' => 'general deletion']);
// for employee policy table
- $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'],'emp_code' => $data['emp_code'],'table_name' => 'employee_polices','actions' => 'd','name' => $data['name'],'field_name' => 'date_of_exit','old_value' => $data['date_of_exit'],'new_value' => $row[4],'created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
- $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'],'emp_code' => $data['emp_code'],'table_name' => 'employee_polices','actions' => 'd','name' => $data['name'],'field_name' => 'reason_for_exit','old_value' => $data['reason_for_exit'],'new_value' => $row[5],'created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
- $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'],'emp_code' => $data['emp_code'],'table_name' => 'employee_polices','actions' => 'd','name' => $data['name'],'field_name' => 'status','old_value' => $data['status'],'new_value' => 'inactive','created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
- $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'],'emp_code' => $data['emp_code'],'table_name' => 'employee_polices','actions' => 'd','name' => $data['name'],'field_name' => 'claim_status','old_value' => $data['claim_status'],'new_value' => $row[6],'created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
+ $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'], 'emp_code' => $data['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'd', 'name' => $data['name'], 'field_name' => 'date_of_exit', 'old_value' => $data['date_of_exit'], 'new_value' => $row[4], 'created_by' => $file['created_by'], 'remarks' => 'general deletion', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
+ $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'], 'emp_code' => $data['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'd', 'name' => $data['name'], 'field_name' => 'reason_for_exit', 'old_value' => $data['reason_for_exit'], 'new_value' => $row[5], 'created_by' => $file['created_by'], 'remarks' => 'general deletion', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
+ $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'], 'emp_code' => $data['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'd', 'name' => $data['name'], 'field_name' => 'status', 'old_value' => $data['status'], 'new_value' => 'inactive', 'created_by' => $file['created_by'], 'remarks' => 'general deletion', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
+ $claim_status = $this->getEmployeeClaimStatusForDeletion((int) $data['emp_id'], (int) $file['policy_id']);
+ $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'], 'emp_code' => $data['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'd', 'name' => $data['name'], 'field_name' => 'claim_status', 'old_value' => $data['claim_status'], 'new_value' => $claim_status, 'created_by' => $file['created_by'], 'remarks' => 'general deletion', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
};
//iterate each row
- foreach ($excel_data as $col_key => $row)
- {
- if(check_row_is_empty_or_null($row))
- {
- break;
+ foreach ($excel_data as $col_key => $row) {
+ if (check_row_is_empty_or_null($row)) {
+ break;
}
// echo '
START- ' . $row[2];
$employee = $this->employeeModel
- ->select('employees.*, employee_polices.id as emp_policy_pk')
- ->join('employee_polices', 'employees.id = employee_polices.employee_id')
- ->where('employees.emp_code', $row[1])
- ->where('employees.name',$row[2])
- ->where('employees.client_id',$file['client_id'])
- ->where('employees.client_branch_id',$file['client_branch_id'])
- ->where('employee_polices.client_policy_id',$file['policy_id'])
- ->where('employees.emp_status','active')
- ->where('employees.is_active', 1)
- ->where('employee_polices.status','active')
- ->where('employee_polices.is_active', 1)
- ->first();
+ ->select('employees.*, employee_polices.id as emp_policy_pk')
+ ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+ ->where('employees.emp_code', $row[1])
+ ->where('employees.name', $row[2])
+ ->where('employees.client_id', $file['client_id'])
+ ->where('employees.client_branch_id', $file['client_branch_id'])
+ ->where('employee_polices.client_policy_id', $file['policy_id'])
+ ->where('employees.emp_status', 'active')
+ ->where('employees.is_active', 1)
+ ->where('employee_polices.status', 'active')
+ ->where('employee_polices.is_active', 1)
+ ->first();
// $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->first();
// dd($employee);
// kint::dump($employee);
- if(is_array($employee) && count($employee))
- {
+ if (is_array($employee) && count($employee)) {
// dd($employee);
- $existing_endorsements = $this->empEndorsementModel->where('actions','d')
- ->where('table_name','employee_polices')
- ->where('endorsement_id is null')
- ->where('emp_code',$employee['emp_code'])
- ->where('name',$employee['name'])
- ->where('pk',$employee['emp_policy_pk'])
- ->where('field_name','status')
- ->where('status !=','truncated')
- ->where('is_active', 1)
- ->findAll();
+ $existing_endorsements = $this->empEndorsementModel->where('actions', 'd')
+ ->where('table_name', 'employee_polices')
+ ->where('endorsement_id is null')
+ ->where('emp_code', $employee['emp_code'])
+ ->where('name', $employee['name'])
+ ->where('pk', $employee['emp_policy_pk'])
+ ->where('field_name', 'status')
+ ->where('status !=', 'truncated')
+ ->where('is_active', 1)
+ ->findAll();
- // dd($existing_endorsements);
- if(!count($existing_endorsements))
- {
- // dd($employee);
- if(strtolower($employee['relationship']) != 'self')
- {
-
- if(!in_array($employee['id'],$endorsement_data))//make entry in endorsement firsttime only with checking that PK of emp exisintg in variable $endorsement_data
- {
- $employee_policy = $this->employeePolicyModel
- ->where('employee_id',$employee['id'])
- ->where('client_policy_id',$file['policy_id'])
- ->where('status','active')
- ->where('is_active', 1)
- ->first();
+ // dd($existing_endorsements);
+ if (!count($existing_endorsements)) {
+ // dd($employee);
+ if (strtolower($employee['relationship']) != 'self') {
- $data = ['emp_id' => $employee['id'],'name' => $employee['name'],'emp_status' => $employee['emp_status'],'emp_policy_id' => $employee_policy['id'],'emp_code' => $employee['emp_code'],'change_event' => $employee['change_event'],'date_of_exit' => $employee_policy['date_of_exit'],'reason_for_exit' => $employee_policy['reason_for_exit'],'status' => $employee_policy['status'],'claim_status' => $employee_policy['claim_status']];
- $endorsement($data,$file,$row);
- $endorsement_data[] = $employee['id'];
- }
+ if (!in_array($employee['id'], $endorsement_data)) //make entry in endorsement firsttime only with checking that PK of emp exisintg in variable $endorsement_data
+ {
+ $employee_policy = $this->employeePolicyModel
+ ->where('employee_id', $employee['id'])
+ ->where('client_policy_id', $file['policy_id'])
+ ->where('status', 'active')
+ ->where('is_active', 1)
+ ->first();
+
+ $data = ['emp_id' => $employee['id'], 'name' => $employee['name'], 'emp_status' => $employee['emp_status'], 'emp_policy_id' => $employee_policy['id'], 'emp_code' => $employee['emp_code'], 'change_event' => $employee['change_event'], 'date_of_exit' => $employee_policy['date_of_exit'], 'reason_for_exit' => $employee_policy['reason_for_exit'], 'status' => $employee_policy['status'], 'claim_status' => $employee_policy['claim_status']];
+ $endorsement($data, $file, $row);
+ $endorsement_data[] = $employee['id'];
+ }
+ } else {
+
+ $family = $this->employeeModel->getEmpFamilybyEmpCode(emp_code: $row[1], client_id: $file['client_id'], client_policy_id: $file['policy_id'], emp_status: ['active'], policy_status: ['active']);
+ // Kint::dump($family);
+ foreach ($family as $key => $emp) {
+
+ if (!in_array($emp['emp_id'], $endorsement_data)) {
+ $endorsement($emp, $file, $row);
+
+ $endorsement_data[] = $emp['emp_id'];
}
- else
- {
-
- $family = $this->employeeModel->getEmpFamilybyEmpCode(emp_code: $row[1],client_id: $file['client_id'],client_policy_id: $file ['policy_id'],emp_status: ['active'],policy_status: ['active']);
- // Kint::dump($family);
- foreach ($family as $key => $emp) {
-
- if(!in_array($emp['emp_id'],$endorsement_data))
- {
- $endorsement($emp,$file,$row);
-
- $endorsement_data[] = $emp['emp_id'];
-
- }
- }
-
- }
- }else{
- $this->myLogger->logme("error",'Existing endorsement pending for this employee : emp_code : {emp_code} - emp_name : {name}',['emp_code' => $row[1],'name' => $row[2]]);
+ }
}
- }
- else
- {
- $this->myLogger->logme("error",'{emp_code} - {name} not found',['emp_code' => $row[1],'name' => $row[2]]);
+ } else {
+ $this->myLogger->logme("error", 'Existing endorsement pending for this employee : emp_code : {emp_code} - emp_name : {name}', ['emp_code' => $row[1], 'name' => $row[2]]);
+ }
+ } else {
+ $this->myLogger->logme("error", '{emp_code} - {name} not found', ['emp_code' => $row[1], 'name' => $row[2]]);
}
// print_r($endorsement_data);
}
-
- $this->fileModel->where('id', $file_id)->set(['status' => 'success','reason' => ''])->update();
- $this->myLogger->logme("error",'{file_id} uploaded success',['file_id' => $file_id]);
+
+ $this->fileModel->where('id', $file_id)->set(['status' => 'success', 'reason' => ''])->update();
+ $this->myLogger->logme("error", '{file_id} uploaded success', ['file_id' => $file_id]);
//set success msg to pull notifications
- $this->setPullNotification($this->getFileMetaDataByFileId($file_id,'success'));
- return $endorsement_data;
-
+ $this->setPullNotification($this->getFileMetaDataByFileId($file_id, 'success'));
+ return $endorsement_data;
}
//correction of emp
diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php
index d6cd0df5..41f4252e 100644
--- a/app/Controllers/LeadsController.php
+++ b/app/Controllers/LeadsController.php
@@ -2895,6 +2895,11 @@ class LeadsController extends BaseController
$filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_" . $policy_year . '_' . '.xlsx';
}
+ $filenameBase = pathinfo($filename, PATHINFO_FILENAME);
+ $filenameBase = preg_replace('/[^a-zA-Z0-9\-_ ]/u', '', $filenameBase);
+ $filenameBase = preg_replace('/\s+/', ' ', trim($filenameBase));
+ $filename = ($filenameBase !== '' ? $filenameBase : 'export') . '.xlsx';
+
//claim history new sheet;
if ($claim_history == 1 && !empty($rfq_data['fin_years_claims'])) {
diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php
index a381b23f..8c2436d7 100644
--- a/app/Controllers/PolicyTransactionController.php
+++ b/app/Controllers/PolicyTransactionController.php
@@ -1319,6 +1319,14 @@ class PolicyTransactionController extends BaseController
$old_pt_co_share_data = $this->PTCOShareDetailsModel->where('is_active', 1)->where("id", $id)->first();
if ($this->policyTransactionModel->update($id, $data)) {
+ if (!empty($old_pt_data) && isset($data['policy_no'])) {
+ $this->updateRelatedPolicyTransactionPolicyNo(
+ (int) $id,
+ (string) ($old_pt_data['policy_no'] ?? ''),
+ (string) $data['policy_no']
+ );
+ }
+
$this->insertTransactionStatus($id, $data, 1);
$emp_data = $this->processInsertIndividualMemberInEmpTable($data);
@@ -1376,6 +1384,59 @@ class PolicyTransactionController extends BaseController
return $this->respondError("Failed to update policy transaction");
}
+ /**
+ * Sync policy_no on related policy_transaction rows when inception policy number changes.
+ */
+ private function updateRelatedPolicyTransactionPolicyNo(
+ int $inceptionPtId,
+ string $oldPolicyNo,
+ string $newPolicyNo
+ ): array {
+ $oldPolicyNo = trim($oldPolicyNo);
+ $newPolicyNo = trim($newPolicyNo);
+
+ if ($oldPolicyNo === '' || $newPolicyNo === '' || $oldPolicyNo === $newPolicyNo) {
+ return ['status' => false, 'message' => 'No policy number change detected', 'updated_ids' => []];
+ }
+
+ $relatedRecords = $this->policyTransactionModel
+ ->where('is_active', 1)
+ ->where('id !=', $inceptionPtId)
+ ->where('policy_no', $oldPolicyNo)
+ ->findAll();
+
+ if (empty($relatedRecords)) {
+ return ['status' => true, 'message' => 'No related policy transactions found', 'updated_ids' => []];
+ }
+
+ $updatedIds = [];
+ $updatedBy = get_session_userid();
+
+ foreach ($relatedRecords as $record) {
+ $this->policyTransactionModel
+ ->where('id', $record['id'])
+ ->set(['policy_no' => $newPolicyNo, 'updated_by' => $updatedBy])
+ ->update();
+
+ if ($this->policyTransactionModel->affectedRows() > 0) {
+ $updatedIds[] = $record['id'];
+ }
+ }
+
+ $this->myLogger->logme('error', 'Updated policy_no on related policy_transaction records: ' . json_encode([
+ 'inception_pt_id' => $inceptionPtId,
+ 'old_policy_no' => $oldPolicyNo,
+ 'new_policy_no' => $newPolicyNo,
+ 'updated_ids' => $updatedIds,
+ ]));
+
+ return [
+ 'status' => true,
+ 'message' => 'Related policy transaction policy numbers updated',
+ 'updated_ids' => $updatedIds,
+ ];
+ }
+
private function insertOrUpdateCoShareDetails($data, $pt_id)
{
// Prepare data for insertion and updating
diff --git a/app/Filters/AuthJWT.php b/app/Filters/AuthJWT.php
index 45f4517a..6bde4421 100755
--- a/app/Filters/AuthJWT.php
+++ b/app/Filters/AuthJWT.php
@@ -3,6 +3,7 @@
namespace App\Filters;
use App\Helpers\JWTToken;
+use App\Filters\Cors;
use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
@@ -18,6 +19,13 @@ use App\Models\LevelContactModel;
class AuthJWT implements FilterInterface
{
+ protected Cors $corsFilter;
+
+ public function __construct()
+ {
+ $this->corsFilter = new Cors();
+ }
+
// public function before(RequestInterface $request, $arguments = null)
// {
// $jwt = $request->getHeader('Authorization');
@@ -84,20 +92,20 @@ class AuthJWT implements FilterInterface
$authHeader = $request->getHeaderLine('Authorization');
if (!$authHeader) {
- return $this->reject(403, 'Access Forbidden');
+ return $this->reject($request, 403, 'Access Forbidden');
}
$result = JWTToken::validateJWT($authHeader);
if ($result['status'] !== true) {
- return $this->reject(401, $result['message']);
+ return $this->reject($request, 401, $result['message']);
}
$decoded = $result['decoded'];
$id = $decoded['id'] ?? null;
if (!$id) {
- return $this->reject(401, 'Invalid token payload');
+ return $this->reject($request, 401, 'Invalid token payload');
}
if (isset($decoded['emp_code'])) {
@@ -111,7 +119,7 @@ class AuthJWT implements FilterInterface
if (!$user || $user['token_time_out'] <= time()) {
$model->update($id, ['token_time_out' => null]);
- return $this->reject(401, 'Token expired');
+ return $this->reject($request, 401, 'Token expired');
}
// Refresh sliding expiration
@@ -132,12 +140,20 @@ class AuthJWT implements FilterInterface
return true;
}
- private function reject(int $code, string $message)
+ private function reject(RequestInterface $request, int $code, string $message): ResponseInterface
{
- return service('response')
- ->setStatusCode($code)
- ->setJSON(['status' => $code, 'message' => $message])
- ->send();
+ $response = service('response');
+ $response->setStatusCode($code);
+ $response->setContentType('application/json');
+ $response->setBody(json_encode([
+ 'status' => $code,
+ 'message' => $message,
+ ]));
+
+ // Early before-filter returns skip global Cors after(), so attach CORS here.
+ $this->corsFilter->after($request, $response);
+
+ return $response;
}
diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php
index 5aa68990..5b474732 100755
--- a/app/Helpers/excel_util_helper.php
+++ b/app/Helpers/excel_util_helper.php
@@ -41,6 +41,10 @@ if (!function_exists('check_columns_name')) {
$definedColIdx = $definedCol['col_idx'];
$definedColName = $definedCol['col_name'];
+ if (!empty($definedCol['is_column_optional']) && !array_key_exists($definedColIdx, $excelColumns)) {
+ continue;
+ }
+
if (strtolower(strip_tags(trim($excelColumns[$definedColIdx]))) !== strtolower($definedColName)) {
$mismatchedColumns[] = "Column order conflict. Column order no " . ($definedColIdx + 1) . " expected : " . $definedColName . " and received : " . $excelColumns[$definedColIdx] . "
";
}
diff --git a/app/Models/LeadsModel.php b/app/Models/LeadsModel.php
index ef88ba21..5ebd7f13 100644
--- a/app/Models/LeadsModel.php
+++ b/app/Models/LeadsModel.php
@@ -187,30 +187,46 @@ class LeadsModel extends Model
return $data->orderBy('leads.id', 'desc')->findAll();
}
- public function getLeadForInsertClientList($type = null, $client_id = null)
+ public function getLeadForInsertClientList($type = null, $client_id = null, $from = null)
{
$query = $this->db->table('leads')
->select('leads.*, user_profiles.first_name as user_name, policy_type.allocg')
->join('user_profiles', 'leads.created_by = user_profiles.id')
->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left')
->where('leads.is_active', 1)
- ->where('leads.status', 'won')
- ->groupStart()
+ ->where('leads.status', 'won');
+
+ if ($from === 'update') {
+ $query->where("(leads.is_policy_created = '' OR leads.is_policy_created IS NULL)");
+
+ if ($client_id) {
+ $query->join('clients', 'clients.id = ' . (int) $client_id)
+ ->join('client_branch', 'client_branch.client_id = clients.id AND client_branch.is_active = 1')
+ ->where('leads.client_name = clients.client_name', null, false)
+ ->where('leads.client_short_name = clients.short_name', null, false)
+ ->where('leads.branch_name = client_branch.branch_name', null, false)
+ ->where('leads.branch_code = client_branch.branch_code', null, false)
+ ->groupBy('leads.id');
+ }
+ } else {
+ $query->groupStart()
->where("(leads.is_client_created = '' OR leads.is_client_created IS NULL)")
->orWhere("(leads.is_policy_created = '' OR leads.is_policy_created IS NULL)")
- ->groupEnd()
- ->groupStart()
- ->where("policy_type.allocg != 'EB'")
- ->orWhere("(policy_type.allocg = 'EB' AND leads.proposel_data IS NOT NULL AND leads.proposel_data <> '')")
->groupEnd();
- if ($type) {
- $query->where('leads.lead_type', $type);
- }
- if ($client_id) {
- $query->where('leads.client_id', $client_id);
+ if ($type) {
+ $query->whereIn('leads.lead_type', $type);
+ }
+ if ($client_id) {
+ $query->where('leads.client_id', $client_id);
+ }
}
+ $query->groupStart()
+ ->where("policy_type.allocg != 'EB'")
+ ->orWhere("(policy_type.allocg = 'EB' AND leads.proposel_data IS NOT NULL AND leads.proposel_data <> '')")
+ ->groupEnd();
+
$result = $query->get()->getResultArray();
return $result;
}
diff --git a/app/Views/view_rfq.php b/app/Views/view_rfq.php
index f768f740..c1d4c104 100644
--- a/app/Views/view_rfq.php
+++ b/app/Views/view_rfq.php
@@ -907,7 +907,7 @@