diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 22e9c343..c757962c 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -227,6 +227,7 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->get("full-excel-error-file/(:any)", "EmployeeController::downloadFullExcelErrorFile/$1"); $routes->get("id-card", "EmployeeController::viewECard/$1"); $routes->get("preview-card/(:any)", "EmployeeController::previewTemplate/$1"); + $routes->get("export-import-error-list/(:any)", "EmployeeController::errorListExportImport/$1"); }); $routes->cli('cli/processjob', 'JobWorker::processJob'); diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index ccd39f50..1a370981 100644 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -22,6 +22,11 @@ class DashboardController extends AdminController echo view('layout/footer'); } + public function dashboardNotifications() + { + //pull notofications to dashboard especially for file upload cases + } + } diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php index 1a9421f4..728d81b8 100644 --- a/app/Controllers/EmpDataServiceController.php +++ b/app/Controllers/EmpDataServiceController.php @@ -24,8 +24,10 @@ use App\Models\ClientDepositModel; use App\Models\NotificationModel; use App\Controllers\Jobs; +use App\Controllers\JobWorker; + + use PhpOffice\PhpSpreadsheet\Spreadsheet; -// use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Reader\Xlsx; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Reader\Exception as SpreadsheetReaderException; @@ -97,6 +99,19 @@ class EmpDataServiceController extends BaseController } + public function insertBatchList($params){ + + foreach ($params['batch_list_data'] as $value) { + + $batch_list_data['batch_code'] = $params['batch_code']; + $batch_list_data['emp_policy_id'] = $value['primaryKey']; + $batch_list_data['created_by'] = get_session_userid(); + $this->batchListModel->insert($batch_list_data); + } + + } + + /** * Generates an Excel file for Inception_Addititon_DependentAddititon, Correction, SI_Enhancement and Deletion events based on given export data. * @@ -111,23 +126,31 @@ class EmpDataServiceController extends BaseController public function generateExcelForAdditionandInception($export_data) { + + $return = $this->removeOldExportInfoFromBatchFile($export_data); + // Fetch employee data for export from the database $objects = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data); - + $insurer_id = $this->clientPolicyModel->where('id', $export_data['client_policy_id'])->first(); - $cash_balance = $this->clientDepositModel->where('client_id',$export_data['client_id'] )->where('insurer_id', $insurer_id['insurer_id'])->orderBy('id', 'DESC')->first(); - - + $cash_balance = $this->clientDepositModel->where('client_id', $export_data['client_id'])->where('insurer_id', $insurer_id['insurer_id'])->orderBy('id', 'DESC')->first(); + + $totals = 0; foreach ($objects as $key => $value) { - + $totals += $value->total; } - if((int) $cash_balance['balance'] < (int) $totals){ + if (!empty($cash_balance)) { - return 0; + if ((int) $cash_balance['balance'] < (int) $totals) { + + return 0; + } + } else { + // return 0; } @@ -135,6 +158,7 @@ class EmpDataServiceController extends BaseController $count = count($objects); $export_data['count'] = $count; $export_data['amount'] = $totals; + $export_data['status'] = 'success'; $this->myLogger->logme('error', 'Inception export data count : {data}', ['data' => $count]); @@ -181,11 +205,27 @@ class EmpDataServiceController extends BaseController // If Excel generation is successful if ($success) { + + // Batch files and list entry - $return = $this->batchFilesAndBatchListEntry($export_data, $objects); + // $return = $this->batchFilesAndBatchListEntry($export_data, $objects); + + $random_number_count = 4; + $export_data['batch_code'] = generate_random_string($random_number_count); + $export_data['created_by'] = get_session_userid(); + + $insert = $this->batchFileModel->insert($export_data); + $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first(); + $batch_code = $batch_file_batch_code['batch_code']; + + // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]); + + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'insertBatchList','payload' => ['batch_code' => $batch_code, 'batch_list_data' => $objects ]]); + // If batch operation is successful - if ($return) { + if (true) { // Set headers for Excel file download header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $export_data['file_name'] . '"'); @@ -199,7 +239,9 @@ class EmpDataServiceController extends BaseController fclose($tempFile); return true; // Excel file successfully generated and exported + } else { + return false; // Batch operation failed } } @@ -293,7 +335,7 @@ class EmpDataServiceController extends BaseController $ids = []; $objects = $this->employeePolicyModel->getSIEnhancementEmployeesDataForExportExcel($export_data); - + $totals = 0; foreach ($objects as $obj) { $ids[] = $obj->endorsement_primarykey; @@ -399,7 +441,7 @@ class EmpDataServiceController extends BaseController $count = count($objects); $export_data['count'] = $count; $export_data['amount'] = $rounded_totals; - + $this->myLogger->logme('error', 'Deletion export data count : {data}', ['data' => $count]); @@ -494,187 +536,467 @@ class EmpDataServiceController extends BaseController public function importExcelDataForInception($import_data) { - - $client_id = $import_data['client_id']; - $client_policy_id = $import_data['client_policy_id']; $file = $import_data['file']; - $get_client_policy_type = $this->clientPolicyModel->where('id', $client_policy_id)->first(); - - $data = $this->readExcelToArray($file); - - if (!$data) { - - return 0; - } - - unset($data[0]); - array_pop($data); - $count = count($data); - - $missing_id = []; - $empty_emp_tpa_uh_ids = []; - $totals = 0; - foreach ($data as $key => $value) { - - try { - - - if ($import_data['insurer_or_tpa'] == 'tpa') { - - if ($value[15] === null) { - $missing_id[] = $key + 1; - } - } else if ($import_data['insurer_or_tpa'] == 'insurer') { - - if ($value[16] === null) { - $missing_id[] = $key + 1; - } - } - - $emp_code = $value[2]; - $name = $value[1]; - $totals += $value[20]; - - $db = \Config\Database::connect(); - - // Execute the query - $query = $db->table('employee_polices'); - $query->select('employee_polices.id'); - $query->join('employees', 'employees.id = employee_polices.employee_id'); - $query->where('employee_polices.client_policy_id', $client_policy_id); - $query->where('employees.client_id', $client_id); - $query->where('employees.name', $name); - $query->where('employees.emp_code', $emp_code); - if ($import_data['insurer_or_tpa'] == 'tpa') { - - $query->where('(employee_polices.tpa_id IS NULL OR employee_polices.tpa_id = "")'); - } else if ($import_data['insurer_or_tpa'] == 'insurer') { - - $query->where('(employee_polices.uhid IS NULL OR employee_polices.uhid = "")'); - } - $query->where('employee_polices.is_active', 1); - $query->limit(1); - - // Get the result - $result = $query->get()->getRowArray(); - if (isset($result['id']) && $result['id'] !== null) { - $empty_emp_tpa_uh_ids[] = $result['id']; - } - } catch (\Exception $e) { - - return 0; - } - } - - - $missing_id_count = count($missing_id); - $empty_id_count = count($empty_emp_tpa_uh_ids); - - - if ($import_data['insurer_or_tpa'] == 'tpa') { - - if ($empty_id_count == 0) { - - return 3; - } - - if ($missing_id_count != 0) { - - return 2; - } - } else if ($import_data['insurer_or_tpa'] == 'insurer') { - - if ($empty_id_count == 0) { - - return 5; - } - - if ($missing_id_count != 0) { - - return 4; - } - } - - // if ($missing_id_count != $count) { - - // return 2; - // } - - - // if ($empty_emp_tpa_uh_ids != $count) { - - // return 3; - // } - - - - // dd($empty_emp_tpa_uh_ids); - $is_moved = $file->move(WRITEPATH . 'uploads/import_excel'); $filename = $file->getName(); $this->myLogger->logme('error', 'Inception Import file name : {data}', ['data' => $filename]); - $import_data['count'] = $count; + + $random_number_count = 4; + $import_data['batch_code'] = generate_random_string($random_number_count); + $import_data['created_by'] = get_session_userid(); + $import_data['status'] = 'pending'; $import_data['file_name'] = $filename; - $import_data['amount'] = $totals; + + $insert = $this->batchFileModel->insert($import_data); + + $file_id['file_id'] = $insert; + + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'importInceptionFileValidation','payload' => ['file_id' => $insert]]); + + return 1; + } - $this->insertBatchFileAndBatchListForImportExcel($import_data, $empty_emp_tpa_uh_ids); + public function importInceptionFileValidation($params) + { - // dd($import_data, $empty_emp_tpa_uh_ids); + $file_id = $params['file_id']; + $file = $this->batchFileModel->where('id', $file_id)->first(); + $client_id = $file['client_id']; + $client_policy_id = $file['client_policy_id']; + $batch_code = $file['batch_code']; - $tpa_id = []; - $uhid = []; - - foreach ($data as $key => $value) { - $tpa_id[] = $value[15]; - $uhid[] = $value[16]; + $insurer_or_tpa = $file['insurer_or_tpa']; + if ($insurer_or_tpa == 'tpa') { + + $id = 'tpa_id'; + } else if ($insurer_or_tpa == 'insurer') { + + $id = 'uhid'; } - foreach ($empty_emp_tpa_uh_ids as $key => $id) { + $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name']; + $excel_data = $this->readExcelFileToArray($file_name_with_path); + unset($excel_data[0]); + array_pop($excel_data); - $dataToUpdateTPAID = ['tpa_id' => $tpa_id[$key]]; - $dataToUpdateUHID = ['uhid' => $uhid[$key]]; - - $this->employeePolicyModel->where('id', $id) - ->where('(employee_polices.tpa_id IS NULL OR employee_polices.tpa_id = "")') - ->set($dataToUpdateTPAID)->update(); + $emp_count = count($excel_data); - $this->employeePolicyModel->where('id', $id) - ->where('(employee_polices.uhid IS NULL OR employee_polices.uhid = "")') - ->set($dataToUpdateUHID)->update(); - } - + $employee_data = $this->employeePolicyModel + ->select(' + + employee_polices.id as emp_policy_id, + employees.name AS emp_name, + employees.emp_code AS emp_code, + "Has Define" as emp_type, + employees.relationship_code AS emp_relationship_code, + employees.dob AS emp_dob, + employees.gender AS emp_gender, + employee_polices.pre_existing_alignments, + employee_polices.basic_cover_si, + employee_polices.date_coverage, + TIMESTAMPDIFF(YEAR, employees.dob, CURDATE()) AS emp_age, + employees.relationship AS emp_relationship, + employees.change_event AS change_event, + employee_polices.policy_end_date, + employee_polices.days, + employee_polices.tpa_id, + employee_polices.uhid, + employee_polices.premium, + employee_polices.rata_premimum, + employee_polices.gst, + (employee_polices.rata_premimum + employee_polices.gst) AS total + ') - if($import_data['insurer_or_tpa'] == 'tpa'){ + ->join('employees', 'employees.id = employee_polices.employee_id') + ->where('employee_polices.client_policy_id', $client_policy_id) + ->where('employees.client_id', $client_id) + ->where("employee_polices.{$id} IS NULL OR employee_polices.{$id} = ''") + ->findAll(); - $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id); - $depositeData = [ - 'employeeIds' => $empty_emp_tpa_uh_ids, - 'client_id' => $client_id, - 'client_policy_id' => $client_policy_id, - 'count' => $count, - 'event' => $import_data['event_type'], - 'policy_name' => $policy_name['policy_name'], - ]; + // echo '
';
+        // print_r($employee_data); die;
+
+
+        if ($employee_data == null || empty($employee_data)) {
+
+            if ($insurer_or_tpa == 'tpa') {
+
+                $data = [
+                    'status' => 'failed-1',
+                ];
     
-            $this->cashDepositCalculationForInception($depositeData);
+                $this->batchFileModel->where('id', $file_id)->set($data)->update();
+
+                return 3;
+
+            } else if ($insurer_or_tpa == 'insurer') {
+
+                $data = [
+                    'status' => 'failed-2',
+                ];
+    
+                $this->batchFileModel->where('id', $file_id)->set($data)->update();
+
+                return 5;
+            }
+        }
+
+        $excel_data_count = count($excel_data);
+        $emp_data_count = count($employee_data);
+
+        // dd($excel_data_count, $emp_data_count);
+        $difference = $emp_data_count - $excel_data_count;
+
+        $status = 'in-progress';
+        if ($excel_data_count < $emp_data_count) {
+
+            $status = 'in-progress-partially';
+            $partially_updated_data = 'Expected : ' . $emp_data_count . ',  ' . 'Updated : ' . $excel_data_count . ',  ' . 'difference : ' . $difference;
+        }
 
 
-            if($get_client_policy_type['policy_type_id'] != 1){
+        if ($emp_data_count < $excel_data_count) {
 
-                $this->sendMailForDownloadingECard($empty_emp_tpa_uh_ids);
+            $data = [
+                'status' => 'failed-3',
+            ];
 
+            $this->batchFileModel->where('id', $file_id)->set($data)->update();
+            return 6;
+        }
+
+
+        $errors = []; // Initialize an array to store errors
+        $missing_id = [];
+        $batch_list_id = [];
+
+        foreach ($employee_data as $key => $emp_value) {
+
+            $key = $key + 1;
+
+            if(!isset($excel_data[$key])){
+                break;
+            }
+
+            if ($insurer_or_tpa == 'tpa') {
+                if ($excel_data[$key][15] === null) {
+                    $missing_id[$key][] = [
+                        'row' => $key,
+                        'column' => 15,
+                    ];
+                }
+            } else if ($insurer_or_tpa == 'insurer') {
+                if ($excel_data[$key][16] === null) {
+                    $missing_id[$key][] = [
+                        'row' => $key,
+                        'column' => 16,
+                    ];
+                }
+            }
+
+
+            if ($emp_value['emp_name'] != $excel_data[$key][1]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 1,
+                    'db_data' => $emp_value['emp_name'],
+                    'excel_data' => $excel_data[$key][1]
+                ];
+            }
+
+            if ($emp_value['emp_code'] != $excel_data[$key][2]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 2,
+                    'db_data' => $emp_value['emp_code'],
+                    'excel_data' => $excel_data[$key][2]
+                ];
+            }
+
+            if ($emp_value['emp_dob'] != $excel_data[$key][5]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 5,
+                    'db_data' => $emp_value['emp_dob'],
+                    'excel_data' => $excel_data[$key][5]
+                ];
+            }
+
+            if ($emp_value['emp_gender'] != $excel_data[$key][6]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 6,
+                    'db_data' => $emp_value['emp_gender'],
+                    'excel_data' => $excel_data[$key][6]
+                ];
+            }
+
+            if ($emp_value['pre_existing_alignments'] != $excel_data[$key][7]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 7,
+                    'db_data' => $emp_value['pre_existing_alignments'],
+                    'excel_data' => $excel_data[$key][7]
+                ];
+            }
+
+            if ($emp_value['basic_cover_si'] != $excel_data[$key][8]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 8,
+                    'db_data' => $emp_value['basic_cover_si'],
+                    'excel_data' => $excel_data[$key][8]
+                ];
+            }
+
+            if ($emp_value['emp_relationship'] != $excel_data[$key][11]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 11,
+                    'db_data' => $emp_value['emp_relationship'],
+                    'excel_data' => $excel_data[$key][11]
+                ];
+            }
+
+            if ($emp_value['policy_end_date'] != $excel_data[$key][13]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 13,
+                    'db_data' => $emp_value['policy_end_date'],
+                    'excel_data' => $excel_data[$key][13]
+                ];
+            }
+
+            if ($emp_value['days'] != $excel_data[$key][14]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 14,
+                    'db_data' => $emp_value['days'],
+                    'excel_data' => $excel_data[$key][14]
+                ];
+            }
+
+            if ($emp_value['premium'] != $excel_data[$key][17]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 17,
+                    'db_data' => $emp_value['premium'],
+                    'excel_data' => $excel_data[$key][17]
+                ];
+            }
+
+            if ($emp_value['rata_premimum'] != $excel_data[$key][18]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 18,
+                    'db_data' => $emp_value['rata_premimum'],
+                    'excel_data' => $excel_data[$key][18]
+                ];
+            }
+
+            if ($emp_value['gst'] != $excel_data[$key][19]) {
+                $errors[$key][] = [
+                    'row' => $key,
+                    'column' => 19,
+                    'db_data' => $emp_value['gst'],
+                    'excel_data' => $excel_data[$key][19]
+                ];
+            }
+
+            if ($insurer_or_tpa == 'tpa') {
+
+                if ($emp_value['uhid'] != $excel_data[$key][16]) {
+                    $errors[$key][] = [
+                        'row' => $key,
+                        'column' => 16,
+                        'db_data' => $emp_value['uhid'],
+                        'excel_data' => $excel_data[$key][16]
+                    ];
+                }
+
+            } else if ($insurer_or_tpa == 'insurer') {
+
+                 if ($emp_value['tpa_id'] != $excel_data[$key][15]) {
+                    $errors[$key][] = [
+                        'row' => $key,
+                        'column' => 15,
+                        'db_data' => $emp_value['tpa_id'],
+                        'excel_data' => $excel_data[$key][15]
+                    ];
+                }
+            }
+
+
+            $batch_list_id[] = $emp_value['emp_policy_id'];
+        }
+
+
+        $error_count = count($errors);
+        $json_errors = json_encode($errors);
+
+        // echo $json_errors; die;
+
+        $missing_id_count = count($missing_id);
+        $json_missing_id = json_encode($missing_id);
+
+        // dd($error_count, $missing_id_count, $json_errors, $json_missing_id);
+
+        // dd($batch_list_id);
+
+        if ($missing_id_count > 0) {
+
+            $data = [
+                'error_data' => $json_missing_id,
+                'status' => 'failed',
+            ];
+
+            $this->batchFileModel->where('id', $file_id)->set($data)->update();
+
+            if ($insurer_or_tpa == 'tpa') {
+
+                return 2;
+
+            } else if ($insurer_or_tpa == 'insurer') {
+
+                return 4;
             }
         }
 
 
