diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 5065832a..c5111235 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -29,6 +29,8 @@ $routes->get("updatePolicyTermsKey", "ClientController::updatePolicyTermsKey"); $routes->get("updateRemainderDate", "ClientController::updateRemainderDate"); $routes->get("sendCroneRemainderMail", "DashboardController::sendCroneRemainderMail"); $routes->get("sendextraparam", "ClientController::sendextraparam"); +$routes->get("updateRenewalData", "ClientController::updateRenewalData"); +$routes->get("updateRenewalDataNotExistingClient", "ClientController::updateRenewalDataNotExistingClient"); // $routes->post("iAgreeForAddOn", "EmployeeRestController::iAgreeForAddOn"); // $routes->get("sendCroneRemainderMail", "DashboardController::sendCroneRemainderMail"); // $routes->post("employeeUpload", "EmployeeRestController::employeeUpload"); @@ -160,6 +162,7 @@ $routes->group("/employee", ["filter" => "authMVC"], function ($routes) { $routes->get("test-rack-rate", "EmployeeController::testRackRate"); $routes->post("test-rack-rate", "EmployeeController::testRackRate"); $routes->get('test_members_list', 'EmployeeController::test_members_list'); + $routes->post('get_emp_history','EmployeeController::getEmpHistory'); }); $routes->group("/master", ["filter" => "authMVC"], function ($routes) { @@ -386,15 +389,14 @@ $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) { $routes->group("leads", ["filter" => "authMVC"], function ($routes) { - $routes->get("list", "LeadsController::viewLeadsList"); + $routes->match(['get', 'post'],"list", "LeadsController::viewLeadsList"); $routes->post("create", "LeadsController::createLead"); $routes->get("list/(:any)", "LeadsController::getLeadDataForEdit/$1"); $routes->get("sendMail", "LeadsController::sendMailWithAttachement"); $routes->post("sendMail", "LeadsController::sendMailWithAttachement"); $routes->get("exportQCRandRFQ/(:any)", "LeadsController::exportQCRandRFQ/$1"); $routes->get("featchLeadDataAndInsertClient/(:any)", "LeadsController::featchLeadDataAndInsertClient/$1"); - $routes->get("featchClientPolicyFromLead/(:any)", "LeadsController::featchClientPolicyFromLead/$1"); - + $routes->get("featchClientPolicyFromLead/(:any)", "LeadsController::featchClientPolicyFromLead/$1"); }); $routes->group("rfq", ["filter" => "authMVC"], function ($routes) { diff --git a/app/Controllers/Chatbot/EcardDownloadConversation.php b/app/Controllers/Chatbot/EcardDownloadConversation.php index 19fad42f..b0cb78ae 100644 --- a/app/Controllers/Chatbot/EcardDownloadConversation.php +++ b/app/Controllers/Chatbot/EcardDownloadConversation.php @@ -17,7 +17,8 @@ class EcardDownloadConversation extends Conversation protected function showEcardMenu() { - $policy_list = ChatbotHelper::getListOfPolicies(); + $chat_session_info = get_chatbot_session_info(); + $policy_list = ChatbotHelper::getListOfPolicies($chat_session_info); $buttons = []; $question = 'Choose Policy to Download Ecard:'; if(is_array($policy_list) && count($policy_list)) @@ -41,7 +42,8 @@ class EcardDownloadConversation extends Conversation ->addButtons($buttons); $this->bot->ask($question, function ($answer) { - // print_r($answer->getValue());die(); + $selectedOption = $answer->getText(); + $this->say("You have selected {$selectedOption}"); switch ($answer->getValue()) { case "go_back": $this->bot->startConversation(new MainMenuConversation()); diff --git a/app/Controllers/Chatbot/MainMenuConversation.php b/app/Controllers/Chatbot/MainMenuConversation.php index 2c9059f9..87d9a4ef 100644 --- a/app/Controllers/Chatbot/MainMenuConversation.php +++ b/app/Controllers/Chatbot/MainMenuConversation.php @@ -6,54 +6,75 @@ use App\Helpers\ChatbotHelper; use BotMan\BotMan\Messages\Conversations\Conversation; use BotMan\BotMan\Messages\Outgoing\Question; use BotMan\BotMan\Messages\Outgoing\Actions\Button; +use BotMan\Drivers\Web\WebDriver; class MainMenuConversation extends Conversation { + protected $buttonsData = [ + "ecard_download" => ["response_text" => "📄 Ecard Download"], + "network_hospital" => ["response_text" => "🏥 Network Hospital"], + "reimbursement_claim" => ["response_text" => "💰 Reimbursement Claim Process"], + "reimbursement_status" => ["response_text" => "📑 Reimbursement Claim Status"], + "new_policy" => ["response_text" => "🆕 New Policy"], + "renew_policy" => ["response_text" => "🔄 Renew Policy"], + ]; + public function run() { - + $this->bot->userStorage()->delete(); $this->bot->types(); // Typing indicator for the first message - sleep(0.5); // Delay + sleep(0.5); // Delay $this->showMainMenu(); } protected function showMainMenu() { - $question = Question::create("Please choose") - ->addButtons([ - Button::create("📄 Ecard Download")->value("ecard_download"), - Button::create("🏥 Network Hospital")->value("network_hospital"), - Button::create("💰 Reimbursement Claim Process")->value("reimbursement_claim"), - Button::create("📑 Reimbursement Claim Status")->value("reimbursement_status"), - Button::create("🆕 New Policy")->value("new_policy"), - Button::create("🔄 Renew Policy")->value("renew_policy"), + $buttons = []; + foreach ($this->buttonsData as $key => $data) { + $buttons[] = Button::create($data['response_text'])->value($key); + } + $this->bot->userStorage()->save([ + 'path' => [] + ]); + $question = Question::create("Please choose an option:")->addButtons($buttons); + $temp = $this->buttonsData; + $this->bot->ask($question, function ($answer) use( $temp ){ + $user_reponse = $answer->getValue(); + if (isset($temp[$user_reponse])) { + $message = "You've chosen " . $temp[$user_reponse]['response_text']; + // $this->bot->say($message,,WebDriver::class); + $this->bot->reply($message); + } + + if (!$answer->isInteractiveMessageReply()) { + $user_reponse = null; + } + // Get just the existing path array + $path = $this->bot->userStorage()->get('path') ?? []; + + // Add new value + array_push($path, $answer->getValue()); + + // Save ONLY the path back + $this->bot->userStorage()->save([ + 'path' => $path ]); - $this->bot->ask($question, function ($answer) { - switch ($answer->getValue()) { - case "ecard_download": + switch ($user_reponse) { - // $message = ChatbotHelper::get_payload_data(); - // $this->say($message); - // $this->say("📄 Ecard Download Menu:"); + case "ecard_download": $this->bot->startConversation(new EcardDownloadConversation()); break; case "network_hospital": - $this->say("🏥 Network Hospital Menu:");log_message('error','Network Hospital clicked'); $this->bot->startConversation(new NetworkHospitalConversation()); break; case "reimbursement_claim": - // $this->say("Reimbursement Claim Process selected. (Dummy Response)"); $this->bot->startConversation(new ReimbursementClaimProcessConversation()); break; case "reimbursement_status": - $this->say("Reimbursement Claim Status selected. (Dummy Response)"); $this->bot->startConversation(new ReimbursementClaimStatusConversation()); - break; case "new_policy": - $this->bot->startConversation(new policyConversation()); - break; case "renew_policy": $this->bot->startConversation(new policyConversation()); break; @@ -63,6 +84,7 @@ class MainMenuConversation extends Conversation break; } }); - } + + } } diff --git a/app/Controllers/Chatbot/NetworkHospitalConversation.php b/app/Controllers/Chatbot/NetworkHospitalConversation.php index 10bc3b7d..2e59f896 100644 --- a/app/Controllers/Chatbot/NetworkHospitalConversation.php +++ b/app/Controllers/Chatbot/NetworkHospitalConversation.php @@ -22,7 +22,8 @@ class NetworkHospitalConversation extends Conversation protected function showHospitalMenu() { - $policy_list = ChatbotHelper::getListOfPolicies(); + $chat_session_info = get_chatbot_session_info(); + $policy_list = ChatbotHelper::getListOfPolicies($chat_session_info); $buttons = []; $question = 'Choose Policy:'; if(is_array($policy_list) && count($policy_list)) @@ -51,6 +52,13 @@ class NetworkHospitalConversation extends Conversation // }); $this->bot->ask($question, function ($answer) { + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path + ]); switch ($answer->getValue()) { case is_string($answer->getValue()) && is_array(explode('#',$answer->getValue())) && count((explode('#',$answer->getValue()))) == 2: @@ -73,7 +81,7 @@ class NetworkHospitalConversation extends Conversation break; default: $this->say("Invalid selection. Please choose an option."); - $this->bot->startConversation(new EcardDownloadConversation()); + $this->bot->startConversation(new NetworkHospitalConversation()); break; } }); diff --git a/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php b/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php index ca3bf60a..14602974 100644 --- a/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php +++ b/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php @@ -20,7 +20,8 @@ class ReimbursementClaimProcessConversation extends Conversation protected function claimProcess() { - $res = ChatbotHelper::sendReimbursementProcessOverMail(); + $chat_session_info = get_chatbot_session_info(); + $res = ChatbotHelper::sendReimbursementProcessOverMail($chat_session_info); if($res == true) { $this->say("Reimbursement process shared over your registered mail...!"); diff --git a/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php b/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php index 4c6b58dc..fd6e3337 100644 --- a/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php +++ b/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php @@ -2,6 +2,7 @@ // namespace App\Conversations; namespace App\Controllers\Chatbot; +use App\Helpers\ChatbotHelper; use BotMan\BotMan\Messages\Conversations\Conversation; use BotMan\BotMan\Messages\Outgoing\Question; @@ -19,29 +20,19 @@ class ReimbursementClaimStatusConversation extends Conversation protected function claimStatus() { - $question = Question::create("Do you Need Anything Else ?") - ->addButtons([ - Button::create("🔹 Yes I need some more Help")->value("yes"), - Button::create("🔹 No, Thank You")->value("no"), - // Button::create("◀️ Go Back")->value("go_back"), - ]); + $this->say("Fetching Status please wait ..."); - $this->bot->ask($question, function ($answer) { - switch ($answer->getValue()) { - case "yes": - - $this->say("Sure, How can I help you "); - $this->bot->startConversation(new MainMenuConversation()); - break; - case "no": - $this->say("Thank you for your time! If you need anything else, feel free to reach out. Goodbye!"); - break; - default: - $this->say("Invalid selection. Please choose an option."); - $this->askQuestion(); - break; - } - }); + $chat_session_info = get_chatbot_session_info(); + $data = ChatbotHelper::getReimbursementClaimStatus($chat_session_info); + + $this->bot->types(); + if ($data){ + $this->say("The claim status for the claim Number {$data['claim_number']} is currently in {$data['client_status']} status.
More Detailed Information is sent to your mail"); + $this->bot->startConversation(new doYouWantToContinueConversation()); + }else{ + $this->say("No Claim Raised against the user."); + $this->bot->startConversation(new doYouWantToContinueConversation()); + } } } diff --git a/app/Controllers/Chatbot/commonPolicyOptionConversations.php b/app/Controllers/Chatbot/commonPolicyOptionConversations.php index e32c318b..c6eb8eae 100644 --- a/app/Controllers/Chatbot/commonPolicyOptionConversations.php +++ b/app/Controllers/Chatbot/commonPolicyOptionConversations.php @@ -11,7 +11,11 @@ use App\Helpers\ChatbotHelper; class commonPolicyOptionConversations extends Conversation { - + protected $buttonsData = [ + "upload_vehicle_details" => ["response_text" => "🔹 Upload Vehicle Details"], + "service_executive" => ["response_text" => "🔹 Talk to our Service Executive"], + "go_back" => ["response_text" => "◀️ Go Back"], + ]; public function run() { @@ -20,15 +24,36 @@ class commonPolicyOptionConversations extends Conversation protected function policyOptions() { - $question = Question::create("Choose Policy Type:") - ->addButtons([ - Button::create("🔹 Upload Vehicle Details")->value("upload_vehicle_details"), - Button::create("🔹 Talk to our Service Executive")->value("service_executive"), - Button::create("◀️ Go Back")->value("go_back"), - ]); + $buttons = []; + foreach ($this->buttonsData as $key => $data) { + $buttons[] = Button::create($data['response_text'])->value($key); + } + // $this->bot->userStorage()->save([ + // 'path' => [] + // ]); + $question = Question::create("Please choose an option:")->addButtons($buttons); + $temp = $this->buttonsData; + $this->bot->ask($question, function ($answer) use( $temp ){ + $user_reponse = $answer->getValue(); + if (isset($temp[$user_reponse])) { + $message = "You've chosen " . $temp[$user_reponse]['response_text']; + // $this->bot->say($message,,WebDriver::class); + $this->bot->reply($message); + } - $this->bot->ask($question, function ($answer) { - switch ($answer->getValue()) { + if (!$answer->isInteractiveMessageReply()) { + $user_reponse = null; + } + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path + ]); + $path = $this->bot->userStorage()->get('path'); + // $this->say(json_encode($path)); + switch ($user_reponse) { case "upload_vehicle_details": // $cityName = $response->getText(); $this->bot->startConversation(new vehicleFormConversation()); @@ -48,3 +73,5 @@ class commonPolicyOptionConversations extends Conversation } } + + diff --git a/app/Controllers/Chatbot/doYouWantToContinueConversation.php b/app/Controllers/Chatbot/doYouWantToContinueConversation.php index ba5c1864..31bcf174 100644 --- a/app/Controllers/Chatbot/doYouWantToContinueConversation.php +++ b/app/Controllers/Chatbot/doYouWantToContinueConversation.php @@ -11,6 +11,10 @@ use App\Helpers\ChatbotHelper; class doYouWantToContinueConversation extends Conversation { + protected $buttonsData = [ + "yes" => ["response_text" => "🔹 Yes I need some more Help"], + "no" => ["response_text" => "🔹 No, Thank You"] + ]; public function run() @@ -22,21 +26,56 @@ class doYouWantToContinueConversation extends Conversation protected function askQuestion() { - $question = Question::create("Do you Need Anything Else ?") - ->addButtons([ - Button::create("🔹 Yes I need some more Help")->value("yes"), - Button::create("🔹 No, Thank You")->value("no"), - // Button::create("◀️ Go Back")->value("go_back"), + $buttons = []; + foreach ($this->buttonsData as $key => $data) { + $buttons[] = Button::create($data['response_text'])->value($key); + } + // $this->bot->userStorage()->save([ + // 'path' => [] + // ]); + $question = Question::create("Please choose an option:")->addButtons($buttons); + $temp = $this->buttonsData; + $this->bot->ask($question, function ($answer) use( $temp ){ + $user_reponse = $answer->getValue(); + if (isset($temp[$user_reponse])) { + $message = "You've chosen " . $temp[$user_reponse]['response_text']; + // $this->bot->say($message,,WebDriver::class); + $this->bot->reply($message); + } + + if (!$answer->isInteractiveMessageReply()) { + $user_reponse = null; + } + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path ]); - $this->bot->ask($question, function ($answer) { - switch ($answer->getValue()) { + switch ($user_reponse) { case "yes": // $this->say("Sure, How can I help you "); $this->bot->startConversation(new MainMenuConversation()); break; case "no": + // $user = $this->bot->getUser(); + // $userID = $user->getId(); + $dataBefore = $this->bot->userStorage()->all(); + // log_message('info','Before Deletion: ' . json_encode($dataBefore)); + + $this->bot->userStorage()->delete(); + $this->bot->userStorage()->save([]); + + + // Cache::flush(); + + $dataAfter = $this->bot->userStorage()->all(); + // log_message('info','After Deletion: ' . json_encode($dataAfter)); + + $this->say("Thank you for your time! If you need anything else, feel free to reach out. Goodbye!"); break; default: diff --git a/app/Controllers/Chatbot/fourWheelerOptionsConversations.php b/app/Controllers/Chatbot/fourWheelerOptionsConversations.php index 6c850c03..b2753566 100644 --- a/app/Controllers/Chatbot/fourWheelerOptionsConversations.php +++ b/app/Controllers/Chatbot/fourWheelerOptionsConversations.php @@ -11,7 +11,11 @@ use App\Helpers\ChatbotHelper; class fourWheelerOptionsConversations extends Conversation { - + protected $buttonsData = [ + "comp" => ["response_text" => "🔹 Comprehensive"], + "3p" => ["response_text" => "🔹 Third-Party Only"], + "go_back" => ["response_text" => "◀️ Go Back"], + ]; public function run() { @@ -20,15 +24,36 @@ class fourWheelerOptionsConversations extends Conversation protected function show4WOptions() { - $question = Question::create("Choose Policy Type:") - ->addButtons([ - Button::create("🔹 Comprehensive")->value("comp"), - Button::create("🔹 Third-Party Only")->value("3p"), - Button::create("◀️ Go Back")->value("go_back"), - ]); + $buttons = []; + foreach ($this->buttonsData as $key => $data) { + $buttons[] = Button::create($data['response_text'])->value($key); + } + // $this->bot->userStorage()->save([ + // 'path' => [] + // ]); + $question = Question::create("Please choose an option:")->addButtons($buttons); + $temp = $this->buttonsData; + $this->bot->ask($question, function ($answer) use( $temp ){ + $user_reponse = $answer->getValue(); + if (isset($temp[$user_reponse])) { + $message = "You've chosen " . $temp[$user_reponse]['response_text']; + // $this->bot->say($message,,WebDriver::class); + $this->bot->reply($message); + } - $this->bot->ask($question, function ($answer) { - switch ($answer->getValue()) { + if (!$answer->isInteractiveMessageReply()) { + $user_reponse = null; + } + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path + ]); + $path = $this->bot->userStorage()->get('path'); + // $this->say(json_encode($path)); + switch ($user_reponse) { case "3p": // $cityName = $response->getText(); $this->bot->startConversation(new commonPolicyOptionConversations()); diff --git a/app/Controllers/Chatbot/hospitalPolicyConversation.php b/app/Controllers/Chatbot/hospitalPolicyConversation.php index 4a29c918..a171c005 100644 --- a/app/Controllers/Chatbot/hospitalPolicyConversation.php +++ b/app/Controllers/Chatbot/hospitalPolicyConversation.php @@ -11,7 +11,11 @@ use App\Helpers\ChatbotHelper; class hospitalPolicyConversation extends Conversation { - + protected $buttonsData = [ + "individual" => ["response_text" => "🔹 Individual"], + "floater" => ["response_text" => "🔹 Floater"], + "go_back" => ["response_text" => "◀️ Go Back"], + ]; public function run() { @@ -20,23 +24,42 @@ class hospitalPolicyConversation extends Conversation protected function showMediclaimPolicyOptions() { + $path = $this->bot->userStorage()->get('path'); + + if (in_array('individual',$path)){ + $text = 'Upload Policy Copy and Individual Details'; + $value = 'individual_upload'; + }else{ + $text = 'Upload Policy Copy and Family Details'; + $value = 'family_upload'; + } $question = Question::create("Choose Policy Type:") ->addButtons([ - Button::create("🔹 Individual")->value("individual"), - Button::create("🔹 Floater")->value("floater"), + Button::create("🔹 ".$text)->value($value), + Button::create("🔹 Talk to our Service Executive")->value("service_executive"), Button::create("◀️ Go Back")->value("go_back"), ]); - $this->bot->ask($question, function ($answer) { + $this->bot->ask($question, function ($answer) use ($value, $text){ + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path + ]); switch ($answer->getValue()) { - case "individual": - $this->bot->startConversation(new commonPolicyOptionConversations()); + case $value: + $this->say("you have chosen ".$text); + + $this->bot->startConversation(new medicalClaimFormConversations()); break; - case "floater": - $this->bot->startConversation(new commonPolicyOptionConversations()); + case "service_executive": + $this->say('You have chosen to speak with our Service Executive'); + $this->bot->startConversation(new serviceExecutiveConversation()); break; case "go_back": - $this->bot->startConversation(new MainMenuConversation()); + $this->bot->startConversation(new medicalClaimOptionConversations()); break; default: $this->say("Invalid selection. Please choose an option."); diff --git a/app/Controllers/Chatbot/medicalClaimFormConversations.php b/app/Controllers/Chatbot/medicalClaimFormConversations.php new file mode 100644 index 00000000..da6bf3c5 --- /dev/null +++ b/app/Controllers/Chatbot/medicalClaimFormConversations.php @@ -0,0 +1,317 @@ + null, + 'dob' => null, + 'si' => null, + 'pre_existing_disease' => null + ]; + + public function run() + { + // Initialize state if not exists + if (!$this->bot->userStorage()->get('claim_form_state')) { + $this->bot->userStorage()->save([ + 'claim_form_state' => [ + 'dependency_count' => 0, + 'current_member' => 'primary', + 'dependencies' => [], + 'primary_insurer' => null + ] + ]); + } + + $state = $this->bot->userStorage()->get('claim_form_state'); + $memberType = ($state['current_member'] === 'primary') ? 'primary insured person' : 'dependency'; + + $this->askName($memberType); + } + + private function askName($memberType) + { + $this->ask("Enter the Name of the $memberType?", function($answer) { + $name = $answer->getText(); + + if (empty($name)) { + $this->say('Name Cannot be Empty'); + return $this->run(); + } + + // Get existing state and update only the name + $state = $this->bot->userStorage()->get('claim_form_state'); + if ($state['current_member'] === 'primary') { + if (!isset($state['primary_insurer'])) { + $state['primary_insurer'] = []; + } + $state['primary_insurer']['name'] = $name; + } else { + if (!isset($state['temp_dependency'])) { + $state['temp_dependency'] = []; + } + $state['temp_dependency']['name'] = $name; + } + + $this->bot->userStorage()->save(['claim_form_state' => $state]); + $this->askDOB(); + }); + } + + private function askDOB() + { + $this->ask('Enter Date of Birth (DD/MM/YYYY)?', function($answer) { + $dob = $answer->getText(); + + if (empty($dob)) { + $this->say('Date of Birth Cannot be Empty'); + return $this->askDOB(); + } + + // Get existing state and update only the DOB + $state = $this->bot->userStorage()->get('claim_form_state'); + if ($state['current_member'] === 'primary') { + $state['primary_insurer']['dob'] = $dob; + } else { + $state['temp_dependency']['dob'] = $dob; + } + + $this->bot->userStorage()->save(['claim_form_state' => $state]); + $this->askSumInsured(); + }); + } + + private function askSumInsured() + { + $this->ask('Enter Sum Insured Amount?', function($answer) { + $sum_insured = $answer->getText(); + + if (empty($sum_insured)) { + $this->say('Sum Insured Cannot be Empty'); + return $this->askSumInsured(); + } + + // Get existing state and update only the sum insured + $state = $this->bot->userStorage()->get('claim_form_state'); + if ($state['current_member'] === 'primary') { + $state['primary_insurer']['si'] = $sum_insured; + } else { + $state['temp_dependency']['si'] = $sum_insured; + } + + $this->bot->userStorage()->save(['claim_form_state' => $state]); + $this->askPreExistingDisease(); + }); + } + + private function askPreExistingDisease() + { + $this->ask('Enter Pre-Existing Disease if any (type "none" if none)?', function($answer) { + $pre_existing_disease = $answer->getText(); + + if (empty($pre_existing_disease)) { + $this->say('Please enter none if no pre-existing conditions'); + return $this->askPreExistingDisease(); + } + + // Get existing state and update the disease info + $state = $this->bot->userStorage()->get('claim_form_state'); + if ($state['current_member'] === 'primary') { + $state['primary_insurer']['pre_existing_disease'] = $pre_existing_disease; + $state['primary_insurer']['type'] = 'primary'; + } else { + $state['temp_dependency']['pre_existing_disease'] = $pre_existing_disease; + $state['temp_dependency']['type'] = 'dependency'; + + // Move completed dependency to dependencies array + if (!isset($state['dependencies'])) { + $state['dependencies'] = []; + } + $state['dependencies'][] = $state['temp_dependency']; + $state['temp_dependency'] = null; // Clear temporary dependency + } + + $this->bot->userStorage()->save(['claim_form_state' => $state]); + + // For debugging + log_message('debug', 'Final state after all data collection: ' . json_encode($state)); + + $this->saveMemberAndContinue(); + }); + } + + private function saveMemberAndContinue() + { + $state = $this->bot->userStorage()->get('claim_form_state'); + $memberData = $state['current_member'] === 'primary' + ? $state['primary_insurer'] + : end($state['dependencies']); + + // Show current member info + $memberInfo = "👤 **" . ucfirst($memberData['type']) . " Member Details:**\n"; + $memberInfo .= "🔹 Name: " . $memberData['name'] . "\n"; + $memberInfo .= "🔹 Date of Birth: " . $memberData['dob'] . "\n"; + $memberInfo .= "🔹 Sum Insured: " . $memberData['si'] . "\n"; + $memberInfo .= "🔹 Pre Existing Disease: " . $memberData['pre_existing_disease'] . "\n"; + + $this->say($memberInfo); + + $path = $this->bot->userStorage()->get('path'); + + if (in_array('floater', $path)) { + $this->askAboutDependencies(); + } else { + $this->showSummary(); + } + } + + private function askAboutDependencies() + { + $question = Question::create("Do you want to add a dependency? ") + ->addButtons([ + Button::create("✅ Yes")->value("yes"), + Button::create("❌ No")->value("no"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->ask($question, function($answer) { + $state = $this->bot->userStorage()->get('claim_form_state'); + + switch ($answer->getValue()) { + case "yes": + $state['dependency_count']++; + $state['current_member'] = 'dependency'; + $this->bot->userStorage()->save(['claim_form_state' => $state]); + + // Reset currentMemberData for new dependency + $this->currentMemberData = [ + 'name' => null, + 'dob' => null, + 'si' => null, + 'pre_existing_disease' => null + ]; + + $this->run(); + break; + + case "no": + $this->showSummary(); + break; + + case "go_back": + $this->bot->startConversation(new hospitalPolicyConversation()); + break; + + default: + $this->say("Invalid selection. Please choose an option."); + $this->askAboutDependencies(); + break; + } + }); + } + + private function showSummary() + { + $state = $this->bot->userStorage()->get('claim_form_state'); + + $finalSummary = '
'; + + // Primary Insurer + if ($state['primary_insurer']) { + $finalSummary .= '
Primary:
' . + $this->formatSingleLineMemberInfo($state['primary_insurer']) . + '
'; + } + + // Dependencies + if (!empty($state['dependencies'])) { + foreach ($state['dependencies'] as $index => $dependency) { + $finalSummary .= '
Dep ' . ($index + 1) . ':
' . + $this->formatSingleLineMemberInfo($dependency) . + '
'; + } + } + + $finalSummary .= '
'; + + $this->say($finalSummary); + + $question = Question::create("Confirm all details:") + ->addButtons([ + Button::create("✅ Confirm")->value("confirm"), + Button::create("🔁 Start Over")->value("restart"), + Button::create("❌ Cancel")->value('cancel') + ]); + + $this->ask($question, function ($answer) use ($finalSummary) { + switch ($answer->getValue()) { + case "confirm": + $sent_status = ChatbotHelper::sendQuotationRequestMail($finalSummary); + if ($sent_status) { + $this->say('Our Executive will contact you with the quotation soon.'); + $this->bot->startConversation(new doYouWantToContinueConversation()); + } else { + $this->say("There was a problem while requesting for a quotation. Please try again later."); + } + break; + case "restart": + $this->bot->userStorage()->save([ + 'claim_form_state' => [ + 'dependency_count' => 0, + 'current_member' => 'primary', + 'dependencies' => [], + 'primary_insurer' => null + ] + ]); + $this->run(); + break; + case "cancel": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showSummary(); + break; + } + }); + } + + private function formatSingleLineMemberInfo($member) + { + return '🔹 Name: ' . htmlspecialchars($member['name']) . '
' . + '🔹 DOB: ' . htmlspecialchars($member['dob']) . '
' . + '🔹 SI: ' . htmlspecialchars($member['si']) . '
' . + '🔹 PED: ' . htmlspecialchars($member['pre_existing_disease']); + } + + + // private function formatMemberInfo($member) + // { + // // Format each piece of information with proper HTML + // return '
+ //
+ // 🔹 Name: + // ' . htmlspecialchars($member['name']) . ' + //
+ //
+ // 🔹 DOB: + // ' . htmlspecialchars($member['dob']) . ' + //
+ //
+ // 🔹 Sum Insured: + // ' . htmlspecialchars($member['si']) . ' + //
+ //
+ // 🔹 Pre-Existing Conditions: + // ' . htmlspecialchars($member['pre_existing_disease']) . ' + //
+ //
'; + // } +} \ No newline at end of file diff --git a/app/Controllers/Chatbot/medicalClaimOptionConversations.php b/app/Controllers/Chatbot/medicalClaimOptionConversations.php index db66cda3..db5312a7 100644 --- a/app/Controllers/Chatbot/medicalClaimOptionConversations.php +++ b/app/Controllers/Chatbot/medicalClaimOptionConversations.php @@ -12,6 +12,11 @@ use App\Helpers\ChatbotHelper; class medicalClaimOptionConversations extends Conversation { + protected $buttonsData = [ + "individual" => ["response_text" => "🔹 Individual"], + "floater" => ["response_text" => "🔹 Floater"], + "go_back" => ["response_text" => "◀️ Go Back"], + ]; public function run() { @@ -20,21 +25,41 @@ class medicalClaimOptionConversations extends Conversation protected function showMediclaimOptions() { - $question = Question::create("Choose Policy Type:") - ->addButtons([ - Button::create("🔹 Individual")->value("individual"), - Button::create("🔹 Floater")->value("floater"), - Button::create("◀️ Go Back")->value("go_back"), + $buttons = []; + foreach ($this->buttonsData as $key => $data) { + $buttons[] = Button::create($data['response_text'])->value($key); + } + // $this->bot->userStorage()->save([ + // 'path' => [] + // ]); + $question = Question::create("Please choose an option:")->addButtons($buttons); + $temp = $this->buttonsData; + $this->bot->ask($question, function ($answer) use( $temp ){ + $user_reponse = $answer->getValue(); + if (isset($temp[$user_reponse])) { + $message = "You've chosen " . $temp[$user_reponse]['response_text']; + // $this->bot->say($message,,WebDriver::class); + $this->bot->reply($message); + } + + if (!$answer->isInteractiveMessageReply()) { + $user_reponse = null; + } + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path ]); - $this->bot->ask($question, function ($answer) { - switch ($answer->getValue()) { + switch ($user_reponse) { case "individual": // $cityName = $response->getText(); - $this->bot->startConversation(new commonPolicyOptionConversations()); + $this->bot->startConversation(new hospitalPolicyConversation()); break; case "floater": - $this->bot->startConversation(new commonPolicyOptionConversations()); + $this->bot->startConversation(new hospitalPolicyConversation()); break; case "go_back": $this->bot->startConversation(new MainMenuConversation()); diff --git a/app/Controllers/Chatbot/policyConversation.php b/app/Controllers/Chatbot/policyConversation.php index 9a3c2669..04c8d9a5 100644 --- a/app/Controllers/Chatbot/policyConversation.php +++ b/app/Controllers/Chatbot/policyConversation.php @@ -11,6 +11,12 @@ use App\Helpers\ChatbotHelper; class policyConversation extends Conversation { + protected $buttonsData = [ + "2_wheeler" => ["response_text" => "🏍️ 2 Wheeler"], + "4_wheeler" => ["response_text" => "🚗 4 Wheeler"], + "mediclaim" => ["response_text" => "🩺 Medical Claim"], + "go_back" => ["response_text" => "◀️ Go Back"], + ]; public function run() @@ -20,16 +26,34 @@ class policyConversation extends Conversation protected function showNewPolicy() { - $question = Question::create("Choose Policy Type:") - ->addButtons([ - Button::create("🏍️ 2 Wheeler")->value("2_wheeler"), - Button::create("🚗 4 Wheeler")->value("4_wheeler"), - Button::create("🩺 Medical Claim")->value("mediclaim"), - Button::create("◀️ Go Back")->value("go_back"), - ]); + $buttons = []; + foreach ($this->buttonsData as $key => $data) { + $buttons[] = Button::create($data['response_text'])->value($key); + } + // $this->bot->userStorage()->save([ + // 'path' => [] + // ]); + $question = Question::create("Please choose an option:")->addButtons($buttons); + $temp = $this->buttonsData; + $this->bot->ask($question, function ($answer) use( $temp ){ + $user_reponse = $answer->getValue(); + if (isset($temp[$user_reponse])) { + $message = "You've chosen " . $temp[$user_reponse]['response_text']; + // $this->bot->say($message,,WebDriver::class); + $this->bot->reply($message); + } - $this->bot->ask($question, function ($answer) { - switch ($answer->getValue()) { + if (!$answer->isInteractiveMessageReply()) { + $user_reponse = null; + } + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path + ]); + switch ($user_reponse) { case "2_wheeler": // $cityName = $response->getText(); $this->bot->startConversation(new twoWheelerOptionsConversations()); diff --git a/app/Controllers/Chatbot/selectInsurerConversations.php b/app/Controllers/Chatbot/selectInsurerConversations.php new file mode 100644 index 00000000..4d921ccc --- /dev/null +++ b/app/Controllers/Chatbot/selectInsurerConversations.php @@ -0,0 +1,93 @@ +insurerOptions(); + } + + protected function insurerOptions() + { + $question = Question::create("Choose Your Options:") + ->addButtons([ + Button::create("🔹 Select Insurers")->value("insurers"), + Button::create("🔹 Talk to our Service Executive")->value("service_executive"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path + ]); + switch ($answer->getValue()) { + case "insurers": + $data = ChatbotHelper::getInsurersList(); + log_message("error",'data: '.json_encode($data)); + $question = Question::create("Select an Insurer:"); + $page = $this->bot->userStorage()->get('insurer_page') ?? 0; + $perPage = 5; + $totalPages = ceil(count($data) / $perPage); + $insurersToShow = array_slice($data, $page * $perPage, $perPage); + + $buttons = []; + foreach ($insurersToShow as $insurer) { + $buttons[] = Button::create("🔹 " . $insurer['short_name'])->value($insurer['short_name']); + } + + // Add pagination buttons + if ($page > 0) { + $buttons[] = Button::create("⬅️ Previous")->value("previous_page"); + } + if (($page + 1) < $totalPages) { + $buttons[] = Button::create("➡️ Next")->value("next_page"); + } + + $question = Question::create("Choose an Insurer:") + ->addButtons($buttons); + + $this->bot->ask($question, function ($response) { + $selected = $response->getValue(); + + if ($selected == "previous_page") { + $this->bot->userStorage()->save(["insurer_page" => max(0, $this->bot->userStorage()->get('insurer_page') - 1)]); + $this->insurerOptions(); + } elseif ($selected == "next_page") { + $this->bot->userStorage()->save(["insurer_page" => $this->bot->userStorage()->get('insurer_page') + 1]); + $this->insurerOptions(); + } else { + $this->say("You selected: " . $selected); + } + }); + + break; + case "service_executive": + $this->bot->startConversation(new serviceExecutiveConversation()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->policyOptions(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/serviceExecutiveConversation.php b/app/Controllers/Chatbot/serviceExecutiveConversation.php index 64a3e842..72b678f8 100644 --- a/app/Controllers/Chatbot/serviceExecutiveConversation.php +++ b/app/Controllers/Chatbot/serviceExecutiveConversation.php @@ -18,7 +18,8 @@ class serviceExecutiveConversation extends Conversation protected function askServiceExecutive() { - $mobile = ChatbotHelper::getPhoneNumber(); // Assuming this fetches the user's phone number + $chat_session_info = get_chatbot_session_info(); + $mobile = ChatbotHelper::getPhoneNumber($chat_session_info); // Assuming this fetches the user's phone number $question = Question::create("Is this Your Mobile Number: $mobile") ->addButtons([ Button::create("✅ Yes")->value("yes"), @@ -27,6 +28,13 @@ class serviceExecutiveConversation extends Conversation ]); $this->bot->ask($question, function ($answer) { + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path + ]); switch ($answer->getValue()) { case "yes": $this->say("Our executive will call you at the earliest."); diff --git a/app/Controllers/Chatbot/twoWheelerOptionsConversations.php b/app/Controllers/Chatbot/twoWheelerOptionsConversations.php index 44c1f4da..c4359041 100644 --- a/app/Controllers/Chatbot/twoWheelerOptionsConversations.php +++ b/app/Controllers/Chatbot/twoWheelerOptionsConversations.php @@ -11,6 +11,11 @@ use App\Helpers\ChatbotHelper; class twoWheelerOptionsConversations extends Conversation { + protected $buttonsData = [ + "3p" => ["response_text" => "🔹 Third-Party"], + "comp" => ["response_text" => "🔹 Comprehensive"], + "go_back" => ["response_text" => "◀️ Go Back"] + ]; public function run() @@ -20,15 +25,35 @@ class twoWheelerOptionsConversations extends Conversation protected function show2WOptions() { - $question = Question::create("Choose Policy Type:") - ->addButtons([ - Button::create("🔹 Third-Party")->value("3p"), - Button::create("🔹 Comprehensive")->value("comp"), - Button::create("◀️ Go Back")->value("go_back"), + $buttons = []; + foreach ($this->buttonsData as $key => $data) { + $buttons[] = Button::create($data['response_text'])->value($key); + } + // $this->bot->userStorage()->save([ + // 'path' => [] + // ]); + $question = Question::create("Please choose an option:")->addButtons($buttons); + $temp = $this->buttonsData; + $this->bot->ask($question, function ($answer) use( $temp ){ + $user_reponse = $answer->getValue(); + if (isset($temp[$user_reponse])) { + $message = "You've chosen " . $temp[$user_reponse]['response_text']; + // $this->bot->say($message,,WebDriver::class); + $this->bot->reply($message); + } + + if (!$answer->isInteractiveMessageReply()) { + $user_reponse = null; + } + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path ]); - $this->bot->ask($question, function ($answer) { - switch ($answer->getValue()) { + switch ($user_reponse) { case "3p": // $cityName = $response->getText(); $this->bot->startConversation(new commonPolicyOptionConversations()); diff --git a/app/Controllers/Chatbot/vehicleFormConversation.php b/app/Controllers/Chatbot/vehicleFormConversation.php index aa80c550..3bcf39fd 100644 --- a/app/Controllers/Chatbot/vehicleFormConversation.php +++ b/app/Controllers/Chatbot/vehicleFormConversation.php @@ -2,9 +2,10 @@ namespace App\Controllers\Chatbot; -use BotMan\BotMan\Messages\Conversations\Conversation; +use App\Helpers\ChatbotHelper; use BotMan\BotMan\Messages\Outgoing\Question; use BotMan\BotMan\Messages\Outgoing\Actions\Button; +use BotMan\BotMan\Messages\Conversations\Conversation; class vehicleFormConversation extends Conversation { @@ -12,10 +13,19 @@ class vehicleFormConversation extends Conversation protected $vehicleYOM; protected $vehicleEngineNo; protected $vehicleInvoiceNo; + protected $userId; + protected $complied_information; + protected $fuelType; + protected $seater; + protected $chassisNumber; public function run() { - $this->askVehicleName(); + // Ensure $this->bot is properly initialized + // $user = $this->bot->getUser(); + // $this->userId = $user->getId(); // Correctly store user ID + + $this->askVehicleName(); // Start asking vehicle questions } protected function askVehicleName() @@ -26,6 +36,35 @@ class vehicleFormConversation extends Conversation $this->say('Vehicle Name Cannot be Empty'); return $this->askVehicleName(); // Re-ask if empty } + // $this->askVehicleYOM(); // Ask next question + $path = $this->bot->userStorage()->get('path'); + + if (in_array('4_wheeler', $path)) { + $this->askFuelType(); + } else { + $this->askVehicleYOM(); // Ask next question + } + }); + } + protected function askFuelType() + { + $this->ask('Enter Fuel Type of the Vehicle ?', function ($response) { + $this->fuelType = $response->getText(); + if (empty($this->fuelType)) { + $this->say('Vehicle Fuel Type Cannot be Empty'); + return $this->askFuelType(); // Re-ask if empty + } + $this->askSeating(); // Ask next question + }); + } + protected function askSeating() + { + $this->ask('Enter the seat count of the Vehicle ?', function ($response) { + $this->seater = $response->getText(); + if (empty($this->seater)) { + $this->say('Vehicle seat Cannot be Empty'); + return $this->askSeating(); // Re-ask if empty + } $this->askVehicleYOM(); // Ask next question }); } @@ -50,6 +89,26 @@ class vehicleFormConversation extends Conversation $this->say('Vehicle Engine Number Cannot be Empty'); return $this->askVehicleEngineNo(); // Re-ask if empty } + + // Retrieve 'path' from storage + $path = $this->bot->userStorage()->get('path'); + + if (in_array('4_wheeler', $path)) { + $this->askChassisNumber(); + } else { + $this->askVehicleInvoiceNo(); // Ask next question + } + // $this->askVehicleInvoiceNo(); + }); + } + protected function askChassisNumber() + { + $this->ask('Enter Chassis Number of the Vehicle ?', function ($response) { + $this->chassisNumber = $response->getText(); + if (empty($this->chassisNumber)) { + $this->say('Vehicle Chassis Number Cannot be Empty'); + return $this->askChassisNumber(); // Re-ask if empty + } $this->askVehicleInvoiceNo(); // Ask next question }); } @@ -68,16 +127,93 @@ class vehicleFormConversation extends Conversation protected function storeVehicleData() { - // Save all collected data to user storage - $this->bot->userStorage()->save([ + // Retrieve 'path' from storage + $path = $this->bot->userStorage()->get('path'); + // $this->say(json_encode($path)); + // Prepare vehicle details + $vehicleDetails = [ 'vehicle_name' => $this->vehicleName, 'vehicle_yom' => $this->vehicleYOM, 'vehicle_engine_no' => $this->vehicleEngineNo, - 'vehicle_invoice_no' => $this->vehicleInvoiceNo - ]); + $vehicleDetails['vehicle_invoice_no'] = $this->vehicleInvoiceNo + + ]; + + // Only store 'vehicle_invoice_no' if 'new_policy' is NOT in path + if (in_array('4_wheeler', $path)) { + $vehicleDetails['vehicle_fuelType'] = $this->fuelType; + $vehicleDetails['vehicle_seater'] = $this->seater; + $vehicleDetails['vehicle_chassisNo'] = $this->chassisNumber; + } + + // Save vehicle details + $this->bot->userStorage()->save(['vehicle_details' => $vehicleDetails]); + $alldata = $this->bot->userStorage()->all(); + $vehicle_details = $this->bot->userStorage()->get('vehicle_details'); + // Log stored data for debugging + // log_message('error', 'All Details: ' . json_encode($alldata)); + + // log_message('error', 'Updated Vehicle Details: ' . json_encode($vehicle_details)); $this->say('Vehicle Information Saved!'); - $this->bot->startConversation(new doYouWantToContinueConversation()); + $vehicleInfo = "🚗 **Vehicle Details:**
"; + $vehicleInfo .= "🔹 Name: " . $vehicle_details['vehicle_name'] . "
"; + $vehicleInfo .= "🔹 Year of Manufacture: " . $vehicle_details['vehicle_yom'] . "
"; + $vehicleInfo .= "🔹 Engine No: " . $vehicle_details['vehicle_engine_no'] . "
"; + + if (isset($vehicle_details['vehicle_fuelType'])) { + $vehicleInfo .= "🔹 Fuel Type: " . $vehicle_details['vehicle_fuelType'] . "
"; + $vehicleInfo .= "🔹 Seater: " . $vehicle_details['vehicle_seater'] . "
"; + $vehicleInfo .= "🔹 Chassis Number: " . $vehicle_details['vehicle_chassisNo'] . "
"; + } + $this->complied_information = $vehicleInfo; + // Send the message with vehicle details + $this->say($vehicleInfo); + $this->confirmVehicleDate($vehicleInfo); + + + // $this->bot->startConversation(new selectInsurerConversations()); + } + + protected function confirmVehicleDate($vehicle_info){ + $question = Question::create("Confim your Details:") + ->addButtons([ + Button::create("✅ Confirm")->value("confirm"), + Button::create("🔁 Start Over")->value("restart"), + Button::create("❌ Cancel")->value('cancel') + ]); + $this->bot->ask($question, function ($answer) use($vehicle_info) { + $path = $this->bot->userStorage()->get('path'); + array_push($path, + $answer->getValue() + ); + $this->bot->userStorage()->save([ + 'path' => $path + ]); + switch ($answer->getValue()) { + case "confirm": + // $cityName = $response->getText(); + $sent_staus = ChatbotHelper::sendQuotationRequestMail($vehicle_info); + if ($sent_staus){ + $this->say('Our Executive will contact you with the quotation soon.'); + $this->bot->startConversation(new doYouWantToContinueConversation()); + }else{ + $this->say("There was a problem while requesting for a quotation please try again later."); + } + break; + case "restart": + $this->bot->startConversation(new vehicleFormConversation()); + break; + case "cancel": + $this->say("Redirecting you to main menu..."); + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); } } diff --git a/app/Controllers/ChatbotControllerNew.php b/app/Controllers/ChatbotControllerNew.php index 4311a9bb..b68a9581 100644 --- a/app/Controllers/ChatbotControllerNew.php +++ b/app/Controllers/ChatbotControllerNew.php @@ -26,7 +26,7 @@ class ChatbotControllerNew extends BaseController $this->myLogger = \Config\Services::mylogger(); $this->session = \Config\Services::session(); - $this->myLogger->logme('error', 'CALLED'); + // $this->myLogger->logme('error', 'CALLED'); // Load BotMan driver DriverManager::loadDriver(WebDriver::class); @@ -46,28 +46,59 @@ class ChatbotControllerNew extends BaseController $extras = json_decode($extras); $router = service('router'); $method = $router->methodName(); - $this->myLogger->logme('error', $method); + // $this->myLogger->logme('error', $method); if (isset($extras) && $method == 'widget') { $extras = $extras->parameters; - $this->session->set('CHATBOT_USER_ID', $extras->employee_id); + $this->session->set('CHATBOT_EMP_ID', $extras->employee_id); + $this->session->set('CHATBOT_ORIGIN', $extras->origin); + $this->session->set('CHATBOT_EMP_CODE', $extras->emp_code); + $this->session->set('CHATBOT_CLIENT_ID', $extras->client_id); + $this->session->set('CHATBOT_CLIENT_BRANCH_ID', $extras->client_branch_id); + if($this->session->get('CHATBOT_RANDOM_USER_ID') == '') + { + $this->session->set('CHATBOT_RANDOM_USER_ID', '-'); + } } + $log_message = [ + 'CHATBOT_EMP_ID' => $this->session->get('CHATBOT_EMP_ID'), + 'CHATBOT_ORIGIN' => $this->session->get('CHATBOT_ORIGIN'), + 'CHATBOT_EMP_CODE' => $this->session->get('CHATBOT_EMP_CODE'), + 'CHATBOT_CLIENT_ID' => $this->session->get('CHATBOT_CLIENT_ID'), + 'CHATBOT_CLIENT_BRANCH_ID' => $this->session->get('CHATBOT_CLIENT_BRANCH_ID'), + 'CHATBOT_RANDOM_USER_ID' => $this->session->get('CHATBOT_RANDOM_USER_ID') + ]; - $this->myLogger->logme('error', $this->session->get('CHATBOT_USER_ID')); + $log_message = implode(' | ', array_map( + fn($key, $value) => "{$key}: {$value}", + array_keys($log_message), + $log_message + )); + + $this->myLogger->logme('error', $log_message); // print_rr(ChatbotHelper::getListOfPolicies());die(); } public function index() { + if($this->session->get('CHATBOT_RANDOM_USER_ID') == '-' || $this->session->get('CHATBOT_RANDOM_USER_ID') == '') + { + $user = $this->botman->getUser(); + $id = $user->getId(); + // $this->myLogger->logme('error', ('TEST' . $id)); + $this->session->set('CHATBOT_RANDOM_USER_ID', $id); + } + $this->botman->hears('.*', function ($bot) { + $bot->types(); // Typing indicator for the first message sleep(0.5); // Delay }); // Start the Main Menu when user says "hi" or "start" $this->botman->hears('start|hi|hello', function (BotMan $bot) { - $bot->reply('Hi how can i assit?'); + $bot->reply('Hi how can i assist?'); $bot->startConversation(new MainMenuConversation()); }); diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 6714a44d..ad575e27 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -44,8 +44,11 @@ use App\Controllers\EmpDataServiceController; use App\Controllers\GoogleDriveController; use App\Helpers\sendMailNotification; +use App\Models\PTCOShareDetailsModel; use App\Models\RFQModel; use App\Models\TicketMasterModel; +use SebastianBergmann\Type\NullType; +use Kint\Kint; class ClientController extends AdminController { @@ -170,37 +173,42 @@ class ClientController extends AdminController { $message = '

