From 69d343a744d2351f3cafcee18986ad271363a90a Mon Sep 17 00:00:00 2001 From: velz Date: Thu, 9 Oct 2025 15:00:03 +0530 Subject: [PATCH] FIX_CHATBOT_ECARD_MENU --- .../Chatbot/EcardDownloadConversation.php | 70 ++++++++++++++++--- .../Chatbot/MainMenuConversation.php | 2 +- .../Chatbot/NetworkHospitalConversation.php | 54 +++++++++++++- app/Helpers/ChatbotHelper.php | 2 +- app/Models/EmployeeModel.php | 7 +- 5 files changed, 119 insertions(+), 16 deletions(-) diff --git a/app/Controllers/Chatbot/EcardDownloadConversation.php b/app/Controllers/Chatbot/EcardDownloadConversation.php index a0a644a0..d0b0f08d 100644 --- a/app/Controllers/Chatbot/EcardDownloadConversation.php +++ b/app/Controllers/Chatbot/EcardDownloadConversation.php @@ -18,7 +18,59 @@ class EcardDownloadConversation extends Conversation $this->showEcardMenu(); } - protected function showEcardMenu() + protected function showEcardMenu() +{ +// Log entry for debugging +log_message('error', 'showEcardMenu function called'); + + +// Get chat session and policies +$chat_session_info = get_chatbot_session_info(); +$policy_list = ChatbotHelper::getListOfPolicies($chat_session_info); + +// If policies found, build an HTML list of links (and raw URLs as fallback) +if (is_array($policy_list) && count($policy_list)) { + $parts = []; + foreach ($policy_list as $policy) { + // Resolve rand string (defensive) + $randString = ''; + if (isset($policy['rand_string']) && $policy['rand_string'] !== '') { + $randString = $policy['rand_string']; + } elseif (isset($policy['rand']) && $policy['rand'] !== '') { + $randString = $policy['rand']; + } elseif (isset($policy['emp_policy_id'])) { + // As a last resort, use emp_policy_id (not ideal but prevents broken links) + $randString = $policy['emp_policy_id']; + } + + // Build link; make sure base_url produces correct path + $link = base_url('/download-e-card/' . $randString . '/1'); + + // Escape policy name to avoid HTML injection + $safeName = isset($policy['policy_name']) ? htmlspecialchars($policy['policy_name'], ENT_QUOTES, 'UTF-8') : 'Policy'; + + // Add to parts; include anchor and raw URL fallback + $parts[] = "🔹 {$safeName}
"; + } + + $message = "Choose a policy to download (click the policy name below):

" . implode('

', $parts); + log_message('error', 'Ecard links displayed: ' . json_encode(array_column($policy_list, 'policy_name'))); + $this->say($message); +} else { + log_message('error', 'No policies found for ecard download'); + $this->say('No policy found.'); +} + +// After showing links, move to confirmation conversation (Do you want to continue?) +// This keeps the UX identical to previous flow where we asked the user if they want to continue. +$this->bot->startConversation(new doYouWantToContinueConversation()); + + +} + + + + protected function showEcardMenuOLD() { log_message('error', ('showEcardMenu function called')); @@ -27,17 +79,13 @@ class EcardDownloadConversation extends Conversation $buttons = []; $question = 'Choose Policy to Download Ecard:'; - // log_message('error', ('policy_list : ' . json_encode($policy_list))); + log_message('error', ('policy_list : ' . json_encode($policy_list))); if(is_array($policy_list) && count($policy_list)) { foreach($policy_list as $policy) { - // $question = Question::create("Choose Policy to Download Ecard:") - // ->addButtons([ - // Button::create("🔹 $policy['policy_name']")->value("$policy['emp_policy_id']"), - // Button::create("◀️ Go Back")->value("go_back"), - // ]); + $this->buttonsData[$policy['emp_policy_id'].'#'.$policy['rand_string']] = ['response_text' => "🔹 {$policy['policy_name']}"] ; $buttons[] = Button::create("{$policy['policy_name']}")->value($policy['emp_policy_id'].'#'.$policy['rand_string']); } @@ -63,10 +111,9 @@ class EcardDownloadConversation extends Conversation case is_string($answer->getValue()) && is_array(explode('#',$answer->getValue())) && count((explode('#',$answer->getValue()))) == 2: $link = base_url().'/download-e-card/' . explode('#',$answer->getValue())[1].'/1'; - $this->say('Click here to downlad: Ecard'); - + log_message('error', $link); + $this->say('Click here to downlad: GMC
Click here to downlad: GMC Parent'); $this->bot->startConversation(new doYouWantToContinueConversation()); // ✅ Restart the - break; default: @@ -76,4 +123,7 @@ class EcardDownloadConversation extends Conversation } }); } + + + } diff --git a/app/Controllers/Chatbot/MainMenuConversation.php b/app/Controllers/Chatbot/MainMenuConversation.php index f06fd078..e5bf7a3d 100644 --- a/app/Controllers/Chatbot/MainMenuConversation.php +++ b/app/Controllers/Chatbot/MainMenuConversation.php @@ -23,7 +23,7 @@ class MainMenuConversation extends Conversation { $this->bot->userStorage()->delete(); $this->bot->types(); // Typing indicator for the first message - sleep(0.5); // Delay + // sleep(0.5); // Delay $this->showMainMenu(); } diff --git a/app/Controllers/Chatbot/NetworkHospitalConversation.php b/app/Controllers/Chatbot/NetworkHospitalConversation.php index 34e44f2b..57bb13de 100644 --- a/app/Controllers/Chatbot/NetworkHospitalConversation.php +++ b/app/Controllers/Chatbot/NetworkHospitalConversation.php @@ -16,11 +16,11 @@ class NetworkHospitalConversation extends Conversation public function run() { $this->bot->types(); // Typing indicator for the first message - sleep(0.5); // Delay + // sleep(0.5); // Delay $this->showHospitalMenu(); } - protected function showHospitalMenu() + protected function showHospitalMenuOLD() { $chat_session_info = get_chatbot_session_info(); $policy_list = ChatbotHelper::getListOfPolicies($chat_session_info); @@ -92,4 +92,54 @@ class NetworkHospitalConversation extends Conversation }); } + protected function showHospitalMenu() +{ +log_message('error', 'showHospitalMenu function called'); + + +// Get chat session and policies +$chat_session_info = get_chatbot_session_info(); +$policy_list = ChatbotHelper::getListOfPolicies($chat_session_info); + +if (is_array($policy_list) && count($policy_list)) { + $parts = []; + foreach ($policy_list as $policy) { + // Resolve rand string (defensive) + $randString = ''; + if (isset($policy['rand_string']) && $policy['rand_string'] !== '') { + $randString = $policy['rand_string']; + } elseif (isset($policy['rand']) && $policy['rand'] !== '') { + $randString = $policy['rand']; + } elseif (isset($policy['emp_policy_id'])) { + $randString = $policy['emp_policy_id']; + } + + $emp_policy_id = isset($policy['emp_policy_id']) ? $policy['emp_policy_id'] : ''; + $hospital_link = ChatbotHelper::getHospitalLink($emp_policy_id); + + $safeName = isset($policy['policy_name']) ? htmlspecialchars($policy['policy_name'], ENT_QUOTES, 'UTF-8') : 'Policy'; + + if ($hospital_link) { + $parts[] = "🔹 {$safeName}
"; + } else { + $parts[] = "🔹 {$safeName} — No Data found, please contact support team"; + } + + log_message('error', 'Hospital link for policy ' . $emp_policy_id . ': ' . $hospital_link); + } + + $message = "Access hospital details for your policies below:

" . implode('

', $parts); + $this->say($message); +} else { + log_message('error', 'No policies found for hospital menu'); + $this->say('No policy found.'); +} + +// After showing links, move to confirmation conversation +$this->bot->startConversation(new doYouWantToContinueConversation()); + + +} + + } diff --git a/app/Helpers/ChatbotHelper.php b/app/Helpers/ChatbotHelper.php index db0e2e3e..72632251 100644 --- a/app/Helpers/ChatbotHelper.php +++ b/app/Helpers/ChatbotHelper.php @@ -32,7 +32,7 @@ class ChatbotHelper $client_branch_id = $chat_session_info['client_branch_id']; $relationship ='Self'; $EmployeeModel = new EmployeeModel(); - return $EmployeeModel->getEmpFamilybyEmpCode(emp_code: $emp_code,client_id: $client_id,emp_status: ['active'],policy_status:['active'],client_branch_id:[ $client_branch_id ],relationship:[$relationship]);//,relationship:[$relationship]; + return $EmployeeModel->getEmpFamilybyEmpCode(emp_code: $emp_code,client_id: $client_id,emp_status: ['active'],policy_status:['active'],client_branch_id:[ $client_branch_id ],relationship:[$relationship],policy_type_id:[2,3,4,5]);//,relationship:[$relationship]; } public static function getHospitalLink($emp_policy_id){ diff --git a/app/Models/EmployeeModel.php b/app/Models/EmployeeModel.php index 1bc55f06..1416c082 100755 --- a/app/Models/EmployeeModel.php +++ b/app/Models/EmployeeModel.php @@ -106,9 +106,9 @@ class EmployeeModel extends Model } - public function getEmpFamilybyEmpCode(string $client_policy_id = null,string $emp_code = null,string $client_id = null,array $emp_status = [],array $policy_status = [],array $relationship = [],array $client_branch_id = []) + public function getEmpFamilybyEmpCode(string $client_policy_id = null,string $emp_code = null,string $client_id = null,array $emp_status = [],array $policy_status = [],array $relationship = [],array $client_branch_id = [],array $policy_type_id = []) { - $result = $this->select(['employees.id as emp_id', 'employees.client_id','employees.client_branch_id', 'employees.relationship', 'employees.relationship_code', 'employees.change_event', 'employees.emp_code', 'employees.name', 'employees.email_personal', 'employees.email_corporate', 'employees.mobile', 'employees.gender', 'employees.dob', 'employees.doj', 'employees.basic_pay', 'employees.band', 'employees.designation', 'employees.emp_status','employees.unit','employees.file_id','employee_polices.id as emp_policy_id', 'employee_polices.employee_id', 'employee_polices.client_policy_id', 'employee_polices.tpa_id', 'employee_polices.uhid', 'employee_polices.batch_code', 'employee_polices.status', 'employee_polices.pre_existing_alignments', 'employee_polices.basic_cover_si', 'employee_polices.date_coverage', 'employee_polices.policy_end_date', 'employee_polices.days', 'employee_polices.premium', 'employee_polices.rata_premimum', 'employee_polices.gst', 'employee_polices.date_of_exit', 'employee_polices.reason_for_exit','policy_type.long_name as policy_name','client_policy.is_addon', 'employee_polices.payable_employee','employee_polices.rand_string','employee_polices.claim_status']) + $result = $this->select(['employees.id as emp_id', 'employees.client_id','employees.client_branch_id', 'employees.relationship', 'employees.relationship_code', 'employees.change_event', 'employees.emp_code', 'employees.name', 'employees.email_personal', 'employees.email_corporate', 'employees.mobile', 'employees.gender', 'employees.dob', 'employees.doj', 'employees.basic_pay', 'employees.band', 'employees.designation', 'employees.emp_status','employees.unit','employees.file_id','employee_polices.id as emp_policy_id', 'employee_polices.employee_id', 'employee_polices.client_policy_id', 'employee_polices.tpa_id', 'employee_polices.uhid', 'employee_polices.batch_code', 'employee_polices.status', 'employee_polices.pre_existing_alignments', 'employee_polices.basic_cover_si', 'employee_polices.date_coverage', 'employee_polices.policy_end_date', 'employee_polices.days', 'employee_polices.premium', 'employee_polices.rata_premimum', 'employee_polices.gst', 'employee_polices.date_of_exit', 'employee_polices.reason_for_exit','policy_type.long_name as policy_name','client_policy.policy_type_id','client_policy.is_addon', 'employee_polices.payable_employee','employee_polices.rand_string','employee_polices.claim_status']) ->join('employee_polices', 'employee_polices.employee_id = employees.id') ->join('client_policy', 'client_policy.id = employee_polices.client_policy_id') ->join('policy_type', 'policy_type.id = client_policy.policy_type_id','left') @@ -135,6 +135,9 @@ class EmployeeModel extends Model }) ->when(count($policy_status), function($query) use ($policy_status){ return $query->whereIn('employee_polices.status', $policy_status); + }) + ->when(count($policy_type_id), function($query) use ($policy_type_id){ + return $query->whereIn('client_policy.policy_type_id', $policy_type_id); }) ->when($client_id, function($query) use ($client_id){ return $query->where('employees.client_id',$client_id);