+        if ($error_count > 0) {
+
+            $data = [
+                'error_data' => $json_errors,
+                'status' => 'failed',
+            ];
+
+            $this->batchFileModel->where('id', $file_id)->set($data)->update();
+            return 0;
+
+        } else {
+
+            $data = [
+                'count' => $emp_count,
+                'status' => $status,
+                'error_data' => $partially_updated_data ?? null,
+            ];
+
+            $this->batchFileModel->where('id', $file_id)->set($data)->update();
+
+
+            foreach ($batch_list_id as $key => $value) {
+
+                $data = [
+                    'emp_policy_id' => $value,
+                    'batch_code' => $batch_code,
+                ];
+
+                $insert = $this->batchListModel->insert($data);
+            }
+
+
+            $parameters['file_id'] = $file_id;
+
+            $job_details  = new Jobs();                             
+            $r = Jobs::addJob(['job_name' => 'importInceptionUpdateTPAandUHID','payload' => ['file_id' => $file_id]]);
+
+        }
+        
+    }
+
+
+    public function importInceptionUpdateTPAandUHID($params)
+    {
+
+        $file_id = $params['file_id'];
+        $file = $this->batchFileModel->find($file_id);
+        if (!$file) {
+            $data = [
+                'status' => 'failed-4',
+            ];
+
+            $this->batchFileModel->where('id', $file_id)->set($data)->update();
+            return 0; // Return error code if file not found
+        }
+
+        $client_id = $file['client_id'];
+        $client_policy_id = $file['client_policy_id'];
+        $insurer_or_tpa = $file['insurer_or_tpa'];
+        $status = $file['status'];
+        $batch_code = $file['batch_code'];
+
+        $status_val = 'success';
+        if($status == 'in-progress-partially'){
+
+            $status_val = 'partially success';
+        }
+       
+
+        $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name'];
+        $excel_data = $this->readExcelFileToArray($file_name_with_path);
+        unset($excel_data[0]); // Remove header row
+        array_pop($excel_data); // Remove footer row
+
+        $totals = 0;
+        $emp_count = count($excel_data);
+        $db = \Config\Database::connect();
+
+        foreach ($excel_data as $key => $value) {
+
+            $name = $value[1];
+            $emp_code = $value[2];
+            $tpa_id = $value[15];
+            $uhid = $value[16];
+            $amount = $value[20];
+
+            $totals += $amount;
+
+            $sql = "
+            UPDATE employee_polices
+            JOIN employees ON employees.id = employee_polices.employee_id
+            SET tpa_id = ?
+            WHERE employees.name = ?
+            AND employees.emp_code = ?
+            AND (employee_polices.tpa_id IS NULL OR employee_polices.tpa_id = '')";
+
+            $params = [$tpa_id, $name, $emp_code];
+            $db->query($sql, $params);
+
+
+
+            $sql = "
+            UPDATE employee_polices 
+            JOIN employees ON employees.id = employee_polices.employee_id 
+            SET employee_polices.uhid = ? 
+            WHERE employees.name = ? 
+            AND employees.emp_code = ? 
+            AND (employee_polices.uhid IS NULL OR employee_polices.uhid = '')";
+
+            $params = [$uhid, $name, $emp_code];
+            $db->query($sql, $params);
+        }
+
+        // Update batch file status and amount
+        $this->batchFileModel->update($file_id, [
+            'count' => $emp_count,
+            'status' =>  $status_val,
+            'amount' => $totals,
+        ]);
+
         return 1;
     }
 
 
