diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 3d8b8f42..2f294b04 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -412,6 +412,7 @@ $routes->get('cli/sendZeptoMail', 'MasterController::testZeptoSMTP'); $routes->cli('cli/processjob', 'JobWorker::processJob'); $routes->cli('cli/processjobs', 'JobWorker::processJobs'); +$routes->cli('cli/sendMailWithAutoQuery','TicketController::sendMailWithAutoQuery'); $routes->get("processjob", "JobWorker::processJob"); $routes->cli('cli/new_gmail_token', 'MasterController::generateNewGmailAPIToken'); diff --git a/app/Controllers/Chatbot/EcardDownloadConversation.php b/app/Controllers/Chatbot/EcardDownloadConversation.php index 0cc82314..19fad42f 100644 --- a/app/Controllers/Chatbot/EcardDownloadConversation.php +++ b/app/Controllers/Chatbot/EcardDownloadConversation.php @@ -51,7 +51,7 @@ class EcardDownloadConversation extends Conversation $link = base_url().'/download-e-card/' . explode('#',$answer->getValue())[1].'/1'; $this->say('Click here to downlad: Ecard'); - $this->bot->startConversation(new EcardDownloadConversation()); // ✅ Restart the + $this->bot->startConversation(new doYouWantToContinueConversation()); // ✅ Restart the break; diff --git a/app/Controllers/Chatbot/MainMenuConversation.php b/app/Controllers/Chatbot/MainMenuConversation.php index 76e150a6..011806f0 100644 --- a/app/Controllers/Chatbot/MainMenuConversation.php +++ b/app/Controllers/Chatbot/MainMenuConversation.php @@ -2,6 +2,7 @@ namespace App\Controllers\Chatbot; +use App\Helpers\ChatbotHelper; use BotMan\BotMan\Messages\Conversations\Conversation; use BotMan\BotMan\Messages\Outgoing\Question; use BotMan\BotMan\Messages\Outgoing\Actions\Button; @@ -28,24 +29,30 @@ class MainMenuConversation extends Conversation $this->bot->ask($question, function ($answer) { switch ($answer->getValue()) { case "ecard_download": - $this->say("📄 Ecard Download Menu:"); - $this->bot->startConversation(new EcardDownloadConversation()); + + $message = ChatbotHelper::get_payload_data(); + $this->say($message); + // $this->say("📄 Ecard Download Menu:"); + // $this->bot->startConversation(new EcardDownloadConversation()); break; case "network_hospital": - $this->say("🏥 Network Hospital Menu:"); + $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->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->say("New Policy selected. (Dummy Response)"); + $this->bot->startConversation(new policyConversation()); break; case "renew_policy": - $this->say("Renew Policy selected. (Dummy Response)"); + $this->bot->startConversation(new policyConversation()); break; default: $this->say("Invalid selection. Please choose an option."); @@ -54,4 +61,5 @@ class MainMenuConversation extends Conversation } }); } + } diff --git a/app/Controllers/Chatbot/NetworkHospitalConversation.php b/app/Controllers/Chatbot/NetworkHospitalConversation.php index 70e71340..004b6ef6 100644 --- a/app/Controllers/Chatbot/NetworkHospitalConversation.php +++ b/app/Controllers/Chatbot/NetworkHospitalConversation.php @@ -7,8 +7,12 @@ use BotMan\BotMan\Messages\Conversations\Conversation; use BotMan\BotMan\Messages\Outgoing\Question; use BotMan\BotMan\Messages\Outgoing\Actions\Button; +use App\Helpers\ChatbotHelper; + class NetworkHospitalConversation extends Conversation { + + public function run() { $this->showHospitalMenu(); @@ -26,10 +30,20 @@ class NetworkHospitalConversation extends Conversation $this->bot->ask($question, function ($answer) { switch ($answer->getValue()) { case "search_city": - $this->say("Searching by City... (Dummy Response)"); + $this->bot->ask("Enter the City Name",function ($response){ + // $cityName = $response->getText(); + $hospital_link = ChatbotHelper::getHospitalLink(); + $this->say("Searching for hospitals in ....."); + + $this->say('Click here for hospital details'); + $this->bot->startConversation(new doYouWantToContinueConversation()); + }); break; case "search_pincode": - $this->say("Searching by Pincode... (Dummy Response)"); + $this->bot->ask("Enter the Pincode",function ($response){ + $pincode = $response->getText(); + $this->say("Searching for hospitals in ".$pincode.'.....'); + }); break; case "go_back": $this->bot->startConversation(new MainMenuConversation()); @@ -41,4 +55,5 @@ class NetworkHospitalConversation extends Conversation } }); } + } diff --git a/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php b/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php new file mode 100644 index 00000000..b1cf1ec0 --- /dev/null +++ b/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php @@ -0,0 +1,47 @@ +claimProcess(); + } + + protected function claimProcess() + { + $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->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; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php b/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php new file mode 100644 index 00000000..4c6b58dc --- /dev/null +++ b/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php @@ -0,0 +1,47 @@ +claimStatus(); + } + + 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->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; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/commonPolicyOptionConversations.php b/app/Controllers/Chatbot/commonPolicyOptionConversations.php new file mode 100644 index 00000000..e32c318b --- /dev/null +++ b/app/Controllers/Chatbot/commonPolicyOptionConversations.php @@ -0,0 +1,50 @@ +policyOptions(); + } + + 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"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "upload_vehicle_details": + // $cityName = $response->getText(); + $this->bot->startConversation(new vehicleFormConversation()); + 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/doYouWantToContinueConversation.php b/app/Controllers/Chatbot/doYouWantToContinueConversation.php new file mode 100644 index 00000000..4da9aed7 --- /dev/null +++ b/app/Controllers/Chatbot/doYouWantToContinueConversation.php @@ -0,0 +1,48 @@ +askQuestion(); + } + + 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"), + ]); + + $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; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/fourWheelerOptionsConversations.php b/app/Controllers/Chatbot/fourWheelerOptionsConversations.php new file mode 100644 index 00000000..6c850c03 --- /dev/null +++ b/app/Controllers/Chatbot/fourWheelerOptionsConversations.php @@ -0,0 +1,50 @@ +show4WOptions(); + } + + 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"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "3p": + // $cityName = $response->getText(); + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "comp": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/hospitalPolicyConversation.php b/app/Controllers/Chatbot/hospitalPolicyConversation.php new file mode 100644 index 00000000..4a29c918 --- /dev/null +++ b/app/Controllers/Chatbot/hospitalPolicyConversation.php @@ -0,0 +1,49 @@ +showMediclaimPolicyOptions(); + } + + protected function showMediclaimPolicyOptions() + { + $question = Question::create("Choose Policy Type:") + ->addButtons([ + Button::create("🔹 Individual")->value("individual"), + Button::create("🔹 Floater")->value("floater"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "individual": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "floater": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/medicalClaimOptionConversations.php b/app/Controllers/Chatbot/medicalClaimOptionConversations.php new file mode 100644 index 00000000..db66cda3 --- /dev/null +++ b/app/Controllers/Chatbot/medicalClaimOptionConversations.php @@ -0,0 +1,50 @@ +showMediclaimOptions(); + } + + 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"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "individual": + // $cityName = $response->getText(); + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "floater": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/policyConversation.php b/app/Controllers/Chatbot/policyConversation.php new file mode 100644 index 00000000..9a3c2669 --- /dev/null +++ b/app/Controllers/Chatbot/policyConversation.php @@ -0,0 +1,55 @@ +showNewPolicy(); + } + + 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"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "2_wheeler": + // $cityName = $response->getText(); + $this->bot->startConversation(new twoWheelerOptionsConversations()); + break; + case "4_wheeler": + $this->bot->startConversation(new fourWheelerOptionsConversations()); + break; + case "mediclaim": + $this->bot->startConversation(new medicalClaimOptionConversations()); + + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/serviceExecutiveConversation.php b/app/Controllers/Chatbot/serviceExecutiveConversation.php new file mode 100644 index 00000000..64a3e842 --- /dev/null +++ b/app/Controllers/Chatbot/serviceExecutiveConversation.php @@ -0,0 +1,60 @@ +askServiceExecutive(); + } + + protected function askServiceExecutive() + { + $mobile = ChatbotHelper::getPhoneNumber(); // Assuming this fetches the user's phone number + $question = Question::create("Is this Your Mobile Number: $mobile") + ->addButtons([ + Button::create("✅ Yes")->value("yes"), + Button::create("❌ No")->value("no"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "yes": + $this->say("Our executive will call you at the earliest."); + $this->bot->startConversation(new doYouWantToContinueConversation()); + break; + + case "no": + $this->ask('Enter Your Mobile Number?', function ($response) { + $this->mobile_number = $response->getText(); + $this->bot->userStorage()->save([ + 'mobile_number' => $this->mobile_number + ]); + // Use 'use' to bring the class context into the closure + $this->say("Our executive will call you at the earliest."); + $this->bot->startConversation(new doYouWantToContinueConversation()); + }); + break; + + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + + default: + $this->say("Invalid selection. Please choose an option."); + $this->askServiceExecutive(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/twoWheelerOptionsConversations.php b/app/Controllers/Chatbot/twoWheelerOptionsConversations.php new file mode 100644 index 00000000..44c1f4da --- /dev/null +++ b/app/Controllers/Chatbot/twoWheelerOptionsConversations.php @@ -0,0 +1,50 @@ +show2WOptions(); + } + + 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"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "3p": + // $cityName = $response->getText(); + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "comp": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/vehicleFormConversation.php b/app/Controllers/Chatbot/vehicleFormConversation.php new file mode 100644 index 00000000..aa80c550 --- /dev/null +++ b/app/Controllers/Chatbot/vehicleFormConversation.php @@ -0,0 +1,83 @@ +askVehicleName(); + } + + protected function askVehicleName() + { + $this->ask('Enter Vehicle Name ?', function ($response) { + $this->vehicleName = $response->getText(); + if (empty($this->vehicleName)) { + $this->say('Vehicle Name Cannot be Empty'); + return $this->askVehicleName(); // Re-ask if empty + } + $this->askVehicleYOM(); // Ask next question + }); + } + + protected function askVehicleYOM() + { + $this->ask('Enter Vehicle Year of Manufacture ?', function ($response) { + $this->vehicleYOM = $response->getText(); + if (empty($this->vehicleYOM)) { + $this->say('Vehicle Year of Manufacture Cannot be Empty'); + return $this->askVehicleYOM(); // Re-ask if empty + } + $this->askVehicleEngineNo(); // Ask next question + }); + } + + protected function askVehicleEngineNo() + { + $this->ask('Enter Vehicle Engine Number ?', function ($response) { + $this->vehicleEngineNo = $response->getText(); + if (empty($this->vehicleEngineNo)) { + $this->say('Vehicle Engine Number Cannot be Empty'); + return $this->askVehicleEngineNo(); // Re-ask if empty + } + $this->askVehicleInvoiceNo(); // Ask next question + }); + } + + protected function askVehicleInvoiceNo() + { + $this->ask('Enter Vehicle Invoice Number ?', function ($response) { + $this->vehicleInvoiceNo = $response->getText(); + if (empty($this->vehicleInvoiceNo)) { + $this->say('Vehicle Invoice Number Cannot be Empty'); + return $this->askVehicleInvoiceNo(); // Re-ask if empty + } + $this->storeVehicleData(); // Proceed to store the data + }); + } + + protected function storeVehicleData() + { + // Save all collected data to user storage + $this->bot->userStorage()->save([ + 'vehicle_name' => $this->vehicleName, + 'vehicle_yom' => $this->vehicleYOM, + 'vehicle_engine_no' => $this->vehicleEngineNo, + 'vehicle_invoice_no' => $this->vehicleInvoiceNo + ]); + + $this->say('Vehicle Information Saved!'); + $this->bot->startConversation(new doYouWantToContinueConversation()); + + } +} diff --git a/app/Controllers/ChatbotControllerNew.php b/app/Controllers/ChatbotControllerNew.php index fc6bd75a..a43111eb 100644 --- a/app/Controllers/ChatbotControllerNew.php +++ b/app/Controllers/ChatbotControllerNew.php @@ -54,10 +54,12 @@ class ChatbotControllerNew extends BaseController { // Start the Main Menu when user says "hi" or "start" $this->botman->hears('start|hi|hello', function (BotMan $bot) { - $bot->reply('How how can i assit?'); + $bot->reply('Hi how can i assit?'); $bot->startConversation(new MainMenuConversation()); }); + + // $this->botman->hears('main_menu', function (BotMan $bot) { // BotService::sendMainOptions($bot); // }); diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index e3817ef5..43b0bf0d 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -109,6 +109,7 @@ class TicketController extends BaseController '((CLAIM_NO))' => 'claim_number', '((RELATIONSHIP))' => 'relationship', '((POLICY_TYPE))' => 'policy_type', + '((AUTO_QUERY_CONTENT))' => 'auto_query_content', ]; $this->ticketMasterModel = new TicketMasterModel(); @@ -145,9 +146,9 @@ class TicketController extends BaseController if ($action == 1) { $data = $this->ticketMasterModel ->select('ticket_master.id, ticket_claim_status.claim_status as status, - ticket_master.claim_number as claim_no,ticket_master.tpa_id,ticket_master.emp_name, - insurers.name as insurer_name, clients.client_name, - DATE_FORMAT(ticket_master.created_at, "%d-%m-%Y") as tat') + ticket_master.claim_number as claim_no,ticket_master.tpa_id,ticket_master.emp_name, + insurers.name as insurer_name, clients.client_name,ticket_master.insured_name,clients.short_name, + DATE_FORMAT(ticket_master.created_at, "%d-%m-%Y") as tat') ->join('insurers', 'insurers.id = ticket_master.insurer_id and insurers.is_active = 1', 'left') ->join('clients', 'clients.id = ticket_master.client_id and clients.is_active = 1', 'left') ->join('ticket_claim_status', 'ticket_claim_status.id = ticket_master.claim_status_id and ticket_claim_status.is_active = 1', 'left') @@ -169,9 +170,9 @@ class TicketController extends BaseController // print_rr($where); $data = $this->ticketMasterModel ->select('ticket_master.id, ticket_claim_status.claim_status as status, - ticket_master.claim_number as claim_no,ticket_master.tpa_id,ticket_master.emp_name, - insurers.name as insurer_name, clients.client_name, - DATE_FORMAT(ticket_master.created_at, "%d-%m-%Y") as tat') + ticket_master.claim_number as claim_no,ticket_master.tpa_id,ticket_master.emp_name, + insurers.name as insurer_name, clients.client_name,ticket_master.insured_name,clients.short_name, + DATE_FORMAT(ticket_master.created_at, "%d-%m-%Y") as tat') ->join('insurers', 'insurers.id = ticket_master.insurer_id and insurers.is_active = 1', 'left') ->join('clients', 'clients.id = ticket_master.client_id and clients.is_active = 1', 'left') ->join('ticket_claim_status', 'ticket_claim_status.id = ticket_master.claim_status_id and ticket_claim_status.is_active = 1', 'left') @@ -250,7 +251,7 @@ class TicketController extends BaseController $ticket_data = $this->formatDateForClaim($ticket_data, 'd/m/Y'); // dd($ticket_data); $template_data = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id); - if(!empty($template_data)){ + if (!empty($template_data)) { $template_data['mail_content'] = $this->replacePlaceholders($template_data['mail_content'], $ticket_data); $template_data['subject'] = $this->replacePlaceholders($template_data['subject'], $ticket_data); } @@ -423,8 +424,10 @@ class TicketController extends BaseController // action = 1 is read, action 2 is insert/update if ($action == 1) { $ticket_master_id = $this->request->getPost('id'); + $is_auto_query = $this->request->getPost('is_auto_query'); + // print_rr($is_auto_query); if (isset($ticket_master_id) && $ticket_master_id != '') { - $data = $this->ticketNoteModel->where('is_active', 1)->where('ticket_id', $ticket_master_id)->first(); + $data = $this->ticketNoteModel->where('is_active', 1)->where('ticket_id', $ticket_master_id)->where('is_auto_query', $is_auto_query)->first(); if ($data) { return $this->respond(['status' => true, 'data' => $data], 200); } else { @@ -434,10 +437,13 @@ class TicketController extends BaseController } elseif ($action == 2) { $data = $this->request->getPost(); // if (isset($data['id']) && $data['id'] != ''){ + // print_rr($data);die(); $status = $this->ticketNoteModel->save($data); + $id = isset($data['id']) ? $data['id'] : $this->ticketNoteModel->insertID(); + // } if ($status) { - return $this->respond(['status' => true], 200); + return $this->respond(['status' => true, 'id' => $id], 200); } else { return $this->respond(['status' => false], 200); } @@ -532,12 +538,12 @@ class TicketController extends BaseController // Validate Essential Fields if (empty($ticket_data['emp_mail'])) { - $this->myLogger->logme('error', "Employee email is missing for Ticket ID : '".$ticket_id ."'"); + $this->myLogger->logme('error', "Employee email is missing for Ticket ID : '" . $ticket_id . "'"); return null; } if (empty($subject) || empty($message)) { - $this->myLogger->logme('error', "Generated email content is empty for Ticket ID: '".$ticket_id ."'"); + $this->myLogger->logme('error', "Generated email content is empty for Ticket ID: '" . $ticket_id . "'"); return null; } @@ -570,9 +576,9 @@ class TicketController extends BaseController if ($value == "emp_code") { $replaceData = $ticket_data[$value] ?? ''; - }else if($value == "policy_type"){ + } else if ($value == "policy_type") { $replaceData = str_replace("Claim-", "", $this->ticketType[$ticket_data['ticket_type_id']] ?? ""); - }else{ + } else { $replaceData = strtoupper($ticket_data[$value]) ?? ''; } @@ -589,9 +595,9 @@ class TicketController extends BaseController public function sendTrigger($mail_content) { $this->myLogger->logme('error', "Sending email with content"); - if(!empty($mail_content)){ + if (!empty($mail_content)) { $response = MailHelper::send_email($mail_content); - }else{ + } else { $response = ['status' => false, 'code' => 404, 'message' => "Mail not sent, mail data empty"]; $this->myLogger->logme('error', "Mail not sent, mail data empty"); } @@ -615,14 +621,14 @@ class TicketController extends BaseController } $ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($mail_data['ticket_id']); - + // print_rr($ticket_data);die(); if (!$ticket_data) { - $this->myLogger->logme('error', "No ticket data found for Ticket ID : " .$mail_data['ticket_id']); + $this->myLogger->logme('error', "No ticket data found for Ticket ID : " . $mail_data['ticket_id']); $this->myLogger->logme('error', "Reply mail not send"); return null; } - if(!empty($mail_data)){ + if (!empty($mail_data)) { $mail_data['mail_content'] = $this->replacePlaceholders($mail_data['mail_content'], $ticket_data); $mail_data['mail_subject'] = $this->replacePlaceholders($mail_data['mail_subject'], $ticket_data); } @@ -653,10 +659,10 @@ class TicketController extends BaseController $mail_content = $this->constructMailContent($ticket_id); // print_r($mail_content); die; $mail_responce = $this->sendTrigger($mail_content); - }elseif (!empty($auto_mail_enable) && $auto_mail_enable['is_auto_mail'] == 0 ){ - $this->myLogger->logme('error','Auto Mail Not Sent, Reason: Automail Not Enabled'); - }else{ - $this->myLogger->logme('error','Auto Mail Not Sent, Reason: Mail Template Not Created'); + } elseif (!empty($auto_mail_enable) && $auto_mail_enable['is_auto_mail'] == 0) { + $this->myLogger->logme('error', 'Auto Mail Not Sent, Reason: Automail Not Enabled'); + } else { + $this->myLogger->logme('error', 'Auto Mail Not Sent, Reason: Mail Template Not Created'); } return $mail_responce; @@ -733,61 +739,106 @@ class TicketController extends BaseController AND th.is_active = 1 ORDER BY th.created_at DESC"; - $data = $this->ticketHistoryModel->query($sql)->getResultArray(); - $priorityType = $this->priorityType; - $relationshipType = $this->relationshipType; - $modeOFIntimate = $this->modeOFIntimate; - $claim_type = $this->claimType; - foreach ($data as &$row) { - if ($row['field_name'] == 'claim_status_id') { - $new_old_value = isset($row['old_status_value']) ? $row['old_status_value'] : '-'; - $new_new_value = $row['new_status_value']; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; - } elseif ($row['field_name'] == 'acm_id') { - $new_old_value = isset($row['old_account_manager']) ? $row['old_account_manager'] : '-'; - $new_new_value = $row['new_account_manager']; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; - } elseif ($row['field_name'] == 'insured_emp_id') { - $new_old_value = isset($row['old_insured_id_name']) ? $row['old_insured_id_name'] : '-'; - $new_new_value = $row['new_insured_id_name']; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; - } elseif ($row['field_name'] == 'priority') { - $new_old_value = isset($priorityType[$row['old_value']]) ? $priorityType[$row['old_value']] : '-'; - $new_new_value = isset($priorityType[$row['new_value']]) ? $priorityType[$row['new_value']] : '-'; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; - } elseif ($row['field_name'] == 'relationship') { - $new_old_value = isset($relationshipType[$row['old_value']]) ? $relationshipType[$row['old_value']] : '-'; - $new_new_value = isset($relationshipType[$row['new_value']]) ? $relationshipType[$row['new_value']] : '-'; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; - } elseif ($row['field_name'] == 'mode_of_intimation') { - $new_old_value = isset($modeOFIntimate[$row['old_value']]) ? $modeOFIntimate[$row['old_value']] : "-"; - $new_new_value = isset($modeOFIntimate[$row['old_value']]) ? $modeOFIntimate[$row['old_value']] : "-"; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; - } elseif ($row['field_name'] == 'claim_type') { - $new_old_value = isset($claim_type[$row['ticket_type_id']][$row['old_value']]) ? $claim_type[$row['ticket_type_id']][$row['old_value']] : '-'; - $new_new_value = isset($claim_type[$row['ticket_type_id']][$row['new_value']])?$claim_type[$row['ticket_type_id']][$row['new_value']]:'-'; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; - } elseif ($row['field_name'] == 'claim_type') { - $new_old_value = isset($claim_type[$row['old_value']]) ? $claim_type[$row['old_value']] : '-'; - $new_new_value = isset($claim_type[$row['new_value']]) ? $claim_type[$row['new_value']] : '-'; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; - } else { - $new_old_value = isset($row['old_value']) ? $row['old_value'] : '-'; - $new_new_value = isset($row['new_value']) ? $row['new_value'] : '-'; - $row['old_value'] = $new_old_value; - $row['new_value'] = $new_new_value; + $data = $this->ticketHistoryModel->query($sql)->getResultArray(); + $priorityType = $this->priorityType; + $relationshipType = $this->relationshipType; + $modeOFIntimate = $this->modeOFIntimate; + $claim_type = $this->claimType; + foreach ($data as &$row) { + if ($row['field_name'] == 'claim_status_id') { + $new_old_value = isset($row['old_status_value']) ? $row['old_status_value'] : '-'; + $new_new_value = $row['new_status_value']; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'acm_id') { + $new_old_value = isset($row['old_account_manager']) ? $row['old_account_manager'] : '-'; + $new_new_value = $row['new_account_manager']; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'insured_emp_id') { + $new_old_value = isset($row['old_insured_id_name']) ? $row['old_insured_id_name'] : '-'; + $new_new_value = $row['new_insured_id_name']; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'priority') { + $new_old_value = isset($priorityType[$row['old_value']]) ? $priorityType[$row['old_value']] : '-'; + $new_new_value = isset($priorityType[$row['new_value']]) ? $priorityType[$row['new_value']] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'relationship') { + $new_old_value = isset($relationshipType[$row['old_value']]) ? $relationshipType[$row['old_value']] : '-'; + $new_new_value = isset($relationshipType[$row['new_value']]) ? $relationshipType[$row['new_value']] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'mode_of_intimation') { + $new_old_value = isset($modeOFIntimate[$row['old_value']]) ? $modeOFIntimate[$row['old_value']] : "-"; + $new_new_value = isset($modeOFIntimate[$row['old_value']]) ? $modeOFIntimate[$row['old_value']] : "-"; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'claim_type') { + $new_old_value = isset($claim_type[$row['ticket_type_id']][$row['old_value']]) ? $claim_type[$row['ticket_type_id']][$row['old_value']] : '-'; + $new_new_value = isset($claim_type[$row['ticket_type_id']][$row['new_value']]) ? $claim_type[$row['ticket_type_id']][$row['new_value']] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'claim_type') { + $new_old_value = isset($claim_type[$row['old_value']]) ? $claim_type[$row['old_value']] : '-'; + $new_new_value = isset($claim_type[$row['new_value']]) ? $claim_type[$row['new_value']] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } else { + $new_old_value = isset($row['old_value']) ? $row['old_value'] : '-'; + $new_new_value = isset($row['new_value']) ? $row['new_value'] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } + } - } - } + return ($data); + } - return ($data); + public function sendMailWithAutoQuery() + { + + $ticket_ids = $this->ticketMessageModel + ->select('ticket_master.id') + ->join('ticket_master', 'ticket_master.id = ticket_messages.ticket_id AND ticket_master.is_active = 1 and ticket_master.claim_status_id in (4,17,27,37)') + ->join('ticket_claim_status AS tcs', 'tcs.id = ticket_messages.claim_status AND (tcs.is_active = 1)') + ->join('ticket_notes', 'ticket_notes.ticket_id = ticket_messages.ticket_id AND ticket_notes.is_auto_query = 1 AND ticket_notes.is_active = 1') + ->where('ticket_messages.is_active', 1) + ->where('ticket_messages.claim_status in (4,17,27,37)') + ->groupBy('ticket_master.id') + ->having('DATEDIFF(CURDATE(), MAX(ticket_messages.created_at)) =', 7) + ->having('count(ticket_messages.id) < ', 6) + ->findAll(); + + + // var_dump($ticket_ids);die(); + foreach ($ticket_ids as $ticket) { + + $ticket_id = $ticket['id']; + $acm_mails = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id); + $ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id); + + $template_data = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id); + + if (!empty($template_data)) { + $template_data['mail_content'] = $this->replacePlaceholders($template_data['mail_content'], $ticket_data); + $template_data['subject'] = $this->replacePlaceholders($template_data['subject'], $ticket_data); + } + $emailData = [ + 'mail' => $template_data['emp_mail'], + 'subject' => $template_data['subject'], + 'message' => $template_data['mail_content'], + 'common' => [], + 'cc' => $acm_mails['common_mails'], + 'attachments' => [] + ]; + + $this->myLogger->logme('error', "Final Reply Email Data"); + // var_dump($emailData); + $this->sendTrigger($emailData); + } + + return 'Ticket id\'s : '.json_encode($ticket_ids); } } diff --git a/app/Helpers/ChatbotHelper.php b/app/Helpers/ChatbotHelper.php index 0b547cd0..03abeeeb 100644 --- a/app/Helpers/ChatbotHelper.php +++ b/app/Helpers/ChatbotHelper.php @@ -5,6 +5,8 @@ namespace App\Helpers; use App\Models\EmployeeModel; use App\Models\CDMasterModel; +use App\Models\EmployeePolicyModel; +use App\Models\TPAModel; class ChatbotHelper { @@ -19,9 +21,44 @@ class ChatbotHelper $client_branch_id = 126; $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 = 336; + $emp_id = 12288; + $EmployeePolicyModel = new EmployeePolicyModel(); + return $EmployeePolicyModel->getHospitalLinkByPolicyandEmp(336,12288); + } + + public static function getPhoneNumber(){ + $emp_id = 12288; + $EmployeeModel = new EmployeeModel(); + return $EmployeeModel->select('mobile')->where('id',$emp_id)->first()['mobile']; + } + + public static function get_payload_data(string $key = null) + { + // 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; + } + } + + } diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index cd60ad34..1d989b80 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -1136,7 +1136,7 @@ class EmployeePolicyModel extends Model public function getEmployeePolicyForFileList($client_id, $policy_id) { - $result = $this->select(['employee_polices.*','pt.policy_type','im.short_name as insurer_short_name','ib.branch_name as insurer_branch_name','ib.branch_code as insurer_branch_code','tpam.name as tpa_name','tpam.short_name as tpa_short_name','tpab.branch_code as tpa_branch_code','cm.client_name','cm.short_name as client_short_name','emp.relationship','emp.relationship_code','emp.change_event','emp.emp_code','emp.name','emp.email_corporate','emp.dob','emp.gender','emp.emp_status','emp.is_active as emp_is_active','emp.mobile as mobile']) + $result = $this->select(['employee_polices.*','pt.policy_type','im.short_name as insurer_short_name','ib.branch_name as insurer_branch_name','ib.branch_code as insurer_branch_code','tpam.name as tpa_name','tpam.short_name as tpa_short_name','tpab.branch_code as tpa_branch_code','cm.client_name','cm.short_name as client_short_name','emp.relationship','emp.relationship_code','emp.change_event','emp.emp_code','emp.name','emp.email_corporate','emp.dob','emp.gender','emp.emp_status','emp.is_active as emp_is_active','emp.mobile as mobile','cp.policy_type_id']) ->join('employees emp', 'employee_polices.employee_id = emp.id') ->join('client_policy cp', 'employee_polices.client_policy_id = cp.id') //cp - client policy ->join('policy_type pt', 'cp.policy_type_id = pt.id') //pm - policy master @@ -1745,4 +1745,17 @@ class EmployeePolicyModel extends Model return $result[0]; } + + public function getHospitalLinkByPolicyandEmp($client_policy_id,$emp_id){ + $data = $this->db->table('employee_polices') + ->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') + ->join('employees', 'employees.id = employee_polices.employee_id AND employees.id = ' . (int) $emp_id) + ->get()->getResultArray()[0]; + + // var_dump($this->db->getLastQuery()); + return $data; + } } \ No newline at end of file diff --git a/app/Models/TicketMasterModel.php b/app/Models/TicketMasterModel.php index 28b3215f..2d562005 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -105,7 +105,7 @@ class TicketMasterModel extends Model public function getTemplateDataByTicketID($ticket_id) { $template_data = $this - ->select("ticket_mail_template.*, ticket_master.emp_mail") + ->select("ticket_mail_template.*, ticket_master.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 @@ -131,11 +131,13 @@ class TicketMasterModel extends Model clients.client_name, insurers.name as insurer_name, - tpa.name as tpa_name + tpa.name as tpa_name, + ticket_notes.note as auto_query_content ") ->join('clients', 'ticket_master.client_id = clients.id', 'left') ->join('insurers', 'ticket_master.insurer_id = insurers.id', 'left') ->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') ->where('ticket_master.id', $ticket_id) ->where('ticket_master.is_active', 1) diff --git a/app/Models/TicketMessageModel.php b/app/Models/TicketMessageModel.php index 37de2edb..88926fff 100644 --- a/app/Models/TicketMessageModel.php +++ b/app/Models/TicketMessageModel.php @@ -12,7 +12,7 @@ class TicketMessageModel extends Model protected $returnType = 'array'; protected $useSoftDeletes = false; protected $protectFields = true; - protected $allowedFields = ['id','sender','ticket_id','mail_subject','emp_mail','mail_content','created_at']; + protected $allowedFields = ['id','sender','ticket_id','claim_status','mail_subject','emp_mail','mail_content','created_at']; // Callbacks diff --git a/app/Models/TicketNoteModel.php b/app/Models/TicketNoteModel.php index 7efe2281..24f54be3 100644 --- a/app/Models/TicketNoteModel.php +++ b/app/Models/TicketNoteModel.php @@ -12,7 +12,7 @@ class TicketNoteModel extends Model protected $returnType = 'array'; protected $useSoftDeletes = false; protected $protectFields = true; - protected $allowedFields = ['id','ticket_id','note','created_by','updated_by','is_active']; + protected $allowedFields = ['id','ticket_id','note','is_auto_query','created_by','updated_by','is_active']; // Callbacks protected $allowCallbacks = true; diff --git a/app/Views/chatbot.php b/app/Views/chatbot.php index 77adf697..adbeb587 100644 --- a/app/Views/chatbot.php +++ b/app/Views/chatbot.php @@ -24,8 +24,8 @@ var uid = Math.floor(100000 + Math.random() * 900000); console.log('CURRENT_USER' + uid); var botmanWidget = { - chatServer: "https://localhost/PHP828APPS/ruc/nhance/chat", // Make sure this URL is correct - frameEndpoint: 'https://localhost/PHP828APPS/ruc/nhance/widget', // This should match your CI4 + chatServer: `=base_url('chat')?>`, // Make sure this URL is correct + frameEndpoint: `=base_url('widget')?>`, // This should match your CI4 title: "Ask ஆதிரை", introMessage: "", bubbleBackground: "#007bff", diff --git a/app/Views/ticket_auto_query.php b/app/Views/ticket_auto_query.php new file mode 100644 index 00000000..68865fd2 --- /dev/null +++ b/app/Views/ticket_auto_query.php @@ -0,0 +1,98 @@ +