From 90ca29b748e41b1122a7874d664b9dfcad666fae Mon Sep 17 00:00:00 2001 From: Venkatesh Date: Fri, 12 Jun 2026 10:46:06 +0530 Subject: [PATCH] FEAT_INTRODUCE_SAVE_BUTTON_FOR_PLACEMENTDATA --- app/Config/Routes.php | 1 + app/Controllers/LeadsController.php | 99 ++++++++++++++++++++++++ app/Models/BdsPlacementModel.php | 17 ++++- app/Views/view_rfq.php | 113 +++++++++++++++++++++++++++- 4 files changed, 227 insertions(+), 3 deletions(-) diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 656b22a9..a41e48b6 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -447,6 +447,7 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->get('downloadFullMemberDataExcelErrorFile/(:any)', 'LeadsController::downloadFullMemberDataExcelErrorFile/$1'); $routes->get('getMemberDataExcelFileErrors', 'LeadsController::getMemberDataExcelFileErrors'); $routes->post('savePlacementDataAndValidateMemberDataFile', 'LeadsController::savePlacementDataAndValidateMemberDataFile'); + $routes->post('savePlacementDataWithoutMail', 'LeadsController::savePlacementDataWithoutMail'); $routes->get('checkMemberDataFileValidationStatus', 'LeadsController::checkMemberDataFileValidationStatus'); $routes->match(['get', 'post', 'delete'], 'nhanceBranchMaster', 'MasterController::nhanceBranchMaster'); $routes->match(['get', 'post', 'delete'], 'vehicleTypeMaster', 'MasterController::vehicleTypeMaster'); diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 6fa7e78e..ecfd8047 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -8326,6 +8326,105 @@ class LeadsController extends BaseController } } + public function savePlacementDataWithoutMail() + { + try { + $params = $this->request->getPost(); + + if (empty($params['lead_id'])) { + return $this->respond([ + 'status' => false, + 'code' => 400, + 'message' => 'Opportunity ID is required', + ], 400); + } + + $lead_id = $params['lead_id']; + $lead_data = $this->leadsModel->where('id', $lead_id)->first(); + + if (! $lead_data) { + return $this->respond([ + 'status' => false, + 'code' => 404, + 'message' => 'Lead not found', + ], 404); + } + + $data = [ + 'placement_date' => ! empty($params['placement_date']) ? change_date_format($params['placement_date']) : null, + 'payment_date' => ! empty($params['payment_date']) ? change_date_format($params['payment_date']) : null, + 'utr_no' => $params['utr_no'] ?? null, + 'is_cd' => $params['is_cd'] ?? null, + 'premium_amount' => $params['premium_amount'] ?? null, + 'total_amount' => $params['total_amount'] ?? null, + 'cd_amount' => $params['cd_amount'] ?? null, + 'no_of_installment' => $params['no_of_installment'] ?? null, + 'is_installment' => $params['is_installment'] ?? null, + 'agreed_percentage' => $params['agreed_percentage'] ?? null, + ]; + + if (! empty($params['acm_pk'])) { + $data['acm_id'] = $params['acm_pk']; + } + + if (! empty($params['policy_start_date'])) { + $converted_start = change_date_format($params['policy_start_date']); + if ($converted_start !== $lead_data['policy_start_date']) { + $data['policy_start_date'] = $converted_start; + } + } + + if (! empty($params['policy_end_date'])) { + $converted_end = change_date_format($params['policy_end_date']); + if ($converted_end !== $lead_data['policy_end_date']) { + $data['policy_end_date'] = $converted_end; + } + } + + if (! empty($params['tpa_id']) && strpos($params['tpa_id'], '-') !== false) { + list($tpaBranchId, $tpaId) = explode('-', $params['tpa_id']); + $data['tpa_branch_id'] = $tpaBranchId; + $data['tpa_id'] = $tpaId; + } + + $this->leadsModel->update($lead_id, $data); + + if (! empty($params['installments'])) { + $installments = json_decode($params['installments'], true); + + if (is_array($installments) && ! empty($installments)) { + foreach ($installments as $installment) { + $installment['payment_date'] = ! empty($installment['payment_date']) && strtotime($installment['payment_date']) + ? date('Y-m-d', strtotime($installment['payment_date'])) + : null; + + $installment['lead_id'] = $lead_id; + + if (! empty($installment['id'])) { + $this->leadInstallmentPaymentDetails->update($installment['id'], $installment); + } else { + $this->leadInstallmentPaymentDetails->insert($installment); + } + } + } + } + + return $this->respond([ + 'status' => true, + 'code' => 200, + 'message' => 'Placement data saved successfully', + 'lead_id' => $lead_id, + ], 200); + } catch (\Exception $e) { + return $this->respond([ + 'status' => false, + 'code' => 500, + 'message' => 'Error while saving placement data', + 'error' => $e->getMessage(), + ], 500); + } + } + public function checkMemberDataFileValidationStatus() { $lead_id = $this->request->getVar('lead_id'); diff --git a/app/Models/BdsPlacementModel.php b/app/Models/BdsPlacementModel.php index e27ecd9c..c0267eb8 100644 --- a/app/Models/BdsPlacementModel.php +++ b/app/Models/BdsPlacementModel.php @@ -115,6 +115,21 @@ class BdsPlacementModel extends Model return $data; } + private function addBusinessDays(int $days, ?string $fromDate = null): string + { + $date = new \DateTime($fromDate ?? 'today'); + $added = 0; + + while ($added < $days) { + $date->modify('+1 day'); + if ((int) $date->format('N') < 6) { + $added++; + } + } + + return $date->format('Y-m-d'); + } + public function getLeadInstallmentDetails() { $heads = $this->db->table('user_profiles') @@ -139,7 +154,7 @@ class BdsPlacementModel extends Model ->join("client_policy cp", "cp.id = leads.source_policy_id", "left") ->where("lipd.is_active", 1) ->where("lipd.utr_no IS NULL") - ->where("lipd.payment_date", date('Y-m-d', strtotime('+15 days'))); + ->where("lipd.payment_date", $this->addBusinessDays(5)); $data = $builder->get()->getResultArray(); diff --git a/app/Views/view_rfq.php b/app/Views/view_rfq.php index 2a88995d..f768f740 100644 --- a/app/Views/view_rfq.php +++ b/app/Views/view_rfq.php @@ -962,8 +962,14 @@
+ +

+
+ +
+
@@ -1018,6 +1024,7 @@
+
@@ -1026,8 +1033,6 @@
-
-

Attachments Files


@@ -1037,6 +1042,7 @@ +
@@ -7560,6 +7566,107 @@ function appendMultiFileData(data) { } } + function constructPlacementDataPayload() { + var lead_id = $('#lead_id').val(); + let placement_date = $('#placement_date').val(); + let policy_end_date = $('#policy_end_date').val(); + let policy_start_date = $('#policy_start_date').val(); + let payment_date = $('#payment_date').val(); + let is_cd = $("#is_cd_switch").is(":checked") ? 1 : 0; + let utr_no = $('#utr_no').val(); + let premium_amount = $('#premium_amount').val(); + let agreed_percentage = $('#agreed_percentage').val(); + let total_amount = $('#total_amount').val(); + let cd_amount = $('#cd_amount').val(); + let no_of_installment = $('#no_of_installment').val(); + let tpa_id = $('#tpa_id').val(); + let acm_pk = $('#acm_id option:selected').data('id'); + let is_installment = $("#is_installment_switch").is(":checked") ? 1 : 0; + + if (!policy_start_date) { + toastr.warning('Policy Start Date is required.', 'Warning'); + $('#policy_start_date').focus(); + return false; + } + + if (!policy_end_date) { + toastr.warning('Policy End Date is required.', 'Warning'); + $('#policy_end_date').focus(); + return false; + } + + let installments = []; + + $('#installment_form_row .form-row').each(function () { + let installment_amount = $(this).find('input[name="installment_amount[]"]').val(); + let installment_payment_date = $(this).find('input[name="payment_date[]"]').val(); + let installment_utr_no = $(this).find('input[name="utr_no[]"]').val(); + let id = $(this).find('input[name="installment_primary_key[]"]').val(); + + let obj = { + lead_id: lead_id, + installment_amount: installment_amount, + payment_date: installment_payment_date, + utr_no: installment_utr_no + }; + + if (id != undefined && id != null && id != '') { + obj.id = id; + } + + installments.push(obj); + }); + + return { + lead_id: lead_id, + placement_date: placement_date, + payment_date: payment_date, + policy_end_date: policy_end_date, + policy_start_date: policy_start_date, + is_cd: is_cd, + utr_no: utr_no, + premium_amount: premium_amount, + total_amount: total_amount, + cd_amount: cd_amount, + no_of_installment: no_of_installment, + is_installment: is_installment, + tpa_id: tpa_id, + acm_pk: acm_pk, + agreed_percentage: agreed_percentage, + installments: JSON.stringify(installments), + }; + } + + function savePlacementDataWithoutMail() { + let url = ''; + let requestData = constructPlacementDataPayload(); + + if (requestData === false) { + return false; + } + + $('.loader').fadeIn(); + $('.loader-mask').fadeIn(); + + sendAjaxRequestForGlobal(url, 'POST', requestData, function(res) { + $('.loader').fadeOut(); + $('.loader-mask').delay(350).fadeOut('slow'); + + if (res.status == true) { + toastr.success(res.message, 'Success'); + $('.close').click(); + } else { + toastr.warning(res.message || 'Failed to save placement data', 'Warning'); + } + }, function(xhr, status, error) { + $('.loader').fadeOut(); + $('.loader-mask').delay(350).fadeOut('slow'); + console.error('Error saving placement data:', error); + console.error(xhr.responseText); + toastr.error('An error occurred while saving placement data.', 'Error'); + }); + } + function savePlacementDataAndValidateMemberDataFile(){ let url = ''; @@ -7719,6 +7826,8 @@ function appendMultiFileData(data) { } function toggleButtons(status) { + $("#save_placement_btn").show(); + if (status === "failed") { $("#send_mail_btn").hide(); $("#validate_file_btn").show();