diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 12f9ed38..fd5ab968 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -6802,67 +6802,79 @@ class LeadsController extends BaseController public function handleMemberDataGPATotalSumInsurerFromExcel($params) { - $lead_id = $params['lead_id']; - $lead_data = $this->leadsModel->find((int) $lead_id); - // dd($lead_data); - $file_name_with_path = WRITEPATH . "/uploads/lead_files/" . $lead_data['file_name']; - // dd($file_name_with_path); + try { + $lead_id = $params['lead_id']; + $lead_data = $this->leadsModel->find((int) $lead_id); - if (! $lead_data) { - return ['status' => 'failed', 'message' => 'Opportunity data not found']; - } - - if ($lead_data['file_name']) { - - //check physical file - if (! file_exists($file_name_with_path)) { - - $message = "Lead Physcial file not found"; - $this->myLogger->logme('error', ($message . ' for file ' . $file_name_with_path)); - return ['status' => 'failed', 'message' => 'no physical file']; + if (! $lead_data) { + return ['status' => 'failed', 'message' => 'Opportunity data not found']; } - $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + $file_name_with_path = WRITEPATH . "/uploads/lead_files/" . $lead_data['file_name']; - //get members data - $members_sheet = $spreadsheet->getSheet(0); - $highestRowAndColumn = $members_sheet->getHighestRowAndColumn(); - // dd($highestRowAndColumn); + if ($lead_data['file_name']) { - $uncleaned_members = $members_sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); - // dd($uncleaned_members); + //check physical file + if (! file_exists($file_name_with_path)) { - $members = ExcelSanitizeHelper::sanitizeArrayData($uncleaned_members); - // dd($members); - - // Check column headings - $members_heading = $members[0]; - $available_col = []; - - $lower_headers = array_map('strtolower', $members_heading); - foreach ($lower_headers as $index => $header) { - if (preg_match('/^(sa\s*-\s*option|proposed\s+sum\s+insured)\s+\d+$/i', $header)) { - $column_name = $members_heading[$index]; - $sum = 0; - - for ($i = 1; $i < count($members); $i++) { - $cell_raw = $members[$i][$index] ?? ''; - $cell_clean = preg_replace('/[^0-9.\-]/', '', $cell_raw); // remove non-numeric chars - - if ($cell_clean !== '' && is_numeric($cell_clean)) { - $sum += (float) $cell_clean; - } - } - - $available_col[] = $sum; + $message = "Lead Physcial file not found"; + $this->myLogger->logme('error', ($message . ' for file ' . $file_name_with_path)); + return ['status' => 'failed', 'message' => 'no physical file']; } + + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + + //get members data + $members_sheet = $spreadsheet->getSheet(0); + $highestRowAndColumn = $members_sheet->getHighestRowAndColumn(); + + // Read raw values and skip formula evaluation to avoid Calculation exceptions from malformed formulas. + $uncleaned_members = $members_sheet->rangeToArray( + 'A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row'], + null, + false, + true, + false + ); + + $members = ExcelSanitizeHelper::sanitizeArrayData($uncleaned_members); + + // Check column headings + $members_heading = $members[0]; + $available_col = []; + + $lower_headers = array_map('strtolower', $members_heading); + foreach ($lower_headers as $index => $header) { + if (preg_match('/^(sa\s*-\s*option|proposed\s+sum\s+insured)\s+\d+$/i', $header)) { + $sum = 0; + + for ($i = 1; $i < count($members); $i++) { + $cell_raw = $members[$i][$index] ?? ''; + $cell_clean = preg_replace('/[^0-9.\-]/', '', $cell_raw); // remove non-numeric chars + + if ($cell_clean !== '' && is_numeric($cell_clean)) { + $sum += (float) $cell_clean; + } + } + + $available_col[] = $sum; + } + } + + return $available_col; } - // dd($available_col); - return $available_col; - } + return []; + } catch (\Throwable $e) { + log_message('error', 'Exception in handleMemberDataGPATotalSumInsurerFromExcel: {message}', [ + 'message' => $e->getMessage(), + ]); + log_message('error', 'Trace: {trace}', [ + 'trace' => $e->getTraceAsString(), + ]); - return []; + return []; + } } public function generateDemographyDataTable($param = [])