Request for Quotation (RFQ)

Dear {{RECIPIENT_NAME}},

We are reaching out to request a quotation for the following insurance coverage. Please review the details below and provide your quote at your earliest convenience.

RFQ Details

Client name{{CLIENT_NAME}}
Coverage Type{{POLICY_LONG_NAME}}
Policy Start Date{{POLICY_START_DATE}}
Policy Duration{{DURATION}}
Please note: Additional terms and details are included in the attachment for your reference.

Please feel free to reach out if you require any further information to prepare the quote. We look forward to receiving your proposal.

Best regards,

Nhance India Pvt Ltd

'; - $attachments = [ - ["filePath" => ROOTPATH."public/sample_excel/sample_addition.xls","fileName" => "sample_addition.xls"], - ["filePath" => ROOTPATH."public/sample_excel/sample_inception.xls","fileName" => "sample_inception.xls"], - ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"] - ]; - + // $attachments = [ + // ["filePath" => ROOTPATH."public/sample_excel/sample_addition.xls","fileName" => "sample_addition.xls"], + // ["filePath" => ROOTPATH."public/sample_excel/sample_inception.xls","fileName" => "sample_inception.xls"], + // ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"] + // ]; + $attachments = []; $res = MailHelper::send_email(['mail' => $email, 'subject' => 'Mail Via Attachment Testing URL', 'message' => $message,'attachments' => $attachments]); print_rr($res); echo '------------------------------------------------------------------------------------------'; - print_rr($attachments); + // print_rr($attachments); } //Function for Testing Member Review and Summery Confirmation Mail - public function testingForReviewMail($client_id = 77, $emp_code = 'EMP001-K1', $mail_active = 0) //this function for only tsesting some logics not use for business logic + public function testingForReviewMail($client_id = 77, $emp_code = 'EMP001-K1', $policy_id = "", $mail_active = 0) //this function for only tsesting some logics not use for business logic { - // dd($client_id, $emp_code, $mail_active); + // dd($client_id, $emp_code, $policy_id, $mail_active); - $client_policy_ids = $this->employeeModel - ->select('employee_polices.client_policy_id') - ->join('employee_polices', 'employees.id = employee_polices.employee_id') - ->where('employees.client_id', $client_id ) - ->where('employees.emp_code', $emp_code ) - ->where('employee_polices.is_active', 1 ) - ->where('employees.is_active', 1 ) - ->findAll(); + if(empty($policy_id)){ - $client_policy_ids2 = array_column($client_policy_ids, 'client_policy_id'); + $client_policy_ids = $this->employeeModel + ->select('employee_polices.client_policy_id') + ->join('employee_polices', 'employees.id = employee_polices.employee_id') + ->where('employees.client_id', $client_id ) + ->where('employees.emp_code', $emp_code ) + ->where('employee_polices.is_active', 1 ) + ->where('employees.is_active', 1 ) + ->findAll(); - $client_policy_id = array_unique($client_policy_ids2); + $client_policy_ids2 = array_column($client_policy_ids, 'client_policy_id'); + $client_policy_id = array_unique($client_policy_ids2); + + }else{ + $client_policy_id = json_decode($policy_id, true); + } // echo '
';
         // dd($client_policy_id);