+
+
+
+
+
     public function importExcelDataForCorrection($import_data)
     {
 
@@ -1056,7 +1378,7 @@ class EmpDataServiceController extends BaseController
 
         $missing_id = [];
         $empty_emp_tpa_uh_ids = [];
-        $totals = 0 ;
+        $totals = 0;
         foreach ($data as $key => $value) {
 
             try {
@@ -1555,15 +1877,15 @@ class EmpDataServiceController extends BaseController
     {
         if ($file->isValid() && !$file->hasMoved()) {
             $file = $file;
-    
+
             try {
 
                 $reader = IOFactory::createReaderForFile($file->getPathname());
                 $spreadsheet = $reader->load($file->getPathname());
-    
+
                 // Get the active sheet
                 $sheet = $spreadsheet->getActiveSheet();
-    
+
                 // Iterate through rows to read data
                 $data = [];
                 foreach ($sheet->getRowIterator() as $row) {
@@ -1573,9 +1895,8 @@ class EmpDataServiceController extends BaseController
                     }
                     $data[] = $rowData;
                 }
-    
-                return $data;
 
+                return $data;
             } catch (SpreadsheetReaderException $e) {
 
                 error_log('PhpSpreadsheet reader exception: ' . $e->getMessage());
@@ -1585,7 +1906,7 @@ class EmpDataServiceController extends BaseController
             return false;
         }
     }
-    
+
 
 
     public function insertBatchFileAndBatchListForImportExcel($data, $ids)
@@ -1617,7 +1938,7 @@ class EmpDataServiceController extends BaseController
             $count = 0;
             
             foreach ($ids as $key => $id) {
-    
+
                 $get_emp_email_and_other_details = $this->employeePolicyModel
                     ->select('employee_polices.client_policy_id, employees.emp_code, employees.email_corporate,employees.client_id as client_id, employees.name, employee_polices.rand_string, employee_polices.tpa_id')
                     ->join('employees', 'employees.id = employee_polices.employee_id')
@@ -1665,4 +1986,48 @@ class EmpDataServiceController extends BaseController
         }
     }
 
+
+
+    public function readExcelFileToArray($path)
+    {
+
+        $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($path);
+        $sheet = $spreadsheet->getActiveSheet();
+
+        $highestRowAndColumn = $sheet->getHighestRowAndColumn();
+        $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
+
+        return $excel_data;
     }
+
+
+    public function removeOldExportInfoFromBatchFile($params){
+
+        $client_id = $params['client_id'];
+        $client_policy_id = $params['client_policy_id'];
+        $insurer_or_tpa = $params['insurer_or_tpa'];
+        $event_type = $params['event_type'];
+        $actions = $params['actions'];
+
+
+        $batch_data = $this->batchFileModel
+            ->where('client_id', $client_id)
+            ->where('client_policy_id', $client_policy_id)
+            ->where('insurer_or_tpa', $insurer_or_tpa)
+            ->where('event_type', $event_type)
+            ->where('actions', $actions)
+            ->first();
+
+            if(!empty($batch_data)){
+
+                $id = $batch_data['id'];
+                $batch_code = $batch_data['batch_code'];
+
+                $this->batchFileModel->where('id', $id)->delete();
+                $this->batchListModel->where('batch_code', $batch_code)->delete();
+
+            }
+
+
+    }
+}
diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index b1b33241..2409f694 100644
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -348,7 +348,7 @@ class EmployeeController extends AdminController
                
                 if($return == 0){
 
-                    session()->setFlashdata('error', "The insurer has an insufficient deposit amount.");
+                    session()->setFlashdata('error', "Insufficient deposit amount.");
                     return redirect()->to(base_url('employee/upload'));
                 } 
                 
@@ -396,12 +396,35 @@ class EmployeeController extends AdminController
         } else if ($actions == 'import') {
 
             $batch_data['file'] = $this->request->getFile('import_file_data');
+            
 
             if ($event_type == 'inception' || $event_type == 'addition' || $event_type == 'dependent_addition') {
 
-                $return = $empDataServiceController->importExcelDataForInception($batch_data);
+
+                $file = $this->request->getFile('import_file_data');
+
+                $is_moved = $file->move(WRITEPATH . 'uploads/import_excel');
+                $filename = $file->getName();
+                $this->myLogger->logme('error', 'Inception Import file name : {data}', ['data' => $filename]);
+        
+        
+                $random_number_count = 4;
+                $batch_data['batch_code'] = generate_random_string($random_number_count);
+                $batch_data['created_by'] = get_session_userid();
+                $batch_data['status'] = 'pending';
+                $batch_data['file_name'] = $filename;
+        
+                $file_id = $this->batchFileModel->insert($batch_data);
+
+                $job_details  = new Jobs();                             
+                $r = Jobs::addJob(['job_name' => 'importInceptionFileValidation','payload' => ['file_id' => $file_id]]);
+        
+                $return = 1;
+
+                // $return = $empDataServiceController->importExcelDataForInception($batch_data);
+
                 if ($return == 1) {
-                    session()->setFlashdata('success', 'Data updated successfully');
+                    session()->setFlashdata('success', 'Data updated successfully. File is being validated.');
                     return redirect()->to(base_url('employee/upload'));
                 } else if ($return == 2) {
                     session()->setFlashdata('error', 'The TPA ID column is either partially or entirely empty.');
@@ -418,6 +441,9 @@ class EmployeeController extends AdminController
                 } else if ($return == 5) {
                     session()->setFlashdata('error', 'The list of employees provided has already been updated with the UHID, or this is not the correct file');
                     return redirect()->to(base_url('employee/upload'));
+                } else if ($return == 6) {
+                    session()->setFlashdata('error', 'The Excel record count exceeds the DB record count.');
+                    return redirect()->to(base_url('employee/upload'));
                 }
             } else if ($event_type == 'correction') {
 
@@ -714,7 +740,8 @@ class EmployeeController extends AdminController
         if (!file_exists($filePath)) {
             $error_message = "File not found";
             $this->myLogger->logme('error', $error_message . ' for file id ' . $file_id);
-            return $error_message;
+            $data['message'] = 'Physical File Not Found';
+            return view('errors/404', $data);
         }
 
         // Load the Excel file
@@ -1037,4 +1064,81 @@ class EmployeeController extends AdminController
 
     }
 
+
+    public function errorListExportImport($file_id)
+    {
+
+        $empDataServiceController = new EmpDataServiceController();
+
+        $file = $this->batchFileModel->where('id', $file_id)->first();
+        $client_id = $file['client_id'];
+        $client_policy_id = $file['client_policy_id'];
+        $insurer_or_tpa = $file['insurer_or_tpa'];
+
+        $error_data = json_decode($file['error_data']);
+
+        $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name'];
+
+        if (!file_exists($file_name_with_path)) {
+            $error_message = "File not found";
+            $this->myLogger->logme('error', ($error_message . ' for file id ' . $file_id));
+            $data['message'] = 'Physical File Not Found';
+            return view('errors/404', $data);
+        }
+
+        $excel_data = $empDataServiceController->readExcelFileToArray($file_name_with_path);
+        $excelErrorData['excel_header'] = $excel_data[0];
+        unset($excel_data[0]);
+        array_pop($excel_data);
+
+
+        $finalArray = [];
+        foreach ($error_data as $key => $values) {
+
+            foreach ($values as $key2 => $value) {
+
+                $row = $value->row;
+                $column = $value->column;
+
+                if(property_exists($value, 'db_data')){
+
+                    $error = 'Expected value: ' . ($value->db_data == null ||  $value->db_data == "" ? 'NULL' : $value->db_data);
+
+                }else{
+
+                    if ($insurer_or_tpa == 'tpa') {
+
+                        $error = 'Expected value : TPA ID';
+
+                    } else if ($insurer_or_tpa == 'insurer') {
+        
+                        $error = 'Expected value : UHID';
+                    }
+
+                }
+                $data = ['value' => $excel_data[$row][$column], 'error' => $error,];
+                $excel_data[$row][$column] = $data;
+            }
+
+            array_push($finalArray, $excel_data[$key]);
+        }
+
+
+        foreach ($finalArray as $fkey => $value) {
+            foreach ($value as $vkey => $arrayData) {
+                if (!is_array($arrayData)) {
+                    $data = ['value' => $arrayData];
+                    $finalArray[$fkey][$vkey] =  $data;
+                }
+            }
+        }
+
+        $excelErrorData['excel_data'] = $finalArray;
+        $excelErrorData['file_id'] = $file_id;
+
+        // dd($finalArray);
+
+        echo view('export_import_error_list', $excelErrorData);
+    }
+
 }
diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php
index ffdc8372..085c2727 100644
--- a/app/Controllers/EmployeeServiceController.php
+++ b/app/Controllers/EmployeeServiceController.php
@@ -34,7 +34,7 @@ class EmployeeServiceController extends AdminController
     protected $policiesModel;
     protected $empEndorsementModel;
     protected $general_relationships = ['self' => ['name' => 'Self', 'gender' => 'M','age_min' => 18,'age_max' => null], 'spouse' => ['name' => 'Spouse', 'gender' => 'F','age_min' => 18,'age_max' => null], 'son' => ['name' => 'Son', 'gender' => 'M','age_min' => null,'age_max' => 25], 'daughter' => ['name' => 'Daughter', 'gender' => 'F','age_min' => null,'age_max' => 25], 'father' => ['name' => 'Father', 'gender' => 'M','age_min' => 18,'age_max' => null], 'mother' => ['name' => 'Mother', 'gender' => 'F','age_min' => 18,'age_max' => null], 'father-in-law' => ['name' => 'Father in Law', 'gender' => 'M','age_min' => 18,'age_max' => null], 'mother-in-law' => ['name' => 'Mother in Law', 'gender' => 'F','age_min' => 18,'age_max' => null]];
-    protected $inception_excel_columns = ['sno'=>['col_idx'=>0,'col_cell_name'=>'A','col_name'=>'S.No','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'emp_id'=>['col_idx'=>1,'col_cell_name'=>'B','col_name'=>'EMP ID','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'name_of_emp_dep'=>['col_idx'=>2,'col_cell_name'=>'C','col_name'=>'NAME OF EMP/DEP','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'dob'=>['col_idx'=>3,'col_cell_name'=>'D','col_name'=>'DOB','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'custom'=>'check_dob_diff','params'=>['row','relationship','default_age_ratio']],'gender'=>['col_idx'=>4,'col_cell_name'=>'E','col_name'=>'Gender','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>['M','F']],'relationship'=>['col_idx'=>5,'col_cell_name'=>'F','col_name'=>'RELATIONSHIP','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_relationship','params'=>['row','relationship','policy_terms']],'basic_cover_si'=>['col_idx'=>6,'col_cell_name'=>'G','col_name'=>'BASIC COVER SI','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom' => 'check_si','params' => ['row','policy_terms','slab_details']],'doc'=>['col_idx'=>7,'col_cell_name'=>'H','col_name'=>'Date of Coverage','is_mandatory'=>['A','DA'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'params'=>['row']],'doj'=>['col_idx'=>8,'col_cell_name'=>'I','col_name'=>'DOJ','is_mandatory'=>false,'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'custom'=>'check_doj','params'=>['row']],'basic_pay'=>['col_idx'=>9,'col_cell_name'=>'J','col_name'=>'Basic Pay','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_basic_pay','params'=>['row','policy_terms','slab_details']],'band_grade'=>['col_idx'=>10,'col_cell_name'=>'K','col_name'=>'Band/Grade','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_employee_band','params'=>['row','policy_terms','slab_details']],'designation'=>['col_idx'=>11,'col_cell_name'=>'L','col_name'=>'Designation','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null],'phone'=>['col_idx'=>12,'col_cell_name'=>'M','col_name'=>'Phone','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null],'email'=>['col_idx'=>13,'col_cell_name'=>'N','col_name'=>'Email','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null],'pre_existing_ailments'=>['col_idx'=>14,'col_cell_name'=>'O','col_name'=>'PRE EXISTING AILMENTS','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>['0','1']],'change_event'=>['col_idx'=>15,'col_cell_name'=>'P','col_name'=>'Change event','is_mandatory'=>['A','DA','D'],'data_type'=>'str','format'=>null,'allowed_values'=>null],'date_of_exit'=>['col_idx'=>16,'col_cell_name'=>'Q','col_name'=>'Date of exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null],'reason_for_exit'=>['col_idx'=>17,'col_cell_name'=>'R','col_name'=>'Reason for exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>null,'allowed_values'=>null]];
+    protected $inception_excel_columns = ['sno'=>['col_idx'=>0,'col_cell_name'=>'A','col_name'=>'S.No','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'emp_id'=>['col_idx'=>1,'col_cell_name'=>'B','col_name'=>'EMP ID','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'name_of_emp_dep'=>['col_idx'=>2,'col_cell_name'=>'C','col_name'=>'NAME OF EMP/DEP','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'dob'=>['col_idx'=>3,'col_cell_name'=>'D','col_name'=>'DOB','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'custom'=>'check_dob_diff','params'=>['row','relationship','default_age_ratio']],'gender'=>['col_idx'=>4,'col_cell_name'=>'E','col_name'=>'Gender','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>['M','F']],'relationship'=>['col_idx'=>5,'col_cell_name'=>'F','col_name'=>'RELATIONSHIP','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_relationship','params'=>['row','relationship','policy_terms']],'basic_cover_si'=>['col_idx'=>6,'col_cell_name'=>'G','col_name'=>'BASIC COVER SI','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom' => 'check_si','params' => ['row','policy_terms','slab_details']],'doc'=>['col_idx'=>7,'col_cell_name'=>'H','col_name'=>'Date of Coverage','is_mandatory'=>['A','DA'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'params'=>['row']],'doj'=>['col_idx'=>8,'col_cell_name'=>'I','col_name'=>'DOJ','is_mandatory'=>false,'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'custom'=>'check_doj','params'=>['row']],'basic_pay'=>['col_idx'=>9,'col_cell_name'=>'J','col_name'=>'Basic Pay','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_basic_pay','params'=>['row','policy_terms','slab_details']],'band_grade'=>['col_idx'=>10,'col_cell_name'=>'K','col_name'=>'Band/Grade','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_employee_band','params'=>['row','policy_terms','slab_details']],'designation'=>['col_idx'=>11,'col_cell_name'=>'L','col_name'=>'Designation','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null],'phone'=>['col_idx'=>12,'col_cell_name'=>'M','col_name'=>'Phone','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom' => 'check_dup_mobileno','params' => ['row','existing_mobilenos']],'email'=>['col_idx'=>13,'col_cell_name'=>'N','col_name'=>'Email','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null],'pre_existing_ailments'=>['col_idx'=>14,'col_cell_name'=>'O','col_name'=>'PRE EXISTING AILMENTS','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>['0','1']],'change_event'=>['col_idx'=>15,'col_cell_name'=>'P','col_name'=>'Change event','is_mandatory'=>['A','DA','D'],'data_type'=>'str','format'=>null,'allowed_values'=>null],'date_of_exit'=>['col_idx'=>16,'col_cell_name'=>'Q','col_name'=>'Date of exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null],'reason_for_exit'=>['col_idx'=>17,'col_cell_name'=>'R','col_name'=>'Reason for exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>null,'allowed_values'=>null]];
 
     protected $deletion_excel_columns = ['sno'=>['col_idx'=>0,'col_cell_name'=>'A','col_name'=>'S.No','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'emp_id'=>['col_idx'=>1,'col_cell_name'=>'B','col_name'=>'EMP ID','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'name_of_emp_dep'=>['col_idx'=>2,'col_cell_name'=>'C','col_name'=>'NAME OF EMP/DEP','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'change_event'=>['col_idx'=>3,'col_cell_name'=>'D','col_name'=>'Change event','is_mandatory'=>['D'],'data_type'=>'str','format'=>null,'allowed_values'=>null],'date_of_exit'=>['col_idx'=>4,'col_cell_name'=>'E','col_name'=>'Date of exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null],'reason_for_exit'=>['col_idx'=>5,'col_cell_name'=>'F','col_name'=>'Reason for exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>null,'allowed_values'=>null]];
 
@@ -154,6 +154,9 @@ class EmployeeServiceController extends AdminController
         //remove header
         unset($excel_data[0]);
         $relationship = $this->general_relationships;
+        //get exisiting mobilr nos
+        $existing_mobilenos = $this->employeePolicyModel->getExisitingMobileNos(client_policy_id: $file['policy_id']);
+        // dd($existing_mobilenos);
         foreach ($excel_data as $row_key => $row) 
         {
          
@@ -273,7 +276,7 @@ class EmployeeServiceController extends AdminController
                 {
                     //proceed next data level validation in JOB queue
                      $job_details  = new Jobs();
-                      $r = Jobs::addJob(['job_name' => 'excelFileDataValidation','payload' => ['file_id' => $file_id]]);
+                     $r = Jobs::addJob(['job_name' => 'excelFileDataValidation','payload' => ['file_id' => $file_id]]);
                      // $jobWorker = new JobWorker();
                      // JobWorker::processJob($r);
                 }       
@@ -471,7 +474,7 @@ class EmployeeServiceController extends AdminController
                         {
                             //proceed next data level validation in JOB queue
                              $job_details  = new Jobs();                             
-                            $r = Jobs::addJob(['job_name' => 'employeesOnboardPreprocess','payload' => ['file_id' => $file_id]]);
+                             $r = Jobs::addJob(['job_name' => 'employeesOnboardPreprocess','payload' => ['file_id' => $file_id]]);
                              // $jobWorker = new JobWorker();
                              // JobWorker::processJob($r);
                         }
@@ -607,7 +610,7 @@ class EmployeeServiceController extends AdminController
 
 
         // die();
-        return ($employee_data_group_by_family);
+        return (($employee_data_group_by_family));
 
     }
 
@@ -855,9 +858,10 @@ class EmployeeServiceController extends AdminController
                     $temp = $value['temp'];
                     unset($value['policy_details']);
                     unset($value['temp']);
-
+                        // Kint::dump($value);
+                        // Kint::dump($policy_data);
                     //start implemet of si enhancement of grid type 10,11
-                     if(count($employee) && (($file['action'] == 'dependent_addition' && in_array($value['temp']['source'],[10,11]) && ($slab_details['slab_rates'][0]['premium_type'] == 1 && strtolower($value['relationship']) == 'self') || ($slab_details['slab_rates'][0]['premium_type'] == 1 || $slab_details['slab_rates'][0]['premium_type'] == null))))
+                     if(count($employee) && (($file['action'] == 'dependent_addition' && in_array($value['temp']['source'],[10,11]) && ($slab_details['slab_rates'][0]['premium_type'] == 1 && strtolower($value['relationship']) == 'self') || ($slab_details['slab_rates'][0]['premium_type'] == 2 || $slab_details['slab_rates'][0]['premium_type'] == null))))
                     {
                        $res = $this->employeesSIEnhanceProcessWhileOnbboard(employee:$employee[0],policy_data: $policy_data,file:$file);// where employee holds existing emp data and policy_data holds new si enhancement
                        if(!$res)
@@ -928,8 +932,8 @@ class EmployeeServiceController extends AdminController
         $employee = $this->employeeModel->where('emp_code', $employee['emp_code'])->where('name',$employee['name'])->where('client_id',$employee['client_id'])->where('is_active',1)->first();
         
         $employee_policy = $this->employeePolicyModel->where('employee_id',$employee['id'])->where('client_policy_id',$file['policy_id'])->first();
-
-        $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($employee_policy['policy_id'],$employee['client_id']);
+            // dd($employee_policy);
+        $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($employee_policy['client_policy_id'],$employee['client_id']);
     
         //check si has changed in normal case OR check premium only changed, still treat as SI enhancement in grid type 10
         if($employee_policy['basic_cover_si'] != $policy_data['basic_cover_si'] || ($slab_details['grid_master']['ui_type'] == 10 && $policy_data['premimum'] != null && $policy_data['premimum'] != "" && $employee_policy['premimum'] != $policy_data['premimum']))
diff --git a/app/Controllers/JobWorker.php b/app/Controllers/JobWorker.php
index 89bfce4e..9ae90d51 100644
--- a/app/Controllers/JobWorker.php
+++ b/app/Controllers/JobWorker.php
@@ -14,7 +14,11 @@ class JobWorker extends AdminController
      * Constructs the class
      */
 
-    private  static $event_class_mapping = ['add' => ['type' => 'HC','handler' => 'App\\Helpers\\HttpRequestHelper'], 'sub' =>  ['type' => 'CC','handler' => 'App\\Controllers\\Jobs\SubJob'],'fancy_date_time_format' => [ 'type' => 'HF','handler' => 'fancy_date_time_format'],'addNumber' => ['type' => 'HC','handler' => 'App\\Model\\HttpRequestHelper'],'excelFileFormatValidation' => ['type' => 'CC','handler' => 'App\\Controllers\\EmployeeServiceController'],'excelFileDataValidation' => ['type' => 'CC','handler' => 'App\\Controllers\\EmployeeServiceController'],'employeesOnboardPreprocess' => ['type' => 'CC','handler' => 'App\\Controllers\\EmployeeServiceController'],'employeeDisembark' => ['type' => 'CC','handler' => 'App\\Controllers\\EmployeeServiceController'],'employeesSIEnhanceProcess' => ['type' => 'CC','handler' => 'App\\Controllers\\EmployeeServiceController'],'employeesCorrectionProcess' => ['type' => 'CC','handler' => 'App\\Controllers\\EmployeeServiceController'],'send_email' => ['type' => 'HC','handler' => 'App\\Helpers\\MailHelper'],'bulk_mail' => ['type' => 'HC','handler' => 'App\\Helpers\\MailHelper']];
+    private  static $event_class_mapping = [
+        'add' => ['type' => 'HC', 'handler' => 'App\\Helpers\\HttpRequestHelper'], 'sub' =>  ['type' => 'CC', 'handler' => 'App\\Controllers\\Jobs\SubJob'], 'fancy_date_time_format' => ['type' => 'HF', 'handler' => 'fancy_date_time_format'], 'addNumber' => ['type' => 'HC', 'handler' => 'App\\Model\\HttpRequestHelper'], 'excelFileFormatValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'excelFileDataValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesOnboardPreprocess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeeDisembark' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesSIEnhanceProcess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesCorrectionProcess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'send_email' => ['type' => 'HC', 'handler' => 'App\\Helpers\\MailHelper'], 'bulk_mail' => ['type' => 'HC', 'handler' => 'App\\Helpers\\MailHelper'], 'insertBatchList' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        'importInceptionFileValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        'importInceptionUpdateTPAandUHID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+    ];
     public function __construct()
     {
         // echo 'HiC';//die();
diff --git a/app/Controllers/PendingActionsController.php b/app/Controllers/PendingActionsController.php
new file mode 100644
index 00000000..9670dbba
--- /dev/null
+++ b/app/Controllers/PendingActionsController.php
@@ -0,0 +1,26 @@
+= $slab_value['max_si'] ? $slab_value['max_si'] : $familiy_si_covered);
 
                         $emp_data['policy_details']['basic_cover_si'] = $familiy_si_covered;
-                        $emp_data['policy_details']['date_coverage'] = (empty($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']);
+                        $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']);
                         $emp_data['policy_details']['policy_end_date'] = $policy_terms['policy_end_date'];
                         $emp_data['policy_details']['days'] = calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days;
                         $emp_data['policy_details']['premium'] = get_premium_for_si(slab_details: $slab_details,si_amount: $familiy_si_covered,band: $employee_received_band);
@@ -1015,7 +1015,7 @@ if (!function_exists('premium_calculation_manager'))
                     {
 
                         $emp_data['policy_details']['basic_cover_si'] = $employee_received_si;
-                        $emp_data['policy_details']['date_coverage'] = (empty($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']);
+                        $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']);
                         $emp_data['policy_details']['policy_end_date'] = $policy_terms['policy_end_date'];
                         $emp_data['policy_details']['days'] = calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days;
                         $emp_data['policy_details']['premium'] = $slab_value['premium'];
@@ -1040,7 +1040,7 @@ if (!function_exists('premium_calculation_manager'))
                     {
 
                         $emp_data['policy_details']['basic_cover_si'] = $employee_received_si;
-                        $emp_data['policy_details']['date_coverage'] = (empty($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']);
+                        $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']);
                         $emp_data['policy_details']['policy_end_date'] = $policy_terms['policy_end_date'];
                         $emp_data['policy_details']['days'] = calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days;
                         $emp_data['policy_details']['premium'] = $slab_value['premium'];
@@ -1281,4 +1281,20 @@ if(!function_exists('remap_default_age_ratio_into_relationship'))
 
         return $general_relationships;
     }
+}
+
+
+if(!function_exists('check_dup_mobileno'))
+{
+    function check_dup_mobileno(array $row,array $existing_mobilenos)
+    {
+        foreach($existing_mobilenos as $k => $value)
+        {
+            if ($row['12'] == $value['mobile']) {
+                 return array('status' => false,'error' => "Duplicate Mobile No");
+                // break;
+            }
+        }
+        return array('status' => true);
+    }
 }
\ No newline at end of file
diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php
index ef52cb07..5b5caf18 100644
--- a/app/Models/EmployeePolicyModel.php
+++ b/app/Models/EmployeePolicyModel.php
@@ -771,5 +771,22 @@ class EmployeePolicyModel extends Model
     }
     
 
+    public function getExisitingMobileNos(string $client_policy_id)
+    {
+        $result =  $this->select(['employee_polices.id','emp.id as emp_id','emp.relationship','emp.emp_code','emp.name','emp.email_corporate','emp.mobile as mobile'])
+                         ->join('employees emp', 'employee_polices.employee_id = emp.id') 
+                         ->join('client_policy cp', 'employee_polices.client_policy_id = cp.id')
+                         ->where('employee_polices.client_policy_id',$client_policy_id)
+                         ->whereIn('employee_polices.status', ['Active'])
+                         ->whereIn('emp.emp_status', ['Active'])
+                         ->where('emp.is_active', 1)
+                         ->where('emp.relationship', 'Self')
+                         ->where('emp.mobile is not null')
+                         ->where('employee_polices.is_active', 1)
+                         ->findAll();        
+         
+         return ($result);
+    }
+
 
 }
\ No newline at end of file
diff --git a/app/Views/batch_list.php b/app/Views/batch_list.php
index fd853354..c08961b8 100644
--- a/app/Views/batch_list.php
+++ b/app/Views/batch_list.php
@@ -1,7 +1,7 @@
 
 
 
@@ -27,29 +27,51 @@ Action Count Amount + status - $file) { + $file) { ?> - - - - 5 ? substr($file['file_name'], 0, 10) . "..." : $file['file_name'] ?> - - - - - - - - - + + + + 5 ? substr($file['file_name'], 0, 10) . "..." : $file['file_name'] ?> + + + + + + + + + + + + + + + + + failed + + failed + + failed + + failed + + + + + + + @@ -59,31 +81,31 @@
\ No newline at end of file diff --git a/app/Views/export_import_error_list.php b/app/Views/export_import_error_list.php new file mode 100644 index 00000000..af4601a9 --- /dev/null +++ b/app/Views/export_import_error_list.php @@ -0,0 +1,134 @@ +/assets/images/Nhance_Favi.svg"> +Excel Error Report + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
> + '; + echo '' . $data['error'] . ''; + } + ?> +
+
+ + + + + + + + + + + + + + diff --git a/app/Views/policy_gmc_terms.php b/app/Views/policy_gmc_terms.php index ed845c89..757a9a1d 100644 --- a/app/Views/policy_gmc_terms.php +++ b/app/Views/policy_gmc_terms.php @@ -136,14 +136,14 @@ Self: -
Min Age:
-
Max Age:
+
Min Age:
+
Max Age:
Spouse: -
Min Age:
-
Max Age:
+
Min Age:
+
Max Age:
Children: @@ -155,8 +155,8 @@ -
Min Age:
-
Max Age:
+
Min Age:
+
Max Age:
@@ -184,9 +184,9 @@ - - - + + + diff --git a/app/Views/policy_gpa_terms.php b/app/Views/policy_gpa_terms.php index d126c6c8..99275624 100644 --- a/app/Views/policy_gpa_terms.php +++ b/app/Views/policy_gpa_terms.php @@ -132,13 +132,13 @@ diff --git a/tests/unit/CheckDefaultAgeRatioTest.php b/tests/unit/CheckDefaultAgeRatioTest.php new file mode 100644 index 00000000..b32fac32 --- /dev/null +++ b/tests/unit/CheckDefaultAgeRatioTest.php @@ -0,0 +1,43 @@ + ['name' => 'Self', 'gender' => 'M', 'age_min' => 18, 'age_max' => null], + 'spouse' => ['name' => 'Spouse', 'gender' => 'F', 'age_min' => 18, 'age_max' => null], + 'son' => ['name' => 'Son', 'gender' => 'M', 'age_min' => null, 'age_max' => 25], + 'daughter' => ['name' => 'Daughter', 'gender' => 'F', 'age_min' => null, 'age_max' => 25], + 'father' => ['name' => 'Father', 'gender' => 'M', 'age_min' => 18, 'age_max' => null], + 'mother' => ['name' => 'Mother', 'gender' => 'F', 'age_min' => 18, 'age_max' => null], + 'father-in-law' => ['name' => 'Father in Law', 'gender' => 'M', 'age_min' => 18, 'age_max' => null], + 'mother-in-law' => ['name' => 'Mother in Law', 'gender' => 'F', 'age_min' => 18, 'age_max' => null] + ]; + + $default_age_ratio = [ + "self" => ["min" => 0, "max" => 55], + "spouse" => ["min" => 0, "max" => 18], + "child" => ["min" => 0, "max" => 18], + "elders" => ["min" => 18, "max" => 53] + ]; + + $employee_data = [1, 'EMPID001','John Doe', '01-Apr-1970', 'male', 'father-in-law','current_action' => 'I']; + $res = check_dob_diff($employee_data,$general_relationships,$default_age_ratio); + Kint::dump($res); + $this->assertTrue(!$res['status']); + } +} \ No newline at end of file
Elders Count:
Min Age:
Min Age:
Elders Count:
Min Age:
Min Age:
Min Age: - +
Max Age: - +