diff --git a/README.md b/README.md index 8c8c98a2..b56458c2 100755 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ From command propmt run the following cmds Run speeific method -`>php vendor/bin/phpunit tests\unit\PremiumCalculationTest.php --filter testPremiumCalculationWithPrimaryRackRateAndAdditionalRackRate` +`php vendor/bin/phpunit tests\unit\PremiumCalculationTest.php --filter testPremiumCalculationWithPrimaryRackRateAndAdditionalRackRate` diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index 5742b0dd..46d46589 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -223,6 +223,10 @@ class EmployeeRestController extends AdminController { try { $data = $this->request->getJSON(); + + $openForEnrollment = $this->findThePolicyIsOpenForEnrollment($data[0]->client_policy_id); + if($openForEnrollment == false){ return $this->respond(['status' => 'failed','code' => 404,'data' => 'Enrollment closed'], 404); } + if ($data) { $Count = 0; @@ -505,6 +509,10 @@ class EmployeeRestController extends AdminController try { $requestData = $this->request->getJSON(); + + $openForEnrollment = $this->findThePolicyIsOpenForEnrollment($requestData[0]->client_policy_id); + if($openForEnrollment == false){ return $this->respond(['status' => 'failed','code' => 404,'data' => 'Enrollment closed'], 404); } + foreach ($requestData as $key => $value) { @@ -1996,6 +2004,7 @@ class EmployeeRestController extends AdminController { $postData = json_decode($this->request->getBody(), true); + $this->myLogger->logme("error", $this->request->getBody()); $client_policy_id = $postData['client_policy_id']; sort($client_policy_id); @@ -2003,7 +2012,7 @@ class EmployeeRestController extends AdminController $client_id = $postData['client_id']; $empData = $this->employeeModel->where('emp_code', $emp_code )->where('client_id', $client_id ) ->where('is_active', 1 )->findAll(); - + $employeeIds = array_column($empData, 'id'); //for mail common parameter $filteredEmpData = array_filter($empData, fn($item) => $item['relationship'] === 'Self'); @@ -2015,39 +2024,56 @@ class EmployeeRestController extends AdminController $policy = $this->clientPolicyModel->where('id',$value)->where('open_for_enrollment',1)->find(); if($policy) { - foreach ($empData as $empDataKey => $empDataValue) + $this->myLogger->logme("error", 'client policy id = '.$value.' is open for enrollment'); + + $empPolicyData = $this->employeePolicyModel->where('client_policy_id', $value ) + ->where('is_active', 1 ) + ->whereIn('employee_id',$employeeIds) + ->findAll(); + if(count($empPolicyData)) { + + $empIdsFromPolicyData = array_column($empPolicyData, 'employee_id'); + //update emp polict table $this->employeePolicyModel->where('client_policy_id', $value ) ->where('is_active', 1 ) - ->where('employee_id', $empDataValue['id'] ) - ->where('status', 'draft' ) + ->whereIn('employee_id', $empIdsFromPolicyData ) + ->groupStart() + ->where('status', 'draft') + ->orWhere('status', 'enrolled') + ->groupEnd() ->set(array('status'=>'enrolled')) ->update(); + //update Employee table + $this->employeeModel->where('emp_code', $emp_code) + ->whereIn('id', $empIdsFromPolicyData) + ->where('client_id', $client_id) + ->where('is_active', 1) + ->groupStart() + ->where('emp_status', 'draft') + ->orWhere('emp_status', 'enrolled') + ->groupEnd() + ->set(['emp_status' => 'enrolled']) + ->update(); + } - + $find = $this->employeeModel->getEmpFamilybyEmpCode(client_policy_id: $value,emp_code: $emp_code,client_id: $client_id,emp_status:['draft','enrolled'],policy_status:['draft','enrolled']); if(count($find) > 0){ $array_list[] = $find; } - } + }else { $this->myLogger->logme("error", 'client policy id = '.$value.' is not open for enrollment');} } - //update Employee table - $this->employeeModel->where('emp_code', $emp_code)->where('client_id', $client_id)->where('is_active', 1) - ->groupStart() - ->where('emp_status', 'draft') - ->orWhere('emp_status', 'enrolled') - ->groupEnd() - ->set(['emp_status' => 'enrolled']) - ->update(); + $notification = $this->notificationModel->where('client_id' ,$client_id)->where('template_name', 'member_review_and_summary_mail')->first(); - if (isset($notification) && $notification['enabled'] == 1) { + if (isset($notification) && $notification['enabled'] == 1 && count($array_list)) { $params ['array_list'] = $array_list; $params ['client_policy_id'] = $client_policy_id; $params ['emp_code'] = $emp_code; @@ -2328,7 +2354,8 @@ class EmployeeRestController extends AdminController { try { - $clientPolicy = $this->clientPolicyModel->where('id',$this->request->getGet('client_policy_id'))->findAll(); + $clientPolicy = $this->clientPolicyModel->where('id',$this->request->getGet('client_policy_id')) + ->where('open_for_enrollment',1)->findAll(); if(count($clientPolicy)) { @@ -2990,6 +3017,19 @@ class EmployeeRestController extends AdminController return false; } } + + + public function findThePolicyIsOpenForEnrollment($plicy_id) + { + + $policy = $this->clientPolicyModel->where('id',$plicy_id)->where('open_for_enrollment',1)->find(); + + if($policy) + return true; + else + return false; + + } diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index e1f58ee2..d5e6d6f7 100755 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -236,7 +236,9 @@ class EmployeeServiceController extends AdminController 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, - 'allowed_values' => null + 'allowed_values' => null, + 'custom' => 'check_dup_email', + 'params' => ['row', 'existing_mobilenos'] ], 'pre_existing_ailments' => [ 'col_idx' => 14, diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index dd23b93f..c2b8f2bf 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -90,6 +90,11 @@ class LeadsController extends BaseController public function viewLeadsList() { + + // $d = $this->constructExcelToSaveTemp(24, 1, $propsal_and_insurer = null); + // $d = $this->calculateMembersDemography(['lead_id' => 34]); + //$this->mergeQuoteExcelFileWithMembersListExcelFile(24, 1, $propsal_and_insurer = null); + // dd($d); $data['page_name'] = 'Leads'; // Set basic data @@ -477,7 +482,7 @@ class LeadsController extends BaseController //FOR EXCEL public function exportExcelForQCRandRFQ($lead_id, $type) { - $filepath = $this->constructExcelToSaveTemp($lead_id, $type); + //$filepath = $this->constructExcelToSaveTemp($lead_id, $type); $filepath = $filepath['filePath']; if (file_exists($filepath)) { @@ -711,6 +716,85 @@ class LeadsController extends BaseController 'fileName' => $filename, ]; } + + //Merge RFQ/QCR file with lead members file + public function mergeQuoteExcelFileWithMembersListExcelFile($lead_id, $type, $source_file_path) + { + $rfq_data = $this->RFQModel->getRFQTableDataWithLeadIDAndType($lead_id, $type); + + if($source_file_path && $rfq_data['file_name']) + { + + } + + return true; + } + + public function calculateMembersDemography($params) + { + $lead_id = $params['lead_id']; + $lead_data = $this->leadsModel->find($lead_id); + // print_rr($lead_data); + if($lead_data['file_name']) + { + $file_name_with_path = WRITEPATH."/uploads/lead_files/".$lead_data['file_name']; + + //check physical file + if(!file_exists($file_name_with_path)) + { + //file not found update status and reason + $message = "Lead Physcial file not found"; + // echo $message; + $this->myLogger->logme('error',($message . ' for file ' . $file_name_with_path)); + return ['status' => 'failed','message' => 'no physcial file']; + } + + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + + //get members data + $members_sheet = $spreadsheet->getSheet(0); + $highestRowAndColumn = $members_sheet->getHighestRowAndColumn(); + // dd($highestRowAndColumn); + $members = $members_sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + // dd($members); + + //get age band data + $age_band_sheet = $spreadsheet->getSheet(1); + $highestRowAndColumn = $age_band_sheet->getHighestRowAndColumn(); + $age_band_data = $age_band_sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + print_r($age_band_data); + + //check age or dob column + $members_heading = $members[0]; + Kint::dump($members_heading); + $available_col = null; + $col_index = null; + + if (in_array('age', array_map('strtolower',$members_heading))) { + $available_col = 'age'; + $col_index = array_search('age',array_map('strtolower',$members_heading)); + } elseif (in_array('dob', array_map('strtolower', $members_heading))) { + $available_col = 'dob'; + $col_index = array_search('dob', array_map('strtolower', $members_heading)); + } + + if ($available_col == null) { + $message = 'No DOB or Age column '; + $this->myLogger->logme('error',($message . $file_name_with_path)); + return ['status' => 'failed','message' => $message]; + } + + //convert age slab data into array + + } + else + { + $this->myLogger->logme('error',(' no file found ' . $file_name_with_path)); + return ['status' => 'failed','message' => 'no file found']; + } + + } + //this funciton for send mail to insurer and client with either RFQ/QCR public function sendMailWithAttachement() diff --git a/app/Helpers/ExcelMergeHelper.php b/app/Helpers/ExcelMergeHelper.php new file mode 100644 index 00000000..06f68c66 --- /dev/null +++ b/app/Helpers/ExcelMergeHelper.php @@ -0,0 +1,93 @@ + $sheetsToMerge) { + // Load the current file + $currentSpreadsheet = IOFactory::load($filePath); + + // Debugging: Log the number of sheets in the current file + error_log("File: $filePath has " . $currentSpreadsheet->getSheetCount() . " sheets."); + + // If this is the first file, initialize the base spreadsheet + if ($spreadsheet === null) { + $spreadsheet = $currentSpreadsheet; + + // If specific sheets are provided for the first file, remove the others + if (!is_null($sheetsToMerge) && !empty($sheetsToMerge)) { + $sheetCount = $spreadsheet->getSheetCount(); + for ($i = $sheetCount - 1; $i >= 0; $i--) { + if (!in_array($i, $sheetsToMerge)) { + $spreadsheet->removeSheetByIndex($i); + } + } + } + } else { + // If we are not working with the first file, we need to merge specified sheets + if (is_null($sheetsToMerge) || empty($sheetsToMerge)) { + // If no specific sheets, merge all sheets + $sheetsToMerge = range(0, $currentSpreadsheet->getSheetCount() - 1); + } + + // Merge the specified sheets from the current file + foreach ($sheetsToMerge as $sheetIndex) { + // Check if sheet index is within bounds + if ($sheetIndex < 0 || $sheetIndex >= $currentSpreadsheet->getSheetCount()) { + throw new Exception("Invalid sheet index $sheetIndex in file $filePath"); + } + + // Retrieve the sheet to copy + $sheetToCopy = $currentSpreadsheet->getSheet($sheetIndex); + + // Handle sheet name collision by renaming the sheet with a counter + $baseName = $sheetToCopy->getTitle(); + $sheetName = $baseName; + $counter = 1; + while ($spreadsheet->sheetNameExists($sheetName)) { + $sheetName = $baseName . '_merged_' . $counter; + $counter++; + } + $sheetToCopy->setTitle($sheetName); + + // Clone and add the sheet to the base spreadsheet + $spreadsheet->addSheet(clone $sheetToCopy); + } + } + } + + // Save the merged file + $writer = new Xlsx($spreadsheet); + $writer->save($outputPath); + + return true; // Return true if merge was successful + } catch (Exception $e) { + // Log the error (optional) and return false on failure + error_log("Excel Merge Error: " . $e->getMessage()); + return false; + } + } +} diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php index 76cf51a3..d1fdf7d2 100755 --- a/app/Helpers/excel_util_helper.php +++ b/app/Helpers/excel_util_helper.php @@ -1726,6 +1726,21 @@ if(!function_exists('check_dup_mobileno')) } } +if(!function_exists('check_dup_email')) +{ + function check_dup_email(array $row,array $existing_mobilenos) + { + foreach($existing_mobilenos as $k => $value) + { + if ($row['13'] == $value['email_corporate']) { + return array('status' => false,'error' => "Duplicate Email"); + // break; + } + } + return array('status' => true); + } +} + if(!function_exists('generate_family_relationship_array')) { function generate_family_relationship_array($family_structure_from_policy_terms) { diff --git a/app/Helpers/sendMailNotification.php b/app/Helpers/sendMailNotification.php index 3ac48a4d..2615b1fc 100755 --- a/app/Helpers/sendMailNotification.php +++ b/app/Helpers/sendMailNotification.php @@ -327,7 +327,7 @@ class sendMailNotification // dd($payable_employee_array); // dd(count($payable_employee_array['emp_data'])); - if(count($payable_employee_array['emp_data']) > 0){ + if(isset($payable_employee_array['emp_data']) && count($payable_employee_array['emp_data']) > 0){ $table_content .= '