diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 1f6d0bf9..f7426af0 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -309,6 +309,11 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->post("update_emp_data", "EmployeeController::update_emp_data"); $routes->get("checkDeletionGetDataFunction", "EmployeeController::checkDeletionGetDataFunction"); $routes->get("download_import_excel/(:any)", "EmployeeController::downloadSampleImportExcelFile/$1"); + $routes->get("getInsurerBranchContacts/(:any)", "LeadsController::getInsurerBranchContacts/$1"); + $routes->get("download_import_file/(:any)", "EmployeeController::download_import_file/$1"); + $routes->get('log_list', 'EmployeeController::listLogs'); + $routes->get('view_log/(:any)', 'EmployeeController::viewLog/$1'); + $routes->get('download_log/(:any)', 'EmployeeController::downloadLog/$1'); }); $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) { @@ -355,6 +360,7 @@ $routes->group("leads", ["filter" => "authMVC"], function ($routes) { $routes->get("sendMail", "LeadsController::sendMailWithAttachement"); $routes->get("exportQCRandRFQ/(:any)", "LeadsController::exportQCRandRFQ/$1"); $routes->get("featchLeadDataAndInsertClient/(:any)", "LeadsController::featchLeadDataAndInsertClient/$1"); + $routes->get("featchClientPolicyFromLead/(:any)", "LeadsController::featchClientPolicyFromLead/$1"); }); $routes->group("rfq", ["filter" => "authMVC"], function ($routes) { diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index e90f1e1b..1e169b88 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -287,7 +287,7 @@ class ClientController extends AdminController $headerData['page_name'] = 'Client List'; $data['clientList'] = $this->clientModel->getCreatedByUserName(); $data['client_rm'] = $this->clientRMModel->getAllClientRM(); - // $data['lead_data'] = $this->leadsModel->getLeadForInsertClientList(); + $data['lead_data'] = $this->leadsModel->getLeadForInsertClientList(); // dd($data); @@ -553,6 +553,7 @@ class ClientController extends AdminController $editData['client_branch'] = $this->clientBranchModel->where(['client_id' => $id, 'is_active' => 1])->findAll(); $editData['client_relation'] = $this->clientRMModel->where(['client_id' => $id, 'is_active' => 1])->findAll(); $editData['client_branch']['role'] = get_role_id(); + $editData['lead_data'] = $this->leadsModel->getLeadForInsertClientList(2, $id); $clientPoliceData = $this->clientPolicyModel->getClientPolicyByClientId($id); foreach ($clientPoliceData as $key => $value) { diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php index 8bd4e545..9ae9e2d1 100755 --- a/app/Controllers/EmpDataServiceController.php +++ b/app/Controllers/EmpDataServiceController.php @@ -3976,22 +3976,75 @@ class EmpDataServiceController extends BaseController // print_r($arrayData); if (!empty($arrayData)) { + // dd($arrayData); + // echo '
';
// print_r($arrayData); die;
$client_branch_data = $this->clientBranchModel->where('id', $arrayData['client_branch_id'])->first();
$units = json_decode($client_branch_data['units']);
+ // dd($client_branch_data, $units);
+
+ $get_insurer_id_from_client_policy = db_connect()->table('client_policy')
+ ->select('insurer_id')
+ ->where('id', $arrayData['client_policy_id'])
+ ->get()
+ ->getRowArray();
+
+ // dd($get_insurer_id_from_client_policy);
+
+ $add_one_day = 0;
+
+ if (!empty($get_insurer_id_from_client_policy)) {
+
+ $get_the_insurer_add_one_for_delete = db_connect()
+ ->table('insurers')
+ ->select('deletion_add_day')
+ ->where('id', $get_insurer_id_from_client_policy['insurer_id'])
+ ->get()
+ ->getRowArray();
+
+ // dd($get_the_insurer_add_one_for_delete, $get_the_insurer_add_one_for_delete['deletion_add_day']);
+
+ if (!empty($get_the_insurer_add_one_for_delete) && $get_the_insurer_add_one_for_delete['deletion_add_day'] == 1) {
+ $add_one_day = 1;
+ }
+ }
+
+ // dd($add_one_day);
+
foreach($units as $unit) {
+ // $amount = $this->employeePolicyModel->query("
+ // SELECT SUM(rata_premimum + gst) AS total_sum
+ // FROM employee_polices
+ // JOIN employees ON employees.id = employee_polices.employee_id
+ // WHERE employees.unit = '$unit'
+ // AND employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ")
+ // ")->getRow();
+
$amount = $this->employeePolicyModel->query("
- SELECT SUM(rata_premimum + gst) AS total_sum
- FROM employee_polices
- JOIN employees ON employees.id = employee_polices.employee_id
- WHERE employees.unit = '$unit'
- AND employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ")
- ")->getRow();
-
+ SELECT
+ SUM(ROUND(
+ ((employee_polices.rata_premimum * (DATEDIFF(employee_polices.policy_end_date, emp_endorsement.new_value) + '$add_one_day')) / 365) +
+ (((employee_polices.rata_premimum * (DATEDIFF(employee_polices.policy_end_date, emp_endorsement.new_value) + '$add_one_day')) / 365) * 0.18),
+ 2
+ )) AS total_sum
+ FROM
+ employee_polices
+ JOIN
+ employees ON employees.id = employee_polices.employee_id
+ JOIN
+ emp_endorsement ON emp_endorsement.pk = employee_polices.id
+ WHERE
+ employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ")
+ AND emp_endorsement.pk IN (" . implode(',', $arrayData['employeeIds']) . ")
+ AND emp_endorsement.field_name = 'date_of_exit'
+ ")->getRow();
+
+ // dd(db_connect()->getLastQuery(), $amount);
+
if($amount){
$insurer_id = $this->clientPolicyModel->where('id', $arrayData['client_policy_id'])->first();
@@ -4016,6 +4069,7 @@ class EmpDataServiceController extends BaseController
$response = DepositHelper::saveDeposit($data, $arrayData['user_id']);
}
}
+
$msg = "Deletion Cash Deposite Updated Successfully -- ";
return [$msg];
// print_r($response);
@@ -4255,136 +4309,103 @@ class EmpDataServiceController extends BaseController
public function sendMailForDownloadingECard(array $ids, $single_mail = null)
{
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - function called');
- if (count($ids) > 0) {
-
- $temp_id = $ids[0];
-
- $get_client_info_for_notification = $this->employeePolicyModel
- ->select('employee_polices.client_policy_id, employees.emp_code, employees.email_corporate,employees.client_id as client_id, employees.name, employee_polices.rand_string, employee_polices.tpa_id')
- ->join('employees', 'employees.id = employee_polices.employee_id')
- ->where('employees.emp_status', 'active')
- ->where('employees.is_active', '1')
- ->where('employee_polices.status', 'active')
- ->where('employee_polices.is_active', '1')
- ->where('employee_polices.id', $ids[0])->first();
-
- $client_data = $this->clientModel->where('id', $get_client_info_for_notification['client_id'])->first();
- $notification = $this->notificationModel->where('client_id', $get_client_info_for_notification['client_id'])->where('template_name', 'member_ecard_mail')->first();
-
- if ($notification != null && !empty($notification) && $notification['enabled'] == 1) {
-
- try {
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - inside try');
- $count = 0;
- $counts = 0;
-
- foreach ($ids as $key => $id) {
-
- $get_emp_email_and_other_details = $this->employeePolicyModel
- ->select('employee_polices.client_policy_id, employees.relationship, employees.emp_code, employees.email_corporate,employees.client_id as client_id, employees.name, employee_polices.rand_string, employee_polices.tpa_id')
- ->join('employees', 'employees.id = employee_polices.employee_id')
- ->where('employees.emp_status', 'active')
- ->where('employees.is_active', '1')
- ->where('employee_polices.status', 'active')
- ->where('employee_polices.is_active', '1')
- ->where('employee_polices.id', $id)->first();
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - emp_policy_id : {id}', ['id' => $id]);
-
- if ($get_emp_email_and_other_details != null && !empty($get_emp_email_and_other_details)) {
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - Send Bulk Mail function inside if condition ',);
-
- $rand_string = $get_emp_email_and_other_details['rand_string'];
- $tpa_id = $get_emp_email_and_other_details['tpa_id'];
-
- $params['rand_string'] = $rand_string;
- $params['tpa_id'] = $tpa_id;
- $params['notification'] = $notification;
- $params['client_data'] = $client_data;
- $params['notification'] = $notification;
- $params['notification'] = $notification;
- $params['get_emp_email_and_other_details'] = $get_emp_email_and_other_details;
- // $this->myLogger->logme('error', 'sendMailForDownloadingECard - Send Bulk Mail function end ',);
-
- if (isset($get_emp_email_and_other_details['email_corporate']) && !empty($get_emp_email_and_other_details['email_corporate']) && $get_emp_email_and_other_details['relationship'] == 'Self') {
- $wholeData[] = sendMailNotification::sendMailNotification('member_ecard_mail', $params);
- // print_r($wholeData);die;
- $count++;
- }
-
- $counts++;
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - counts : {data}', ['data' => $counts]);
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - count : {data}', ['data' => $count]);
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - ids count : {data}', ['data' => count($ids)]);
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - whole count : {data}', ['data' => count($wholeData)]);
-
- if ($count == 20 || $counts == count($ids) - 1) {
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - ids count : {data}', ['data' => count($ids)]);
-
- if(count($wholeData) > 0){
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - create a job to bulk mail',);
-
- $job_details = new Jobs();
- $r = Jobs::addJob(['job_name' => 'bulk_mail', 'payload' => $wholeData]);
- $wholeData = [];
- $count = 0;
-
- }
- }else{
-
- // for view member individual employee send self and self family ecard
- if($single_mail){
-
- if(count($wholeData) > 0){
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - create a job for single mail to bulk mail function',);
+ $this->myLogger->logme('info', 'sendMailForDownloadingECard - Function called');
- $mail_send_return = MailHelper::send_email($wholeData[0]);
- $this->myLogger->logme("info", $mail_send_return);
- return $mail_send_return;
-
- // $job_details = new Jobs();
- // $r = Jobs::addJob(['job_name' => 'bulk_mail', 'payload' => $wholeData]);
- // $wholeData = [];
- // $count = 0;
-
- }
-
- }
-
- }
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - Send Bulk Mail function end ',);
- }
- }
- return true; // Email(s) sent successfully
-
- } catch (\Exception $e) {
-
- // Log the error
- $this->myLogger->logme('error', 'sendMailForDownloadingECard : inside catch');
- $this->myLogger->logme('error', 'Error occurred while sending email: ' . $e->getMessage());
- return false; // Email(s) sending failed
- }
- } else {
-
- $this->myLogger->logme('error', 'sendMailForDownloadingECard - the client notification setup not created or not enabled the E-Card Notification');
- return false;
- }
-
- } else {
-
+ if (empty($ids)) {
$this->myLogger->logme('error', 'sendMailForDownloadingECard - employee_policy_ids are empty');
return false;
}
+
+ $temp_id = $ids[0];
+
+ $get_client_info = $this->employeePolicyModel
+ ->select('employee_polices.client_policy_id, employees.emp_code, employees.email_corporate, employees.client_id, employees.name, employee_polices.rand_string, employee_polices.tpa_id')
+ ->join('employees', 'employees.id = employee_polices.employee_id')
+ ->where('employees.emp_status', 'active')
+ ->where('employees.is_active', '1')
+ ->where('employee_polices.status', 'active')
+ ->where('employee_polices.is_active', '1')
+ ->where('employee_polices.id', $temp_id)
+ ->first();
+
+ if (!$get_client_info) {
+ $this->myLogger->logme('error', 'sendMailForDownloadingECard - No client information found for the first ID');
+ return false;
+ }
+
+ $client_data = $this->clientModel->where('id', $get_client_info['client_id'])->first();
+ $notification = $this->notificationModel
+ ->where('client_id', $get_client_info['client_id'])
+ ->where('template_name', 'member_ecard_mail')
+ ->first();
+
+ if (empty($notification) || $notification['enabled'] != 1) {
+ $this->myLogger->logme('error', 'sendMailForDownloadingECard - Notification setup not enabled or missing for E-Card Notification');
+ return false;
+ }
+
+ try {
+ $this->myLogger->logme('error', 'sendMailForDownloadingECard - Inside try block');
+
+ $count = 0;
+ $processedCount = 0;
+ $wholeData = [];
+
+ foreach ($ids as $id) {
+ $emp_details = $this->employeePolicyModel
+ ->select('employee_polices.client_policy_id, employees.relationship, employees.emp_code, employees.email_corporate, employees.client_id, employees.name, employee_polices.rand_string, employee_polices.tpa_id')
+ ->join('employees', 'employees.id = employee_polices.employee_id')
+ ->where('employees.emp_status', 'active')
+ ->where('employees.is_active', '1')
+ ->where('employee_polices.status', 'active')
+ ->where('employee_polices.is_active', '1')
+ ->where('employee_polices.id', $id)
+ ->first();
+
+ if ($emp_details) {
+ $this->myLogger->logme('error', 'sendMailForDownloadingECard - Processing employee_policy_id: {id}', ['id' => $id]);
+
+ if (!empty($emp_details['email_corporate']) && $emp_details['relationship'] === 'Self') {
+ $params = [
+ 'rand_string' => $emp_details['rand_string'],
+ 'tpa_id' => $emp_details['tpa_id'],
+ 'notification' => $notification,
+ 'client_data' => $client_data,
+ 'get_emp_email_and_other_details' => $emp_details,
+ ];
+ $wholeData[] = sendMailNotification::sendMailNotification('member_ecard_mail', $params);
+ $count++;
+ }
+ $processedCount++;
+
+ // Send batch emails or handle single email
+ if ($count == 20 || $processedCount == count($ids)) {
+ if (!empty($wholeData)) {
+ if ($single_mail == 1) {
+ $this->myLogger->logme('error', 'sendMailForDownloadingECard - Sending single mail');
+ $mail_result = MailHelper::send_email($wholeData[0]);
+ $this->myLogger->logme('info', 'sendMailForDownloadingECard - Single mail result: {result}', ['result' => $mail_result]);
+ return $mail_result;
+ } else {
+ $this->myLogger->logme('error', 'sendMailForDownloadingECard - Creating a job for bulk mail');
+ Jobs::addJob(['job_name' => 'bulk_mail', 'payload' => $wholeData]);
+ $wholeData = [];
+ $count = 0;
+ }
+ }
+ }
+ }
+ }
+
+ $this->myLogger->logme('error', 'sendMailForDownloadingECard - Email processing completed');
+ return true;
+
+ } catch (\Exception $e) {
+ $this->myLogger->logme('error', 'sendMailForDownloadingECard - Exception occurred: {message}', ['message' => $e->getMessage()]);
+ return false;
+ }
}
+
public function readExcelFileToArray($path)
{
diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index 8deb7980..af508898 100755
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -1074,6 +1074,7 @@ class EmployeeController extends AdminController
// Step 1: Attempt to fetch employee code and client policy ID
$this->myLogger->logme('error', 'Fetching employee code and client policy ID.');
+
$get_emp_code_and_client_policy_id = $this->employeePolicyModel
->select('employee_polices.client_policy_id, employees.emp_code, tpa.short_name,employees.client_id')
->join('client_policy', 'client_policy.id = employee_polices.client_policy_id')
@@ -1086,6 +1087,10 @@ class EmployeeController extends AdminController
->where('employee_polices.is_active', '1')
->where('employee_polices.rand_string', $rand_string)
->first();
+
+ // dd($this->employeePolicyModel->getLastQuery());
+
+ // dd($rand_string, $get_emp_code_and_client_policy_id);
if ($get_emp_code_and_client_policy_id == null || $get_emp_code_and_client_policy_id == "") {
$this->myLogger->logme('error', 'Member not found in this rand_string: ' . $rand_string);
@@ -1222,7 +1227,8 @@ class EmployeeController extends AdminController
// $file['action'] = 'si_enhancement';
// $result = [];
// !dd($file);
- if ($file['action'] == 'inception' || $file['action'] == 'dependent_addition' || $file['action'] == 'addition' || $file['action'] == 'enrollment') {
+ if ($file['action'] == 'inception' || $file['action'] == 'dependent_addition' || $file['action'] == 'addition' || $file['action'] == 'enrollment' || $file['action'] == 'missed_inception') {
+
if($file['action'] == 'enrollment'){
$result = $this->employeeModel->getEmpListByFileId(file_id: $file_id, emp_status: ['draft','enrolled'], policy_status: ['draft','enrolled']);
@@ -1442,9 +1448,9 @@ class EmployeeController extends AdminController
// array_pop($excel_data);
// }
- if($event_type == 'deletion'){
- array_pop($excel_data);
- }
+ // if($event_type == 'deletion'){
+ // array_pop($excel_data);
+ // }
$finalArray = [];
foreach ($error_data as $key => $values) {
@@ -1785,20 +1791,37 @@ class EmployeeController extends AdminController
public function checkDeletionGetDataFunction()
{
- $batch_data = [
- 'client_id' => 77,
- 'client_policy_id' => 203,
- 'client_branch_id' => 53,
- 'insurer_or_tpa' => 'tpa',
- ];
+ // $batch_data = [
+ // 'client_id' => 77,
+ // 'client_policy_id' => 203,
+ // 'client_branch_id' => 53,
+ // 'insurer_or_tpa' => 'tpa',
+ // ];
- $result = $this->employeePolicyModel->getDeletionEmployeeDataForExportExcel($batch_data);
+ // $result = $this->employeePolicyModel->getDeletionEmployeeDataForExportExcel($batch_data);
+
+ // print_rr($result); die;
+
+ //-------------------------------------------------------------------------------------------------------------
+
+ // $ids = [
+ // 'employeeIds' => [20252, 20258, 20277, 20282, 20196, 20237, 20314, 20325, 20356],
+ // 'client_id' => 17,
+ // 'client_policy_id' => 30,
+ // 'client_branch_id' => 18,
+ // 'cd_ac_no' => $CD_Account_Number['cd_ac_no'] ?? null,
+ // 'endorsement_no' => $endorsement_id ?? null,
+ // 'count' => 9,
+ // // 'event_name' => $file['event_type'],
+ // // 'policy_name' => $policy_name['policy_name'],
+ // // 'user_id' => $user_id,
+ // ];
+ // $empDataServiceController = new EmpDataServiceController();
+ // $result = $empDataServiceController->cashDepositCalculationForDeletion($ids);
- print_rr($result); die;
}
-
- // ----------------------------------------------------------------------------------------------------------
+ // ---------- DOWNLOAD IMPORT BATCH FILE AND SAMPLE FILE ------------------------------------------------------------------------------------------------
public function downloadSampleImportExcelFile($actionType = null)
{
@@ -1834,4 +1857,94 @@ class EmployeeController extends AdminController
echo view('errors/html/production');
}
}
+
+ public function download_import_file($file_id)
+ {
+ // $actionType = $this->request->getGet();
+ $file_data = $this->batchFileModel->where('id', $file_id)->first();
+ $fileName = $file_data['file_name'];
+
+ $filePath = WRITEPATH . '/uploads/import_excel/' . $fileName;
+
+ try {
+
+ // Check if the file exists
+ if (file_exists($filePath)) {
+ // Set the appropriate MIME type
+ $mimeType = mime_content_type($filePath);
+
+ // Send the file to the client for download
+ return $this->response->download($filePath, null, $mimeType);
+ } else {
+
+ $data['message'] = 'The Physical File Not Found';
+ echo view('errors/404', $data);
+ }
+ } catch (\Exception $e) {
+ // Handle any exceptions
+ $errorMessage = $e->getMessage();
+ $this->myLogger->logme('error', $errorMessage);
+ // You can return an error response here
+ echo $errorMessage;
+ }
+ }
+
+ //--------- LOG FILE VIEW AND DOWNLOAD ---------------------------------------------------------------------------------------------
+
+ public function listLogs()
+ {
+ $logPath = WRITEPATH . 'logs/';
+ $logs = [];
+
+ // Check if the log directory exists
+ if (is_dir($logPath)) {
+ $files = array_diff(scandir($logPath), ['.', '..']); // Exclude '.' and '..'
+
+ $files = array_reverse($files);
+
+ foreach ($files as $file) {
+ if (is_file($logPath . $file)) {
+ $logs[] = $file; // Add log files to the list
+ }
+ }
+ }
+
+ $data['logs'] = $logs;
+ $data['server_details'] = get_server_details();
+
+ // Pass log files to the view
+ return $this->loadLayout('log_view', $data);
+ }
+
+ public function downloadLog($fileName)
+ {
+ $logPath = WRITEPATH . 'logs/' . $fileName;
+
+ // Check if the requested file exists
+ if (file_exists($logPath)) {
+ return $this->response->download($logPath, null)->setFileName($fileName);
+ }
+
+ // Redirect back with an error if file doesn't exist
+ return redirect()->back()->with('error', 'Log file not found.');
+ }
+
+ public function viewLog($fileName)
+ {
+ $logPath = WRITEPATH . 'logs/' . $fileName;
+
+ if (file_exists($logPath)) {
+ $content = file_get_contents($logPath);
+
+ $data['fileName'] = $fileName;
+ $data['content'] = $content;
+ $data['server_details'] = get_server_details();
+
+ return $this->loadLayout('log_content_view', $data);
+ }
+
+ return redirect()->back()->with('error', 'Log file not found.');
+ }
+
+
}
diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php
index 9d2c246c..d25b93a9 100644
--- a/app/Controllers/LeadsController.php
+++ b/app/Controllers/LeadsController.php
@@ -5,6 +5,8 @@ namespace App\Controllers;
use CodeIgniter\API\ResponseTrait;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Style\Border;
+use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use App\Models\UserModel;
@@ -164,14 +166,27 @@ class LeadsController extends BaseController
}
private function prepareMultipleLeadData($data)
- {
+ {
+ // print_r($data); die;
$processedData = [];
foreach($data['policy_type_id'] as $index => $value){
- // Separate the insurer and insurer branch
- list($insurer_branch_id, $insurer_id) = explode('-',$data['insurer'][$index]);
- // Separate the tpa and tpa branch
- list($tpa_branch_id, $tpa_id) = explode('-',$data['tpa'][$index]);
+
+ // Separate the insurer and insurer branch, handle missing or invalid data
+ if (isset($data['insurer'][$index]) && strpos($data['insurer'][$index], '-') !== false) {
+ list($insurer_branch_id, $insurer_id) = explode('-', $data['insurer'][$index]);
+ } else {
+ $insurer_branch_id = 0;
+ $insurer_id = 0;
+ }
+ // Separate the insurer and insurer branch, handle missing or invalid data
+ if (isset($data['tpa'][$index]) && strpos($data['tpa'][$index], '-') !== false) {
+ list($tpa_branch_id, $tpa_id) = explode('-', $data['tpa'][$index]);
+ } else {
+ $tpa_branch_id = 0;
+ $tpa_id = 0;
+ }
+
// Separate the insurer and insurer branch, handle missing or invalid data
if (isset($data['proposed_insurer'][$index]) && strpos($data['proposed_insurer'][$index], '-') !== false) {
@@ -337,16 +352,25 @@ class LeadsController extends BaseController
$data['lead_id'] = $id;
$lead_data = $this->leadsModel
- ->select('policy_type.question_json')
+ ->select('leads.*, policy_type.question_json')
->join('policy_type', 'leads.policy_type_id = policy_type.id')
->where('leads.id', $id)
+ ->where('leads.is_active', 1)
->first();
+ // dd($lead_data);
+
+ if($lead_data['lead_type'] == 2){
+ $client_policy_data = $this->clientPolicyModel->where('is_active', 1)->where('id', $lead_data['source_policy_id'])->first();
+ $data['policy_terms'] = $client_policy_data['policy_terms'];
+ }
+
$data['question_json'] = $lead_data['question_json'];
$data['page_name'] = isset($data['rfq_data']['type']) && $data['rfq_data']['type'] == 2 ? 'QCR' : 'RFQ';
$data['insurer'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
+ $data['userList'] = $this->userModel->getUserListForRFQ();
+ $data['lead_data'] = $lead_data;
- $data['lead_data'] = $this->leadsModel->where('leads.id', $id)->where('leads.is_active', 1)->first();
// dd($data);
$this->loadLayout('view_rfq.php', $data);
}
@@ -366,7 +390,7 @@ class LeadsController extends BaseController
$result = $this->RFQModel->insert($data);
if ($result) {
- return $this->respond(['status' => true, 'id' => $result, 'message' => 'New RFQ created successfully', 'data' =>$data], 200);
+ return $this->respond(['status' => true, 'id' => $result, 'message' => 'RFQ created successfully', 'data' =>$data], 200);
}
return $this->respond(['status' => false, 'id' => $result, 'message' => "Failed to create RFQ", 'data' =>$data], 200);
@@ -389,7 +413,7 @@ class LeadsController extends BaseController
$result = $this->RFQModel->insert($data);
if ($result) {
- return $this->respond(['status' => true, 'id' => $result, 'message' => 'New QCR created successfully', 'data' =>$data], 200);
+ return $this->respond(['status' => true, 'id' => $result, 'message' => 'QCR created successfully', 'data' =>$data], 200);
}
return $this->respond(['status' => false, 'id' => $result, 'message' => "Failed to create QCR", 'data' =>$data], 200);
@@ -401,12 +425,7 @@ class LeadsController extends BaseController
//export main route function
public function exportQCRandRFQ($lead_id, $type, $export_type){
-
- if($export_type == 'mail'){
- $this-> exportMailForQCRandRFQ($lead_id, $type);
- }else{
- $this-> exportExcelForQCRandRFQ($lead_id, $type);
- }
+ $this-> exportExcelForQCRandRFQ($lead_id, $type);
}
//FOR EXCEL
@@ -435,53 +454,29 @@ class LeadsController extends BaseController
}
}
- //FOR MAIL
- public function exportMailForQCRandRFQ($lead_id, $type){
-
- $filepath = $this->constructExcelToSaveTemp($lead_id, $type);
-
- if ($filepath) {
- return $this->respond(['status' => true, 'file_path' => $filepath, 'message' => 'Mail send successfully'], 200);
- }
-
- return $this->respond(['status' => false, 'file_path' => $filepath, 'message' => "Mail send failed"], 200);
- }
-
//Construct excel file and save the file to the folder and return file path
- public function constructExcelToSaveTemp($lead_id, $type)
- {
- $rfq_data = $this->RFQModel
- ->select('
- leads.client_name,
- leads.client_short_name,
- insurers.name as insurer_name,
- insurer_branch.branch_name as insurer_branch_name,
- tpa.name as tpa_name,
- tpa_branch.branch_name as tpa_branch_name,
- policy_type.policy_type,
- rfq.json
- ')
- ->join('leads', 'rfq.lead_id = leads.id')
- ->join('policy_type', 'leads.policy_type_id = policy_type.id')
- ->join('insurers', 'leads.insurer_id = insurers.id')
- ->join('insurer_branch', 'leads.insurer_branch_id = insurer_branch.id')
- ->join('tpa', 'leads.tpa_id = tpa.id')
- ->join('tpa_branch', 'leads.tpa_branch_id = tpa_branch.id')
- ->where('rfq.lead_id', $lead_id)
- ->where('rfq.type', $type)
- ->where('rfq.is_active', 1)
- ->first();
+ public function constructExcelToSaveTemp($lead_id, $type, $propsal_and_insurer = null)
+ {
+ $rfq_data = $this->RFQModel->getRFQTableDataWithLeadIDAndType($lead_id, $type);
+ // dd($rfq_data, $lead_id, $type);
+
$lead_data = [
'Insured' => $rfq_data['client_name'],
'Insurer' => $rfq_data['insurer_name'] . ' - ' . $rfq_data['insurer_branch_name'],
'TPA' => $rfq_data['tpa_name'] . ' - ' . $rfq_data['tpa_branch_name'],
];
+
+ $data = json_decode($rfq_data['json'], true);
+
+ if($type == 2){
+ $data = $this->convertJsonForQCR($data, 'stc');
+ if($propsal_and_insurer !== null){
+ list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2);
+ $data = $this->transformProposelData($data, $proposal_key, $insurer_key);
+ }
+ }
- $jsonData = $rfq_data['json'];
- $data = json_decode($jsonData, true);
-
- // Initialize PhpSpreadsheet
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
@@ -490,96 +485,173 @@ class LeadsController extends BaseController
foreach ($lead_data as $key => $value) {
$sheet->setCellValue("A{$rowNumber}", $key);
$sheet->setCellValue("B{$rowNumber}", $value);
-
- // Apply bold style to the key
- $sheet->getStyle("A{$rowNumber}")->applyFromArray([
- 'font' => [
- 'bold' => true,
- ],
- ]);
-
+ $sheet->getStyle("A{$rowNumber}")->applyFromArray(['font' => ['bold' => true]]);
$rowNumber++;
}
- // Leave two blank rows
+ $leadRange = "A1:B" . (count($lead_data));
+ $sheet->getStyle($leadRange)->applyFromArray([
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => 'FF000000'], // Black color
+ ],
+ ],
+ ]);
+
+
$rowNumber += 2;
- // Set headers and subheaders starting from current row
+ // Add headers and subheaders
$headers = $data['table_data']['headers'];
$subHeaderRow = $rowNumber + 1;
$columnLetter = 'A';
-
- // Set column width and apply word wrap to headers and subheaders
+
foreach ($headers as $header) {
- if ($header['parentHeader'] === 'Item Key' || $header['parentHeader'] == 'Action') {
- continue; // Skip "Item Key" and "Action" columns
+ if (in_array($header['parentHeader'], ['Item Key', 'Action'])) {
+ continue;
}
-
+
if ($header['parentHeader'] === 'Sno') {
$header['parentHeader'] = 'S.No.';
}
-
- // Set the header cell value
- $sheet->setCellValue("{$columnLetter}{$rowNumber}", $header['parentHeader']);
-
- // Set column width for header
- $sheet->getColumnDimension($columnLetter)->setWidth(20); // Adjust width as needed
- $sheet->getStyle("{$columnLetter}{$rowNumber}")->getAlignment()->setWrapText(true);
-
- // Apply bold style to the header
- $sheet->getStyle("{$columnLetter}{$rowNumber}")->applyFromArray([
- 'font' => [
- 'bold' => true,
+
+ $startColumn = $columnLetter; // Start of the current header range
+ $subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header
+
+ // Set parent header value
+ $sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']);
+ $sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([
+ 'font' => ['bold' => true],
+ 'alignment' => [
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
],
]);
-
- // Add subheaders in the second row
+
+ // Merge header cells if it spans multiple subheaders
+ if ($subHeaderCount > 1) {
+ $endColumn = chr(ord($startColumn) + $subHeaderCount - 1); // Calculate the end column
+ $sheet->mergeCells("{$startColumn}{$rowNumber}:{$endColumn}{$rowNumber}");
+ } else {
+ $endColumn = $startColumn; // No merge needed if only one subheader
+ }
+
+ // Add subheaders
foreach ($header['subHeaders'] as $subHeader) {
$sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
-
- // Enable word wrap for subheaders
- $sheet->getStyle("{$columnLetter}{$subHeaderRow}")->getAlignment()->setWrapText(true);
-
- // Apply bold style to the subheader
$sheet->getStyle("{$columnLetter}{$subHeaderRow}")->applyFromArray([
- 'font' => [
- 'bold' => true,
+ 'font' => ['bold' => true],
+ 'alignment' => [
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
],
]);
-
- $columnLetter++;
+ $columnLetter++; // Move to the next column for subheaders
}
}
+
+ // Apply border to the header range
+ $headerRange = "A{$rowNumber}:" . chr(ord($columnLetter) - 1) . "{$subHeaderRow}";
+ $sheet->getStyle($headerRange)->applyFromArray([
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => 'FF000000'], // Black color
+ ],
+ ],
+ ]);
- // Move to next row for data entries
- $rowNumber = $subHeaderRow + 1;
+ // Increase row height for headers and subheaders
+ $sheet->getRowDimension($rowNumber)->setRowHeight(30); // Header row height
+ $sheet->getRowDimension($subHeaderRow)->setRowHeight(25); // Subheader row height
+
+ $rowNumber = $subHeaderRow + 2;
+ $column_data = $data['table_data']['data'];
+ $serial_no = 1;
- // Add data rows and enable word wrap for data cells
- foreach ($data['table_data']['data'] as $dataRow) {
+ // Add table data rows
+ foreach ($column_data as $dataRow) {
$columnLetter = 'A';
foreach ($dataRow['data'] as $cellData) {
- if ($cellData['parentth'] === 'Item Key' || $cellData['parentth'] == 'Action') {
- continue; // Skip "Item Key" data
+ if (in_array($cellData['parentth'], ['Item Key', 'Action'])) {
+ continue;
}
- $sheet->setCellValue("{$columnLetter}{$rowNumber}", $cellData['value']);
-
- // Enable word wrap for data cells
- $sheet->getStyle("{$columnLetter}{$rowNumber}")->getAlignment()->setWrapText(true);
-
+
+ if ($cellData['parentth'] == 'Sno') {
+ $sheet->setCellValue("{$columnLetter}{$rowNumber}", $serial_no);
+ } else {
+ $sheet->setCellValue("{$columnLetter}{$rowNumber}", $cellData['value']);
+ }
+
$columnLetter++;
}
$rowNumber++;
+ $serial_no++;
}
- // Auto-size all columns after data is entered
+ $dataRange = "A" . ($subHeaderRow + 1) . ":" . chr(ord($columnLetter) - 1) . ($rowNumber - 1);
+ $sheet->getStyle($dataRange)->applyFromArray([
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => 'FF000000'], // Black color
+ ],
+ ],
+ ]);
+
+
+ if($type == 2){
+
+ $rowNumber += 2;
+
+ // Add premium data
+ $premiumData = $data['premium_data']['data'];
+ $premium = ['Premium'];
+ $gst = ['GST'];
+ $total = ['Total'];
+
+ foreach ($premiumData as $proposal => $insurers) {
+ foreach ($insurers as $insurer => $values) {
+ $premium[] = $values['Premium'];
+ $gst[] = $values['GST'];
+ $total[] = $values['Total'];
+ }
+ }
+
+ foreach ([$premium, $gst, $total] as $index => $rowData) {
+ $columnLetter = 'B';
+ foreach ($rowData as $key => $value) {
+ $sheet->setCellValue("{$columnLetter}{$rowNumber}", $value);
+ if ($key === 0) {
+ $sheet->getStyle("{$columnLetter}{$rowNumber}")->applyFromArray(['font' => ['bold' => true,],]);
+ }
+ $columnLetter++;
+ }
+ $rowNumber++;
+ }
+
+ $premiumRange = "B" . ($rowNumber - 3) . ":" . chr(ord($columnLetter) - 1) . ($rowNumber - 1);
+ $sheet->getStyle($premiumRange)->applyFromArray([
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => 'FF000000'], // Black color
+ ],
+ ],
+ ]);
+
+ }
+
+ // Auto-size columns
foreach ($sheet->getColumnIterator() as $column) {
$sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
}
-
- // Set filename based on type
+
+ // Set filename
$string = ($type == 2) ? 'QCR' : 'RFQ';
- $filename = $string . '_' . $rfq_data['client_short_name'] . '_' . $rfq_data['policy_type'] . '_' . date('Ymdhis') . '.xlsx';
-
+ $filename = "{$string}_{$rfq_data['client_short_name']}_{$rfq_data['policy_type']}_" . date('YmdHis') . '.xlsx';
+
// Save to temporary location
$uploadFilePath = WRITEPATH . 'tmp/' . $filename;
$writer = new Xlsx($spreadsheet);
@@ -588,98 +660,154 @@ class LeadsController extends BaseController
return [
'filePath' => $uploadFilePath,
'fileName' => $filename,
- ]; // Return file path and file name
+ ];
}
//this funciton for send mail to insurer and client with either RFQ/QCR
public function sendMailWithAttachement()
{
- helper('excel_util_helper');
- helper('MailHelper');
+ helper('excel_util_helper');
+ helper('MailHelper');
- $params = $this->request->getGet();
- // dd($params);
- $lead_id = $params['lead_id'];
- $file_type = $params['file_type']; //rfq or qcr
- $recipient_type = $params['recipient_type'];//insurer or client
- $recipient_mail = $params['recipient_mail'];// - only primary key of contacts
- $recipient_mail = json_decode($params['recipient_mail'], true);;// - only primary key of contacts
- // $cc = 'velz1990@gmail.com,vitvelz@gmail.com';
- $cc = "";
-
- $result_data = [];
- // dd($recipient_mail);
- if($recipient_type == 'insurer' && (!is_array($recipient_mail) || count($recipient_mail) == 0))
- {
- return $this->respond(['status' => 'failed','code' => 400,'data' => '','messgae' => 'Recipient mail not found ! ' ], 200);
- }
- // dd();
- //gather lead info
- $lead_data = $this->leadsModel
- ->select('leads.*,policy_type.long_name,policy_type.policy_type,user_profiles.email as created_person_email')
- ->join('policy_type','leads.policy_type_id = policy_type.id')
- ->join('user_profiles','leads.created_by = user_profiles.id')
- ->where('leads.id', $lead_id)
- ->first();
- if( $recipient_type == 'client' && ($lead_data['contact_person_email'] == '' || $lead_data['contact_person_email'] == null))
- {
- return $this->respond(['status' => 'failed','code' => 400,'data' => '','messgae' => 'Recipient mail not found ! ' ], 200);
- }
- // dd($lead_data);
- $reply_to = $lead_data['created_person_email'];
- //get file path to attach
- $file_info = $this->constructExcelToSaveTemp($lead_id, ( $file_type == 'rfq' ? 1 : 2) );
- // $file_path = WRITEPATH."uploads/excel/sample/correction.xls";
- // $file_name = $file_type.'.xlsx';
- // !dd($file_info);
- $file_path = $file_info['filePath'];
- $file_name = $file_info['fileName'];
- $attachments = [['fileName' => $file_name,'filePath' => $file_path]];
-
- //get recipient address
- if($recipient_type == 'insurer')
- {
- $recipient_data = $this->levelContactModel
- ->where(['contact_type' => $recipient_type, 'is_active' => 1])
- ->whereIn('id', $recipient_mail)
- ->findAll();
- }
- else
- {
- $recipient_data = [['name' => $lead_data['contact_person_name'],'email' => $lead_data['contact_person_email']] ];
- }
- // !dd($recipient_data);
+ $params = $this->request->getGet();
+ // print_r($params); die;
+ $lead_id = $params['lead_id'];
+ $file_type = $params['file_type']; //rfq or qcr
+ $recipient_type = $params['recipient_type']; //insurer or client or internal or placement
+ $recipient_mail = $params['recipient_mail']; // - only primary key of contacts
+ $recipient_mail = json_decode($params['recipient_mail'], true); // - only primary key of contacts
+ $propsal_and_insurer = isset($params['proposal_insurer']) ? $params['proposal_insurer'] : null;
- $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.
';
+ $result_data = [];
+ // dd($recipient_mail);
+ if ($recipient_type == 'insurer' && (!is_array($recipient_mail) || count($recipient_mail) == 0)) {
+ return $this->respond(['status' => 'failed', 'code' => 400, 'data' => '', 'messgae' => 'Recipient mail not found ! '], 200);
+ }
+ // dd();
+ //gather lead info
+ $lead_data = $this->leadsModel
+ ->select('leads.*,policy_type.long_name,policy_type.policy_type,user_profiles.email as created_person_email')
+ ->join('policy_type', 'leads.policy_type_id = policy_type.id')
+ ->join('user_profiles', 'leads.created_by = user_profiles.id')
+ ->where('leads.id', $lead_id)
+ ->first();
+
+ $cc_mails = [];
+
+ //get CC Mails
+ if($recipient_type == 'internal' || $recipient_type == 'placement'){
+
+ $cc_data = isset($params['cc']) ? $params['cc'] : "";
+ $param_cc_mail = json_decode($cc_data, true);
+ if (isset($param_cc_mail) && is_array($param_cc_mail) && count($param_cc_mail) > 0) {
+ // Fetch user data where ID is in the param_cc_mail array
+ $userData = $this->userModel
+ ->where('is_active', 1)
+ ->whereIn('id', $param_cc_mail)
+ ->findAll();
+
+ // print_r($userData); die;
+
+ // Extract emails from the fetched user data
+ $cc_mails = array_column($userData, 'email');
+
+ // print_r(json_encode($cc_mails)); die;
+ // If no emails were found, return an error response
+ if (empty($cc_mails)) {
+ return $this->respond(['status' => 'failed','code' => 400,'data' => '','message' => 'No valid CC mail addresses found!'], 200);
+ }
+
+ } else {
+ // Handle case where param_cc_mail is not valid
+ return $this->respond(['status' => 'failed','code' => 400,'data' => '','message' => 'CC mail not found!'], 200);
+ }
+ }
- foreach($recipient_data as $recipient)
- {
+ if ($recipient_type == 'client' && ($lead_data['contact_person_email'] == '' || $lead_data['contact_person_email'] == null)) {
+ return $this->respond(['status' => 'failed', 'code' => 400, 'data' => '', 'messgae' => 'Recipient mail not found ! '], 200);
+ }
+
+ // dd($lead_data);
+ $reply_to = $lead_data['created_person_email'];
+
+ //get file path to attach
+ $file_info = $this->constructExcelToSaveTemp($lead_id, ($file_type == 'rfq' ? 1 : 2), $propsal_and_insurer);
+ // $file_path = WRITEPATH."uploads/excel/sample/correction.xls";
+ // $file_name = $file_type.'.xlsx';
+ // !dd($file_info);
+
+ $file_path = $file_info['filePath'];
+ $file_name = $file_info['fileName'];
+ $attachments = [['fileName' => $file_name, 'filePath' => $file_path]];
+
+ //get recipient address
+ if ($recipient_type == 'insurer' || $recipient_type == 'placement') {
+
+ // print_r($recipient_mail); die;
+
+ $recipient_data = $this->levelContactModel
+ ->where(['contact_type' => 'insurer', 'is_active' => 1])
+ ->whereIn('id', $recipient_mail)
+ ->findAll();
+
+ // print_r($recipient_data); die;
+
+ } else if($recipient_type == 'client') {
+ $recipient_data = [['name' => $lead_data['contact_person_name'], 'email' => $lead_data['contact_person_email']]];
+ }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.
';
+
+ if($recipient_data){
+ foreach ($recipient_data as $recipient) {
+
$message = $original_message;
$message = str_replace("{{RECIPIENT_NAME}}", $recipient['name'], $message);
$message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'], $message);
$message = str_replace("{{POLICY_LONG_NAME}}", $lead_data['long_name'], $message);
- $message = str_replace("{{POLICY_START_DATE}}", change_date_format($lead_data['policy_start_date'],'Y-m-d','d-m-Y'), $message);
- $message = str_replace("{{DURATION}}", calculate_days_bw_dates($lead_data['policy_end_date'],$lead_data['policy_start_date'])->days, $message);
-
- // print_rr($message);
-
- $res = MailHelper::send_email(['mail' => $recipient['email'], 'subject' => $subject, 'message' => $message,'attachments' => $attachments,'reply_to' => $reply_to]);
- // !dd($res);
-
- $result_data[] = ['mail' => $recipient['email'],'status' => $res];
- }
- //delete attachment file
- unlink($file_path);
- return $this->respond(['status' => 'success','code' => 200,'data' => $result_data ], 200);
+ $message = str_replace("{{POLICY_START_DATE}}", change_date_format($lead_data['policy_start_date'], 'Y-m-d', 'd-m-Y'), $message);
+ $message = str_replace("{{DURATION}}", calculate_days_bw_dates($lead_data['policy_end_date'] ?? "", $lead_data['policy_start_date'] ?? "")->days, $message) ?? '--';
+ // print_rr($message);calculate_days_bw_dates
+
+ $res = MailHelper::send_email(['mail' => $recipient['email'], 'cc'=> $cc_mails, 'subject' => $subject, 'message' => $message, 'attachments' => $attachments, 'reply_to' => $reply_to]);
+ // !dd($res);
+ $result_data[] = ['mail' => $recipient['email'], 'status' => $res];
+ }
+ }
+
+ if($recipient_type == 'placement'){
+
+ list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2);
+
+ $lead_update_data = [
+ 'proposel_name' => $proposal_key,
+ 'insurer_name' => $insurer_key,
+ 'insurer' => $params['insurer_and_branch'],
+ ] ;
+
+ $data = [
+ 'proposel_data' => json_encode($lead_update_data),
+ 'status' => 'won'
+ ];
+
+ $this->leadsModel->where('id', $lead_id)->set($data)->update();
+ }
+
+ //delete attachment file
+ unlink($file_path);
+ return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result_data], 200);
}
public function getLevelContects()
{
- $data = $this->levelContactModel->getContectForRFQ();
+ $data = $this->levelContactModel->getContactForRFQ();
if($data){
return $this->respond(['status' => true, 'data' => $data], 200);
@@ -689,11 +817,219 @@ class LeadsController extends BaseController
}
+ public function getInsurerBranchContacts($insurer_and_branch_id)
+ {
+ if (strpos($insurer_and_branch_id, '-') === false) {
+ return $this->respond(['status' => false, 'message' => 'Invalid ID format'], 400);
+ }
+
+ // Split the insurer_and_branch_id
+ list($insurerBranchId, $insurerId) = explode('-', $insurer_and_branch_id);
+
+ $data = $this->levelContactModel->getContactForRFQ($insurerId, $insurerBranchId);
+
+ if (!empty($data)) {
+ return $this->respond(['status' => true, 'data' => $data], 200);
+ } else {
+ return $this->respond(['status' => false, 'data' => $data, 'message' => 'No contacts were found for the selected insurer.'], 200);
+ }
+ }
+ function transformProposelData($data, $proposel, $insurer){
+
+ // print_r($data['premium_data']['data']); die;
+
+ $headerData = [];
+
+ // Default headers: S. No and Particulars
+ $defaultHeaders = [
+ [
+ 'parentHeader' => 'Sno',
+ 'subHeaders' => ['-']
+ ],
+ [
+ 'parentHeader' => 'Particulars',
+ 'subHeaders' => ['-']
+ ]
+ ];
+
+ // Add default headers to the result
+ $headerData = array_merge($headerData, $defaultHeaders);
+
+ foreach ($data['table_data']['headers'] as $header) {
+ // Check if the parentHeader matches the target proposal
+ if ($header['parentHeader'] === $proposel) {
+ // Check if subHeaders contain the target insurer key
+ foreach ($header['subHeaders'] as $subHeader) {
+ if ($subHeader === $insurer) {
+ $headerData[] = [
+ 'parentHeader' => $header['parentHeader'],
+ 'subHeaders' => [
+ 'Quote Asked', // Default value
+ $subHeader // Matched insurer key
+ ]
+ ];
+ break;
+ }
+ }
+ }
+ }
+
+ $columnData = [];
+
+ foreach ($data['table_data']['data'] as $entry) {
+
+ $sno = $entry['SNO'];
+ $items = $entry['items'];
+ $dataEntry = $entry['data'];
+
+ $result = [
+ "SNO" => $sno,
+ "items" => $items,
+ "data" => []
+ ];
+
+ foreach ($dataEntry as $item) {
+
+ // Include Sno and Particulars by default
+ if (in_array($item['parentth'], ['Sno', 'Particulars'])) {
+ $result['data'][] = [
+ "parentth" => $item['parentth'],
+ "subth" => $item['subth'],
+ "value" => $item['value'],
+ "input_value" => $item['input_value']
+ ];
+ }
+
+ // Include Proposal with Quote Asked by default
+ if ($item['parentth'] === $proposel && $item['subth'] === "Quote Asked") {
+ $result['data'][] = [
+ "parentth" => $item['parentth'],
+ "subth" => $item['subth'],
+ "value" => $item['value'],
+ "input_value" => $item['input_value']
+ ];
+ }
+
+ // Example of including matching specific proposals and insurers
+ if ($item['parentth'] === $proposel && $item['subth'] === $insurer) {
+ $result['data'][] = [
+ "parentth" => $item['parentth'],
+ "subth" => $item['subth'],
+ "value" => $item['value'],
+ "input_value" => $item['input_value']
+ ];
+ }
+ }
+
+ // Add to the final result
+ $columnData[] = $result;
+ }
+
+ $premiumData = [];
+
+ foreach ($data['premium_data']['data'] as $key => $value) {
+ if ($key === $proposel) {
+ $premiumData[$key]['Quote Asked'] = $value['Quote Asked'];
+ $premiumData[$key][$insurer] = $value[$insurer];
+ }
+ }
+
+ $data['table_data']['headers'] = $headerData;
+ $data['table_data']['data'] = $columnData;
+ $data['premium_data']['data'] = $premiumData;
+
+ return $data;
+
+ }
+
+ function convertJsonForQCR($json, $type)
+ {
+ if ($json) {
+ // Deep copy of JSON
+ $first_json = json_decode(json_encode($json), true);
+
+ // Column-wise Check: Remove headers and relevant data if qcr == 0
+ foreach ($json['proposal_data']['over_all_column_data'] as $proposalKey => $proposalData) {
+ if ($proposalData['stc'] == 0 || $proposalData['stc'] === false) {
+ // Remove matching parentHeader in headers
+ foreach ($first_json['table_data']['headers'] as $index => $header) {
+ if ($header['parentHeader'] === $proposalKey) {
+ unset($first_json['table_data']['headers'][$index]);
+ }
+ }
+
+ // Remove data entries with matching parentth
+ foreach ($first_json['table_data']['data'] as &$item) {
+ $item['data'] = array_values(array_filter($item['data'], function ($entry) use ($proposalKey) {
+ return $entry['parentth'] !== $proposalKey;
+ }));
+ }
+
+ // Remove proposalKey from over_all_column_data
+ unset($first_json['proposal_data']['over_all_column_data'][$proposalKey]);
+
+ if($type == 'stc'){
+ // Remove proposalKey from premium_data
+ unset($first_json['premium_data']['data'][$proposalKey]);
+ }
+ }
+
+ // Insurer Check: Remove subHeaders and relevant data for insurers with qcr == 0
+ foreach ($proposalData['insurers'] as $insurerIndex => $insurer) {
+ if ($insurer['stc'] === 0 || $insurer['stc'] === false) {
+ foreach ($first_json['table_data']['headers'] as &$header) {
+ if (isset($header['subHeaders'])) {
+ $header['subHeaders'] = array_values(array_filter($header['subHeaders'], function ($sub) use ($insurer) {
+ return $sub !== $insurer['display_name'];
+ }));
+ }
+ }
+
+
+ foreach ($first_json['table_data']['data'] as &$item) {
+ $item['data'] = array_values(array_filter($item['data'], function ($entry) use ($insurer) {
+ return $entry['subth'] !== $insurer['display_name'];
+ }));
+ }
+
+ // Remove insurer from proposal's insurers array
+ unset($first_json['proposal_data']['over_all_column_data'][$proposalKey]['insurers'][$insurerIndex]);
+
+ if($type == 'stc'){
+ unset($first_json['premium_data']['data'][$proposalKey][$insurer['display_name']]);
+ }
+ }
+ }
+ }
+
+ // Row-wise Check: Remove rows if qcr == 0 for actions
+ foreach ($first_json['table_data']['data'] as $rowKey => $rowData) {
+ foreach ($rowData['data'] as $data) {
+ if ($data['parentth'] === "Action" && isset($data['input_value']['stc']) && $data['input_value']['stc'] == 0) {
+ unset($first_json['table_data']['data'][$rowKey]);
+ break;
+ }
+ }
+ }
+
+ // Reindex arrays to maintain proper structure
+ $first_json['table_data']['headers'] = array_values($first_json['table_data']['headers']);
+ $first_json['table_data']['data'] = array_values($first_json['table_data']['data']);
+ $first_json['proposal_data']['over_all_column_data'] = array_map(function ($proposal) {
+ $proposal['insurers'] = array_values($proposal['insurers']);
+ return $proposal;
+ }, $first_json['proposal_data']['over_all_column_data']);
+
+ return $first_json;
+ }
+
+ return null;
+ }
+
//----- Featch Lead data and insert Client -------------------------------------------------------------------------------------------
-
public function featchLeadDataAndInsertClient($lead_id)
{
$data = $this->leadsModel->where('leads.id', $lead_id)->where('leads.is_active', 1)->first();
@@ -705,7 +1041,9 @@ class LeadsController extends BaseController
$result = $this->createClientWithLeadData($data);
if ($result) {
- return $this->respond(['status' => true, 'message' => 'New Client created successfully', 'client_id' => $result, 'data' => $data], 200);
+
+ $policy_data = $this->clientPolicyModel->where('client_id', $result)->where('is_active', 1)->first();
+ return $this->respond(['status' => true, 'message' => 'New Client created successfully', 'client_id' => $result, 'data' => $data, 'client_policy_id' => $policy_data['id']], 200);
}
return $this->respond(['status' => false, 'message' => 'Failed to create client', 'data' => $data], 200);
@@ -751,7 +1089,6 @@ class LeadsController extends BaseController
return $branch_id;
}
-
private function prepareClientBranchData($data, $client_id)
{
$default_unit = trim(($data['client_short_name'] ?? '') . '-' . ($data['branch_code'] ?? ''), '-');
@@ -783,20 +1120,26 @@ class LeadsController extends BaseController
}
private function prepareClientPolicyData($data, $client_id, $branch_id)
- {
+ {
+ $proposel_data = json_decode($data['proposel_data'], true);
+ // print_r($proposel_data); die;
+ list($insurer_branch_id, $insurer_id) = explode('-', $proposel_data['insurer'], 2);
+
$client_policy_data = [
'client_id' => $client_id,
'client_branch_id' => $branch_id,
'policy_type_id' => $data['policy_type_id'],
- 'insurer_id' => $data['insurer_id'],
- 'insurer_branch_id' => $data['insurer_branch_id'],
+ 'insurer_id' => $insurer_id,
+ 'insurer_branch_id' => $insurer_branch_id,
'tpa_id' => $data['tpa_id'],
'tpa_branch_id' => $data['tpa_branch_id'],
'policy_start_date' => $data['policy_start_date'],
'policy_end_date' => $data['policy_end_date'],
'policy_status' => 1,
];
-
+
+ $terms = $this->preparePolicyTermsFromRFQ($data);
+
$policy_type_id = $data['policy_type_id'];
if (in_array($policy_type_id, [1, 2, 6, 7])) {
$client_policy_data['is_addon'] = 1; // Base Policy
@@ -809,15 +1152,146 @@ class LeadsController extends BaseController
$data['is_addon'] = 1;
// }
}
+
+ $client_policy_data['policy_terms'] = $this->preparePolicyTermsFromRFQ($data);
+
+ // print_r($client_policy_data); die;
return $client_policy_data;
}
private function preparePolicyTermsFromRFQ($data)
- {
+ {
+ $proposel_data = json_decode($data['proposel_data'], true);
+ $QCRData = $this->RFQModel->where('is_active', 1)->where('type', 2)->where('lead_id', $data['id'])->first();
+
+ $JSON = json_decode($QCRData['json'], true);
+
+ $converted_json = $this->transformProposelData($JSON, $proposel_data['proposel_name'], $proposel_data['insurer_name']);
+
+ return $this->convertQCRJsonToPolicyTerms($converted_json, $data['policy_type_id'], $proposel_data['proposel_name'], $proposel_data['insurer_name']);
}
+ private function convertQCRJsonToPolicyTerms($data, $policy_type, $proposel_name, $insurer_name)
+ {
+ $GMC_Keys = [
+ "sum_insured", "family_floater", "family_floaters", "age_ratio", "waiverofpreexistingdiseases",
+ "maternitycoverage", "twindelivery", "preandpostnatal", "babyday1cover", "9monthwaitingperiodwaived",
+ "coverfromthedateofjoining", "waiverof1,2,3&4thyearexclusions", "waiverof30dayswaitingperiod",
+ "prehospitalizationcover", "congenitaldiseasesinternal", "copayzonewisecopay",
+ "bioabsorbablestenttoriclensmultifocallens", "roomrentlimit", "proportionatedeductionclause",
+ "ailmentcapping", "ambulancecharges", "airambulance", "familytransportationbenefit",
+ "reasonableandcustomarycharges", "ayudhtreatmentcover", "congenitaldiseasesexternal",
+ "optionalparentalcopay", "posthospitalizationcover", "corporatebuffer", "sublimitofcorporatebuffer",
+ "ayushTreatmentCoverData", "armdcovered", "suminsuredenhancement", "automaticsuminsuredreinstatement",
+ "additionalsicknessbenefit", "lasiksurgery", "midterminclusion", "capd", "organdonorexpenses",
+ "moderntreatmentsasperirdai", "Wellness", "days_of_discharge", "days_from_dod",
+ "special_condition_label", "special_condition_input", "multiple_sum_insured",
+ "cataract", "cataractData"
+ ];
+
+ $GPA_Keys = [
+ "sumInsured2", "totalSumInsured", "age_ratio", "accidentalDeathBenefit", "permanentTotalDisablement",
+ "permanentPartialDisablement", "temporaryTotalDisablementBenefit", "accidentalHospitalizationExpenses",
+ "childrenEducationWelfareFund", "compassionateVisitExpenses", "compassionateVisitExpensesData",
+ "brokenBoneExpenses", "brokenBoneExpensesData", "ambulanceCharges", "ambulanceChargesData",
+ "burnExpenses", "burnExpensesData", "carriageOfDeadBody", "carriageOfDeadBodyData",
+ "animalSnakeInsectBite", "terrorism", "worldwideCover", "gpa_special_condition_label",
+ "gpa_special_condition_input", "multiple_sum_insured"
+ ];
+
+ // Select keys based on policy type
+ $termsKey = $policy_type == 1 ? $GPA_Keys : $GMC_Keys;
+
+ // Initialize terms_array with default empty values
+ $terms_array = array_fill_keys($termsKey, "");
+ $specialKeys = ['special_condition_label', 'special_condition_input', 'gpa_special_condition_label', 'gpa_special_condition_input', 'multiple_sum_insured'];
+ foreach ($specialKeys as $key) {
+ $terms_array[$key] = [];
+ }
+ // Initialize age_ratio based on policy type
+ $terms_array['age_ratio'] = $policy_type == 2 ? [
+ "self" => ["min" => "18", "max" => "60"],
+ "spouse" => ["min" => 0, "max" => 0],
+ "child" => ["min" => 0, "max" => "25"],
+ "elders" => ["min" => 0, "max" => 0],
+ ] : ["self" => ["min" => "18", "max" => "60"]];
+
+ foreach ($data['table_data']['data'] as $dataRow) {
-}
+ $item = $dataRow['items'] ?? '';
+
+ foreach ($dataRow['data'] as $cellData) {
+ $parentth = $cellData['parentth'] ?? '';
+ $subth = $cellData['subth'] ?? '';
+ $input_value = $cellData['input_value'] ?? '';
+ $value = $cellData['value'] ?? '';
+
+ // Skip unwanted keys
+ if (in_array($parentth, ['Sno', 'Item Key', 'Particulars', 'Action']) ||
+ in_array($subth, ['Quote Asked'])) {
+ continue;
+ }
+
+ // Handle special conditions
+ if (str_starts_with($item, "special_condition") && $parentth === $proposel_name && $subth === $insurer_name) {
+
+ $parts = explode("-", $input_value);
+ $question = $parts[0] ?? '';
+ $answer = $parts[1] ?? '';
+ $labelKey = $policy_type == 1 ? 'gpa_special_condition_label' : 'special_condition_label';
+ $inputKey = $policy_type == 1 ? 'gpa_special_condition_input' : 'special_condition_input';
+
+ $terms_array[$labelKey][] = $question;
+ $terms_array[$inputKey][] = $answer;
+ continue;
+ }
+
+ // Handle sum insured
+ if (in_array($item, ['sum_insured', 'sumInsured2'])) {
+ $si_amt = explode(",", $value);
+ $terms_array[$item] = $si_amt[0] ?? "";
+ $terms_array['multiple_sum_insured'] = array_slice($si_amt, 1);
+ continue;
+ }
+
+ // Handle family floaters
+ if ($item === 'family_composition') {
+ $terms_array['family_floaters'] = isJsonString($input_value) ? json_decode($input_value, true) : $input_value;
+ continue;
+ }
+
+ // Decode JSON if valid
+ $terms_array[$item] = isJsonString($input_value) ?
+ (json_decode($input_value, true)['key'] ?? '') :
+ $input_value;
+ }
+ }
+
+ return json_encode($terms_array);
+ }
+
+ public function featchClientPolicyFromLead($client_id, $branch_id, $lead_id)
+ {
+ $data = $this->leadsModel->where('leads.id', $lead_id)->where('leads.is_active', 1)->first();
+
+ if (!$data) {
+ return $this->respond(['status' => false, 'message' => 'Failed to create policy', 'data' => null], 200);
+ }
+
+ $result = $this->createClientPolicyWithLeadData($data, $client_id, $branch_id);
+ // print_r($result); die;
+
+ if ($result) {
+
+ $policy_data = $this->clientPolicyModel->where('id', $result)->where('is_active', 1)->first();
+ return $this->respond(['status' => true, 'message' => 'New Policy created successfully', 'client_policy_id' => $result, 'data' => $data, 'client_id' => $policy_data['client_id']], 200);
+ }
+
+ return $this->respond(['status' => false, 'message' => 'Failed to create policy', 'data' => $data], 200);
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php
index e3123418..1599bac2 100755
--- a/app/Controllers/MasterController.php
+++ b/app/Controllers/MasterController.php
@@ -173,7 +173,7 @@ class MasterController extends AdminController
$editData['policy_type'] = $this->policyTypeModel->whereIn('id', [1,2,6,7])->findAll();
- $editData['events'] = ['inception' => 'Inception', 'addition' => 'Addition', 'dependent_addition' => 'Dependent Addition', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement', 'all' => 'All'];
+ $editData['events'] = ['inception' => 'Inception', 'missed_inception' => 'Missed Inception', 'addition' => 'Addition', 'dependent_addition' => 'Dependent Addition', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement', 'all' => 'All'];
$editData['action'] = ['import' => 'Import', 'export' => 'Export'];
$editData['db_column_name'] = [
diff --git a/app/Helpers/MailHelper.php b/app/Helpers/MailHelper.php
index a65a5b31..0bc21c46 100755
--- a/app/Helpers/MailHelper.php
+++ b/app/Helpers/MailHelper.php
@@ -106,7 +106,9 @@ class MailHelper
//check CC mail
if (isset($params['cc'])) {
$cc = $params['cc'];
- $cc = explode(',', $cc);
+ if(!is_array($cc)){
+ $cc = explode(',', $cc);
+ }
}else{
$cc = [];
}
diff --git a/app/Helpers/sendMailNotification.php b/app/Helpers/sendMailNotification.php
index 31114293..fbc374a8 100755
--- a/app/Helpers/sendMailNotification.php
+++ b/app/Helpers/sendMailNotification.php
@@ -151,6 +151,11 @@ class sendMailNotification
$mail_content = $notification['mail_content'];
$mail = $get_emp_email_and_other_details['email_corporate'];
$subject = $notification['subject'];
+
+ $cleanedText = mb_convert_encoding($subject, 'UTF-8', 'UTF-8'); // Normalize encoding
+ $cleanedText = preg_replace('/[^\x20-\x7E]/', '', $cleanedText);
+
+ $subject = $cleanedText;
$link = generate_download_link($rand_string);
@@ -258,6 +263,7 @@ class sendMailNotification
$si = '';
$premium = '';
$gst_forself = '';
+
if(checkFamilyFloaters($policy_premium_data, $client_policy_data, $inner_item)){
$si = '₹ ' .format_indian_number($inner_item['basic_cover_si']);
$premium = '₹ ' .format_indian_number(round($inner_item['premium']));
diff --git a/app/Helpers/utility_helper.php b/app/Helpers/utility_helper.php
index f42e3c32..fe345717 100755
--- a/app/Helpers/utility_helper.php
+++ b/app/Helpers/utility_helper.php
@@ -474,4 +474,30 @@ if (!function_exists('print_rr')) {
print_r($data);
echo "";
}
-}
\ No newline at end of file
+}
+
+if (!function_exists('get_server_details')) {
+ /**
+ * Get the hostname and server name.
+ *
+ * @return array
+ */
+ function get_server_details(): array
+ {
+ $hostname = gethostname(); // Get the hostname of the server
+ $serverName = $_SERVER['SERVER_NAME'] ?? 'Unknown'; // Get the server name
+
+ return [
+ 'hostname' => $hostname,
+ 'server_name' => $serverName,
+ ];
+ }
+}
+if (!function_exists('isJsonString')) {
+
+ function isJsonString($input)
+ {
+ json_decode($input); // Decode the string
+ return (json_last_error() === JSON_ERROR_NONE); // Check if the last JSON error is "no error"
+ }
+}
diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php
index a9fd7218..75f8cd53 100755
--- a/app/Models/EmployeePolicyModel.php
+++ b/app/Models/EmployeePolicyModel.php
@@ -75,11 +75,11 @@ class EmployeePolicyModel extends Model
return $data;
}
-// ----------------------------------------------------------------------------------------------------------
- public function getEmployeePolicy($client_id = 0, $policy_id=0, $status=[], $branch_id=0, $emp_code="", $emp_name="")
- {
+ // ----------------------------------------------------------------------------------------------------------
+ public function getEmployeePolicy($client_id = 0, $policy_id = 0, $status = [], $branch_id = 0, $emp_code = "", $emp_name = "")
+ {
// dd($status);
-
+
$result = $this->select([
'employee_polices.*',
'policy_type.policy_type as policy_name',
@@ -91,7 +91,7 @@ class EmployeePolicyModel extends Model
'tpab.branch_code as tpa_branch_code',
'cm.client_name',
'cm.short_name as client_short_name',
- 'emp.id as employee_primary_id',
+ // 'emp.id as employee_primary_id',
'emp.relationship',
'emp.relationship_code',
'emp.change_event',
@@ -112,27 +112,27 @@ class EmployeePolicyModel extends Model
'client_branch.branch_code as client_branch_code',
'cp.policy_no',
])
- ->join('employees emp', 'employee_polices.employee_id = emp.id')
- ->join('client_policy cp', 'employee_polices.client_policy_id = cp.id') //cp - client policy
- ->join('policies pm', 'cp.policy_id = pm.id', 'left') //pm - policy master
- ->join('policy_type', 'policy_type.id = cp.policy_type_id')
- ->join('insurers im', 'cp.insurer_id = im.id') //im - insurer master
- ->join('insurer_branch ib', 'cp.insurer_branch_id = ib.id') //ib - insurer branch
- ->join('tpa tpam', 'cp.tpa_id = tpam.id', 'left') //tpam - tpa master
- ->join('tpa_branch tpab', 'cp.tpa_branch_id = tpab.id', 'left') //tpab - tpa branch
- ->join('clients cm', 'cp.client_id = cm.id') //cm - client master
- ->join('client_branch', 'emp.client_branch_id = client_branch.id') //cm - client master
- ->orderBy('emp.emp_code', 'ASC')
- ->orderBy('employee_polices.employee_id', 'ASC');
-
+ ->join('employees emp', 'employee_polices.employee_id = emp.id')
+ ->join('client_policy cp', 'employee_polices.client_policy_id = cp.id') //cp - client policy
+ ->join('policies pm', 'cp.policy_id = pm.id', 'left') //pm - policy master
+ ->join('policy_type', 'policy_type.id = cp.policy_type_id')
+ ->join('insurers im', 'cp.insurer_id = im.id') //im - insurer master
+ ->join('insurer_branch ib', 'cp.insurer_branch_id = ib.id') //ib - insurer branch
+ ->join('tpa tpam', 'cp.tpa_id = tpam.id', 'left') //tpam - tpa master
+ ->join('tpa_branch tpab', 'cp.tpa_branch_id = tpab.id', 'left') //tpab - tpa branch
+ ->join('clients cm', 'cp.client_id = cm.id') //cm - client master
+ ->join('client_branch', 'emp.client_branch_id = client_branch.id') //cm - client master
+ ->orderBy('emp.emp_code', 'ASC')
+ ->orderBy('employee_polices.employee_id', 'ASC');
+
// Conditionally add where clauses
- if ($client_id !=0 && !empty($client_id)) {
+ if ($client_id != 0 && !empty($client_id)) {
$result->where('emp.client_id', $client_id);
}
- if ($branch_id !=0 && !empty($branch_id)) {
+ if ($branch_id != 0 && !empty($branch_id)) {
$result->where('emp.client_branch_id', $branch_id);
}
- if ($policy_id !=0 && !empty($policy_id)) {
+ if ($policy_id != 0 && !empty($policy_id)) {
$result->where('employee_polices.client_policy_id', $policy_id);
}
@@ -141,22 +141,20 @@ class EmployeePolicyModel extends Model
$result->where('employee_polices.status !=', 'expired');
if (in_array("active", $status)) {
-
+
$result->where('employee_polices.tpa_id IS NOT NULL');
$result->where('employee_polices.uhid IS NOT NULL');
$result->whereIn('employee_polices.status', $status);
-
} elseif (in_array("pending", $status)) {
-
+
$result->where('employee_polices.tpa_id IS NULL');
$result->where('employee_polices.uhid IS NULL');
$result->whereIn('employee_polices.status', array_merge($status, ['active']));
-
} else {
-
+
$result->whereIn('employee_polices.status', $status);
}
-
+
// if($status == 'active'){
// $result->where('employee_polices.tpa_id IS NOT NULL');
// $result->where('employee_polices.uhid IS NOT NULL');
@@ -174,13 +172,13 @@ class EmployeePolicyModel extends Model
if (!empty($emp_name)) {
$result->like('emp.name', $emp_name);
}
-
+
// Always check these conditions
$result->where('employee_polices.is_active', 1)
- ->where('emp.is_active', 1);
-
+ ->where('emp.is_active', 1);
+
return $result->findAll();
- }
+ }
public function getEmployeePolicyForEcard($policy_id = 0)
{
@@ -575,6 +573,12 @@ class EmployeePolicyModel extends Model
}
}
+ $status_condition = "{$insurer_or_tpa}" === 'tpa'
+ ? "employee_polices.status = 'inactive' AND employees.emp_status = 'inactive'"
+ : "employee_polices.status = 'active' AND employees.emp_status = 'active'";
+
+ $endorsement_condition = "{$insurer_or_tpa}" === 'tpa' ? "AND (a.endorsement_id IS NOT NULL OR a.endorsement_id != '')" : "AND (a.endorsement_id IS NULL OR a.endorsement_id = '')";
+
$query = $this->db->query("
SELECT DISTINCT
a.id as endorsement_primarykey,
@@ -659,24 +663,23 @@ class EmployeePolicyModel extends Model
WHERE employee_polices.client_policy_id = {$client_policy_id}
AND employees.client_branch_id = {$client_branch_id}
- AND (a.endorsement_id IS NULL OR a.endorsement_id = '')
+ $endorsement_condition
AND a.actions = 'd'
AND a.status != 'truncated'
AND employee_polices.is_active = 1
- AND employee_polices.status = 'active'
AND employees.is_active = 1
- AND employees.emp_status = 'active'
+ AND $status_condition
group by group_key
");
$result = $query->getResult();
+ // dd($this->db->getLastQuery(), $result);
return $result;
}
-
public function fetchEmpEndorsementData($fetch_data)
{
// dd($fetch_data);
diff --git a/app/Models/LeadsModel.php b/app/Models/LeadsModel.php
index 705f1587..594a4c65 100644
--- a/app/Models/LeadsModel.php
+++ b/app/Models/LeadsModel.php
@@ -43,6 +43,7 @@ class LeadsModel extends Model
'proposed_insurer_branch_id',
'proposed_tpa_id',
'proposed_tpa_branch_id',
+ 'proposel_data',
'status',
'notes',
'created_at',
@@ -119,12 +120,25 @@ class LeadsModel extends Model
}
- public function getLeadForInsertClientList()
+ public function getLeadForInsertClientList($type = null, $client_id = null)
{
- return $this
+ $query = $this->db->table('leads')
+ ->select('leads.*, user_profiles.first_name as user_name')
+ ->join('user_profiles', 'leads.created_by = user_profiles.id')
->where('leads.is_active', 1)
->where('leads.status', 'won')
- ->findAll();
+ ->where("leads.proposel_data IS NOT NULL AND leads.proposel_data <> ''");
+
+ if ($type) {
+ $query->where('leads.lead_type', $type);
+ }
+ if ($client_id) {
+ $query->where('leads.client_id', $client_id);
+ }
+
+ $result = $query->get()->getResultArray();
+ return $result;
+
}
diff --git a/app/Models/LevelContactModel.php b/app/Models/LevelContactModel.php
index 234db3aa..cf5d596d 100755
--- a/app/Models/LevelContactModel.php
+++ b/app/Models/LevelContactModel.php
@@ -26,27 +26,35 @@ class LevelContactModel extends Model
];
- public function getContectForRFQ(){
-
- $result = $this
-
- ->select('
- level_contacts.id,
- insurers.short_name as insurer_name,
- insurer_branch.branch_code,
- level_contacts.name as contect_person_name,
- level_contacts.email as contect_person_email,
- ')
- ->join('insurer_branch', 'level_contacts.ref_id = insurer_branch.id')
- ->join('insurers', 'insurer_branch.insurer_id = insurers.id')
- ->where('level_contacts.contact_type', 'insurer')
- ->where('level_contacts.is_active', 1)
- ->where('insurer_branch.is_active', 1)
- ->where('insurers.is_active', 1)
- ->findAll();
-
+ public function getContactForRFQ($insurer_id = null, $insurer_branch_id = null)
+ {
+ $query =
+ $this->db->table('level_contacts')
+ ->select('
+ level_contacts.id,
+ insurers.short_name as insurer_name,
+ insurer_branch.branch_code,
+ level_contacts.name as contact_person_name,
+ level_contacts.email as contact_person_email
+ ')
+ ->join('insurer_branch', 'level_contacts.ref_id = insurer_branch.id')
+ ->join('insurers', 'insurer_branch.insurer_id = insurers.id')
+ ->where('level_contacts.contact_type', 'insurer')
+ ->where('level_contacts.is_active', 1)
+ ->where('insurer_branch.is_active', 1)
+ ->where('insurers.is_active', 1);
+
+ if ($insurer_branch_id) {
+ $query->where('insurer_branch.id', $insurer_branch_id);
+ }
+ if ($insurer_id) {
+ $query->where('insurer_branch.insurer_id', $insurer_id);
+ }
+
+ $result = $query->get()->getResultArray();
return $result;
-
}
+
+
}
diff --git a/app/Models/RFQModel.php b/app/Models/RFQModel.php
index f74a1313..d616e517 100644
--- a/app/Models/RFQModel.php
+++ b/app/Models/RFQModel.php
@@ -57,4 +57,29 @@ class RFQModel extends Model
return $data;
}
+ public function getRFQTableDataWithLeadIDAndType($lead_id, $type){
+
+ return $this->select('
+ leads.client_name,
+ leads.client_short_name,
+ insurers.name as insurer_name,
+ insurer_branch.branch_name as insurer_branch_name,
+ tpa.name as tpa_name,
+ tpa_branch.branch_name as tpa_branch_name,
+ policy_type.policy_type,
+ rfq.json
+ ')
+ ->join('leads', 'rfq.lead_id = leads.id')
+ ->join('policy_type', 'leads.policy_type_id = policy_type.id')
+ ->join('insurers', 'leads.insurer_id = insurers.id', 'left')
+ ->join('insurer_branch', 'leads.insurer_branch_id = insurer_branch.id', 'left')
+ ->join('tpa', 'leads.tpa_id = tpa.id', 'left')
+ ->join('tpa_branch', 'leads.tpa_branch_id = tpa_branch.id', 'left')
+ ->where('rfq.lead_id', $lead_id)
+ ->where('rfq.type', $type)
+ ->where('rfq.is_active', 1)
+ ->first();
+
+ }
+
}
diff --git a/app/Models/TPABranchModel.php b/app/Models/TPABranchModel.php
index 9e528194..f811aa04 100755
--- a/app/Models/TPABranchModel.php
+++ b/app/Models/TPABranchModel.php
@@ -28,6 +28,8 @@ class TPABranchModel extends Model
{
$query = $this->select('tpa_branch.*, T.short_name as tpa_short_name, T.name as tpa_name')
->join('tpa T', 'tpa_branch.tpa_id = T.id', 'left')
+ ->where('T.is_active', 1)
+ ->where('tpa_branch.is_active', 1)
->find();
return $query;
}
diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php
index 8eb0e6f7..49b84400 100755
--- a/app/Models/UserModel.php
+++ b/app/Models/UserModel.php
@@ -124,5 +124,15 @@ class UserModel extends Model
}
}
+ public function getUserListForRFQ(){
+
+ return $this->db->table('user_profiles')
+ ->select('user_profiles.*')
+ ->select('roles.role as user_role')
+ ->join('roles', 'roles.id = user_profiles.role')
+ ->get()
+ ->getResultArray();
+ }
+
}
?>
\ No newline at end of file
diff --git a/app/Views/batch_list.php b/app/Views/batch_list.php
index a2c371b2..b5747912 100755
--- a/app/Views/batch_list.php
+++ b/app/Views/batch_list.php
@@ -71,36 +71,73 @@