FEAT_BDS_INSTALLMENT_MORE_INFO_MODAL
This commit is contained in:
parent
635e215254
commit
b3136b0158
@ -332,7 +332,7 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) {
|
||||
$routes->get("send_manual_ecard/(:any)", "DashboardController::sendManualEcard/$1");
|
||||
$routes->get("get_client_policy_list_for_remainder/(:any)", "EmployeeController::get_client_policy_list_for_remainder/$1");
|
||||
$routes->get("get_client_branch_data/(:any)", "ClientController::get_client_branch_data/$1");
|
||||
$routes->get("getLevelContects", "LeadsController::getLevelContects");
|
||||
$routes->get("getLevelContects", "LeadsControllerg::getLevelContects");
|
||||
$routes->get("get_emp_master_data_for_update/(:any)", "EmployeeController::get_emp_master_data_for_update/$1");
|
||||
$routes->get("send_mail_for_individual_employee_ecard/(:any)", "EmployeeController::send_mail_for_individual_employee_ecard/$1");
|
||||
$routes->post("update_emp_data", "EmployeeController::update_emp_data");
|
||||
@ -365,6 +365,9 @@ $routes->cli("cli/sendInstallmentRemainderMail","PolicyTransactionController::se
|
||||
|
||||
$routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) {
|
||||
|
||||
$routes->post("getMoreInfo","PolicyTransactionController::getMoreInfo");
|
||||
$routes->post("saveInstallment","PolicyTransactionController::saveInstallment");
|
||||
|
||||
$routes->group("inception", ["filter" => "authMVC"], function ($routes) {
|
||||
$routes->match(['get', 'post'], 'list', 'PolicyTransactionController::viewInception');
|
||||
$routes->post("create", "PolicyTransactionController::createInceptionPolicy");
|
||||
|
||||
@ -235,8 +235,7 @@ class PolicyTransactionController extends BaseController
|
||||
->where('role', 3) // Assuming `role` is in `user_profiles`
|
||||
->where('is_active', 1)
|
||||
->findAll();
|
||||
|
||||
// echo '<pre>';
|
||||
// echo '<pre>';
|
||||
// print_r($data['ppTeamsData']); die;
|
||||
|
||||
// dd($data);
|
||||
@ -2905,4 +2904,52 @@ class PolicyTransactionController extends BaseController
|
||||
$this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine());
|
||||
}
|
||||
}
|
||||
|
||||
public function getMoreInfo() {
|
||||
|
||||
$pt_id = $this->request->getPost("pt_id");
|
||||
$data_to_send['bds_data'] = $this->BdsPlacementModel->where("is_active",1)->where("pt_id",$pt_id)->findAll();
|
||||
|
||||
foreach ($data_to_send['bds_data'] as &$data) {
|
||||
|
||||
$data['payment_date'] = (new \DateTime($data['payment_date']))->format('d-m-Y');
|
||||
}
|
||||
|
||||
if (!empty($data_to_send)) {
|
||||
|
||||
return $this->respond(['status' => true , "data" => $data_to_send],200);
|
||||
}else {
|
||||
|
||||
return $this->respond(['status' => false,"No Data Found For the Policy Transaction"],404);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function saveInstallment() {
|
||||
|
||||
$installments = $this->request->getPost('installments');
|
||||
|
||||
if (!$installments || !is_array($installments)) {
|
||||
return $this->respond(['status' => false, 'message' => 'No data received'], 400);
|
||||
}
|
||||
|
||||
$this->myLogger->logme("error",json_encode($installments));
|
||||
// die();
|
||||
|
||||
foreach ($installments as &$row) {
|
||||
// Convert date from d-m-Y to Y-m-d
|
||||
if (!empty($row['payment_date'])) {
|
||||
$date = \DateTime::createFromFormat('d-m-Y', $row['payment_date']);
|
||||
if ($date) {
|
||||
$row['payment_date'] = $date->format('Y-m-d');
|
||||
}
|
||||
}
|
||||
$this->BdsPlacementModel->save($row);
|
||||
}
|
||||
|
||||
return $this->respond(['status' => true, 'message' => 'Data saved successfully'], 200);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -129,6 +129,18 @@
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.info-icon {
|
||||
color: #007bff;
|
||||
font-size: 15px;
|
||||
transition: 0.3s ease;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.info-icon:hover {
|
||||
color: #0056b3;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="tab-pane fade active show" id="form">
|
||||
@ -525,7 +537,9 @@
|
||||
</div>
|
||||
|
||||
<div class="form-group col-md-3">
|
||||
<label for="installment_data">Installment Data</label>
|
||||
<label for="installment_data">
|
||||
Installment Data <i id="infoIcon" class="fas fa-info-circle info-icon" title="Click for Installment details" style="margin-left: 5px;"></i>
|
||||
</label>
|
||||
<input id="installment_data" class="form-control" name="installment_data">
|
||||
</div>
|
||||
|
||||
@ -933,8 +947,220 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Info Modal -->
|
||||
<div class="modal fade" id="moreInfoModal" tabindex="-1" role="dialog" aria-labelledby="fullWidthModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-xl" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" id="fullWidthModalLabel">More Information</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="installmentForm">
|
||||
<div id="dynamicDivFillInfo"></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
$("#infoIcon").click(function() {
|
||||
var policyTransactionPK = $('#policy_tranction_primarykey').val();
|
||||
getDataForInfo(policyTransactionPK, function(data) {
|
||||
console.log("data: ", data);
|
||||
if (data && Object.keys(data).length) {
|
||||
// openModal();
|
||||
var myModal = new bootstrap.Modal(document.getElementById('moreInfoModal'));
|
||||
myModal.show();
|
||||
|
||||
appendHtmlToModal(data.bds_data);
|
||||
} else {
|
||||
// toastr.warning("Data not Found");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function getDataForInfo (policyTransactionPK,callback) {
|
||||
// alert(policyTransactionPK)
|
||||
$.ajax({
|
||||
url: "<?= base_url('policy_tranction/getMoreInfo') ?>",
|
||||
type: "POST",
|
||||
data: {
|
||||
pt_id: policyTransactionPK
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.status) {
|
||||
console.log("Info Response: ", response);
|
||||
callback(response.data); // pass data to the callback
|
||||
} else {
|
||||
toastr.warning("No Data Found");
|
||||
callback(null);
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error(xhr.responseText);
|
||||
console.error(status, error);
|
||||
callback(null);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function appendHtmlToModal(data) {
|
||||
|
||||
const items = Array.isArray(data) ? data : data?.bds_data || [];
|
||||
|
||||
const container = document.getElementById('dynamicDivFillInfo');
|
||||
container.innerHTML = '';
|
||||
|
||||
if (!Array.isArray(items) || items.length === 0) {
|
||||
container.innerHTML = '<p>No data available.</p>';
|
||||
return;
|
||||
}
|
||||
|
||||
items.forEach(function(item, index) {
|
||||
// Create .row container
|
||||
const row = document.createElement('div');
|
||||
row.className = 'row mb-3';
|
||||
|
||||
// Hidden input for ID
|
||||
const hiddenId = document.createElement('input');
|
||||
hiddenId.type = 'hidden';
|
||||
hiddenId.name = `installments[${index}][id]`;
|
||||
hiddenId.value = item.id;
|
||||
row.appendChild(hiddenId);
|
||||
|
||||
// Payment Date
|
||||
const paymentCol = document.createElement('div');
|
||||
paymentCol.className = 'col-md-3';
|
||||
|
||||
// Use type="text" for flatpickr
|
||||
const paymentGroup = createEditableInputGroup('Payment Date', 'payment_date', index, '', 'text');
|
||||
paymentCol.appendChild(paymentGroup);
|
||||
row.appendChild(paymentCol);
|
||||
|
||||
// Flatpickr target
|
||||
const paymentInput = paymentGroup.querySelector('input');
|
||||
|
||||
// Convert DB date to d-m-Y (Flatpickr display format)
|
||||
if (item.payment_date) {
|
||||
|
||||
flatpickr(paymentInput, {
|
||||
dateFormat: "d-m-Y",
|
||||
defaultDate: item.payment_date,
|
||||
allowInput: true
|
||||
});
|
||||
}
|
||||
|
||||
// Installment Amount
|
||||
const amountCol = document.createElement('div');
|
||||
amountCol.className = 'col-md-3';
|
||||
amountCol.appendChild(createEditableInputGroup('Installment Amount', 'installment_amount', index, item.installment_amount, 'number'));
|
||||
row.appendChild(amountCol);
|
||||
|
||||
// UTR Number
|
||||
const utrCol = document.createElement('div');
|
||||
utrCol.className = 'col-md-3';
|
||||
utrCol.appendChild(createEditableInputGroup('UTR Number', 'utr_no', index, item.utr_no, 'text'));
|
||||
row.appendChild(utrCol);
|
||||
|
||||
container.appendChild(row);
|
||||
});
|
||||
|
||||
// Add submit button at the end
|
||||
const submitRow = document.createElement('div');
|
||||
submitRow.className = 'row';
|
||||
|
||||
const submitCol = document.createElement('div');
|
||||
submitCol.className = 'col-md-12 text-end d-flex align-items-center justify-content-end';
|
||||
|
||||
const submitBtn = document.createElement('button');
|
||||
submitBtn.type = 'submit';
|
||||
submitBtn.id = 'submitInstallments';
|
||||
submitBtn.className = 'btn btn-primary';
|
||||
submitBtn.innerText = 'Save Installments';
|
||||
|
||||
submitCol.appendChild(submitBtn);
|
||||
submitRow.appendChild(submitCol);
|
||||
container.appendChild(submitRow);
|
||||
}
|
||||
|
||||
$(document).on('click', '#submitInstallments', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
const installments = [];
|
||||
|
||||
$('#dynamicDivFillInfo .row').each(function () {
|
||||
const row = $(this);
|
||||
const installment = {};
|
||||
|
||||
const id = row.find('input[name*="[id]"]').val();
|
||||
const payment_date = row.find('input[name*="[payment_date]"]').val();
|
||||
const installment_amount = row.find('input[name*="[installment_amount]"]').val();
|
||||
const utr_no = row.find('input[name*="[utr_no]"]').val();
|
||||
|
||||
// Ignore empty rows
|
||||
if (payment_date && installment_amount && utr_no) {
|
||||
installment.id = id;
|
||||
installment.payment_date = payment_date;
|
||||
installment.installment_amount = installment_amount;
|
||||
installment.utr_no = utr_no;
|
||||
installments.push(installment);
|
||||
}
|
||||
});
|
||||
|
||||
if (installments.length === 0) {
|
||||
toastr.warning("No valid installment data to save.");
|
||||
return;
|
||||
}
|
||||
$('.loader').fadeIn();
|
||||
$('.loader-mask').fadeIn();
|
||||
$.ajax({
|
||||
url: "<?= base_url('policy_tranction/saveInstallment') ?>",
|
||||
type: "POST",
|
||||
data: { installments },
|
||||
success: function (response) {
|
||||
if (response.status) {
|
||||
toastr.success("Installments saved successfully!");
|
||||
$('#moreInfoModal').modal('hide');
|
||||
} else {
|
||||
toastr.error(response.message || "Save failed.");
|
||||
}
|
||||
},
|
||||
error: function (xhr) {
|
||||
console.error(xhr.responseText);
|
||||
toastr.error("Server error.");
|
||||
}
|
||||
});
|
||||
|
||||
$('.loader').fadeOut();
|
||||
$('.loader-mask').delay(350).fadeOut('slow');
|
||||
});
|
||||
|
||||
function createEditableInputGroup(labelText, fieldName, index, value, type) {
|
||||
var group = document.createElement('div');
|
||||
group.className = 'form-group mb-2';
|
||||
|
||||
var label = document.createElement('label');
|
||||
label.innerText = labelText;
|
||||
|
||||
var input = document.createElement('input');
|
||||
input.type = type;
|
||||
input.className = 'form-control';
|
||||
input.name = `installments[${index}][${fieldName}]`;
|
||||
input.value = value;
|
||||
|
||||
group.appendChild(label);
|
||||
group.appendChild(input);
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
|
||||
var team_id = [];
|
||||
let isClientFormSubmitting = false;
|
||||
var insurer_count_array = [];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user