nhance/app/Views/policy_transaction_inception_form_2.php
2026-02-09 12:57:17 +05:30

6872 lines
303 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<style>
.co_share_table {
width: 39% !important;
/* margin-bottom: 1rem;
color: #212529; */
}
#insurerTableContainer {
/* max-height: 400px; */
overflow-y: auto;
margin-top: 20px;
/* overflow-x: auto; */
position: relative;
}
#insurerTable thead th:first-child,
#insurerTable tbody td:first-child {
position: sticky;
left: 0;
background-color: #fff;
z-index: 1;
width: 200px;
min-width: 200px;
max-width: 200px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#insurerTable input[type="text"] {
border: none;
box-shadow: none;
outline: none;
width: 100%;
padding: 5px 30px !important;
}
#insurerTable th,
#insurerTable td {
padding: 2px 4px !important;
/* height: 30px; */
vertical-align: middle;
}
#insurerTable select {
height: 30px;
padding: 2px 5px;
}
#insurerTable input[type="checkbox"] {
margin: 0;
height: 20px;
width: 20px;
}
#insurerTable th,
#insurerTable th {
min-width: 230px;
}
.readonly-color {
background-color: #e0e0e0; /* Darker background */
color: #666; /* Darker text color */
}
.readonly-select {
pointer-events: none;
/* background-color: #f0f0f0; */
background-color: #e0e0e0;
color: #666;
}
.select2-hidden-accessible + .select2-container .select2-dropdown {
display: none !important;
}
.select2-container .select2-selection--multiple .select2-selection__choice {
color: #000000;
}
.highlighted {
background-color: #f0ad4e;
color: #fff;
}
.right-align-input {
text-align: right;
}
/* .select2-container .select2-selection__rendered {
min-height: 38px;
display: flex;
align-items: center;
}
.select2-search__field{
height: 0px !important;
} */
.select2-selection__choice {
background-color: #0a8794 !important;
color: white !important;
font-weight: bold;
}
.select2-selection__choice__remove {
color: white !important;
margin-right: 5px;
}
:disabled {
background-color: #e0e0e0;
color: #666;
}
.info-icon {
color: #007bff;
font-size: 15px;
transition: 0.3s ease;
cursor: pointer;
}
.info-icon:hover {
color: #0056b3;
font-size: 24px;
}
/** newly implemented */
#insurerTable thead th:first-child {
border-top: 0px solid #fff !important;
border-bottom: 0px solid #fff !important;
background-color: transparent !important;
}
#insurerTable tbody td {
border-top: 0px solid #fff !important;
border-bottom: 0px solid #fff !important;
background-color: transparent !important;
}
#insurerTable th{
color: black !important;
background-color: transparent !important;
}
#insurerTable input[type="text"],
#insurerTable select {
width: 100%;
font-size: 14px;
line-height: 1.5;
color: #000;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 4px;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
box-sizing: border-box;
}
/* Focus effect like form-control */
#insurerTable input[type="text"]:focus,
#insurerTable select:focus {
border-color: #80bdff;
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}
/* Disabled & readonly styling */
#insurerTable input[readonly],
#insurerTable input:disabled,
#insurerTable select:disabled {
background-color: #e0e0e0; /* Darker background */
color: #666; /* Darker text color */
cursor: not-allowed;
}
</style>
<style>
.insurer-card .compact-details-section .small { font-size: 75%; }
.insurer-card .compact-details-section .form-control { width: 100%; }
.insurer-card .compact-details-section .col-md-5 .col-6 label { margin-bottom: 0.2rem; }
.insurer-card .input-wrap { display: flex; align-items: center; }
.insurer-card .input-content { flex-grow: 1; padding-right: 1.8rem !important; /* Create space inside the input for the symbol */ }
.insurer-card .input-symbol {
margin-left: -1.5rem; /* Position the symbol over the padding space */
pointer-events: none; /* Prevents symbol from interfering with input clicks */
font-weight: bold;
color: #6c757d; /* Optional: Make symbol slightly less prominent */
}
.readonly-select { background-color: #f3f3f3; cursor: not-allowed; }
.readonly-select:focus {
outline: none;
}
.readonly-select[readonly] {
pointer-events: none;
}
</style>
<style>
.vehicle-input-wrapper {
position: relative;
}
.vehicle-otp-container {
display: flex;
gap: 3px;
flex-wrap: wrap;
}
.vehicle-otp-box {
width: 34px;
height: 38px;
text-align: center;
font-size: 16px;
font-weight: 100;
font-family: 'Courier New', monospace;
border: 2px solid #ced4da;
border-radius: 6px;
text-transform: uppercase;
transition: all 0.2s ease;
}
.vehicle-otp-box:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}
.vehicle-otp-box.filled {
background-color: #e7f3ff;
border-color: #007bff;
}
.vehicle-otp-box.parsley-error {
border-color: #dc3545;
background-color: #f8d7da;
}
.vehicle-format-info {
font-size: 11px;
color: #6c757d;
margin-top: 5px;
}
.vehicle-result {
margin-top: 8px;
/* padding: 6px 10px; */
background: #f8f9fa;
border-radius: 4px;
font-family: 'Courier New', monospace;
font-size: 13px;
font-weight: 600;
text-align: center;
letter-spacing: 1px;
display: none;
/* max-width: fit-content; */
margin-left: auto;
margin-right: auto;
}
.vehicle-result.show {
display: block;
}
.vehicle-badge {
display: inline-block;
padding: 2px 6px;
border-radius: 3px;
font-size: 10px;
font-weight: 700;
margin-left: 5px;
}
.vehicle-badge.success {
background: #d4edda;
color: #155724;
}
.vehicle-badge.error {
background: #f8d7da;
color: #721c24;
}
/* Parsley error styling */
.parsley-errors-list {
list-style: none;
padding: 0;
margin: 5px 0 0 0;
}
.parsley-errors-list li {
color: #dc3545;
font-size: 12px;
}
</style>
<div class="tab-pane fade active show" id="form">
<input type="hidden" id="entity_type_id">
<div class="row" id="inception_form">
<div class="col-xl-12" style="max-width: 100% !important;">
<div class="card">
<div class="card-body">
<div class="row" style="margin-bottom:1rem;">
<div class="col-6" style="align-self: center;">
<h4 id="page_title" style="position: relative;">Add Policy</h4>
</div>
<div class="col-3" style="text-align: right; position: relative; left: 211px;">
<!-- <button class="btn btn-primary waves-effect waves-light" onclick="fileupload(this)">file upload</button> -->
</div>
<div class="col-1" style="text-align: right; position: relative; left: 193px;">
<a href="<?= base_url('policy_tranction/inception/list2') ?>" type="button" id="btnAdd" class="btn btn-primary waves-effect waves-light">Back</a>
</div>
</div><!-- row -->
<form role="form" class="parsley-examples" method="post" id="inception_form_id" enctype="multipart/form-data">
<input type="hidden" name="id" id="policy_tranction_primarykey">
<input type="hidden" name="client_policy_id" id="client_policy_id">
<input type="hidden" name="client_id" id="client_id_for_edit">
<input type="hidden" name="insurer_id" id="insurer_id">
<input type="hidden" name="cd_ac_no" id="cd_ac_pk_for_leader">
<input type="hidden" name="ct_type" id="ct_type">
<input type="hidden" name="remove_pt_co_id" id="remove_pt_co_id" >
<input type="hidden" name="issuer" id="issuer" value="2">
<input type="hidden" name="base_cd_amount" id="base_cd_amount">
<input type="hidden" name="cd_amt_changed" id="cd_amt_changed" disabled>
<input type="hidden" name="agent_code" id="agent_code">
<input type="hidden" name="issuer_branch" id="issuer_branch">
<input type="hidden" name="salse_person_manager_id" id="salse_person_manager_id">
<input type="hidden" name="service_person_manager_id" id="service_person_manager_id">
<input type="hidden" name="service_person_branch_id" id="service_person_branch_id">
<!-- <input type="hidden" id="cd_ac_no_for_edit"> -->
<input type="hidden" id="premium_details_unique_id">
<input type="hidden" id="policy_tranction_policy_number">
<input type="hidden" id="pt_form_sumbit_handler" value="1">
<!-- Default Row REF:KV -->
<div class="row" id="default_row">
<div class="col-md-12">
<div id="accordion_1" class="mb-0">
<div class="card mb-1">
<div id="collapseTwo" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion_1">
<div class="card-body">
<div class="row">
<div class="form-group col-md-3">
<label for="email"> Policy Type <span class="text-danger">*</span></label>
<select class="form-control" id="policy_type_id" name="policy_type_id" autocomplete="off"
required>
<option value="">Select Policy Type</option>
<?php
if (isset($policy_types) && count($policy_types)) {
foreach ($policy_types as $key => $value) {
echo "<option value='" . $value['id'] . "'
data-ebp='" . $value['ebp'] . "'
data-etp='" . $value['etp'] . "'
data-etep='" . $value['etep'] . "'
data-iep='" . $value['iep'] . "'
data-itep='" . $value['itep'] . "'
data-itp='" . $value['itp'] . "'
data-bap='" . $value['bap'] . "'
data-allocg='" . $value['allocg'] . "'
>" .
$value['policy_type'] .
"</option>";
}
}
?>
</select>
</div>
<div class="form-group col-md-3" id="vhnodiv" style="display: none;">
<label for="bp_sgst">Vehicle No</label>
<select id="vehicle_no" type="text" class="form-control" name="vehicle_id">
<option value="">Select Vehicle</option>
<option value="add_vehicle"> + Add Vehicle</option>
</select>
</div>
</div>
<div class="row">
<div class="form-group col-md-3">
<label for="addon_policy"> Business Type <span id="base_danger"
class="text-danger">*</span></label>
<select class="form-control" id="issue_type" name="issue_type" required>
<option value="" selected>Select Issue Type</option>
<?php
if (isset($issuing_type) && count($issuing_type)) {
foreach ($issuing_type as $key => $value) {
echo "<option value=" . $key . ">" . $value . "</option>";
}
}
?>
</select>
</div>
<div class="form-group col-md-3">
<label for="bp_gst_amt">Revenue Type</label>
<select id="revenue_type" class="form-control" name="revenue_type">
<option value="">Select</option>
<option value="NA">NA</option>
<option value="EA">EA</option>
<option value="EANR">EANR</option>
</select>
</div>
<div class="form-group col-md-3 sded_dates" style="display: none;">
<label for="addon_policy">Policy Start Date<span id="base_danger"
class="text-danger">*</span></label>
<input type="text" class="form-control" id="renewal_policy_start_date"
name="renewal_policy_start_date" placeholder="DD/MM/YYYY" >
</div>
<div class="form-group col-md-3 sded_dates" style="display: none;">
<label for="addon_policy">Policy End Date<span id="base_danger"
class="text-danger">*</span></label>
<input type="text" class="form-control" id="renewal_policy_end_date"
name="renewal_policy_end_date" placeholder="DD/MM/YYYY" >
</div>
<div class="form-group col-md-3 roll_div" style="display: none;">
<label for="rollover_date">Date of Expiring Policy for Rollover</label>
<input id="rollover_date" value="" type="text" class="form-control" name="rollover_date" placeholder="DD/MM/YYYY">
</div>
<div class="form-group col-md-3">
<label for="ref">Reference</label>
<input id="ref" value="" type="text" class="form-control" name="ref">
</div>
<div class="form-group col-md-3">
<label for="sales_generated_by" class="d-flex align-items-center">
<span class="flex-grow-1">Sales Generated By</span>
<small id="nhance_branch_info"
class="text-right"
style="font-size: x-small;">
</small>
<small id="salse_rm_info"
class="text-right"
style="font-size: x-small;">
</small>
</label>
<select class="form-control" id="sales_generated_by" name="sales_generated_by" onchange="setNhanceBranch(this, 'nhance_branch_info'); setRM(this, 'salse_rm_info')" autocomplete="off">
<option value="" selected>Select Sales Person</option>
<?php if (isset($salse_team)) { ?>
<?php foreach ($salse_team as $value) { ?>
<option value="<?= $value['id'];?>"
data-nbid="<?= $value['nhance_branch_id'];?>"
data-nbname="<?= $value['nhance_branch_name'];?>"
data-rmid="<?= $value['rm_id'];?>"
data-rmname="<?= $value['rm_name'];?>"
>
<?= $value['first_name'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
<div class="form-group col-md-3">
<label for="serviced_by" class="d-flex align-items-center" >
<span class="flex-grow-1">Serviced By</span>
<small id="service_nhance_branch_info"
class="text-right"
style="font-size: x-small;">
</small>
<small id="service_rm_info"
class="text-right"
style="font-size: x-small;">
</small>
</label>
<select class="form-control" id="serviced_by" name="serviced_by" onchange="setNhanceBranch(this, 'service_nhance_branch_info'); setRM(this, 'service_rm_info')">
<option value="" selected>Select Service Person</option>
<?php if (isset($ACM)) { ?>
<?php foreach ($ACM as $value) { ?>
<option value="<?= $value['id'];?>"
data-nbid="<?= $value['nhance_branch_id'];?>"
data-nbname="<?= $value['nhance_branch_name'];?>"
data-rmid="<?= $value['rm_id'];?>"
data-rmname="<?= $value['rm_name'];?>"
>
<?= $value['first_name'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
<div class="form-group col-md-3">
<label for="POS" class="d-flex align-items-center">
<span class="flex-grow-1">POS</span>
<small id="agent_info"
class="text-right"
style="font-size: x-small;">
</small>
</label>
<select class="form-control" id="agent_id" name="agent_id" onchange="setAgentCode(this)" autocomplete="off">
<option value="">Select POS</option>
<?php if (isset($partner_agent)) { ?>
<?php foreach ($partner_agent as $value) { ?>
<option value="<?= $value['id'];?>" data-agent-code="<?= $value['agent_code']; ?>">
<?= $value['name']." - ". $value['agent_code'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div> <!-- default_row -->
<!-- Vehicle Quick Add DIV -->
<div class="row" id="vehicle_row_div"></div><!-- vehicle_row_div -->
<!-- Client Details Row -->
<div class="row">
<!-- Section 1 -->
<div class="col-md-12">
<div id="accordion_0" class="mb-0">
<label id="policyAccordion" class="m-1 d-flex justify-content-between align-items-center">
<span class="font-color-black">Client Details</span>
<a id="toggleIcon" class="text-dark float-right" data-toggle="collapse" href="#collapseOne"
aria-expanded="true">
<i id="icon" class="mdi mdi-chevron-up mr-1 text-primary" style="font-size: 28px;"></i>
</a><!-- toggleIcon -->
</label><!-- policyAccordion -->
<div class="card mb-1">
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion_0">
<div class="card-body">
<div class="row" id="actcual_clients">
<div class="form-group col-md-3 client_type_div">
<label for="client_type">Client Type<span class="text-danger">*</span></label>
<select class="form-control" id="client_type" name="client_type" required>
<option value="">Select Client type</option>
<option value="1">Group</option>
<option value="2">Individual</option>
</select>
</div>
<div class="form-group col-md-3">
<label for="client_branch">Client<span class="text-danger">*</span></label>
<select class="form-control" id="client_id" name="client_id" required>
<option value="">Select Client</option>
<option value="add_client"> + Add Client</option>
</select>
</div>
<div class="form-group col-md-3 branchdiv">
<label for="client_branch">Client Branch<span class="text-danger">*</span></label>
<select class="form-control" id="client_branch_id" name="client_branch_id">
<option value="">Select Branch</option>
</select>
</div>
<!-- <div class="form-group col-md-3">
<label for="client_branch">Issuer<span class="text-danger">*</span></label>
<select class="form-control" id="issuer" name="issuer" required>
<option value="">Select Issuer</option>
<?php
if (isset($issuer) && count($issuer)) {
foreach ($issuer as $key => $value) {
echo "<option value=" . $key . ">" . $value . "</option>";
}
}
?>
</select>
</div> -->
</div><!-- actcual_clients -->
<div class="row" id="policyholdernamediv" style="display: none;">
<div class="form-group col-md-3">
<label for="bp_igst">Policyholder Name</label>
<input id="policy_holder_name" value="" type="text" class="form-control" name="policy_holder_name">
</div>
<div class="form-group col-md-4">
<label class="switch" style="position: relative;top: 30px;left: 4px;">
<input id="same_as_proposer" type="checkbox" name="same_as_proposer" checked>
<span class="slider round" style="height: 27px;"></span>
</label>
<label for="same_as_proposer"
style="position: relative;top: 31px;left: 17px;">Insured (Same as Proposer)</label>
</div>
</div><!-- policyholdernamediv -->
<div class="row" id="family_details" style="display: none;">
<div class="col-md-12">
<div class="form-section">
<h4>Family details</h4>
<div id="dynamic-form-container-for-insured"></div>
</div>
</div>
</div> <!-- family_details -->
</div><!-- card-body -->
</div><!-- collapseOne -->
</div><!-- card mb-1 -->
</div><!-- accordion_0 closed -->
</div> <!-- Section 1 closed -->
</div><!-- Client Details Row closed -->
<!-- Client Quick Add DIV -->
<div class="row" id="client_row_div"></div><!-- client_row_div -->
<!-- Sales Row -->
<div class="row" id="sales_row" style="display: none;">
<div class="col-md-12">
<div id="accordion_2" class="mb-0">
<label id="policyAccordion" class="m-1 d-flex justify-content-between align-items-center">
<span class="font-color-black">Sales</span>
<a id="toggleIcon" class="text-dark float-right" data-toggle="collapse" href="#collapseThree"
aria-expanded="true">
<i id="icon" class="mdi mdi-chevron-up mr-1 text-primary" style="font-size: 28px;"></i>
</a>
</label>
<div class="card mb-1">
<div id="collapseThree" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion_2">
<div class="card-body">
<div class="row">
<div class="form-group col-md-12" id="renewal" style="display: none;">
<label for="addon_policy"> Renewal Source Policy <span id="base_danger"class="text-danger"></span></label>
<select class="form-control" id="source_client_policy_id"name="source_client_policy_id" onchange="setRenewalPolicyData(this)">
<option value="" selected>Select Renewal Source Policy</option>
</select>
</div> <!-- renewal -->
<div class="form-group col-md-3" id="base_policy_id" style="display: none;">
<label for="addon_policy">Base Policy<span id="base_danger"
class="text-danger">*</span></label>
<select class="form-control" id="base_policy" name="base_policy">
<option value="" selected>Select Base Policy</option>
</select>
</div><!-- base_policy_id -->
<div class="form-group col-md-3">
<label for="addon_policy">Policy No<span id="base_danger"class="text-danger">*</span></label>
<input type="text" class="form-control" id="policy_no" name="policy_no"placeholder="Enter Policy No" >
</div><!-- form-group col-md-3 Policy No -->
<div class="form-group col-md-3">
<label for="addon_policy" class="d-flex align-items-center">
<span class="flex-grow-1">Policy Issue Date<span id="base_danger" class="text-danger">*</span></span>
<small id="policy_issue_month_info"
class="text-right"
style="font-size: x-small;">
</small>
</label>
<input type="text" class="form-control" id="policy_issue_date" name="policy_issue_date" placeholder="DD/MM/YYYY" >
</div><!-- form-group col-md-3 Policy Issue Date -->
<div class="d-none">
<label for="addon_policy">Policy Issue Month<span id="base_danger" class="text-danger">*</span></label>
<input type="text" class="form-control readonly-select" id="month" name="month" placeholder="MM/YYYY" >
</div><!-- Policy Issue Month -->
<div class="form-group col-md-3">
<label for="bp_cgst">D.O.C</label>
<input id="policy_start_date" type="text" class="form-control" name="policy_start_date" placeholder="DD/MM/YYYY" >
</div><!-- D.O.C -->
<div class="form-group col-md-3">
<label for="bp_igst">D.O.E</label>
<input id="policy_end_date" type="text" class="form-control" name="policy_end_date" placeholder="DD/MM/YYYY" >
</div><!-- D.O.E -->
<div class="form-group col-md-3" id="no_of_insured_div">
<label for="addon_policy">No of Insured<span id="base_danger"class="text-danger"></span></label>
<input type="text" class="form-control" id="emp_count" name="emp_count" placeholder="Enter Employeee" onkeypress="return onlyNumbers(event)">
</div><!-- no_of_insured_div -->
<div class="form-group col-md-3" id="no_of_dependents_div">
<label for="addon_policy">No of Dependents<span id="base_danger" class="text-danger"></span></label>
<input type="text" class="form-control" id="dependent_count" name="dependent_count" placeholder="Enter Dependent" onkeypress="return onlyNumbers(event)">
</div><!-- no_of_dependents_div -->
<div class="form-group col-md-3">
<label for="installment">Installment &nbsp; <i id="infoIcon" class="mdi mdi-information-outline info-icon" data-toggle="tooltip" title="Click for Installment details" style="margin-left: 5px;"></i></label>
<input id="installment" value="" type="text" class="form-control" name="installment">
</div><!-- Installment -->
<div class="form-group col-md-3">
<label for="installment_data">
Installment Data
</label>
<input id="installment_data" class="form-control" name="installment_data">
</div><!-- Installment Data -->
<div class="form-group col-md-3">
<label class="card_label_4">Base Premium<span id="base_danger" class="text-danger">*</span></label>
<input type="text" class="form-control right-align-input" id="base_premium" name="base_premium" oninput="" onkeypress="return onlyNumbers(event)" onchange="setBPValue(this.value)" required>
</div><!-- Base Premium -->
<div class="form-group col-md-3 hidetp">
<label class="card_label_5">TP Premium</label>
<input type="text" class="form-control right-align-input" id="tp_premium" name="tp_premium" oninput="" onkeypress="return onlyNumbers(event)" onchange="setTPValue(this.value)">
</div><!-- TP Premium -->
<div class="form-group col-md-3 hideter card_group_6" style="display:none;">
<label class="card_label_6">TEP Premium</label>
<input type="text" class="form-control right-align-input" id="ter_premium" name="ter_premium" oninput="" onkeypress="return onlyNumbers(event)" onchange="setTEPValue(this.value)">
</div><!-- TEP Premium -->
<div class="form-group col-md-2">
<label class="switch" style="position: relative;top: 30px;left: 4px;">
<input id="cop_yes" type="checkbox" name="co_share">
<span class="slider round" style="height: 27px;"></span>
</label>
<label for="inception_type"
style="position: relative;top: 31px;left: 17px;">CoP Yes</label>
</div><!-- CoP Yes -->
<div class="form-group col-md-4 payby d-none">
<label class="switch" style="position: relative;top: 30px;left: 4px;">
<input id="bro_payable_by" type="checkbox" name="bro_payable_by" checked>
<span class="slider round" style="height: 27px;"></span>
</label>
<label for="inception_type" style="position: relative;top: 31px;left: 17px;">Remuneration Pay By Leader</label>
</div><!-- Remuneration Pay By Leader -->
<div class="form-group col-md-4">
<label for="renewal_date">Renewal Date<span id="base_danger"
class="text-danger">*</span></label>
<input type="text" class="form-control" id="renewal_date"
name="renewal_date" placeholder="DD/MM/YYYY">
</div><!-- Renewal Date -->
</div><!-- collapseThree card-body row -->
</div><!-- collapseThree card-body -->
</div><!-- collapseThree -->
</div><!-- card mb-1 -->
</div> <!-- accordion_2 div closed here -->
</div><!-- 1st col-md-12 div closed here -->
</div> <!-- sales_row div closed here -->
<!-- Premium Details Row -->
<div class="row" id="premium_details_row">
<div class="col-md-12">
<div id="accordion_3" class="mb-0">
<label id="policyAccordion" class="m-1 d-flex justify-content-between align-items-center">
<span class="font-color-black">Premium Details</span>
<a id="toggleIcon" class="text-dark float-right" data-toggle="collapse" href="#collapseFour"
aria-expanded="true">
<i id="icon" class="mdi mdi-chevron-up mr-1 text-primary" style="font-size: 28px;"></i>
</a>
</label><!-- Premium Details policyAccordion -->
<div class="card mb-0">
<div id="collapseFour" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion_3">
<div class="card-body">
<div id="allInsurerCards"></div>
</div> <!-- Premium Details collapseFour div card-body closed here -->
</div> <!-- Premium Details collapseFour div closed here -->
</div><!-- Premium Details policyAccordion card -->
</div> <!-- Premium Details accordion_3 div closed here -->
</div>
</div><!-- ends Premium Details -->
<div class="form-group text-right mt-3 m-b-0" id="submitButton">
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1" id="btnSubmit">Submit</button>
</div><!-- submitButton -->
</form><!-- role="form" -->
</div><!-- card-body -->
</div><!-- card -->
</div><!-- col-xl-12 -->
</div><!-- end inception_form row -->
</div><!-- tab-pane -->
<!-- Vehicle form content modal-->
<div class="modal fade" id="vehicle_modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" data-backdrop="static">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myCenterModalLabel">Add New Vehicle</h4>
<button type="button" id="vehicle_close_btn" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body" style="overflow-y: auto;height: 90vh;">
<form class="parsley-examples" method="post" id="vehicle_form" enctype="multipart/form-data">
<div class="form-group">
<div class="form-row">
<div class="form-group col-md-6 client_type_div">
<label for="Owner_type">Owner Type<span class="text-danger">*</span></label>
<select class="form-control" id="Owner_type" name="Owner_type" required>
<option value="">Select Owner type</option>
<option value="1">Group</option>
<option value="2">Individual</option>
</select>
</div>
<div class="form-group col-md-3">
<label for="new_vehicle_switch">New Vehicle</label>
<input id="new_vehicle_switch" type="checkbox" name="new_vehicle" value="1" data-toggle="toggle" data-on="Yes" data-off="No" data-onstyle="info" data-offstyle="primary" data-style="border" data-width="218">
</div>
<div class="form-group col-md-6">
<label for="modal_vehicle_no">Vehicle No<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="modal_vehicle_no" placeholder="Enter Vehicle No" name="vehicle_no" onchange="validateInput(this, 'vehicle', 'vehicle_no')" required>
</div>
<div class="form-group col-md-6">
<label for="rc">Chassis No <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="rc" placeholder="Enter Chassis No" name="rc" onchange="validateInput(this, 'vehicle', 'rc')" required>
</div>
<div class="form-group col-md-6">
<label for="type">Vehicle Type<span class="text-danger">*</span></label>
<select class="form-control" id="type" name="type" required>
<option value="">Select Type</option>
<?php
if (isset($vehicle_type) && count($vehicle_type)) {
foreach ($vehicle_type as $key => $value) {
echo "<option value=" . $value['id'] . ">" . $value['vehicle_type'] . "</option>";
}
}
?>
</select>
</div>
<div class="form-group col-md-6">
<label for="description">Description<span class="text-danger">*</span></label>
<select class="form-control" id="description" name="description" required>
<option value="">Select Description</option>
<?php
if (isset($vehicle_des) && count($vehicle_des)) {
foreach ($vehicle_des as $key => $value) {
echo "<option value=" . $key . ">" . $value . "</option>";
}
}
?>
</select>
</div>
<div class="form-group col-md-12">
<label for="owner">Owner Name <span class="text-danger">*</span></label>
<select class="form-control" id="owner" name="owner" required>
<option value="">Select Owner</option>
</select>
</div>
<div class="form-group col-md-12 ownerbranchdiv">
<label for="client_branch">Branch<span class="text-danger">*</span></label>
<select class="form-control" id="owner_branch" name="branch_id">
<option value="">Select Branch</option>
</select>
</div>
</div>
</div>
<div class="form-group d-flex justify-content-end m-b-0" id="hide_smbt_btn">
<button type="submit" class="btn btn-primary waves-effect waves-light">Submit</button>
</div>
</form>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div>
<!-- CD No form content modal-->
<div class="modal fade" id="cd_form_modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="title">Add CD Account Number</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body p-4">
<div class="">
<form role="form" class="parsley-examples" method="post" id="CDMasterForm" enctype="multipart/form-data">
<div class="form-group">
<div class="form-row">
<div class="form-group col-md-12">
<label for="email">Opening Date<span class="text-danger">*</span></label>
<input type="text" class="form-control" name="opening_date" id="opening_date" required>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12">
<label for="mobile">CD Account Number<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="cd_ac_no_data" name="cd_ac_no" required>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12">
<label for="mobile">Opening Amount<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="opening_bal" name="opening_bal" onkeypress="return onlyNumbers(event)" required>
</div>
</div>
</div>
<div class="form-group text-right m-b-0">
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1"
id="btnSubmit">Submit</button>
</div>
</form>
</div>
</div>
</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">&times;</span>
</button>
</div>
<div class="modal-body">
<form id="installmentForm">
<div id="dynamicDivFillInfo"></div>
</form>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$('#sales_row').show();
$('#policy_no').prop('required', true);
$('#policy_issue_date').prop('required', true);
$('#policy_start_date').prop('required', true);
$('#policy_end_date').prop('required', true);
$('.follow_insurer').prop('required', true);
$('#agent_id').select2();
})
$("#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 = [];
var role_id = <?php echo get_role_id(); ?>;
let isClientFormSubmitting = false;
let isVehicleFormSubmitting = false;
var insurer_count_array = [];
var redirect_url = '<?= base_url('policy_tranction/inception/list2') ?>';
let insurer_data = <?= json_encode($insurer_branch ?? []) ?>;
$(document).ready(function(){
$('#upload_enrollment_model').on('hide.bs.modal', function (e) {
console.log('Attempting to hide #upload_enrollment_model modal');
let policy_type_id = $('#policy_type_id').val();
console.log('policy_type_id:', policy_type_id);
let shouldClose = false;
if(isClientFormSubmitting == false){
shouldClose = confirm("Are you sure you want to close? Unsaved changes will be lost.");
// const shouldClose = true; // Always true, can be changed to confirm() if needed
console.log('User confirmation result:', shouldClose);
if (shouldClose) {
console.log('User confirmed closing. Resetting #client_form.');
$('#client_form')[0].reset();
console.log('#client_form reset successfully.');
if (policy_type_id == 8) {
$('#client_form').removeAttr('data-id');
console.log('data-id attribute removed from #client_form.');
console.log('Opening #vehicle_modal.');
const vehicleModal = new bootstrap.Modal(document.getElementById('vehicle_modal'));
vehicleModal.show();
console.log('Setting form data for #vehicle_form from localStorage.');
setFormDataFromLocalStorage("#vehicle_form", "vehicleFormData");
}else {
console.log('policy_type_id is not 8 — proceeding with default modal behavior.');
}
} else {
console.log('User cancelled closing. Preventing modal from hiding.');
e.preventDefault(); // stops modal from closing
}
}
});
$('#vehicle_modal').on('hide.bs.modal', function (e) {
console.log('Attempting to hide #vehicle_modal modal');
if(isVehicleFormSubmitting == false){
const shouldClose = confirm("Are you sure you want to close? Unsaved changes will be lost.");
console.log('User confirmation result:', shouldClose);
if (!shouldClose) {
console.log('User cancelled closing. Preventing modal from hiding.');
e.preventDefault();
}
if(shouldClose){
console.log("alert closed")
localStorage.removeItem('vehicleFormData');
$("#vehicle_form").find("input, select, textarea").val("");
}
}
});
$('#aadhar').attr('data-parsley-required', 'false');
$('#aadhar').removeAttr('required');
team_id = <?php echo json_encode(user_team()); ?>;
console.log('team_id', team_id);
if (team_id.includes('4')) {
console.log('Finance Team Logged in.');
} else if (team_id.includes('3')) {
console.log('Business Team Logged in.');
}
$('#listed_insurers').select2({
placeholder: "Select Insurers", // Placeholder for a better UX
});
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
// $('#listed_insurers').select2();
$('#owner').select2();
$('#owner_branch').select2();
$('#vehicle_no').select2();
var today = new Date();
var dob = flatpickr("#dob", {
dateFormat: "d/m/Y",
allowInput: false
});
var rollover_date = flatpickr("#rollover_date", {
dateFormat: "d/m/Y",
allowInput: false
});
var process_start_date = flatpickr("#process_start_date", {
dateFormat: "d/m/Y",
defaultDate: today,
allowInput: false
});
var last_action_date = flatpickr("#last_action_date", {
dateFormat: "d/m/Y", // Display format in DD/MM/YYYY
defaultDate: today, // Today's date as the default value
allowInput: false,
maxDate: today // Disallow future dates
});
var renewal_date1 = flatpickr("#renewal_policy_start_date", {
dateFormat: "d/m/Y",
defaultDate: 'today',
allowInput: false
});
var renewal_date2 = flatpickr("#renewal_policy_end_date", {
dateFormat: "d/m/Y",
defaultDate: 'today',
allowInput: false
});
})
$(document).ready(function(){
getURLParamsForReport();
})
$(document).ready(function(){
$('#vehicle_no').change(function(){
var val = $(this).val()
var selectedOption = $(this).find('option:selected');
var client_id = selectedOption.data('cid');
var branch_id = selectedOption.data('bid');
var client_type = selectedOption.data('cty');
$('#vehicle_row_div').empty();
$('#client_row_div').empty();
// $('#actcual_clients').show();
let status = $('#policy_status').val(); // REF : Venkatesh R - Status html Remove. Doubt here ask him - Q: why we need this? remove pannava ?.
console.log(client_id);
console.log(branch_id);
console.log(client_type);
$('#client_id').val(client_id).change();
$('#client_type').val(client_type);
if(client_type == 1){
$('.branchdiv').show()
$('#client_branch_id').prop('required', true);
setTimeout(function(){
$('#client_branch_id').val(branch_id).change()
}, 800)
$('.card_group_34').show();
$('.card_group_37').show();
$("select[name='cd_ac_no_for_child[]']").attr('required', 'required');
}else{
$('.branchdiv').hide()
$('#client_branch_id').prop('required', false);
$('.card_group_34').hide();
$('.card_group_37').hide();
$("select[name='cd_ac_no_for_child[]']").removeAttr("required");
}
if(val == 'add_vehicle'){
$('#modal_vehicle_no').val('');
$(this).val('').select2();
// $('#actcual_clients').hide();
appendVehicleForm();
$('#sales_row').hide();
$('#submitButton').hide();
}else{
$('#submitButton').show();
// if(status == "completed"){
$('#sales_row').show(); // REF : Venkatesh R - Status html Remove. so i removed the 'if'.
// }
}
})
$('#owner').change(function(){
let owner_id = $(this).val();
console.log('owner_id', owner_id);
if(owner_id == 'add_client'){
$(this).val("");
if($('#client_type').val()){
isVehicleFormSubmitting = true;
$('#vehicle_close_btn').click();
if ($('#client_type').val() == 2) {
$('.branchdiv').hide();
$('.clienttypediv').show();
$('#entity_type_id_for_client').prop('required', false);
$('#branch_name').prop('required', false);
$('#client_branch_id').prop('required', false);
$('#branch_code').prop('required', false);
$('#name').prop('required', false);
// $('#mobile').prop('required', false);
$('#gst').prop('required', false);
$('#email').prop('required', false);
$('#dob').prop('required', true);
// $('#phone').prop('required', true)
$('#email2').prop('required', true);
$('#aadhar').prop('required', true);
$('#short_name').closest('.form-group').hide();
$('#short_name').removeAttr('required');
} else {
$('.branchdiv').show();
$('.clienttypediv').hide();
$('#entity_type_id_for_client').prop('required', true);
$('#branch_name').prop('required', true);
$('#client_branch_id').prop('required', true);
$('#branch_code').prop('required', true);
$('#name').prop('required', true);
// $('#mobile').prop('required', false);
$('#gst').prop('required', false);
$('#email').prop('required', true);
$('#dob').prop('required', false);
// $('#phone').prop('required', false);
$('#email2').prop('required', false);
$('#aadhar').prop('required', false);
$('#short_name').closest('.form-group').show();
$('#short_name').attr('required', 'required');
}
var myModal = new bootstrap.Modal(document.getElementById('upload_enrollment_model'));
myModal.show();
isVehicleFormSubmitting = false;
}else{
toastr.warning('Please select the Owner type', 'Warning');
}
$('#client_form').attr('data-id', 1);
// Save form data from the #vehicle_form to localStorage
saveFormDataToLocalStorage("#vehicle_form", "vehicleFormData");
}
if(branch_list != '') {
// console.log(branch_list[client_id]);
let data = branch_list[owner_id];
appendOwnerBranch(data);
}
})
$('#policy_type_id').change(function() {
$('#vehicle_no').val("").select2();
$('#client_type').val('');
$('#client_id').val('').select2();
$('#client_branch_id').val('').select2();
$('#vehicle_row_div').empty();
$('#client_row_div').empty();
// $('#actcual_clients').show();
let status = $('#policy_status').val();
$('#submitButton').show();
// if(status == "completed"){
$('#sales_row').show(); // REF : Venkatesh R - Status html Remove. so i removed the 'if'.
// }
var client_type = $('#client_type').val();
var value = $(this).val();
var selectedOption = $(this).find('option:selected');
let category = insurer_category[value] ?? null;
console.log('insurer_category', category);
// console.log('insurer_data', insurer_data);
// loop through all select fields
$('[name="follow_insurer_id[]"]').each(function () {
let select = $(this);
if(select){
appendInsurerByCategory(insurer_data, select, category);
}
});
var ebp = selectedOption.data('ebp');
var etp = selectedOption.data('etp');
var etep = selectedOption.data('etep');
var iep = selectedOption.data('iep');
var itp = selectedOption.data('itp');
var itep = selectedOption.data('itep');
var bap = selectedOption.data('bap');
var allocg = selectedOption.data('allocg');
var client_type_id = $('#client_type').val() ?? 1;
var is_co_pay_yes = $('#cop_yes').prop('checked') ? 1 : 0;
if(allocg == "EB"){
$('.hideter').hide();
$('.hidetp').hide();
$('.hidecoter').hide()
$('.hidecotp').hide()
}else{
$('.hidetp').show();
if(is_co_pay_yes == 1){
$('.hidecotp').show();
}else{
$('.hidecotp').hide();
}
if(bap == 'Fire' || bap == 'Marine Cargo' || bap == 'Marine Hull'){
$('.hideter').show();
if(is_co_pay_yes == 1){
$('.hidecoter').show();
}else{
$('.hidecoter').hide();
}
}else{
$('.hideter').hide();
}
}
// do not remove this commented item
// if(bap == 'Fire' || bap == 'Marine Cargo' || bap == 'Marine Hull'){
// $('.hideter').show();
// $('.hidetp').hide();
// if(is_co_pay_yes == 1){
// $('.hidecoter').show()
// $('.hidecotp').hide()
// }else{
// $('.hidecoter').hide()
// $('.hidecotp').hide()
// }
// }else{
// if(bap == 'Motor'){
// $('.hidetp').show()
// $('.hideter').hide()
// if(is_co_pay_yes == 1){
// $('.hidecotp').show()
// $('.hidecoter').hide()
// }else{
// $('.hidecoter').hide();
// $('.hidecotp').hide();
// }
// }else{
// $('.hideter').hide()
// $('.hidetp').hide()
// $('.hidecoter').hide()
// $('.hidecotp').hide()
// }
// }
var std_bp = 0;
var std_tp = 0;
var std_tep = 0;
if(client_type_id == 1){
std_bp = ebp;
std_tp = etp;
std_tep = etep;
}else{
std_bp = iep;
std_tp = itp;
std_tep = itep;
}
$('[name="standard_bp[]"]').val(std_bp);
$('[name="standard_tp[]"]').val(std_tp);
$('[name="standard_ter[]"]').val(std_tep);
if(value == 8){
$('#vhnodiv').show();
$('#client_type_div').hide();
$('#policyholdernamediv').hide();
$('#hide_vehicle_tab').show();
$('#client_type').addClass('readonly-select ');
$('#client_id').addClass('readonly-select ').select2('destroy');
$('#client_branch_id').addClass('readonly-select ').select2('destroy');
}else{
$('#vehicle_no').val("").select2();
$('#vhnodiv').hide();
$('#client_type_div').show();
$('#hide_vehicle_tab').hide();
$('#client_type').removeClass('readonly-select ');
$('#client_id').removeClass('readonly-select ').select2();
$('#client_branch_id').removeClass('readonly-select ').select2();
}
// do not remove this commented item for Client type list hide and show
// if(parseFloat(ebp) != 0.00 && parseFloat(iep) != 0.00){
// $('#client_type option[value="1"]').show();
// $('#client_type option[value="2"]').show();
// }else if(parseFloat(iep) == 0.00){
// $('#client_type option[value="2"]').hide();
// $('#client_type option[value="1"]').show();
// }else if(parseFloat(ebp) == 0.00){
// $('#client_type option[value="1"]').hide();
// $('#client_type option[value="2"]').show();
// }else{
// $('#client_type option[value="1"]').show();
// $('#client_type option[value="2"]').show();
// }
// if(value == 38 || value == 40){
// $('#tpa_div').hide();
// }else{
// $('#tpa_div').show();
// }
if(value == 1 || value == 2 || value == 3 || value == 4 || value == 5){
$('#tpa_div').show();
}else{
$('#tpa_div').hide();
}
if(value == 2 || value == 3 || value == 4 || value == 5){
$('#no_of_insured_div').show();
$('#no_of_dependents_div').show();
}else if(value == 1 || value == 6 || value == 7) {
$('#no_of_insured_div').show();
$('#no_of_dependents_div').hide();
}else{
$('#no_of_insured_div').hide();
$('#no_of_dependents_div').hide();
}
if(value == 1 || value == 2 || value == 3 || value == 4 || value == 5 || value == 6 || value == 7){
$('#is_cd_reduce_from_bds').prop('disabled',true).prop('checked', false);
$('.card_group_34').hide();
$('.card_group_37').hide();
$("select[name='cd_ac_no_for_child[]']").removeAttr("required");
}else{
$('#is_cd_reduce_from_bds').prop('disabled',false);
$('.card_group_34').show();
$('.card_group_37').show();
$("select[name='cd_ac_no_for_child[]']").attr('required', 'required');
}
});
})
$(document).on('change', 'input[type="checkbox"][name="co_share_type[]"]', function() {
let isAnyChecked = $('input[type="checkbox"][name="co_share_type[]"]:checked').length > 1;
if (isAnyChecked) {
toastr.warning('Only one leader can be selected.', 'Warning!');
$(this).prop('checked', false);
return;
}
let val = $(this).val();
let uniqueid = $(this).data('id');
let insurer = $('#follow_insurer_id_'+uniqueid).val()
var client_id = $('#client_id').val()
var insurer_id = $('#follow_insurer_id_'+uniqueid).find('option:selected').attr('data-id');
var insurer_branch_id = $('#follow_insurer_id_'+uniqueid).find('option:selected').attr('data-bid');
if(insurer == ""){
toastr.warning('Please select the insurer.', 'Warning!');
$(this).prop('checked', false);
return;
}else{
$('#insurer_id').val(insurer)
}
$('[name="calc_policy_issue_date[]"]').each(function () {
$(this).val('').removeClass('readonly-select');
});
let policy_issue_date = $('#policy_issue_date').val();
if ($('#cop_yes').is(':checked') && $(this).is(':checked')) {
$('#follower_policy_no_' + uniqueid).prop('readonly', true);
$('#calc_policy_issue_date_' + uniqueid).val(policy_issue_date).addClass('readonly-select');;
} else {
$('#follower_policy_no_' + uniqueid).prop('readonly', false);
$('#calc_policy_issue_date_1').val(policy_issue_date).addClass('readonly-select');
}
});
$(document).on('change', 'select[name="relationship[]"]', function() {
var selectedValues = [];
var hasDuplicate = false;
var currentSelect = $(this);
// Collect all selected values
$('select[name="relationship[]"]').each(function() {
var value = $(this).val();
if (value) {
if (selectedValues.indexOf(value) !== -1) {
hasDuplicate = true; // Mark if duplicate is found
}
selectedValues.push(value);
}
});
if (hasDuplicate) {
// Show toastr warning if duplicate is detected
toastr.warning('Duplicate relationship selected. Please choose a different one.');
// Reset the current selection to default (unselected)
currentSelect.val('');
}
// Highlight already selected options in other dropdowns
$('select[name="relationship[]"]').each(function() {
var current = $(this);
current.find('option').removeClass('highlighted'); // Remove previous highlights
current.find('option').each(function() {
if (selectedValues.indexOf($(this).val()) !== -1 && $(this).val() !== current.val()) {
$(this).addClass('highlighted'); // Add highlight class to duplicates
}
});
});
});
$(document).ready(function() {
$(document).on('change', '[name="follow_insurer_id[]"]', function() {
let insurer = $(this).val();
let unique_id = $(this).data('count');
let client_id = $('#client_id').val();
let policy_type_id = $('#policy_type_id').val();
console.log('insurer', insurer);
console.log('policy_type_id', policy_type_id);
console.log('follow_insurer_id client_id', client_id);
console.log('follow_insurer_id unique_id', unique_id);
$('#insurer_id').val(insurer)
if (!policy_type_id || !client_id) {
$(this).val('').select2();
toastr.warning(!policy_type_id ? 'Please select the Policy Type' : 'Please select the Client', 'WARNING');
}
});
});
//---------------------------------------------------------------------------------------------------------
//edit function
function getPolicyTransactionDataForEdit(input) {
console.log('############################# Get Policy Transaction Data For Edit #############################');
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
$('#inception_form_id')[0].reset();
// var id = $(input).attr('data-id');
var id = input;
console.log('Selected policy transaction ID:', id);
$.ajax({
url: '<?= base_url("/policy_tranction/inception/list2/") ?>' + id,
type: "GET",
dataType: 'json',
success: function(res) {
console.log('getPolicyTransactionDataForEdit', res);
if (res.status == true) {
hide_list_show_add_2();
var page_title = 'Edit Policy' + (res.data.client_short_name || res.data.policy_type || res.data.policy_no ?
' - ' + [res.data.client_short_name, res.data.policy_type, res.data.policy_no]
.filter(Boolean).join('-') : '');
$('#page_title').text(page_title);
$('#client_id_kyc').val(res.data.client_id);
$('#policy_tranction_primarykey_for_file_upload').val(res.data.id);
$('#client_id_for_vehicle_file_upload').val(res.data.client_id);
$('#vehicle_id_for_file_upload').val(res.data.vehicle_id);
$('#client_policy_id_for_file_upload').val(res.data.client_policy_id);
$('#policy_tranction_policy_number').val(res.data.policy_no);
if (res.data.agent_id) { $('#agent_id').val(res.data.agent_id).trigger('change');} else {$('#agent_id').val('').trigger('change');}
$('#agent_code').val(res.data.agent_code ?? '').change();
// $('#cd_ac_no_for_edit').val(res.data.cd_ac_no);
$('#cd_ac_pk_for_leader').val(res.data.cd_ac_pk);
// please don't forgot this ==> look at here please don't don't forgot
$('#docs_type_id').empty(); // ✅ clear old options
$('#docs_type_id').append(res.data.client_kyc_dd_data);
$('#tbody').empty();
$('#tbody').append(res.data.client_kyc_single_table);
// Setting values to correct fields
$('#policy_tranction_primarykey').val(res.data.id);
$('#client_policy_id').val(res.data.client_policy_id);
$('#client_id_for_edit').val(res.data.client_id);
$('#issuer').val(res.data.issuer);
$('#issue_type').val(res.data.issue_type);
setTimeout(function() {
$('#client_id').val(res.data.client_id).change();
$('#client_type').val(res.data.client_type);
$('#insurer_id').val(res.data.insurer_branch_id + '-' + res.data.insurer_id);
$('#vehicle_no').val(res.data.vehicle_id).select2();
}, 1000);
var tpaValue = '';
if (res.data.master_tpa_branch_id && res.data.master_tpa_id) {
tpaValue = res.data.master_tpa_branch_id + '-' + res.data.master_tpa_id;
} else if (res.data.tpa_branch_id && res.data.tpa_id) {
tpaValue = res.data.tpa_branch_id + '-' + res.data.tpa_id;
}
$('#tpa').val(tpaValue).change();
let policy_type_id_for_hide_tpa = res.data.master_policy_type_id;
if(policy_type_id_for_hide_tpa == 1 || policy_type_id_for_hide_tpa == 2 || policy_type_id_for_hide_tpa == 3 || policy_type_id_for_hide_tpa == 4 || policy_type_id_for_hide_tpa == 5 || policy_type_id_for_hide_tpa == 38 || policy_type_id_for_hide_tpa == 40){
$('#tpa_div').hide();
}else{
$('#tpa_div').show();
}
if(policy_type_id_for_hide_tpa == 1 || policy_type_id_for_hide_tpa == 2 || policy_type_id_for_hide_tpa == 3 || policy_type_id_for_hide_tpa == 4 || policy_type_id_for_hide_tpa == 5 || policy_type_id_for_hide_tpa == 6 || policy_type_id_for_hide_tpa == 7){
$('#is_cd_reduce_from_bds').prop('disabled',true).prop('checked', false)
}else{
$('#is_cd_reduce_from_bds').prop('disabled',false)
}
// if(res.data.client_policy_id != 0 && res.data.client_policy_id != null){
// $('#hide_file_upload').show();
// }else{
// $('#hide_file_upload').hide();
// }
$('#hide_file_upload').show();
if (res.data.master_policy_type_id) {
$('#policy_type_id').val(res.data.master_policy_type_id).change();
} else {
$('#policy_type_id').val(res.data.policy_type_id).change();
}
if (res.data.issue_type == 2) {
appendRenewalPolicies(res.data.renewal_policy);
}
if (res.data.is_addon == 2 || res.data.is_addon == 3) {
appendBasePolicyList(res.data.base_policy_data);
}
appendFileTableBody(res.data.pt_files);
appendVehicleFileTableBody(res.data.vehicle_docs);
if (res?.data?.pt_co_share_details?.length > 0) {
let new_data = res.data.pt_co_share_details[0];
$('#base_premium').val(new_data.bp_amt ?? '');
$('#tp_premium').val(new_data.tp_amt ?? '');
$('#ter_premium').val(new_data.tep_amt ?? '');
}
if (res.data.pt_co_share_details) {
if (!res.data.pt_co_share_details[0].follower_policy_no) {res.data.pt_co_share_details[0].follower_policy_no = res.data.policy_no;}
setTimeout(function() {
// populateTable(res.data.pt_co_share_details, res.data.cd_ac_pk);
populateCards(res.data.pt_co_share_details, res.data.cd_ac_pk);
let s = res.data.policy_start_date.split('/'); // ["DD","MM","YYYY"]
let e = res.data.policy_end_date.split('/'); // ["DD","MM","YYYY"]
let start = new Date(s[2], s[1] - 1, s[0]); // YYYY, MM-1, DD
let end = new Date(e[2], e[1] - 1, e[0]);
let months = (end.getFullYear() - start.getFullYear()) * 12 + (end.getMonth() - start.getMonth());
if (end.getDate() >= start.getDate()) { months += 1; }
let yearDiff = Math.ceil(months / 12);
// let yearDiff = (parseInt(e[2]) - parseInt(s[2])) + 1;
console.log("yearDiff =", yearDiff);
if (yearDiff > 1) { updateInsurerTitles(yearDiff); }
}, 1000);
}
// if (res.data.listed_insurers) {
// selectListedInsurers(res.data.listed_insurers);
// }
if (res.data.pt_co_share_details && res.data.pt_co_share_details.length > 0) {
$('#tab_content').empty();
count = 0;
$.each(res.data.pt_co_share_details, function(index, item) {
// appendNewTab(item); // Uncomment when implementing tab addition logic
});
}
setTimeout(function() {
$('#cd_ac_pk_for_leader').val(res.data.cd_ac_pk);
$('#client_branch_id').val(res.data.client_branch_id).change();
$('#source_client_policy_id').val(res.data.source_client_policy_id).change();
$('#base_policy').val(res.data.base_policy).select2();
// $('.loader').fadeOut();
// $('.loader-mask').delay(350).fadeOut('slow');
}, 2000);
setTimeout(function(){
// $('select[name="cd_ac_no_for_child[]"]').val(res.data.cd_ac_no ?? "");
$('select[name="cd_ac_no_for_child[]"] option').each(function() {
if ($(this).val() == res.data.id) {
$(this).prop('selected', true);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}else{
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}
});
}, 4000)
// Set additional fields
$('#policy_status').val(res.data.status);
$('#ref').val(res.data.ref);
$('#spl').val(res.data.spl);
$('#fund_received').val(res.data.fund_received);
$('#revenue_type').val(res.data.revenue_type);
$('#month').val(res.data.month);
setPolicyIssueMonth();
$('#policy_no').val(res.data.policy_no);
$('#policy_issue_date').val(res.data.policy_issue_date);
$('#policy_start_date').val(res.data.policy_start_date);
$('#policy_end_date').val(res.data.policy_end_date);
$('#emp_count').val(res.data.emp_count);
$('#dependent_count').val(res.data.dependent_count);
$('#ppteam').val(res.data.ppteam).change();
$('#fund_received').val(res.data.fund_received);
$('#renewal_date').val(res.data.renewal_date);
$('#rollover_date').val(res.data.rollover_date);
$('#policy_holder_name').val(res.data.policy_holder_name);
$('#location').val(res.data.location);
$('#installment').val(res.data.installment);
$('#installment_data').val(res.data.installment_data);
$('#last_action_date').val(res.data.last_action_date);
$('#process_start_date').val(res.data.created_at);
$('#remark').val(res.data.remarks);
// $('.current_date').show();
$('#sales_generated_by').val(res.data.sales_generated_by ?? '').change();
$('#serviced_by').val(res.data.serviced_by ?? '').change();
$('#base_cd_amount').val(res.data.base_cd_amount);
$('#issuer_branch').val(res.data.issuer_branch); // Hidden Field
console.log('res.data.base_cd_amount', res.data.base_cd_amount);
console.log('res.data.issuer_branch', res.data.issuer_branch);
// Additional form handling logic
if (res.data.issue_type == 2) {
$('#renewal').show();
// $('#source_client_policy_id').attr('required', true);
} else {
$('#renewal').hide();
// $('#source_client_policy_id').attr('required', false);
}
// Handle base policy visibility
if (res.data.is_addon == 2 || res.data.is_addon == 3) {
$('#base_policy_id').show();
} else {
$('#base_policy_id').hide();
}
// Handle co-share percentage
if (res.data.co_share == 1) {
$('#cop_yes').prop('checked', true);
$('.add-insurer-button').removeClass('d-none');
$('.payby').removeClass('d-none');
$('.card_group_2').show();
$('.card_group_3').removeClass('d-none');
$('.card_group_7').removeClass('d-none');
$('.card_group_35').removeClass('d-none');
} else {
$('#cop_yes').prop('checked', false);
$('.add-insurer-button').addClass('d-none');
$('.payby').addClass('d-none');
$('.card_group_2').hide();
$('.card_group_3').addClass('d-none');
$('.card_group_7').addClass('d-none');
$('.card_group_35').addClass('d-none');
setTimeout(function(){
$('input[name="co_share_per[]"], input[name="co_premium[]"]').each(function () {
$(this).val(''); // Clear value
console.log('Input cleared:', $(this).attr('name'));
});
}, 4000);
}
// Handle "Same Insured Name"
if (res.data.same_as_proposer == 1) {
$('#same_as_proposer').prop('checked', true);
$('#dynamic-form-container-for-insured').empty();
$('#family_details').hide();
} else {
$('#same_as_proposer').prop('checked', false);
if (res.data.client_type == 2 && res.data.policy_type_id != 8) {
$('#family_details').show();
$.each(res.data.emp_data, function(index, emp) {
appendInsured(emp);
});
} else {
$('#dynamic-form-container-for-insured').empty();
$('#family_details').hide();
}
}
// Handle brokerage pay by
if (res.data.bro_payable_by == 1) {
$('#bro_payable_by').prop('checked', true);
} else {
$('#bro_payable_by').prop('checked', false);
}
// Policy transaction status handling
if (res.data.status == "completed") {
$('#sales_row').show();
$('#policy_no').prop('required', true);
$('#policy_issue_date').prop('required', true);
$('#policy_start_date').prop('required', true);
$('#policy_end_date').prop('required', true);
// $('#tpa').prop('required', true);
// $('#emp_count').prop('required', true);
// $('#dependent_count').prop('required', true);
$('.follow_insurer').prop('required', true);
} else {
$('#sales_row').hide();
$('#policy_no').prop('required', false);
$('#policy_issue_date').prop('required', false);
$('#policy_start_date').prop('required', false);
$('#policy_end_date').prop('required', false);
// $('#tpa').prop('required', false);
// $('#emp_count').prop('required', false);
// $('#dependent_count').prop('required', false);
$('.follow_insurer').prop('required', false);
}
// Client type changes
if (res.data.client_type == 2) {
if (res.data.policy_type_id == 8) {
$('#policyholdernamediv').hide();
} else {
$('#policyholdernamediv').show();
}
$('.branchdiv').hide();
$('#client_branch_id').prop('required', false);
$('.card_group_34').hide();
$('.card_group_37').hide();
$("select[name='cd_ac_no_for_child[]']").removeAttr("required");
} else {
$('#policyholdernamediv').hide();
$('.branchdiv').show();
$('#client_branch_id').prop('required', true);
$('.card_group_34').show();
$('.card_group_37').show();
$("select[name='cd_ac_no_for_child[]']").attr('required', 'required');
}
//Vehicle File Upload Tab Hide And show
if(res.data.policy_type_id == 8){
$('#hide_vehicle_tab').show();
}else{
$('#hide_vehicle_tab').hide();
}
if (res.data.policy_with_corr == 1) {
$('#policy_with_corr').prop('checked', true);
} else {
$('#policy_with_corr').prop('checked', false);
}
if (res.data.is_cd_reduce_from_bds == 1) {
$('#is_cd_reduce_from_bds').prop('checked', true).prop('checked', false);
} else {
$('#is_cd_reduce_from_bds').prop('checked', false);
}
} else {
console.log('No data found');
}
},
error: function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error(xhr.responseText);
console.error(status, error);
}
});
//To check the invoice statement if statament is upload aginst this policy than change readonly the table fileds
checkInvoiceStatusToHideSubmitBtn(id)
console.log('############################# END Get Policy Transaction Data For Edit #############################');
}
function checkAndDistributeTax(input){
const event = window.event;
console.log("Event id:", event.target.id);
let policy_type_id = parseInt($('#policy_type_id').val());
console.log('policy_type_id', policy_type_id);
let cgst = parseFloat($('#cgst_' + input).val());
let sgst = parseFloat($('#sgst_' + input).val());
let igst = parseFloat($('#igst_' + input).val());
// ✅ Allow 0 only for policy types 2, 5, 7
const allowZero = [1,2,3,4,5,6,7,38,39,40].includes(policy_type_id);
console.log("allowZero", allowZero);
// 🔒 Validation: Disallow 0 or negative values for other policy types
if (!allowZero) {
if ((cgst <= 0 && (event.target.id).startsWith('cgst')) ||
(sgst <= 0 && (event.target.id).startsWith('sgst')) ||
(igst <= 0 && (event.target.id).startsWith('igst'))) {
toastr.warning('Tax value must be greater than 0 for this policy type.');
$('#'+ event.target.id).val('');
$('#igst_' + input).val('');
$('#cgst_' + input).val('');
$('#sgst_' + input).val('');
return;
}
}
if (((event.target.id).startsWith('cgst'))) {
if (!isFinite(cgst) || isNaN(cgst) || cgst === undefined) {
cgst = '';
}
$('#cgst_' + input).val(cgst);
if(cgst == ""){
$('#sgst_' + input).val(0);
}else{
$('#sgst_' + input).val(cgst);
}
$('#igst_' + input).val(0);
}
if (((event.target.id).startsWith('sgst'))) {
if (!isFinite(sgst) || isNaN(sgst) || sgst === undefined) {
sgst = '';
}
$('#sgst_' + input).val(sgst);
if(sgst == ""){
$('#cgst_' + input).val(0);
}else{
$('#cgst_' + input).val(sgst);
}
$('#igst_' + input).val(0);
}
if ((event.target.id).startsWith('igst')) {
$('#cgst_' + input).val(0);
$('#sgst_' + input).val(0);
}
// Ensure IGST, CGST, and SGST are never NaN, undefined, or Infinity
$('#igst_' + input).val(isFinite($('#igst_' + input).val()) ? $('#igst_' + input).val() : 0);
$('#cgst_' + input).val(isFinite($('#cgst_' + input).val()) ? $('#cgst_' + input).val() : 0);
$('#sgst_' + input).val(isFinite($('#sgst_' + input).val()) ? $('#sgst_' + input).val() : 0);
}
function amountCalculation(input) {
console.log('############################## AMOUNT CALCULATION ############################################')
console.log('amountCalculation : ' + input);
let selectedOption = $('#policy_type_id').find('option:selected');
let bap = selectedOption.data('bap');
let allocg = selectedOption.data('allocg');
// console.log('allocg:', allocg);
const event = window.event;
console.log("Event id:", event.target.id);
// Retrieve and parse the values or default to 0 if not a number
// let bp = parseFloat($('#base_premium_' + input).val()) || 0;
let bp = parseFloat($('#base_premium').val()) || 0;
let ncpa = parseFloat($('#non_comm_per_amt_' + input).val()) || 0;
var tp = 0;
if(allocg != 'EB'){
tp = parseFloat($('#tp_premium').val()) || 0;
// tp = parseFloat($('#tp_premium_' + input).val()) || 0;
}
// do not remove this commented item
// if(bap == 'Motor'){
// tp = parseFloat($('#tp_premium_' + input).val()) || 0;
// }
var tep = 0;
if(bap == 'Fire' || bap == 'Marine Cargo' || bap == 'Marine Hull'){
tep = parseFloat($('#ter_premium').val()) || 0;
// tep = parseFloat($('#ter_premium_' + input).val()) || 0;
}
//co-share premium
let cop = parseFloat($('#co_premium_' + input).val()) || 0;
var cotp = 0;
if(bap == 'Motor'){
cotp = parseFloat($('#co_tp_premium_' + input).val()) || 0;
}
var cotep = 0;
if(bap == 'Fire' || bap == 'Marine Cargo' || bap == 'Marine Hull'){
cotep = parseFloat($('#co_ter_premium_' + input).val()) || 0;
}
checkAndDistributeTax(input);
let cgst = parseFloat($('#cgst_' + input).val()) || 0;
let sgst = parseFloat($('#sgst_' + input).val()) || 0;
let igst = parseFloat($('#igst_' + input).val()) || 0;
let stamp_duty_amt = parseFloat($('#stamp_duty_' + input).val()) || 0;
let agreed_amount = parseFloat($('#agreed_amount_' + input).val()) || 0;
let agreed_bp_per = parseFloat($('#agreed_bp_' + input).val()) || 0;
let agreed_tp_per = parseFloat($('#agreed_tp_' + input).val()) || 0;
let agreed_tep_per = parseFloat($('#agreed_ter_' + input).val()) || 0;
let standard_bp_per = parseFloat($('#standard_bp_' + input).val()) || 0;
let standard_tp_per = parseFloat($('#standard_tp_' + input).val()) || 0;
let standard_tep_per = parseFloat($('#standard_tep_' + input).val()) || 0;
let co_share_per = parseFloat($('#co_share_per_' + input).val()) || 0;
let gst_amount = parseFloat($('#gst_amount_' + input).val()) || 0;
// console.log(standard_bp_per, standard_tp_per, standard_tep_per);
// console.log(agreed_bp_per, agreed_tp_per, agreed_tep_per);
// Calculate GST percentage
let gst_per = igst;
if (igst === 0) {
gst_per = parseFloat(cgst) + parseFloat(sgst);
}
// console.log('gst_per', gst_per);
// console.log('igst', igst);
// console.log('cgst', cgst);
// console.log('sgst', sgst);
// Calculate the total premium
let base_premium = cop;
let third_part_premium = cotp;
let terrisom_premium = cotep;
let tpTotal = cop + cotp + cotep;
if($('#bro_payable_by').is(':checked')){
tpTotal = bp + tp + tep;
base_premium = bp;
third_part_premium = tp;
terrisom_premium = tep;
}
if (!$('#cop_yes').is(':checked')) {
$('#co_premium_' + input).val(bp);
$('#co_tp_premium_' + input).val(tp);
$('#co_ter_premium_' + input).val(tep);
$('#co_share_per_' + input).val(100);
}
console.log('tpTotal', tpTotal);
ncpaTotal = tpTotal + ncpa;
let ncpa_gst_per_amt = (ncpaTotal * gst_per) / 100;
console.log('ncpa_gst_per_amt', ncpa_gst_per_amt);
let gst_per_amt = (tpTotal * gst_per) / 100;
console.log('gst_per_amt', gst_per_amt);
// $('#gst_amount_' + input).val(gst_per_amt.toFixed(2));
if (event.target.id.startsWith('non_comm_per_amt')) {
$('#gst_amount_' + input).val(!isNaN(ncpa_gst_per_amt) && isFinite(ncpa_gst_per_amt) ? ncpa_gst_per_amt.toFixed(2) : '0.00');
}else if (event.target.id.startsWith('gst_amount')) {
$('#gst_amount_' + input).val(!isNaN(gst_amount) && isFinite(gst_amount) ? gst_amount.toFixed(2) : '0.00');
}else{
if(ncpa != 0 && ncpa != ""){
$('#gst_amount_' + input).val(!isNaN(ncpa_gst_per_amt) && isFinite(ncpa_gst_per_amt) ? ncpa_gst_per_amt.toFixed(2) : '0.00');
}else{
$('#gst_amount_' + input).val(!isNaN(gst_per_amt) && isFinite(gst_per_amt) ? gst_per_amt.toFixed(2) : '0.00');
}
}
let finalTotal = tpTotal + gst_per_amt + stamp_duty_amt;
console.log('Summed Amount:', finalTotal);
//Total Amount
$('#total_amt_' + input).val(!isNaN(finalTotal) && isFinite(finalTotal) ? finalTotal.toFixed(2) : '0.00');
//---------------------------------------------------------------------------------------------------
let sum_of_agreed_premium = agreed_bp_per + agreed_tp_per + agreed_tep_per;
// console.log('sum_of_agreed_precentage : ', sum_of_agreed_premium);
var expectedAmount = 0;
if(agreed_amount > 0 ){
expectedAmount = agreed_amount;
// console.log('Formula 1 AGREED AMOUNT');
}else if(sum_of_agreed_premium > 0){
let sumOfTheAggreedPer = agreed_bp_per + agreed_tp_per + agreed_tep_per;
let sum_of_bp_amt = (base_premium * agreed_bp_per) /100
let sum_of_tp_amt = (third_part_premium * agreed_tp_per) / 100
let sum_of_tep_amt = (terrisom_premium * agreed_tep_per) / 100
expectedAmount = (sum_of_bp_amt + sum_of_tp_amt + sum_of_tep_amt) ?? 0;
// console.log('Formula 2 AGREED BP TP/TEP %');
}else{
let sumOfTheStandardPer = standard_bp_per + standard_tp_per + standard_tep_per;
let sum_of_bp_amt = (base_premium * standard_bp_per) /100
let sum_of_tp_amt = (third_part_premium * standard_tp_per) / 100
let sum_of_tep_amt = (terrisom_premium * standard_tep_per) / 100
expectedAmount = (sum_of_bp_amt + sum_of_tp_amt + sum_of_tep_amt) ?? 0;
// console.log('Formula 3 STANDARD BP TP/TEP %');
}
console.log('expectedAmount', expectedAmount);
//Expected Amount
$('#exp_amt_' + input).val(!isNaN(expectedAmount) && isFinite(expectedAmount) ? expectedAmount.toFixed(2) : '0.00');
let actual_bp_brokerage_amount = parseFloat($('#actual_bp_brokerage_amt_' + input).val()) || 0;
let actual_tp_brokerage_amount = parseFloat($('#actual_tp_brokerage_amt_' + input).val()) || 0;
let actual_tep_brokerage_amount = parseFloat($('#actual_tep_brokerage_amt_' + input).val()) || 0;
// console.log('actual_bp_brokerage_amount', actual_bp_brokerage_amount);
// console.log('actual_tp_brokerage_amount', actual_tp_brokerage_amount);
// console.log('actual_tep_brokerage_amount', actual_tep_brokerage_amount);
// let variance = expectedAmount - (actual_bp_brokerage_amount + actual_tp_brokerage_amount + actual_tep_brokerage_amount)
let variance = (actual_bp_brokerage_amount + actual_tp_brokerage_amount + actual_tep_brokerage_amount) - expectedAmount;
// console.log('variance', variance);
// $('#variance_' + input).val(!isNaN(variance) && isFinite(variance) ? variance.toFixed(2) : '0.00');
let policy_type_id = $('#policy_type_id').val();
if(policy_type_id > 7){
checkCDAmountForBasePremium(input);
}else{
console.log("First Skip the Ajax Call these are group policies");
}
setCoPremiums(input);
console.log('############################## END AMOUNT CALCULATION ############################################')
}
function actualAmountCalculation(input, field = null){
console.log('actualAmountCalculation function called')
console.log('actualAmountCalculation function input', input)
console.log('actualAmountCalculation function field', field)
let selectedOption = $('#policy_type_id').find('option:selected');
let bap = selectedOption.data('bap');
console.log('actualAmountCalculation function bap', bap)
let actual_bp_amt = parseFloat($('#actual_bp_amt_' + input).val()) || 0;
let actual_tp_amt = parseFloat($('#actual_tp_amt_' + input).val()) || 0;
let actual_tep_amt = parseFloat($('#actual_tep_amt_' + input).val()) || 0;
let actual_bp_per = parseFloat($('#actual_bp_per_' + input).val()) || 0;
let actual_tp_per = parseFloat($('#actual_tp_per_' + input).val()) || 0;
let actual_tep_per = parseFloat($('#actual_tep_per_' + input).val()) || 0;
let actual_bp_brokerage_amt = parseFloat($('#actual_bp_brokerage_amt_' + input).val()) || 0;
let actual_tp_brokerage_amt = parseFloat($('#actual_tp_brokerage_amt_' + input).val()) || 0;
let actual_tep_brokerage_amt = parseFloat($('#actual_tep_brokerage_amt_' + input).val()) || 0;
//------------------------------------------------------------------------------------------
if (field === 'bp_per') {
console.log()
if (actual_bp_amt > 0 && actual_bp_per >= 0) {
let actual_bp_brokerage_amount = (actual_bp_amt * actual_bp_per) / 100;
// $('#actual_bp_brokerage_amt_' + input).val(actual_bp_brokerage_amount.toFixed(2));
$('#actual_bp_brokerage_amt_' + input).val(!isNaN(actual_bp_brokerage_amount) && isFinite(actual_bp_brokerage_amount) ? actual_bp_brokerage_amount.toFixed(2) : '0.00');
}
} else if (field === 'bp_broker_amt') {
// If brokerage amount is changed, update percentage
if (actual_bp_amt > 0 && actual_bp_brokerage_amt >= 0) {
let actual_bp_percentage = (actual_bp_brokerage_amt / actual_bp_amt) * 100;
// $('#actual_bp_per_' + input).val(actual_bp_percentage.toFixed(2));
$('#actual_bp_per_' + input).val(!isNaN(actual_bp_percentage) && isFinite(actual_bp_percentage) ? actual_bp_percentage.toFixed(2) : '0.00');
}
} else if (field === 'bp_amt_for_calc') {
if(actual_bp_per > 0){
if (actual_bp_amt > 0 && actual_bp_per >= 0) {
let actual_bp_brokerage_amount = (actual_bp_amt * actual_bp_per) / 100;
// $('#actual_bp_brokerage_amt_' + input).val(actual_bp_brokerage_amount.toFixed(2));
$('#actual_bp_brokerage_amt_' + input).val(!isNaN(actual_bp_brokerage_amount) && isFinite(actual_bp_brokerage_amount) ? actual_bp_brokerage_amount.toFixed(2) : '0.00');
}
}else if(actual_bp_brokerage_amt > 0){
if (actual_bp_amt > 0 && actual_bp_brokerage_amt >= 0) {
let actual_bp_percentage = (actual_bp_brokerage_amt / actual_bp_amt) * 100;
// $('#actual_bp_per_' + input).val(actual_bp_percentage.toFixed(2));
$('#actual_bp_per_' + input).val(!isNaN(actual_bp_percentage) && isFinite(actual_bp_percentage) ? actual_bp_percentage.toFixed(2) : '0.00');
}
}else{
if (actual_bp_amt > 0 && actual_bp_per >= 0) {
let actual_bp_brokerage_amount = (actual_bp_amt * actual_bp_per) / 100;
// $('#actual_bp_brokerage_amt_' + input).val(actual_bp_brokerage_amount.toFixed(2));
$('#actual_bp_brokerage_amt_' + input).val(!isNaN(actual_bp_brokerage_amount) && isFinite(actual_bp_brokerage_amount) ? actual_bp_brokerage_amount.toFixed(2) : '0.00');
}
if (actual_bp_amt > 0 && actual_bp_brokerage_amt >= 0) {
let actual_bp_percentage = (actual_bp_brokerage_amt / actual_bp_amt) * 100;
// $('#actual_bp_per_' + input).val(actual_bp_percentage.toFixed(2));
$('#actual_bp_per_' + input).val(!isNaN(actual_bp_percentage) && isFinite(actual_bp_percentage) ? actual_bp_percentage.toFixed(2) : '0.00');
}
}
}
//-----------------------------------------------------------------------------------------
if(bap == 'Motor'){
if (field === 'tp_per') {
if (actual_tp_amt > 0 && actual_tp_per >= 0) {
let actual_tp_brokerage_amount = (actual_tp_amt * actual_tp_per) / 100;
// $('#actual_tp_brokerage_amt_' + input).val(actual_tp_brokerage_amount.toFixed(2));
$('#actual_tp_brokerage_amt_' + input).val(!isNaN(actual_tp_brokerage_amount) && isFinite(actual_tp_brokerage_amount) ? actual_tp_brokerage_amount.toFixed(2) : '0.00');
}
} else if (field === 'tp_broker_amt') {
// If brokerage amount is changed, update percentage
if (actual_tp_amt > 0 && actual_tp_brokerage_amt >= 0) {
let actual_tp_percentage = (actual_tp_brokerage_amt / actual_tp_amt) * 100;
// $('#actual_tp_per_' + input).val(actual_tp_percentage.toFixed(2));
$('#actual_tp_per_' + input).val(!isNaN(actual_tp_percentage) && isFinite(actual_tp_percentage) ? actual_tp_percentage.toFixed(2) : '0.00');
}
} else if (field === 'tp_amt_for_calc') {
if(actual_tp_amt > 0){
if (actual_tp_amt > 0 && actual_tp_per >= 0) {
let actual_tp_brokerage_amount = (actual_tp_amt * actual_tp_per) / 100;
// $('#actual_tp_brokerage_amt_' + input).val(actual_tp_brokerage_amount.toFixed(2));
$('#actual_tp_brokerage_amt_' + input).val(!isNaN(actual_tp_brokerage_amount) && isFinite(actual_tp_brokerage_amount) ? actual_tp_brokerage_amount.toFixed(2) : '0.00');
}
}else if(actual_tp_brokerage_amt > 0){
if (actual_tp_amt > 0 && actual_tp_brokerage_amt >= 0) {
let actual_tp_percentage = (actual_tp_brokerage_amt / actual_tp_amt) * 100;
// $('#actual_tp_per_' + input).val(actual_tp_percentage.toFixed(2));
$('#actual_tp_per_' + input).val(!isNaN(actual_tp_percentage) && isFinite(actual_tp_percentage) ? actual_tp_percentage.toFixed(2) : '0.00');
}
}else{
if (actual_tp_amt > 0 && actual_tp_per >= 0) {
let actual_tp_brokerage_amount = (actual_tp_amt * actual_tp_per) / 100;
// $('#actual_tp_brokerage_amt_' + input).val(actual_tp_brokerage_amount.toFixed(2));
$('#actual_tp_brokerage_amt_' + input).val(!isNaN(actual_tp_brokerage_amount) && isFinite(actual_tp_brokerage_amount) ? actual_tp_brokerage_amount.toFixed(2) : '0.00');
}
if (actual_tp_amt > 0 && actual_tp_brokerage_amt >= 0) {
let actual_tp_percentage = (actual_tp_brokerage_amt / actual_tp_amt) * 100;
// $('#actual_tp_per_' + input).val(actual_tp_percentage.toFixed(2));
$('#actual_tp_per_' + input).val(!isNaN(actual_tp_percentage) && isFinite(actual_tp_percentage) ? actual_tp_percentage.toFixed(2) : '0.00');
}
}
}
}else{
$('#actual_tp_brokerage_amt_' + input).val(0);
$('#actual_tp_per_' + input).val(0);
}
//-----------------------------------------------------------------------------------------
if(bap == 'Fire' || bap == 'Marine Cargo' || bap == 'Marine Hull'){
if (field === 'tep_per') {
if (actual_tep_amt > 0 && actual_tep_per >= 0) {
let actual_tep_brokerage_amount = (actual_tep_amt * actual_tep_per) / 100;
// $('#actual_tep_brokerage_amt_' + input).val(actual_tep_brokerage_amount.toFixed(2));
$('#actual_tep_brokerage_amt_' + input).val(!isNaN(actual_tep_brokerage_amount) && isFinite(actual_tep_brokerage_amount) ? actual_tep_brokerage_amount.toFixed(2) : '0.00');
}
} else if (field === 'tep_broker_amt') {
// If brokerage amount is changed, update percentage
if (actual_tep_amt > 0 && actual_tep_brokerage_amt >= 0) {
let actual_tep_percentage = (actual_tep_brokerage_amt / actual_tep_amt) * 100;
// $('#actual_tep_per_' + input).val(actual_tep_percentage.toFixed(2));
$('#actual_tep_per_' + input).val(!isNaN(actual_tep_percentage) && isFinite(actual_tep_percentage) ? actual_tep_percentage.toFixed(2) : '0.00');
}
} else if (field === 'tep_amt_for_calc') {
if(actual_tep_amt > 0){
if (actual_tep_amt > 0 && actual_tep_per >= 0) {
let actual_tep_brokerage_amount = (actual_tep_amt * actual_tep_per) / 100;
// $('#actual_tep_brokerage_amt_' + input).val(actual_tep_brokerage_amount.toFixed(2));
$('#actual_tep_brokerage_amt_' + input).val(!isNaN(actual_tep_brokerage_amount) && isFinite(actual_tep_brokerage_amount) ? actual_tep_brokerage_amount.toFixed(2) : '0.00');
}
}else if(actual_tep_brokerage_amt > 0){
if (actual_tep_amt > 0 && actual_tep_brokerage_amt >= 0) {
let actual_tep_percentage = (actual_tep_brokerage_amt / actual_tep_amt) * 100;
// $('#actual_tep_per_' + input).val(actual_tep_percentage.toFixed(2));
$('#actual_tep_per_' + input).val(!isNaN(actual_tep_percentage) && isFinite(actual_tep_percentage) ? actual_tep_percentage.toFixed(2) : '0.00');
}
}else{
if (actual_tep_amt > 0 && actual_tep_per >= 0) {
let actual_tep_brokerage_amount = (actual_tep_amt * actual_tep_per) / 100;
// $('#actual_tep_brokerage_amt_' + input).val(actual_tep_brokerage_amount.toFixed(2));
$('#actual_tep_brokerage_amt_' + input).val(!isNaN(actual_tep_brokerage_amount) && isFinite(actual_tep_brokerage_amount) ? actual_tep_brokerage_amount.toFixed(2) : '0.00');
}
if (actual_tep_amt > 0 && actual_tep_brokerage_amt >= 0) {
let actual_tep_percentage = (actual_tep_brokerage_amt / actual_tep_amt) * 100;
// $('#actual_tep_per_' + input).val(actual_tep_percentage.toFixed(2));
$('#actual_tep_per_' + input).val(!isNaN(actual_tep_percentage) && isFinite(actual_tep_percentage) ? actual_tep_percentage.toFixed(2) : '0.00');
}
}
}
}else{
$('#actual_tep_brokerage_amt_' + input).val(0);
$('#actual_tep_per_' + input).val(0);
}
//-----------------------------------------------------------------------------------------
let expectedAmount = parseFloat($('#exp_amt_' + input).val()) || 0;
var actual_bp_brokerage_amount2 = parseFloat($('#actual_bp_brokerage_amt_' + input).val()) || 0;
let actual_tp_brokerage_amount2 = parseFloat($('#actual_tp_brokerage_amt_' + input).val()) || 0;
let actual_tep_brokerage_amount2 = parseFloat($('#actual_tep_brokerage_amt_' + input).val()) || 0;
// let variance = expectedAmount - (actual_bp_brokerage_amount2 + actual_tp_brokerage_amount2 + actual_tep_brokerage_amount2)
let variance = (actual_bp_brokerage_amount2 + actual_tp_brokerage_amount2 + actual_tep_brokerage_amount2) - expectedAmount
// $('#variance_' + input).val(variance.toFixed(2));
$('#variance_' + input).val(!isNaN(variance) && isFinite(variance) ? variance.toFixed(2) : '0.00');
// console.log('expectedAmount', expectedAmount);
console.log('variance', variance);
}
// function co_share_percentage_calculation(input, extra = null){
// console.log('input', input)
// var inputs = $('input[name="co_share_per[]"]'); // Specifically select input elements
// console.log('Number of inputs:', inputs.length);
// let insurer_count = insurer_count_array.length;
// console.log('insurer_count', insurer_count);
// console.log('insurer_count_array', insurer_count_array);
// if ($('#cop_yes').is(':checked')) {
// console.log('cop_yes checked', $('#cop_yes').is(':checked'));
// if(input){
// if(insurer_count == 2){
// // Find the index of the value
// let index = insurer_count_array.indexOf(Number(input));
// let second_value_index = "";
// if (index !== -1) {
// console.log(`Value ${input} exists at index ${index}.`);
// let beforeValue = index > 0 ? insurer_count_array[index - 1] : null;
// let afterValue = index < insurer_count_array.length - 1 ? insurer_count_array[index + 1] : null;
// if (beforeValue != null) {
// second_value_index = beforeValue;
// } else if (afterValue != null) {
// second_value_index = afterValue;
// }
// }
// let value1 = $('#co_share_per_' + input).val();
// let value2 = $('#co_share_per_' + second_value_index).val();
// value1 = Number(value1);
// value2 = Number(value2);
// console.log('value1', value1);
// console.log('value2', value2);
// if(extra == "add"){
// if(value2 == 0){
// value1 = 50;
// value2 = 50;
// }else{
// if(value2 == 100){
// value1 = 50;
// value2 = 50;
// }else{
// value1 = 100 - value2;
// }
// }
// }else{
// if(value1 == 100){
// value2 = 0;
// }else{
// value2 = 100 - value1;
// }
// }
// console.log('value1', value1);
// console.log('value2', value2);
// $('#co_share_per_' + input).val(value1);
// $('#co_share_per_' + second_value_index).val(value2);
// }else if(insurer_count > 2){
// let total_val = 0;
// // Calculate the total sum of input values
// inputs.each(function () {
// let val = Number($(this).val()) || 0;
// if(val == 0){
// $(this).val(0)
// }
// total_val += val;
// });
// // if (total_val < 100) {
// // let remaining_val = 100 - total_val; // Calculate the remaining value
// // // Assign the remaining value to the first empty input
// // let assigned = false;
// // inputs.each(function () {
// // let current_val = Number($(this).val()) || 0;
// // if (current_val === 0 && !assigned) { // Assign only once
// // $(this).val(remaining_val);
// // assigned = true;
// // } else if (current_val === 0) {
// // $(this).val(0); // Set other empty inputs to 0
// // }
// // });
// // } else if (total_val > 100) {
// // toastr.warning('Sum of the co-share is greater than 100');
// // }
// }
// }else{
// inputs.each(function (index) {
// if (inputs.length === 1) {
// $(this).val(100);
// } else if(inputs.length === 2) {
// let first = $('#co_share_per_1').val();
// first = Number(first)
// let second_val = 100 - first;
// if (index === 1) {
// $(this).val(second_val);
// }
// }
// });
// }
// }
// let val_sum = 0;
// inputs.each(function () {
// let val = Number($(this).val()) || 0;
// val_sum += val;
// });
// if ($('#cop_yes').is(':checked')) {
// if (val_sum > 100) {
// toastr.warning('Sum of the co-share is greater than 100', 'WARNING');
// }
// }
// }
function co_share_percentage_calculation(changedEl = null) {
let inputs = $('input[name="co_share_per[]"]');
let count = inputs.length;
let copChecked = $('#cop_yes').is(':checked');
/* =========================
COP UNCHECKED
========================= */
if (!copChecked) {
inputs.val('');
return;
}
/* =========================
AUTO MODE (default / fetch / add / remove)
========================= */
if (changedEl === null) {
// Single card → empty (means 100)
if (count === 1) {
inputs.val('');
return;
}
// Multiple cards → auto split
let split = (100 / count).toFixed(2);
inputs.val(split);
return;
}
/* =========================
USER MODE (manual edit)
========================= */
let sum = 0;
let userTouched = false;
inputs.each(function () {
let v = $(this).val();
if (v !== '') {
userTouched = true;
sum += Number(v) || 0;
}
});
// Show warning ONLY if user changed something
if (userTouched && sum > 100) {
toastr.warning(
'Sum of the co-share is greater than 100',
'Warning'
);
}
}
$(document).on('change', '[name="base_premium"], [name="co_share_per[]"]', function() {
console.log('Triggered change event. base_premium');
// Get the first non-empty base premium value
// let basePremium = $('input[name="base_premium[]"]').toArray()
// .map(input => parseFloat($(input).val()) || 0)
// .find(value => value > 0) || 0;
let basePremium = parseFloat($('input[name="base_premium"]').val()) || 0;
console.log('Base Premium:', basePremium);
// Loop through all co_share_per[] fields
$('input[name="co_share_per[]"]').each(function(index) {
const coSharePer = parseFloat($(this).val()) || 0; // Get co_share_per value
const coPremium = (basePremium * coSharePer) / 100; // Calculate co_premium
console.log(`Index: ${index}, Co-Share Percentage: ${coSharePer}, Co-Premium: ${coPremium}`);
// Update corresponding co_premium field
$('input[name="co_premium[]"]').eq(index).val(coPremium.toFixed(2));
});
});
$(document).on('change', '[name="tp_premium"], [name="co_share_per[]"]', function() {
console.log('Triggered change event.');
// Get the first non-empty base premium value
let tpPremium = $('input[name="tp_premium[]"]').toArray()
.map(input => parseFloat($(input).val()) || 0)
.find(value => value > 0) || 0;
console.log('TP Premium:', tpPremium);
// Loop through all co_share_per[] fields
$('input[name="co_share_per[]"]').each(function(index) {
const coSharePer = parseFloat($(this).val()) || 0; // Get co_share_per value
const coPremium = (tpPremium * coSharePer) / 100; // Calculate co_premium
console.log(`Index: ${index}, Co-Share Percentage: ${coSharePer}, Co-TP-Premium: ${coPremium}`);
// Update corresponding co_premium field
$('input[name="co_tp_premium[]"]').eq(index).val(coPremium.toFixed(2));
});
});
$(document).on('change', '[name="ter_premium"], [name="co_share_per[]"]', function() { // CHANGED: [name="ter_premium[]"] to [name="ter_premium"]
console.log('Triggered change event.');
// Get the first non-empty base premium value
let terPremium = $('input[name="ter_premium[]"]').toArray()
.map(input => parseFloat($(input).val()) || 0)
.find(value => value > 0) || 0;
console.log('TEP Premium:', terPremium);
// Loop through all co_share_per[] fields
$('input[name="co_share_per[]"]').each(function(index) {
const coSharePer = parseFloat($(this).val()) || 0; // Get co_share_per value
const coPremium = (terPremium * coSharePer) / 100; // Calculate co_premium
console.log(`Index: ${index}, Co-Share Percentage: ${coSharePer}, Co-TEP-Premium: ${coPremium}`);
// Update corresponding co_premium field
$('input[name="co_ter_premium[]"]').eq(index).val(coPremium.toFixed(2));
});
});
function setCoPremiums(input) {
// let bp = $('input[name="base_premium[]"]').toArray()
// .map(input => parseFloat($(input).val()) || 0)
// .find(value => value > 0) || 0;
// let tp = $('input[name="tp_premium[]"]').toArray()
// .map(input => parseFloat($(input).val()) || 0)
// .find(value => value > 0) || 0;
// let tep = $('input[name="ter_premium[]"]').toArray()
// .map(input => parseFloat($(input).val()) || 0)
// .find(value => value > 0) || 0;
let bp = parseFloat($('#base_premium').val()) || 0;
let tp = parseFloat($('#tp_premium').val()) || 0;
let tep = parseFloat($('#ter_premium').val()) || 0;
let coSharePer = parseFloat($('#co_share_per_' + input).val()) || 0;
let cop = (bp * coSharePer) / 100;
let cotp = (tp * coSharePer) / 100;
let cotep = (tep * coSharePer) / 100;
// Log all values to console
console.log(`Input: ${input}`);
console.log(`Base Premium (bp): ${bp}`);
console.log(`TP Premium (tp): ${tp}`);
console.log(`TEP Premium (tep): ${tep}`);
console.log(`Co-Share Percentage (coSharePer): ${coSharePer}`);
console.log(`Co Premium (cop): ${cop.toFixed(2)}`);
console.log(`Co TP Premium (cotp): ${cotp.toFixed(2)}`);
console.log(`Co TEP Premium (cotep): ${cotep.toFixed(2)}`);
$('#co_premium_' + input).val(cop.toFixed(2));
$('#co_tp_premium_' + input).val(cotp.toFixed(2));
$('#co_ter_premium_' + input).val(cotep.toFixed(2));
}
function select_leader_disable_premium_amt(input, value) {
if ($(input).is(':checked')) {
// Disable and add readonly-select class to all premiums except the one with the given value
// $('input[name="base_premium[]"]').addClass('readonly-select');
// $('#base_premium_' + value).removeClass('readonly-select');
// $('input[name="tp_premium[]"]').addClass('readonly-select');
// $('#tp_premium_' + value).removeClass('readonly-select');
// $('input[name="ter_premium[]"]').addClass('readonly-select');
// $('#ter_premium_' + value).removeClass('readonly-select');
$('input[name="base_premium"]').addClass('readonly-select');
$('#base_premium').removeClass('readonly-select');
$('input[name="tp_premium"]').addClass('readonly-select');
$('#tp_premium').removeClass('readonly-select');
$('input[name="ter_premium"]').addClass('readonly-select');
$('#ter_premium').removeClass('readonly-select');
$('input[name="stamp_duty[]"]').addClass('readonly-select');
$('#stamp_duty_' + value).removeClass('readonly-select');
$('input[name="co_premium[]"]').addClass('readonly-select');
$('#co_premium_' + value).removeClass('readonly-select');
$('input[name="co_tp_premium[]"]').addClass('readonly-select');
$('#co_tp_premium_' + value).removeClass('readonly-select');
$('input[name="co_ter_premium[]"]').addClass('readonly-select');
$('#co_ter_premium_' + value).removeClass('readonly-select');
} else {
// Enable and remove readonly-select class from all premiums except the one with the given value
// $('input[name="base_premium[]"]').removeClass('readonly-select');
// $('input[name="tp_premium[]"]').removeClass('readonly-select');
// $('input[name="ter_premium[]"]').removeClass('readonly-select');
$('input[name="base_premium"]').removeClass('readonly-select');
$('input[name="tp_premium"]').removeClass('readonly-select');
$('input[name="ter_premium"]').removeClass('readonly-select');
$('input[name="stamp_duty[]"]').removeClass('readonly-select');
$('input[name="co_premium[]"]').removeClass('readonly-select');
$('input[name="co_tp_premium[]"]').removeClass('readonly-select');
$('input[name="co_ter_premium[]"]').removeClass('readonly-select');
}
}
function select_leader_disable_premium_amt_in_edit() {
$('.insurer-card').each(function () {
let value = $(this).data('count'); // ✅ insurer index (1,2,3...)
if ($('#co_share_type_' + value).is(':checked')) {
// // BASE PREMIUM
// $('input[name="base_premium[]"]').addClass('readonly-select');
// $('#base_premium_' + value).removeClass('readonly-select');
// // TP PREMIUM
// $('input[name="tp_premium[]"]').addClass('readonly-select');
// $('#tp_premium_' + value).removeClass('readonly-select');
// // TER PREMIUM
// $('input[name="ter_premium[]"]').addClass('readonly-select');
// $('#ter_premium_' + value).removeClass('readonly-select');
// BASE PREMIUM
$('input[name="base_premium"]').addClass('readonly-select');
$('#base_premium').removeClass('readonly-select');
// TP PREMIUM
$('input[name="tp_premium"]').addClass('readonly-select');
$('#tp_premium').removeClass('readonly-select');
// TER PREMIUM
$('input[name="ter_premium"]').addClass('readonly-select');
$('#ter_premium').removeClass('readonly-select');
// STAMP DUTY
$('input[name="stamp_duty[]"]').addClass('readonly-select');
$('#stamp_duty_' + value).removeClass('readonly-select');
// CO PREMIUM
$('input[name="co_premium[]"]').addClass('readonly-select');
$('#co_premium_' + value).removeClass('readonly-select');
// CO TP PREMIUM
$('input[name="co_tp_premium[]"]').addClass('readonly-select');
$('#co_tp_premium_' + value).removeClass('readonly-select');
// CO TER PREMIUM
$('input[name="co_ter_premium[]"]').addClass('readonly-select');
$('#co_ter_premium_' + value).removeClass('readonly-select');
// CD ACCOUNT
$('select[name="cd_ac_no_for_child[]"]').addClass('readonly-select');
$('#cd_ac_no_' + value).removeClass('readonly-select');
}
});
}
function validateRange(input) {
// if (input.value < 1) input.value = 1;
if (input.value > 100) input.value = 100;
}
function setRenewalPolicyData(input) {
var selectedOption = $(input).find('option:selected');
var policy_no = selectedOption.data('policy');
var insurer = selectedOption.data('insurer');
var insurer_branch_id = selectedOption.data('ib');
var tpa = selectedOption.data('tpa');
var tpa_branch_id = selectedOption.data('tpab');
var cd_ac_no = selectedOption.data('cd');
var policy_start_date = selectedOption.data('ps');
var policy_end_date = selectedOption.data('pe');
// console.log('policy_no', policy_no);
// console.log('insurer', insurer);
// console.log('cd_ac_no', cd_ac_no);
// console.log('insurer_branch_id', insurer_branch_id);
$('#renewal_policy_start_date').val(policy_start_date);
$('#renewal_policy_end_date').val(policy_end_date);
}
function appendInsured(data = null) {
const container = document.getElementById('dynamic-form-container-for-insured');
// console.log(container);
const newRow = document.createElement('div');
newRow.className = 'form-row insured-dynamic-form-row';
newRow.innerHTML = `
<input type="hidden" id="emp_id" name="emp_id[]">
<input type="hidden" id="emp_policy_id" name="emp_policy_id[]">
<div class="form-group col-md-5">
<label for="file_name">Name<span class="text-danger"></span></label>
<input type="text" class="form-control" id="name" name="family_name[]" placeholder="Enter Name" required>
</div>
<div class="form-group col-md-5">
<label for="relationship">Relationship<span class="text-danger"></span></label>
<select class="form-control" id="relationship" name="relationship[]" required>
<option value="" disabled selected>Select Relationship</option>
<option value="Father">Father</option>
<option value="Mother">Mother</option>
<option value="Son">Son</option>
<option value="Daughter">Daughter</option>
<option value="Father in law">Father-in-law</option>
<option value="Mother in law">Mother-in-law</option>
<option value="Spouse">Spouse</option>
</select>
</div>
<div class="form-group col-md-2" style="position: relative;top: 28px;">
<a class="btn btn-danger waves-effect waves-light" onclick="removeRemoveInsured(this)">x</a>
<a class="btn btn-primary waves-effect waves-light mr-1" onclick="appendInsured(this)">+</a>
</div>
`;
container.appendChild(newRow);
if (data !== null && data.db_column_name !== undefined) {
const selectElement = newRow.querySelector('.db-column-name-select');
selectElement.value = data.db_column_name;
}
if (data !== null) {
if (data.name) {
newRow.querySelector('#name').value = data.name;
}
if (data.relationship) {
newRow.querySelector('#relationship').value = data.relationship;
}
if (data.id) {
newRow.querySelector('#emp_id').value = data.id;
}
}
}
function removeRemoveInsured(element) {
const container = document.getElementById('dynamic-form-container');
const rows = container.querySelectorAll('.insured-dynamic-form-row');
if (rows.length > 1) {
const row = element.closest('.insured-dynamic-form-row');
row.remove();
}
}
function appendOwner(data) {
$('#owner').empty();
$('#owner').append($('<option>', {
value: '',
text: 'Select Owner'
}));
// $('#owner').append(
// $('<option>', {
// value: 'add_client',
// text: ' + Add Owner',
// })
// );
$.each(data, function(index, item) {
let client_show_name = item.client_name;
if (item.client_type == 2) {
client_show_name = item.client_name + ' - ' + (item.dob ?? 'N/A');
}
var option = $('<option>', {
value: item.id,
text: client_show_name,
});
$('#owner').append(option);
});
}
function appendOwnerBranch(data) {
$('#owner_branch').empty();
$('#owner_branch').append($('<option>', {
value: '',
text: 'Select Branch'
}));
$.each(data, function(index, item) {
var option = $('<option>', {
value: item.id,
text: item.branch_name
});
$('#owner_branch').append(option);
});
}
function selectListedInsurers(listedInsurers) {
listedInsurers = JSON.parse(listedInsurers);
// Loop through each insurer-branch combination
$.each(listedInsurers, function(index, value) {
// Use value in the format 'branch_id-insurer_id'
$('#listed_insurers option').each(function() {
if ($(this).val() === value) {
$(this).prop('selected', true); // Select the matching option
}
});
});
// Trigger change for plugins (like Select2)
$('#listed_insurers').trigger('change');
}
function checkInvoiceStatusToHideSubmitBtn(id){
$.ajax({
url: '<?php echo base_url('util/checkInvoiceStatus/');?>'+ id,
type: "GET",
dataType: 'json',
success: function (res) {
console.log('checkInvoiceStatusToHideSubmitBtn response', res)
if(res.status == true){
if(res.count > 0){
$('#submitButton').hide()
}else{
$('#submitButton').show()
}
}else{
console.log(res.message, 'warning');
}
},
error: function (xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
}
});
}
function getCDAccountNumber(input)
{
console.log('##########################################')
console.log('getCDAccountNumber')
console.log('##########################################')
// var client_id = $('#client_id').val()
// var insurer_id = $('#insurer_id').find('option:selected').attr('data-id');
// var client_id = $('#client_id').val()
// var insurer_id = $(this).val();
let insurer = $(input).val();
let unique_id = $(input).data('count');
let client_id = $('#client_id').val();
let client_type = $('#client_type').val();
let policy_type_id = $('#policy_type_id').val();
let insurer_id = $(input).find('option:selected').attr('data-id');
let insurer_branch_id = $(input).find('option:selected').attr('data-bid');
console.log('insurer', insurer);
console.log('follow_insurer_id client_id', client_id);
console.log('follow_insurer_id insurer_id', insurer_id);
console.log('follow_insurer_id insurer_branch_id', insurer_branch_id);
console.log('follow_insurer_id unique_id', unique_id);
if(client_id && insurer_id){
if(client_type == 1 && policy_type_id > 7){
$.ajax({
url: '<?= base_url("/util/getCDAccNoByClientAndInsurer/") ?>' + client_id + '/' + insurer_id + '/' + insurer_branch_id,
type: "GET",
dataType: 'json',
success: function(res) {
console.log('cd_res', res);
if(res.status == true){
// appendCDAccountNumber(res.data[0].cd_ac_no, unique_id)
appendCDAccountNumber(res.data, unique_id)
let balanceDiv = document.getElementById('cd_current_balance_info_' + unique_id);
setTimeout(function(){
let dropdown_value = $('#cd_ac_no_' + unique_id).val();
console.log("dropdown_value",dropdown_value)
res.data.forEach(function(item) {
if (item.id == dropdown_value) { // match found
if (item.opening_bal !== null) {
$('#cd_current_balance_info_' + unique_id).val(item.opening_bal);
balanceDiv.innerHTML =
'<span class="text-success">' + item.opening_bal + '</span>' +
' <span class="vehicle-badge success">✓ CD balance Amount</span>';
balanceDiv.classList.add('show');
}
}
});
$('.card_group_34').show();
$('.card_group_37').show();
$("select[name='cd_ac_no_for_child[]']").attr('required', 'required');
}, 1000);
// if(res.data[0].id){
// $('#cd_ac_pk_for_leader').val(res.data[0].id)
// }
}else{
var pt_id = $('#policy_tranction_primarykey').val();
if(pt_id == ''){
toastr.warning('The insurer does not has a CD account number');
}
console.log('The insurer does not has a CD account number');
$('#cd_ac_no_'+unique_id).empty();
$('#cd_ac_no_'+unique_id).append($('<option>', {
value: '',
text: 'Select CD No',
}));
$('#cd_ac_no_'+unique_id).append($('<option>', {
value: 'add_cd',
text: '+ Add CD'
}));
}
},
error: function(xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
}
});
}else{
console.log('client_type', client_type);
}
}else{
console.error('Client ID or Insurer ID Not found')
console.log('client_id', client_id);
console.log('insurer_id', insurer_id);
}
}
function appendCDAccountNumber(data, unique_id, new_cd_ac_no = null)
{
console.log('appendCDAccountNumber', data);
$('#cd_ac_no_'+unique_id).empty();
$('#cd_ac_no_'+unique_id).append($('<option>', {
value: '',
text: 'Select CD No',
}));
if(data.length == 0){
$('#cd_ac_no_'+unique_id).append($('<option>', {
value: 'add_cd',
text: '+ Add CD'
}));
}
$.each(data, function(index, item) {
var option = $('<option>', {
value: item.id,
text: item.cd_ac_no,
});
if (new_cd_ac_no == item.id) {
option.attr('selected', true);
}
$('#cd_ac_no_'+unique_id).append(option);
});
}
function addCDAccountNumber_old(input)
{
var val = $(input).val();
var uniqueid = $(input).data('count');
$('#premium_details_unique_id').val(uniqueid);
var client_id = $('#client_id').val();
let insurer_id = $('#follow_insurer_id_'+uniqueid).val();
let leader = $('#co_share_type_' + uniqueid).is(':checked');
let isAnyLeaderChecked = $('input[type="checkbox"][name="co_share_type[]"]:checked').length == 0;
let cop_yes = $('#cop_yes').is(':checked');
console.log('addCDAccountNumber', 'addCDAccountNumber');
console.log('client_id', client_id);
console.log('insurer_id', insurer_id);
console.log('leader', leader);
if(client_id == '' || insurer_id == ''){
toastr.warning('Client, Insurer, or both do not exist.', 'Warning!');
$(input).val('')
return false;
}
if (isAnyLeaderChecked) {
if(cop_yes){
$('#cd_ac_no_'+uniqueid).val('');
toastr.warning('Please select the Leader.', 'Warning!');
return false;
}
}
if(!leader){
if(cop_yes){
$('#cd_ac_no_'+uniqueid).val('');
toastr.warning('The CD account number not for the Leader.', 'Warning!');
return false;
}
}
if(val == 'add_cd')
{
var myModal = new bootstrap.Modal(document.getElementById('cd_form_modal'));
myModal.show();
$(input).val('')
}else{
console.log('cd_ac_pk', val)
$('#cd_ac_pk_for_leader').val(val)
getCdAmount(val, uniqueid);
}
}
function addCDAccountNumber(input)
{
var $input = $(input);
var val = $input.val();
var uniqueid = $input.data('count');
var client_id = $('#client_id').val();
var insurer_id = $('#follow_insurer_id_' + uniqueid).val();
var isCurrentLeader = $('#co_share_type_' + uniqueid).is(':checked');
var isAnyLeaderSelected = $('input[name="co_share_type[]"]:checked').length > 0;
var cop_yes = $('#cop_yes').is(':checked');
// Missing base data
if (!client_id || !insurer_id) {
toastr.warning('Client or Insurer does not exist.', 'Warning!');
return;
}
// COP enabled but no leader selected
if (cop_yes && !isAnyLeaderSelected) {
toastr.warning('Please select a Leader.', 'Warning!');
$input.val('');
return;
}
// CD allowed only for leader
if (cop_yes && !isCurrentLeader) {
toastr.warning(
'CD account number allowed only for Leader.',
'Warning!'
);
// Clear current select
$input.val('');
// Disable CD for NON-leaders, enable only leader, clear balance div
$('select.follow_insurer_cd').each(function () {
var count = $(this).data('count');
var isLeaderRow = $('#co_share_type_' + count).is(':checked');
// Get the corresponding balance div
var balanceDiv = document.getElementById('cd_current_balance_info_' + count);
if (!isLeaderRow) {
$(this)
.prop('disabled', true)
.removeAttr('required')
.val('');
// Clear balance div if it exists
if (balanceDiv) {
balanceDiv.innerHTML = "";
}
} else {
$(this)
.prop('disabled', false)
.attr('required', true);
}
});
return;
}
// Add CD
if (val === 'add_cd') {
$('#premium_details_unique_id').val(uniqueid);
new bootstrap.Modal(
document.getElementById('cd_form_modal')
).show();
$input.val('');
return;
}
// ✅ Valid selection (leader only)
$('#cd_ac_pk_for_leader').val(val);
getCdAmount(val, uniqueid);
}
function restrictCDACNO(currentSelect){
const selectedValue = $(currentSelect).val();
if (selectedValue) {
$('.follow_insurer_cd').not(currentSelect).prop('disabled', true);
} else {
$('.follow_insurer_cd').prop('disabled', false);
}
}
function removeAllCardsExceptFirst(cardClass) {
const $cards = $('.' + cardClass);
if ($cards.length <= 1) return; // nothing to remove
$cards.not(':first').remove(); // remove all except first
// Reset insurerCount to 1 safely
insurerCount = 1;
}
//---------------------------------------------------------------------------------------------------------
function convertToMySQLDate(dateString) {
// console.log('convertToMySQLDate' + dateString);
if(dateString !== "" && dateString !== undefined)
{
// Split the input date string by '/'
const [day, month, year] = dateString.split('/');
// Return the date in MySQL format: YYYY-MM-DD
return `${year}-${month}-${day}`;
}
return '';
}
function convertMonthYearToMySQLDate(dateString) {
console.log('convertMonthYearToMySQLDate: ' + dateString);
if(dateString !== "" && dateString !== undefined) {
// Map month abbreviations to their respective numbers
const months = {
'jan': '01', 'feb': '02', 'mar': '03', 'apr': '04',
'may': '05', 'jun': '06', 'jul': '07', 'aug': '08',
'sep': '09', 'oct': '10', 'nov': '11', 'dec': '12'
};
// Split the input string by '/'
const parts = dateString.toLowerCase().split('/');
const month = months[parts[0]]; // Convert the month abbreviation to its numeric form
const year = parts[1]; // Year remains unchanged
// Format the date as YYYY-MM-DD
if (month && year) {
return `${year}-${month}-01`;
}
}
return '';
}
$("#inception_form_id").submit(function(event) {
if (!this.checkValidity()) { return; }
event.preventDefault();
let policy_type_id = $('#policy_type_id').val();
var isValid = $('#inception_form_id').parsley().validate();
var client_type_id = $('#client_type').val();
var policy_status = $('#policy_status').val();
var pt_form_sumbit_handler = $('#pt_form_sumbit_handler').val();
if (!isValid) {
$('#inception_form_id').find('input, select, textarea').each(function() {
if ($(this).parsley().isValid() === false && !$(this).val()) {
console.log(' :) Empty field ID:', this.id);
}
});
console.log('Form is Empty', 'Warning');
return;
}
let hasEmptyInsurer = false;
let firstEmptyField = null;
// $('select[name="follow_insurer_id[]"]').each(function() {
// const $field = $(this);
// const errorId = 'error-' + $field.attr('id');
// // Remove any old message
// $('#' + errorId).remove();
// if ($field.val().trim() === "") {
// hasEmptyInsurer = true;
// $field.addClass('is-invalid');
// // Add error message only once
// if (!$field.next('.text-danger').length) {
// $field.after(`<small id="${errorId}" class="text-danger">This value is required.</small>`);
// }
// if (!firstEmptyField) {
// firstEmptyField = this; // store first empty field
// }
// } else {
// $field.removeClass('is-invalid');
// $('#' + errorId).remove(); // remove if filled
// }
// });
$('select[name="follow_insurer_id[]"]').each(function() {
if ($(this).val().trim() === "") {
hasEmptyInsurer = true;
$(this).addClass('is-invalid');
if (!firstEmptyField) {
firstEmptyField = this; // store the first invalid field
}
} else {
$(this).removeClass('is-invalid');
}
});
if (hasEmptyInsurer) {
if (firstEmptyField) {
$(firstEmptyField).focus();
}
toastr.warning('Please select all Insurers before submitting', 'Warning');
return;
}
if(pt_form_sumbit_handler == 0){
toastr.warning('Base premium greater than CD Amount', 'Warning');
return;
}
if(client_type_id == 1 && policy_status == 'completed' && policy_type_id > 7){
let isAnyDropdownSelected = $('select[name="cd_ac_no_for_child[]"]').filter(function() {
return $(this).val() !== "";
}).length > 0;
console.log('isAnyDropdownSelected', isAnyDropdownSelected);
if(!isAnyDropdownSelected){
toastr.warning('CD account number is Empty', 'Warning');
return;
}
}
let co_share_type = []; // Initialize an object to mimic the array structure
$('[name="co_share_type[]"]').each(function(index) {
let value = $(this).is(':checked');
if(value){
co_share_type.push(1); // Assign value with index as key
}else{
co_share_type.push(2); // Assign value with index as key
}
});
// console.log(co_share_type);
var shortListedInsurer = $("#listed_insurers").val();
// console.log('shortListedInsurer : ', shortListedInsurer);
form_action = '<?= base_url('policy_tranction/inception/create') ?>';
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
var formData = new FormData($('#inception_form_id')[0]);
const jsonString = JSON.stringify(shortListedInsurer);
// console.log('jsonString', jsonString);
// Append the JSON string to the FormData object
formData.append('listed_insurers', jsonString);
co_share_type.forEach((value, index) => {
formData.append(`co_share_type[${index}]`, value);
});
let bp = document.getElementById("base_premium").value;
let tp = document.getElementById("tp_premium").value;
let ter = document.getElementById("ter_premium").value;
for (let i = 0; i < insurerCount; i++) {
formData.append(`base_premium[${i}]`, bp);
formData.append(`tp_premium[${i}]`, tp);
formData.append(`ter_premium[${i}]`, ter);
}
//covert date to mysql format
// alert(formData.get('policy_issue_date'));
formData.set('policy_issue_date',convertToMySQLDate(formData.get('policy_issue_date')));
formData.set('policy_start_date',convertToMySQLDate(formData.get('policy_start_date')));
formData.set('policy_end_date',convertToMySQLDate(formData.get('policy_end_date')));
formData.set('renewal_date',convertToMySQLDate(formData.get('renewal_date')));
formData.set('rollover_date',convertToMySQLDate(formData.get('rollover_date')));
// formData.set('last_action_date',convertToMySQLDate(formData.get('last_action_date')));
formData.set('month',convertMonthYearToMySQLDate(formData.get('month')));
// formData['policy_start_date'] = convertToMySQLDate(formData['policy_start_date']);
// formData['policy_end_date'] = convertToMySQLDate(formData['policy_end_date']);
// formData['renewal_date'] = convertToMySQLDate(formData['renewal_date']);
// formData['rollover_date'] = convertToMySQLDate(formData['rollover_date']);
// formData['month'] = convertMonthYearToMySQLDate(formData['month']);
// console.log(formData);
// return false;
$.ajax({
data: formData,
url: form_action,
type: "POST",
dataType: 'json',
processData: false,
contentType: false,
success: function(res) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.log('inception_form_response', res)
if (res.status == true) {
toastr.success(res.message, 'Success');
show_list_hide_add();
window.location.href = redirect_url;
$('#policy_tranction_primarykey').val(res.pt_id);
$('#client_id_kyc').val(res.data.client_id);
$('#policy_tranction_primarykey_for_file_upload').val(res.pt_id);
$('#client_policy_id_for_file_upload').val(res.data.client_policy_id);
//if(res.data.client_policy_id != 0 && res.data.client_policy_id != null){
// $('#hide_file_upload').show();
//}else{
// $('#hide_file_upload').hide();
//}
$('#client_id_for_vehicle_file_upload').val(res.data.client_id);
$('#vehicle_id_for_file_upload').val(res.data.vehicle_id);
// getKYCEntityDocument(res.data.entity_type_id, res.data.client_id);
// appendKycTableListData(res.data.client_kyc);
$('#tbody').empty();
$('#tbody').append(res.data.client_kyc_primary_table);
$('#other_docs').empty();
$('#other_docs').append(res.data.client_kyc_other_table);
//setTimeout(function(){
//}, 1000)
if (res.data.pt_co_share_details && res.data.pt_co_share_details.length > 0) {
// $('#tab_content').empty()
count = 0
$.each(res.data.pt_co_share_details, function(index, item) {
// appendNewTab(item);
});
}
} else {
toastr.error(res.message, 'Error');
}
// $('#kyc_tab2').click();
// $('#kyc_tab').click();
// $('#g_drive_file_upload_sbt_btn').show()
},
error: function(xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}
});
});
$("#vehicle_form").submit(function(event) {
event.preventDefault();
var isValid = $('#vehicle_form').parsley().validate();
if (!isValid) {
console.log('Form is Empty', 'Warning');
return ;
}
isVehicleFormSubmitting = true;
form_action = '<?= base_url("util/createVehicleWithMinimalDataForBDS"); ?>';
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
var formData = new FormData($('#vehicle_form')[0]);
$.ajax({
data:formData,
url: form_action,
type: "POST",
dataType: 'json',
processData: false,
contentType: false,
success: function(res) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.log('create Vehicle With Minimal Data response', res);
if(res.status == true){
getClientAndBranchAndPolicy();
$('#client_type').val(res.owner_type);
setTimeout(function(){
appendVehicles(res.vehicles, res.vehicle_id);
$('#client_id').val(res.owner_id).change();
if(res.owner_type == 1){
$('.branchdiv').show()
$('#client_branch_id').prop('required', true);
setTimeout(function(){
$('#client_branch_id').val(res.owner_branch_id).change();
}, 1000)
}else{
$('.branchdiv').hide()
$('#client_branch_id').prop('required', false);
}
// if(res.owner_type == 2){
// $('.card_group_34').hide();
// $('.card_group_37').hide();
// $("select[name='cd_ac_no_for_child[]']").removeAttr("required");
// }else{
// $('.card_group_34').show();
// $('.card_group_37').show();
// $("select[name='cd_ac_no_for_child[]']").attr('required', 'required');
// }
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}, 2000)
toastr.success(res.message, 'Success');
}else{
toastr.error(res.message, 'Error');
}
$('#vehicle_form')[0].reset();
$('.close').click();
isVehicleFormSubmitting = false;
},
error: function (xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
isVehicleFormSubmitting = false;
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}
});
});
$("#CDMasterForm").submit(function(event) {
event.preventDefault();
var isValid = $('#CDMasterForm').parsley().validate();
if (!isValid) {
console.log('Form is Empty', 'Warning');
return ;
}
form_action = '<?= base_url("util/createCDAccountNumberUsingAjax"); ?>';
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
var unique_id = $('#premium_details_unique_id').val();
var client_id = $('#client_id').val();
var insurer_id = $('#follow_insurer_id_'+unique_id).find('option:selected').attr('data-id');
var insurer_and_insurer_branch = $('#follow_insurer_id_'+unique_id).val();
console.log('unique_id', unique_id);
console.log('client_id', client_id);
console.log('insurer_id', insurer_id);
var formData = new FormData($('#CDMasterForm')[0]);
formData.append('client_id', client_id);
formData.append('insurer_id', insurer_id);console.log(formData);
formData.append('insurer_and_insurer_branch', insurer_and_insurer_branch);
console.log(formData);
let balanceDiv = document.getElementById('cd_current_balance_info_'+unique_id);
$.ajax({
data:formData,
url: form_action,
type: "POST",
dataType: 'json',
processData: false,
contentType: false,
success: function(res) {
console.log("CD FORM SUBMIT RESPONSE : ", res);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if(res.status == true){
appendCDAccountNumber(res.data, unique_id, res.cd_ac_pk);
$('#cd_ac_pk_for_leader').val(res.cd_ac_pk)
console.log('cd_current_balance instance', $('#cd_current_balance_'+unique_id))
$('#cd_current_balance_'+unique_id).val(res.received_data.opening_bal);
balanceDiv.innerHTML =
'<span class="text-success">' + res.received_data.opening_bal + '</span>' +
' <span class="vehicle-badge success">✓ CD balance Amount</span>';
balanceDiv.classList.add('show');
toastr.success(res.message, 'Success');
}else{
toastr.error(res.message, 'Error');
balanceDiv.innerHTML = '';
balanceDiv.classList.remove('show');
}
$('#CDMasterForm')[0].reset();
$('.close').click();
},
error: function (xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
balanceDiv.innerHTML = '';
balanceDiv.classList.remove('show');
}
});
});
//-----------------------------------------------------------------------------------------------------------
// $('#cop_yes').change(function() {
// if ($(this).is(':checked')) {
// $('.add-insurer-button').removeClass('d-none');
// $('.payby').removeClass('d-none');
// $('.card_group_2').show()
// $('.card_group_3').show()
// $('.card_group_7').show()
// $('.card_group_35').removeClass('d-none');
// var selectedOption = $('#policy_type_id').find('option:selected');
// var bap = selectedOption.data('bap');
// var allocg = selectedOption.data('allocg');
// // console.log('allocg:', allocg);
// // do not remove this commented items
// // if(bap == 'Fire' || bap == 'Marine Cargo' || bap == 'Marine Hull'){
// // $('.hidecoter').show()
// // $('.hidecotp').hide()
// // }else{
// // if(bap == 'Motor'){
// // $('.hidecotp').show()
// // $('.hidecoter').hide()
// // }else{
// // $('.hidecoter').hide()
// // $('.hidecotp').hide()
// // }
// // }
// if(allocg == "EB"){
// $('.hideter').hide();
// $('.hidetp').hide();
// $('.hidecoter').hide()
// $('.hidecotp').hide()
// }else{
// $('.hidetp').show();
// if($(this).is(':checked')){
// $('.hidecotp').show();
// }else{
// $('.hidecotp').hide();
// }
// if(bap == 'Fire' || bap == 'Marine Cargo' || bap == 'Marine Hull'){
// $('.hideter').show();
// if($(this).is(':checked')){
// $('.hidecoter').show();
// }else{
// $('.hidecoter').hide();
// }
// }else{
// $('.hideter').hide();
// }
// }
// // $('input[name="co_share_per[]"], input[name="co_premium[]"]').each(function () {
// // $(this).val(''); // Clear value
// // console.log('Input cleared:', $(this).attr('name')); // Log cleared input
// // });
// } else {
// $('.add-insurer-button').addClass('d-none');
// $('.payby').addClass('d-none');
// // $('#bro_payable_by').prop('checked', false);
// $('.card_group_2').hide()
// $('.card_group_3').hide()
// $('.card_group_7').hide()
// $('.card_group_35').addClass('d-none');
// $('.hidecoter').hide()
// $('.hidecotp').hide()
// // $('input[name="co_share_per[]"], input[name="co_premium[]"]').each(function () {
// // $(this).val(''); // Clear value
// // console.log('Input cleared:', $(this).attr('name')); // Log cleared input
// // });
// }
// });
$('#cop_yes').change(function () {
const isCoPayYes = $(this).is(':checked');
const selectedOption = $('#policy_type_id option:selected');
const bap = selectedOption.data('bap');
const allocg = selectedOption.data('allocg');
const $allPremiumCols = $('.csslabel, .cssbp, .csstp, .csstep');
/* =========================
VISIBILITY LOGIC
========================= */
if (isCoPayYes) {
$('.add-insurer-button, .payby').removeClass('d-none');
$('.card_group_2, .card_group_3, .card_group_7').show();
$('.card_group_35').removeClass('d-none');
if (allocg === "EB") {
$('.hideter, .hidetp, .hidecoter, .hidecotp').hide();
} else {
$('.hidetp').show();
$('.hidecotp').show();
if (['Fire','Marine Cargo','Marine Hull'].includes(bap)) {
$('.hideter, .hidecoter').show();
} else {
$('.hideter, .hidecoter').hide();
}
}
} else {
$('.add-insurer-button, .payby').addClass('d-none');
$('.card_group_2, .card_group_3, .card_group_7').hide();
$('.card_group_35').addClass('d-none');
$('.hideter, .hidetp, .hidecoter, .hidecotp').hide();
}
/* =========================
COLUMN LAYOUT LOGIC
========================= */
$allPremiumCols
.filter(':visible')
.removeClass('col-3 col-4 col-6');
if (allocg === "EB") {
$allPremiumCols
.filter(':visible')
.addClass('col-6');
} else if (['Fire','Marine Cargo','Marine Hull'].includes(bap)) {
$allPremiumCols
.filter(':visible')
.addClass('col-3');
} else {
$allPremiumCols
.filter(':visible')
.addClass('col-4');
}
/* =========================
CO-SHARE RECALC
========================= */
co_share_percentage_calculation();
});
$('#client_type').change(function() {
let policy_type_id = $('#policy_type_id').val();
console.log("client_policy_type_id", policy_type_id);
if ($(this).val() == 2) {
if($('#policy_type_id').val() == 8){
$('#policyholdernamediv').hide();
}else{
$('#policyholdernamediv').show();
}
} else {
$('#policyholdernamediv').hide();
}
var selectedOption = $('#policy_type_id').find('option:selected');
var ebp = selectedOption.data('ebp');
var etp = selectedOption.data('etp');
var etep = selectedOption.data('etep');
var iep = selectedOption.data('iep');
var itp = selectedOption.data('itp');
var itep = selectedOption.data('itep');
var std_bp = 0;
var std_tp = 0;
var std_tep = 0;
if ($(this).val() == 2) {
std_bp = iep;
std_tp = itp;
std_tep = itep;
$('.branchdiv').hide();
$('.clienttypediv').show();
$('#entity_type_id_for_client').prop('required', false);
$('#branch_name').prop('required', false);
$('#client_branch_id').prop('required', false);
$('#branch_code').prop('required', false);
$('#name').prop('required', false);
// $('#mobile').prop('required', false);
$('#gst').prop('required', false);
$('#email').prop('required', false);
$('#dob').prop('required', true);
// $('#phone').prop('required', true);
$('#email2').prop('required', true);
$('#aadhar').prop('required', true);
$('#owner_branch').prop('required', false);
$('.card_group_34').hide();
$('.card_group_37').hide();
$("select[name='cd_ac_no_for_child[]']").removeAttr("required");
} else {
std_bp = ebp;
std_tp = etp;
std_tep = etep;
$('.branchdiv').show();
$('.clienttypediv').hide();
$('#entity_type_id_for_client').prop('required', true);
$('#branch_name').prop('required', true);
$('#client_branch_id').prop('required', true);
$('#branch_code').prop('required', true);
$('#name').prop('required', true);
// $('#mobile').prop('required', false);
$('#gst').prop('required', false);
$('#email').prop('required', true);
$('#dob').prop('required', false);
// $('#phone').prop('required', false);
$('#email2').prop('required', false);
$('#aadhar').prop('required', false);
$('#owner_branch').prop('required', true);
if(policy_type_id == 1 || policy_type_id == 2 || policy_type_id == 3 || policy_type_id == 4 || policy_type_id == 5 || policy_type_id == 6 || policy_type_id == 7){
$('.card_group_34').hide();
$('.card_group_37').hide();
$("select[name='cd_ac_no_for_child[]']").removeAttr("required");
}else{
$('.card_group_34').show();
$('.card_group_37').show();
$("select[name='cd_ac_no_for_child[]']").attr('required', 'required');
}
}
$('[name="standard_bp[]"]').val(std_bp);
$('[name="standard_tp[]"]').val(std_tp);
$('[name="standard_ter[]"]').val(std_tep);
});
$('#same_as_proposer').change(function() {
var client_type = $('#client_type').val()
var policy_type = $('#policy_type_id').val()
if ($(this).is(':checked')) {
$('#dynamic-form-container-for-insured').empty();
$('#family_details').hide();
} else {
if(client_type == 2 && policy_type != 8){
$('#family_details').show();
appendInsured()
}else{
$('#dynamic-form-container-for-insured').empty();
$('#family_details').hide();
}
}
});
$('#client_type').on('change', function() {
var selectedClientType = $(this).val();
// console.log('selectedClientType', selectedClientType);
// Clear and add default options for client
$('#client_id').empty().append($('<option>', {
value: '',
text: 'Select Client'
})).append($('<option>', {
value: 'add_client',
text: '+ Add Client'
}));
// Populate client options based on selected client type
if (selectedClientType) {
$.each(client_list, function(index, item) {
if (item.client_type == selectedClientType) {
let client_show_name = item.client_name;
if (item.client_type == 2) {
// client_show_name = item.client_name + ' - ' + (item.dob ?? '') + (item.pan ?? '');
client_show_name = item.client_name + (item.dob ? ('- (' + item.dob + ' )' ) : '') + (item.pan ? ('- ' + item.pan ) : '');
}
var option = $('<option>', {
value: item.id,
text: client_show_name,
'data-cn': item.client_name,
'data-ct': item.client_type
});
$('#client_id').append(option);
}
});
}
// Initialize or refresh Select2 for both dropdowns
$('#client_id').select2();
});
$('#Owner_type').on('change', function() {
var selectedClientType = $(this).val();
$('#client_type').val(selectedClientType).change();
if ($(this).val() == 2) {
$('.ownerbranchdiv').hide();
$('#owner_branch').prop('required', false);
$('.card_group_34').hide();
$('.card_group_37').hide();
$("select[name='cd_ac_no_for_child[]']").removeAttr("required");
} else {
$('.ownerbranchdiv').show();
$('#owner_branch').prop('required', true);
$('.card_group_34').show();
$('.card_group_37').show();
$("select[name='cd_ac_no_for_child[]']").attr('required', 'required');
}
// console.log('selected Owner type', selectedClientType);
// Clear and add default options for vehicle
$('#owner').empty().append($('<option>', {
value: '',
text: 'Select Owner'
}))
// $('#owner').append(
// $('<option>', {
// value: 'add_client',
// text: ' + Add Owner',
// })
// );
// Populate client options based on selected client type
if (selectedClientType) {
// Populate vehicle options based on selected client type
$.each(client_list, function(index, owner) {
if (owner.client_type == selectedClientType) {
if(selectedClientType == '2'){
var option = $('<option>', {
value: owner.id,
text: (owner.client_name + ' - ' + (owner.pan ?? 'N/A'))
});
$('#owner').append(option);
}else{
var option = $('<option>', {
value: owner.id,
text: owner.client_name,
});
$('#owner').append(option);
}
}
});
}
// Initialize or refresh Select2 for both dropdowns
$('#owner').select2();
});
$('#policy_status').change(function(){
console.log(" :) policy changes");
var pt_id = $('#policy_tranction_primarykey').val();
var status = $(this).val()
var policy_type_id = $('#policy_type_id').val()
var client_id = $('#client_id').val();
var client_branch_id = $('#client_branch_id').val();
if(status == 'completed'){
if(pt_id == ''){
removeAllCardsExceptFirst('insurer-card');
}
addInsurerColumn();
$('#sales_row').show();
$('#policy_no').prop('required', true);
$('#policy_issue_date').prop('required', true);
$('#policy_start_date').prop('required', true);
$('#policy_end_date').prop('required', true);
// $('#tpa').prop('required', true);
// $('#emp_count').prop('required', true);
// $('#dependent_count').prop('required', true);
$('.follow_insurer').prop('required', true);
if(policy_type_id == 3 || policy_type_id == 4 || policy_type_id == 5){
$('#base_policy_id').show();
}else{
$('#base_policy_id').hide();
}
if(client_id && client_branch_id){
var url_for_get_policy_type_list = '<?php echo base_url('util/base_policy_for_policy_inception/') ?>' + client_id + '/' + client_branch_id;
$.get(url_for_get_policy_type_list, function(response){
console.log('base_policy_for_policy_inception response', response)
appendBasePolicyList(response.data);
}).fail(function(xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
});
}
if(policy_type_id == 1 || policy_type_id == 2 || policy_type_id == 3 || policy_type_id == 4 || policy_type_id == 5){
$('#tpa_div').show();
}else{
$('#tpa_div').hide();
}
if(policy_type_id == 2 || policy_type_id == 3 || policy_type_id == 4 || policy_type_id == 5){
$('#no_of_insured_div').show();
$('#no_of_dependents_div').show();
}else if(policy_type_id == 1 || policy_type_id == 6 || policy_type_id == 7) {
$('#no_of_insured_div').show();
$('#no_of_dependents_div').hide();
}else{
$('#no_of_insured_div').hide();
$('#no_of_dependents_div').hide();
}
}else{
$('#sales_row').hide()
$('#policy_no').prop('required', false)
$('#policy_issue_date').prop('required', false)
$('#policy_start_date').prop('required', false)
$('#policy_end_date').prop('required', false)
// $('#tpa').prop('required', false)
// $('#emp_count').prop('required', false)
// $('#dependent_count').prop('required', false)
$('.follow_insurer').prop('required', false)
}
});
$('#policy_no').change(function(){
var policy_no = $(this).val();
policy_no = policy_no.trim();
let client_id = $('#client_id').val()?.trim();
let client_type = $('#client_type').val()?.trim();
let client_branch_id = $('#client_branch_id').val()?.trim();
let policy_type_id = $('#policy_type_id').val()?.trim();
if (!client_id || !client_branch_id || !policy_type_id) {
if(client_type == 1){
toastr.warning('Please select the policy type, client and branch', "Warning");
$('#policy_no').val('');
return;
}
}
$pt_id = $('#policy_tranction_policy_number').val();
console.log('$pt_id', $pt_id);
if($pt_id == "" && policy_no != ""){
$.ajax({
url: '<?php echo base_url('util/get_client_policy_data_using_policy_no/');?>',
type: "GET",
data : { policy_no : policy_no, client_id : client_id, client_branch_id : client_branch_id, policy_type_id : policy_type_id, client_type : client_type},
dataType: 'json',
success: function (res) {
console.log('get_client_policy_data_using_policy_no response', res)
$('.follower_policy_no').val(policy_no);// auto fetched
if(res.status == true && res.code == 409){
toastr.warning(res.message,'Warning');
$('#policy_no').val("");
$('.follower_policy_no').val("");
return;
}else{
$('#ct_type').val(2);
$('#client_policy_id').val('');
$('#policy_start_date').val('');
$('#policy_end_date').val('');
$('#tpa').val('').select2();
console.log(res.message, 'Warning');
}
// if(res.status == true){
// $('#ct_type').val(1);
// $('#client_policy_id').val(res.data.id);
// $('#policy_start_date').val(res.data.policy_start_date);
// $('#policy_end_date').val(res.data.policy_end_date);
// $('#tpa').val(res.data.tpa_branch_id+'-'+res.data.tpa_id).select2();
// }
},
error: function (xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
}
});
}else{
$('#ct_type').val(2);
$('#client_policy_id').val();
$('#policy_start_date').val();
$('#policy_end_date').val();
$('#tpa').val('').select2();
console.log("This is new policy Could not get policy data")
}
});
$('.close').on('click', function(){
$('#CDMasterForm')[0].reset();
});
$('#policy_issue_date').on('change', function(){
let date = $(this).val();
let date_set = false
$('[name="co_share_type[]"]').each(function () {
if($(this).is(':checked')){
let uniqueid = $(this).data('id');
$('#calc_policy_issue_date_' + uniqueid).val(date).addClass('readonly-select');
date_set = true;
}
});
if(!date_set){
$('#calc_policy_issue_date_1').val(date).addClass('readonly-select');
}
let monthDiv = document.getElementById('policy_issue_month_info');
monthAbbr = document.getElementById('month').value;
if (!monthAbbr) {
monthDiv.innerHTML = '';
monthDiv.classList.remove('show');
return;
}
monthDiv.innerHTML =
'<span class="text-success">' + monthAbbr + '</span>' +
' <span class="vehicle-badge success">✓ Month</span>';
monthDiv.classList.add('show');
});
var insurerCount = 0;
$(document).on('click', '#setInsurerCount', function () {
console.log('Add clicked');
addInsurerColumn();
getCardIndexes(1);
});
function addInsurerColumn() {
insurerCount++;
let showDelete = insurerCount > 1 ? `
<button type="button"
class="btn btn-sm btn-danger delete-insurer"
data-count="${insurerCount}">
Delete
</button>` : '';
let showAdd = insurerCount == 1 ? `
<button type="button" id="setInsurerCount"
class="btn btn-sm btn-primary add-insurer-button d-none"
data-count="${insurerCount}">
Add Insurer
</button>` : '';
let cardHTML = `<div class="p-1 mb-2 insurer-card" id="insurerCardContainer_${insurerCount}" data-count="${insurerCount}">
<div class="d-flex justify-content-between align-items-center border-bottom pb-2 mb-3">
<div class="fw-bold text-primary insurer-card-title">Insurer - ${insurerCount}</div>
<div class="d-flex align-items-center gap-2">
${showAdd}
${showDelete}
</div>
</div>
<div id="insurerCardContainer">
<div class="form-row mb-2">
<div class="col-md-4 mb-2 card_group_1">
<div class="d-flex align-items-center justify-content-between mb-1">
<label class="card_label_1 mb-0 d-flex align-items-center">
Insurer <span class="text-danger">*</span>
</label>
<div class="card_group_2" style="display:none">
<label class="card_label_2 mb-0 d-flex align-items-center">
<span class="mr-1">Is Leader?</span>
<input data-id="${insurerCount}" id="co_share_type_${insurerCount}"
type="checkbox" name="co_share_type[]"
onchange="select_leader_disable_premium_amt(this, '${insurerCount}')"
class="mr-1">
</label>
</div>
</div>
<select class="form-control follow_insurer" data-count="${insurerCount}" id="follow_insurer_id_${insurerCount}" name="follow_insurer_id[]" onchange="getCDAccountNumber(this)" required>
<option value="" selected>Select Insurer</option>
<?php foreach ($insurer_branch as $value) { ?>
<option value="<?= $value['id'] . '-' . $value['insurer_id'] ?>" data-id="<?= $value['insurer_id'] ?>" data-bid="<?= $value['id'] ?>" data-ic="<?= $value['category'] ?>">
<?= $value['insurer_name'] . '-' . $value['branch_code'] ?>
</option>
<?php } ?>
</select>
</div>
<div class="col-md-4 mb-2 card_group_34" style="display:none;">
<!-- <label class="card_label_34">CD Acc No</label> -->
<label class="card_label_34 d-flex align-items-center">
<span class="flex-grow-1">CD Acc No</span>
<small id="cd_current_balance_info_${insurerCount}"
class="text-right"
style="font-size: x-small;">
</small>
</label>
<select class="form-control follow_insurer_cd" data-count="${insurerCount}" id="cd_ac_no_${insurerCount}" name="cd_ac_no_for_child[]" onchange="addCDAccountNumber(this);">
<option value="" selected>Select CD No</option>
<option value="add_cd"> + Add CD No</option>
</select>
<input type="hidden" id="cd_current_balance_${insurerCount}" readonly>
</div>
</div>
<div class="form-row mb-2">
<div class="col-md-4 mb-2 card_group_35">
<label class="card_label_35">Policy No</label>
<input type="text" class="form-control follower_policy_no" id="follower_policy_no_${insurerCount}" name="follower_policy_no[]" onchange="validateInput(this, 'client_policy', 'policy_no')">
</div>
<div class="col-md-4 mb-2 card_group_40">
<label class="card_label_40"> Policy Issue Date </label>
<input type="text" class="form-control" id="calc_policy_issue_date_${insurerCount}" name="calc_policy_issue_date[]">
</div>
<div class="col-md-4 mb-2 card_group_3" id="coshare_wrap_${insurerCount}" style="display:none;">
<label class="card_label_3">Co-Share %</label>
<div class="input-wrap">
<input type="text" class="form-control right-align-input input-content" id="co_share_per_${insurerCount}" name="co_share_per[]" oninput="validateRange(this); " onchange="co_share_percentage_calculation('${insurerCount}')" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
</div>
<div class="form-row compact-details-section mb-2">
<div class="col-md-6">
<div class="form-row mb-1 text-success small font-weight-bold">
<div class="col-6">Premium</div>
<div class="col-6"></div>
</div>
<div class="form-row mb-2 align-items-center">
<div class="col-6"><label class="card_label_36">Non Commissionable </label></div>
<div class="col-6">
<input type="text" class="form-control right-align-input" id="non_comm_per_amt_${insurerCount}" name="non_comm_per_amt[]" onkeypress="return onlyNumbers(event)">
</div>
</div>
<div class="form-row mb-2 card_group_7" style="display:none;">
<div class="col-6"><label class="card_label_7">Base </label></div>
<div class="col-6">
<input type="text" class="form-control right-align-input" id="co_premium_${insurerCount}" name="co_premium[]" onkeypress="return onlyNumbers(event)">
</div>
</div>
<div class="form-row mb-2 card_group_38 hidecotp" style="display:none;">
<div class="col-6"><label class="card_label_38">TP </label></div>
<div class="col-6">
<input type="text" class="form-control right-align-input" id="co_tp_premium_${insurerCount}" name="co_tp_premium[]" onkeypress="return onlyNumbers(event)">
</div>
</div>
<div class="form-row mb-2 card_group_39 hidecoter" style="display:none;">
<div class="col-6"><label class="card_label_39">TEP </label></div>
<div class="col-6">
<input type="text" class="form-control right-align-input" id="co_ter_premium_${insurerCount}" name="co_ter_premium[]" onkeypress="return onlyNumbers(event)">
</div>
</div>
<div class="form-row mb-2">
<div class="col-2 card_group_8">
<label class="card_label_8 small">CGST</label>
<div class="input-wrap mr-2">
<input type="text" class="form-control right-align-input input-content" id="cgst_${insurerCount}" name="cgst[]" oninput="" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-2 card_group_9">
<label class="card_label_9 small">SGST</label>
<div class="input-wrap mr-2">
<input type="text" class="form-control right-align-input input-content" id="sgst_${insurerCount}" name="sgst[]" oninput="" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-2 card_group_10">
<label class="card_label_10 small">IGST</label>
<div class="input-wrap mr-2">
<input type="text" class="form-control right-align-input input-content" id="igst_${insurerCount}" name="igst[]" oninput="" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-6 card_group_11">
<label class="card_label_11">GST Amount</label>
<input type="text" class="form-control right-align-input" id="gst_amount_${insurerCount}" name="gst_amount[]" onkeypress="return onlyNumbers(event)">
</div>
</div>
<div class="form-row mb-2 align-items-center">
<div class="col-6"><label class="card_label_12">Stamp Duty</label></div>
<div class="col-6">
<input type="text" class="form-control right-align-input" id="stamp_duty_${insurerCount}" name="stamp_duty[]" onkeypress="return onlyNumbers(event)">
</div>
</div>
<div class="form-row mb-2 align-items-center">
<div class="col-6"><label class="card_label_13">Total</label></div>
<div class="col-6">
<input type="text" class="form-control readonly-color right-align-input" id="total_amt_${insurerCount}" name="total[]" readonly onkeypress="return onlyNumbers(event)">
</div>
</div>
</div>
<div class="col-md-1"></div>
<div class="col-md-5">
<div class="form-row">
<div class="col-12">
<div class="form-row mb-1 text-success small font-weight-bold">
<div class="col-4 csslabel">Remuneration</div>
<div class="col-4 cssbp"></div>
<div class="col-4 csstp hidetp"></div>
<div class="col-4 csstep hideter" style="display:none;"></div>
</div>
</div>
<div class="col-12">
<div class="form-row mb-2 align-items-center">
<div class="col-4 csslabel "><label class="card_label_14">Agreed (%)</label></div>
<div class="col-4 cssbp card_group_14">
<div class="input-wrap mr-2">
<span class="input-prefix">BP &nbsp; </span>
<input type="text" class="form-control right-align-input input-content" id="agreed_bp_${insurerCount}" name="agreed_bp[]" oninput="validateRange(this);" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-4 card_group_15 csstp hidetp">
<div class="input-wrap mr-2">
<span class="input-prefix">TP &nbsp; </span>
<input type="text" class="form-control right-align-input input-content" id="agreed_tp_${insurerCount}" name="agreed_tp[]" oninput="validateRange(this);" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-4 card_group_16 csstep hideter" style="display:none;">
<div class="input-wrap">
<span class="input-prefix">TEP &nbsp; </span>
<input type="text" class="form-control right-align-input input-content" id="agreed_ter_${insurerCount}" name="agreed_ter[]" oninput="validateRange(this);" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
</div>
</div>
<?php if (in_array(get_role_id(), [1,5]) || in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team())) { ?>
<div class="col-12">
<div class="form-row mb-2 align-items-center">
<div class="col-4"><label class="card_label_17">Agreed Amount</label></div>
<div class="col-8 card_group_17">
<input type="text" class="form-control right-align-input" id="agreed_amount_${insurerCount}" name="agreed_amount[]" onkeypress="return onlyNumbers(event)">
</div>
</div>
</div>
<?php } ?>
<div class="col-12">
<div class="form-row mb-2 align-items-center">
<div class="col-4 csslabel "><label class="card_label_18">Standard</label></div>
<div class="col-4 cssbp card_group_18">
<div class="input-wrap mr-2">
<span class="input-prefix">BP &nbsp;</span>
<input type="text" class="form-control readonly-color right-align-input input-content" id="standard_bp_${insurerCount}" name="standard_bp[]" readonly>
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-4 card_group_19 csstp hidetp">
<div class="input-wrap mr-2">
<span class="input-prefix">TP &nbsp;</span>
<input type="text" class="form-control readonly-color right-align-input input-content" id="standard_tp_${insurerCount}" name="standard_tp[]" readonly>
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-4 card_group_20 csstep hideter" style="display:none;">
<div class="input-wrap">
<span class="input-prefix">TEP &nbsp;</span>
<input type="text" class="form-control readonly-color right-align-input input-content" id="standard_tep_${insurerCount}" name="standard_ter[]" readonly>
<span class="input-symbol">%</span>
</div>
</div>
</div>
</div>
<?php if (in_array(get_role_id(), [1,5]) || in_array(4, user_team()) || in_array(6, user_team())) { ?>
<div class="col-12">
<div class="form-row mb-2 align-items-center">
<div class="col-4"><label class="card_label_30">Expected</label></div>
<div class="col-8 card_group_30">
<input type="text" class="form-control readonly-select right-align-input" id="exp_amt_${insurerCount}" name="exp_amt[]" onkeypress="return onlyNumbers(event)">
</div>
</div>
</div>
<div class="col-12">
<div class="form-row mb-2 align-items-center">
<div class="col-4 csslabel "><label class="card_label_24">Actual (%)</label></div>
<div class="col-4 cssbp card_group_24">
<div class="input-wrap mr-2">
<span class="input-prefix">BP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input input-content" id="actual_bp_per_${insurerCount}" name="actual_bp_per[]" onchange="actualAmountCalculation('${insurerCount}', 'bp_per')" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-4 card_group_22 csstp hidetp">
<div class="input-wrap mr-2">
<span class="input-prefix">TP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input input-content" id="actual_tp_per_${insurerCount}" name="actual_tp_per[]" onchange="actualAmountCalculation('${insurerCount}', 'tp_per')" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
<div class="col-4 card_group_23 csstep hideter" style="display:none;">
<div class="input-wrap">
<span class="input-prefix">TEP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input input-content" id="actual_tep_per_${insurerCount}" name="actual_tp_per[]" onchange="actualAmountCalculation('${insurerCount}', 'tep_per')" onkeypress="return onlyNumbers(event)">
<span class="input-symbol">%</span>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="form-row mb-2 align-items-center">
<div class="col-4 csslabel "><label class="card_label_21">Actual Amount</label></div>
<div class="col-4 cssbp card_group_21">
<div class="input-wrap">
<span class="input-prefix">BP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input" id="actual_bp_amt_${insurerCount}" name="actual_bp_amt[]">
</div>
</div>
<div class="col-4 card_group_22 csstp hidetp">
<div class="input-wrap">
<span class="input-prefix">TP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input" id="actual_tp_amt_${insurerCount}" name="actual_tp_amt[]">
</div>
</div>
<div class="col-4 card_group_23 csstep hideter" style="display:none;">
<div class="input-wrap">
<span class="input-prefix">TEP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input" id="actual_tep_amt_${insurerCount}" name="actual_tep_amt[]">
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="form-row mb-2 align-items-center">
<div class="col-4 csslabel "><label class="card_label_27">Remuneration Amount</label></div>
<div class="col-4 cssbp card_group_27">
<div class="input-wrap">
<span class="input-prefix">BP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input" id="actual_bp_brokerage_amt_${insurerCount}" name="actual_bp_brokerage_amt[]">
</div>
</div>
<div class="col-4 card_group_28 csstp hidetp">
<div class="input-wrap">
<span class="input-prefix">TP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input" id="actual_tep_brokerage_amt_${insurerCount}" name="actual_tep_brokerage_amt[]">
</div>
</div>
<div class="col-4 card_group_29 csstep hideter " style="display:none;">
<div class="input-wrap">
<span class="input-prefix">TEP &nbsp;</span>
<input type="text" class="form-control readonly-select right-align-input" id="actual_tep_brokerage_amt_dup_${insurerCount}" name="actual_tep_brokerage_amt_dup[]">
</div>
</div>
</div>
</div>
<?php } else if (in_array(3, user_team()) || in_array(8, user_team())) { } ?>
</div>
</div>
</div>
<div class="form-row mb-2">
<div class="col-md-12 card_group_33" style="display:none;">
<label class="card_label_33">all Hidden</label>
<input type="hidden" name="co_share_id[]" id="co_share_id[]" onkeypress="return onlyNumbers(event)">
<input type="hidden" id="base_premium_${insurerCount}" name="base_premium[]" class="bp_value">
<input type="hidden" id="tp_premium_${insurerCount}" name="tp_premium[]" class="tp_value">
<input type="hidden" id="ter_premium_${insurerCount}" name="ter_premium[]" class="ter_value">
</div>
</div>
</div>
</div>`;
$('#allInsurerCards').append(cardHTML);
setBPValue($('#base_premium').val());
setTEPValue($('#ter_premium').val());
setTPValue($('#tp_premium').val());
$('#follow_insurer_id_' + insurerCount).select2();
flatpickr("#calc_policy_issue_date_" + insurerCount, {
dateFormat: "d/m/Y",
allowInput: false
});
/* CATEGORY + TP / TEP LOGIC */
let selectedOption = $('#policy_type_id option:selected');
let bap = selectedOption.data('bap');
let allocg = selectedOption.data('allocg');
let is_co_pay_yes = $('#cop_yes').prop('checked') ? 1 : 0;
var $allPremiumCols = $('.csslabel, .cssbp , .csstp,.csstep');
if (allocg == "EB") {
$('.hideter,.hidetp,.hidecoter,.hidecotp').hide();
$allPremiumCols.filter(':visible').removeClass('col-3 col-4').addClass('col-6');
} else {
$('.hidetp').show();
is_co_pay_yes ? $('.hidecotp').show() : $('.hidecotp').hide();
if (['Fire','Marine Cargo','Marine Hull'].includes(bap)) {
$('.hideter').show();
is_co_pay_yes ? $('.hidecoter').show() : $('.hidecoter').hide();
$allPremiumCols.removeClass('col-4 col-6').addClass('col-3');
} else {
$('.hideter').hide();
$allPremiumCols.filter(':visible').removeClass('col-3 col-6').addClass('col-4');
}
}
if (is_co_pay_yes) {
$('.card_group_2').show();
$('.card_group_3').show();
$('.card_group_7').show();
$('.card_group_35').removeClass('d-none');
}
insurer_count_array.push(insurerCount);
}
$('#policy_end_date').on('change', function () {
let startDateStr = $('#policy_start_date').val();
let endDateStr = $('#policy_end_date').val();
if (!startDateStr || !endDateStr) {
alert('Please select both Start and End dates');
return;
}
// Convert DD/MM/YYYY → Date object
let startParts = startDateStr.split('/');
let endParts = endDateStr.split('/');
let startDate = new Date(startParts[2], startParts[1] - 1, startParts[0]);
let endDate = new Date(endParts[2], endParts[1] - 1, endParts[0]);
if (endDate <= startDate) {
alert('End Date must be greater than Start Date');
return;
}
let yearDiff = calculateYearCount(startDate, endDate);
console.log(`YDiff: ${yearDiff}`);
adjustInsurerCards(yearDiff);
});
function calculateYearCount(start, end) {
let startDate = new Date(start);
let endDate = new Date(end);
let years = endDate.getFullYear() - startDate.getFullYear();
// Build the anniversary date for calculated years
let anniversary = new Date(
startDate.getFullYear() + years,
startDate.getMonth(),
startDate.getDate()
);
// If end date is before anniversary → reduce 1 year
if (endDate < anniversary) {
years--;
}
// If there are extra days beyond exact year → round up
// (endDate >= anniversary)
return years + 1;
}
function adjustInsurerCards(yearDiff) {
console.log("CurrCount:", insurerCount);
if (yearDiff > insurerCount) {
// ADD missing cards
let cardsToAdd = yearDiff - insurerCount;
console.log("CaAd:", cardsToAdd);
for (let i = 0; i < cardsToAdd; i++) {
addInsurerColumn(); // your function
}
} else if (yearDiff < insurerCount) {
// REMOVE extra cards
let cardsToRemove = insurerCount - yearDiff;
console.log("CaRe:", cardsToRemove);
for (let i = 0; i < cardsToRemove; i++) {
removeInsurerCard(insurerCount); // remove last
}
}
console.log("UpdatedCa:", insurerCount);
updateInsurerTitles(yearDiff);
}
function updateInsurerTitles(yearDiff) {
$(".insurer-card-title").each(function (index) {
let cardIndex = index + 1;
// Base title: Insurer - X
let title = `Insurer - ${cardIndex}`;
// Add "(Year X)" only for the first yearDiff cards
if (cardIndex <= yearDiff) {
title += ` (Year ${cardIndex})`;
}
$(this).text(title);
});
}
function resetInsurerCards() {
$('#allInsurerCards').empty();
insurerCount = 0;
$('#cop_yes').prop('checked', false); // because not ressetted in card. thats why false setted
insurer_count_array = [];
$('.follow_insurer').prop('required', false);
}
function renumberCards() {
$('.p-3.mb-4').each(function (i) {
$(this).find('.fw-bold').text('Insurer - ' + (i + 1));
});
}
function removeInsurerCard(count_index) {
console.log('#################################### Remove Insurer Card ####################################');
let removedCoShareIds = [];
// Get co_share_id[] only from this card
const coShareId = $('#insurerCardContainer_' + count_index)
.find('[name="co_share_id[]"]')
.val();
if (coShareId) {
removedCoShareIds.push(coShareId);
}
console.log('removedCoShareIds array', removedCoShareIds);
// Store removed IDs in hidden input
let existing = $('#remove_pt_co_id').val();
let finalArr = [];
if (existing) {
finalArr = existing.split(',');
}
finalArr = finalArr.concat(removedCoShareIds);
$('#remove_pt_co_id').val(finalArr.join(','));
console.log('remove_pt_co_id value', $('#remove_pt_co_id').val());
// Remove the CARD
$('#insurerCardContainer_' + count_index).remove();
// renumberCards(); // don't forgot
// Remove from insurer_count_array
insurer_count_array = insurer_count_array.filter(item => item !== count_index);
// Recalculate co-share
if (typeof co_share_percentage_calculation === "function") {
co_share_percentage_calculation(null, "remove");
}
// Decrease count
insurerCount--;
if (insurerCount === 0) {
$('.follow_insurer').prop('required', false);
} else {
$('.follow_insurer').prop('required', true);
}
console.log('#################################### END Remove Insurer Card ####################################');
}
function populateCards(dataArray, cd_ac_pk) {
console.log('#################################### Populate Cards ####################################');
console.log('populateCards data', dataArray);
dataArray.forEach((data, index) => {
// ✅ Create new card
addInsurerColumn();
let disable_td = data.record_count > 0;
let cardIndex = insurerCount; // current card number
console.log('Populating card:', cardIndex);
let insurerVal = data.insurer_branch_id + '-' + data.insurer_id;
/* ---------------------------------
1. INSURER SELECT
---------------------------------- */
$('#follow_insurer_id_' + cardIndex)
.val(insurerVal)
.change()
.toggleClass('readonly-select', disable_td);
/* ---------------------------------
2. IS LEADER
---------------------------------- */
$('#co_share_type_' + cardIndex)
.prop('checked', data.co_share_type === '1')
.change()
.toggleClass('readonly-select', disable_td);
if ($('#cop_yes').is(':checked')) {
$('.card_group_2').show();
getCdAmount(cd_ac_pk, cardIndex);
}
/* ---------------------------------
3. CD ACCOUNT NUMBER
---------------------------------- */
let cdSelect = $('#cd_ac_no_' + cardIndex);
cdSelect.val(cd_ac_pk).prop('selected', true)
.toggleClass('readonly-select', disable_td);
setTimeout(function () {
cdSelect.find('option[value="' + cd_ac_pk + '"]').prop('selected', true);
}, 500);
/* ---------------------------------
46 BASIC DETAILS
---------------------------------- */
$('#follower_policy_no_' + cardIndex).val(data.follower_policy_no);
$('#calc_policy_issue_date_' + cardIndex).val(data.pt_policy_issue_date);
$('#co_share_per_' + cardIndex).val(data.co_share_per);
/* ---------------------------------
713 PREMIUMS
---------------------------------- */
$('#non_comm_per_amt_' + cardIndex).val(data.non_comm_per_amt);
$('#base_premium_' + cardIndex).val(data.bp_amt);
$('#tp_premium_' + cardIndex).val(data.tp_amt);
$('#ter_premium_' + cardIndex).val(data.tep_amt);
$('#co_premium_' + cardIndex).val(data.cop_amt);
$('#co_tp_premium_' + cardIndex).val(data.cotp_amt);
$('#co_ter_premium_' + cardIndex).val(data.cotep_amt);
/* ---------------------------------
1419 TAX
---------------------------------- */
$('#cgst_' + cardIndex).val(data.bp_cgst);
$('#sgst_' + cardIndex).val(data.bp_sgst);
$('#igst_' + cardIndex).val(data.bp_igst);
$('#gst_amount_' + cardIndex).val(data.bp_gst_amt);
$('#stamp_duty_' + cardIndex).val(data.stamp_duty);
$('#total_amt_' + cardIndex).val(data.amount);
/* ---------------------------------
2022 AGREED %
---------------------------------- */
$('#agreed_bp_' + cardIndex).val(data.agreed_bp_per);
$('#agreed_tp_' + cardIndex).val(data.agreed_tp_per);
$('#agreed_ter_' + cardIndex).val(data.agreed_tep_per);
/* ---------------------------------
23 AGREED AMOUNT
---------------------------------- */
$('#agreed_amount_' + cardIndex).val(data.agreed_amt);
/* ---------------------------------
2426 STANDARD %
---------------------------------- */
$('#standard_bp_' + cardIndex).val(data.standerd_bp_per);
$('#standard_tp_' + cardIndex).val(data.standerd_tp_per);
$('#standard_tep_' + cardIndex).val(data.standerd_tep_per);
/* ---------------------------------
2733 ACTUAL VALUES
---------------------------------- */
$('#actual_bp_amt_' + cardIndex).val(data.actual_bp_amount);
$('#actual_tp_amt_' + cardIndex).val(data.actual_tp_amount);
$('#actual_tep_amt_' + cardIndex).val(data.actual_tep_amount);
$('#actual_bp_per_' + cardIndex).val(data.actual_bp_percentage);
$('#actual_tp_per_' + cardIndex).val(data.actual_tp_percentage);
$('#actual_tep_per_' + cardIndex).val(data.actual_tep_percentage);
$('#actual_bp_brokerage_amt_' + cardIndex).val(data.actual_bp_brokerage_amount);
$('#actual_tep_brokerage_amt_' + cardIndex).val(data.actual_tp_brokerage_amount);
$('#exp_amt_' + cardIndex).val(data.exp_amt);
/* ---------------------------------
37 CO SHARE ID (HIDDEN)
---------------------------------- */
$('#insurerCardContainer_' + cardIndex)
.find('[name="co_share_id[]"]')
.val(data.id);
/* ---------------------------------
READ ONLY if record exists
---------------------------------- */
if (disable_td) {
$('#insurerCardContainer_' + cardIndex)
.find('input,select')
.addClass('readonly-select')
.prop('disabled', true);
}
/* ---------------------------------
LEADER DISABLE LOGIC
---------------------------------- */
if (index != 0 && data.co_share_type != 0 && data.co_share_type != 1) {
let co_share_index = index + 1;
select_leader_disable_premium_amt_in_edit(co_share_index);
}
});
console.log('#################################### END Populate Cards ####################################');
}
$(document).on('click', '.delete-insurer', function () {
const count_index = $(this).data('count') || $(this).attr('data-count');
if (!count_index) {
console.error('Missing data-count');
return;
}
removeInsurerCard(count_index);
getCardIndexes(1); // keep if you still use it
});
//-----------------------------------------------------------------------------------------------------------
function getURLParamsForReport() {
const params = new URLSearchParams(window.location.search);
const pt_id = params.get('pt_id') ?? 0;
// ✅ Get the previous page URL
const previousUrl = document.referrer || '';
console.log("PT ID:", pt_id);
console.log("Previous Page URL:", previousUrl);
if (pt_id != 0) {
hide_list_show_add_2();
setTimeout(() =>
getPolicyTransactionDataForEditPolicy(pt_id),
1500); // Reduced timeout
} else {
show_list_hide_add();
}
if(previousUrl != "" && pt_id != 0){
redirect_url = previousUrl;
$('#btnAdd').attr('href', previousUrl);
}
console.log('getURLParamsForReport pt_id', pt_id); // Retain the log if necessary
}
function validateInput(input, table, field){
let value = $(input).val();
let label = $(input).closest('.form-group').find('label').text().replace('*', '').trim();
let message = "Value is duplicate!";
if(label){
message = label + " already exists!";
}
if(table == 'vehicle' && field == "vehicle_no"){
message = "Vehicle Number is already exists!";
}
checkDuplicateTableFieldValue(table, field, value, function(isDuplicate) {
if (isDuplicate) {
toastr.warning(message, 'Warning');
$(input).val('')
if(table == 'vehicle'){
resetVehicleField();
console.log("$('#vehicle_form_submit_btn_id_for_disable')", $('#vehicle_form_submit_btn_id_for_disable'));
console.log($('#vehicle_form_submit_btn_id_for_disable').length);
$('#vehicle_form_submit_btn').attr('disabled', true);
}
} else{
$('#vehicle_form_submit_btn').removeAttr('disabled', false);
}
});
}
function saveFormDataToLocalStorage(formSelector, storageKey) {
// Initialize an empty object to store form data
let formData = {};
// Iterate over all inputs in the form
$(formSelector + " :input").each(function() {
let input = $(this);
let name = input.attr("name"); // Get the input's name attribute
let value = input.val(); // Get the input's value
if (name) {
if (name !== 'owner' && name !== 'branch_id') {
formData[name] = value; // Add to the formData object if the input has a name
}
}
});
// Save the form data to local storage with the provided key
localStorage.setItem(storageKey, JSON.stringify(formData));
console.log("Form data saved to local storage:", formData);
}
function setFormDataFromLocalStorage(formSelector, storageKey) {
// Retrieve the saved form data from localStorage
let savedData = JSON.parse(localStorage.getItem(storageKey));
// If there's no saved data, do nothing
if (!savedData) return;
// Iterate through the saved data and set the form inputs accordingly
$.each(savedData, function(name, value) {
let input = $(formSelector + " :input[name='" + name + "']");
// Check if the input is a checkbox or radio button
if (input.is(':checkbox') || input.is(':radio')) {
input.prop('checked', value); // Set the checked property
} else {
input.val(value); // Set the value for other input types
}
});
console.log("Form data loaded from local storage:", savedData);
}
function checkCDAmountForBasePremium(input) {
console.log('#################################### Check CD Amount For Base Premium ####################################');
console.log(input)
let policy_type_id = $('#policy_type_id').val();
console.log("policy_type_id ", policy_type_id);
let client_type = $('#client_type').val();
console.log('client type', client_type);
let base_premium = $('#base_premium').val();
console.log("base_premium:", base_premium);
let tp_premium = $('#tp_premium').val();
console.log("tp_premium:", tp_premium);
// return;
if(client_type == 1 && policy_type_id > 7){
let current_total_amt = $('#base_cd_amount').val() ?? 0;
console.log('current_total_amt', current_total_amt);
// Extract increment value from input ID
// let input_id = input.id;
// console.log("input_id:", input_id);
// let increment = input_id.split("_").pop();
// console.log("increment:", increment);
let total_amt = $('#total_amt_' + input).val();
console.log("total_amt:", total_amt);
let differnce_bp_amt = 0;
if (total_amt == current_total_amt) {
differnce_bp_amt = 0;
} else if(total_amt < current_total_amt) {
differnce_bp_amt = total_amt - current_total_amt;
console.log("differnce_bp_amt 1:", differnce_bp_amt);
$('#cd_amt_changed').prop('disabled', false).val(differnce_bp_amt);
return;
} else {
differnce_bp_amt = total_amt - current_total_amt;
console.log("differnce_bp_amt 2:", differnce_bp_amt);
total_amt = differnce_bp_amt;
}
console.log("differnce_bp_amt:", differnce_bp_amt);
console.log("total_amt:", total_amt);
// Get the corresponding `cd_ac_no` value
let cd_ac_no = $('#cd_ac_no_' + input).val();
console.log("cd_ac_no:", cd_ac_no);
// Validate inputs
// if (!base_premium || !cd_ac_no) {
// toastr.warning('Base premium or CD account number is missing', 'Warning');
// return;
// }
if (!base_premium) {
toastr.warning('Base premium is missing', 'Warning');
return;
}
let url = '<?= base_url('util/checkCDAmountForBasePremium') ?>';
// Data to send in the AJAX request
let requestData = {
base_premium: total_amt,
cd_ac_no: cd_ac_no
};
// Send AJAX request
sendAjaxRequestForGlobal(url, 'GET', requestData, function(response) {
console.log('#################################### Check CD Amount For Base Premium Response ####################################');
console.log('Data fetched successfully:', response);
if (response.status) {
if (!response.base_premium_greater_than_balance) {
console.log('Base premium is less than or equal to CD balance:', 'SUCCESS');
if(differnce_bp_amt !== 0){
$('#cd_amt_changed').prop('disabled', false).val(differnce_bp_amt);
}else{
$('#cd_amt_changed').prop('disabled', true).val("");
}
$('#pt_form_sumbit_handler').val(1);
} else {
toastr.warning('Base premium greater than CD Amount', 'Warning');
$('#cd_amt_changed').prop('disabled', true).val("");
$('#pt_form_sumbit_handler').val(0);
// $(input).val("0")
}
} else {
toastr.error(response.message || 'Unable to fetch data', 'Error');
}
console.log('#################################### End Check CD Amount For Base Premium Response ####################################');
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('An error occurred while checking the CD amount.', 'Error');
});
}else{
console.log("Skip the Ajax Call these are group policies");
}
console.log('#################################### END Check CD Amount For Base Premium ####################################');
}
function getCdAmount(cd_ac_pk, increment){
console.log('#################################### Get CD Amount ####################################');
// increment = increment + 1
console.log('cd_ac_pk', cd_ac_pk);
console.log('increment', increment);
let url = '<?= base_url('util/getCDAmount') ?>';
// Data to send in the AJAX request
let requestData = {
cd_ac_pk: cd_ac_pk
};
let balanceDiv = document.getElementById('cd_current_balance_info_'+increment);
// Send AJAX request
sendAjaxRequestForGlobal(url, 'GET', requestData, function(response) {
console.log('Data fetched successfully:', response);
if (response.status == true) {
if(!response.data.balance){
$('#cd_current_balance_'+increment).val(0.00);
balanceDiv.innerHTML = '';
balanceDiv.classList.remove('show');
}else{
$('#cd_current_balance_'+increment).val(response.data.balance);
balanceDiv.innerHTML =
'<span class="text-success">' + response.data.balance + '</span>' +
' <span class="vehicle-badge success">✓ CD balance Amount</span>';
balanceDiv.classList.add('show');
}
} else{
$('#cd_current_balance_'+increment).val(0.00);
balanceDiv.innerHTML = '';
balanceDiv.classList.remove('show');
}
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('An error occurred while checking the CD amount.', 'Error');
});
console.log('#################################### END Get CD Amount ####################################');
}
// $('#bro_payable_by').on('change', function(){
// var columnIndexes = [];
// $('#insurerTable thead th').each(function(index) {
// if(index == 0){
// console.log("Premium Table columnIndexes is ", index);
// }else{
// amountCalculation(index);
// }
// columnIndexes.push(index);
// });
// });
$('#bro_payable_by').on('change', function() {
// Loop through all insurer cards
$('.insurer-card').each(function() {
var count = $(this).data('count'); // use the data-count attribute
console.log("Insurer Card count:", count);
// Call your calculation functions using this count
amountCalculation(count);
co_share_percentage_calculation(count);
});
});
$(document).on('change', '.insurer-card input, .insurer-card select, .insurer-card textarea', function() {
// console.log('Changed in table:', $(this).attr('name'), 'Value:', $(this).val());
// getColumnIndexes()
getCardIndexes()
});
function getCardIndexes(count = 0) {
$('.insurer-card').each(function () {
let index = $(this).data('count'); // ✅ same as column index
console.log('Premium CARD index is', index);
amountCalculation(index);
if (count == 1) {
amountCalculation(index);
}
co_share_percentage_calculation(index);
});
}
$('#new_vehicle_switch').change(function () {
if ($(this).is(':checked')) {
$('#modal_vehicle_no').prop('required', false);
$('label[for="modal_vehicle_no"] span.text-danger').remove(); // Remove the asterisk
} else {
$('#modal_vehicle_no').prop('required', true);
// Add asterisk only if not already present
if ($('label[for="modal_vehicle_no"] span.text-danger').length === 0) {
$('label[for="modal_vehicle_no"]').append('<span class="text-danger">*</span>');
}
}
});
// ---------------------------------------------------------------------------------------------------------------
function toggleClient(input) {
let btn = $("#vehicle_client_btn");
let client_type = $('#owner_client_type').val();
if($(input).is(":checked")){
if(client_type == 1){
$('.new_client').show();
$('.old_client').hide();
$(".old_client").find("select, input, textarea").val("").prop("required", false);
$(".new_client").find("select, input, textarea").val("").prop("required", true);
}else{
$('.new_client').show();
$('.old_client').hide();
$(".old_client").find("select, input, textarea").val("").prop("required", false);
$(".new_client").find("select, input, textarea").val("").prop("required", true);
$('.v_group_client').hide();
$('.v_individual_client').show();
$(".v_group_client").find("select, input, textarea").val("").prop("required", true);
$(".v_individual_client").find("select, input, textarea").val("").prop("required", true);
}
$('#owner').select2();
$('#owner_branch').select2();
}else {
if(client_type == 1){
$('.new_client').hide();
$('.old_client').show();
$(".old_client").find("select, input, textarea").prop("required", true);
$(".new_client").find("select, input, textarea").val("").prop("required", false);
}else{
$('.new_client').hide();
$('.old_client').show();
$(".old_client").find("select, input, textarea").prop("required", true);
$(".new_client").find("select, input, textarea").val("").prop("required", false);
$('.old_group_client').hide();
$(".old_group_client").find("select, input, textarea").val("").prop("required", false);
}
$('#owner').select2();
$('#owner_branch').select2();
}
toggleRequiredWithAsterisk('#mobile', false);
toggleRequiredWithAsterisk('#gst', false);
}
function removeVehicleForm(){
$('#vehicle_row_div').empty();
// $('#actcual_clients').show();
let status = $('#policy_status').val();
$('#submitButton').show();
// if(status == "completed"){
$('#sales_row').show();// REF : Venkatesh R - Status html Remove. so i removed the 'if'.
// }
}
function removeClientForm(){
$('#client_row_div').empty();
let status = $('#policy_status').val();
$('#submitButton').show();
// if(status == "completed"){
$('#sales_row').show();// REF : Venkatesh R - Status html Remove. so i removed the 'if'.
// }
}
function getVehicleFormData() {
console.log("🔹 Collecting Vehicle Form Data...");
let vhno = $('#modal_vehicle_no').val();
let rc = $('#rc').val();
let client_type = $('#client_type').val();
let vehicle_no_validation = $('#vehicle_no_validation').val();
if (vhno === "" && rc === "") {
toastr.warning("Please enter any one of these: Vehicle No or Chassis No", "Warning");
return;
}
if(vehicle_no_validation == 1){
toastr.warning("Invalid Vehicle Number Format", "Warning");
return;
}
var $form = $('#vehicle_form_row_div');
var isValid = $form.parsley().validate();
if (!isValid) {
console.log("❌ Validation failed for Vehicle Form section");
// Get all invalid fields
var invalidFields = $form.parsley().fields.filter(function (field) {
return !field.isValid();
});
invalidFields.forEach(function (field, index) {
console.log(
"🚫 Invalid Field " + (index + 1) + ":",
field.$element.attr('name') || field.$element.attr('id') || field.$element
);
});
return false;
}
let data = {};
$("#vehicle_form_row_div").find("input, select, textarea").each(function () {
let name = $(this).attr("name");
let value = $.trim($(this).val());
if (name) {
data[name] = value;
console.log("✅ Added field:", name, "=", value);
}
});
// data["client_type"] = client_type;
console.log("📌 Final Data Object:", data);
let url = '<?= base_url("util/createVehicleWithMinimalDataForBDS"); ?>';
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
// Send AJAX request
sendAjaxRequestForGlobal(url, 'POST', data, function(response) {
console.log('Data fetched successfully:', response);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (response.status == true) {
getClientAndBranchAndPolicy(false);
toastr.success(response.message, 'Success');
appendClients(response.clients, response.client_id);
appendVehicles(response.vehicles, response.vehicle_id);
appendBranch(response.branches, response.branch_id);
if(response.data.client_type == 1){
$('.branchdiv').show();
$('.card_group_34').show();
$('.card_group_37').show();
$("select[name='cd_ac_no_for_child[]']").attr("required", true);
}else{
$('.branchdiv').hide();
$('.card_group_34').hide();
$('.card_group_37').hide();
$("select[name='cd_ac_no_for_child[]']").removeAttr("required");
}
$('#client_type').val(response.data?.client_type ?? "").trigger('change');
} else {
toastr.warning(response.message, 'Warning');
}
$('#client_row_div').empty();
$('#vehicle_row_div').empty();
// $('#actcual_clients').show();
let status = $('#policy_status').val();
$('#submitButton').show();
// if(status == "completed"){
$('#sales_row').show(); // REF : Venkatesh R - Status html Remove. so i removed the 'if'.
// }
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('An error occurred while checking the CD amount.', 'Error');
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
});
}
function getClientFormData() {
let client_type = $('#client_type').val();
console.log("🔹 Collecting Client Form Data...");
var isValid = $('#client_form_row_div').parsley().validate();
if (!isValid) {
console.log("❌ Validation failed for Client Form section");
return false;
}
let data = {};
$("#client_form_row_div").find("input, select, textarea").each(function () {
let name = $(this).attr("name");
let value = $.trim($(this).val());
if (name) {
data[name] = value;
console.log("✅ Added field:", name, "=", value);
}
});
data["client_type"] = client_type;
console.log("📌 Final Data Object:", data);
let url = '<?= base_url("util/createClientWithMinimalData"); ?>';
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
// Send AJAX request
sendAjaxRequestForGlobal(url, 'POST', data, function(response) {
console.log('Data fetched successfully:', response);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (response.status == true) {
getClientAndBranchAndPolicy(false);
toastr.success(response.message, 'Success');
appendClients(response.clients, response.client_id);
appendBranch(response.branches, response.branch_id);
} else {
toastr.warning(response.message, 'Warning');
}
$('#client_row_div').empty();
$('#vehicle_row_div').empty();
let status = $('#policy_status').val();
$('#submitButton').show();
// if(status == "completed"){
$('#sales_row').show(); // REF : Venkatesh R - Status html Remove. so i removed the 'if' Submit la locked. "Empty field ID: Empty field ID: policy_issue_date"
// }
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('An error occurred while checking the CD amount.', 'Error');
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
});
}
function appendVehicleForm(){
$('#vehicle_row_div').empty();
let html = `
<div class="col-md-12">
<div class="form-section">
<div id="vehicle_form_row_div" data-parsley-validate>
<h4 class="m-1">
Add New Vehicle
<a class="text-dark float-right" aria-expanded="true">
<i class="mdi mdi-close" style="font-size: 28px;" onclick="removeVehicleForm()"></i>
</a>
</h4>
<div class="row">
<!-- <div class="form-group col-md-3">
<label for="modal_vehicle_no">Vehicle No</label>
<input type="text" class="form-control" id="modal_vehicle_no" name="vehicle_no"
placeholder="Enter Vehicle No"
onchange="validateInput(this, 'vehicle', 'vehicle_no')">
</div> -->
<div class="form-group col-md-5">
<label for="modal_vehicle_no">
Vehicle No
<small style="font-size: x-small;">( Normal: AA##AA#### | Bharat: ##BH####AA )</small>
</label>
<div class="vehicle-input-wrapper">
<div class="vehicle-otp-container" id="vehicle_otp_container"></div>
<input
type="hidden"
id="modal_vehicle_no"
name="vehicle_no"
required
data-parsley-required="true"
data-parsley-required-message="Vehicle number is required"
data-parsley-minlength="[9, 10]"
data-parsley-minlength-message="Please enter complete vehicle number"
data-parsley-vehicle-format="true"
data-parsley-vehicle-format-message="Invalid vehicle number format"
data-parsley-trigger="change"
oninput="validateInput(this, 'vehicle', 'vehicle_no')"
>
<input type="hidden" id="vehicle_no_validation">
<div class="vehicle-result" id="vehicle_result"></div>
</div>
</div>
<div class="form-group col-md-4">
<label for="type"> Vehicle Type <span class="text-danger">*</span></label>
<select class="form-control" id="type" name="type" required>
<option value="">Select Type</option>
<?php
if (isset($vehicle_type) && count($vehicle_type)) {
foreach ($vehicle_type as $key => $value) {
echo "<option value='" . $value['id'] . "'>" . $value['vehicle_type'] . "</option>";
}
}
?>
</select>
</div>
<div class="form-group col-md-3">
<label for="rc">Chassis No</label>
<input type="text" class="form-control" id="rc" name="rc"
placeholder="Enter Chassis No"
onchange="validateInput(this, 'vehicle', 'rc')">
</div>
<div class="d-none">
<label for="rto_id">RTO</label>
<select class="form-control readonly-color readonly-select" id="rto_id" name="rto_id" style="appearance:none;-webkit-appearance:none;-moz-appearance:none;cursor:not-allowed;">
<option value=""></option>
<?php
if (isset($rto_details) && count($rto_details)) {
foreach ($rto_details as $key => $value) {
echo '<option value="' . $value['id'] . '" data-state="' . $value['rto_state'] . '" data-code="' . $value['rto_code'] . '" data-name="'.$value['rto_name'].'">' . $value['rto_name'] . '</option>';
}
}
?>
</select>
</div>
</div>
<div class="row">
<div class="form-group col-md-2">
<label class="switch" style="position: relative;top: 32px;left: 20px;">
<input id="vehicle_client_btn" type="checkbox" name="vehicle_client_btn" onchange="toggleClient(this)">
<span class="slider round" style="height: 27px;"></span>
</label>
<label for="vehicle_client_btn" style="position: relative;top: 33px;left: 25px;"> New Client </label>
</div>
<div class="form-group col-md-3">
<label for="client_type">Client Type<span class="text-danger">*</span></label>
<select class="form-control" id="owner_client_type" name="client_type" required>
<option value="">Select Client type</option>
<option value="1">Group</option>
<option value="2">Individual</option>
</select>
</div>
<div class="form-group col-md-3 old_client">
<label for="owner">Owner Name <span class="text-danger">*</span></label>
<select class="form-control" id="owner" name="owner" required>
<option value="">Select Owner</option>
</select>
</div>
<div class="form-group col-md-3 old_client old_group_client">
<label for="owner_branch">Branch <span class="text-danger">*</span></label>
<select class="form-control" id="owner_branch" name="branch_id">
<option value="">Select Branch</option>
</select>
</div>
<div class="form-group col-md-3 v_common new_client" style="display: none;">
<label for="client_name">Client Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="client_name" name="client_name">
</div>
<div class="form-group col-md-3 v_group_client new_client" style="display: none;">
<label for="short_name">Client Short Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="short_name" name="short_name"
onkeyup="validateInputForClient(this, 'clients', 'short_name')">
</div>
<div class="form-group col-md-3 v_group_client new_client" style="display: none;">
<label for="branch_name">Client Branch Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="branch_name" name="branch_name">
</div>
<div class="form-group col-md-3 v_group_client new_client" style="display: none;">
<label for="contact_name">Contact Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="contact_name" name="name">
</div>
<div class="form-group col-md-3 v_common new_client" style="display: none;">
<label for="email">Email <span class="text-danger">*</span></label>
<input type="email" class="form-control" id="email" name="email"
placeholder="Enter Email">
</div>
<div class="form-group col-md-3 new_client v_individual_client" style="display: none;">
<label for="mobile">Mobile <span class="text-danger"></span></label>
<input type="number" class="form-control" id="mobile" name="mobile"
placeholder="Enter Mobile">
</div>
<div class="form-group col-md-3 v_group_client new_client" style="display: none;">
<label for="gst">GST <span class="text-danger"></span></label>
<input type="text" class="form-control" id="gst" name="gst"
placeholder="Enter GST Number"
oninput="validateInputForClient(this, 'client_branch', 'gst')">
</div>
</div> <!-- /.row -->
<div class="row">
<div class="col-md-12 text-right m-b-0">
<a class="btn btn-primary waves-effect waves-light mr-1" id="vehicle_form_submit_btn_id_for_disable" onclick="getVehicleFormData()">Submit</a>
</div>
</div>
</div> <!-- /#vehicle_form_row_div -->
</div>
</div>`;
$('#vehicle_row_div').append(html);
appendOwner(client_list);
$('#owner').select2();
$('#owner_branch').select2();
$('#client_name').on('input', generateShortName);
/** $("#client_name").on("input change keyup", function() {
clearTimeout(shortNameTimer); // cancel previous call
shortNameTimer = setTimeout(() => {
generateShortName(); // only runs after 200ms pause
}, 200); // adjust debounce delay as needed
}); **/
// $("#vehicle_form_row_div").on("input change", "input, select, textarea", function () {
// if ($("#client_type").val() === "") {
// alert("Please select the client type first");
// if ($(this).is(":checkbox")) {
// // uncheck checkbox
// $(this).prop("checked", false);
// } else {
// // clear text/select/textarea
// $(this).val("");
// }
// $("#client_type").focus(); // focus back to client_type
// }
// });
$('#owner').change(function(){
let owner_id = $(this).val();
console.log('owner_id', owner_id);
if(branch_list != '') {
// console.log(branch_list[client_id]);
let data = branch_list[owner_id];
appendOwnerBranch(data);
}
})
$('#owner_client_type').on('change', function() {
let btn = $("#vehicle_client_btn");
let client_type = $(this).val();
if(client_type == 1){
if(btn.is(':checked')){
$('.v_group_client').show();
$('.v_individual_client').hide();
$(".v_group_client").find("select, input, textarea").val("").prop("required", true);
$(".v_individual_client").find("select, input, textarea").val("").prop("required", false);
}else{
$('.v_group_client').hide();
$('.v_individual_client').hide();
$(".v_group_client").find("select, input, textarea").val("").prop("required", false);
$(".v_individual_client").find("select, input, textarea").val("").prop("required", false);
$('.old_group_client').show();
$(".old_group_client").find("select, input, textarea").val("").prop("required", true);
$(".v_common").find("select, input, textarea").val("").prop("required", false);
}
toggleRequiredWithAsterisk('#mobile', false);
}else{
if(btn.is(':checked')){
$('.v_group_client').hide();
$('.v_individual_client').show();
$(".v_group_client").find("select, input, textarea").val("").prop("required", false);
$(".v_individual_client").find("select, input, textarea").val("").prop("required", true);
}else{
$('.v_group_client').hide();
$('.v_individual_client').hide();
$(".v_group_client").find("select, input, textarea").val("").prop("required", false);
$(".v_individual_client").find("select, input, textarea").val("").prop("required", false);
$('.old_group_client').hide();
$(".old_group_client").find("select, input, textarea").val("").prop("required", false);
$(".v_common").find("select, input, textarea").val("").prop("required", false);
}
toggleRequiredWithAsterisk('#mobile', false);
}
toggleRequiredWithAsterisk('#gst', false);
$.each(client_list, function(index, item) {
if (item.client_type == client_type) {
let client_show_name = item.client_name;
if (item.client_type == 2) {
// client_show_name = item.client_name + ' - ' + (item.dob ?? '') + (item.pan ?? '');
client_show_name = item.client_name + (item.dob ? ('- (' + item.dob + ' )' ) : '') + (item.pan ? ('- ' + item.pan ) : '');
}
var option = $('<option>', {
value: item.id,
text: client_show_name,
'data-cn': item.client_name,
'data-ct': item.client_type
});
$('#owner').append(option);
}
});
});
// for this function to validate the vehicle number and making text
(function() {
const totalBoxes = 10;
let vehicleInputs = [];
const container = document.getElementById('vehicle_otp_container');
const hiddenInput = document.getElementById('modal_vehicle_no');
const resultDiv = document.getElementById('vehicle_result');
// Create input boxes
function createVehicleInputs() {
container.innerHTML = '';
vehicleInputs = [];
for (let i = 0; i < totalBoxes; i++) {
const input = document.createElement('input');
input.type = 'text';
input.className = 'vehicle-otp-box';
input.maxLength = 1;
input.dataset.index = i;
input.addEventListener('input', handleInput);
input.addEventListener('keydown', handleKeydown);
input.addEventListener('paste', handlePaste);
container.appendChild(input);
vehicleInputs.push(input);
}
}
function handleInput(e) {
const input = e.target;
const index = parseInt(input.dataset.index);
const value = input.value.toUpperCase();
console.log('toUpperCase value :', value);
if (value && /[A-Z0-9]/.test(value)) {
input.value = value;
input.classList.add('filled');
if (index < totalBoxes - 1) {
vehicleInputs[index + 1].focus();
}
} else {
input.value = '';
input.classList.remove('filled');
}
updateHiddenInput();
validateVehicle();
// Trigger Parsley validation
if ($(hiddenInput).parsley) {
$(hiddenInput).parsley().validate();
}
}
function handleKeydown(e) {
const input = e.target;
const index = parseInt(input.dataset.index);
if (e.key === 'Backspace' && !input.value && index > 0) {
vehicleInputs[index - 1].focus();
vehicleInputs[index - 1].value = '';
vehicleInputs[index - 1].classList.remove('filled');
updateHiddenInput();
validateVehicle();
// Trigger Parsley validation
if ($(hiddenInput).parsley) {
$(hiddenInput).parsley().validate();
}
} else if (e.key === 'ArrowLeft' && index > 0) {
vehicleInputs[index - 1].focus();
} else if (e.key === 'ArrowRight' && index < totalBoxes - 1) {
vehicleInputs[index + 1].focus();
}
}
function handlePaste(e) {
e.preventDefault();
const pastedData = e.clipboardData.getData('text').toUpperCase().replace(/[^A-Z0-9]/g, '');
for (let i = 0; i < pastedData.length && i < totalBoxes; i++) {
vehicleInputs[i].value = pastedData[i];
vehicleInputs[i].classList.add('filled');
}
const nextEmpty = Math.min(pastedData.length, totalBoxes - 1);
vehicleInputs[nextEmpty].focus();
updateHiddenInput();
validateVehicle();
// Trigger Parsley validation
if ($(hiddenInput).parsley) {
$(hiddenInput).parsley().validate();
}
}
function updateHiddenInput() {
const value = vehicleInputs.map(input => input.value).join('');
hiddenInput.value = value;
// Trigger change event for Parsley
$(hiddenInput).trigger('change');
}
function getInputValue() {
console.log('vehicleInputs', vehicleInputs);
return vehicleInputs.map(input => input.value).join('');
}
function maskNormalFormat(input) {
const cleaned = input.replace(/[^A-Z0-9]/g, '');
// Match exactly: 2 letters + 2 digits + 1-2 letters + 4 digits (total 9-10 chars)
const pattern = /^([A-Z]{2})(\d{2})([A-Z]{1,2})(\d{4})$/;
const match = cleaned.match(pattern);
if (match) {
return `${match[1]} ${match[2]} ${match[3]} ${match[4]}`;
}
return null;
}
function maskBharatFormat(input) {
const cleaned = input.replace(/[^A-Z0-9]/g, '');
// Match exactly: 2 digits + BH + 4 digits + 1-2 letters (total 9-10 chars)
const pattern = /^(\d{2})(BH)(\d{4})([A-Z]{1,2})$/;
const match = cleaned.match(pattern);
if (match && cleaned.length === 10) {
return `${match[1]} ${match[2]} ${match[3]} ${match[4]}`;
}
return null;
}
function validateVehicle_REFRV() {
const input = getInputValue();
console.log('getInputValue :', input);
console.log('totalBoxes :', totalBoxes);
if (input.length == 0) {
resultDiv.classList.remove('show');
return;
}
// if (input.length < totalBoxes || input.length < (totalBoxes - 1)) {
// return;
// }
const normalFormatted = maskNormalFormat(input);
const bharatFormatted = maskBharatFormat(input);
console.log('normalFormatted :', normalFormatted);
console.log('normalFormatted :', normalFormatted);
if (normalFormatted) {
resultDiv.innerHTML = normalFormatted + '<span class="vehicle-badge success">✓ Normal</span>';
resultDiv.classList.add('show');
$('#vehicle_no_validation').val('0');
} else if (bharatFormatted) {
resultDiv.innerHTML = bharatFormatted + '<span class="vehicle-badge success">✓ Bharat</span>';
resultDiv.classList.add('show');
$('#vehicle_no_validation').val('0');
} else {
// resultDiv.innerHTML = 'Invalid Format <span class="vehicle-badge error">✗</span>';
// resultDiv.classList.add('show');
$('#vehicle_no_validation').val('1');
}
// call here
autoFetchRtoName(input);
}
function validateVehicle() {
const input = getInputValue();
console.log('getInputValue :', input);
console.log('totalBoxes :', totalBoxes);
if (input.length == 0) {
resultDiv.classList.remove('show');
return;
}
const rtoDetails = <?php echo json_encode($rto_details); ?>;
const normalFormatted = maskNormalFormat(input);
const bharatFormatted = maskBharatFormat(input);
console.log(`normalFormatted : ${normalFormatted} `);
let stateCode = input.slice(0, 2); // TN
let numberCode = input.slice(2, 4); // 01
let matched = false;
let rtoName = '';
let rtoId = '';
$(rtoDetails).each(function (index, value) {
if (stateCode === value.rto_state && numberCode === value.rto_code)
{
matched = true;
rtoName = value.rto_name;
rtoId = value.id;
return false;
}
});
resultDiv.innerHTML = '';
if (normalFormatted) {
resultDiv.innerHTML = normalFormatted +' <span class="vehicle-badge success">✓ Normal</span>';
if (matched && rtoName) {
resultDiv.innerHTML += ' | <span>' + rtoName + '</span>' + ' <span class="vehicle-badge success">✓ RTO</span>';
$('#rto_id').val(rtoId).trigger('change');
}
resultDiv.classList.add('show');
$('#vehicle_no_validation').val('0');
}
else if (bharatFormatted) {
resultDiv.innerHTML = bharatFormatted +' <span class="vehicle-badge success">✓ Bharat</span>';
if (matched && rtoName) {
resultDiv.innerHTML += ' | <span>' + rtoName + '</span>' +' <span class="vehicle-badge success">✓ RTO</span>';
$('#rto_id').val(rtoId).trigger('change');
}
resultDiv.classList.add('show');
$('#vehicle_no_validation').val('0');
}
else {
if (matched && rtoName) {
resultDiv.innerHTML = '<span>' + rtoName + '</span>' + ' <span class="vehicle-badge success">✓ RTO</span>';
resultDiv.classList.add('show');
$('#rto_id').val(rtoId).trigger('change');
}
else {
resultDiv.innerHTML = '';
resultDiv.classList.remove('show');
$('#rto_id').val('').trigger('change');
}
$('#vehicle_no_validation').val('1');
}
}
// Custom Parsley validator for vehicle format
window.Parsley.addValidator('vehicleFormat', {
validateString: function(value) {
if (!value) {
return false;
}
const cleaned = value.replace(/[^A-Z0-9]/g, '');
// Check if it's Bharat series (must be exactly 10 chars)
if (cleaned.includes('BH')) {
if (cleaned.length !== 10) {
return false;
}
return !!maskBharatFormat(value);
}
// Must be 9 or 10 characters (9 for 1 series letter, 10 for 2 series letters)
if (value.length < 9 || value.length > 10) {
return false;
}
const normalFormatted = maskNormalFormat(value);
const bharatFormatted = maskBharatFormat(value);
return !!(normalFormatted || bharatFormatted);
},
messages: {
en: 'Invalid vehicle number format'
}
});
// Add error class to OTP boxes when Parsley shows error
window.Parsley.on('field:error', function() {
if (this.$element.attr('id') === 'modal_vehicle_no') {
vehicleInputs.forEach(input => {
if (input.value) {
input.classList.add('parsley-error');
}
});
}
});
// Remove error class when validation passes
window.Parsley.on('field:success', function() {
if (this.$element.attr('id') === 'modal_vehicle_no') {
vehicleInputs.forEach(input => {
input.classList.remove('parsley-error');
});
}
});
// Reset function - can be called from outside
window.resetVehicleField = function() {
vehicleInputs.forEach(input => {
input.value = '';
input.classList.remove('filled');
input.classList.remove('parsley-error');
});
hiddenInput.value = '';
resultDiv.classList.remove('show');
// Reset Parsley validation
if ($(hiddenInput).parsley) {
$(hiddenInput).parsley().reset();
}
// Focus first input
vehicleInputs[0].focus();
};
// Initialize
createVehicleInputs();
})();
}
function appendClientForm(){
let client_type = $('#client_type').val();
$('#client_row_div').empty();
let html = `
<div class="col-md-12">
<div class="form-section">
<div id="client_form_row_div" data-parsley-validate>
<h4 class="m-1">
Add New Client
<a class="text-dark float-right" aria-expanded="true">
<i class="mdi mdi-close" style="font-size: 28px;" onclick="removeClientForm()"></i>
</a>
</h4>
<div class="row">
<div class="form-group col-md-3 new_client">
<label for="client_name">Client Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="client_name" name="client_name" required>
</div>
<div class="form-group col-md-3 group_client new_client">
<label for="short_name">Client Short Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="short_name" name="short_name"
onkeyup="validateInputForClient(this, 'clients', 'short_name')" required>
</div>
<div class="form-group col-md-3 group_client new_client">
<label for="branch_name">Client Branch Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="branch_name" name="branch_name" required>
</div>
<div class="form-group col-md-3 group_client new_client">
<label for="contact_name">Contact Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="contact_name" name="name" required>
</div>
<div class="form-group col-md-3 new_client" >
<label for="email">Email <span class="text-danger">*</span></label>
<input type="email" class="form-control" id="email" name="email"
placeholder="Enter Email" required>
</div>
<div class="form-group col-md-3 individual_client new_client">
<label for="mobile">Mobile <span class="text-danger">*</span></label>
<input type="number" class="form-control" id="mobile" name="mobile"
placeholder="Enter Mobile" required>
</div>
<div class="form-group col-md-3 group_client new_client">
<label for="gst">GST <span class="text-danger"></span></label>
<input type="text" class="form-control" id="gst" name="gst"
placeholder="Enter GST Number"
oninput="validateInputForClient(this, 'client_branch', 'gst')">
</div>
</div>
<div class="row">
<div class="col-md-12 text-right m-b-0">
<a class="btn btn-primary waves-effect waves-light mr-1" id="client_form_submit_btn" onclick="getClientFormData()">Submit</a>
</div>
</div>
</div>
</div>
</div>`;
$('#client_row_div').append(html);
$('#client_name').on('input', generateShortName);
/** $("#client_name").on("input change keyup", function() {
clearTimeout(shortNameTimer); // cancel previous call
shortNameTimer = setTimeout(() => {
generateShortName(); // only runs after 200ms pause
}, 200); // adjust debounce delay as needed
}); **/
if(client_type == 1){
$('.group_client').show();
$('.individual_client').hide();
$(".group_client").find("select, input, textarea").val("").prop("required", true);
$(".individual_client").find("select, input, textarea").val("").prop("required", false);
}else{
$('.group_client').hide();
$('.individual_client').show();
$(".group_client").find("select, input, textarea").val("").prop("required", false);
$(".individual_client").find("select, input, textarea").val("").prop("required", true);
}
toggleRequiredWithAsterisk('#gst', false);
toggleRequiredWithAsterisk('#mobile', false);
$("#client_form_row_div").on("input change", "input, select, textarea", function () {
if ($("#client_type").val() === "") {
alert("Please select the client type first");
if ($(this).is(":checkbox")) {
// uncheck checkbox
$(this).prop("checked", false);
} else {
// clear text/select/textarea
$(this).val("");
}
$("#client_type").focus(); // focus back to client_type
}
});
}
function generateShortName() {
let clientInput = $("#client_name");
let shortInput = $("#short_name");
let newClientName = clientInput.val().trim();
console.log(`LN : NEW - ${newClientName}`);
if (newClientName.length == 0){ shortInput.val(''); return; }
if (newClientName.length > 0) {
let shortName = newClientName.substring(0, 10).replace(/\s+/g, '').toUpperCase();
makeUniqueShortName(shortName);
}
}
function makeUniqueShortName(baseName) {
let input = $("#short_name")[0]; // input element
checkDuplicateTableFieldValue("clients", "short_name", baseName, function(isDuplicate) {
if (isDuplicate) {
// Append sequence until unique
let counter = 1;
function tryNext() {
let padded = String(counter).padStart(3, '0'); // 001, 002, 003
let newName = baseName + padded;
checkDuplicateTableFieldValue("clients", "short_name", newName, function(exists) {
if (exists) {
counter++;
tryNext(); // keep checking
} else {
$("#short_name").val(newName);
validateInputForClient(input, "clients", "short_name");
}
});
}
tryNext();
} else {
$("#short_name").val(baseName);
validateInputForClient(input, "clients", "short_name");
}
});
}
function validateInputForClient(input, table, field) {
let owner_type = $('#Owner_type').val();
let client_type = $('#client_type').val();
console.log('owner_type', owner_type);
console.log('client_type', client_type);
if((client_type == 2 || owner_type == 2) && field == 'short_name'){
return;
}
let value = $(input).val();
if (!value) return;
let label = $(input).closest('.form-group').find('label').text().replace('*', '').trim();
let message = label ? label + " already exists!" : "Value is duplicate!";
// Set validating state
isGSTValidating = true;
isGSTValid = false;
$('#hide_smbt_btn button').prop('disabled', true);
checkDuplicateTableFieldValue(table, field, value, function(isDuplicate) {
isGSTValidating = false;
if (isDuplicate) {
toastr.warning(message, 'Warning');
// $(input).val('');
isGSTValid = false;
$('#client_form_submit_btn').prop('disabled', true);
$('#vehicle_form_submit_btn_id_for_disable').prop('disabled', true);
} else {
isGSTValid = true;
$('#client_form_submit_btn').prop('disabled', false);
$('#vehicle_form_submit_btn_id_for_disable').prop('disabled', false);
}
});
$('#hide_smbt_btn_button').prop('disabled', false);
}
$('#client_type').on('change', function() {
let client_type = $(this).val();
console.log( "client_type", client_type);
if(client_type == 1){
$('.group_client').show();
$('.individual_client').hide();
$(".group_client").find("select, input, textarea").val("").prop("required", true);
$(".individual_client").find("select, input, textarea").val("").prop("required", false);
toggleRequiredWithAsterisk('#gst', false);
}else{
$('.group_client').hide();
$('.individual_client').show();
$(".group_client").find("select, input, textarea").val("").prop("required", false);
$(".individual_client").find("select, input, textarea").val("").prop("required", true);
toggleRequiredWithAsterisk('#gst', false);
}
});
function toggleRequiredWithAsterisk(inputSelector, makeRequired) {
var $input = $(inputSelector);
var $label = $input.closest('.form-group').find('label');
console.log('Toggling required for:', inputSelector, 'Make required:', makeRequired);
if(makeRequired) {
$input.attr('required', true);
console.log('Added required attribute');
// Add asterisk if not already present
if($label.find('span.text-danger').length === 0) {
$label.append(' <span class="text-danger">*</span>');
console.log('Added * to label');
} else {
console.log('* already exists in label');
}
} else {
$input.removeAttr('required');
console.log('Removed required attribute');
// Remove asterisk
$label.find('span.text-danger').remove();
console.log('Removed * from label');
}
console.log('Current input attributes:', $input.prop('outerHTML'));
console.log('Current label html:', $label.html());
}
$(document).on("input change", "input[name='total[]']", function () {
let val = $(this).val();
console.log("✅ total[] changed:", val);
});
function autoFetchRtoName(val) {
console.log(`i am here ${val}`);
val = val.toUpperCase().trim();
let stateCode = val.slice(0, 2); // 1st 2 here i am split the state code
let numberCode = val.slice(2, 4); // 2nd 2 here i am split the number code
console.log(`Ln ST: ${stateCode} | NC: ${numberCode}`);
let matched = false;
$('#rto_id option').each(function() {
let optionState = $(this).attr('data-state');
let optionCode = $(this).attr('data-code');
console.log(`Ln optionState : ${optionState} | optionCode : ${optionCode}`);
if (stateCode === optionState && numberCode === optionCode) {
$('#rto_id').val($(this).val()).trigger('change'); // ✅ select it
matched = true;
return false; // break the loop
}
});
if (!matched) {
$('#rto_id').val('').trigger('change'); // reset select
}
}
function setAgentCode(select) {
if (!select || !select.options) return; // guard clause
let selectedOption = select.options[select.selectedIndex];
if (!selectedOption) return; // nothing selected
let agentCode = selectedOption.getAttribute('data-agent-code');
$('#agent_code').val(agentCode ? agentCode : '');
// let agentDiv = document.getElementById('agent_info');
// if (!agentCode) {
// agentDiv.innerHTML = '';
// agentDiv.classList.remove('show');
// $('#agent_code').val('');
// return;
// }
// agentDiv.innerHTML =
// '<span class="text-success">' + agentCode + '</span>' +
// ' <span class="vehicle-badge success">✓ Code</span>';
// $('#agent_code').val(agentCode);
// agentDiv.classList.add('show');
}
function setNhanceBranch(select, show_id) {
if (!select || !select.options || select.selectedIndex < 0) {
console.warn('No option selected yet');
return;
}
let selectedOption = select.options[select.selectedIndex];
let nbID = selectedOption.getAttribute('data-nbid');
let nbName = selectedOption.getAttribute('data-nbname');
console.log('NB ID:', nbID);
console.log('NB Name:', nbName);
if(show_id == "nhance_branch_info"){
$('#issuer_branch').val(nbID ? nbID : '');
}else{
$('#service_person_branch_id').val(nbID ? nbID : '');
}
let nbDiv = document.getElementById(show_id);
if (!nbID || !nbName) {
nbDiv.innerHTML = '';
nbDiv.classList.remove('show');
return;
}
nbDiv.innerHTML =
'<span class="text-success">' + nbName + '</span>' +
' <span class="vehicle-badge success">✓ Nhance Branch</span>';
nbDiv.classList.add('show');
}
function setRM(select, show_id) {
if (!select || !select.options || select.selectedIndex < 0) {
console.warn('No option selected yet');
return;
}
let selectedOption = select.options[select.selectedIndex];
let rmid = selectedOption.getAttribute('data-rmid');
let rmname = selectedOption.getAttribute('data-rmname');
console.log('RM ID:', rmid);
console.log('RM Name:', rmname);
if(show_id == "salse_rm_info"){
$('#salse_person_manager_id').val(rmid ? rmid : '');
}else{
$('#service_person_manager_id').val(rmid ? rmid : '');
}
let rmDiv = document.getElementById(show_id);
if (!rmid || !rmname) {
rmDiv.innerHTML = '';
rmDiv.classList.remove('show');
return;
}
rmDiv.innerHTML =
'<span class="text-success">' + rmname + '</span>' +
' <span class="vehicle-badge success">✓ RM</span>';
rmDiv.classList.add('show');
}
function setPolicyIssueMonth(){
let monthDiv = document.getElementById('policy_issue_month_info');
monthAbbr = document.getElementById('month').value;
if (!monthAbbr) {
monthDiv.innerHTML = '';
monthDiv.classList.remove('show');
return;
}
monthDiv.innerHTML =
'<span class="text-success">' + monthAbbr + '</span>' +
' <span class="vehicle-badge success">✓ Month</span>';
monthDiv.classList.add('show');
}
function setBPValue(inputValue) {
let bpValueField = document.querySelectorAll('.bp_value');
if(bpValueField){
bpValueField.forEach((field) => { field.value = inputValue; });
console.log("Updated", bpValueField.length, "hidden base premiums");
} else {
console.error("Error: Element with class '.bp_value' not found.");
}
}
function setTPValue(inputValue) {
let tpValueField = document.querySelectorAll('.tp_value');
if (tpValueField) {
tpValueField.forEach((field) => { field.value = inputValue; });
console.log("Updated", tpValueField.length, "hidden tp premiums");
} else {
console.error("Error: Element with class '.tp_value' not found.");
}
}
function setTEPValue(inputValue) {
let tepValueField = document.querySelectorAll('.ter_value');
tepValueField.forEach((field) => { field.value = inputValue; });
if (tepValueField) {
tepValueField.value = inputValue;
console.log("Updated", tepValueField.length, "hidden tep premiums");
} else {
console.error("Error: Element with class '.tep_value' not found.");
}
}
</script>