@@ -256,7 +264,7 @@ class ClientController extends AdminController
                 $wholeData =sendMailNotification::sendMailNotification('member_review_and_summary_mail', $params);
                 // print_r($wholeData); die;
 
-                if($mail_active > 0){
+                if($mail_active == 1){
                     $mail_send_return =  MailHelper::send_email($wholeData[0]);
                     $this->myLogger->logme("info", $mail_send_return);
                 }
@@ -321,19 +329,29 @@ class ClientController extends AdminController
     }
 
     //Function for Send Member Review and Summery Confirmation Mail
-    public function sendMemberReviewConfirmationMail($client_id = 77, $emp_code = 'EMP001-K1', $mail_active = 0)
+    public function sendMemberReviewConfirmationMail($client_id = 77, $emp_code = 'EMP001-K1', $policy_id = "", $mail_active = 0)
     {
-        $client_policy_ids = $this->employeeModel
-            ->select('employee_polices.client_policy_id')
-            ->join('employee_polices', 'employees.id = employee_polices.employee_id')
-            ->where('employees.client_id', $client_id)
-            ->where('employees.emp_code', $emp_code)
-            ->where('employee_polices.is_active', 1)
-            ->where('employees.is_active', 1)
-            ->findAll();
-    
-        $client_policy_ids2 = array_column($client_policy_ids, 'client_policy_id');
-        $client_policy_id = array_unique($client_policy_ids2);
+        // dd($client_id, $emp_code, $policy_id, $mail_active);
+
+        if(empty($policy_id)){
+
+            $client_policy_ids = $this->employeeModel
+                                ->select('employee_polices.client_policy_id')
+                                ->join('employee_polices', 'employees.id = employee_polices.employee_id')
+                                ->where('employees.client_id', $client_id ) 
+                                ->where('employees.emp_code', $emp_code )
+                                ->where('employee_polices.is_active', 1 )
+                                ->where('employees.is_active', 1 )
+                                ->findAll();
+
+            $client_policy_ids2 = array_column($client_policy_ids, 'client_policy_id');
+            $client_policy_id = array_unique($client_policy_ids2);
+
+        }else{
+            $client_policy_id = json_decode($policy_id, true);
+        }
+
+        // dd($client_policy_id);
     
         if (!is_null($client_policy_id) && is_array($client_policy_id)) {
 
@@ -393,8 +411,9 @@ class ClientController extends AdminController
     
                 $wholeData = sendMailNotification::sendMailNotification('member_review_and_summary_mail', $params);
     
-                if ($mail_active > 0) {
+                if ($mail_active == 0) {
 
+                    // $mail_send_result = [];
                     $mail_send_result = MailHelper::send_email($wholeData[0]);
     
                     if ($mail_send_result['status'] === 'success') {
@@ -641,7 +660,7 @@ class ClientController extends AdminController
         $data['clientData'] = $this->clientPolicyModel->getClientById($clientId);
         $data['deposiamount'] = $this->clientPolicyModel->getDepositSummary($clientId, $insurerId);
 
-        // dd($data['insurerName']);
+        // dd($data);
 
         // print_r($data['depositdata'] );die;
         // Load the view for the new list page;
@@ -657,25 +676,31 @@ class ClientController extends AdminController
 
         $client_id = $this->request->getPost('client_id');
         $insurer_id = $this->request->getPost('insurer_id');
+        $record_date = $this->request->getPost('record_date');
 
         $CD_Account_Number = $this->CDMasterModel
             ->where('client_id', $client_id)
             ->where('insurer_id', $insurer_id)
             ->first();
-
         // Prepare the array with data
+        $date = \DateTime::createFromFormat('d/m/Y', $record_date);
+        $record_date = $date->format('Y-m-d');
         $data = [
             'amount' => $this->request->getPost('amount'),
             'sub_type_id' => $this->request->getPost('sub_type_id'),
             'client_id' => $this->request->getPost('client_id'),
             'client_policy_id' => null,
             'cd_ac_no' => $CD_Account_Number['cd_ac_no'] ?? null,
+            'cd_ac_pk' => $CD_Account_Number['id'] ?? null,
             'endorsement_no' => null,
             'insurer_id' => $this->request->getPost('insurer_id'),
             'description' => $this->request->getPost('description'),
             'transaction_type' => $this->request->getPost('transaction_type') ?: 'Credit',
             'updated_by' => 1,
+            'record_date' => $record_date
         ];
+        // log_message('error','data for insert'.json_encode($data));die();
+        // print_rr($data);die();
 
 
         // Call the saveDeposit function from DepositHelper
@@ -1979,6 +2004,13 @@ class ClientController extends AdminController
                 ->findAll();
             $client_policy_list = $this->clientPolicyModel->getPolicyTypeForPolicyBinding($client_id);
             $cd_data = $this->CDMasterModel->where('client_id', $client_id)->where('insurer_id', $insurer_id)->findAll();
+            $client_policy_data['policy_end_date'] = date('d/m/Y', strtotime($client_policy_data['policy_end_date']));
+            $fromDate = $client_policy_data['policy_end_date'];
+            $date = \DateTime::createFromFormat('d/m/Y', $fromDate);
+            $date->modify('+1 year');
+            $newDate = $date->format('d/m/Y');
+
+            // print_rr($client_policy_data['policy_end_date']);die();
 
             return $this->respond([
                 'status' => true,
@@ -1987,7 +2019,8 @@ class ClientController extends AdminController
                 'cd_data' => $cd_data,
                 "insurer_id" => $client_policy_data['insurer_id'],
                 'policy' => $polices,
-                'client_policy_list' =>  $client_policy_list
+                'client_policy_list' =>  $client_policy_list,
+                'end_date'  => $newDate
             ], 200);
         } else {
             return $this->respond(['status' => false, 'code' => 404, 'message' => 'no data found'], 200);
@@ -3806,6 +3839,8 @@ class ClientController extends AdminController
                 continue;
             }
 
+            // dd($policyTerms);
+
             $is_addon = $data[$i]['is_addon'];
 
             $payable_arr = [];
@@ -3828,7 +3863,7 @@ class ClientController extends AdminController
             if(in_array($data[$i]['policy_type_id'], [2,3,4,5])){
 
                 // Set default value of copayzonewisecopay to "empty"
-                $ans = isset($policyTerms['copayzonewisecopay']) ? $policyTerms['copayzonewisecopay'] : 'empty';
+                // $ans = isset($policyTerms['copayzonewisecopay']) ? $policyTerms['copayzonewisecopay'] : 'empty';
 
                 // add is_payable_employee for the GMC Policy
                 if (isset($policyTerms['age_ratio'])) {
@@ -3842,31 +3877,31 @@ class ClientController extends AdminController
                     }
                 }
 
-                // Add copayzonewisecopay and copayzonewisecopaydata if they exist_
-                if (isset($policyTerms['copayzonewisecopay'])) {
+                // // Add copayzonewisecopay and copayzonewisecopaydata if they exist_
+                // if (isset($policyTerms['copayzonewisecopay'])) {
 
-                    if(!isset($policyTerms['co_pay_details'])){
+                //     if(!isset($policyTerms['co_pay_details'])){
 
-                        $co_pay_details_value = "";
-                        if (strtolower($ans) == "nil" || $ans == 0) {
-                            $policyTerms['copayzonewisecopay'] = 0;
-                            $co_pay_details_value = "";
-                        } elseif ($ans != 'empty' && $ans !== 'Nil' && $ans !== null && $ans != '' && $ans != 0) {
-                            $policyTerms['copayzonewisecopay'] = 1;
-                            $co_pay_details_value = $ans;
-                        }
+                //         $co_pay_details_value = "";
+                //         if (strtolower($ans) == "nil" || $ans == 0) {
+                //             $policyTerms['copayzonewisecopay'] = 0;
+                //             $co_pay_details_value = "";
+                //         } elseif ($ans != 'empty' && $ans !== 'Nil' && $ans !== null && $ans != '' && $ans != 0) {
+                //             $policyTerms['copayzonewisecopay'] = 1;
+                //             $co_pay_details_value = $ans;
+                //         }
 
-                        $co_pay_index = array_search('copayzonewisecopay', array_keys($policyTerms));
-                        $orderedPolicyTerms[] = [
-                            "key" => "co_pay_details",
-                            "value" =>  $co_pay_details_value,
-                            "position" => $co_pay_index + 2,
-                        ];
+                //         $co_pay_index = array_search('copayzonewisecopay', array_keys($policyTerms));
+                //         $orderedPolicyTerms[] = [
+                //             "key" => "co_pay_details",
+                //             "value" =>  $co_pay_details_value,
+                //             "position" => $co_pay_index + 2,
+                //         ];
 
-                        unset($policyTerms['optionalparentalcopay']);
+                //         unset($policyTerms['optionalparentalcopay']);
 
-                    }
-                }
+                //     }
+                // }
 
                 // Add ailmentcapping and ailmentcappingdata if they exist
                 if (isset($policyTerms['ailmentcapping'])) {
@@ -3875,7 +3910,7 @@ class ClientController extends AdminController
                         $orderedPolicyTerms[] = [
                             "key" => "ailment_capping_details",
                             "value" => "",
-                            "position" => $aliment_index + 3,
+                            "position" => $aliment_index + 2,
                         ];
                     }
                 }
@@ -3909,8 +3944,6 @@ class ClientController extends AdminController
 
             }
 
-
-
             foreach ($orderedPolicyTerms as $term) {
                 $position = $term['position'];
                 $key = $term['key'];
@@ -3922,8 +3955,117 @@ class ClientController extends AdminController
                 );
             }
 
+            if(in_array($data[$i]['policy_type_id'], [2,3,4,5])){
+
+                if (!isset($policyTerms['waiver_of_90_days_waiting_period'])) {
+                    $policyTerms['waiver_of_90_days_waiting_period'] = "";
+                }
+                
+                if (!isset($policyTerms['waiver_of_other_waiting_periods'])) {
+                    $policyTerms['waiver_of_other_waiting_periods'] = "";
+                }
+
+                if (!isset($policyTerms['maternity_benefit'])) {
+                    $policyTerms['maternity_benefit'] = "";
+                }
+                
+                if (!isset($policyTerms['well_baby_well_mother_expenses'])) {
+                    $policyTerms['well_baby_well_mother_expenses'] = "";
+                }
+
+                if (!isset($policyTerms['icu_limit'])) {
+                    $policyTerms['icu_limit'] = "";
+                }
+
+                if (!isset($policyTerms['infertility_treatment_coverage'])) {
+                    $policyTerms['infertility_treatment_coverage'] = "";
+                }
+
+                if (!isset($policyTerms['mid_term_addition_of_new_born_newly_wedded_spouse'])) {
+                    $policyTerms['mid_term_addition_of_new_born_newly_wedded_spouse'] = "";
+                }
+
+                if (!isset($policyTerms['non_admissible_contingency_corporate_buffer'])) {
+                    $policyTerms['non_admissible_contingency_corporate_buffer'] = "";
+                }
+
+                if (!isset($policyTerms['terrorism'])) {
+                    $policyTerms['terrorism'] = "";
+                }
+
+                if (!isset($policyTerms['widower_cover'])) {
+                    $policyTerms['widower_cover'] = "";
+                }
+                
+                if (!isset($policyTerms['breavement_cover'])) {
+                    $policyTerms['breavement_cover'] = "";
+                }
+                
+                if (!isset($policyTerms['enrollment_display_key'])) {
+                    $policyTerms['enrollment_display_key'] = [];
+                }
+
+            } else if($data[$i]['policy_type_id'] == 1){
+
+                if (!isset($policyTerms['medical_expenses_medical_extension'])) {
+                    $policyTerms['medical_expenses_medical_extension'] = "";
+                }
+                
+                if (!isset($policyTerms['opd_treatment_cover'])) {
+                    $policyTerms['opd_treatment_cover'] = "";
+                }
+                
+                if (!isset($policyTerms['repatriation_of_mortal_remains'])) {
+                    $policyTerms['repatriation_of_mortal_remains'] = "";
+                }
+                
+                if (!isset($policyTerms['family_transportation_benefits'])) {
+                    $policyTerms['family_transportation_benefits'] = "";
+                }
+                
+                if (!isset($policyTerms['fractures_dislocation_burns'])) {
+                    $policyTerms['fractures_dislocation_burns'] = "";
+                }
+                
+                if (!isset($policyTerms['coma'])) {
+                    $policyTerms['coma'] = "";
+                }
+                
+                if (!isset($policyTerms['travel_expenses_for_medical_treatment'])) {
+                    $policyTerms['travel_expenses_for_medical_treatment'] = "";
+                }
+                
+                if (!isset($policyTerms['daily_cash_allowance'])) {
+                    $policyTerms['daily_cash_allowance'] = "";
+                }
+                
+                if (!isset($policyTerms['artifical_limb_and_prosthesis'])) {
+                    $policyTerms['artifical_limb_and_prosthesis'] = "";
+                }
+                
+                if (!isset($policyTerms['air_ambulance'])) {
+                    $policyTerms['air_ambulance'] = "";
+                }
+                                
+                if (!isset($policyTerms['enrollment_display_key'])) {
+                    $policyTerms['enrollment_display_key'] = [];
+                }
+                
+            }
+
+            foreach ($policyTerms as $key => $term) {
+                if ($term == "0") {
+                    $policyTerms[$key] = "No";  // Use = for assignment
+                } elseif ($term == "1") {
+                    $policyTerms[$key] = "Yes"; // Use = for assignment
+                }
+            }
+            
+
+            // dd($policyTerms);
             // Re-encode the ordered policy terms
             $updatedPolicyTerms = json_encode($policyTerms);
+            // dd($updatedPolicyTerms);
 
             // dd($orderedPolicyTerms, $updatedPolicyTerms);
             $this->clientPolicyModel->update($data[$i]['id'], ['policy_terms' => $updatedPolicyTerms]);
@@ -3956,12 +4098,17 @@ class ClientController extends AdminController
 
     public function sendextraparam()
     {   
+
+        // $employeeController = new EmployeeController();
+        // $employeeController->truncateFileData('633');
         
         // ---------- EMP SERVICE CONTROLLER --------------------------------------------------------------------------------
 
         $employeeRestController = new EmployeeServiceController();
         // $employeeRestController->excelFileDataValidation(['file_id' => 823]);
-        // $employeeRestController->employeesOnboardPreprocess(['file_id' => 823]);
+        // $employeeRestController->employeesOnboardPreprocess(['file_id' => 644]);
+        // $employeeRestController->employeesOnboardProcess(['file_id' => 835]);
+        // $employeeRestController->employeesEnrollmentInsert(['file_id' => 836]);
         // $r = Jobs::addJob(['job_name' => 'employeesEnrollmentInsert','payload' => ['file_id' => 721]]);
 
 
@@ -4321,4 +4468,458 @@ class ClientController extends AdminController
     }
 
 
+    // -----------------------------------------------------------------------------------------------------
+
+
+
+    // private function preparePolicyData($renewalData)
+    // {   
+    //     $data = [
+    //         'issuer' => $renewalData['issuer_type_id'],
+    //         'client_id' => $renewalData['client_id'],
+    //         'client_branch_id' => $renewalData['branch_id'] ?? null,
+    //         'vehicle_id' => $renewalData['vehicle_id'],
+    //         'insurer_id' => $renewalData['insurer_id'],
+    //         'insurer_branch_id' => $renewalData['insurer_branch_id'],
+    //         'policy_type_id' => $renewalData['policy_type_id'],
+    //         'client_policy_id' => $renewalData['client_policy_id'] ?? null,
+    //         'policy_no' => $renewalData['policy_no'],
+    //         'policy_issue_date' => $renewalData['date_date_of_issue'],
+    //         'policy_start_date' => $renewalData['date_policy_start_date'],
+    //         'policy_end_date' => $renewalData['date_policy_end_date'],
+    //         'policy_holder_name' => $renewalData['insured'],
+    //         'status' => 'completed',
+    //         'is_active' => 1,
+    //         'tsi' => '500000',
+    //         'month' => '2025-02-01',
+    //         'ct_type' => 1,
+    //         'cd_ac_pk' => $renewalData['cd_ac_pk'] ?? null,
+    //     ];
+
+    //     $policyTransactionModel = new PolicyTransactionModel();
+    //     return $policyTransactionModel->insert($data);
+    // }
+
+    // private function prepareVehicleData($renewalData)
+    // {   
+    //     $vehicleData = [
+    //         'vehicle_no' => $renewalData['veh_no'],
+    //         'owner' => $renewalData['client_id'],
+    //         'branch_id' => ($renewalData['client_type_id'] == 1) ? $renewalData['branch_id'] : null,
+    //     ];
+
+    //     $vehicleModel = new VehicleModel();
+    //     return $vehicleModel->insert($vehicleData);
+    // }
+
+    // private function preparePtCoShareDetails($renewalData)
+    // {   
+    //     $ptCoShareDetails = [
+    //         'pt_id' => $renewalData['pt_id'],
+    //         'insurer_id' => $renewalData['insurer_id'],
+    //         'insurer_branch_id' => $renewalData['insurer_branch_id'],
+    //         'co_share_type' => 0,
+    //         'co_share_per' => 0.00,
+    //         'bp_amt' => 0.00,
+    //         'tp_amt' => 0.00,
+    //         'tep_amt' => 0.00,
+    //         'follower_policy_no' => $renewalData['policy_no'],
+    //     ];
+
+    //     $ptCoShareDetailsModel = new PTCOShareDetailsModel();
+    //     return $ptCoShareDetailsModel->insert($ptCoShareDetails);
+    // }
+
+    // private function prepareClientPolicy($renewalData)
+    // {
+    //     $clientPolicy = [
+    //         'client_id' => $renewalData['client_id'],
+    //         'client_branch_id' => $renewalData['branch_id'],
+    //         'policy_type_id' => $renewalData['policy_type_id'],
+    //         'insurer_id' => $renewalData['insurer_id'],
+    //         'insurer_branch_id' => $renewalData['insurer_branch_id'],
+    //         'policy_no' => $renewalData['policy_no'],
+    //         'policy_start_date' => $renewalData['date_policy_start_date'],
+    //         'policy_end_date' => $renewalData['date_policy_end_date'],
+    //         'policy_status' => 1,
+    //         'gst' => 18.00,
+    //         'cd_ac_pk' => $renewalData['cd_ac_pk'],
+    //     ];
+
+    //     $clientPolicyModel = new ClientPolicyModel();
+    //     return $clientPolicyModel->insert($clientPolicy);
+    // }
+
+    public function updateRenewalData()
+    {
+        $db = db_connect();
+        $renewalData = $db->table('old_renewal_data_copy')
+        ->where('client_id IS NOT NULL')
+        ->where('is_inserted != 1')
+        ->get()
+        ->getResultArray();
+        // dd($renewalData);
+
+        $successData = [];
+        foreach ($renewalData as $key => $value) {
+            // Get branch_id properly
+            $branch = $this->clientBranchModel->where('client_id', $value['client_id'] ?? 0)->first();
+            // kint::dump($branch);
+            $value['branch_id'] = $branch['id'] ?? null;
+
+            // Fix vehicle_id key (previously "vehicel_id")
+            $value['vehicle_id'] = null;
+            if ($value['policy_type_id'] == 8 && !empty($value['policy_type_id'])) {
+                $value['vehicle_id'] = $this->prepareVehicleData($value);
+            }
+
+            // Process client policy, policy transaction, and co-share details
+            $value['client_policy_id'] = $this->prepareClientPolicy($value);
+            $value['pt_id'] = $this->preparePolicyData($value);
+            $value['pt_co_id'] = $this->preparePtCoShareDetails($value);
+
+            // Update is_inserted field in DB
+            $db->table('old_renewal_data_copy')
+            ->where('id', $value['id'])
+            ->set(['is_inserted' => 1])
+                ->update();
+
+            $successData[] = ['id' => $value['id'], 'client' => $value['insured']];
+        }
+
+        kint::dump($successData);
+    }   
+    
+    public function updateRenewalDataNotExistingClient()
+    {   
+        $limit = $this->request->getGet('limit') ?? 10;
+        $group = $this->request->getGet('group') ?? 2;
+        $db = db_connect();
+        $renewalData = $db->table('old_renewal_data_copy')
+        ->where('client_id IS NULL')
+        ->where('is_inserted = 0')
+        ->where('client_type_id', $group)
+        // ->limit($limit)
+        ->get()
+        ->getResultArray();
+        // dd($renewalData);
+
+        $successData = [];
+        foreach ($renewalData as $key => $value) {
+
+            $client_data = $this->clientModel->where('client_name', $value['insured'])->where('is_active', 1)->first();
+            if(!empty($client_data)){
+                $branch = $this->clientBranchModel->where('client_id', $client_data['id'] ?? 0)->first();
+                $value['branch_id'] = $branch['id'] ?? null;
+                $value['client_id'] = $client_data['id'] ?? null;
+            }else{
+                $value['client_id'] = $this->prepareClient($value);
+                if($value['client_type_id'] == 1){
+                    $value['branch_id'] = $this->prepareClientBranch($value);
+                }
+            }
+
+            // Fix vehicle_id key (previously "vehicel_id")
+            if ($value['policy_type_id'] == 8 && !empty($value['policy_type_id'])) {
+                $value['vehicle_id'] = $this->prepareVehicleData($value);
+            }else{
+                $value['vehicle_id'] = 0;
+            }
+
+            // Process client policy, policy transaction, and co-share details
+            $value['client_policy_id'] = $this->prepareClientPolicy($value);
+            $value['pt_id'] = $this->preparePolicyData($value);
+            $value['pt_co_id'] = $this->preparePtCoShareDetails($value);
+
+            // Update is_inserted field in DB
+            $db->table('old_renewal_data_copy')
+            ->where('id', $value['id'])
+            ->set(['is_inserted' => 1])
+                ->update();
+
+            $successData[] = ['id' => $value['id'], 'client' => $value['insured'], 'vehicle_id' => $value['vehicle_id']];
+        }
+
+        kint::dump($successData);
+    }
+
+    private function preparePolicyData($renewalData)
+    {
+        $data = [
+            'issuer' => $renewalData['issuer_type_id'] ?? null,
+            'client_id' => $renewalData['client_id'] ?? null,
+            'client_branch_id' =>  $renewalData['branch_id'] ?? 0,
+            'vehicle_id' => $renewalData['vehicle_id'] ?? null,
+            'insurer_id' => $renewalData['insurer_id'] ?? null,
+            'insurer_branch_id' => $renewalData['insurer_branch_id'],
+            'tpa_id' => null,
+            'tpa_branch_id' => null,
+            'policy_type_id' => $renewalData['policy_type_id'] ?? null,
+            'client_policy_id' => $renewalData['client_policy_id'] ?? null,
+            'issue_type' => 1,
+            'source_client_policy_id' => null,
+            'policy_no' => $renewalData['policy_no'] ?? null,
+            'cd_ac_no' => null,
+            'policy_issue_date' => $renewalData['date_date_of_issue'],
+            'policy_start_date' => $renewalData['date_policy_start_date'],
+            'policy_end_date' => $renewalData['date_policy_end_date'],
+            'action_type' => 'inception',
+            'endorsement_no' => null,
+            'data_received_date' => null,
+            'closure_date' => null,
+            'emp_count' => null,
+            'dependent_count' => null,
+            'revenue_type' => $renewalData['revenue_type'] ?? null,
+            'co_share' => 0,
+            'pre_payable_by' => 1,
+            'bro_payable_by' => 1,
+            'tsi' => '500000',
+            'status' => 'completed',
+            'ct_status' => 0,
+            'is_active' => 1,
+            'co_broking_status' => null,
+            'installment' => 0,
+            'installment_data' => null,
+            'location' => null,
+            'links' => null,
+            'stage' => null,
+            'etat' => null,
+            'etat_band' => null,
+            'edate' => null,
+            'renewal_date' => null,
+            'rollover_date' => null,
+            'policy_holder_name' => $renewalData['insured'],
+            'same_as_proposer' => 1, // 1 - Yes, 0 - No
+            'ref' => $renewalData['ref'],
+            'spl' => null,
+            'fund_received' => null,
+            'listed_insurers' => null,
+            'ppteam' => null,
+            'endorse_eff_date' => null,
+            'month' => '2025-02-01',
+            'sales_generated_by' => null,
+            'serviced_by' => null,
+            'ct_type' => 1,
+            'ct_tran_id' => null,
+            'remarks' => null,
+            'cd_ac_pk' => $renewalData['cd_ac_pk'] ?? null,
+            'install_due_date' => null,
+            'policy_with_corr' => 0
+        ];
+
+        // kint::dump($data);
+        // dd($data);
+        $policyTransactionModel = new PolicyTransactionModel();
+        $id = $policyTransactionModel->insert($data);
+        return $id;
+    }
+
+    private function prepareVehicleData($renewalData)
+    {   
+        $VehicleModel = new VehicleModel();
+
+        if ($renewalData['client_type_id'] == 1) {
+            $veh_no = explode(" ", $renewalData['insured'])[0] . "_veh_no";
+        } else {
+            $veh_no = $renewalData['insured'] . "_veh_no";
+        }
+        
+        $vehicleData = $VehicleModel->where('owner', $renewalData['client_id'])
+                                          ->where('is_active', 1)
+                                          ->findAll();
+        
+        if (!empty($vehicleData)) {
+            $increment = count($vehicleData);
+            $veh_no = $increment . "_" . $veh_no;
+        }
+        
+
+        $vehicleData = [
+            'vehicle_no' => $veh_no,
+            'type' => null,
+            'description' => null,
+            'owner' => $renewalData['client_id'], // client_id
+            'branch_id' => $renewalData['client_type_id'] == 1 ? $renewalData['branch_id'] : 0, // client_branch_id
+            'old_owner' => null,
+            'rc' => null,
+        ];
+
+        // dd($vehicleData);
+        $id = $VehicleModel->insert($vehicleData);
+        return $id;
+    }
+
+    private function preparePtCoShareDetails($renewalData)
+    {
+        $pt_co_share_details = [
+
+            'pt_id' => $renewalData['pt_id'],
+            'insurer_id' => $renewalData['insurer_id'],
+            'insurer_branch_id' => $renewalData['insurer_branch_id'],
+            'co_share_type' => 0,
+            'co_share_per' => 0.00,
+            'bp_amt' => 0.00,
+            'bp_gst_amt' => 0.00,
+            'bp_igst' => 0,
+            'bp_sgst' => 0,
+            'bp_cgst' => 0,
+            'tp_amt' => 0.00,
+            'tp_gst_amt' => 0.00,
+            'tp_igst' => 0.00,
+            'tp_sgst' => 0.00,
+            'tp_cgst' => 0.00,
+            'tep_amt' => 0.00,
+            'tep_gst_amt' => 0.00,
+            'tep_igst' => 0.00,
+            'tep_sgst' => 0.00,
+            'tep_cgst' => 0.00,
+            'agreed_amt' => 0.00,
+            'agreed_bp_per' => 0.00,
+            'agreed_tp_per' => 0.00,
+            'agreed_tep_per' => 0.00,
+            'standerd_bp_per' => 0.00,
+            'standerd_tp_per' => 0.00,
+            'standerd_tep_per' => 0.00,
+            'actual_bp_amt' => 0.00,
+            'actual_tp_amt' => 0.00,
+            'actual_tep_amt' => 0.00,
+            'actual_bp_per' => 0.00,
+            'actual_tp_per' => 0.00,
+            'actual_tep_per' => 0.00,
+            'actual_bp_brokerage_amt' => 0.00,
+            'actual_tp_brokerage_amt' => 0.00,
+            'actual_tep_brokerage_amt' => 0.00,
+            'reward' => 0.00,
+            'exp_amt' => 0.00,
+            'variance' => 0.00,
+            'remark' => null,
+            'cd_ac_no' => null,
+            'amount' => 0.00,
+            'stamp_duty' => 0.00,
+            'gst_type' => 0,
+            'cop_amt' => 0.00,
+            'statement_id' => 0,
+            'follower_policy_no' => $renewalData['policy_no'],
+            'non_comm_per_amt' => 0.00
+        ];
+
+        $PTCOShareDetailsModel = new PTCOShareDetailsModel();
+        $id = $PTCOShareDetailsModel->insert($pt_co_share_details);
+        return $id;
+    }
+
+    private function prepareClientPolicy($renewalData)
+    {
+        $client_policy = [
+            'client_id' => $renewalData['client_id'],
+            'client_branch_id' => $renewalData['branch_id'] ?? 0,
+            'policy_type_id' => $renewalData['policy_type_id'],
+            'insurer_id' => $renewalData['insurer_id'],
+            'insurer_branch_id' => $renewalData['insurer_branch_id'],
+            'tpa_id' => null,
+            'tpa_branch_id' => null,
+            'policy_start_date' => $renewalData['date_policy_start_date'],
+            'policy_end_date' => $renewalData['date_policy_end_date'],
+            'policy_no' => $renewalData['policy_no'],
+            'cd_ac_no' => null,
+            'policy_status' => 1,
+            'policy_terms' => null,
+            'is_addon' => 1,
+            'base_policy' => null,
+            'inception_type' => 1,
+            'open_for_enrollment' => 0,
+            'gst' => 18.00,
+            'enrolment_visibility' => 1,
+            'open_date' => null,
+            'close_date' => null,
+            'reminder_date' => null,
+            'disclaimer' => null,
+            'is_member_modify_allowed' => 0,
+            'cd_ac_pk' => $renewalData['cd_ac_pk'],
+            'is_lgbtq' => 0
+        ];
+
+        $ClientPolicyModel = new ClientPolicyModel();
+        $id = $ClientPolicyModel->insert($client_policy);
+        return $id;
+    }
+
+    private function prepareClientBranch($renewalData)
+    {   
+        $branch_code = "BRANCH001";
+        $short_name = explode(" ", $renewalData['insured'])[0];
+        $unit = $short_name . " - " . $branch_code;
+
+        $clientBranchData = [
+            'client_id' => $renewalData['client_id'],
+            'branch_name' => "Branch 1",
+            'branch_code' => $branch_code,
+            'city' => null,
+            'district' => null,
+            'state' => null,
+            'pincode' => null,
+            'address1' => null,
+            'address2' => null,
+            'gst' => null,
+            'sez' => 0, 
+            'is_active' => 1, 
+            'units' => $unit
+        ];
+        
+
+        $ClientBranchModel = new ClientBranchModel();
+        $id = $ClientBranchModel->insert($clientBranchData);
+        return $id;
+    }
+
+    private function prepareClient($renewalData)
+    {   
+
+        if($renewalData['client_type_id'] == 1){
+            $short_name = explode(" ", $renewalData['insured'])[0];
+        }else{
+            $short_name = $renewalData['insured'];
+        }
+
+        $clientData = [
+            'client_type' => $renewalData['client_type_id'],
+            'entity_type_id' => null,
+            'client_name' => $renewalData['insured'],
+            'short_name' => $short_name,
+            'cost_center' => null,
+            'client_code' => null, // Auto-generated
+            'pan' => null,
+            'gst' => null,
+            'address1' => null,
+            'address2' => null,
+            'city' => null,
+            'state' => null,
+            'pincode' => null,
+            'is_download_btn' => 0, // Assuming a default value if not specified
+            'client_logo' => null,
+            'created_by' => null,
+            'created_at' => null, // Will be set automatically by MySQL
+            'updated_by' => null,
+            'updated_at' => null, // Will be set automatically by MySQL
+            'is_active' => 1, // Default value is 1
+            'common_mails' => null,
+            'hr_mails' => null,
+            'mail_domain' => null,
+            'reply_to' => null,
+            'dob' => null,
+            'aadhar' => null,
+            'reference' => null,
+            'phone' => null,
+            'email' => null,
+            'addon_subheading' => null
+        ];
+        
+        
+
+        $ClientModel = new ClientModel();
+        $id = $ClientModel->insert($clientData);
+        return $id;
+    }
+    
+
 }
diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php
index b2190254..76d44b73 100755
--- a/app/Controllers/EmpDataServiceController.php
+++ b/app/Controllers/EmpDataServiceController.php
@@ -951,7 +951,7 @@ class EmpDataServiceController extends BaseController
 
         if(empty($additionData) && empty($deletionData) && empty($inceptionData) && empty($correctionData) && empty($enhancementData) && empty($dependentAdditionData)){
            
-            return 0;
+            return false;
         }
 
         //for cd tranction and cd master data is empty check
@@ -975,7 +975,7 @@ class EmpDataServiceController extends BaseController
                 $balance = $this->CDMasterModel
                     ->where('client_id', $export_data['client_id'])
                     ->where('insurer_id', $policy_details['insurer_id'])
-                    ->where('cd_ac_no', $policy_details['cd_ac_no'])
+                    ->where('id', $policy_details['cd_ac_pk'])
                     ->first();
 
                 $cash_balance['balance'] = $balance['opening_bal'];
@@ -1011,14 +1011,33 @@ class EmpDataServiceController extends BaseController
         // dd($inceptionData, $additionData, $dependentAdditionData, $correctionData, $enhancementData,  $deletionData, $mergedData);
 
 
-        $template_json = $this->clientPolicyModel
-            ->select('insurer_excel_export_template.jsoncolumns')
-            ->join('insurer_excel_export_template', 'insurer_excel_export_template.insurer_id = client_policy.insurer_id and insurer_excel_export_template.policy_type_id = client_policy.policy_type_id')
-            ->where('client_policy.id', $export_data['client_policy_id'])
-            ->where('insurer_excel_export_template.event_name', 'all')
-            ->where('insurer_excel_export_template.is_active', 1) //Live issue changes 17-10-2024
-            ->where('insurer_excel_export_template.type_name', $export_data['actions'])
-            ->first();
+        // $template_json = $this->clientPolicyModel
+        //     ->select('insurer_excel_export_template.jsoncolumns')
+        //     ->join('insurer_excel_export_template', 'insurer_excel_export_template.insurer_id = client_policy.insurer_id and insurer_excel_export_template.policy_type_id = client_policy.policy_type_id')
+        //     ->where('client_policy.id', $export_data['client_policy_id'])
+        //     ->where('insurer_excel_export_template.event_name', 'all')
+        //     ->where('insurer_excel_export_template.is_active', 1) //Live issue changes 17-10-2024
+        //     ->where('insurer_excel_export_template.type_name', $export_data['actions'])
+        //     ->first();
+
+        $sql = "
+            SELECT `insurer_excel_export_template`.`jsoncolumns`
+            FROM `client_policy`
+            JOIN `insurer_excel_export_template` 
+            ON `insurer_excel_export_template`.`insurer_id` = `client_policy`.`insurer_id`
+            AND `insurer_excel_export_template`.`policy_type_id` = 
+                CASE 
+                    WHEN `client_policy`.`policy_type_id` IN (2, 3, 4, 5) THEN 2
+                    ELSE `client_policy`.`policy_type_id`
+                END
+            WHERE `client_policy`.`id` = '".$export_data['client_policy_id']."'
+            AND `insurer_excel_export_template`.`event_name` = 'all'
+            AND `insurer_excel_export_template`.`is_active` = 1
+            AND `insurer_excel_export_template`.`type_name` = '".$export_data['actions']."'
+            LIMIT 1";
+        
+        $query = db_connect()->query($sql);
+        $template_json = $query->getRowArray();
 
 
         if(!empty($template_json) && $template_json != null){
@@ -1829,7 +1848,7 @@ class EmpDataServiceController extends BaseController
 
             if(!empty($name) && !empty($emp_code)){
 
-                $totals = $totals + $amount;
+                $totals = $totals + floatval($amount);
 
                 $query = $db->table('employee_polices');
                 $query->select('employee_polices.id');
diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index a613c87b..6857487a 100755
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -25,6 +25,8 @@ use App\Models\InsurerExcelExportTemplateModel;
 use App\Models\InsurerModel;
 use App\Models\ClientDepositModel;
 use App\Models\PolicyPremium2Model;
+use App\Models\AuditHistoryModel;
+use App\Models\UserModel;
 
 
 use App\Controllers\Jobs;
@@ -64,6 +66,8 @@ class EmployeeController extends AdminController
     protected $insurerModel;
     protected $cashDepositModel;
     protected $PolicyPremium2Model;
+    protected $auditHistory;
+    protected $userModel;
 
     public function __construct()
     {
@@ -84,6 +88,8 @@ class EmployeeController extends AdminController
         $this->insurerModel = new InsurerModel();
         $this->cashDepositModel = new ClientDepositModel();
         $this->PolicyPremium2Model = new PolicyPremium2Model();
+        $this->auditHistory = new AuditHistoryModel();
+        $this->userModel = new userModel();
     }
 
     public function list()
@@ -372,7 +378,7 @@ class EmployeeController extends AdminController
         ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
         ->join('clients', 'clients.id = client_policy.client_id')
         ->orderBy('batch_files.id', 'desc')
-        ->limit(100)
+        ->limit(1000)
         ->find();
 
 
@@ -590,7 +596,16 @@ class EmployeeController extends AdminController
                 $batch_data['event_type'] = $array;
                 $return = $empDataServiceController->generateExcelForAllEventType($batch_data);
 
-                if($return === 6){
+                if ($return === 0) {
+                    session()->setFlashdata('error', "Insufficient deposit amount.");
+                    return redirect()->to(base_url('employee/upload'));
+
+                }else if($return === 5){
+
+                    session()->setFlashdata('error', "The policy does not have a CD account number.");
+                    return redirect()->to(base_url('employee/upload'));
+                }
+                else if($return === 6){
 
                     session()->setFlashdata('error', "The Insurer does not have an Excel export template format.");
                     return redirect()->to(base_url('employee/upload'));
@@ -1286,7 +1301,7 @@ class EmployeeController extends AdminController
             ->orderBy('id', 'desc')            
             ->first();
 
-        // print_r($file); die;
+        // dd($cd_tranction, db_connect()->getLastQuery());
         if ($file['action'] == 'inception' || $file['action'] == 'dependent_addition' || $file['action'] == 'addition' || $file['action'] == 'enrollment' || $file['action'] == 'missed_inception') {
 
 
@@ -1443,6 +1458,7 @@ class EmployeeController extends AdminController
                 ->get()
                 ->getResult();
 
+            // dd($res);
             // print_r($this->empEndorsementModel->getLastQuery());
             // echo $res[0]->count;die();
 
@@ -1452,14 +1468,15 @@ class EmployeeController extends AdminController
                 $this->myLogger->logme('error', 'Event Type : -- {data} --', ['data' => $file['action']]);
 
                 $transaction_type = 'Credit';
-                $cd_amount = $cd_tranction['amount'];
+                $cd_amount = 0;
 
-                if($file['action'] == 'deletion'){
+                if($file['action'] == 'deletion' && $res[0]->count > 0){
+                    
                     $transaction_type = 'Debit';
                      //get cd amount for the particular file id to reverse entry to the cash deposite for only deletion
                     $cd_amount_total = $this->employeePolicyModel->getDeletionDataForTruncated($file['id']);
                     $totalSum = array_sum(array_column($cd_amount_total, 'total'));
-                    $cd_amount =  $totalSum;  
+                    $cd_amount =  $totalSum ?? 0;  
                     
                     $this->myLogger->logme('error', 'Deletion CD Amount : {data}', ['data' => $cd_amount]);
                 }
@@ -1476,7 +1493,7 @@ class EmployeeController extends AdminController
                 $this->myLogger->logme('error', 'emp_endorsement table updated');
 
                 //STEP 2:
-                if($file['action'] == 'deletion') {
+                if($file['action'] == 'deletion' && $res[0]->count > 0) {
                     //update the employee policy table reverse the data
                     $this->employeePolicyModel->updateEmployeePolicyTruncateReverse($file_id);
                     $this->myLogger->logme('error', 'employee_polices table updated for deletion');
@@ -1492,7 +1509,7 @@ class EmployeeController extends AdminController
                 $this->myLogger->logme('error', 'files table updated');
 
 
-                if($cd_tranction && $file['action'] != 'correction'){
+                if(!empty($cd_amount) && $file['action'] != 'correction'){
                     
                     $cd_data = [
                         'amount' => $cd_amount,
@@ -1596,9 +1613,8 @@ class EmployeeController extends AdminController
                     $db = db_connect();
                     $query = "
                                 UPDATE employee_polices 
-                                JOIN employees ON employees.id = employee_polices.employee_id
                                 SET employee_polices.status = 'truncated', employee_polices.is_active = 0 
-                                WHERE employees.file_id = $file_id
+                                WHERE employee_polices.file_id = $file_id
                             ";
                 
                     $db->query($query);
@@ -2717,4 +2733,46 @@ class EmployeeController extends AdminController
         }
     }
 
+    public function getEmpHistory(){
+
+        $emp_id = $this->request->getPost('emp_id');
+
+        $data['emp_history'] = $this->auditHistory->select('field_name,old_value,new_value,created_by,created_at')->where('pk',$emp_id)->where('table_name','employees')->orderBy('created_at', 'DESC')->findAll();
+
+        foreach ($data['emp_history'] as &$emp_history) { 
+            $emp_history['field_name'] = $this->formatFieldName($emp_history['field_name']);
+            $user = $emp_history['created_by'];
+            if ($user != null && $user != ''){
+                $userData = $this->userModel->select('first_name, last_name')->where('id', $user)->where('is_active', 1)->first();
+                $emp_history['created_by'] = ucwords($userData['first_name'] . ' ' . $userData['last_name']);
+            }else{
+                $emp_history['created_by'] = '-';
+            }
+
+            $emp_history['created_at'] =  date("d-m-Y H:i:s", strtotime($emp_history['created_at']));
+        }
+        unset($emp_history); 
+        
+        $emp_pol_pk = $this->employeePolicyModel->select('id')->where('employee_id',$emp_id)->first()['id'];
+        $data['emp_pol_history'] = $this->auditHistory->select('field_name,old_value,new_value,created_by,created_at')->where('pk',$emp_pol_pk)->where('table_name','employee_polices')->findAll();
+
+        return $this->respond(['status' => true, 'data' => $data],200);
+
+        
+    }   
+
+    public function formatFieldName($unformattedString){
+
+        if (str_contains($unformattedString, '_')) {
+            $data = str_replace('_', ' ', $unformattedString);
+        }else{
+            $data = $unformattedString;
+        }
+        
+        $format = ucwords($data);
+
+        return $format;
+
+    }
+
 }
diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php
index 0b26b442..40e85cd0 100755
--- a/app/Controllers/EmployeeRestController.php
+++ b/app/Controllers/EmployeeRestController.php
@@ -2502,7 +2502,7 @@ class EmployeeRestController extends AdminController
     function getEmployeeActiveOrInactivePolicy()
     {
         if($this->request->getGet('type') == 'Active'){ $policy_status = 1; }else{ $policy_status = 0; }
-        $ClientPolicyData =  $this->clientPolicyModel->select('client_policy.* , policy_type.policy_type as policy_type,insurers.name as insurer_name,tpa.name as tpa_name,tpa.network_hospitals as network_hospitals_url')
+        $ClientPolicyData =  $this->clientPolicyModel->select('client_policy.* , policy_type.policy_type as policy_type,insurers.name as insurer_name,tpa.name as tpa_name,tpa.network_hospitals as network_hospitals_url,  policy_type.long_name as policy_long_name')
                                                     ->join('insurers', 'client_policy.insurer_id = insurers.id', 'left')
                                                     ->join('tpa', 'client_policy.tpa_id = tpa.id', 'left')
                                                     ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
@@ -2555,13 +2555,15 @@ class EmployeeRestController extends AdminController
                 $data['network_hospitals_url'] = $ClientPolicyValue['network_hospitals_url'];
                 $data['policy_start_date'] = $this->convertDateFormatDisplay($ClientPolicyValue['policy_start_date']);
                 $data['policy_end_date'] = $this->convertDateFormatDisplay($ClientPolicyValue['policy_end_date']);
+                $data['heading'] = $ClientPolicyValue['policy_long_name'];
                 // $data['policy_terms'] = $terms;
 
-                if($ClientPolicyValue['policy_type_id'] == 1){ $data['heading'] = 'Group Personal Accident Coverage'; }else
-                if($ClientPolicyValue['policy_type_id'] == 2){ $data['heading'] = 'Group Medical Coverage'; }else
-                if($ClientPolicyValue['policy_type_id'] == 3){ $data['heading'] = 'Group Medical Coverage - Parents'; }else
-                if($ClientPolicyValue['policy_type_id'] == 4){ $data['heading'] = 'Group Medical Coverage - Top Up'; }else
-                if($ClientPolicyValue['policy_type_id'] == 5){ $data['heading'] = 'Group Medical Coverage - Parents (Top Up)'; }
+                // if($ClientPolicyValue['policy_type_id'] == 1){ $data['heading'] = 'Group Personal Accident Coverage'; }else
+                // if($ClientPolicyValue['policy_type_id'] == 2){ $data['heading'] = 'Group Medical Coverage'; }else
+                // if($ClientPolicyValue['policy_type_id'] == 3){ $data['heading'] = 'Group Medical Coverage - Parents'; }else
+                // if($ClientPolicyValue['policy_type_id'] == 4){ $data['heading'] = 'Group Medical Coverage - Top Up'; }else
+                // if($ClientPolicyValue['policy_type_id'] == 5){ $data['heading'] = 'Group Medical Coverage - Parents (Top Up)'; }else
+                // if($ClientPolicyValue['policy_type_id'] == 7){ $data['heading'] = 'Group Term Life Insurance'; }
 
                 if($ClientPolicyValue['policy_type_id'] == 1 || $ClientPolicyValue['policy_type_id'] == 6 || $ClientPolicyValue['policy_type_id'] == 7)
                 { 
diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php
index d7674712..fd0c5455 100755
--- a/app/Controllers/EmployeeServiceController.php
+++ b/app/Controllers/EmployeeServiceController.php
@@ -1647,7 +1647,7 @@ class EmployeeServiceController extends AdminController
                                     // echo 'insert emp';
                                 }
                                 else
-                                {
+                                {   
                                     $value['emp_status'] = 'active';
                                     $value['created_by'] = $file['created_by'];
                                     $value['client_branch_id'] = $file['client_branch_id'];
@@ -2056,6 +2056,8 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
                             }
                             $value['family_floater_key'] = $relation;
 
+                            // dd($value['family_floater_key']);
+
                             $policy_data['basic_cover_si'] = $row[9];
                             $policy_data['date_coverage'] = $row[13] != "" && $row[13] != null ? change_date_format($row[13],'d-M-Y','Y-m-d') : null;
                             $policy_data['client_policy_id'] = $file['policy_id'];
diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php
index 0a9c444c..abbc6984 100644
--- a/app/Controllers/LeadsController.php
+++ b/app/Controllers/LeadsController.php
@@ -12,6 +12,8 @@ use PhpOffice\PhpSpreadsheet\Style\Border;
 use PhpOffice\PhpSpreadsheet\Style\Alignment;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 use PhpOffice\PhpSpreadsheet\Style\Fill;
+use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
+use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
 
 use App\Models\UserModel;
 use App\Models\ClientModel;
@@ -31,7 +33,7 @@ use App\Helpers\MailHelper;
 use App\Helpers\ExcelMergeHelper;
 use App\Helpers\ExcelSanitizeHelper;
 use Google\Service\CloudSearch\PushItem;
-use Kint;
+use Kint\Kint;
 
 use App\Controllers\Jobs;
 use App\Controllers\JobWorker;
@@ -64,6 +66,9 @@ class LeadsController extends BaseController
     protected $clientType;
     protected $leadType;
     protected $leadsStatus;
+    protected $claim_type_for_gpa;
+    protected $cause_of_death;
+
 
     public function __construct()
     {
@@ -96,6 +101,19 @@ class LeadsController extends BaseController
             'completed_with_corrections' => 'Completed with Corrections',
             'completed_without_corrections' => 'Completed w/o Corrections',
         ];
+        $this->claim_type_for_gpa = [
+            'accident_death' => 'Accident Death',
+            'permanent_total_disablement' => 'Permanent Total Disablement',
+            'permanent_partial_disablement' => 'Permanent Partial Disablement',
+            'temporary_total_disablement_benefit' => 'Temporary Total Disablement benefit'
+        ];
+
+        $this->cause_of_death = [
+            'natural_death' => 'Natural Death',
+            'suicide'       => 'Suicide',
+            'accident'      => 'Accident'
+        ];
+
     }
 
     public function viewLeadsList()
@@ -107,6 +125,7 @@ class LeadsController extends BaseController
         // $d = $this->calculateMembersDemography(['lead_id' => 24]);
         //$this->mergeQuoteExcelFileWithMembersListExcelFile(24, 1, $propsal_and_insurer = null);
         // dd($d);
+            
         $data['page_name'] = 'Leads';
 
         // Set basic data
@@ -122,7 +141,7 @@ class LeadsController extends BaseController
         // Fetch insurer and TPA branch data
         $data['insurer'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
         $data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
-
+        // print_r($data['tpa']);die();
         // Fetch sales team members who are active in team 5
         $data['salse_team'] = $this->userModel
             ->select('user_profiles.*')
@@ -133,12 +152,31 @@ class LeadsController extends BaseController
             ->findAll();
 
         // dd($data);
+        $data['lastFiveYears'] = $this->getLastFiveFinancialYears();
+        $data['gpaClaimType'] = $this->claim_type_for_gpa;
+        $data['causeOfDeath'] = $this->cause_of_death;
+        // dd($lastFiveYears);        
+        if ($this->request->is('get')) {
+            // Fetch leads data
+            $data   ['lead_data_list'] = $this->leadsModel->getLeadDataForLising();
+            // Load layout and pass data
+            $this->loadLayout('lead_filter', $data);
+        }else{
 
-        // Fetch leads data
-        $data   ['lead_data_list'] = $this->leadsModel->getLeadDataForLising();
-        
-        // Load layout and pass data
-        $this->loadLayout('leads_list', $data);
+            $search_data = $this->request->getPost();
+            // print_r($search_data); 
+
+            $where = [];
+            foreach ($search_data as $search_objects => $key) {
+                if ($key != null && $key != '' && $key != 0) {
+                    $where[$search_objects] = $key;
+                }
+            }
+            
+            $data['lead_data_list'] = $this->leadsModel->getLeadDataForLising($where);
+            $html = view('leads_list', $data);
+            return $this->respond(['status' => true, 'html' => $html], 200);
+        }
     }
 
     public function createLead()
@@ -198,6 +236,8 @@ class LeadsController extends BaseController
             // Separate the insurer and insurer branch, handle missing or invalid data
             if (isset($data['insurer'][$index]) && strpos($data['insurer'][$index], '-') !== false) {
                 list($insurer_branch_id, $insurer_id) = explode('-', $data['insurer'][$index]);
+                
+            }else{
                 $insurer_branch_id = 0;
                 $insurer_id = 0;
             }
@@ -253,7 +293,18 @@ class LeadsController extends BaseController
 
             $last_3_years_claims = null;
             if($value != 2){
-                $last_3_years_claims = $data['finyear'];
+                $last_3_years_claims = [];
+                $finyear = json_decode($data['finyear']);
+
+                foreach ($finyear as $year){
+                    $received_policy_type = ($year->finyear[0]->policy_type);
+                    if ($value == $received_policy_type){
+                        array_push($last_3_years_claims,$year);
+                    }else{
+                        continue;
+                    }
+                }
+                $last_3_years_claims = json_encode($last_3_years_claims);
             }
                         
             $processedData[] = [
@@ -321,7 +372,7 @@ class LeadsController extends BaseController
                 'notes'                  => $data['notes'] ?? null,
             ];
         }
-
+        // print_r($processedData);die();
         return $processedData;
     }
 
@@ -418,7 +469,9 @@ class LeadsController extends BaseController
                 ->where('lead_id', $id)
                 // ->where('type', $type)
                 ->where('is_active', 1)
+                ->orderBy('id', 'desc')
                 ->first();
+        // dd($data);
 
         $data['rfq_count'] = $this->RFQModel
                 ->where('lead_id', $id)
@@ -436,8 +489,15 @@ class LeadsController extends BaseController
 
         $data['lead_id'] = $id;
         $lead_data = $this->leadsModel
-                ->select('leads.*, policy_type.question_json, policy_type.policy_type')
+                ->select('
+                    leads.*, 
+                    policy_type.question_json, 
+                    policy_type.policy_type,
+                    policy_type.long_name, 
+                    user_profiles.email as created_person_email
+                ')
                 ->join('policy_type', 'leads.policy_type_id = policy_type.id')
+                ->join('user_profiles', 'leads.created_by = user_profiles.id', 'left')
                 ->where('leads.id', $id)
                 ->where('leads.is_active', 1)
                 ->first();
@@ -455,7 +515,21 @@ class LeadsController extends BaseController
         $data['userList'] = $this->userModel->getUserListForRFQ();
         $data['lead_data'] = $lead_data;
 
-        $data['mail_content'] = $this->transformMailContent($id);
+        $mail_content = "
+            

Dear Sir,

+

Greetings From Nhance India!

+

Please find attached the {{RFQ_OR_QCR}} for {{POLICY_TYPE}} policy pertaining to {{CLIENT_NAME}}.

+

Kindly request you to share the competitive quotes at the earliest.

+

In case of any query, please feel free to contact us.

+

Thank You!

+ "; + + + $subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}}"; + + $data['mail_content'] = $this->transformMailContent($lead_data, $mail_content, $data['page_name']); + $data['subject'] = $this->transformMailContent($lead_data, $subject, $data['page_name']); + // dd($data); $this->loadLayout('view_rfq.php', $data); @@ -574,13 +648,13 @@ class LeadsController extends BaseController public function constructExcelToSaveTemp($lead_id, $type, $propsal_and_insurer = null) { $rfq_data = $this->RFQModel->getRFQTableDataWithLeadIDAndType($lead_id, $type); - + // dd($rfq_data, $lead_id, $type, $propsal_and_insurer); // print_r($propsal_and_insurer); die; - if($rfq_data['lead_type'] == 1){ + if ($rfq_data['lead_type'] == 1) { - if($rfq_data['policy_type_id'] == 2){ + if ($rfq_data['policy_type_id'] == 2) { $lead_data = [ 'Insured' => $rfq_data['client_name'], @@ -590,23 +664,22 @@ class LeadsController extends BaseController 'No of Dependents' => $rfq_data['incept_dept_count'], 'Total Lives' => $rfq_data['incept_no_of_lives'], - 'Period of Insurance ' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])).' to '. date('d/m/Y', strtotime($rfq_data['policy_end_date'])), + 'Period of Insurance ' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])), 'Policy Run Days' => $rfq_data['policy_run_days'], ]; - }else if($rfq_data['policy_type_id'] == 1){ + } else if ($rfq_data['policy_type_id'] == 1) { $lead_data = [ 'Insured' => $rfq_data['client_name'], 'No of Employees at Inception' => $rfq_data['incept_emp_count'], 'Total Sum Insured at Inception ' => $rfq_data['total_si_at_incept'], - 'Policy Period' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])).' to '. date('d/m/Y', strtotime($rfq_data['policy_end_date'])), + 'Policy Period' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])), 'Policy Status' => $rfq_data['status'], 'Existing Insurer' => $rfq_data['insurer_name'], 'TPA ' => $rfq_data['tpa_name'], ]; } - - }else{ - if($rfq_data['policy_type_id'] == 2){ + } else { + if ($rfq_data['policy_type_id'] == 2) { $lead_data = [ 'Insured' => $rfq_data['client_name'], @@ -624,7 +697,7 @@ class LeadsController extends BaseController 'No of Dependents at Renewal' => $rfq_data['renewal_dept_count'], 'Total Lives at Renewal ' => $rfq_data['renewal_no_of_lives'], - 'Period of Insurance ' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])).' to '. date('d/m/Y', strtotime($rfq_data['policy_end_date'])), + 'Period of Insurance ' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])), 'Policy Run Days' => $rfq_data['policy_run_days'], 'Inception Premium' => $rfq_data['premium_at_inception'], 'Premium as on (Date - DD MM YYYY should be entered based on the claims dump report)' => $rfq_data['premium_date'], @@ -634,12 +707,12 @@ class LeadsController extends BaseController 'Incurred Claims Ratio' => $rfq_data['incurred_claims_ratio'], 'Earned Claims Ratio' => $rfq_data['earned_claims_ratio'], ]; - }else if($rfq_data['policy_type_id'] == 1){ + } else if ($rfq_data['policy_type_id'] == 1) { $lead_data = [ 'Insured' => $rfq_data['client_name'], 'No of Employees at Renewal' => $rfq_data['renewal_emp_count'], 'Total Sum Insured at Renewal ' => $rfq_data['total_si_at_renewal'], - 'Policy Period' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])).' to '. date('d/m/Y', strtotime($rfq_data['policy_end_date'])), + 'Policy Period' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])), 'Policy Status' => $rfq_data['status'], 'Existing Insurer' => $rfq_data['insurer_name'], 'TPA ' => $rfq_data['tpa_name'], @@ -648,14 +721,15 @@ class LeadsController extends BaseController } $data = json_decode($rfq_data['json'], true); + // dd($data); - if($type == 2){ + if ($type == 2) { $data = $this->convertJsonForQCR($data, $type); - if($propsal_and_insurer !== null){ + if ($propsal_and_insurer !== null) { list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2); $data = $this->transformProposelData($data, $proposal_key, $insurer_key); } - }else if($type == 1){ + } else if ($type == 1) { $data = $this->convertJsonForQCR($data, $type); // dd($data); } @@ -663,17 +737,123 @@ class LeadsController extends BaseController $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); + // Start with lead_data at the top $rowNumber = 1; + + $mergeRange1 = "A{$rowNumber}:C{$rowNumber}"; + $sheet->mergeCells($mergeRange1); + $sheet->setCellValue("A{$rowNumber}", "Nhance India Insurance Broking Pvt Ltd"); + $sheet->getStyle("A{$rowNumber}")->applyFromArray([ + 'font' => [ + 'bold' => true, + 'size' => 20 + ], + 'alignment' => [ + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, + ], + ]); + + // Set column width to fit the image properly + $sheet->getColumnDimension('D')->setWidth(20); // Adjust as needed + $sheet->getRowDimension($rowNumber)->setRowHeight(40); // Adjust as needed + + $drawing = new Drawing(); + $path = ROOTPATH . "public/assets/images/Nhance-Logo-Final.png"; // Use FCPATH for server path + $drawing->setPath($path); + $drawing->setCoordinates("D{$rowNumber}"); // Set position in column B + $drawing->setHeight(35); // Adjust image height + + // Center align the image in the cell + $drawing->setOffsetX(30); // Adjust horizontal offset + $drawing->setOffsetY(5); // Adjust vertical offset + + $drawing->setWorksheet($sheet); + + // Apply center alignment to the cell + $sheet->getStyle("D{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); + $sheet->getStyle("D{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER); + + + $rowNumber = $rowNumber + 1; + + // Initialize max width tracking variables + $maxWidthA = 0; + $maxWidthB = 0; + foreach ($lead_data as $key => $value) { + + // Merge A:B for key and C:D for value + $mergeRangeKey = "A{$rowNumber}:B{$rowNumber}"; + $mergeRangeValue = "C{$rowNumber}:D{$rowNumber}"; + $sheet->mergeCells($mergeRangeKey); + $sheet->mergeCells($mergeRangeValue); + + // Set values in merged cells $sheet->setCellValue("A{$rowNumber}", $key); - $sheet->setCellValue("B{$rowNumber}", $value); - $sheet->getStyle("A{$rowNumber}")->applyFromArray(['font' => ['bold' => true]]); + $sheet->setCellValue("C{$rowNumber}", $value); + + // 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++; } - $leadRange = "A1:B" . (count($lead_data)); - $sheet->getStyle($leadRange)->applyFromArray([ + // Set column width based on max content length (adjusted for padding) + $sheet->getColumnDimension('A')->setWidth($maxWidthA * 1.2); + $sheet->getColumnDimension('B')->setWidth($maxWidthA * 1.2); + $sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2); + $sheet->getColumnDimension('D')->setWidth($maxWidthB * 1.2); + + // $rowNumber += 2; + + // Add headers and subheaders + $headers = $data['table_data']['headers']; + + $sheet->setCellValue("A{$rowNumber}", "Details of Coverage"); + $sheet->getStyle("A{$rowNumber}")->applyFromArray([ + 'font' => [ + 'bold' => true, + ], + 'fill' => [ + 'fillType' => Fill::FILL_SOLID, + 'startColor' => ['rgb' => 'ADD8E6'], + ], + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], // Black color + ], + ], + ]); + $subheader_count = array_sum(array_map(fn($header) => count($header['subHeaders']), $data['table_data']['headers'])); + $subheader_count = $subheader_count - 2; + $headerCount = count($data['table_data']['headers']); + $lastColumn = Coordinate::stringFromColumnIndex($subheader_count); + // dd( $headerCount, $lastColumn); + + // Merge cells from A to the last column + $mergeRange = "A{$rowNumber}:{$lastColumn}{$rowNumber}"; + + $sheet->getStyle($mergeRange)->applyFromArray([ 'borders' => [ 'allBorders' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, @@ -682,21 +862,25 @@ class LeadsController extends BaseController ], ]); + $sheet->mergeCells($mergeRange); + $rowNumber = $rowNumber + 1; - $rowNumber += 2; - - // Add headers and subheaders - $headers = $data['table_data']['headers']; $subHeaderRow = $rowNumber + 1; $columnLetter = 'A'; foreach ($headers as $header) { + if (in_array($header['parentHeader'], ['Item Key', 'Action'])) { continue; } if ($header['parentHeader'] === 'Sno') { $header['parentHeader'] = 'S.No.'; + $sheet->getColumnDimension('A')->setWidth(10); + } + + if ($header['parentHeader'] === 'Particulars') { + $sheet->getColumnDimension('B')->setWidth(40); } $startColumn = $columnLetter; // Start of the current header range @@ -723,6 +907,13 @@ class LeadsController extends BaseController // Add subheaders foreach ($header['subHeaders'] as $subHeader) { $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader); + + if ($columnLetter != "A" && $columnLetter != "B" && $columnLetter != "C" && $columnLetter != "D") { + $sheet->getColumnDimension($columnLetter)->setWidth(35); + } else { + $sheet->getColumnDimension('A')->setWidth(10); + } + $sheet->getStyle("{$columnLetter}{$subHeaderRow}")->applyFromArray([ 'font' => ['bold' => true], 'alignment' => [ @@ -746,12 +937,13 @@ class LeadsController extends BaseController ]); // Increase row height for headers and subheaders - $sheet->getRowDimension($rowNumber)->setRowHeight(30); // Header row height - $sheet->getRowDimension($subHeaderRow)->setRowHeight(25); // Subheader row height + $sheet->getRowDimension($rowNumber)->setRowHeight(25); // Header row height + $sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height $rowNumber = $subHeaderRow + 2; $column_data = $data['table_data']['data']; $serial_no = 1; + $maxColumnWidths = []; // Add table data rows foreach ($column_data as $dataRow) { @@ -789,6 +981,7 @@ class LeadsController extends BaseController $rowNumber += 2; // Add premium data + // dd($data); $labelArray = ["Premium", "GST (%)", "GST Amount (₹)", "Total"]; $premiumData = $data['premium_data']['data']; $premium = [$labelArray[0]]; @@ -797,7 +990,7 @@ class LeadsController extends BaseController $total = [$labelArray[3]]; foreach ($premiumData as $proposal => $insurers) { - if($proposal != 'Particulars'){ + if ($proposal != 'Particulars') { foreach ($insurers as $insurer => $values) { $premium[] = $values[$labelArray[0]]; $gst[] = $values[$labelArray[1]]; @@ -819,7 +1012,8 @@ class LeadsController extends BaseController $rowNumber++; } - $premiumRange = "B" . ($rowNumber - 3) . ":" . chr(ord($columnLetter) - 1) . ($rowNumber - 1); + $premiumRange = "B" . ($rowNumber - 4) . ":" . chr(ord($columnLetter) - 2) . ($rowNumber - 1); + // dd($premiumRange); $sheet->getStyle($premiumRange)->applyFromArray([ 'borders' => [ 'allBorders' => [ @@ -831,10 +1025,53 @@ class LeadsController extends BaseController } // Auto-size columns - foreach ($sheet->getColumnIterator() as $column) { - $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true); + // foreach ($sheet->getColumnIterator() as $column) { + // $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true); + // } + + $dataRange = $sheet->calculateWorksheetDimension(); + + $sheet->getStyle($dataRange)->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER) + ->setVertical(Alignment::VERTICAL_CENTER) + ->setWrapText(true); + + $sheet->getStyle('A1')->applyFromArray([ + 'alignment' => [ + 'wrapText' => false, // Disables text wrapping for A1 + ], + ]); + + // Apply border to the entire sheet + preg_match('/([A-Z]+)(\d+):([A-Z]+)(\d+)/', $dataRange, $matches); + + if ($matches) { + $startColumn = $matches[1]; // A + $startRow = $matches[2]; // 1 + $endColumn = $matches[3]; // G + $endRow = $matches[4]; // 75 + + // Convert column letter to index, reduce by 1, and convert back + $endColumnIndex = Coordinate::columnIndexFromString($endColumn) - 1; + $newEndColumn = Coordinate::stringFromColumnIndex($endColumnIndex); + + // Generate the new range (e.g., "A1:F75" instead of "A1:G75") + $newDataRange = "{$startColumn}{$startRow}:{$newEndColumn}{$endRow}"; + // $sheet->getStyle($newDataRange)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN); } + $lastRow = count($lead_data) + 1; + $leadRange = "A1:D{$lastRow}"; + + $sheet->getStyle($leadRange)->applyFromArray([ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], // Black color + ], + ], + ]); + // Set filename $string = ($type == 2) ? 'QCR' : 'RFQ'; $filename = "{$string}_{$rfq_data['client_short_name']}_{$rfq_data['policy_type']}_" . date('YmdHis') . '.xlsx'; @@ -1405,10 +1642,11 @@ class LeadsController extends BaseController } // dd($lead_data); - $reply_to = $lead_data['created_person_email']; + $reply_to = $lead_data['created_person_email'] ?? ""; //get file path to attach $file_info = $this->constructExcelToSaveTemp($lead_id, ($file_type == 'rfq' ? 1 : 2), $propsal_and_insurer); + log_message('error','File Info'.json_encode($file_info)); if ($lead_data['file_name'] != null && $lead_data['file_name'] != '') { $temp_file_path = $file_info['filePath']; $temp_file_name = $file_info['fileName']; @@ -1422,8 +1660,11 @@ class LeadsController extends BaseController $result = ExcelMergeHelper::mergeExcelFiles($filePaths, $outputPath); // print_rr($result); } + }else{ + $result = $file_info['filePath']; + // return $this->respond(['status' => 'fail', 'code' => 200, 'messgae' => 'File Not Found'], 200); } - // print_rr($lead_data); + // print_rr($result); die; // print_rr($file_info); // $file_path = WRITEPATH."uploads/excel/sample/correction.xls"; // $file_name = $file_type.'.xlsx'; @@ -1478,8 +1719,10 @@ class LeadsController extends BaseController $message = str_replace("{{DURATION}}", calculate_days_bw_dates($lead_data['policy_end_date'] ?? "", $lead_data['policy_start_date'] ?? "")->days, $message) ?? '--'; // print_rr($message);calculate_days_bw_dates + $string = implode(", ", $cc_mails); + $bcc_string = implode(", ", $bcc_mails); - $res = MailHelper::send_email(['mail' => $recipient['email'], 'cc' => $cc_mails, 'subject' => $subject, 'message' => $message, 'attachments' => $attachments, 'reply_to' => $reply_to, 'bcc' => $bcc_mails]); + $res = MailHelper::send_email(['mail' => $recipient['email'], 'cc' => $string, 'subject' => $subject, 'message' => $message, 'attachments' => $attachments, 'reply_to' => $reply_to, 'bcc' => $bcc_string]); // !dd($res); $result_data[] = ['mail' => $recipient['email'], 'status' => $res]; } @@ -2036,54 +2279,112 @@ class LeadsController extends BaseController //------------------------------------------------------------------------------------------------ - public function transformMailContent($lead_id) + // public function transformMailContent($lead_id, $page_name) + // { + // helper('excel_util_helper'); + // // $params = $this->request->getGet(); + + // // print_r($params); die; + // // $lead_id = $params['lead_id']; + // // $file_type = $params['file_type']; //rfq or qcr + // // $recipient_type = $params['recipient_type']; //insurer or client or internal or placement + // // $recipient_mail = $params['recipient_mail']; // - only primary key of contacts + // // $propsal_and_insurer = isset($params['proposal_insurer']) ? $params['proposal_insurer'] : null; + + // // if ($recipient_type == 'insurer' && empty($recipient_mail)) { + // // return $this->respond(['status' => 'failed', 'code' => 400, 'data' => '', 'messgae' => 'Recipient mail not found ! '], 200); + // // } + + // //gather lead info + // $lead_data = $this->leadsModel + // ->select('leads.*,policy_type.long_name,policy_type.policy_type,user_profiles.email as created_person_email') + // ->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left') + // ->join('user_profiles', 'leads.created_by = user_profiles.id', 'left') + // ->where('leads.id', $lead_id) + // ->first(); + + // // dd($lead_data); + + // if($lead_data){ + + // $recipient_data = ['name' => "Team"]; + // // $original_message = '

Request for Quotation (RFQ)

Dear {{RECIPIENT_NAME}},

We are reaching out to request a quotation for the following insurance coverage. Please review the details below and provide your quote at your earliest convenience.

RFQ Details

Client name{{CLIENT_NAME}}
Coverage Type{{POLICY_LONG_NAME}}
Policy Start Date{{POLICY_START_DATE}}
Policy Duration{{DURATION}}
Please note: Additional terms and details are included in the attachment for your reference.

Please feel free to reach out if you require any further information to prepare the quote. We look forward to receiving your proposal.

Best regards,

Nhance India Pvt Ltd

© Nhance India Pvt Ltd. All rights reserved.

'; + // $original_message = `Dear Sir, + + // Greetings From Nhance India! + + // Please find attached the RFQ for {{POLICY_TYPE}} policy pertaining to {{RECIPIENT_NAME}} + // Kindly request you to share the competitive quotes at the earliest + // In case of any query, Please feel free to contact us. + // Thank You !`; + + // $message = $original_message; + // $message = str_replace("{{RECIPIENT_NAME}}", $lead_data['client_name'], $message); + // $message = str_replace("{{POLICY_LONG_NAME}}", $lead_data['long_name'] ?? $lead_data['policy_type'], $message); + // $message = str_replace("{{POLICY_TYPE}}", $lead_data['policy_type'], $message); + // $message = str_replace("{{RFQ_OR_QCR}}", $page_name, $message); + + // $message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'], $message); + // $message = str_replace("{{POLICY_START_DATE}}", change_date_format($lead_data['policy_start_date'], 'Y-m-d', 'd-m-Y'), $message); + // $message = str_replace("{{DURATION}}", calculate_days_bw_dates($lead_data['policy_end_date'] ?? "", $lead_data['policy_start_date'] ?? "")->days, $message) ?? '--'; + + // dd($message); + // // return $this->respond(['status' => true, 'code' => 200, 'data' => $message], 200); + // return $message; + + // }else{ + + // // return $this->respond(['status' => false, 'code' => 404, 'message' => "This lead has not data"], 200); + // return ''; + // } + + + + // } + + public function transformMailContent($lead_data, $mail_content, $page_name) { - helper('excel_util_helper'); - // $params = $this->request->getGet(); + $current_year = date('Y'); + $next_year = $current_year + 1; + $policy_year = "$current_year-$next_year"; - // print_r($params); die; - // $lead_id = $params['lead_id']; - // $file_type = $params['file_type']; //rfq or qcr - // $recipient_type = $params['recipient_type']; //insurer or client or internal or placement - // $recipient_mail = $params['recipient_mail']; // - only primary key of contacts - // $propsal_and_insurer = isset($params['proposal_insurer']) ? $params['proposal_insurer'] : null; + if ($lead_data) { + + // Replacing placeholders with actual values + $message = $mail_content; + $message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'] ?? "Valued Client", $message); + $message = str_replace("{{POLICY_LONG_NAME}}", $lead_data['long_name'] ?? $lead_data['policy_type'] ?? "Insurance Policy", $message); + $message = str_replace("{{POLICY_TYPE}}", $lead_data['policy_type'] ?? "Insurance Policy", $message); + $message = str_replace("{{RFQ_OR_QCR}}", $page_name, $message); + $message = str_replace("{{POLICY_YEAR}}", $policy_year, $message); - // if ($recipient_type == 'insurer' && empty($recipient_mail)) { - // return $this->respond(['status' => 'failed', 'code' => 400, 'data' => '', 'messgae' => 'Recipient mail not found ! '], 200); - // } - - //gather lead info - $lead_data = $this->leadsModel - ->select('leads.*,policy_type.long_name,policy_type.policy_type,user_profiles.email as created_person_email') - ->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left') - ->join('user_profiles', 'leads.created_by = user_profiles.id', 'left') - ->where('leads.id', $lead_id) - ->first(); - - // dd($lead_data); - - if($lead_data){ - - $recipient_data = ['name' => "Team"]; - $original_message = '

Request for Quotation (RFQ)

Dear {{RECIPIENT_NAME}},

We are reaching out to request a quotation for the following insurance coverage. Please review the details below and provide your quote at your earliest convenience.

RFQ Details

Client name{{CLIENT_NAME}}
Coverage Type{{POLICY_LONG_NAME}}
Policy Start Date{{POLICY_START_DATE}}
Policy Duration{{DURATION}}
Please note: Additional terms and details are included in the attachment for your reference.

Please feel free to reach out if you require any further information to prepare the quote. We look forward to receiving your proposal.

Best regards,

Nhance India Pvt Ltd

© Nhance India Pvt Ltd. All rights reserved.

'; - - $message = $original_message; - $message = str_replace("{{RECIPIENT_NAME}}", $recipient_data['name'], $message); - $message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'], $message); - $message = str_replace("{{POLICY_LONG_NAME}}", $lead_data['long_name'], $message); - $message = str_replace("{{POLICY_START_DATE}}", change_date_format($lead_data['policy_start_date'], 'Y-m-d', 'd-m-Y'), $message); - $message = str_replace("{{DURATION}}", calculate_days_bw_dates($lead_data['policy_end_date'] ?? "", $lead_data['policy_start_date'] ?? "")->days, $message) ?? '--'; - - // return $this->respond(['status' => true, 'code' => 200, 'data' => $message], 200); return $message; - }else{ - - // return $this->respond(['status' => false, 'code' => 404, 'message' => "This lead has not data"], 200); - return ''; + } else { + return ''; // Return empty if no lead data found } - - - } + + function getLastFiveFinancialYears() { + $currentYear = date('Y'); + $currentMonth = date('m'); + + // In India, the financial year starts from April (04) + if ($currentMonth < 4) { + $currentYear--; // Adjust year if it's Jan-Mar + } + + $financialYears = []; + + for ($i = 0; $i < 5; $i++) { + $startYear = $currentYear - $i - 1; + $endYear = $currentYear - $i; + $financialYears[] = "$startYear-$endYear"; + } + + return $financialYears; + } + + + } diff --git a/app/Controllers/NotificationController.php b/app/Controllers/NotificationController.php index 0dd29522..efdc2571 100755 --- a/app/Controllers/NotificationController.php +++ b/app/Controllers/NotificationController.php @@ -179,7 +179,7 @@ class NotificationController extends AdminController // This function for sent a mail for testing public function sentTestMail($template_id, $test_mail) { - $notification_data = $this->notificationModel->where('id', $template_id)->where('enabled', 1)->first(); + $notification_data = $this->notificationModel->where('id', $template_id)->first(); $client_data = $this->clientModel->where('id', $notification_data['client_id'])->where('is_active', 1)->first(); if(!empty($notification_data)){ diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index e2a9bb42..e1302f55 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -33,6 +33,7 @@ class TicketController extends BaseController protected $claimType; protected $claimStatus; protected $placeHolders; + protected $extraFields; protected $clientModel; protected $ticketMasterModel; @@ -73,7 +74,8 @@ class TicketController extends BaseController 1 => "In Person", 2 => "Courier", 3 => "Online Mode - Email", - 4 => "Online Mode - To TPA" + 4 => "Smart Service Desk", + 5 => "Direct to TPA" ]; $this->claimType = [ 1 => [ @@ -111,6 +113,30 @@ class TicketController extends BaseController '((POLICY_TYPE))' => 'policy_type', '((AUTO_QUERY_CONTENT))' => 'auto_query_content', ]; + $this->extraFields = [ + + 3 => ['raised_date'], + 4 => ['raised_date'], + 5 => ['claim_number', 'registration_date'], + 7 => ['query_received_date'], + 8 => ['denial_reason','denial_date'], + 9 => ['approved_amount','approved_date', 'approved_letter'], + 11 => ['utr_details', 'settled_date', 'settle_letter'], + 40 => ['approved_amount','approved_date', 'approved_letter'], + 44 => ['utr_details', 'settled_date', 'settle_letter'], + 30 => ['approved_amount','approved_date', 'approved_letter'], + 34 => ['utr_details', 'settled_date', 'settle_letter'], + 20 => ['approved_amount','approved_date', 'approved_letter'], + 24 => ['utr_details', 'settled_date', 'settle_letter'], + 14 => ['return_remark', 'awb_no_courier_name'], + 48 => ['return_remark', 'awb_no_courier_name'], + 59 => ['return_remark', 'awb_no_courier_name'], + 54 => ['return_remark', 'awb_no_courier_name'], + 13 => ['cancel_remark'], + 47 => ['cancel_remark'], + 53 => ['cancel_remark'], + 58 => ['cancel_remark'], + ]; $this->ticketMasterModel = new TicketMasterModel(); $this->claimStatus = new TicketClaimStatusModel(); @@ -124,10 +150,10 @@ class TicketController extends BaseController } public function ticketList() - { + { + $data['ticket_type'] = $this->ticketType; if ($this->request->is('get')) { $data['page_name'] = "Claims"; - $data['ticket_type'] = $this->ticketType; $data['claim_status'] = $this->claimStatus->select('id,ticket_type,claim_status')->where('is_active', 1)->findAll(); $data['client_list'] = $this->clientModel->select('id,client_name')->where('is_active', 1)->findAll(); $data['ticket_data'] = $this->ticketSearch(1); @@ -182,6 +208,9 @@ class TicketController extends BaseController $query = $db->table('ticket_master tm') ->select([ 'tm.id', + 'tm.ticket_type_id', + 'tm.claim_status_id', + 'tm.is_head_approved', 'tcs.claim_status AS status', 'tm.claim_number AS claim_no', 'tm.tpa_id', @@ -219,8 +248,11 @@ class TicketController extends BaseController $query = $db->table('ticket_master tm') ->select([ 'tm.id', + 'tm.ticket_type_id', 'tcs.claim_status AS status', 'tm.claim_number AS claim_no', + 'tm.claim_status_id', + 'tm.is_head_approved', 'tm.tpa_id', 'tm.emp_name', 'i.name AS insurer_name', @@ -254,7 +286,7 @@ class TicketController extends BaseController return $this->loadLayout('ticket_form_handler', $data); } - public function ticket_form_data($ticket_type) + public function ticket_form_data($ticket_type, $claim_status_id = null) { $this->myLogger->logme('error', "Fetching ticket form data for Ticket Type: $ticket_type"); @@ -288,11 +320,23 @@ class TicketController extends BaseController ->getResultArray(); // Fetch Claim Status - $data['claim_status'] = $this->claimStatus - ->select('*') - ->where(['is_active' => 1, 'ticket_type' => $ticket_type]) - ->get() - ->getResultArray(); + + if(empty($claim_status_id)){ + + if($ticket_type == 2){ + $claim_status_id = 15; + }else if($ticket_type == 3){ + $claim_status_id = 25; + }else if($ticket_type == 4){ + $claim_status_id = 35; + }else{ + $claim_status_id = 1; + } + } + + $data['claim_status'] = $this->transFormClaimStatus($claim_status_id, $ticket_type); + $data['extra_fields'] = $this->getExtraFields($data['claim_status']); + $data['extra_fields_array_for_validate'] = $this->getExtraFields($data['claim_status'], 1); if ($ticket_type == 1) { $data['claim_type'] = $this->claimType[1]; @@ -305,6 +349,73 @@ class TicketController extends BaseController return $data; } + //transform the claim status + public function transFormClaimStatus($claimStatusId, $ticket_type) + { + // Fetch the main claim status by ID + $claimStatusData = $this->claimStatus + ->select('*') + ->where(['is_active' => 1, 'ticket_type' => $ticket_type]) + ->where('id', $claimStatusId) + ->first(); + // dd($claimStatusData); + + // Initialize the filtered claim status array + $filteredClaimStatus = []; + + if (!empty($claimStatusData)) { + // Add the main claim status to the result + $filteredClaimStatus[] = $claimStatusData; + + // Decode the allowed_status JSON field + $filterClaimStatusIds = json_decode($claimStatusData['allowed_status'], true); + + // Fetch additional claim statuses if IDs exist + if (!empty($filterClaimStatusIds) && is_array($filterClaimStatusIds)) { + $additionalClaimStatuses = $this->claimStatus + ->select('*') + ->where(['is_active' => 1, 'ticket_type' => $ticket_type]) + ->whereIn('id', $filterClaimStatusIds) + ->get() + ->getResultArray(); + + // Merge additional claim statuses into the result + $filteredClaimStatus = array_merge($filteredClaimStatus, $additionalClaimStatuses); + } + } + + return $filteredClaimStatus; + } + + public function getExtraFields(array $claimStatus, $nonFilterArray = 0): array + { + $extra_fields = []; + + if($nonFilterArray == 1){ + + foreach ($claimStatus as $value) { + if (isset($this->extraFields[$value['id']])) { + if (!isset($extra_fields[$value['id']])) { + $extra_fields[$value['id']] = []; + } + $extra_fields[$value['id']] = array_merge($extra_fields[$value['id']], $this->extraFields[$value['id']]); + } + } + + }else{ + + foreach ($claimStatus as $value) { + if (isset($this->extraFields[$value['id']])) { + $extra_fields[] = $this->extraFields[$value['id']]; + } + } + + $extra_fields = array_values(array_unique(array_merge(...$extra_fields))); + } + + return $extra_fields; + } + public function view_ticket($ticket_id) { // $ticket_data = $this->ticketMasterModel->where('id', $ticket_id)->where('is_active', 1)->first(); @@ -316,7 +427,7 @@ class TicketController extends BaseController $template_data['mail_content'] = $this->replacePlaceholders($template_data['mail_content'], $ticket_data); $template_data['subject'] = $this->replacePlaceholders($template_data['subject'], $ticket_data); } - $data = $this->ticket_form_data($ticket_data['ticket_type_id']); + $data = $this->ticket_form_data($ticket_data['ticket_type_id'], $ticket_data['claim_status_id']); $data['ticket_data'] = $ticket_data; $data['reply_data'] = $template_data; $data['placeHolders'] = $this->placeHolders; @@ -324,6 +435,7 @@ class TicketController extends BaseController $data['view_ticket_page'] = []; $data['member_data'] = $this->employeeModel->getEmployeeByEmployeeCode($ticket_data['emp_code']); $data['ticket_history'] = $this->ticketHistory($ticket_id); + $data['ticket_check_list'] = db_connect()->table('ticket_check_list')->where('is_active', 1)->where('ticket_type_id', $ticket_data['ticket_type_id'])->get()->getResultArray(); // dd($data); return $this->loadLayout('ticket_edit_onbording', $data); @@ -380,6 +492,42 @@ class TicketController extends BaseController $ticket_data['date_of_intimat'] = change_date_format($ticket_data['date_of_intimat'], null, $out_put_format); } + if (empty($ticket_data['raised_date'])) { + $ticket_data['raised_date'] = null; + } else { + $ticket_data['raised_date'] = change_date_format($ticket_data['raised_date'], null, $out_put_format); + } + + if (empty($ticket_data['registration_date'])) { + $ticket_data['registration_date'] = null; + } else { + $ticket_data['registration_date'] = change_date_format($ticket_data['registration_date'], null, $out_put_format); + } + + if (empty($ticket_data['query_received_date'])) { + $ticket_data['query_received_date'] = null; + } else { + $ticket_data['query_received_date'] = change_date_format($ticket_data['query_received_date'], null, $out_put_format); + } + + if (empty($ticket_data['denial_date'])) { + $ticket_data['denial_date'] = null; + } else { + $ticket_data['denial_date'] = change_date_format($ticket_data['denial_date'], null, $out_put_format); + } + + if (empty($ticket_data['approved_date'])) { + $ticket_data['approved_date'] = null; + } else { + $ticket_data['approved_date'] = change_date_format($ticket_data['approved_date'], null, $out_put_format); + } + + if (empty($ticket_data['settled_date'])) { + $ticket_data['settled_date'] = null; + } else { + $ticket_data['settled_date'] = change_date_format($ticket_data['settled_date'], null, $out_put_format); + } + return $ticket_data; } @@ -387,6 +535,7 @@ class TicketController extends BaseController { $ticket_data = $this->request->getPost(); $ticket_data = $this->formatDateForClaim($ticket_data); + // $ticket_data = $this->getLastMatchedStatus($ticket_data, ); // print_rr($ticket_data); die; if ($ticket_data) { @@ -408,6 +557,7 @@ class TicketController extends BaseController $ticket_id = $this->request->getPost('ticket_master_id'); $ticket_data = $this->request->getPost(); $ticket_data = $this->formatDateForClaim($ticket_data); + $ticket_data['claim_status_id'] = $this->getLastMatchedStatus($ticket_data); // print_rr($ticket_data); die; $old_ticket_data = $this->ticketMasterModel->where('id', $ticket_id)->where('is_active', 1)->first(); @@ -418,6 +568,15 @@ class TicketController extends BaseController //mail trigger part $mail_responce = $this->sendAutoMailTrigger($ticket_id); + //send mail to the head for rejected ticket approvel + if($ticket_data['claim_status_id'] == 8 && $ticket_data['is_head_approved'] == 0){ + $this->sendMailToTheHead($ticket_data); + }else{ + $this->myLogger->logme('error', "Head Mail can't be sent"); + $this->myLogger->logme('error', "CLAIM STATUS ID : {data}", ['data' => $ticket_data['claim_status_id']]); + $this->myLogger->logme('error', "IS HEAD APPROVED : {data}", ['data' => $ticket_data['is_head_approved']]); + } + return $this->respond(['status' => true, 'code' => 200, 'data' => $ticket_data, "message" => "Claim updated successfully", 'mail_responce' => $mail_responce], 200); } else { return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to update claim'], 200); @@ -640,7 +799,7 @@ class TicketController extends BaseController } else if ($value == "policy_type") { $replaceData = str_replace("Claim-", "", $this->ticketType[$ticket_data['ticket_type_id']] ?? ""); } else { - $replaceData = strtoupper($ticket_data[$value]) ?? ''; + $replaceData = isset($ticket_data[$value]) ? strtoupper($ticket_data[$value]) : ''; } $content = str_replace($key, $replaceData, $content); @@ -657,6 +816,7 @@ class TicketController extends BaseController { $this->myLogger->logme('error', "Sending email with content"); if (!empty($mail_content)) { + $mail_content['from_mail'] = "claims@nhanceindia.in"; $response = MailHelper::send_email($mail_content); } else { $response = ['status' => false, 'code' => 404, 'message' => "Mail not sent, mail data empty"]; @@ -1135,4 +1295,94 @@ class TicketController extends BaseController // return $result; // } + + // function for Reject ticket Head Approvel mail sent function + public function sendMailToTheHead($ticket_data) + { + $this->myLogger->logme('error', "sendMailToTheHead Function Called"); + if(!empty($ticket_data)){ + + // print_r($ticket_data); die; + + $head_mail = $this->employeeModel + ->select('user_profiles.email') + ->join('clients', 'employees.client_id = clients.id') + ->join('client_rm', 'clients.id = client_rm.client_id') + ->join('user_profiles', 'client_rm.user_id = user_profiles.id') + ->where('employees.is_active', 1) + ->where('client_rm.is_active', 1) + ->where('client_rm.level', 1) + ->where('employees.id', $ticket_data['emp_id']) + ->first(); + + if(!empty($head_mail)){ + + $template_data = $this->ticketMailTemplateModel + ->where('ticket_mail_template.ticket_type', 0) + ->where('ticket_mail_template.trigger_type', 0) + ->first(); + + if(!empty($template_data)){ + + $subject = $this->replacePlaceholders($template_data['subject'], $ticket_data); + $message = $this->replacePlaceholders($template_data['mail_content'], $ticket_data); + + $emailData = [ + 'mail' => $head_mail['email'], + 'subject' => $subject, + 'message' => $message, + 'common' => [], + ]; + + $this->sendTrigger($emailData); + + }else{ + $this->myLogger->logme('error', "Head Mail can't be sent because Template data is empty"); + } + + + }else{ + $this->myLogger->logme('error', "Head Mail can't be sent because head mail is empty"); + } + + }else{ + $this->myLogger->logme('error', "Head Mail can't be sent because ticket data is empty"); + } + } + + public function getLastMatchedStatus($incoming_form_values) + { + if (empty($incoming_form_values) || !isset($incoming_form_values['claim_status_id']) || !isset($incoming_form_values['extra_fields_array_for_validate'])) { + return null; + } + + $lastMatchedStatus = $incoming_form_values['claim_status_id']; + + // Use the provided `extra_fields_array_for_validate` from the incoming data + $statusMapping = json_decode($incoming_form_values['extra_fields_array_for_validate']); + + foreach ($statusMapping as $status => $requiredFields) { + // Ensure requiredFields is an array + if (!is_array($requiredFields)) { + $requiredFields = [$requiredFields]; + } + + // Check if all required fields exist and are not empty in the incoming form values + $allFieldsMatched = true; + foreach ($requiredFields as $field) { + if (!isset($incoming_form_values[$field]) || empty($incoming_form_values[$field])) { + $allFieldsMatched = false; + break; + } + } + + // Update the last matched status if all fields are validated + if ($allFieldsMatched) { + $lastMatchedStatus = $status; + } + } + + return $lastMatchedStatus; + } + } diff --git a/app/Helpers/ChatbotHelper.php b/app/Helpers/ChatbotHelper.php index 9fc63f25..e1f213d3 100644 --- a/app/Helpers/ChatbotHelper.php +++ b/app/Helpers/ChatbotHelper.php @@ -9,21 +9,30 @@ use App\Models\EmployeePolicyModel; use App\Models\TPAModel; use App\Helpers\MailHelper; +use App\Models\InsurerModel; +use App\Models\TicketMasterModel; + +use App\Controllers\TicketController; class ChatbotHelper { + //get list of policies againest an employee_id - public static function getListOfPolicies() + public static function getListOfPolicies($chat_session_info) { - $emp_id = 12288; - $emp_code = 'HTL-007'; - $client_id = 159; - $policy_id = 0; - $client_branch_id = 126; - $relationship ='Father'; + // $emp_id = 12288; + // $emp_code = 'HTL-007'; + // $client_id = 159; + // $policy_id = 0; + // $client_branch_id = 126; + $emp_id = $chat_session_info['emp_id']; + $emp_code = $chat_session_info['emp_code']; + $client_id = $chat_session_info['client_id']; + $client_branch_id = $chat_session_info['client_branch_id']; + // $relationship ='Father'; $EmployeeModel = new EmployeeModel(); - return $EmployeeModel->getEmpFamilybyEmpCode(emp_code: $emp_code,client_id: $client_id,emp_status: ['draft'],policy_status:['draft'],client_branch_id:[ $client_branch_id ],relationship:[$relationship]); + return $EmployeeModel->getEmpFamilybyEmpCode(emp_code: $emp_code,client_id: $client_id,emp_status: ['draft'],policy_status:['draft'],client_branch_id:[ $client_branch_id ]);//,relationship:[$relationship]; } public static function getHospitalLink($client_policy_id){ @@ -35,41 +44,20 @@ class ChatbotHelper return is_array($res) && count($res) ? $res[0]['network_hospitals'] : null; } - public static function getPhoneNumber(){ - $emp_id = 12288; + public static function getPhoneNumber($chat_session_info){ + $emp_id = $chat_session_info['emp_id']; $EmployeeModel = new EmployeeModel(); return $EmployeeModel->select('mobile')->where('id',$emp_id)->first()['mobile']; } - public static function get_payload_data(string $key = null) + public static function sendReimbursementProcessOverMail($chat_session_info) { - // Get the request object using the service helper - $request = service('request'); - - // Get the raw input (JSON or other data) - $rawInput = $request->getBody(); - - // Check if the raw input is valid JSON - $payload = json_decode($rawInput, true); - - if (json_last_error() === JSON_ERROR_NONE) { - // JSON is valid, return the requested key or the entire payload - return $key ? ($payload[$key] ?? null) : $payload; - } else { - // JSON is invalid, fallback to raw input or POST data - $payload = $request->getRawInput() ?: $request->getPost(); - return $key ? ($payload[$key] ?? null) : $payload; - } - } - - public static function sendReimbursementProcessOverMail() - { - $emp_id = 12288; - $emp_code = 'HTL-007'; - $client_id = 159; - $policy_id = 0; - $client_branch_id = 126; - $relationship ='Father'; + $emp_id = $chat_session_info['emp_id']; + $emp_code = $chat_session_info['emp_code']; + $client_id = $chat_session_info['client_id']; + $client_branch_id = $chat_session_info['client_branch_id']; + // $policy_id = 0; + // $relationship ='Father'; $EmployeeModel = new EmployeeModel(); $data = $EmployeeModel->find($emp_id); if(isset($data) && isset($data['email_corporate'])) @@ -202,6 +190,378 @@ class ChatbotHelper return $template; } + public static function getInsurersList(){ + $insurer = new InsurerModel(); + $data = $insurer->select('short_name,name')->where('category','general')->where('is_active',1)->findAll(); + return $data; + } + + public static function sendQuotationRequestMail($data){ + + $message = SELF::quotationRequestMailTemplate($data); + + $common = ['mail_type'=>'request_quotation_bot']; + $email_id = getenv('email.enquiryMail'); + $res = MailHelper::send_email(['mail' => $email_id, 'subject' => 'Quotation Request Received from bot.', 'message' => $message,'common'=>$common]); + + $res = json_decode($res); + log_message('error','res: '.json_encode($res)); + if($res->status == 'success') + { + return true; + } + else + { + return false; + } + + } + + public static function quotationRequestMailTemplate($data){ + $message = 'A customer has requested for a quotation using bot,Here are all the details for it: + '.$data; + return $message; + } + + public static function getReimbursementClaimStatus($chat_session_info){ + + $client_claim_status = [ + 'Received' => [1,2,3,4], + 'Under Process' => [5,6,7,10], + 'Finished' => [9,11,12], + 'Rejected' => [8], + 'Cancelled' => [13,14] + ]; + $emp_id = $chat_session_info['emp_id']; + log_message('error','emp_id'.$emp_id); + $emp_code = $chat_session_info['emp_code']; + $client_id = $chat_session_info['client_id']; + $client_branch_id = $chat_session_info['client_branch_id']; + + $ticketMaster = new TicketMasterModel(); + $data = $ticketMaster->select('tcs.id as tcs_id,tcs.claim_status,ticket_master.claim_number,ticket_master.id,ticket_master.emp_name,ticket_master.emp_mail') + // ->join('client_policy cp',"cp.client_id = {$client_id} and cp.client_branch_id = {$client_branch_id} and cp.policy_id = {$policy_id} and cp.is_active = 1") + ->join('ticket_claim_status tcs',"ticket_master.claim_status_id = tcs.id and tcs.is_active = 1") + ->where('ticket_master.emp_id',$emp_id) + ->where('ticket_master.emp_code',$emp_code) + ->where('ticket_master.is_active',1) + ->orderBy('ticket_master.created_at', 'DESC') + ->first(); + $server_claim_status = $data['tcs_id']; + $matched_key = null; + foreach ($client_claim_status as $key => $statuses) { + if (in_array($server_claim_status, $statuses)) { + $matched_key = $key; + break; // Stop loop once found + } + } + + log_message('error','Data from ticket master'.json_encode($data)); + // print_r($data); + // die(); + $ticket_controller = new TicketController(); + + if (!empty($data) && !empty($matched_key)){ + $ticket_id = $data['id']; + $mail_content = Self::ReimbursementStatusMailTemplate($data['emp_name'],$data['claim_number'],$matched_key); + $common = ['mail_type'=>'Claim Status']; + $email_id = $data['emp_mail']; + $res = MailHelper::send_email(['mail' => $email_id, 'subject' => 'Here is your claim status you requested in bot.', 'message' => $mail_content,'common'=>$common]); + + $res = json_decode($res); + log_message('error','res: '.json_encode($res)); + if($res->status == 'success') + { + $data['client_status'] = $matched_key; + return $data; + } + else + { + return false; + } + + }else{ + return false; + } + + } + + public static function ReimbursementStatusMailTemplate($emp_name, $claim_number, $client_status) { + $template = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+ + + +
+
+ +
+ + + + + + + +
+ + + + + +
+ + + +
+ +
+ + +
+
+
+ + +
+
+
+ + + + + +
+
+
+ + + +
+
+ +
+ + + + + + + +
+ +
+

 

+

Dear [[member_name]],

+

Your Claim Number [[claim_number]] is currently in the [[status]] status with us.

+

 

+

 

+
+ +
+ + +
+
+
+ + +
+
+
+ + + + + +
+
+
+ + + +
+
+ +
+ + + + + + + +
+ +
+ Alternate image text +
+ +
+ + + + + + + +
+ +
+

ⓒ2024 Nhance India Insurance Broking Pvt Ltd

+
+ +
+ + +
+
+
+ + +
+
+
+ + + + +
+ + + + + + '; + + // Replace placeholders with actual values + $replacedTemplate = str_replace( + ['[[member_name]]', '[[claim_number]]', '[[status]]'], + [$emp_name, $claim_number, $client_status], + $template + ); + + return $replacedTemplate; + } + } diff --git a/app/Helpers/DepositHelper.php b/app/Helpers/DepositHelper.php index 0ee54530..d225f71f 100755 --- a/app/Helpers/DepositHelper.php +++ b/app/Helpers/DepositHelper.php @@ -63,6 +63,7 @@ class DepositHelper 'updated_by' => $data['updated_by'], 'balance' => $newBalance, // Include the new balance in the data array 'cd_ac_pk'=> isset($data['cd_ac_pk'])?$data['cd_ac_pk']:null, + 'record_date' => $data['record_date'] ?? null ]; // Insert data and get the insert ID diff --git a/app/Helpers/MailHelper.php b/app/Helpers/MailHelper.php index 99490bde..8fc4884b 100755 --- a/app/Helpers/MailHelper.php +++ b/app/Helpers/MailHelper.php @@ -304,7 +304,8 @@ class MailHelper $bcc = isset($params['bcc']) ? $params['bcc'] : ''; $cc = isset($params['cc']) ? $params['cc'] : ''; - $from_address = getenv('email.fromEmail'); + $from_address = isset($params['from_mail']) && !empty($params['from_mail']) ? $params['from_mail'] : getenv('email.fromEmail'); + // $from_address = "claims@nhanceindia.in"; try { $curl = curl_init(); diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php index 0b6a3a7b..a5cd1bda 100755 --- a/app/Helpers/excel_util_helper.php +++ b/app/Helpers/excel_util_helper.php @@ -234,7 +234,7 @@ if(!function_exists('check_si')) $is_si_found = false; $is_age_slab_found = false; - if($policy_details['policy_type_id'] == 1 && $slab_details['slab_rates'][0]['policy_grid_id'] == 1 && $slab_details['slab_rates'][0]['si_or_bp'] == 2) // GPA && grid type 1 for GPA && sub type is basic pay + if(($policy_details['policy_type_id'] == 1 || $policy_details['policy_type_id'] == 6 || $policy_details['policy_type_id'] == 7) && $slab_details['slab_rates'][0]['policy_grid_id'] == 1 && $slab_details['slab_rates'][0]['si_or_bp'] == 2) // GPA && grid type 1 for GPA && sub type is basic pay { $is_si_found = true; $is_age_slab_found = true; @@ -2173,20 +2173,21 @@ if(!function_exists('group_slab_rates_basedon_name')) //this key generating mandantory for display employee info in enrolment app w/o error -if(!function_exists('generate_family_floater_key')) -{ +if (!function_exists('generate_family_floater_key')) { function generate_family_floater_key($relationship) { if (strtolower(trim($relationship)) === 'mother' || strtolower(trim($relationship)) === 'father') { - $relation = 'parent'; - } else if(strtolower(trim($relationship)) === 'son' || strtolower(trim($relationship)) === 'daughter'){ - $relation = 'child'; - }else if(strtolower(trim($relationship)) === 'father in Law' || strtolower(trim($relationship)) === 'mother in Law'){ - $relation = 'parent_in_law'; - }else if(strtolower(trim($relationship)) === 'spouse'){ - $relation = 'spouse'; - }else{ - $relation = 'self'; - } + $relation = 'parent'; + } else if (strtolower(trim($relationship)) === 'son' || strtolower(trim($relationship)) === 'daughter') { + $relation = 'child'; + } else if (strtolower(trim($relationship)) === 'father in Law' || strtolower(trim($relationship)) === 'mother in Law') { + $relation = 'parent_in_law'; + } else if (strtolower(trim($relationship)) === 'spouse') { + $relation = 'spouse'; + } else { + $relation = 'self'; + } + + return $relation; } } \ No newline at end of file diff --git a/app/Helpers/sendMailNotification.php b/app/Helpers/sendMailNotification.php index 3ecb7932..44bea402 100755 --- a/app/Helpers/sendMailNotification.php +++ b/app/Helpers/sendMailNotification.php @@ -49,13 +49,13 @@ class sendMailNotification $nhance_logo = $_ENV['NHANCE_LOGO']; $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[member_name]]", $employee_name, $mail_content); - $mail_content = str_replace("[[member_mobile]]", $employee_mobile_no, $mail_content); - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $employee_name, $mail_content); + $mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $employee_mobile_no, $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); if ($dataToInsert['relationship'] == 'Self' && $mail != null || $mail != '') { $wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'attachments' => $attachments, 'common' => $common]; } @@ -77,16 +77,16 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); $employee_name =$emp_data['name']; $employee_mobile_no =$emp_data['mobile']; - $mail_content = str_replace("[[member_name]]", $employee_name, $mail_content); - $mail_content = str_replace("[[member_mobile]]", $employee_mobile_no, $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $employee_name, $mail_content); + $mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $employee_mobile_no, $mail_content); $mail = $emp_data['email_corporate']; $wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'common' => $common]; @@ -128,16 +128,17 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; // $client_logo = $nhance_logo; - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); - $mail_content = str_replace("[[member_name]]", $name, $mail_content); - $mail_content = str_replace("[[member_mobile]]", $employee_mobile_no, $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); - $mail_content = str_replace("[[post_enrollment_app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $name, $mail_content); + $mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $employee_mobile_no, $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); + $mail_content = str_replace(["[[post_enrollment_app_link]]", "{{post_enrollment_app_link}}"], "Review Details", $mail_content); // $mail_content = str_replace("[[tpa_id]]", $tpa_id, $mail_content); - $mail_content = str_replace("[[ecard_download_link]]", "Download Insurance Card", $mail_content); - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[ecard_download_link]]", "{{ecard_download_link}}"], "Download Insurance Card", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); + $wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'common' => $common]; return $wholeData; @@ -172,11 +173,11 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; // $client_logo = $nhance_logo; - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); // Step 1: Replace the placeholder with an HTML table structure $mail = ''; @@ -518,9 +519,9 @@ class sendMailNotification // dd($payable_employee_array, $Addon_list); // print_r($table_content); die; - $mail_content = str_replace("[[member_name]]", $name . ' (' . $emp_code . ')' , $mail_content); - $mail_content = str_replace("[[member_mobile]]", $employee_mobile_no, $mail_content); - $mail_content = str_replace("[[member_summary]]", $table_content , $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $name . ' (' . $emp_code . ')' , $mail_content); + $mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $employee_mobile_no, $mail_content); + $mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content); // print_r($mail_content); die; @@ -570,11 +571,11 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; // $client_logo = $nhance_logo; - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); // Step 1: Replace the placeholder with an HTML table structure $mail = ''; @@ -816,16 +817,16 @@ class sendMailNotification } - $mail_content = str_replace("[[member_summary]]", $table_content , $mail_content); + $mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content); $account_manager_mail_list = []; if(isset($user_list)){ foreach ($user_list as $key => $value) { $full_name = $value['first_name'] .' ' .$value['last_name']; - $mail_content = str_replace("[[member_name]]", $full_name , $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $full_name , $mail_content); $wholeData[] = ['mail' => $value['email'], 'subject' => $subject,'message'=> $mail_content, 'reply_to' => $client_data['reply_to'], 'common' => $common]; - // $wholeData[] = ['mail' => $value['email'], 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails']]; + // $wholeData[] = ['mail' => $value['email'], 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails'}}; } return $wholeData; } @@ -868,11 +869,11 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; // $client_logo = $nhance_logo; - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); // Step 1: Replace the placeholder with an HTML table structure $mail = ''; @@ -1115,7 +1116,7 @@ class sendMailNotification // $table_content .= '
' . $sum_total_words . '
'; } - $mail_content = str_replace("[[member_summary]]", $table_content , $mail_content); + $mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content); $hr_mails = $client_data['hr_mails']; @@ -1124,7 +1125,7 @@ class sendMailNotification $wholeData = []; foreach ($mail_array as $key => $value) { $wholeData[] = ['mail' => $value, 'subject' => $subject,'message'=> $mail_content, 'reply_to' => $client_data['reply_to'], 'common' => $common]; - // $wholeData[] = ['mail' => $value, 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails']]; + // $wholeData[] = ['mail' => $value, 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails'}}; } return $wholeData; @@ -1173,13 +1174,13 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[member_name]]", $employee_name, $mail_content); - $mail_content = str_replace("[[member_mobile]]", $mobile, $mail_content); - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $employee_name, $mail_content); + $mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $mobile, $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); if ($mail != null || $mail != '') { $wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'attachments' => $attachments]; @@ -1204,11 +1205,12 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); - $mail_content = str_replace("[[member_mobile]]", $mobile, $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $employee_name, $mail_content); + $mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $mobile, $mail_content); if ((isset($notification_data) && $notification_data['enabled'] == 1)) { @@ -1256,15 +1258,15 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); - $mail_content = str_replace("[[member_name]]", $name, $mail_content); - $mail_content = str_replace("[[member_mobile]]", $mobile, $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); - $mail_content = str_replace("[[post_enrollment_app_link]]", "Review Details", $mail_content); - $mail_content = str_replace("[[ecard_download_link]]", "Download Insurance Card", $mail_content); - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $name, $mail_content); + $mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $mobile, $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); + $mail_content = str_replace(["[[post_enrollment_app_link]]", "{{post_enrollment_app_link}}"], "Review Details", $mail_content); + $mail_content = str_replace(["[[ecard_download_link]]", "{{ecard_download_link}}"], "Download Insurance Card", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); $wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'],'attachments' => $attachments, 'reply_to' => $client_data['reply_to']]; @@ -1301,11 +1303,11 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); // Step 1: Replace the placeholder with an HTML table structure $table_content = ''; @@ -1413,9 +1415,9 @@ class sendMailNotification } } - $mail_content = str_replace("[[member_name]]", $name . ' (' . $emp_code . ')' , $mail_content); - $mail_content = str_replace("[[member_mobile]]", $mobile, $mail_content); - $mail_content = str_replace("[[member_summary]]", $table_content , $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $name . ' (' . $emp_code . ')' , $mail_content); + $mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $mobile, $mail_content); + $mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content); $wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to']]; @@ -1453,11 +1455,11 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); // Step 1: Replace the placeholder with an HTML table structure $table_content = ''; @@ -1563,8 +1565,8 @@ class sendMailNotification } } - $mail_content = str_replace("[[member_name]]", $name . ' (' . $emp_code . ')' , $mail_content); - $mail_content = str_replace("[[member_summary]]", $table_content , $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $name . ' (' . $emp_code . ')' , $mail_content); + $mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content); $wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'reply_to' => $client_data['reply_to']]; @@ -1600,11 +1602,11 @@ class sendMailNotification $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo']; - $mail_content = str_replace("[[nhance_logo]]", "Nhance Logo", $mail_content); - $mail_content = str_replace("[[client_logo]]", "Client Logo", $mail_content); - $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content); + $mail_content = str_replace(["[[nhance_logo]]", "{{nhance_logo}}"], "Nhance Logo", $mail_content); + $mail_content = str_replace(["[[client_logo]]", "{{client_logo}}"], "Client Logo", $mail_content); + $mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content); - $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content); + $mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "Review Details", $mail_content); // Step 1: Replace the placeholder with an HTML table structure $table_content = ''; @@ -1712,8 +1714,8 @@ class sendMailNotification } } - $mail_content = str_replace("[[member_name]]", $name . ' (' . $emp_code . ')' , $mail_content); - $mail_content = str_replace("[[member_summary]]", $table_content , $mail_content); + $mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $name . ' (' . $emp_code . ')' , $mail_content); + $mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content); $wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'reply_to' => $client_data['reply_to']]; diff --git a/app/Helpers/session_helper.php b/app/Helpers/session_helper.php index f5c6e513..31162658 100755 --- a/app/Helpers/session_helper.php +++ b/app/Helpers/session_helper.php @@ -183,6 +183,23 @@ if (!function_exists('user_team')) { } } +if (!function_exists('get_chatbot_session_info')) { + function get_chatbot_session_info() + { + // $CI =& get_instance(); + $session = \Config\Services::session(); + return [ + 'emp_id' => $session->get('CHATBOT_EMP_ID'), + 'origin' => $session->get('CHATBOT_ORIGIN'), + 'emp_code' => $session->get('CHATBOT_EMP_CODE'), + 'client_id' => $session->get('CHATBOT_CLIENT_ID'), + 'chatbot_random_user_id' => $session->get('CHATBOT_RANDOM_USER_ID'), + 'client_branch_id' => $session->get('CHATBOT_CLIENT_BRANCH_ID'), + + ]; + } +} + } diff --git a/app/Models/ClientDepositModel.php b/app/Models/ClientDepositModel.php index 91bdf1c4..9d45f38f 100755 --- a/app/Models/ClientDepositModel.php +++ b/app/Models/ClientDepositModel.php @@ -27,7 +27,8 @@ class ClientDepositModel extends Model "endorsement_no", "event_name", "unit", - "cd_ac_pk" + "cd_ac_pk", + "record_date" ]; diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index d23b315e..960f37d0 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -886,7 +886,6 @@ class EmployeePolicyModel extends Model LEFT JOIN ( SELECT - emp_code, group_key, MAX(CASE WHEN field_name = 'emp_status' THEN new_value END) AS empstatus, MAX(CASE WHEN field_name = 'change_event' THEN new_value END) AS changeevent, @@ -902,7 +901,7 @@ class EmployeePolicyModel extends Model group_key ) AS deletiondata - ON a.emp_code = deletiondata.emp_code AND a.status != 'truncated' + ON a.group_key = deletiondata.group_key AND a.status != 'truncated' LEFT JOIN ( @@ -1682,7 +1681,10 @@ class EmployeePolicyModel extends Model // reverse the employee policy table data for the truncated the deletion file public function updateEmployeePolicyTruncateReverse($file_id) - { + { + log_message('error', 'updateEmployeePolicyTruncateReverse model function called'); + log_message('error', 'FILE ID : {data}', ['data' => $file_id]); + $this->db->query(" UPDATE employee_polices SET @@ -1690,7 +1692,7 @@ class EmployeePolicyModel extends Model status = 'active', date_of_exit = NULL, reason_for_exit = NULL, - claim_status = 0, + claim_status = 0 WHERE id IN ( SELECT pk @@ -1747,11 +1749,11 @@ class EmployeePolicyModel extends Model } public function getHospitalLinkByPolicyandEmp($client_policy_id){ - $data = $this->db->table('employee_polices') + $data = $this->db->table('client_policy') ->select('tpa.network_hospitals') - ->where('client_policy_id', $client_policy_id) - ->where('employee_polices.is_active', 1) - ->join('tpa', 'tpa.id = employee_polices.tpa_id AND tpa.is_active = 1') + ->where('client_policy.id', $client_policy_id) + // ->where('employee_polices.is_active', 1) + ->join('tpa', 'tpa.id = client_policy.tpa_id AND tpa.is_active = 1') // ->join('employees', 'employees.id = employee_polices.employee_id AND employees.id = ' . (int) $emp_id) ->get()->getResultArray(); diff --git a/app/Models/LeadsModel.php b/app/Models/LeadsModel.php index 5867a5d0..bc47a3ff 100644 --- a/app/Models/LeadsModel.php +++ b/app/Models/LeadsModel.php @@ -120,10 +120,10 @@ class LeadsModel extends Model return $data; } - public function getLeadDataForLising() + public function getLeadDataForLising($where = null) { - return $this->select(' + $data = $this->select(' leads.*, kyc_entity_type.name as entity_type, policy_type.policy_type, @@ -144,13 +144,16 @@ class LeadsModel extends Model ) AS rfq_count ') - ->join('kyc_entity_type', 'leads.entity_type_id = kyc_entity_type.id', 'left') - ->join('user_profiles', 'leads.salse_person_id = user_profiles.id', 'left') - ->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left') - ->where('leads.is_active', 1) - ->orderBy('id', 'desc') - ->findAll(); + ->join('kyc_entity_type', 'leads.entity_type_id = kyc_entity_type.id', 'left') + ->join('user_profiles', 'leads.salse_person_id = user_profiles.id', 'left') + ->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left') + ->where('leads.is_active', 1); + if (!empty($where)) { + $data->where($where); + } + + return $data->orderBy('leads.id', 'desc')->findAll(); } public function getLeadForInsertClientList($type = null, $client_id = null) diff --git a/app/Models/RFQModel.php b/app/Models/RFQModel.php index 2b1560e0..2e51f2aa 100644 --- a/app/Models/RFQModel.php +++ b/app/Models/RFQModel.php @@ -77,6 +77,7 @@ class RFQModel extends Model ->where('rfq.lead_id', $lead_id) // ->where('rfq.type', $type) ->where('rfq.is_active', 1) + ->orderBy('rfq.id', 'desc') ->first(); } diff --git a/app/Models/TicketMasterModel.php b/app/Models/TicketMasterModel.php index c4fca96d..4cb59773 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -51,7 +51,25 @@ class TicketMasterModel extends Model 'claim_number', 'emp_id', 'insured_emp_id', - ]; + + 'raised_date', + 'registration_date', + 'query_received_date', + 'denial_date', + 'approved_date', + 'settled_date', + 'denial_reason', + 'approved_letter', + 'approved_amount', + 'utr_details', + 'settle_letter', + 'is_head_approved', + + 'return_remark', + 'cancel_remark', + 'awb_no_courier_name', + + ]; // Callbacks @@ -105,14 +123,20 @@ class TicketMasterModel extends Model public function getTemplateDataByTicketID($ticket_id) { $template_data = $this - ->select("ticket_mail_template.*, ticket_master.emp_mail,ticket_master.claim_status_id") + ->select("ticket_mail_template.*, CASE + WHEN employees.email_corporate IS NULL OR employees.email_corporate = '' + THEN ticket_master.emp_mail + ELSE employees.email_corporate + END as emp_mail, ,ticket_master.claim_status_id") ->join('ticket_claim_status', 'ticket_master.claim_status_id = ticket_claim_status.id and ticket_claim_status.is_active = 1') ->join('ticket_mail_template', ' ticket_claim_status.trigger_type = ticket_mail_template.trigger_type and ticket_claim_status.ticket_type = ticket_mail_template.ticket_type and ticket_mail_template.is_active = 1') + ->join('employees','employees.id = ticket_master.emp_id','left') ->where('ticket_master.id', $ticket_id) ->where('ticket_master.is_active', 1) + ->where('ticket_claim_status.is_active', 1) ->first(); return $template_data; @@ -122,6 +146,11 @@ class TicketMasterModel extends Model { $ticket_data = $this->select(" ticket_master.*, + CASE + WHEN employees.email_corporate IS NULL OR employees.email_corporate = '' + THEN ticket_master.emp_mail + ELSE employees.email_corporate + END as emp_mail, user_profiles.first_name as acm, user_profiles.mobile as acm_mobile, @@ -139,6 +168,7 @@ class TicketMasterModel extends Model ->join('tpa', 'ticket_master.tpa_id = tpa.id', 'left') ->join('ticket_notes', 'ticket_master.id = ticket_notes.ticket_id and ticket_notes.is_active = 1 and ticket_notes.is_auto_query = 1','left') ->join('user_profiles', 'ticket_master.acm_id = user_profiles.id', 'left') + ->join('employees','employees.id = ticket_master.emp_id','left') ->where('ticket_master.id', $ticket_id) ->where('ticket_master.is_active', 1) ->first(); diff --git a/app/Views/chatbot.php b/app/Views/chatbot.php index 359b4ce0..14a5f652 100644 --- a/app/Views/chatbot.php +++ b/app/Views/chatbot.php @@ -21,6 +21,7 @@ // mainColor: "#5C6BC0", // bubbleBackground: "#673AB7" // }; + var emp_name = 'Kumar'; var uid = Math.floor(100000 + Math.random() * 900000); console.log('CURRENT_USER' + uid); var botmanWidget = { @@ -35,12 +36,12 @@ enableAttachments: false, // Add extra parameters parameters: { - employee_id: '1234655', //PK of emp + employee_id: '12288', //PK of emp session_id: "XYZ789", // token origin: "mobile", // origin - emp_code:"EMP001", - client_id:10, - client_branch_id:12 + emp_code:"HTL-007", + client_id:159, + client_branch_id:125 } }; @@ -62,12 +63,12 @@ if (window.botmanWidget) { botmanChatWidget.open(); setTimeout(function(){ - botmanChatWidget.sayAsBot('Hi user '+ uid +' ,This is ILA your Insurance AI Assistant, plz choose the following options') - botmanChatWidget.whisper('hi'); - },2000); + botmanChatWidget.sayAsBot('Hi '+ emp_name +',This is ILA your Insurance Assistant, plz choose the following options') + botmanChatWidget.whisper('Hi'); + },3000); } - }, 3000); // Delay to ensure widget is initialized + }, 2000); // Delay to ensure widget is initialized }); diff --git a/app/Views/employee_data_list.php b/app/Views/employee_data_list.php index 9543fa85..9dd0956c 100755 --- a/app/Views/employee_data_list.php +++ b/app/Views/employee_data_list.php @@ -46,6 +46,38 @@ + +
@@ -154,6 +186,8 @@ ) { ?> Edit + Employee History + @@ -270,14 +304,30 @@
+ + + + diff --git a/app/Views/employee_list.php b/app/Views/employee_list.php index 7c35a42d..976e2f69 100755 --- a/app/Views/employee_list.php +++ b/app/Views/employee_list.php @@ -142,25 +142,98 @@ table.dataTable tbody td { \ No newline at end of file diff --git a/app/Views/leads_form.php b/app/Views/leads_form.php index 10f6e264..0587df3e 100644 --- a/app/Views/leads_form.php +++ b/app/Views/leads_form.php @@ -1,38 +1,41 @@ @@ -82,11 +85,11 @@ @@ -103,11 +106,11 @@ @@ -117,11 +120,11 @@ @@ -233,11 +236,11 @@ @@ -247,16 +250,16 @@ @@ -279,461 +282,680 @@ + + \ No newline at end of file diff --git a/app/Views/leads_list.php b/app/Views/leads_list.php index ddf4d238..0f6c0199 100644 --- a/app/Views/leads_list.php +++ b/app/Views/leads_list.php @@ -127,7 +127,7 @@ table.dataTable tbody td { Edit - + RFQ @@ -508,9 +517,9 @@ -
+
- + " placeholder="Enter Subject">
@@ -641,7 +650,7 @@ // Check if data is valid (not null or undefined) and is an object if (data && typeof data === 'object') { - insurer_count = data.proposal_data.over_all_column_data['Proposal 1']['insurers'].length; + let insurer_count = data.proposal_data.over_all_column_data['Proposal 1']?.insurers?.length || 0; jsonToTable(data); } else { addSuggestionsToTable(); @@ -1030,16 +1039,29 @@ function addSuggestionsToTable() { console.log(' addSuggestionsToTable suggestions ', suggestions); console.log(' addSuggestionsToTable suggestions type', typeof suggestions); + console.log(' over_all_column_data', over_all_column_data); let leadType = ; console.log('leadType', leadType); let renewal_or_rollover = "Proposal 1"; - if(leadType == 2){ - renewal_or_rollover = "Existing Renewal" - }else if(leadType == 3){ - renewal_or_rollover = "Existing Rollover" + if (leadType == 2) { + renewal_or_rollover = "Existing Renewal"; + } else if (leadType == 3) { + renewal_or_rollover = "Existing Rollover"; } + over_all_column_data = { + [renewal_or_rollover]: { + "qcr": 1, + "stc": 1, + "insurers": [] + } + }; + + console.log('renewal_or_rollover', renewal_or_rollover); + console.log(' over_all_column_data', over_all_column_data); + + $('#first_proposel_title').html(` ${renewal_or_rollover} @@ -3137,9 +3159,9 @@ function appendInput(data) { } html += ` -
+
- + '" placeholder="Subject">
`; @@ -3197,9 +3219,9 @@ function appendInput(data) { `; html += ` -
+
- + " type="text" id="mail_subject" class="form-control" placeholder="Subject">
`; @@ -3576,7 +3598,7 @@ function ajaxRequest(formData) { $('#cc').val('').select2({ placeholder : 'select CC Mail' }); - $('#subject').val(''); + // $('#subject').val(''); $('#proposals').val(''); $('#placement_to').val('').select2({ placeholder : 'select To Mail' @@ -3653,7 +3675,7 @@ $('.close').click(function(){ $('#cc').val('').select2({ placeholder : 'select CC Mail' }); - $('#subject').val(''); + // $('#subject').val(''); $('#proposals').val(''); $('#placement_to').val('').select2({ placeholder : 'select To Mail' @@ -3806,7 +3828,7 @@ function constructInsurerNameWithVersion(proposal_name, insurerName) { let newDisplayName = `${insurerName}-V${maxVersion + 1}`; return newDisplayName; } - return false; + return insurerName; } function checkTheTableDataChanged(redirect_type, url){ @@ -4441,7 +4463,7 @@ function jsonToTable(json) { //Premium Calculation child table function populateTable(json) { - console.log(json); + console.log('populateTable json data', json); const table = document.getElementById("rfqTable_for_calc"); const thead = document.createElement("thead"); @@ -4458,7 +4480,7 @@ function populateTable(json) { let randomColor = 'hsl(' + Math.random() * 360 + ', 100%, 93%)'; // Skip unwanted parent headers - if (!["Item Key", "Action"].includes(header.parentHeader)) { + if (!["Item Key"].includes(header.parentHeader)) { // console.log(header.parentHeader); // Create the parent header @@ -4473,7 +4495,12 @@ function populateTable(json) { th.classList.add('sticky'); } - if(header.parentHeader !== 'Particulars' && header.parentHeader !== 'Sno'){ + if (header.parentHeader === "Action") { + th.classList.add('readonly-select'); + th.textContent = " "; + } + + if(header.parentHeader !== 'Particulars' && header.parentHeader !== 'Sno' && header.parentHeader !== "Action"){ th.style.backgroundColor = randomColor; } // Calculate colspan based on the number of subheaders @@ -4507,7 +4534,12 @@ function populateTable(json) { subTh.classList.add('sticky'); } - if(header.parentHeader != "Particulars" && header.parentHeader !== 'Sno'){ + if (header.parentHeader === "Action") { + subTh.classList.add('readonly-select'); + subTh.textContent = " "; + } + + if(header.parentHeader != "Particulars" && header.parentHeader !== 'Sno' && header.parentHeader !== "Action"){ subTh.style.backgroundColor = randomColor; } @@ -4554,7 +4586,7 @@ function populateTable(json) { // Create a td for each subheader json.table_data.headers.forEach((header, headerIndexForCalc) => { - if (!["Item Key", "Sno", "Particulars", "Action"].includes(header.parentHeader)) { + if (!["Item Key", "Sno", "Particulars"].includes(header.parentHeader)) { header.subHeaders.forEach((value, index) => { // if(value != '-'){ @@ -4568,6 +4600,13 @@ function populateTable(json) { td.setAttribute("contenteditable", "true"); } + if(header.parentHeader == "Action"){ + td.setAttribute("contenteditable", false); + td.classList.add('action'); + td.classList.add('disableborder'); + td.classList.add('readonly-select'); + } + td.classList.add( 'editablecolumnsforcalc', label.toLowerCase().replace(/\s+/g, '').replace(/[%₹()]/g, '') @@ -4582,6 +4621,7 @@ function populateTable(json) { } // td.id = `${label.toLowerCase()}`; + console.log('child table', header.parentHeader); td.textContent = json.premium_data?.data?.[header.parentHeader]?.[value]?.[label] || ""; tr.appendChild(td); // } diff --git a/phpqueue.sh b/phpqueue.sh index f1e7176b..cc97a2db 100755 --- a/phpqueue.sh +++ b/phpqueue.sh @@ -1,56 +1,7 @@ -!/bin/bash +#!/bin/bash + while true; do echo "Running job at $(date)" - /usr/bin/php /opt/lampp/htdocs/nhance/public/index.php cli/processjob - !/bin/bash -!/bin/bash - -# Read the Job_Queue variable from the temporary file -#!/bin/bash - -#!/bin/bash - -#!/bin/bash - -# Define the root directory for the project and PID file path -#!/bin/bash - -# Define paths -# ROOT_DIR=$(dirname "$(realpath "$0")") -# JOB_QUEUE_FILE="$ROOT_DIR/job_queue" -# PID_FILE="$ROOT_DIR/phpqueue.pid" - - -# # Check if the script is already running -# if [[ -f "$PID_FILE" ]] && kill -0 "$(cat $PID_FILE)" 2>/dev/null; then -# echo "phpqueue.sh is already running. Exiting." -# exit 1 -# fi - -# # Write the current process ID (PID) to the PID file -# echo $$ > "$PID_FILE" - -# # Ensure the PID file is removed on script exit -# trap "rm -f $PID_FILE" EXIT - -# # Main loop -# while true; do -# # Check if the Job_Queue file exists -# if [[ ! -f "$JOB_QUEUE_FILE" ]]; then -# echo "Job Queue file not found." -# exit 1 -# fi - -# # Read the value of Job_Queue from the file -# Job_Queue=$(cat "$JOB_QUEUE_FILE") - -# if [[ "$Job_Queue" -eq 1 ]]; then -# /usr/bin/php /opt/lampp/htdocs/nhance/public/index.php cli/processjob -# else -# echo "No job to process." -# fi - -# # Sleep for 1 second before the next iteration -# sleep 1 -# done - + /usr/bin/php /var/www/nhance/zenith/public/index.php cli/processjob + sleep 1 # Optional: Add a sleep to avoid CPU overload +done diff --git a/writable/cache/.gitkeep b/writable/cache/.gitkeep deleted file mode 100755 index b702fbc3..00000000 --- a/writable/cache/.gitkeep +++ /dev/null @@ -1,11 +0,0 @@ - - - - 403 Forbidden - - - -

Directory access is forbidden.

- - -