diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index 0864c3c2..0ade2eb7 100755 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -1457,17 +1457,17 @@ class EmployeeServiceController extends AdminController // } } - // if ($employee_insert_count > 0) { - // $this->fileModel->where('id', $file_id)->set(['status' => 'success', 'reason' => ''])->update(); - // $this->myLogger->logme("error", '{file_id} uploaded success', ['file_id' => $file_id]); - // } else { - // $reason = json_encode([ - // 'error_summary' => [5 => 1], - // 'error_data' => "Rack rate configuration issue: Please check the slab rates configuration" - // ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); - // $this->fileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => $reason])->update(); - // $this->myLogger->logme("error", '{file_id} uploaded failed with reason: Rack rate configuration issue: Please check the slab rates configuration', ['file_id' => $file_id]); - // } + if ($employee_insert_count > 0) { + $this->fileModel->where('id', $file_id)->set(['status' => 'success', 'reason' => ''])->update(); + $this->myLogger->logme("error", '{file_id} uploaded success', ['file_id' => $file_id]); + } else { + $reason = json_encode([ + 'error_summary' => [5 => 1], + 'error_data' => "Rack rate configuration issue: Please check the slab rates configuration" + ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); + $this->fileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => $reason])->update(); + $this->myLogger->logme("error", '{file_id} uploaded failed with reason: Rack rate configuration issue: Please check the slab rates configuration', ['file_id' => $file_id]); + } // $this->setPullNotification($this->getFileMetaDataByFileId($file_id, 'success')); } else if (isset($params['client_policy_id'])) //handle data from enrollment to inception diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 9384b60d..b03b6505 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -2126,6 +2126,7 @@ class LeadsController extends BaseController $data = $this->convertJsonForQCR($data, $type); } // dd($data); + $lead_data = []; if ($rfq_data['lead_type'] == 1) { if (in_array($rfq_data['policy_type_id'], [2, 3, 4, 5])) { @@ -2152,6 +2153,12 @@ class LeadsController extends BaseController // 'TPA' => $rfq_data['tpa_name'] ?? " - ", 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "", ]; + }else { + + $lead_data = [ + 'Insured' => $rfq_data['client_name'], + 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "" + ]; } } else { @@ -2239,6 +2246,11 @@ class LeadsController extends BaseController // 'TPA' => $rfq_data['tpa_name'] ?? " - ", // 'Total Lives at Inception' => $rfq_data['total_lives_at_incept'], ]; + } else { + $lead_data = [ + 'Insured' => $rfq_data['client_name'], + 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "" + ]; } } // print_r($lead_data); die; @@ -2274,39 +2286,43 @@ class LeadsController extends BaseController $maxWidthA = 0; $maxWidthB = 0; - foreach ($lead_data as $key => $value) { + // dd($lead_data); - // Merge A:B for key and C:D for value - $mergeRangeKey = "A{$rowNumber}:B{$rowNumber}"; - // $mergeRangeValue = "C{$rowNumber}"; - $sheet->mergeCells($mergeRangeKey); - // $sheet->mergeCells($mergeRangeValue); + if(! empty($lead_data)) { + foreach ($lead_data as $key => $value) { - // Set values in merged cells - $sheet->setCellValue("A{$rowNumber}", $key); - $sheet->setCellValue("C{$rowNumber}", $value); + // Merge A:B for key and C:D for value + $mergeRangeKey = "A{$rowNumber}:B{$rowNumber}"; + // $mergeRangeValue = "C{$rowNumber}"; + $sheet->mergeCells($mergeRangeKey); + // $sheet->mergeCells($mergeRangeValue); - // // Apply styles for alignment and bold text in A:B - // $sheet->getStyle($mergeRangeKey)->applyFromArray([ - // 'font' => ['bold' => true], - // 'alignment' => [ - // 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, - // 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, - // ], - // ]); + // Set values in merged cells + $sheet->setCellValue("A{$rowNumber}", $key); + $sheet->setCellValue("C{$rowNumber}", $value); - // Apply bold style to B column if the key is "Insured" - if ($key == "Insured") { - $sheet->getStyle("C{$rowNumber}")->applyFromArray([ - 'font' => ['bold' => true], - ]); + // // Apply styles for alignment and bold text in A:B + // $sheet->getStyle($mergeRangeKey)->applyFromArray([ + // 'font' => ['bold' => true], + // 'alignment' => [ + // 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + // 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, + // ], + // ]); + + // Apply bold style to B column if the key is "Insured" + if ($key == "Insured") { + $sheet->getStyle("C{$rowNumber}")->applyFromArray([ + 'font' => ['bold' => true], + ]); + } + + // Track max width needed for columns + $maxWidthA = max($maxWidthA, mb_strlen($key)); + $maxWidthB = max($maxWidthB, mb_strlen($value)); + + $rowNumber++; } - - // Track max width needed for columns - $maxWidthA = max($maxWidthA, mb_strlen($key)); - $maxWidthB = max($maxWidthB, mb_strlen($value)); - - $rowNumber++; } // Set column width based on max content length (adjusted for padding) @@ -5393,31 +5409,32 @@ class LeadsController extends BaseController $this->myLogger->logme('error', "QCR Sheet: copied from RFQ sheet | lead_id={$leadId}, rfq_sheet_id={$rfqSheetId}, new_sheet_id={$newSheetId}"); // Apply permissions: sales team as editors - $salesTeam = $this->userModel - ->select('user_profiles.email') - ->join('user_teams', 'user_profiles.id = user_teams.user_id') - ->where('user_teams.team_id', 5) - ->where('user_teams.is_active', 1) - ->where('user_profiles.is_active', 1) - ->findAll(); - $editorEmails = array_values(array_filter(array_unique(array_column($salesTeam, 'email')))); + // $salesTeam = $this->userModel + // ->select('user_profiles.email') + // ->join('user_teams', 'user_profiles.id = user_teams.user_id') + // ->where('user_teams.team_id', 5) + // ->where('user_teams.is_active', 1) + // ->where('user_profiles.is_active', 1) + // ->findAll(); + // $editorEmails = array_values(array_filter(array_unique(array_column($salesTeam, 'email')))); // Decode rfq_qcr_viewers from lead and add as viewers - $viewerEmails = []; + $editorEmails = []; if (! empty($lead['rfq_qcr_viewers'])) { $decoded = json_decode($lead['rfq_qcr_viewers'], true); if (is_array($decoded)) { - $viewerEmails = array_values(array_filter(array_unique($decoded))); + $editorEmails = array_values(array_filter(array_unique($decoded))); } } - if (! empty($editorEmails) || ! empty($viewerEmails)) { + // !dd($editorEmails); + if (! empty($editorEmails)) { try { $sheetLib->applyPermissions($newSheetId, [ 'editors' => $editorEmails, - 'viewers' => $viewerEmails, + // 'viewers' => $viewerEmails, ]); - $this->myLogger->logme('error', "QCR Sheet: permissions applied | sheet_id={$newSheetId}, editors=" . count($editorEmails) . ", viewers=" . count($viewerEmails)); + $this->myLogger->logme('error', "QCR Sheet: permissions applied | sheet_id={$newSheetId}, editors=" . count($editorEmails)); } catch (\Throwable $e) { $this->myLogger->logme('error', "QCR Sheet: failed to apply permissions | sheet_id={$newSheetId}, error=" . $e->getMessage()); } @@ -5634,30 +5651,30 @@ class LeadsController extends BaseController $this->myLogger->logme('error', "Placement Sheet: copied from QCR | lead_id={$leadId}, qcr_sheet_id={$qcrSheetId}, placement_sheet_id={$placementSheetId}"); // Apply same permissions as QCR (editors: sales team, viewers: rfq_qcr_viewers) - $salesTeam = $this->userModel - ->select('user_profiles.email') - ->join('user_teams', 'user_profiles.id = user_teams.user_id') - ->where('user_teams.team_id', 5) - ->where('user_teams.is_active', 1) - ->where('user_profiles.is_active', 1) - ->findAll(); - $editorEmails = array_values(array_filter(array_unique(array_column($salesTeam, 'email')))); + // $salesTeam = $this->userModel + // ->select('user_profiles.email') + // ->join('user_teams', 'user_profiles.id = user_teams.user_id') + // ->where('user_teams.team_id', 5) + // ->where('user_teams.is_active', 1) + // ->where('user_profiles.is_active', 1) + // ->findAll(); + // $editorEmails = array_values(array_filter(array_unique(array_column($salesTeam, 'email')))); - $viewerEmails = []; + $editorEmails = []; if (! empty($lead_data['rfq_qcr_viewers'])) { $decoded = json_decode($lead_data['rfq_qcr_viewers'], true); if (is_array($decoded)) { - $viewerEmails = array_values(array_filter(array_unique($decoded))); + $editorEmails = array_values(array_filter(array_unique($decoded))); } } - if (! empty($editorEmails) || ! empty($viewerEmails)) { + if (! empty($editorEmails) ) { try { $sheetLib->applyPermissions($placementSheetId, [ 'editors' => $editorEmails, - 'viewers' => $viewerEmails, + // 'viewers' => $viewerEmails, ]); - $this->myLogger->logme('error', "Placement Sheet: permissions applied | sheet_id={$placementSheetId}, editors=" . count($editorEmails) . ", viewers=" . count($viewerEmails)); + $this->myLogger->logme('error', "Placement Sheet: permissions applied | sheet_id={$placementSheetId}, editors=" . count($editorEmails)); } catch (\Throwable $e) { $this->myLogger->logme('error', "Placement Sheet: failed to apply permissions | sheet_id={$placementSheetId}, error=" . $e->getMessage()); } diff --git a/app/Controllers/SalesController.php b/app/Controllers/SalesController.php index 32284322..d42bea40 100644 --- a/app/Controllers/SalesController.php +++ b/app/Controllers/SalesController.php @@ -537,13 +537,21 @@ class SalesController extends BaseController $value = trim($this->request->getGet('value') ?? ''); $exclude_id = $this->request->getGet('exclude_id'); - // ── Whitelist ───────────────────────────────────────────── + // ── Whitelist (table → model, pk, allowed fields) ───────── $allowed = [ - 'clients' => ['model' => $this->clientModel, 'pk' => 'id'], + 'clients' => [ + 'model' => $this->clientModel, + 'pk' => 'id', + 'fields' => ['short_name', 'client_name'], + ], + 'sales_actual_leads' => [ + 'model' => $this->leadModel, + 'pk' => 'lead_id', + 'fields' => ['company_name'], + ], ]; - // ── Allowed fields per table ────────────────────────────── - if (!array_key_exists($table, $allowed) || !in_array($field, ['short_name', 'client_name'])) { + if (! isset($allowed[$table]) || ! in_array($field, $allowed[$table]['fields'], true)) { return $this->response ->setStatusCode(400) ->setContentType('application/json') diff --git a/app/Models/SalesActualLeadModel.php b/app/Models/SalesActualLeadModel.php index 55ee787a..d52fcd23 100644 --- a/app/Models/SalesActualLeadModel.php +++ b/app/Models/SalesActualLeadModel.php @@ -50,7 +50,7 @@ class SalesActualLeadModel extends Model 'company_name' => [ 'required' => 'Company Name is Missing', // 'alpha_space' => 'Company Name must contain only letters and spaces', - 'regex_match' => 'Company Name can only contain letters, numbers, spaces, hyphens and underscores.', + 'regex_match' => 'Company Name can only contain letters, numbers.', 'min_length' => 'Company Name must be at least 2 characters long', 'max_length' => 'Company Name must be at most 255 characters long' ], diff --git a/dev_logs/non_eb_claim_api.md b/non_eb_claim_api.md similarity index 100% rename from dev_logs/non_eb_claim_api.md rename to non_eb_claim_api.md diff --git a/dev_logs/2026-04-01.md b/public/dev_logs/2026-04-01.md similarity index 100% rename from dev_logs/2026-04-01.md rename to public/dev_logs/2026-04-01.md diff --git a/dev_logs/2026-04-06_inception_form_live_validation_plan.md b/public/dev_logs/2026-04-06_inception_form_live_validation_plan.md similarity index 100% rename from dev_logs/2026-04-06_inception_form_live_validation_plan.md rename to public/dev_logs/2026-04-06_inception_form_live_validation_plan.md