diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index 0c5f0d0c..45619181 100755
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -352,6 +352,7 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) {
$routes->get('getTheEmpDataForClaimSearchByMobile/(:any)', 'ClientController::getTheEmpDataForClaimSearchByMobile/$1');
$routes->get('getLeadNonEB/(:any)', 'LeadsController::getLeadNonEB/$1');
$routes->get('getPolicyTypeFields', 'LeadsController::getPolicyTypeFields');
+ $routes->get('removeMultiFile', 'LeadsController::removeMultiFile');
});
$routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) {
diff --git a/app/Controllers/Chatbot/EcardDownloadConversation.php b/app/Controllers/Chatbot/EcardDownloadConversation.php
index b0cb78ae..c38d6977 100644
--- a/app/Controllers/Chatbot/EcardDownloadConversation.php
+++ b/app/Controllers/Chatbot/EcardDownloadConversation.php
@@ -17,10 +17,14 @@ class EcardDownloadConversation extends Conversation
protected function showEcardMenu()
{
+ log_message('error', ('showEcardMenu function called'));
+
$chat_session_info = get_chatbot_session_info();
$policy_list = ChatbotHelper::getListOfPolicies($chat_session_info);
$buttons = [];
$question = 'Choose Policy to Download Ecard:';
+ log_message('error', ('policy_list : ' . json_encode($policy_list)));
+
if(is_array($policy_list) && count($policy_list))
{
foreach($policy_list as $policy)
diff --git a/app/Controllers/Chatbot/MainMenuConversation.php b/app/Controllers/Chatbot/MainMenuConversation.php
index 87d9a4ef..f06fd078 100644
--- a/app/Controllers/Chatbot/MainMenuConversation.php
+++ b/app/Controllers/Chatbot/MainMenuConversation.php
@@ -46,9 +46,16 @@ class MainMenuConversation extends Conversation
$this->bot->reply($message);
}
+ log_message('error', ('user_reponse before: ' . $user_reponse));
+
+
if (!$answer->isInteractiveMessageReply()) {
$user_reponse = null;
}
+
+ log_message('error', ('user_reponse is interactive: ' . $answer->isInteractiveMessageReply()));
+
+
// Get just the existing path array
$path = $this->bot->userStorage()->get('path') ?? [];
@@ -60,25 +67,35 @@ class MainMenuConversation extends Conversation
'path' => $path
]);
+ log_message('error', ('user_reponse after: ' . $user_reponse));
+
+
switch ($user_reponse) {
case "ecard_download":
$this->bot->startConversation(new EcardDownloadConversation());
+ log_message('error', 'ecard_download clicked ');
+
break;
case "network_hospital":
$this->bot->startConversation(new NetworkHospitalConversation());
+ log_message('error', 'network_hospital clicked ');
break;
case "reimbursement_claim":
$this->bot->startConversation(new ReimbursementClaimProcessConversation());
+ log_message('error', 'reimbursement_claim clicked ');
break;
case "reimbursement_status":
$this->bot->startConversation(new ReimbursementClaimStatusConversation());
+ log_message('error', 'reimbursement_status clicked ');
break;
case "new_policy":
case "renew_policy":
$this->bot->startConversation(new policyConversation());
+ log_message('error', 'renew_policy || new_policy clicked ');
break;
default:
+ log_message('error', 'default shown ');
$this->say("Invalid selection. Please choose an option.");
$this->bot->startConversation(new MainMenuConversation());
break;
diff --git a/app/Controllers/Chatbot/NetworkHospitalConversation.php b/app/Controllers/Chatbot/NetworkHospitalConversation.php
index 2e59f896..4a1e991c 100644
--- a/app/Controllers/Chatbot/NetworkHospitalConversation.php
+++ b/app/Controllers/Chatbot/NetworkHospitalConversation.php
@@ -59,7 +59,10 @@ class NetworkHospitalConversation extends Conversation
$this->bot->userStorage()->save([
'path' => $path
]);
+ log_message('error', ('user_reponse : ' . $answer->getValue()));
+
switch ($answer->getValue()) {
+
case is_string($answer->getValue()) && is_array(explode('#',$answer->getValue())) && count((explode('#',$answer->getValue()))) == 2:
$client_poilicy_id = explode('#',$answer->getValue())[1];
diff --git a/app/Controllers/Chatbot/policyConversation.php b/app/Controllers/Chatbot/policyConversation.php
index 04c8d9a5..f2fe91c1 100644
--- a/app/Controllers/Chatbot/policyConversation.php
+++ b/app/Controllers/Chatbot/policyConversation.php
@@ -46,6 +46,9 @@ class policyConversation extends Conversation
if (!$answer->isInteractiveMessageReply()) {
$user_reponse = null;
}
+
+ log_message('error', ('user_reponse : ' . $answer->getValue()));
+
$path = $this->bot->userStorage()->get('path');
array_push($path,
$answer->getValue()
diff --git a/app/Controllers/ChatbotControllerNew.php b/app/Controllers/ChatbotControllerNew.php
index 610f2bda..dc38a3c9 100644
--- a/app/Controllers/ChatbotControllerNew.php
+++ b/app/Controllers/ChatbotControllerNew.php
@@ -84,12 +84,13 @@ class ChatbotControllerNew extends BaseController
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->myLogger->logme('error', ('TEST' . $id));
$this->session->set('CHATBOT_RANDOM_USER_ID', $id);
}
@@ -100,6 +101,7 @@ class ChatbotControllerNew extends BaseController
}
$this->botman->hears('.*', function ($bot) {
+ log_message("error","Inside Bot Type Function");
$bot->types(); // Typing indicator for the first message
sleep(0.5); // Delay
@@ -128,14 +130,14 @@ class ChatbotControllerNew extends BaseController
$this->botman->listen();
}
- private function registerHandlers()
- {
- // Handling Policy and Claims
- $this->botman->hears('group:policy:{option}', [\App\Controllers\Chatbot\PolicyHandler::class, 'handle']);
- $this->botman->hears('group:claim:{option}', [\App\Libraries\Chatbot\ClaimHandler::class, 'handle']);
+ // private function registerHandlers()
+ // {
+ // // Handling Policy and Claims
+ // $this->botman->hears('group:policy:{option}', [\App\Controllers\Chatbot\PolicyHandler::class, 'handle']);
+ // $this->botman->hears('group:claim:{option}', [\App\Libraries\Chatbot\ClaimHandler::class, 'handle']);
- }
+ // }
public function chatbot()
{
diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php
index 0a096c82..21f0afa5 100755
--- a/app/Controllers/ClientController.php
+++ b/app/Controllers/ClientController.php
@@ -1994,9 +1994,22 @@ class ClientController extends AdminController
if ($id) {
$client_policy_data = $this->clientPolicyModel->where(['id' => $id, 'is_active' => 1])->first();
+
$insurer_id = $client_policy_data['insurer_id'];
$client_id = $client_policy_data['client_id'];
+ if (!empty($client_policy_data['policy_start_date'])) {
+ $client_policy_data['source_policy_start_date'] = change_date_format($client_policy_data['policy_start_date'], 'Y-m-d', 'd/m/Y');
+ } else {
+ $client_policy_data['source_policy_start_date'] = null;
+ }
+
+ if (!empty($client_policy_data['policy_end_date'])) {
+ $client_policy_data['source_policy_end_date'] = change_date_format($client_policy_data['policy_end_date'], 'Y-m-d', 'd/m/Y');
+ } else {
+ $client_policy_data['source_policy_end_date'] = null;
+ }
+
$polices = $this->policesModel
->select('policies.*, policy_type.policy_type')
->join('policy_type', 'policy_type.id = policies.policy_type_id')
@@ -2022,7 +2035,7 @@ class ClientController extends AdminController
'policy' => $polices,
'client_policy_list' => $client_policy_list,
'end_date' => $newDate,
- 'new_start_date' => date('d/m/Y', strtotime($client_policy_data['policy_end_date']))
+ 'new_start_date' => date('d/m/Y', strtotime($client_policy_data['policy_end_date'] . ' +1 day')),
], 200);
} else {
return $this->respond(['status' => false, 'code' => 404, 'message' => 'no data found'], 200);
@@ -4740,8 +4753,7 @@ class ClientController extends AdminController
// }
// $data = $this->leadsModel->where('leads.id', 125)->where('leads.is_active', 1)->first();
- // $RFQdata = $RFQModel->getRFQTableDataWithLeadIDAndType(125, 2);
- // // Kint::dump($RFQdata);
+ // $RFQdata = $RFQModel->getRFQTableDataWithLeadIDAndType(145, 2);
// $returnData = $LeadsController->getPlacementJson($data);
// Kint::dump($returnData);
// $policy_terms = $LeadsController->convertNonEbQCRJsonToPolicyTerms(json_decode($returnData, true));
@@ -4751,6 +4763,20 @@ class ClientController extends AdminController
// $this->clientPolicyModel->where('id', 6050)->set('policy_terms', $policy_terms)->update();
// dd($returnData);
+ // Kint::dump($RFQdata['json']);
+ // $inputJson = json_decode($RFQdata['json'], true);
+ // Kint::dump($inputJson);
+ // // print_rr($inputJson['table_data']);
+ // $sortedJson = $this->reorderProposalsByInsurerTotal($inputJson);
+
+ // // If you want to convert back to JSON string
+ // $finalJson = json_encode($sortedJson, JSON_PRETTY_PRINT);
+
+ // // $RFQModel->insert(['lead_id' => 145, 'json' => $finalJson, 'type' => 1]);
+
+ // dd($finalJson);
+
+
}
// -------------------------------------------------------------------------------------------------------
@@ -5456,6 +5482,207 @@ class ClientController extends AdminController
$id = $InsurerModel->insert($insurerData);
return $id;
}
+
+ private function reorderProposalsByInsurerTotal(array $data): array {
+
+ Kint::dump($data);
+ if (!isset($data['premium_data']['data'])) return $data;
+ $original = $data['premium_data']['data'];
+ $proposals = [];
+ $others = [];
+ $emptyKeyData = [];
+ foreach ($original as $key => $value) {
+ // Match only keys that look like 'Proposal X'
+ if (preg_match('/^Proposal\s+\d+$/', $key)) {
+ // Get the insurer entry (not 'Quote Asked')
+ foreach ($value as $subKey => $subVal) {
+ if ($subKey !== 'Quote Asked' && isset($subVal['Total'])) {
+ $proposals[$key] = $value;
+ break;
+ }else{
+ $proposals[$key] = $value;
+ }
+ }
+ } else {
+
+ if ($key === '' && isset($value['']) && is_array($value[''])) {
+ // Capture empty key to push it later
+ $emptyKeyData[$key] = $value;
+ }else{
+ $others[$key] = $value;
+
+ }
+ }
+ }
+
+ // dd($proposals, $others, $emptyKeyData);
+ // Sort proposals by their insurer's total
+ uasort($proposals, function($a, $b) {
+ $totalA = 0;
+ $totalB = 0;
+
+ foreach ($a as $key => $val) {
+ if ($key !== 'Quote Asked' && isset($val['Total'])) {
+ $totalA = floatval($val['Total']);
+ break;
+ }
+ }
+
+ foreach ($b as $key => $val) {
+ if ($key !== 'Quote Asked' && isset($val['Total'])) {
+ $totalB = floatval($val['Total']);
+ break;
+ }
+ }
+
+ return $totalA <=> $totalB;
+ });
+
+ // Merge back the sorted proposals into the full structure
+ $data['premium_data']['data'] = array_merge($others, $proposals, $emptyKeyData);
+ $data = $this->reorderProposalDataByPremiumOrder($data);
+ return $data;
+ }
+
+ private function reorderProposalDataByPremiumOrder(array $data): array {
+ if (!isset($data['premium_data']['data'], $data['proposal_data']['over_all_column_data'])) {
+ return $data;
+ }
+
+ $premiumProposals = array_keys($data['premium_data']['data']);
+ $filteredProposals = [];
+
+ // Collect proposal keys that match the pattern "Proposal X"
+ foreach ($premiumProposals as $key) {
+ if (preg_match('/^Proposal\s+\d+$/', $key) && isset($data['proposal_data']['over_all_column_data'][$key])) {
+ $filteredProposals[$key] = $data['proposal_data']['over_all_column_data'][$key];
+ }
+ }
+
+ // dd($premiumProposals, $filteredProposals);
+
+ $data['proposal_data']['over_all_column_data'] = $filteredProposals;
+ $data = $this->reorderProposalInHeaderAndData($data);
+ return $data;
+ }
+
+ private function reorderProposalInHeaderAndData(array $data): array {
+
+ // Kint::dump($data);
+ $tableData = $data['table_data'];
+ $sortedProposalOrder = $data['proposal_data']['over_all_column_data'];
+ $headers = $tableData['headers'] ?? [];
+ $dataRows = $tableData['data'] ?? [];
+
+ // Step 1: Separate static and proposal headers
+ $staticHeaders = [];
+ $proposalHeaders = [];
+ $actionHeader = [];
+ foreach ($headers as $header) {
+ if (in_array($header['parentHeader'], array_keys($sortedProposalOrder))) {
+ $proposalHeaders[$header['parentHeader']] = $header;
+ } else {
+ if($header['parentHeader'] == "Action"){
+ $actionHeader[] = $header;
+ }else{
+ $staticHeaders[] = $header;
+ }
+ }
+ }
+
+ // dd($staticHeaders, $proposalHeaders, $sortedProposalOrder);
+
+ // Step 2: Reorder headers
+ $reorderedHeaders = [];
+ foreach ($sortedProposalOrder as $proposalKey => $proposalValue) {
+ if (isset($proposalHeaders[$proposalKey])) {
+ $reorderedHeaders[] = $proposalHeaders[$proposalKey];
+ }
+ }
+
+ // print_rr($reorderedHeaders); die;
+ foreach ($reorderedHeaders as $key => &$value) {
+ $value['parentHeader'] = 'Proposal ' . ($key + 1);
+ }
+ unset($value);
+
+
+ $reorderedHeaders = array_merge($staticHeaders, $reorderedHeaders, $actionHeader);
+
+
+ // Step 3: Reorder each row's `data` by matching parentth
+ foreach ($dataRows as $dataRowIndex => &$row) {
+ $staticData = [];
+ $proposalData = [];
+ $actionData = [];
+
+ foreach ($row['data'] as $entry) {
+ if (in_array($entry['parentth'], array_keys($sortedProposalOrder))) {
+ $proposalData[$entry['parentth']][] = $entry;
+ } else {
+ if($entry['parentth'] == "Action"){
+ $actionData[] = $entry;
+ }else{
+ $staticData[] = $entry;
+ }
+ }
+ }
+
+ $reorderedProposalData = [];
+ foreach ($sortedProposalOrder as $proposalKey => $proposalValue) {
+ if (isset($proposalData[$proposalKey])) {
+ foreach ($proposalData[$proposalKey] as $entry) {
+ $reorderedProposalData[] = $entry;
+ }
+ }
+ }
+
+ $dubParTh = "";
+ $increament = 0;
+ foreach ($reorderedProposalData as $key => &$value) {
+
+ if($dubParTh == $value['parentth']){
+ $value['parentth'] = 'Proposal ' . ($increament);
+ }else{
+ $dubParTh = $value['parentth'];
+ $increament = $increament + 1;
+ $value['parentth'] = 'Proposal ' . ($increament);
+ }
+ }
+ unset($value);
+
+ $row['data'] = array_merge($staticData, $reorderedProposalData, $actionData);
+ }
+
+ $data['table_data']['headers'] = $reorderedHeaders;
+ $data['table_data']['data'] = $dataRows;
+
+ // dd('-----', $data);
+ $renumberedArray = $this->renumberProposalKeys($data['proposal_data']['over_all_column_data']);
+ $updatedDataSet = $this->renumberProposalKeys($data['premium_data']['data']);
+ $data['proposal_data']['over_all_column_data'] = !empty($renumberedArray) ? $renumberedArray : $data['proposal_data']['over_all_column_data'];
+ $data['premium_data']['data'] = !empty($updatedDataSet) ? $updatedDataSet : $data['premium_data']['data'];
+
+ return $data;
+ }
+
+ private function renumberProposalKeys(array $input): array {
+ $result = [];
+ $counter = 1;
+
+ foreach ($input as $key => $value) {
+ if (strpos($key, 'Proposal') === 0) {
+ $newKey = 'Proposal ' . $counter++;
+ $result[$newKey] = $value;
+ } else {
+ $result[$key] = $value;
+ }
+ }
+
+ return $result;
+ }
+
+
}
diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php
index e86f5de7..9b137fda 100755
--- a/app/Controllers/EmployeeRestController.php
+++ b/app/Controllers/EmployeeRestController.php
@@ -3124,6 +3124,18 @@ class EmployeeRestController extends AdminController
$client_policy_id = $received_data['client_policy_id'];
$insured_emp_id = $received_data['insured_emp_id'];
+ if (empty($received_data['doa'])) {
+ $received_data['doa'] = null;
+ } else{
+ $ticket_data['doa'] = change_date_format($received_data['doa']);
+ }
+
+ if (empty($received_data['dod'])) {
+ $received_data['dod'] = null;
+ } else{
+ $ticket_data['dod'] = change_date_format($received_data['dod']);
+ }
+
$sql = "
select
cp.policy_type_id,
@@ -3166,11 +3178,19 @@ class EmployeeRestController extends AdminController
if(!empty($emp_ticket_data)){
$fetchData = $emp_ticket_data[0];
- $fetchData['claim_status_id'] = $this->claimStatusModel
- ->select('id')
- ->where('ticket_type', $fetchData['ticket_type_id'])
- ->orderBy('id', 'asc')
- ->first()['id'];
+
+ $claimStatusQuery = $this->claimStatusModel
+ ->select('id')
+ ->where('ticket_type', $fetchData['ticket_type_id'])
+ ->orderBy('id', 'asc');
+
+ if ($fetchData['ticket_type_id'] == 1 && !empty($fetchData['tpa_no'])) {
+ $results = $claimStatusQuery->findAll(2);
+ $fetchData['claim_status_id'] = $results[1]['id'] ?? $results[0]['id'];
+ } else {
+ $fetchData['claim_status_id'] = $claimStatusQuery->first()['id'];
+ }
+
$fetchData['priority'] = 1;
$fetchData['mode_of_intimation'] = 3;
diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php
index 1c5e9f80..617add8f 100644
--- a/app/Controllers/LeadsController.php
+++ b/app/Controllers/LeadsController.php
@@ -29,6 +29,7 @@ use App\Models\TPABranchModel;
use App\Models\RFQModel;
use App\Models\InsurerModel;
use App\Models\OccupancyMasterModel;
+use App\Models\LeadFilesModel;
use App\Helpers\MailHelper;
use App\Helpers\ExcelMergeHelper;
@@ -39,6 +40,7 @@ use Kint\Kint;
use App\Controllers\Jobs;
use App\Controllers\JobWorker;
use Google\Service\FactCheckTools\Resource\Claims;
+use GPBMetadata\Google\Type\Datetime;
class LeadsController extends BaseController
{
@@ -62,6 +64,7 @@ class LeadsController extends BaseController
protected $RFQModel;
protected $insurerModel;
protected $occupancyModel;
+ protected $leadFilesModel;
//variables for storing array
protected $issuer;
@@ -92,13 +95,14 @@ class LeadsController extends BaseController
$this->RFQModel = new RFQModel();
$this->insurerModel = new InsurerModel();
$this->occupancyModel = new OccupancyMasterModel();
+ $this->leadFilesModel = new LeadFilesModel();
$this->issuer = [1 => 'JIBS', 2 => 'Nhance'];
$this->clientType = [1 => 'Group', 2 => 'Individual'];
$this->leadType = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
$this->buisnessType = [1 => 'Industrial', 2 => 'Non Industrial'];
$this->leadsStatus = [
- 'queued' => 'Queued',
+ 'queued' => 'In-Queued',
'qcr_sent' => 'QCR sent',
'lost' => 'Lost',
'co_insurer_pending' => 'Co-Insurer Pending',
@@ -199,6 +203,7 @@ class LeadsController extends BaseController
} else {
$data = $this->prepareMultipleLeadData($data);
}
+
// print_r($data); die;
return $data;
}
@@ -206,13 +211,12 @@ class LeadsController extends BaseController
private function prepareSingleLeadData($data)
{
// print_r($data); die;
- $uploadFilePath = WRITEPATH . 'uploads/lead_files/';
-
- // Get all uploaded files for 'file_name[]'
- $files = $this->request->getFileMultiple('file_name');
-
- // print_r($files); die;
-
+ $index_plus_one = 1;
+ $form_file_name = "file_name_" . $index_plus_one;
+ $form_docs_name = "docs_name_" . $index_plus_one;
+ $leads_file_primary_key = $data['leads_file_id'] ?? [];
+ $files = $this->request->getFileMultiple($form_file_name);
+ $multi_file_data = $this->uploadMultiFiles($files, $data[$form_docs_name], $leads_file_primary_key);
// Separate the insurer and insurer branch, handle missing or invalid data
if (isset($data['insurer']) && strpos($data['insurer'], '-') !== false) {
@@ -249,7 +253,9 @@ class LeadsController extends BaseController
$data['policy_end_date'] = null;
}
- $data['file_name'] = file_Upload($files, $uploadFilePath);
+ // $data['file_name'] = file_Upload($files, $uploadFilePath);
+ $data['multi_file_data'] = $multi_file_data ?? null;
+
$processcedData[] = $data;
// print_r($data);die();
@@ -260,15 +266,16 @@ class LeadsController extends BaseController
{
// print_r($data); die;
$processedData = [];
- $uploadFilePath = WRITEPATH . 'uploads/lead_files/';
-
- // Get all uploaded files for 'file_name[]'
- $files = $this->request->getFileMultiple('file_name');
-
- // print_r($files); die;
foreach ($data['policy_type_id'] as $index => $value) {
+ $index_plus_one = $index + 1;
+ $form_file_name = "file_name_" . $index_plus_one;
+ $form_docs_name = "docs_name_" . $index_plus_one;
+ $leads_file_primary_key = $data['leads_file_id'] ?? [];
+ $files = $this->request->getFileMultiple($form_file_name);
+ $multi_file_data = $this->uploadMultiFiles($files, $data[$form_docs_name], $leads_file_primary_key);
+
// 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]);
@@ -318,13 +325,25 @@ class LeadsController extends BaseController
$incurred_claims_date = null;
}
- if (!empty($data['premium_date'][$index])) {
- $premium_date = change_date_format($data['premium_date'][$index], 'd/m/Y', 'Y-m-d');
+ // if (!empty($data['premium_date'][$index])) {
+ // $premium_date = change_date_format($data['premium_date'][$index], 'd/m/Y', 'Y-m-d');
+ // } else {
+ // $premium_date = null;
+ // }
+
+ if (!empty($data['source_policy_start_date'])) {
+ $data['source_policy_start_date'] = change_date_format($data['source_policy_start_date'], 'd/m/Y', 'Y-m-d');
} else {
- $premium_date = null;
+ $data['source_policy_start_date'] = null;
}
- $file_name = file_Upload($files[$index], $uploadFilePath);
+ if (!empty($data['source_policy_end_date'])) {
+ $data['source_policy_end_date'] = change_date_format($data['source_policy_end_date'], 'd/m/Y', 'Y-m-d');
+ } else {
+ $data['source_policy_end_date'] = null;
+ }
+
+ // $file_name = file_Upload($files[$index], $uploadFilePath);
$last_3_years_claims = $data['finyear'];
@@ -378,7 +397,7 @@ class LeadsController extends BaseController
'outstanding_claims' => $data['outstanding_claims'][$index] ?? 0,
'policy_run_days' => $data['policy_run_days'][$index] ?? 0,
'premium_at_inception' => $data['premium_at_inception'][$index] ?? 0,
- 'premium_date' => $premium_date,
+ 'premium_date' => $data['premium_date'][$index] ?? 0,
'earned_premium' => $data['earned_premium'][$index] ?? 0,
'annualised_claims' => $data['annualised_claims'][$index] ?? 0,
'incurred_claims_ratio' => $data['incurred_claims_ratio'][$index] ?? 0,
@@ -387,13 +406,17 @@ class LeadsController extends BaseController
'total_si_at_renewal' => $data['total_si_at_renewal'][$index] ?? 0,
'fin_years_claims' => $last_3_years_claims,
- 'file_name' => $file_name,
+ // 'file_name' => $file_name,
+ 'multi_file_data' => $multi_file_data ?? null,
'status' => $data['status'] ?? null,
'notes' => $data['notes'] ?? null,
'lead_form_type' => $data['lead_form_type'] ?? 1,
'custom_fields' => $data['custom_fields'] ?? null,
+
+ 'source_policy_start_date' => $data['source_policy_start_date'] ?? null,
+ 'source_policy_end_date' => $data['source_policy_end_date'] ?? null,
];
}
// print_r($processedData);die();
@@ -405,6 +428,11 @@ class LeadsController extends BaseController
$insertCount = [];
foreach ($data as $value) {
$insert = $this->leadsModel->insert($value);
+
+ if ($insert) {
+ $this->insertMultiFilesData($value['multi_file_data'], $insert);
+ }
+
$insertCount[] = $insert;
$this->insertLeadStatus($insert, $value['status'], 3);
@@ -427,13 +455,15 @@ class LeadsController extends BaseController
private function updateOldLead($id, $data)
{
if ($this->leadsModel->where('id', $id)->set($data[0])->update()) {
+
+ $this->insertMultiFilesData($data[0]['multi_file_data'], $id);
$this->insertLeadStatus($id, $data[0]['status'], 3);
return $this->respond(['status' => true, 'lead_id' => $id, 'message' => "Lead updated successfully", 'data' => $data], 200);
}
return $this->respond(['status' => false, 'lead_id' => $id, 'message' => "Failed to update Lead", 'data' => $data], 200);
}
- // Get the Single Lead data for edit
+ // Get the Single Lead data for edit uisng ajax ( do not delete)
public function getLeadDataForEdit($id)
{
@@ -466,11 +496,13 @@ class LeadsController extends BaseController
$data['incurred_claims_date'] = null;
}
- if (!empty($data['premium_date'])) {
- $data['premium_date'] = change_date_format($data['premium_date'], 'Y-m-d', 'd/m/Y');
- } else {
- $data['premium_date'] = null;
- }
+ // if (!empty($data['premium_date'])) {
+ // $data['premium_date'] = change_date_format($data['premium_date'], 'Y-m-d', 'd/m/Y');
+ // } else {
+ // $data['premium_date'] = null;
+ // }
+
+ $data['multi_file_data'] = $this->leadFilesModel->where('lead_id', $id)->first() ?? null;
$data['lastFiveYears'] = $this->getLastFiveFinancialYears();
$data['gpaClaimType'] = $this->claim_type_for_gpa;
@@ -485,6 +517,8 @@ class LeadsController extends BaseController
$data['html'] = $this->generateViewPageHtml($data['policy_type_id'], $data) ?? "";
+ // print_r($data); die;
+
if ($data) {
return $this->respond(['status' => true, 'data' => $data], 200);
} else {
@@ -503,8 +537,72 @@ class LeadsController extends BaseController
$this->policyTransactionStatusModel->insert($statusData);
}
+ public function uploadMultiFiles($files, $docs_names, $primaryKey)
+ {
+ $uploadFilePath = WRITEPATH . 'uploads/lead_files/';
- //--------RFQ-----------------------------------------------------------------------------------------------
+ $multi_file_data = [];
+ foreach ($files as $index => $value) {
+ $file_name = file_Upload($value, $uploadFilePath);
+ $multi_file_data[] = [
+ 'file_name' => $file_name,
+ 'docs_name' => $docs_names[$index],
+ 'id' => $primaryKey[$index] ?? "",
+ ];
+ }
+
+ return $multi_file_data;
+ }
+
+ public function insertMultiFilesData($data, $lead_id)
+ {
+ // print_r($data); die;
+
+ if (!empty($data)) {
+ foreach ($data as $key => $value) {
+
+ if (!empty($value['id'])) {
+
+ $lead_file_data = [
+ 'lead_id' => $lead_id,
+ 'docs_name' => $value['docs_name'],
+ ];
+
+ if (!empty($value['file_name'])) {
+ $lead_file_data['file_name'] = $value['file_name'];
+ }
+
+ $this->leadFilesModel->where('id', $value['id'])->set($lead_file_data)->update();
+ } else {
+
+ $lead_file_data = [
+ 'lead_id' => $lead_id,
+ 'docs_name' => $value['docs_name'],
+ 'file_name' => $value['file_name'],
+ ];
+ $this->leadFilesModel->insert($lead_file_data);
+ }
+
+ if ($key == 0 && !empty($value['file_name'])) {
+ $this->leadsModel->where('id', $lead_id)->set('file_name', $value['file_name'])->update();
+ }
+ }
+ }
+
+ return true;
+ }
+
+ public function removeMultiFile()
+ {
+ $id = $this->request->getGet('lead_file_id');
+ if (!empty($id)) {
+ $this->leadFilesModel->where('id', $id)->set(['is_active' => 0])->update();
+ return $this->respond(['status' => true, 'message' => 'File removed successfully'], 200);
+ } else {
+ return $this->respond(['status' => false, 'message' => 'File could not be removed.'], 200);
+ }
+ }
+ //--------RFQ-----------------------------------------------------------------------------------------------
public function viewRFQ($id, $type = 1)
@@ -558,6 +656,7 @@ class LeadsController extends BaseController
$data['page_name'] = $type == 2 ? 'QCR' : 'RFQ';
$data['insurer'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
$data['userList'] = $this->userModel->getUserListForRFQ();
+ $data['exclusiveUserList'] = $this->userModel->getexclusiveUserListForRFQ();
$data['lead_data'] = $lead_data;
$mail_content = "
@@ -566,17 +665,34 @@ class LeadsController extends BaseController
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!
+ Thank You!
+ Best regards,
+
+
+
{{LOGGED_USER_NAME}}
+
Email: {{LOGGED_USER_EMAIL}}
+
Mobile: {{LOGGED_USER_MOBILE}}
+
+
+
+
";
+ if ($data['lead_data']['policy_end_date'] != null){
+ $subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}} {{POLICY_END_DATE}}";
+ }else{
+ $subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}}";
- $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']);
+ $data['multi_file_data'] = $this->leadFilesModel->where('lead_id', $id)->where('is_active', 1)->findAll() ?? null;
+ $data['attachment_html'] = view('rfq/attachment_files', $data) ?? "";
+ $data['user_team'] = $this->userModel->select("ut.team_id")->join("user_teams ut","ut.user_id = user_profiles.id and ut.is_active = 1")->where("user_profiles.is_active",1)->first()['team_id'];
+ // dd($data);
-
if ($data['lead_data']['lead_form_type'] == 1) {
$this->loadLayout('view_rfq.php', $data);
@@ -585,14 +701,14 @@ class LeadsController extends BaseController
$data['occupancy'] = $this->occupancyModel->findAll();
// dd($data['occupancy']);
- if($lead_data['lead_type'] != 1 && $data['rfq_count'] == 0){
+ if ($lead_data['lead_type'] != 1 && $data['rfq_count'] == 0) {
$client_policy_data = $this->clientPolicyModel->where('is_active', 1)->where('id', $lead_data['source_policy_id'])->first();
$data['rfq_data']['json'] = $client_policy_data['placement_json'];
}
- if(!empty($data['question_json'])){
+ if (!empty($data['question_json'])) {
$data['policies'] = json_decode($data['question_json'], true)['policies'];
- $data["child_table_data"] = json_decode($data['question_json'], true)['child_table_data'];
+ $data["child_table_data"] = json_decode($data['question_json'], true)['child_table_data'];
}
// $data['lead_register_data'] = json_decode($data['lead_data']['custom_fields']);
@@ -635,7 +751,6 @@ class LeadsController extends BaseController
}
}
-
public function createRFQ()
{
$data = $this->request->getPost();
@@ -645,15 +760,24 @@ class LeadsController extends BaseController
return $this->respond(['status' => false, 'message' => 'Lead ID is required'], 400);
}
+ $inputJson = json_decode($data['json'], true);
+ if (isset($inputJson['premium_data']) && !empty($inputJson['premium_data'])) {
+ $sortedJson = $this->reorderProposalsByInsurerTotal($inputJson);
+ $data['json'] = json_encode($sortedJson);
+ }
+
+
$data['type'] = 1;
// Deactivate existing RFQs for this lead and type
- $this->RFQModel
- ->where('lead_id', $lead_id)
- ->where('type', 1)
- ->where('is_active', 1)
- ->set('is_active', 0)
- ->update();
+ if (!isset($data['rfq_primaryKey']) && empty($data['rfq_primaryKey'])) {
+ $this->RFQModel
+ ->where('lead_id', $lead_id)
+ ->where('type', 1)
+ ->where('is_active', 1)
+ ->set('is_active', 0)
+ ->update();
+ }
// Handle registration_json
if (empty($data['registration_json'])) {
@@ -669,20 +793,29 @@ class LeadsController extends BaseController
}
}
- // Insert new RFQ
- $insertId = $this->RFQModel->insert($data);
+ // print_r($data); die;
+ // $data['json'] = "";
+ if (isset($data['rfq_primaryKey']) && !empty($data['rfq_primaryKey'])) {
+ $this->RFQModel->update($data['rfq_primaryKey'], $data);
+ $insertId = $data['rfq_primaryKey'];
+ $affectedRows = db_connect()->affectedRows();
+ } else {
+ // Insert new RFQ
+ $insertId = $this->RFQModel->insert($data);
+ }
if ($insertId) {
- $message = ($data['submit_type'] ?? '') == 'QCR' ? 'QCR submitted successfully' : 'RFQ submitted successfully';
+ $message = ($data['submit_type'] ?? '') == 'QCR' ? 'QCR saved successfully' : 'RFQ saved successfully';
return $this->respond([
'status' => true,
'id' => $insertId,
'message' => $message,
- 'data' => $data
+ 'data' => $data,
+ 'affectedRows' => $affectedRows ?? null,
], 200);
}
- $message = ($data['submit_type'] ?? '') == 'QCR' ? 'Failed to create QCR' : 'Failed to create RFQ';
+ $message = ($data['submit_type'] ?? '') == 'QCR' ? 'Failed to save QCR' : 'Failed to save RFQ';
return $this->respond([
'status' => false,
'id' => null,
@@ -691,7 +824,6 @@ class LeadsController extends BaseController
], 200);
}
-
public function createQCR()
{
@@ -716,6 +848,206 @@ class LeadsController extends BaseController
}
+ private function reorderProposalsByInsurerTotal(array $data): array
+ {
+
+ if (!isset($data['premium_data']['data'])) return $data;
+
+ $original = $data['premium_data']['data'];
+ $proposals = [];
+ $others = [];
+ $emptyKeyData = [];
+
+ foreach ($original as $key => $value) {
+ // Match only keys that look like 'Proposal X'
+ if (preg_match('/^Proposal\s+\d+$/', $key)) {
+ // Get the insurer entry (not 'Quote Asked')
+ foreach ($value as $subKey => $subVal) {
+ if ($subKey !== 'Quote Asked' && isset($subVal['Total'])) {
+ $proposals[$key] = $value;
+ break;
+ }else{
+ $proposals[$key] = $value;
+ }
+ }
+ } else {
+
+ if ($key === '' && isset($value['']) && is_array($value[''])) {
+ // Capture empty key to push it later
+ $emptyKeyData[$key] = $value;
+ } else {
+ $others[$key] = $value;
+ }
+ }
+ }
+
+ // Sort proposals by their insurer's total
+ uasort($proposals, function ($a, $b) {
+ $totalA = 0;
+ $totalB = 0;
+
+ foreach ($a as $key => $val) {
+ if ($key !== 'Quote Asked' && isset($val['Total'])) {
+ $totalA = floatval($val['Total']);
+ break;
+ }
+ }
+
+ foreach ($b as $key => $val) {
+ if ($key !== 'Quote Asked' && isset($val['Total'])) {
+ $totalB = floatval($val['Total']);
+ break;
+ }
+ }
+
+ return $totalA <=> $totalB;
+ });
+
+ // Merge back the sorted proposals into the full structure
+ $data['premium_data']['data'] = array_merge($others, $proposals, $emptyKeyData);
+ $data = $this->reorderProposalDataByPremiumOrder($data);
+ return $data;
+ }
+
+ private function reorderProposalDataByPremiumOrder(array $data): array
+ {
+ if (!isset($data['premium_data']['data'], $data['proposal_data']['over_all_column_data'])) {
+ return $data;
+ }
+
+ $premiumProposals = array_keys($data['premium_data']['data']);
+ $filteredProposals = [];
+
+ // Collect proposal keys that match the pattern "Proposal X"
+ foreach ($premiumProposals as $key) {
+ if (preg_match('/^Proposal\s+\d+$/', $key) && isset($data['proposal_data']['over_all_column_data'][$key])) {
+ $filteredProposals[$key] = $data['proposal_data']['over_all_column_data'][$key];
+ }
+ }
+
+ // dd($premiumProposals, $filteredProposals);
+
+ $data['proposal_data']['over_all_column_data'] = $filteredProposals;
+ $data = $this->reorderProposalInHeaderAndData($data);
+ return $data;
+ }
+
+ private function reorderProposalInHeaderAndData(array $data): array
+ {
+ $tableData = $data['table_data'];
+ $sortedProposalOrder = $data['proposal_data']['over_all_column_data'];
+ $headers = $tableData['headers'] ?? [];
+ $dataRows = $tableData['data'] ?? [];
+
+ // Step 1: Separate static and proposal headers
+ $staticHeaders = [];
+ $proposalHeaders = [];
+ $actionHeader = [];
+ foreach ($headers as $header) {
+ if (in_array($header['parentHeader'], array_keys($sortedProposalOrder))) {
+ $proposalHeaders[$header['parentHeader']] = $header;
+ } else {
+ if ($header['parentHeader'] == "Action") {
+ $actionHeader[] = $header;
+ } else {
+ $staticHeaders[] = $header;
+ }
+ }
+ }
+
+ // dd($staticHeaders, $proposalHeaders, $sortedProposalOrder);
+
+ // Step 2: Reorder headers
+ $reorderedHeaders = [];
+ foreach ($sortedProposalOrder as $proposalKey => $proposalValue) {
+ if (isset($proposalHeaders[$proposalKey])) {
+ $reorderedHeaders[] = $proposalHeaders[$proposalKey];
+ }
+ }
+
+ // print_rr($reorderedHeaders); die;
+ foreach ($reorderedHeaders as $key => &$value) {
+ $value['parentHeader'] = 'Proposal ' . ($key + 1);
+ }
+ unset($value);
+
+
+ $reorderedHeaders = array_merge($staticHeaders, $reorderedHeaders, $actionHeader);
+
+
+ // Step 3: Reorder each row's `data` by matching parentth
+ foreach ($dataRows as $dataRowIndex => &$row) {
+ $staticData = [];
+ $proposalData = [];
+ $actionData = [];
+
+ foreach ($row['data'] as $entry) {
+ if (in_array($entry['parentth'], array_keys($sortedProposalOrder))) {
+ $proposalData[$entry['parentth']][] = $entry;
+ } else {
+ if ($entry['parentth'] == "Action") {
+ $actionData[] = $entry;
+ } else {
+ $staticData[] = $entry;
+ }
+ }
+ }
+
+ $reorderedProposalData = [];
+ foreach ($sortedProposalOrder as $proposalKey => $proposalValue) {
+ if (isset($proposalData[$proposalKey])) {
+ foreach ($proposalData[$proposalKey] as $entry) {
+ $reorderedProposalData[] = $entry;
+ }
+ }
+ }
+
+ $dubParTh = "";
+ $increament = 0;
+ foreach ($reorderedProposalData as $key => &$value) {
+
+ if ($dubParTh == $value['parentth']) {
+ $value['parentth'] = 'Proposal ' . ($increament);
+ } else {
+ $dubParTh = $value['parentth'];
+ $increament = $increament + 1;
+ $value['parentth'] = 'Proposal ' . ($increament);
+ }
+ }
+ unset($value);
+
+ $row['data'] = array_merge($staticData, $reorderedProposalData, $actionData);
+ }
+
+ $data['table_data']['headers'] = $reorderedHeaders;
+ $data['table_data']['data'] = $dataRows;
+
+ $renumberedArray = $this->renumberProposalKeys($data['proposal_data']['over_all_column_data']);
+ $updatedDataSet = $this->renumberProposalKeys($data['premium_data']['data']);
+ $data['proposal_data']['over_all_column_data'] = !empty($renumberedArray) ? $renumberedArray : $data['proposal_data']['over_all_column_data'];
+ $data['premium_data']['data'] = !empty($updatedDataSet) ? $updatedDataSet : $data['premium_data']['data'];
+
+ return $data;
+ }
+
+ private function renumberProposalKeys(array $input): array
+ {
+ $result = [];
+ $counter = 1;
+
+ foreach ($input as $key => $value) {
+ if (strpos($key, 'Proposal') === 0) {
+ $newKey = 'Proposal ' . $counter++;
+ $result[$newKey] = $value;
+ } else {
+ $result[$key] = $value;
+ }
+ }
+
+ return $result;
+ }
+
+
//-----RFQ and QCR EXPORT------------------------------------------------------------------------------------------------
@@ -791,7 +1123,7 @@ class LeadsController extends BaseController
if ($rfq_data['policy_type_id'] == 2) {
$lead_data = [
-
+ 'policy_end_date' => $rfq_data['policy_end_date'],
'Insured' => $rfq_data['client_name'],
'Policy Status' => $rfq_data['status'],
@@ -804,6 +1136,7 @@ class LeadsController extends BaseController
];
} else if ($rfq_data['policy_type_id'] == 1) {
$lead_data = [
+ 'policy_end_date' => $rfq_data['policy_end_date'],
'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'],
@@ -816,6 +1149,7 @@ class LeadsController extends BaseController
} else {
if ($rfq_data['policy_type_id'] == 2) {
$lead_data = [
+ 'policy_end_date' => $rfq_data['policy_end_date'],
'Insured' => $rfq_data['client_name'],
'Policy Status' => $rfq_data['status'],
@@ -844,6 +1178,7 @@ class LeadsController extends BaseController
];
} else if ($rfq_data['policy_type_id'] == 1) {
$lead_data = [
+ 'policy_end_date' => $rfq_data['policy_end_date'],
'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'],
@@ -877,7 +1212,7 @@ class LeadsController extends BaseController
// Start with lead_data at the top
$rowNumber = 1;
- $mergeRange1 = "A{$rowNumber}:C{$rowNumber}";
+ $mergeRange1 = "A{$rowNumber}:B{$rowNumber}";
$sheet->mergeCells($mergeRange1);
$sheet->setCellValue("A{$rowNumber}", "Nhance India Insurance Broking Pvt Ltd");
$sheet->getStyle("A{$rowNumber}")->applyFromArray([
@@ -892,13 +1227,13 @@ class LeadsController extends BaseController
]);
// Set column width to fit the image properly
- $sheet->getColumnDimension('D')->setWidth(20); // Adjust as needed
+ $sheet->getColumnDimension('C')->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->setCoordinates("C{$rowNumber}"); // Set position in column B
$drawing->setHeight(35); // Adjust image height
// Center align the image in the cell
@@ -908,8 +1243,8 @@ class LeadsController extends BaseController
$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);
+ $sheet->getStyle("C{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+ $sheet->getStyle("C{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$rowNumber = $rowNumber + 1;
@@ -922,7 +1257,7 @@ class LeadsController extends BaseController
// Merge A:B for key and C:D for value
$mergeRangeKey = "A{$rowNumber}:B{$rowNumber}";
- $mergeRangeValue = "C{$rowNumber}:D{$rowNumber}";
+ $mergeRangeValue = "C{$rowNumber}";
$sheet->mergeCells($mergeRangeKey);
$sheet->mergeCells($mergeRangeValue);
@@ -955,9 +1290,9 @@ class LeadsController extends BaseController
// 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('B')->setWidth($maxWidthA * 5);
$sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2);
- $sheet->getColumnDimension('D')->setWidth($maxWidthB * 1.2);
+ // $sheet->getColumnDimension('D')->setWidth($maxWidthB * 1.2);
// $rowNumber += 2;
@@ -1016,7 +1351,7 @@ class LeadsController extends BaseController
}
if ($header['parentHeader'] === 'Particulars') {
- $sheet->getColumnDimension('B')->setWidth(40);
+ $sheet->getColumnDimension('B')->setWidth(80);
}
$startColumn = $columnLetter; // Start of the current header range
@@ -1200,7 +1535,7 @@ class LeadsController extends BaseController
}
$lastRow = count($lead_data) + 1;
- $leadRange = "A1:D{$lastRow}";
+ $leadRange = "A1:C{$lastRow}";
$sheet->getStyle($leadRange)->applyFromArray([
'borders' => [
@@ -1211,9 +1546,25 @@ class LeadsController extends BaseController
],
]);
+
+
// Set filename
$string = ($type == 2) ? 'QCR' : 'RFQ';
- $filename = "{$string}_{$rfq_data['client_short_name']}_{$rfq_data['policy_type']}_" . date('YmdHis') . '.xlsx';
+ $current_year = date('Y');
+ $next_year = $current_year + 1;
+ $policy_year = "$current_year-$next_year";
+
+ if (!empty($rfq_data['policy_end_date'])){
+ $policy_expiry = strtotime($lead_data['policy_end_date']);
+
+ $formatted_policy = date("d-m-Y",$policy_expiry);
+
+ $filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_" .$policy_year.'(Due On '.$formatted_policy . ')' .'.xlsx';
+
+ }else{
+ $filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_".$policy_year.'_' . '.xlsx';
+ }
+
// Save to temporary location
$uploadFilePath = WRITEPATH . 'tmp/' . $filename;
@@ -1693,6 +2044,7 @@ class LeadsController extends BaseController
$propsal_and_insurer = isset($params['proposal_insurer']) ? $params['proposal_insurer'] : null;
$mail_content = $params['mail_content'];
$mail_subject = $params['subject'];
+ $attachment_file_ids = $params['selected_attachment_files'];
$result_data = [];
// dd($recipient_mail);
@@ -1801,7 +2153,7 @@ class LeadsController extends BaseController
['file_path' => $temp_file_path, 'sheets' => []],
['file_path' => $lead_file_path, 'sheets' => []]
];
- $outputPath = dirname($temp_file_path) . '/' . 'merged_' . $temp_file_name;
+ $outputPath = dirname($temp_file_path) . '/' . $temp_file_name;
$result = ExcelMergeHelper::mergeExcelFiles($filePaths, $outputPath);
// print_rr($result);
}
@@ -1817,7 +2169,12 @@ class LeadsController extends BaseController
$file_path = $result;
$file_name = basename($result);
+
+ // Attacments part
$attachments = [['fileName' => $file_name, 'filePath' => $file_path]];
+ $other_attachments = $this->handleMultiFileAttachments($attachment_file_ids, $lead_id);
+ $attachments = array_merge($attachments, $other_attachments);
+ // print_r($attachments); die;
//get recipient address
if ($recipient_type == 'insurer' || $recipient_type == 'placement') {
@@ -1832,13 +2189,20 @@ class LeadsController extends BaseController
// print_r($recipient_data); die;
} else if ($recipient_type == 'client') {
- $recipient_data = [['name' => $lead_data['contact_person_name'], 'email' => $lead_data['contact_person_email']]];
+
+ $mailIDS = explode(',',$params['contact_mail']);
+ $recipient_data = [];
+ foreach ($mailIDS as $mail){
+ $recipient_data[] = ['name' => $lead_data['contact_person_name'], 'email' => $mail];
+ }
+
} else {
$recipient_data = [['name' => "Team", 'email' => $params['to']]];
}
// print_r($recipient_data); die;
$subject = $file_type == 'rfq' ? 'Request for Quotation from ' . $lead_data['client_name'] . ' for ' . $lead_data['policy_type'] : 'Quotation Comparison Report for ' . $lead_data['policy_type'];
+
$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.
';
//for mail content
@@ -1887,7 +2251,9 @@ class LeadsController extends BaseController
'proposel_data' => json_encode($lead_update_data),
'status' => 'won',
'placement_date' => change_date_format($params['placement_date'], 'd/m/Y', 'Y-m-d'),
+ 'payment_date' => change_date_format($params['payment_date'], 'd/m/Y', 'Y-m-d'),
'utr_no' => $params['utr_no'],
+ 'is_cd' => $params['is_cd'],
'premium_amount' => $params['premium_amount'],
'total_amount' => $params['total_amount'],
'cd_amount' => $params['cd_amount'],
@@ -2299,16 +2665,15 @@ class LeadsController extends BaseController
// }
}
- if($data['lead_form_type'] == 1){
+ if ($data['lead_form_type'] == 1) {
$client_policy_data['policy_terms'] = $this->preparePolicyTermsFromRFQ($data);
- }else{
+ } else {
$placementJson = $this->getPlacementJson($data);
if ($placementJson) {
$client_policy_data['placement_json'] = $placementJson;
$client_policy_data['policy_terms'] = $this->convertNonEbQCRJsonToPolicyTerms(json_decode($placementJson, true));
}
-
}
// print_r($client_policy_data); die;
@@ -2447,12 +2812,11 @@ class LeadsController extends BaseController
}
return json_encode($terms_array);
-
} else {
return null;
}
}
-
+
public function featchClientPolicyFromLead($client_id, $branch_id, $lead_id)
{
$data = $this->leadsModel->where('leads.id', $lead_id)->where('leads.is_active', 1)->first();
@@ -2497,7 +2861,9 @@ class LeadsController extends BaseController
return $this->transformNonEbProposelData(
$jsonData,
$proposel_data['proposel_name'] ?? '',
- $proposel_data['insurer_name'] ?? '', null, 1
+ $proposel_data['insurer_name'] ?? '',
+ null,
+ 1
);
}, $jsonArray);
@@ -2517,7 +2883,7 @@ class LeadsController extends BaseController
}
unset($proposal); // Good practice after foreach by reference
}
-
+
$placement_json_data[] = $proposalData;
@@ -2534,6 +2900,13 @@ class LeadsController extends BaseController
$next_year = $current_year + 1;
$policy_year = "$current_year-$next_year";
+ $policy_expiry = strtotime($lead_data['policy_end_date']);
+
+ $formatted_policy = date("d-m-Y",$policy_expiry);
+ $logged_user_id = get_session_userid();
+
+ $logged_user_data = $this->userModel->where("id",$logged_user_id)->where("is_active",1)->first();
+
if ($lead_data) {
// Replacing placeholders with actual values
@@ -2543,6 +2916,11 @@ class LeadsController extends BaseController
$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);
+ $message = str_replace("{{POLICY_END_DATE}}"," (Due On ".$formatted_policy.")",$message);
+
+ $message = str_replace("{{LOGGED_USER_NAME}}",ucfirst($logged_user_data['first_name'])." ".ucfirst($logged_user_data['last_name']),$message);
+ $message = str_replace("{{LOGGED_USER_EMAIL}}",$logged_user_data['email'],$message);
+ $message = str_replace("{{LOGGED_USER_MOBILE}}",$logged_user_data['mobile'],$message);
return $message;
} else {
@@ -2550,6 +2928,7 @@ class LeadsController extends BaseController
}
}
+
function getLastFiveFinancialYears()
{
$currentYear = date('Y');
@@ -2579,6 +2958,7 @@ class LeadsController extends BaseController
$this->loadLayout('view_rfq_non_eb');
}
+ // get lead data for edit bot EB and NON-EB
public function getLeadNonEB($type, $id = null)
{
// Set basic data
@@ -2606,9 +2986,15 @@ class LeadsController extends BaseController
->where('user_profiles.is_active', 1)
->findAll();
+
+
if (!empty($id)) {
+
$data['lead_edit_data'] = $this->leadsModel->where('id', $id)->first() ?? [];
+ $data['lead_edit_data']['multi_file_data'] = $this->leadFilesModel->where('lead_id', $id)->where('is_active', 1)->findAll() ?? null;
+ $data['lead_edit_data']['lead_file_count'] = count($data['lead_edit_data']['multi_file_data']);
+
// Decode and merge custom fields if present
$custom_fields_data = !empty($data['lead_edit_data']['custom_fields'])
? json_decode($data['lead_edit_data']['custom_fields'], true)
@@ -2619,7 +3005,7 @@ class LeadsController extends BaseController
}
if (!empty($data['lead_edit_data'])) {
- foreach (['policy_start_date', 'policy_end_date', 'incurred_claims_date', 'premium_date'] as $dateField) {
+ foreach (['policy_start_date', 'policy_end_date', 'source_policy_start_date', 'source_policy_end_date', 'incurred_claims_date'] as $dateField) {
$data['lead_edit_data'][$dateField] = !empty($data['lead_edit_data'][$dateField])
? change_date_format($data['lead_edit_data'][$dateField], 'Y-m-d', 'd/m/Y')
: null;
@@ -2633,6 +3019,9 @@ class LeadsController extends BaseController
$data['lead_edit_data']['policy_type_id'] ?? null,
$data
) ?? "";
+
+ $html = view('rfq/multi_files', $data);
+ $data['lead_edit_data']['multi_file_html'] = trim($html) !== '' ? $html : null;
}
if ($data['lead_edit_data']['lead_type'] != 1 && $data['lead_edit_data']['lead_form_type'] == 2) {
@@ -2707,7 +3096,7 @@ class LeadsController extends BaseController
$lead_data = array_merge(['Insured' => $rfq_data['client_name']], $lead_data);
$policy_registration_data = [];
- if(isset($rfq_data['registration_json']) && !empty($rfq_data['registration_json'])){
+ if (isset($rfq_data['registration_json']) && !empty($rfq_data['registration_json'])) {
$policy_registration_data = json_decode($rfq_data['registration_json'], true);
}
// dd($policy_registration_data);
@@ -2855,7 +3244,7 @@ class LeadsController extends BaseController
]);
$rowNumber++;
- }else{
+ } else {
$sheet->mergeCells("A{$rowNumber}:B{$rowNumber}");
$sheet->setCellValue("A{$rowNumber}", "Policy Type");
$sheet->setCellValue("C{$rowNumber}", ucfirst($key) . " Policy");
@@ -3043,7 +3432,7 @@ class LeadsController extends BaseController
$serial_no = 1;
$maxColumnWidths = [];
$RowSpanEnable = false;
-
+
// Add table data rows
foreach ($column_data as $dataRow) {
@@ -3068,11 +3457,11 @@ class LeadsController extends BaseController
$sheet->getStyle("{$columnLetter}{$mergeStart}:{$columnLetter}{$mergeEnd}")
->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
} else {
- if(!$hasPolicy && $key == 0){
+ if (!$hasPolicy && $key == 0) {
$RowSpanEnable = true;
$columnLetter++;
$sheet->setCellValue("{$columnLetter}{$rowNumber}", $cellData['display_content']);
- }else{
+ } else {
$sheet->setCellValue("{$columnLetter}{$rowNumber}", $cellData['display_content']);
}
}
@@ -3080,13 +3469,12 @@ class LeadsController extends BaseController
if (!($key === 0 && !$hasPolicy)) {
$columnLetter++;
}
-
}
$rowNumber++;
$serial_no++;
}
- if($key == 0 && $RowSpanEnable == true){
+ if ($key == 0 && $RowSpanEnable == true) {
$columnLetter++;
}
@@ -3389,7 +3777,7 @@ class LeadsController extends BaseController
return null;
}
- public function transformNonEbProposelData(&$data, $proposal, $insurer, $tableCount=null, $actionColumn = null)
+ public function transformNonEbProposelData(&$data, $proposal, $insurer, $tableCount = null, $actionColumn = null)
{
// Kint::dump($data, $proposal, $insurer, $tableCount);
@@ -3426,7 +3814,7 @@ class LeadsController extends BaseController
// Update the original data's headers
$data['table_data']['headers'] = $headerData;
- if(!empty($actionColumn)){
+ if (!empty($actionColumn)) {
$data['table_data']['headers'][] = [
'parentHeader' => "Action",
'subHeaders' => ['-']
@@ -3458,8 +3846,8 @@ class LeadsController extends BaseController
$filteredData[] = $item;
}
- if(!empty($actionColumn)){
- if($item['parentth'] === "Action"){
+ if (!empty($actionColumn)) {
+ if ($item['parentth'] === "Action") {
$filteredData[] = $item;
}
}
@@ -3477,19 +3865,33 @@ class LeadsController extends BaseController
return $data;
}
- // function getPreviousColumn($columnLetter)
- // {
- // $colIndex = Coordinate::columnIndexFromString($columnLetter);
- // if ($colIndex > 1) {
- // $colIndex--;
- // }
- // return Coordinate::stringFromColumnIndex($colIndex);
- // }
-
- function getPreviousColumn($columnLetter, $decrement = 1) {
+ public function getPreviousColumn($columnLetter, $decrement = 1)
+ {
$colIndex = Coordinate::columnIndexFromString($columnLetter);
$colIndex = max(1, $colIndex - $decrement); // ensure column index doesn't go below 1
return Coordinate::stringFromColumnIndex($colIndex);
}
-
+
+ public function handleMultiFileAttachments($json_string, $lead_id)
+ {
+ $attachments = [];
+
+ if (!empty($json_string)) {
+ $fileIds = json_decode($json_string, true);
+ $lead_file_path = WRITEPATH . 'uploads/lead_files/';
+
+ foreach ($fileIds as $id) {
+ $lead_file = $this->leadFilesModel->where('lead_id', $lead_id)->where('id', $id)->where('is_active', 1)->first();
+
+ if ($lead_file) {
+ $attachments[] = [
+ 'fileName' => $lead_file['file_name'],
+ 'filePath' => $lead_file_path . $lead_file['file_name']
+ ];
+ }
+ }
+ }
+
+ return $attachments;
+ }
}
diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php
index ec574927..4b42394a 100644
--- a/app/Controllers/TicketController.php
+++ b/app/Controllers/TicketController.php
@@ -122,6 +122,7 @@ class TicketController extends BaseController
'((CLAIM_FORM_LINK))' => 'claim_form_link',
'((CLAIM_FEEDBACK_FORM))' => 'claim_feedback_form',
'((SETTLED_LETTER))' => 'settle_letter',
+ '((APPROVED_LETTER))' => 'approved_letter',
];
$this->extraFields = [
1 => ['non_id_reason'],
@@ -774,13 +775,20 @@ class TicketController extends BaseController
{
// log_message('error','Function called');die();
// $ticket_master_id = $this->request->getPost('id');
- $user_id = get_session_userid();
- $logged_user = $this->userModel->select('first_name,last_name,profile')->where('id', $user_id)->first();
$dataToSend = [];
- $dataToSend['user_name'] = $logged_user['first_name'] . ' ' . $logged_user['last_name'];
- $dataToSend['messages'] = $this->ticketMessageModel->where('is_active', 1)
- ->where('ticket_id', $ticket_master_id)->orderBy('created_at', 'DESC')
+
+ $user_id = get_session_userid();
+ // $logged_user = $this->userModel->select('first_name,last_name,profile')->where('id', $user_id)->first();
+ // $dataToSend['user_name'] = $logged_user['first_name'] . ' ' . $logged_user['last_name'];
+
+ $dataToSend['messages'] = $this->ticketMessageModel
+ ->select('ticket_messages.*,up.first_name as user_name')
+ ->join('user_profiles up', 'up.id = ticket_messages.created_by', 'left')
+ ->where('ticket_messages.is_active', 1)
+ ->where('ticket_messages.ticket_id', $ticket_master_id)
+ ->orderBy('ticket_messages.created_at', 'DESC')
->findAll();
+
foreach ($dataToSend['messages'] as $message) {
$mail_content_converted = $this->convertHtmlToText($message['mail_content']);
$message['mail_content'] = $mail_content_converted;
@@ -907,6 +915,8 @@ class TicketController extends BaseController
$replaceData = 'Click to open Claim Feedback Form ';
} else if ($value == "settle_letter"){
$replaceData = ' View Settlement Letter ';
+ }else if ($value == "approved_letter"){
+ $replaceData = ' View Approved Letter ';
}else {
$replaceData = isset($ticket_data[$value]) ? $ticket_data[$value] : '';
}
@@ -1034,7 +1044,7 @@ class TicketController extends BaseController
th.old_value,
th.new_value,
th.created_at,
- CONCAT(creator.first_name, ' ', creator.last_name) as modified_by,
+ CONCAT_WS(' ', creator.first_name, creator.last_name) AS modified_by,
-- Claim Status
old_status.claim_status as old_status_value,
new_status.claim_status as new_status_value,
@@ -1094,6 +1104,7 @@ class TicketController extends BaseController
ORDER BY
th.created_at DESC";
$data = $this->ticketHistoryModel->query($sql)->getResultArray();
+ // dd(db_connect()->getLastQuery());
$priorityType = $this->priorityType;
$relationshipType = $this->relationshipType;
$modeOFIntimate = $this->modeOFIntimate;
@@ -1228,7 +1239,7 @@ class TicketController extends BaseController
if ($policy_type == 1){
$viewData['column_order'] = [
'ACM_NAME', 'ID NOT GENERATED', 'NON ID', 'CDA', 'INFORMATION REQUIRED',
- 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - INVESTIGATION STATUS',
+ 'UNDER PROCESS - CLAIM NO. UPDATION',
'UNDER PROCESS - QUERY DOCUMENT RECEIVED', 'APPROVED', 'PAYMENT INITIATED',
'TOTAL'
];
@@ -1247,7 +1258,7 @@ class TicketController extends BaseController
}else{
$viewData['column_order'] = [
'ACM_NAME', 'CLAIM INTIMATION', 'INTIMATION TO INSURER', 'CLIENT PENDING',
- 'INSURER PENDING','INVESTIGATION','APPROVED','ON HOLD','TOTAL', 'NOT COVERED',
+ 'INSURER PENDING','INVESTIGATION','APPROVED','TOTAL', 'NOT COVERED',
'CLOSED', 'SETTLED', 'CLEARED_TOTAL'
];
$ordered_data = [];
@@ -1269,7 +1280,7 @@ class TicketController extends BaseController
$viewData['column_order'] = [
'TPA_NAME', 'NON ID', 'ID NOT GENERATED', 'CDA', 'INFORMATION REQUIRED',
- 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - INVESTIGATION STATUS',
+ 'UNDER PROCESS - CLAIM NO. UPDATION',
'UNDER PROCESS - QUERY DOCUMENT RECEIVED', 'APPROVED', 'PAYMENT INITIATED',
'TOTAL', 'SETTLED', 'CLOSED', 'CANCELLED', 'RETURNED', 'CLEARED_TOTAL'
];
diff --git a/app/Helpers/ExcelMergeHelper.php b/app/Helpers/ExcelMergeHelper.php
index 36306692..405c4762 100644
--- a/app/Helpers/ExcelMergeHelper.php
+++ b/app/Helpers/ExcelMergeHelper.php
@@ -17,10 +17,13 @@ class ExcelMergeHelper {
{
try {
log_message('debug', 'Attempting merge with original file order');
+ // echo "Attempting merge with original file order\n";
return self::processFiles($filePaths, $outputPath);
} catch (Exception $e) {
log_message('error', 'First attempt failed: ' . $e->getMessage() . ' in ' . $e->getFile() . ' on line ' . $e->getLine());
+ // echo "First attempt failed: " . $e->getMessage() . ' in ' . $e->getFile() . ' on line ' . $e->getLine() . "\n";
log_message('debug', 'Retrying with reversed file order');
+ // echo "Retrying with reversed file order\n";
// Reverse the file order and try again
$reversedFiles = array_reverse($filePaths);
@@ -29,6 +32,7 @@ class ExcelMergeHelper {
return self::processFiles($reversedFiles, $outputPath);
} catch (Exception $e2) {
log_message('error', 'Both attempts failed. Last error: ' . $e2->getMessage() . ' in ' . $e2->getFile() . ' on line ' . $e2->getLine());
+ // echo "Both attempts failed. Last error: " . $e2->getMessage() . ' in ' . $e2->getFile() . ' on line ' . $e2->getLine() . "\n";
return null;
}
}
@@ -45,7 +49,9 @@ class ExcelMergeHelper {
private static function processFiles(array $filePaths, string $outputPath): string
{
log_message('debug', 'Starting Excel merge process');
+ // echo "Starting Excel merge process\n";
log_message('debug', 'Files to process: ' . json_encode($filePaths));
+ // echo "Files to process: " . json_encode($filePaths) . "\n";
if (empty($filePaths)) {
throw new Exception("No files provided to merge");
@@ -66,6 +72,7 @@ class ExcelMergeHelper {
// Save the merged file
log_message('debug', "Saving merged file to: {$outputPath}");
+ // echo "Saving merged file to: {$outputPath}\n";
$writer = IOFactory::createWriter($mergedSpreadsheet, 'Xlsx');
$writer->setPreCalculateFormulas(false);
$writer->save($outputPath);
@@ -76,6 +83,7 @@ class ExcelMergeHelper {
gc_collect_cycles();
log_message('debug', 'Excel merge process completed successfully');
+ // echo "Excel merge process completed successfully\n";
return $outputPath;
}
@@ -87,15 +95,17 @@ class ExcelMergeHelper {
* @param int|null $index
* @throws Exception
*/
- private static function processSingleFile(array $fileInfo, Spreadsheet $mergedSpreadsheet, int $index = null)
+ private static function processSingleFile(array $fileInfo, Spreadsheet $mergedSpreadsheet, ?int $index = null)
{
if (!isset($fileInfo['file_path']) || !file_exists($fileInfo['file_path'])) {
$path = $fileInfo['file_path'] ?? 'undefined';
log_message('error', "File " . ($index ?? 'base') . ": Invalid or missing file path: {$path}");
+ // echo "File " . ($index ?? 'base') . ": Invalid or missing file path: {$path}\n";
return;
}
log_message('debug', "Processing file " . ($index ?? 'base') . ": " . $fileInfo['file_path']);
+ // echo "Processing file " . ($index ?? 'base') . ": " . $fileInfo['file_path'] . "\n";
try {
// Load the source spreadsheet
@@ -105,6 +115,7 @@ class ExcelMergeHelper {
$worksheets = $sourceSpreadsheet->getAllSheets();
$totalSheets = count($worksheets);
log_message('debug', "Total sheets in file: " . $totalSheets);
+ // echo "Total sheets in file: " . $totalSheets . "\n";
$sheetsToMerge = $fileInfo['sheets'] ?? [];
@@ -114,26 +125,30 @@ class ExcelMergeHelper {
try {
$sheetName = $worksheet->getTitle();
log_message('debug', "Processing sheet: {$sheetName}");
+ // echo "Processing sheet: {$sheetName}\n";
// Generate unique sheet name before cloning
$newName = $sheetName;
$counter = 1;
while (in_array($newName, $mergedSpreadsheet->getSheetNames())) {
- $newName = $sheetName . "_" . $counter++;
+ // $newName = $sheetName . "_" . $counter++;
log_message('debug', "Sheet name already exists. Trying new name: {$newName}");
+ // echo "Sheet name already exists. Trying new name: {$newName}\n";
}
// Clone the worksheet and set the new name
- $clonedSheet = clone $worksheet;
- $clonedSheet->setTitle($newName);
+ // $clonedSheet = clone $worksheet;
+ // $clonedSheet->setTitle($newName);
// Add as external sheet
- $mergedSpreadsheet->addExternalSheet($clonedSheet);
+ $mergedSpreadsheet->addExternalSheet($worksheet);
log_message('debug', "Successfully added sheet: {$newName}");
+ // echo "Successfully added sheet: {$newName}\n";
} catch (Exception $e) {
log_message('error', "Error processing sheet {$sheetName} as new name {$newName}: " . $e->getMessage() . ' in ' . $e->getFile() . ' on line ' . $e->getLine());
+ // echo "Error processing sheet {$sheetName} as new name {$newName}: " . $e->getMessage() . ' in ' . $e->getFile() . ' on line ' . $e->getLine() . "\n";
}
}
}
@@ -145,6 +160,7 @@ class ExcelMergeHelper {
} catch (Exception $e) {
log_message('error', "Error processing file {$fileInfo['file_path']}: " . $e->getMessage() . ' in ' . $e->getFile() . ' on line ' . $e->getLine());
+ // echo "Error processing file {$fileInfo['file_path']}: " . $e->getMessage() . ' in ' . $e->getFile() . ' on line ' . $e->getLine() . "\n";
}
}
}
\ No newline at end of file
diff --git a/app/Models/LeadFilesModel.php b/app/Models/LeadFilesModel.php
new file mode 100644
index 00000000..37db8e16
--- /dev/null
+++ b/app/Models/LeadFilesModel.php
@@ -0,0 +1,55 @@
+getResultArray();
}
+ public function getexclusiveUserListForRFQ(){
+ $data = $this->db->table('user_profiles')
+ ->select('user_profiles.*,user_teams.team_id')
+ ->select('roles.role as user_role')
+ ->join('roles', 'roles.id = user_profiles.role')
+ ->join('user_teams', 'user_teams.user_id = user_profiles.id')
+ ->get()
+ ->getResultArray();
+
+
+ // dd($data);
+
+ return $data;
+ }
+
}
?>
\ No newline at end of file
diff --git a/app/Views/chatbot.php b/app/Views/chatbot.php
index 94373196..95bf5cde 100644
--- a/app/Views/chatbot.php
+++ b/app/Views/chatbot.php
@@ -41,7 +41,7 @@
origin: "mobile", // origin
emp_code:"HTL-007",
client_id:159,
- client_branch_id:125
+ client_branch_id:126
}
};
diff --git a/app/Views/layout/header.php b/app/Views/layout/header.php
index f7ccabb4..8db290b2 100755
--- a/app/Views/layout/header.php
+++ b/app/Views/layout/header.php
@@ -80,6 +80,9 @@
+
+
+
diff --git a/app/Views/leads_form.php b/app/Views/leads_form.php
index 003e8d96..fc2ee0f0 100644
--- a/app/Views/leads_form.php
+++ b/app/Views/leads_form.php
@@ -162,6 +162,16 @@
+
+ Source Policy Start Date
+
+
+
+
+ Source Policy End Date
+
+
+
+
+ Attachments Files
+
+
+
+
Send Mail
@@ -4550,6 +4581,11 @@
bcc = bcc.map(Number);
bcc = JSON.stringify(bcc);
+ var selectedFiles = [];
+ $('#insurer_or_clinet_mail_attachment .multi_file_attachment:checked').each(function () {
+ selectedFiles.push($(this).val());
+ });
+
// Prepare FormData object
var formData = new FormData();
formData.append('lead_id', lead_id);
@@ -4557,6 +4593,8 @@
formData.append('subject', subject);
formData.append('cc', cc);
formData.append('bcc', bcc);
+ formData.append('selected_attachment_files', JSON.stringify(selectedFiles));
+
if (rfq_or_qcr == 2) {
formData.append('file_type', 'qcr');
@@ -4591,6 +4629,12 @@
// Determine file type
var file_type = rfq_or_qcr == 2 ? 'qcr' : 'rfq';
+ var selectedFiles = [];
+ $('#internal_mail_attachment .multi_file_attachment:checked').each(function () {
+ selectedFiles.push($(this).val());
+ });
+
+
// Create FormData
var formData = new FormData();
formData.append('lead_id', lead_id);
@@ -4601,6 +4645,8 @@
formData.append('subject', subject);
formData.append('mail_content', mail_content);
formData.append('recipient_mail', ''); // Empty value as per logic
+ formData.append('selected_attachment_files', JSON.stringify(selectedFiles));
+
ajaxRequest(formData)
@@ -4626,6 +4672,13 @@
to = to.split(',').map(email => email.trim());
cc = cc.map(Number); // or split if it's a string: `cc.split(',').map(email => email.trim())`
+
+ var selectedFiles = [];
+ $('#placement_mail_attachment .multi_file_attachment:checked').each(function () {
+ selectedFiles.push($(this).val());
+ });
+
+
// Prepare FormData
var formData = new FormData();
formData.append('lead_id', lead_id);
@@ -4642,11 +4695,14 @@
formData.append('total_amount', total_amount);
formData.append('cd_amount', cd_amount);
formData.append('mail_content', mail_content);
+ formData.append('selected_attachment_files', JSON.stringify(selectedFiles));
+
ajaxRequest(formData);
}
+
function ajaxRequest(formData) {
var apiURL = '= base_url('leads/sendMail') ?>';