GWM : Email login issue

This commit is contained in:
Gowtham M 2025-03-20 15:02:09 +05:30
commit cd260d4ffd
20 changed files with 4563 additions and 3154 deletions

View File

@ -156,6 +156,8 @@ $routes->group("/employee", ["filter" => "authMVC"], function ($routes) {
$routes->get("test-rack-rate", "EmployeeController::testRackRate");
$routes->post("test-rack-rate", "EmployeeController::testRackRate");
$routes->get('test_members_list', 'EmployeeController::test_members_list');
$routes->post('get_emp_history','EmployeeController::getEmpHistory');
});
$routes->group("/master", ["filter" => "authMVC"], function ($routes) {

File diff suppressed because it is too large Load Diff

View File

@ -98,18 +98,59 @@ class DashboardController extends AdminController
public function dashboard()
{
$data = [];
$data['page_name'] = 'Dashboard';
$results = $this->clientModel->select('clients.id as client_id, clients.client_name, clients.short_name,
client_branch.id as client_branch_id, client_branch.branch_name,
client_branch.branch_code, employees.id as employee_id,
employees.name as employee_name, employees.relationship,
employees.emp_code, employees.emp_status, auth_history.user_type, client_policy.policy_type_id, client_policy.id as client_policy_id')
->join('client_branch', 'clients.id = client_branch.client_id', 'left')
->join('client_policy', 'client_branch.id = client_policy.client_branch_id', 'left')
->join('employees', 'client_branch.id = employees.client_branch_id', 'left')
->join('auth_history', 'employees.id = auth_history.user_id AND "employee" = auth_history.user_type', 'left')
->findAll();
$db = db_connect();
$sql = "SELECT
clients.id AS client_id,
clients.client_name,
clients.short_name,
client_branch.id AS client_branch_id,
client_branch.branch_name,
client_branch.branch_code,
COUNT(employees.id) AS total_employees,
SUM(CASE WHEN employees.emp_status = 'draft' THEN 1 ELSE 0 END) AS draft_count,
SUM(CASE WHEN employees.emp_status IN ('enrolled', 'active') THEN 1 ELSE 0 END) AS enrolled_count,
SUM(CASE WHEN auth_history.user_id IS NOT NULL THEN 1 ELSE 0 END) AS logged_in_count,
SUM(CASE WHEN auth_history.user_id IS NULL THEN 1 ELSE 0 END) AS not_logged_in_count,
CASE
WHEN EXISTS (
SELECT 1 FROM client_policy
WHERE client_policy.client_branch_id = client_branch.id
AND client_policy.is_active = 1
AND client_policy.open_for_enrollment = 1
) THEN 1
ELSE 0
END AS open_or_close_enrollment
FROM clients
LEFT JOIN client_branch ON clients.id = client_branch.client_id
LEFT JOIN employees ON client_branch.id = employees.client_branch_id
LEFT JOIN (
SELECT user_id, user_type
FROM auth_history
WHERE user_type = 'employee'
GROUP BY user_id
) AS auth_history ON employees.id = auth_history.user_id
WHERE employees.relationship = 'Self'
AND employees.emp_status IN ('draft', 'enrolled', 'active')
AND employees.is_active = 1
AND clients.is_active = 1
AND client_branch.is_active = 1
GROUP BY clients.id, client_branch.id";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['client_branch_emp_list'] = $results;
$session = \Config\Services::session();
$session->set('enrollment_data', json_encode($data));
// $pendingActionsController = new PendingActionsController;
// $pendingActionsData = $pendingActionsController->getPendingActionsForDashBoard();
@ -118,95 +159,6 @@ class DashboardController extends AdminController
// $businessTeamStatusData = $this->data_construct_for_bds($businessTeamData);
// $financeTeamStatusData = $this->data_construct_for_bds($financeTeamData);
$groupedData = [];
foreach ($results as $row) {
$clientId = $row['client_id'];
$clientName = $row['client_name'];
$shortName = $row['short_name'];
$branchId = $row['client_branch_id'];
$branchName = $row['branch_name'];
$branchCode = $row['branch_code'];
$clientPolicyId = $row['client_policy_id'];
$policyTypeId = $row['policy_type_id'];
$employeeId = '';
if ($employeeId != $row['employee_id']) {
$employeeId = $row['employee_id'];
} else {
$employeeId = null;
}
$employeeName = $row['employee_name'];
$employeeRelationship = $row['relationship'];
$employeeEmpCode = $row['emp_code'];
$employeeEmpStatus = $row['emp_status'];
$employeeUserType = $row['user_type'];
// Initialize the client entry if it doesn't exist
if (!isset($groupedData[$clientId])) {
$groupedData[$clientId] = [
'client_id' => $clientId,
'client_name' => $clientName,
'short_name' => $shortName,
'branches' => []
];
}
// Initialize the branch entry if it doesn't exist
if (!isset($groupedData[$clientId]['branches'][$branchId])) {
$groupedData[$clientId]['branches'][$branchId] = [
'client_branch_id' => $branchId,
'branch_name' => $branchName,
'branch_code' => $branchCode,
'emp_login' => 0,
'emp_enroll' => 0,
'client_policies' => [],
'employees' => []
];
}
// Add the client policy to the branch's policies list if it exists, not already added, and policyTypeId is not equal to 1
if ($clientPolicyId !== null && $policyTypeId != 1 && !in_array(['client_policy_id' => $clientPolicyId, 'policy_type_id' => $policyTypeId], $groupedData[$clientId]['branches'][$branchId]['client_policies'])) {
$groupedData[$clientId]['branches'][$branchId]['client_policies'][] = [
'client_policy_id' => $clientPolicyId,
'policy_type_id' => $policyTypeId
];
}
// Append employee error to the branch's employees list if relationship is 'Self' and not already added
$employeeKey = $employeeId . '-' . $employeeName; // unique key to identify an employee
if ($employeeId !== null && $employeeRelationship == 'Self' && !isset($groupedData[$clientId]['branches'][$branchId]['employees'][$employeeKey])) {
$groupedData[$clientId]['branches'][$branchId]['employees'][$employeeKey] = [
'employee_id' => $employeeId,
'employee_name' => $employeeName,
'relationship' => $employeeRelationship,
'emp_code' => $employeeEmpCode,
'emp_status' => $employeeEmpStatus,
'user_type' => $employeeUserType
];
if (!empty($employeeUserType)) {
$groupedData[$clientId]['branches'][$branchId]['emp_login']++;
}
// Increment emp_enroll if emp_status is not 'draft'
if ($employeeEmpStatus !== 'draft') {
$groupedData[$clientId]['branches'][$branchId]['emp_enroll']++;
}
}
}
// Re-index the arrays to match the expected structure
foreach ($groupedData as &$client) {
foreach ($client['branches'] as &$branch) {
$branch['employees'] = array_values($branch['employees']);
}
$client['branches'] = array_values($client['branches']);
}
$data['client_branch_emp_list'] = $groupedData;
$session = \Config\Services::session();
$session->set('enrollment_data', json_encode($data));
// echo "<pre>";
// $data['pendingActionsData'] = $pendingActionsData;
// $data['businessTeamCount'] = count($businessTeamData) ?? 0;
// $data['financeTeamCount'] = count($financeTeamData) ?? 0;
@ -214,9 +166,8 @@ class DashboardController extends AdminController
// $data['financeTeamStatusData'] = $financeTeamStatusData;
// $data['policyStatus'] = $this->policyStatus;
// $data['colorShades'] = $this->colorShades;
// dd($data);die;
$data['page_name'] = 'Dashboard';
// dd($data);
echo view('layout/header', $data);
echo view('DashBoard', $data);

View File

@ -25,6 +25,9 @@ use App\Models\InsurerExcelExportTemplateModel;
use App\Models\InsurerModel;
use App\Models\ClientDepositModel;
use App\Models\PolicyPremium2Model;
use App\Models\AuditHistoryModel;
use App\Models\UserModel;
use App\Controllers\Jobs;
@ -64,6 +67,9 @@ class EmployeeController extends AdminController
protected $insurerModel;
protected $cashDepositModel;
protected $PolicyPremium2Model;
protected $auditHistory;
protected $userModel;
public function __construct()
{
@ -84,6 +90,8 @@ class EmployeeController extends AdminController
$this->insurerModel = new InsurerModel();
$this->cashDepositModel = new ClientDepositModel();
$this->PolicyPremium2Model = new PolicyPremium2Model();
$this->auditHistory = new AuditHistoryModel();
$this->userModel = new userModel();
}
public function list()
@ -114,6 +122,10 @@ class EmployeeController extends AdminController
// log_message('error',json_encode($data['employees']));
// Set getData in $data array with the processed $filterData
$data['getData'] = $filterData;
$html = view('employee_data_list', $data);
return $this->respond(['status' => true, 'html' => $html], 200);
}
// dd($this->employeeModel->getLastQuery());
@ -2187,12 +2199,17 @@ class EmployeeController extends AdminController
}
}
//UPDATE EMPLOYEE
public function update_emp_data()
{
helper('utility_helper');
$data = $this->request->getPost();
// print_rr($data);die();
// $data['dob'] = date('Y-m-d', strtotime($data['dob']));
$data['dob'] = change_date_format($data['dob'], 'd/m/Y', 'Y-m-d');
if (isset($data['dob'])) {
$data['dob'] = change_date_format($data['dob'], null, 'Y-m-d');
}
// print_rr($data); die;
// Fetch current employee data
@ -2200,6 +2217,8 @@ class EmployeeController extends AdminController
if ($employee_data['relationship'] == 'Self') {
if (isset($data['gender'])) {
if ($employee_data['gender'] != $data['gender']) {
$spouse_gender = ($data['gender'] == 'M') ? 'F' : 'M';
@ -2210,6 +2229,7 @@ class EmployeeController extends AdminController
->update();
}
}
}
// Update the employee data
$result = $this->employeeModel->where('id', $data['employee_primary_id'])->set($data)->update();
@ -2650,4 +2670,55 @@ class EmployeeController extends AdminController
return $html;
}
public function getEmpHistory(){
$emp_id = $this->request->getPost('emp_id');
$data['emp_history'] = $this->auditHistory->select('field_name,old_value,new_value,created_by,created_at')->where('pk',$emp_id)->where('table_name','employees')->orderBy('created_at', 'DESC')->findAll();
foreach ($data['emp_history'] as &$emp_history) {
$emp_history['field_name'] = $this->formatFieldName($emp_history['field_name']);
$user = $emp_history['created_by'];
if ($user != null && $user != '') {
$userData = $this->userModel->select('first_name, last_name')->where('id', $user)->where('is_active', 1)->first();
if ($userData) {
$emp_history['created_by'] = ucwords($userData['first_name'] . ' ' . $userData['last_name']);
} else {
$emp_history['created_by'] = '-';
}
} else {
$emp_history['created_by'] = '-';
}
$emp_history['created_at'] = date("d-m-Y H:i:s", strtotime($emp_history['created_at']));
}
unset($emp_history);
$emp_pol_pk = $this->employeePolicyModel->select('id')->where('employee_id',$emp_id)->first()['id'];
$data['emp_pol_history'] = $this->auditHistory->select('field_name,old_value,new_value,created_by,created_at')->where('pk',$emp_pol_pk)->where('table_name','employee_polices')->findAll();
return $this->respond(['status' => true, 'data' => $data],200);
}
public function formatFieldName($unformattedString){
if (str_contains($unformattedString, '_')) {
$data = str_replace('_', ' ', $unformattedString);
}else{
$data = $unformattedString;
}
$format = ucwords($data);
return $format;
}
}

View File

@ -1720,7 +1720,8 @@ class MasterController extends AdminController
'excel' => WRITEPATH . 'uploads/excel/',
'statements' => WRITEPATH . 'uploads/statements/',
'import_excel' => WRITEPATH . 'uploads/import_excel/',
'logs' => WRITEPATH . 'uploads/logs/',
'logs' => WRITEPATH . 'logs',
'session' => WRITEPATH . 'session',
'client_kyc_documents' => WRITEPATH . 'uploads/client_kyc_documents/',
'tmp' => WRITEPATH . 'tmp/',
'e_card_imgs' => ROOTPATH . 'public/e_card_imgs',
@ -1729,6 +1730,7 @@ class MasterController extends AdminController
'logo' => ROOTPATH . 'public/uploads/logo/',
'template_bg' => ROOTPATH . 'public/uploads/template_bg/',
'attachments' => WRITEPATH . 'uploads/attachments/',
'cache' => WRITEPATH . 'cache',
'sample_import_excel' => ROOTPATH . 'public/sample_import_excel',
'lead_files' => WRITEPATH . 'uploads/lead_files/',
];

View File

@ -112,22 +112,29 @@ class RestAuthenticationController extends AdminController
public function verifyEmployeeWithEmailId()
{
try {
$data = $this->request->getJSON();
$email = $data->email;
$employeeData = $this->employeeModel->select('employees.relationship,EP.employee_id')
$employeeData = $this->employeeModel->select('
employees.relationship,
EP.employee_id,
employees.client_id,
employees.client_branch_id,
employees.email_corporate
')
->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner')
->where('employees.is_active', 1)
->where('employees.relationship', 'self')
->where('employees.relationship', 'Self')
->where('employees.emp_status !=', 'truncated')
->where('employees.email_corporate', $email)
->where('EP.is_active', 1)
->whereIn('EP.status', ['draft', 'enrolled'])
->first();
if (isset($employeeData['employee_id']))
{
if (isset($employeeData['employee_id'])) {
$otp = random_int(100000, 999999);
@ -140,12 +147,13 @@ class RestAuthenticationController extends AdminController
$data->otp = $otp;
$this->callThirdPartyAPI($data, 'updateEmpOTP');
$common = [
'client_id' => $employeeData['client_id'],
'client_branch_id' => $employeeData['client_branch_id'],
'client_policy_id' => null,
'employee_policy_id' => null,
'employee_id' => $employeeData['id'],
'employee_id' => $employeeData['employee_id'],
'mail_type' => 'otp_mail',
];
$subject = 'Nhance user verification - OTP';
@ -153,24 +161,18 @@ class RestAuthenticationController extends AdminController
$res = MailHelper::send_email(['mail' => $employeeData['email_corporate'], 'subject' => $subject, 'common' => $common, 'message' => $mail_content]);
$this->myLogger->logme("info", $res);
if(json_decode($res)->status == 'success')
{
if (json_decode($res)->status == 'success') {
$result = ['user_verification' => true, 'message' => "Verified Successfully"];
return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200);
} else {
$result = ['user_verification' => false, 'message' => "Mail sending failed , try again"];
return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 200);
}
} else {
$result = ['user_verification' => false, 'message' => "Verification failed , try again"];
return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 200);
}
} else {
// Call the third-party API function
return $this->callThirdPartyAPI($this->request->getJSON(), 'verifyEmployeeEmailId');

View File

@ -1124,19 +1124,26 @@ if (!function_exists('premium_calculation_manager'))
}
$temp_slab_rates = $slab_details[ $slab_index ]['slab_rates'];
//if curent action is dependent addition OR addition then pull insurer master to set whether add one day from employee date of coverage
if($emp_data['temp']['action'] == 'DA' || $emp_data['temp']['action'] == 'A')
{
$insurer = new InsurerModel();
$insurer = ($insurer->find($policy_terms['insurer_id']));
if($insurer['addition_add_day'] == true)
{
// $emp_data['policy_details']['date_coverage'] = (new DateTime($emp_data['policy_details']['date_coverage']))->modify('+1 day')->format('Y-m-d');
$emp_data['policy_details']['date_coverage'] = isset($emp_data['policy_details']['date_coverage']) && $emp_data['policy_details']['date_coverage'] != '' && $emp_data['policy_details']['date_coverage'] != null ?
(new DateTime($emp_data['policy_details']['date_coverage']))->modify('+1 day')->format('Y-m-d') : null ;
}
}
// ------------"THIS PART HAS NO INSURER IN THE PRE-ENROLL, SO COMMENT OUT THIS PART (04-03-2025)."-------------------------------------------------------------------------------------------------------------------
// //if curent action is dependent addition OR addition then pull insurer master to set whether add one day from employee date of coverage
// if($emp_data['temp']['action'] == 'DA' || $emp_data['temp']['action'] == 'A')
// {
// $insurer = new InsurerModel();
// $insurer = ($insurer->find($policy_terms['insurer_id']));
// if($insurer['addition_add_day'] == true)
// {
// // $emp_data['policy_details']['date_coverage'] = (new DateTime($emp_data['policy_details']['date_coverage']))->modify('+1 day')->format('Y-m-d');
// $emp_data['policy_details']['date_coverage'] = isset($emp_data['policy_details']['date_coverage']) && $emp_data['policy_details']['date_coverage'] != '' && $emp_data['policy_details']['date_coverage'] != null ?
// (new DateTime($emp_data['policy_details']['date_coverage']))->modify('+1 day')->format('Y-m-d') : null ;
// }
// }
// -------------------------------------------------------------------------------------------------------------------------------
// dd($emp_data);
$is_match_found = false;
$gst = isset($policy_terms['gst']) && $policy_terms['gst'] != 0 ? $policy_terms['gst'] : 18;

View File

@ -544,6 +544,10 @@ if (!function_exists('change_date_format')) {
'Y/m/d', // 2024/12/01
'Y.m.d', // 2024.12.01
'Y,m,d', // 2024,12,01
'd/m/Y', // 01/01/2025
'd-m-Y', // 01-01-2025
];
try {

View File

@ -121,8 +121,8 @@ class ClientPolicyModel extends Model
->select('tpa_branch.branch_name as tpa_branch_name, tpa_branch.branch_code as tpa_branch_code')
->select('policy_type.policy_type as policy_type_name')
->select('client_branch.branch_name as branch_name')
->join('insurers', 'insurers.id = client_policy.insurer_id')
->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id')
->join('insurers', 'insurers.id = client_policy.insurer_id', 'left')
->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id', 'left')
->join('tpa', 'tpa.id = client_policy.tpa_id', 'left')
->join('tpa_branch', 'client_policy.tpa_branch_id = tpa_branch.id', 'left')
->join('policy_type', 'policy_type.id = client_policy.policy_type_id')

View File

@ -149,7 +149,21 @@ class EmployeeModel extends Model
{
return $this->db->table('employee_polices')
->select(' policy_type.long_name as Policy_Name , client_policy.policy_terms as Policy_Terms, client_policy.client_id as ClientId, client_policy.policy_id as PolicyId,client_policy.id as ClientPolicyId, client_policy.open_for_enrollment as OpenForEnrollment,client_policy.disclaimer,client_policy.policy_type_id , employee_polices.tpa_id as tpa_id , employee_polices.rand_string as rand_string') // Select all columns from both tables
->select('
policy_type.long_name as Policy_Name ,
client_policy.policy_terms as Policy_Terms,
client_policy.client_id as ClientId,
client_policy.policy_id as PolicyId,
client_policy.id as ClientPolicyId,
CASE
WHEN client_policy.open_for_enrollment IS NULL THEN 0
ELSE client_policy.open_for_enrollment
END AS OpenForEnrollment,
client_policy.disclaimer,
client_policy.policy_type_id ,
employee_polices.tpa_id as tpa_id ,
employee_polices.rand_string as rand_string
', FALSE) // Select all columns from both tables
->join('client_policy', 'client_policy.id = employee_polices.client_policy_id')
->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
->where('client_policy.policy_status', 1)

View File

@ -202,6 +202,7 @@ table.dataTable thead th {
customDropdown.querySelectorAll('.dropdown-item').forEach(item => {
item.addEventListener('click', function(e) {
e.preventDefault();
const onclickAttr = this.getAttribute('onclick');
if (onclickAttr) {
eval(onclickAttr);

View File

@ -10,10 +10,10 @@
<table class="table table-borderless table mb-0" id="table-client-policy">
<thead class="thead-light">
<tr>
<th>Insurer</th>
<!-- <th>Insurer</th> -->
<th>Policy</th>
<th>Client Branch</th>
<th>TPA</th>
<!-- <th>TPA</th> -->
<th>Date</th>
<th>Enrolment Status</th>
<th>Status</th>
@ -76,10 +76,10 @@
<option value="" selected>Select Base Policy</option>
</select>
</div>
<div class="form-group col-md-4">
<!-- <div class="form-group col-md-4">
<label for="policy_no">Policy No<span class="text-danger">*</span></label>
<input value="" type="text" class="form-control" placeholder="Enter Policy Number " name="policy_no" id="policy_no" required>
</div>
</div> -->
</div>
@ -274,9 +274,11 @@
<script>
$('#inception_type').change(function() {
var open_data = $('#open_date').parent();
var close_data = $('#close_date').parent();
var reminder_data = $('#reminder_date').parent();
if ($(this).prop('checked')) {
$(open_data).show();
$(close_data).show();
@ -359,6 +361,7 @@ $(document).ready(function() {
if (policy_PrimaryKey !== '') {
var policyTable = '';
var data = <?= isset($client_policy) ? json_encode($client_policy) : '[]' ?>;
console.log('client_policy_data', data)
@ -427,10 +430,10 @@ $(document).ready(function() {
policyTable +=
`
<tr>
<td>${item.insurer_short} - ${item.insurer_branch_name}</td>
<! -- <td>${item.insurer_short} - ${item.insurer_branch_name}</td> -->
<td>${policy_name_data}</td>
<td>${item.branch_name ? item.branch_name : ' - '}</td>
<td>${tpaValue}</td>
<! -- <td>${tpaValue}</td> -->
<td>${(item.policy_start_date)} / ${(item.policy_end_date)}</td>
<td style="text-align: center;">${(enrollmentStatus)}</td>
<td>${checkDateStatus(item.policy_end_date, 1)}</td>
@ -679,10 +682,10 @@ $("#policy_form").submit(function(event) {
policyTable +=
`
<tr>
<td>${item.insurer_short} - ${item.insurer_branch_name}</td>
<!-- <td>${item.insurer_short} - ${item.insurer_branch_name}</td> -->
<td>${policy_name_data}</td>
<td>${item.branch_name ? item.branch_name : ' - '}</td>
<td>${tpaValue}</td>
<!-- <td>${tpaValue}</td> -->
<td>${(item.policy_start_date)} / ${(item.policy_end_date)}</td>
<td style="text-align: center;">${(enrollmentStatus)}</td>

View File

@ -38,6 +38,43 @@
text-align: right;
}
.readonly-select {
pointer-events: none;
background-color: #f0f0f0;
color: #666;
}
</style>
<style>
/* Timeline Design */
.timeline {
position: relative;
padding-left: 30px;
border-left: 3px solid #007bff;
}
.timeline-item {
position: relative;
margin-bottom: 20px;
padding-left: 20px;
}
.timeline-dot {
position: absolute;
left: -10px;
top: 5px;
width: 15px;
height: 15px;
background: #007bff;
border-radius: 50%;
}
.timeline-content {
background: #f8f9fa;
padding: 10px;
border-radius: 5px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
}
</style>
<?php $pro_rata_total = 0; $gst_total = 0 ?>
@ -76,8 +113,10 @@
<th class="font-weight-medium">Policy status</th>
<th class="font-weight-medium">()Sum Insured</th>
<th class="font-weight-medium">()Premium</th>
<th class="font-weight-medium" id="rata_premium" data-toggle="tooltip" data-placement="top">()Pro Rata <br> Premium</th>
<th class="font-weight-medium" id="gst" data-toggle="tooltip" data-placement="top">()GST</th>
<th class="font-weight-medium" id="rata_premium" data-toggle="tooltip" data-placement="top">
()Pro Rata <br> Premium</th>
<th class="font-weight-medium" id="gst" data-toggle="tooltip" data-placement="top">()GST
</th>
<th class="font-weight-medium"> Action </th>
</tr>
</thead>
@ -93,7 +132,8 @@
<?php if (isset($getData)) {
if ($getData['client_id'] == '0' && $getData['policy_id'] == '0' && $getData['branch_id'] == '0' && ($getData['emp_code'] != "" || $getData['emp_name'] != "" || $getData['status'] != "")) { ?>
<td><?php echo $employee['client_short_name'] . ' - ' . $employee['client_branch_name']; ?></td>
<td><?php echo $employee['client_short_name'] . ' - ' . $employee['client_branch_name']; ?>
</td>
<?php }
if ($getData['client_id'] != '0' && $getData['branch_id'] == '0') { ?>
<td><?php echo $employee['client_branch_name']; ?></td>
@ -104,7 +144,8 @@
<td><?php echo $employee['relationship']; ?></td>
<td><?php echo $employee['gender']; ?></td>
<td><?php echo date('d/m/Y', strtotime($employee['dob'])); ?></td>
<td><?php echo isset($employee['policy_type']) ? $employee['policy_type'] : ''; ?> - <?php echo isset($employee['policy_no']) ? $employee['policy_no'] : ''; ?></td>
<td><?php echo isset($employee['policy_type']) ? $employee['policy_type'] : ''; ?> -
<?php echo isset($employee['policy_no']) ? $employee['policy_no'] : ''; ?></td>
<td><?php echo $employee['insurer_short_name']; ?></td>
<td><?php echo $employee['tpa_id']; ?></td>
<td><?php echo $employee['uhid']; ?></td>
@ -134,23 +175,45 @@
</td>
<td><?php echo format_indian_number($employee['basic_cover_si']); ?></td>
<td><?php echo format_indian_number($employee['premium']); ?></td>
<td><?php $pro_rata_total += $employee['rata_premimum']; echo format_indian_number($employee['rata_premimum']); ?></td>
<td><?php $gst_total += $employee['gst']; echo format_indian_number($employee['gst']); ?></td>
<td><?php $pro_rata_total += $employee['rata_premimum']; echo format_indian_number($employee['rata_premimum']); ?>
</td>
<td><?php $gst_total += $employee['gst']; echo format_indian_number($employee['gst']); ?>
</td>
<td>
<div class="btn-group dropdown">
<a href="javascript: void(0);" class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown"aria-expanded="false"><i class="mdi mdi-dots-horizontal"></i></a>
<a href="javascript: void(0);"
class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown"
aria-expanded="false"><i class="mdi mdi-dots-horizontal"></i></a>
<div class="dropdown-menu dropdown-menu-right">
<?php if(in_array($employee['emp_status'], ['draft', 'enrolled', 'active']) && in_array($employee['status'], ['draft', 'enrolled', 'active'])) { ?>
<a class="dropdown-item" onclick="get_emp_master_data_for_update(this, '<?= $employee['employee_id'];?>')" ><i class="mdi mdi-pencil mr-2 text-muted font-18 vertical-middle"></i>Edit</a>
<?php
if
(
(in_array($employee['emp_status'], ['draft', 'enrolled', 'active']) && in_array($employee['status'], ['draft', 'enrolled', 'active']))
) {
?>
<a class="dropdown-item"
onclick="get_emp_master_data_for_update(this, '<?= $employee['employee_id'];?>', '<?= $employee['status'];?>')"><i
class="mdi mdi-pencil mr-2 text-muted font-18 vertical-middle"></i>Edit</a>
<a class="dropdown-item"
onclick="get_emp_history(this, '<?= $employee['employee_id'];?>')"> <i
class="mdi mdi-history mr-2 text-muted font-18 vertical-middle"></i>Employee
History</a>
<?php } ?>
<?php if(in_array($employee['policy_type_id'], [2,3,4,5]) && $employee['emp_status'] == 'active' && $employee['status'] == 'active' && !empty($employee['tpa_id'])) { ?>
<a href="<?= base_url('download-e-card/'). $employee['rand_string'] ?>" class="dropdown-item" target="_blank"><i class="mdi mdi-eye mr-2 text-muted font-18 vertical-middle"></i>View E-Card</a>
<a href="<?= base_url('download-e-card/'). $employee['rand_string'] ?>"
class="dropdown-item" target="_blank"><i
class="mdi mdi-eye mr-2 text-muted font-18 vertical-middle"></i>View
E-Card</a>
<?php } ?>
<?php if(in_array($employee['policy_type_id'], [2,3,4,5]) && $employee['email_corporate'] != '' && $employee['emp_status'] == 'active' && $employee['status'] == 'active' && !empty($employee['tpa_id'])) { ?>
<a class="dropdown-item" onclick="send_mail_for_individual_employee_ecard('<?= $employee['id'];?>')" ><i class="mdi mdi-email-alert mr-2 text-muted font-18 vertical-middle"></i>Send E-Card Mail</a>
<?php if($employee['relationship'] == 'Self' && in_array($employee['policy_type_id'], [2,3,4,5]) && $employee['email_corporate'] != '' && $employee['emp_status'] == 'active' && $employee['status'] == 'active' && !empty($employee['tpa_id'])) { ?>
<a class="dropdown-item"
onclick="send_mail_for_individual_employee_ecard('<?= $employee['id'];?>')"><i
class="mdi mdi-email-alert mr-2 text-muted font-18 vertical-middle"></i>Send
E-Card Mail</a>
<?php } ?>
</div>
@ -195,7 +258,8 @@
<!-- modal content -->
<div id="emp_modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
<div id="emp_modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"
style="display: none;">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
@ -204,7 +268,8 @@
</div>
<div class="modal-body p-4">
<form role="form" class="parsley-examples" id="empForm" onsubmit="update_emp_master_data_submit_function(event, this)" enctype="multipart/form-data">
<form role="form" class="parsley-examples" id="empForm"
onsubmit="update_emp_master_data_submit_function(event, this)" enctype="multipart/form-data">
<input type="hidden" name="employee_primary_id" id="employee_primary_id" />
@ -212,7 +277,8 @@
<div class="form-row">
<div class="form-group col-md-4">
<label for="emp_code">Employee Code<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="emp_code_for_edit" placeholder="Enter Code" readonly>
<input type="text" class="form-control" id="emp_code_for_edit" placeholder="Enter Code"
readonly>
</div>
<div class="form-group col-md-8">
@ -233,24 +299,30 @@
<div class="form-group col-md-6">
<label for="dob">Date of Birth<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="dob" placeholder="Enter DOB" name="dob" required>
<input type="text" class="form-control" id="dob" placeholder="Enter DOB" name="dob"
required>
</div>
<div class="form-group col-md-12">
<label for="email">Email<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="email_corporate" placeholder="Enter Email" name="email_corporate" data-parsley-trigger="change" data-parsley-type="email" required>
<input type="text" class="form-control" id="email_corporate" placeholder="Enter Email"
name="email_corporate" data-parsley-trigger="change" data-parsley-type="email"
onchange="validateInput(this, 'employees', 'email_corporate')" required>
</div>
<div class="form-group col-md-12">
<label for="mobile">Mobile Number<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="mobile" placeholder="Enter Mobile Number" name="mobile" onkeypress = "return onlyNumbers(event)" maxlength="10" minlength="10" required>
<input type="text" class="form-control" id="mobile" placeholder="Enter Mobile Number"
name="mobile" onkeypress="return onlyNumbers(event)" maxlength="10" minlength="10"
onchange="validateInput(this, 'employees', 'mobile')" 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>
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1"
id="btnSubmit">Submit</button>
</div>
</form>
@ -259,14 +331,30 @@
</div>
</div><!-- /.modal -->
<script>
<!-- Modal content for Emp History -->
<div class="modal fade" id="emp_history_modal" tabindex="-1" aria-labelledby="emp_history_modal_label"
aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="emp_history_modal_label">Employee History</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div id="emp_history_content"></div>
</div>
</div>
</div>
<script>
$(document).ready(function() {
var dob = flatpickr("#dob", {
dateFormat: "d/M/Y",
allowInput: false
dateFormat: "d/m/Y",
allowInput: false, // Allows manual input
yearSelector: true, // Ensures year can be selected manually
});
})
$(document).ready(function() {
@ -353,6 +441,7 @@
myModal.show();
} else {
$('#employee_primary_id').val('');
$('#emp_code_for_edit').val('');
$('#name').val('');
@ -424,7 +513,8 @@
$('#email_corporate').val('');
$('#mobile').val('');
window.location.reload();
// window.location.reload();
fetchEmpolyeeList();
} else {
toastr.error(response.message, 'ERROR');
@ -503,4 +593,136 @@
});
}
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!";
}
checkDuplicateTableFieldValue(table, field, value, function(isDuplicate) {
if (isDuplicate) {
toastr.warning(message, 'WARNING');
$(input).val('')
}
});
}
function onlyNumbers(event) {
var charcode;
charcode = event.which || event.keyCode;
if (charcode >= 48 && charcode <= 57 || charcode == 46) return true;
return false;
}
var modalInstance; // Store the modal instance globally
function showModal() {
var myModalEl = document.getElementById('emp_history_modal');
modalInstance = new bootstrap.Modal(myModalEl, {
backdrop: true, // Ensures the backdrop is shown
keyboard: true // Allows closing with the Escape key
});
modalInstance.show();
}
function closeModal() {
if (modalInstance) {
modalInstance.hide(); // Hide the modal and its backdrop
// Manually remove backdrop if it's still visible
setTimeout(function() {
document.querySelector('.modal-backdrop').classList.remove('show');
}, 150); // Wait for animation to finish
}
}
function get_emp_history(input, emp_id) {
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
let url = '<?= base_url("employee/get_emp_history")?>';
let requestData = {
emp_id: emp_id
};
sendAjaxRequestForGlobal(url, 'POST', requestData, function(response) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (response.status === true) {
console.log('response data length', response.data.emp_history.length);
// **Clear old data**
$('#emp_history_content').html('');
// **Check if data exists**
if (response.data.emp_history.length > 0) {
let historyTable = `
<div class="card-body">
<div class="table-responsive">
<table class="table w-100">
<thead class="bg-light">
<tr>
<th>Field</th>
<th>Change</th>
<th>User</th>
<th>Date/Time</th>
</tr>
</thead>
<tbody>
`;
// **Loop through the data dynamically**
response.data.emp_history.forEach(row => {
historyTable += `
<tr>
<td>${row.field_name}</td>
<td>${row.old_value} => ${row.new_value}</td>
<td>${row.created_by}</td>
<td>${row.created_at}</td>
</tr>
`;
});
historyTable += `
</tbody>
</table>
</div>
</div>
`;
// **Append to modal**
$('#emp_history_content').append(historyTable);
} else {
$('#emp_history_content').html('<p class="text-center text-muted">No history available.</p>');
}
// **Show the modal**
showModal();
} else {
let message = response.message;
toastr.error(message, 'ERROR');
}
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('An error occurred while fetching the report page.', 'ERROR');
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
});
}
// function closeModal(){
// var myModalEl = document.getElementById('emp_history_modal');
// var modalInstance = bootstrap.Modal.getInstance(myModalEl);
// if (modalInstance) {
// modalInstance.hide();
// }
// }
</script>

View File

@ -135,31 +135,105 @@ table.dataTable tbody td {
<?php include('employee_data_list.php');?>
<?php // include('employee_data_list.php');?>
<div id="employee_table_list"></div>
<!-- end row -->
<div id="loader" class="loader" style="display:none;">SPINNER</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
// document.addEventListener("DOMContentLoaded", function () {
// const table = document.getElementById("tickets-table");
// // Create custom dropdown
// function createCustomDropdown(row) {
// // Get the original dropdown items
// const originalDropdown = row.querySelector('.dropdown-menu');
// if (!originalDropdown) return null;
// // Create new dropdown with proper background and spacing
// const customDropdown = document.createElement('div');
// customDropdown.className = 'custom-dropdown-menu';
// // Copy inner content while maintaining icon alignment
// customDropdown.innerHTML = originalDropdown.innerHTML;
// return customDropdown;
// }
// let activeDropdown = null;
// // Add click event listener to rows
// table.querySelectorAll("tbody tr").forEach(row => {
// const customDropdown = createCustomDropdown(row);
// if (!customDropdown) return;
// document.body.appendChild(customDropdown);
// row.addEventListener("click", function(event) {
// // Ignore clicks on the action column
// if (event.target.closest('td:last-child')) {
// return;
// }
// // Hide any active dropdown
// if (activeDropdown) {
// activeDropdown.style.display = 'none';
// }
// // Get click position
// const rect = event.target.getBoundingClientRect();
// // Position the dropdown with some offset
// customDropdown.style.display = 'block';
// customDropdown.style.position = 'fixed';
// customDropdown.style.left = `${rect.left}px`;
// customDropdown.style.top = `${rect.bottom + 5}px`; // Add 5px gap
// // Set as active dropdown
// activeDropdown = customDropdown;
// event.stopPropagation();
// });
// // Preserve click handlers and add auto-close
// customDropdown.querySelectorAll('.dropdown-item').forEach(item => {
// item.addEventListener('click', function(e) {
// const onclickAttr = this.getAttribute('onclick');
// if (onclickAttr) {
// eval(onclickAttr);
// }
// const href = this.getAttribute('href');
// if (href && href !== '#') {
// window.location.href = href;
// }
// // Close the dropdown after handling the click
// if (activeDropdown) {
// activeDropdown.style.display = 'none';
// activeDropdown = null;
// }
// e.stopPropagation();
// });
// });
// });
// // Close dropdown when clicking outside
// document.addEventListener("click", function() {
// if (activeDropdown) {
// activeDropdown.style.display = 'none';
// activeDropdown = null;
// }
// });
// });
document.addEventListener("DOMContentLoaded", init);
function init() {
const table = document.getElementById("tickets-table");
// Create custom dropdown
function createCustomDropdown(row) {
// Get the original dropdown items
const originalDropdown = row.querySelector('.dropdown-menu');
if (!originalDropdown) return null;
// Create new dropdown with proper background and spacing
const customDropdown = document.createElement('div');
customDropdown.className = 'custom-dropdown-menu';
// Copy inner content while maintaining icon alignment
customDropdown.innerHTML = originalDropdown.innerHTML;
return customDropdown;
}
let activeDropdown = null;
// Add click event listener to rows
@ -170,63 +244,91 @@ document.addEventListener("DOMContentLoaded", function () {
document.body.appendChild(customDropdown);
row.addEventListener("click", function(event) {
// Ignore clicks on the action column
if (event.target.closest('td:last-child')) {
return;
}
// Hide any active dropdown
if (activeDropdown) {
activeDropdown.style.display = 'none';
}
// Get click position
const rect = event.target.getBoundingClientRect();
// Position the dropdown with some offset
customDropdown.style.display = 'block';
customDropdown.style.position = 'fixed';
customDropdown.style.left = `${rect.left}px`;
customDropdown.style.top = `${rect.bottom + 5}px`; // Add 5px gap
// Set as active dropdown
activeDropdown = customDropdown;
event.stopPropagation();
handleRowClick(event, customDropdown);
});
// Preserve click handlers and add auto-close
customDropdown.querySelectorAll('.dropdown-item').forEach(item => {
item.addEventListener('click', function(e) {
const onclickAttr = this.getAttribute('onclick');
handleItemClick(e, item);
});
});
});
// Close dropdown when clicking outside
document.addEventListener("click", handleDocumentClick);
function createCustomDropdown(row) {
const originalDropdown = row.querySelector('.dropdown-menu');
if (!originalDropdown) return null;
const customDropdown = document.createElement('div');
customDropdown.className = 'custom-dropdown-menu';
// Clone original dropdown items while moving onclick handlers to data attributes
const originalItems = originalDropdown.querySelectorAll('.dropdown-item');
customDropdown.innerHTML = originalDropdown.innerHTML;
// Transfer onclick handlers to data attributes
customDropdown.querySelectorAll('.dropdown-item').forEach((item, index) => {
const originalItem = originalItems[index];
const originalOnclick = originalItem.getAttribute('onclick');
if (originalOnclick) {
item.setAttribute('data-onclick', originalOnclick);
item.removeAttribute('onclick'); // Remove original handler
}
});
return customDropdown;
}
function handleRowClick(event, customDropdown) {
if (event.target.closest('td:last-child')) return;
if (activeDropdown) {
activeDropdown.style.display = 'none';
}
const rect = event.target.getBoundingClientRect();
customDropdown.style.display = 'block';
customDropdown.style.position = 'fixed';
customDropdown.style.left = `${rect.left}px`;
customDropdown.style.top = `${rect.bottom + 5}px`;
activeDropdown = customDropdown;
event.stopPropagation();
}
function handleItemClick(e, item) {
e.preventDefault();
// Execute the stored onclick handler
const onclickAttr = item.getAttribute('data-onclick');
if (onclickAttr) {
eval(onclickAttr);
}
const href = this.getAttribute('href');
const href = item.getAttribute('href');
if (href && href !== '#') {
window.location.href = href;
}
// Close the dropdown after handling the click
if (activeDropdown) {
activeDropdown.style.display = 'none';
activeDropdown = null;
}
e.stopPropagation();
});
});
});
}
// Close dropdown when clicking outside
document.addEventListener("click", function() {
function handleDocumentClick() {
if (activeDropdown) {
activeDropdown.style.display = 'none';
activeDropdown = null;
}
});
});
}
}
</script>
<script>
@ -468,8 +570,11 @@ function objectToQueryString(obj) {
return Object.keys(obj).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&');
}
function fetchEmpolyeeList(event) {
function fetchEmpolyeeList(event = null) {
if(event){
event.preventDefault(); // Prevent default action
}
var client_id = $('#clients').val();
var policy_id = $('#policies').val();
@ -502,24 +607,35 @@ function fetchEmpolyeeList(event) {
const queryString = objectToQueryString(queryParams);
const apiURL = $('#get-emp-list').attr('href') + "?" + queryString;
// console.log(apiURL);
window.location.href = apiURL;
// window.location.href = apiURL;
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
// var apiURL2 = $('#get-emp-list').attr('href'); // Get href attribute value
// console.log(apiURL);
// $.ajax({
// url: apiURL,
// method: 'GET',
// data: queryParams,
// success: function(response) {
// // Assuming response is a JSON array
// // displayDataTables(response);
// console.log(response);
// },
// error: function(xhr, status, error) {
// console.error('Error:', error);
// }
// });
console.log(apiURL);
$.ajax({
url: apiURL,
method: 'GET',
data: queryParams,
success: function(response) {
if(response.status == true){
$('#employee_table_list').html(response.html);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
setTimeout(function(){
init()
}, 1000)
}
},
error: function(xhr, status, error) {
console.error('Error:', error);
toastr.error('Failed to fetch Data','Error');
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}
});
}

View File

@ -1,9 +1,9 @@
<div class="tab-pane active show" id="pending-actions-dash-tab" style="/*padding-left: 35px;*/padding-right: 35px;">
<div class="row visa_status_count_view">
<div class="col-12">
<div class="card" style="border: 0px;height: 470px;">
<div class="card-body status-option" id="statusContent" style="padding: 0.5rem !important;background-color: white;">
<div class="card-body status-option" id="statusContent"
style="padding: 0.5rem !important;background-color: white;">
<!-- Search Input Field -->
<div class="row">
<div class="col-3">
@ -14,7 +14,8 @@
</div>
<div class="col-5"></div>
<div class="col-4">
<input type="text" id="searchInput" class="search-input" placeholder="Search by client or branch">
<input type="text" id="searchInput" class="search-input"
placeholder="Search by client or branch">
</div>
</div>
<!-- Carousel Structure -->
@ -25,23 +26,28 @@
$currentItem = 0; // Counter for items
$isActive = true; // Variable to set the first item as active
foreach ($client_branch_emp_list as $clients) {
foreach ($clients['branches'] as $branches) {
// Start a new carousel item if needed
if ($currentItem % $itemsPerSlide == 0) {
if (!$isActive) echo '</div>'; // Close previous carousel item
echo '<div class="carousel-item' . ($isActive ? ' active' : '') . '">';
$isActive = false;
}
if(count($branches['client_policies']) != 0){ ?>
?>
<!-- New Card Layout for each item -->
<div class="col-xl-3 col-md-6 d-inline-block scroll-item carousel-slide-item" data-client="<?php echo $clients['short_name']; ?>" data-branch="<?php echo $branches['branch_name']; ?>">
<div class="col-xl-3 col-md-6 d-inline-block scroll-item carousel-slide-item"
data-client="<?php echo $clients['short_name']; ?>"
data-branch="<?php echo $clients['branch_name']; ?>">
<div class="card" style="box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);">
<div class="card-header add_card_background_random">
<div class="row">
<div class="col-8 emp-count-view-click">
<div class="d-flex justify-content-between">
<div class="w-100 ">
<h3 class="my-2 py-1" ><span data-plugin="counterup" style="font-size: 2.0rem;background-color: white;border-radius: 6px;height: 30;padding: 4px 11px 4px 11px;" onclick="enrollment_list(this, 'emp_count_view_click')"><?php echo isset($branches['employees']) ? count($branches['employees']) : '0'; ?></span></h3>
<h3 class="my-2 py-1"><span data-plugin="counterup"
style="font-size: 2.0rem;background-color: white;border-radius: 6px;height: 30;padding: 4px 11px 4px 11px;"
onclick="enrollment_list(this, 'emp_count_view_click')"><?php echo isset($clients['total_employees']) ? $clients['total_employees'] : '0'; ?></span>
</h3>
</div>
</div>
</div>
@ -50,7 +56,12 @@
<div class="col-12 emp-count-view-click">
<div class="d-flex justify-content-between">
<div class="w-100">
<h5 class="mt-0 text-truncate" title="Branch Info" style="font-weight: 400 !important;font-size: 20px !important;line-height: 36px;color: black !important;"><?php echo isset($clients['short_name']) ? $clients['short_name'] : 'N/A'; ?> - <?php echo isset($branches['branch_name']) ? $branches['branch_name'] : 'N/A'; ?></h5>
<h5 class="mt-0 text-truncate" title="Branch Info"
style="font-weight: 400 !important;font-size: 20px !important;line-height: 36px;color: black !important;">
<?php echo isset($clients['short_name']) ? $clients['short_name'] : 'N/A'; ?>
-
<?php echo isset($clients['branch_name']) ? $clients['branch_name'] : 'N/A'; ?>
</h5>
</div>
</div>
</div>
@ -67,26 +78,41 @@
</div>
</div>
<div class="card-body">
<input type="text" class="client_id" value="<?php echo $clients['client_id']; ?>" hidden>
<input type="text" class="client_branch_id" value="<?php echo $branches['client_branch_id'] ?>" hidden>
<input type="text" class="client_id"
value="<?php echo $clients['client_id']; ?>" hidden>
<input type="text" class="client_branch_id"
value="<?php echo $clients['client_branch_id'] ?>" hidden>
<div class="row emp-status" style="margin-top: -9px;">
<div class="col-6 emp-count-view-click">
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_logged_in_view_click')"><?php echo isset($branches['emp_login']) ? $branches['emp_login'] : '0'; ?></span><br>
<span class="text-nowrap " style="color: currentColor;font-size: 15px;">Logged-In</span>
<span style="font-size: large;color: black !important;"
class="number_css"
onclick="enrollment_list(this, 'emp_logged_in_view_click')"><?php echo isset($clients['logged_in_count']) ? $clients['logged_in_count'] : '0'; ?></span><br>
<span class="text-nowrap "
style="color: currentColor;font-size: 15px;">Logged-In</span>
</div>
<div class="col-6 emp-count-view-click">
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_logged_in_view_click')"><?php echo isset($branches['emp_login']) ? count($branches['employees']) - $branches['emp_login'] : '0'; ?></span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;margin-left: -13px;">Not Logged-In</span>
<span style="font-size: large;color: black !important;"
class="number_css"
onclick="enrollment_list(this, 'emp_not_logged_in_view_click')"><?php echo isset($clients['not_logged_in_count']) ? $clients['not_logged_in_count'] : '0'; ?></span><br>
<span class="text-nowrap"
style="color: currentColor;font-size: 15px;margin-left: -13px;">Not
Logged-In</span>
</div>
</div>
<div class="row emp-status" style="margin-top: 5px;">
<div class="col-6 emp-count-view-click">
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_enrolled_view_click')"><?php echo isset($branches['emp_enroll']) ? count($branches['employees']) - $branches['emp_enroll'] : '0'; ?></span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;">Draft</span>
<span style="font-size: large;color: black !important;"
class="number_css"
onclick="enrollment_list(this, 'emp_not_enrolled_view_click')"><?php echo isset($clients['draft_count']) ? $clients['draft_count'] : '0'; ?></span><br>
<span class="text-nowrap"
style="color: currentColor;font-size: 15px;">Draft</span>
</div>
<div class="col-6 emp-count-view-click">
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_enrolled_view_click')"><?php echo isset($branches['emp_enroll']) ? $branches['emp_enroll'] : '0'; ?></span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;">Enrolled</span>
<span style="font-size: large;color: black !important;"
class="number_css"
onclick="enrollment_list(this, 'emp_enrolled_view_click')"><?php echo isset($clients['enrolled_count']) ? $clients['enrolled_count'] : '0'; ?></span><br>
<span class="text-nowrap"
style="color: currentColor;font-size: 15px;">Enrolled</span>
</div>
</div>
</div>
@ -94,20 +120,31 @@
</div>
<?php
$currentItem++;
}
}
}
if ($currentItem % $itemsPerSlide != 0) echo '</div>'; // Close the last carousel item
?>
</div>
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" style="width: 28px;"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg> <!-- <img src="<?php echo base_url()?>public/assets/images/left_arrow.png" alt="<"> -->
<a class="carousel-control-prev" href="#carouselExampleControls" role="button"
data-slide="prev">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" style="width: 28px;">
<!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
<path
d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z" />
</svg>
<!-- <img src="<?php echo base_url() ?>public/assets/images/left_arrow.png" alt="<"> -->
<!-- <span class="carousel-control-prev-icon" aria-hidden="true"></span> -->
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" style="width: 28px;"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg>
<a class="carousel-control-next" href="#carouselExampleControls" role="button"
data-slide="next">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" style="width: 28px;">
<!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
<path
d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z" />
</svg>
<!-- <span class="carousel-control-next-icon" aria-hidden="true"></span> -->
<span class="sr-only">Next</span>
</a>
@ -119,6 +156,7 @@
</div>
<script>
$(document).ready(function() {
var lastDirection = ''; // Variable to keep track of the last direction
@ -226,6 +264,69 @@ $(document).ready(function() {
checkEmptyCarouselItem();
});
document.addEventListener('DOMContentLoaded', function() {
random_color_set();
});
$('#enrollment_status_open_close').change(function() {
if ($(this).val() === 'open') {
var enrollment_data = '<?php echo addslashes(json_encode($client_branch_emp_list, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT)); ?>';
console.log('Raw enrollment_data:', enrollment_data);
try {
// Ensure enrollment_data is not empty or invalid
if (!enrollment_data || enrollment_data === 'null' || enrollment_data === '""') {
throw new Error('Invalid JSON data received.');
}
// Parse JSON data
var data = JSON.parse(enrollment_data);
console.log('Parsed data:', data);
// Ensure parsed data is always treated as an array
if (!Array.isArray(data)) {
data = data && typeof data === 'object' ? [data] : [];
}
console.log('Final client_branch_emp_list:', data);
updateCarouselWithData(data, 1);
} catch (error) {
console.error('Error parsing JSON:', error.message, error);
}
} else {
// Fetch the session data from PHP
var enrollment_data = '<?php echo addslashes(json_encode($client_branch_emp_list, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT)); ?>';
console.log('Raw enrollment_data:', enrollment_data);
try {
// Ensure enrollment_data is valid before parsing
if (!enrollment_data || enrollment_data === 'null' || enrollment_data === '""') {
throw new Error('Invalid JSON data received.');
}
// Parse JSON data
var data = JSON.parse(enrollment_data);
console.log('Parsed data:', data);
// Ensure `data` is always an array
data = Array.isArray(data) ? data : (data && typeof data === 'object' ? [data] : []);
console.log('Final client_branch_emp_list:', data);
updateCarouselWithData(data, 2);
} catch (error) {
console.error('Error parsing JSON:', error.message, error);
}
}
});
function enrollment_list(current_element, type) {
var clientId = $(current_element).closest('.carousel-slide-item').find('.client_id').val();
@ -244,79 +345,6 @@ function enrollment_list(current_element, type) {
window.location.href = `${url}?${params.toString()}`;
}
$('#enrollment_status_open_close').change(function () {
if ($(this).val() === 'open') {
var enrollment_data = '<?php echo addslashes($_SESSION['enrollment_data']); ?>';
try {
// Parse JSON data
var data = JSON.parse(enrollment_data);
console.log('Parsed data:', data);
// Ensure data is an object and client_branch_emp_list is treated as an array
if (data && typeof data === 'object') {
if (Array.isArray(data.client_branch_emp_list)) {
console.log('client_branch_emp_list:', data.client_branch_emp_list);
updateCarouselWithData(data, 1);
} else {
// Convert client_branch_emp_list to an array if it's not already
if (data.client_branch_emp_list && typeof data.client_branch_emp_list === 'object') {
// If it's an object but not an array, wrap it in an array
data.client_branch_emp_list = [data.client_branch_emp_list];
} else {
// Handle the case where it's neither an array nor an object
console.error('client_branch_emp_list is not an array or object:', data.client_branch_emp_list);
data.client_branch_emp_list = []; // Ensure it is at least an empty array
}
console.log('Converted client_branch_emp_list:', data.client_branch_emp_list);
updateCarouselWithData(data, 1);
}
} else {
console.error('Parsed data is not an object:', data);
}
} catch (e) {
console.error('Error parsing JSON:', e);
}
} else {
// Fetch the session data from PHP
var enrollment_data = '<?php echo addslashes($_SESSION['enrollment_data']); ?>';
try {
// Parse JSON data
var data = JSON.parse(enrollment_data);
console.log('Parsed data:', data);
// Ensure data is an object and client_branch_emp_list is treated as an array
if (data && typeof data === 'object') {
if (Array.isArray(data.client_branch_emp_list)) {
console.log('client_branch_emp_list:', data.client_branch_emp_list);
updateCarouselWithData(data, 2);
} else {
// Convert client_branch_emp_list to an array if it's not already
if (data.client_branch_emp_list && typeof data.client_branch_emp_list === 'object') {
// If it's an object but not an array, wrap it in an array
data.client_branch_emp_list = [data.client_branch_emp_list];
} else {
// Handle the case where it's neither an array nor an object
console.error('client_branch_emp_list is not an array or object:', data.client_branch_emp_list);
data.client_branch_emp_list = []; // Ensure it is at least an empty array
}
console.log('Converted client_branch_emp_list:', data.client_branch_emp_list);
updateCarouselWithData(data, 2);
}
} else {
console.error('Parsed data is not an object:', data);
}
} catch (e) {
console.error('Error parsing JSON:', e);
}
}
});
function updateCarouselWithData(data, open_close) {
var itemsPerSlide = 3; // Number of items per slide
var currentItem = 0; // Counter for items
@ -327,10 +355,11 @@ function updateCarouselWithData(data, open_close) {
carouselInner.empty();
// Check if data.client_branch_emp_list is valid
if (Array.isArray(data.client_branch_emp_list) && data.client_branch_emp_list.length > 0) {
console.log("Processing array...");
if (Array.isArray(data) && data.length > 0) {
console.log("Processing array........................................");
// Handle the case where data.client_branch_emp_list is an array
var items = data.client_branch_emp_list[0];
var items = data[0];
console.log("Items data:", items);
// Convert items object to an array
@ -338,17 +367,15 @@ function updateCarouselWithData(data, open_close) {
// Validate if client_list is an array
if (Array.isArray(client_list)) {
console.log(client_list);
for (var i = 0; i < client_list.length; i++) {
var client = client_list[i];
// console.log(item.branches);
var branch_list = client.branches;
for (var j = 0; j < branch_list.length; j++) {
var branch = branch_list[j];
console.log(branch);
if(open_close == 1){
if(branch.client_policies.length > 0){
for (var i = 0; i < data.length; i++) {
let client = data[i];
if (open_close == 1 && client.open_or_close_enrollment == 1) {
if (currentItem % itemsPerSlide === 0) {
if (!isActive) carouselInner.append('</div>'); // Close previous carousel item
carouselInner.append('<div class="carousel-item' + (isActive ? ' active' : '') + '">');
@ -356,14 +383,14 @@ function updateCarouselWithData(data, open_close) {
}
// Generate HTML for each item
var itemHtml = `
<div class="col-xl-3 col-md-6 d-inline-block scroll-item carousel-slide-item" data-client="${client.short_name}" data-branch="${branch.branch_name }">
<div class="col-xl-3 col-md-6 d-inline-block scroll-item carousel-slide-item" data-client="${client.short_name}" data-branch="${client.branch_name }">
<div class="card" style="box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);">
<div class="card-header add_card_background_random" >
<div class="row">
<div class="col-8 emp-count-view-click" >
<div class="d-flex justify-content-between">
<div class="w-100 " >
<h3 class="my-2 py-1" ><span data-plugin="counterup" style="font-size: 2.0rem;background-color: white;border-radius: 6px;height: 30;padding: 4px 11px 4px 11px;" onclick="enrollment_list(this, 'emp_count_view_click')">${branch.employees.length}</span></h3>
<h3 class="my-2 py-1" ><span data-plugin="counterup" style="font-size: 2.0rem;background-color: white;border-radius: 6px;height: 30;padding: 4px 11px 4px 11px;" onclick="enrollment_list(this, 'emp_count_view_click')">${client.total_employees}</span></h3>
</div>
</div>
</div>
@ -372,7 +399,7 @@ function updateCarouselWithData(data, open_close) {
<div class="col-12 emp-count-view-click" >
<div class="d-flex justify-content-between">
<div class="w-100" >
<h5 class="mt-0 text-truncate" title="Branch Info" style="font-weight: 400 !important;font-size: 20px !important;line-height: 36px;color: black !important;">${client.short_name} - ${branch.branch_name} </h5>
<h5 class="mt-0 text-truncate" title="Branch Info" style="font-weight: 400 !important;font-size: 20px !important;line-height: 36px;color: black !important;">${client.short_name} - ${client.branch_name} </h5>
</div>
</div>
</div>
@ -390,24 +417,24 @@ function updateCarouselWithData(data, open_close) {
</div>
<div class="card-body" >
<input type="text" class="client_id" value="${client.client_id}" hidden>
<input type="text" class="client_branch_id" value="${branch.client_branch_id}" hidden>
<input type="text" class="client_branch_id" value="${client.client_branch_id}" hidden>
<div class="row emp-status" style="margin-top: -9px;">
<div class="col-6 emp-count-view-click" >
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_logged_in_view_click')">${branch.emp_login}</span><br>
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_logged_in_view_click')">${client.logged_in_count ?? 0}</span><br>
<span class="text-nowrap " style="color: currentColor;font-size: 15px;">Logged-In</span>
</div>
<div class="col-6 emp-count-view-click" >
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_logged_in_view_click')"> ${branch.employees.length - (branch.emp_login || 0)}</span><br>
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_logged_in_view_click')"> ${client.not_logged_in_count ?? 0}</span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;margin-left: -13px;">Not Logged-In</span>
</div>
</div>
<div class="row emp-status" style="margin-top: 5px;">
<div class="col-6 emp-count-view-click" >
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_enrolled_view_click')">${branch.employees.length - (branch.emp_enroll || 0)}</span><br>
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_enrolled_view_click')">${client.draft_count ?? 0}</span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;">Draft</span>
</div>
<div class="col-6 emp-count-view-click" >
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_enrolled_view_click')">${(branch.emp_enroll || 0)}</span><br>
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_enrolled_view_click')">${(client.enrolled_count ?? 0)}</span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;">Enrolled</span>
</div>
</div>
@ -418,9 +445,9 @@ function updateCarouselWithData(data, open_close) {
carouselInner.find('.carousel-item').last().append(itemHtml);
currentItem++;
}
} else {
if(branch.client_policies.length == 0){
if (currentItem % itemsPerSlide === 0) {
if (!isActive) carouselInner.append('</div>'); // Close previous carousel item
carouselInner.append('<div class="carousel-item' + (isActive ? ' active' : '') + '">');
@ -428,14 +455,14 @@ function updateCarouselWithData(data, open_close) {
}
// Generate HTML for each item
var itemHtml = `
<div class="col-xl-3 col-md-6 d-inline-block scroll-item carousel-slide-item" data-client="${client.short_name}" data-branch="${branch.branch_name }">
<div class="col-xl-3 col-md-6 d-inline-block scroll-item carousel-slide-item" data-client="${client.short_name}" data-branch="${client.branch_name }">
<div class="card" style="box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);">
<div class="card-header add_card_background_random" >
<div class="row">
<div class="col-8 emp-count-view-click" >
<div class="d-flex justify-content-between">
<div class="w-100 " >
<h3 class="my-2 py-1" ><span data-plugin="counterup" style="font-size: 2.0rem;background-color: white;border-radius: 6px;height: 30;padding: 4px 11px 4px 11px;" onclick="enrollment_list(this, 'emp_count_view_click')">${branch.employees.length}</span></h3>
<h3 class="my-2 py-1" ><span data-plugin="counterup" style="font-size: 2.0rem;background-color: white;border-radius: 6px;height: 30;padding: 4px 11px 4px 11px;" onclick="enrollment_list(this, 'emp_count_view_click')">${client.total_employees}</span></h3>
</div>
</div>
</div>
@ -444,7 +471,7 @@ function updateCarouselWithData(data, open_close) {
<div class="col-12 emp-count-view-click" >
<div class="d-flex justify-content-between">
<div class="w-100" >
<h5 class="mt-0 text-truncate" title="Branch Info" style="font-weight: 400 !important;font-size: 20px !important;line-height: 36px;color: black !important;">${client.short_name} - ${branch.branch_name} </h5>
<h5 class="mt-0 text-truncate" title="Branch Info" style="font-weight: 400 !important;font-size: 20px !important;line-height: 36px;color: black !important;">${client.short_name} - ${client.branch_name} </h5>
</div>
</div>
</div>
@ -462,24 +489,24 @@ function updateCarouselWithData(data, open_close) {
</div>
<div class="card-body" >
<input type="text" class="client_id" value="${client.client_id}" hidden>
<input type="text" class="client_branch_id" value="${branch.client_branch_id}" hidden>
<input type="text" class="client_branch_id" value="${client.client_branch_id}" hidden>
<div class="row emp-status" style="margin-top: -9px;">
<div class="col-6 emp-count-view-click" >
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_logged_in_view_click')">${branch.emp_login}</span><br>
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_logged_in_view_click')">${client.logged_in_count}</span><br>
<span class="text-nowrap " style="color: currentColor;font-size: 15px;">Logged-In</span>
</div>
<div class="col-6 emp-count-view-click" >
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_logged_in_view_click')"> ${branch.employees.length - (branch.emp_login || 0)}</span><br>
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_logged_in_view_click')"> ${client.not_logged_in_count ?? 0}</span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;margin-left: -13px;">Not Logged-In</span>
</div>
</div>
<div class="row emp-status" style="margin-top: 5px;">
<div class="col-6 emp-count-view-click" >
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_enrolled_view_click')">${branch.employees.length - (branch.emp_enroll || 0)}</span><br>
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_not_enrolled_view_click')">${client.draft_count ?? 0}</span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;">Draft</span>
</div>
<div class="col-6 emp-count-view-click" >
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_enrolled_view_click')">${(branch.emp_enroll || 0)}</span><br>
<span style="font-size: large;color: black !important;" class="number_css" onclick="enrollment_list(this, 'emp_enrolled_view_click')">${(client.enrolled_count ?? 0)}</span><br>
<span class="text-nowrap" style="color: currentColor;font-size: 15px;">Enrolled</span>
</div>
</div>
@ -490,35 +517,28 @@ function updateCarouselWithData(data, open_close) {
carouselInner.find('.carousel-item').last().append(itemHtml);
currentItem++;
}
}
}
// Create a new carousel item every `itemsPerSlide` items
}
// Close the last carousel item if it was opened
if (currentItem % itemsPerSlide !== 0) carouselInner.append('</div>');
} else {
console.error('Expected an array for items, but got:', client_list);
}
} else if (typeof data.client_branch_emp_list === 'object') {
console.error('client_branch_emp_list is an object, not an array:', data.client_branch_emp_list);
} else if (typeof data === 'object') {
console.error('client_branch_emp_list is an object, not an array:', data);
} else {
console.error('client_branch_emp_list is missing or not in the expected format:', data.client_branch_emp_list);
console.error('client_branch_emp_list is missing or not in the expected format:', data);
}
random_color_set();
// Initialize or refresh carousel if needed
$('#carouselExampleControls').carousel('dispose').carousel();
}
document.addEventListener('DOMContentLoaded', function() {
random_color_set();
});
function remove_empty_carousel() {
$('#carouselExampleControls').carousel('dispose'); // Properly dispose of the instance
$('#carouselExampleControls').carousel(); // Reinitialize it
}

View File

@ -604,17 +604,17 @@
<ul class="nav-second-level">
<!-- <li>
<a href="<?= base_url('/master/insurer/list') ?>">Insurer</a>
</li>
<li>
</li> -->
<!-- <li>
<a href="<?= base_url('/master/tpa/list') ?>">TPA</a>
</li>
<li>
</li> -->
<!-- <li>
<a href="<?= base_url('/master/kyc/list') ?>">KYC</a>
</li>
<li>
</li> -->
<!-- <li>
<a href="<?= base_url('/master/policy/list') ?>">Policy</a>
</li>
<li>
</li> -->
<!-- <li>
<a href="<?= base_url('/master/cash_deposite/list') ?>">CD Master</a>
</li>
<li>
@ -644,7 +644,7 @@
</a>
</li> -->
<li>
<!-- <li>
<a id="app_content_management" href="#sidebarDashboardsmenu" data-toggle="collapse" class="waves-effect" style="color: grey;">
<i class="fa fa-info-circle" aria-hidden="true"></i>
<span class="badge badge-success badge-pill float-right">2</span>
@ -660,7 +660,7 @@
</li>
</ul>
</div>
</li>
</li> -->
<!-- leads -->
<!-- <li>
@ -672,7 +672,7 @@
<?php if((get_role_id() == 1 || get_role_id() == 5) && (in_array(BUSINESS_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(MANAGEMENT_TEAM_ID, user_team()))) { ?>
<li>
<!-- <li>
<a href="#sidebarDashboards" data-toggle="collapse" class="waves-effect">
<i class="mdi mdi-format-list-bulleted"></i>
<span class="badge badge-success badge-pill float-right">2</span>
@ -693,9 +693,9 @@
<a href="<?= base_url('/policy_tranction/statement/list') ?>">Statement upload</a>
</li>
<!-- <li>
<li>
<a href="<?= base_url('/policy_tranction/report/list') ?>">BDS</a>
</li> -->
</li>
<li>
<a href="<?= base_url('/policy_tranction/report/report-varience-list') ?>">Variance</a>
</li>
@ -726,7 +726,7 @@
</li>
</ul>
</div>
</li>
</li> -->
<?php } ?>

File diff suppressed because it is too large Load Diff

View File

@ -75,8 +75,10 @@
</style>
<div id="policyGPATermsForm" style="display:none">
<span id="policyGPATermsClose" style="float: right;font-size: 26px;color: red;margin-top: -42px;margin-left: 3px;margin-right: 7px;">x</span>
<h5><label for="gpaTerms" style="margin-bottom: 20px;">Policy Terms <span id="nameOfThePolicyInGPA"></span></label></h5>
<span id="policyGPATermsClose"
style="float: right;font-size: 26px;color: red;margin-top: -42px;margin-left: 3px;margin-right: 7px;">x</span>
<h5><label for="gpaTerms" style="margin-bottom: 20px;">Policy Terms <span id="nameOfThePolicyInGPA"></span></label>
</h5>
<form role="form" class="parsley-examples" method="post" id="policyGPATerms" enctype="multipart/form-data">
<input type="hidden" value="<?= csrf_hash() ?>" name="<?= csrf_token() ?>" />
<input type="hidden" name="client_id" id="Client_id" value="<?= isset($client['id']) ? $client['id'] : '' ?>" />
@ -91,7 +93,9 @@
<label for="sumInsured">Sum Insured</label>
</div>
<div class="col-md-4">
<input style="width: 128%;" class="form-control" type="text" name="sumInsured2" id="sumInsured2" onkeypress = "return onlyNumbers(event)" onkeyup="formatNumber(this)" style="width: 100% !important;">
<input style="width: 128%;" class="form-control" type="text" name="sumInsured2" id="sumInsured2"
onkeypress="return onlyNumbers(event)" onkeyup="formatNumber(this)"
style="width: 100% !important;">
</div>
<div class="col-md-2" style="position: relative;left: 88px;">
<button type="button" class="btn btn-primary si-add-more" onclick="appendGPASIAddMore()">+</button>
@ -110,7 +114,8 @@
<label for="totalSumInsured">Total Sum Assured</label>
</div>
<div class="col-md-6">
<input type="text" style="width: 100% !important;" class="form-control" name="totalSumInsured" id="totalSumInsured" onkeypress = "return onlyNumbers(event)" onkeyup="formatNumber(this)">
<input type="text" style="width: 100% !important;" class="form-control" name="totalSumInsured"
id="totalSumInsured" onkeypress="return onlyNumbers(event)" onkeyup="formatNumber(this)">
</div>
<div class="col-md-6">
</div>
@ -126,28 +131,52 @@
<div class="col-md-6">
<table>
<tbody>
<tr><td></td></tr><tr><td></td></tr><tr><td></td></tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td style="width: 5%;">
<span style="margin-right: 20px;">Self:</span>
</td>
<td style="width: 11%;">
<input disabled type="checkbox" style="margin-right: 70px;" name="family_floaters[]" value="self" id="self" checked>
<input disabled type="checkbox" style="margin-right: 70px;" name="family_floaters[]"
value="self" id="self" checked>
</td>
<td style="width: 20%;">
<div class="self-age">
<span style="margin-right: 20px;">Min Age:</span>
<input class="underline-input min_age" value="<?php echo isset($self_min_age) ? $self_min_age : '18'; ?>" style="width: 65%;" type="number" name="self_min_age" id="self_min_age_gpa" onchange="lowerIsEighteen(this)">
<input class="underline-input min_age"
value="<?php echo isset($self_min_age) ? $self_min_age : '18'; ?>"
style="width: 65%;" type="number" name="self_min_age" id="self_min_age_gpa"
onchange="lowerIsEighteen(this)">
</div>
</td>
<td style="width: 20%;">
<div class="self-age">
<span style="margin-right: 20px;">Max Age:</span>
<input class="underline-input max_age" value="<?php echo isset($self_max_age) ? $self_max_age : '60'; ?>" style="width: 65%;" type="number" name="self_max_age" id="self_max_age_gpa" onchange="lowerIsEighteen(this)">
<input class="underline-input max_age"
value="<?php echo isset($self_max_age) ? $self_max_age : '60'; ?>"
style="width: 65%;" type="number" name="self_max_age" id="self_max_age_gpa"
onchange="lowerIsEighteen(this)">
</div>
</td>
<td></td>
</tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</tbody>
</table>
</div>
@ -157,176 +186,262 @@
</div>
</div>
<hr>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="accidentalDeathBenefit_display" id="accidentalDeathBenefit_display" checked>
</div>
<div class="col-md-4">
<label for="totalSumInsured">Accidental Death Benefit</label>
</div>
<div class="col-md-6">
<input type="radio" name="accidentalDeathBenefit" value="1"> Yes
<input type="radio" name="accidentalDeathBenefit" value="0" style="margin-left:10px" checked> No
<input type="text" name="accidentalDeathBenefit" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Permanent Total Disablement</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="permanentTotalDisablement_display" id="permanentTotalDisablement_display" checked>
</div>
<div class="col-md-4">
<label for="permanentTotalDisablement">Permanent Total Disablement</label>
</div>
<div class="col-md-6">
<input type="text" name="permanentTotalDisablement" id="permanentTotalDisablement" class="form-control">
<input type="text" name="permanentTotalDisablement" id="permanentTotalDisablement"
class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Permanent Partial Disablement</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="permanentPartialDisablement_display" id="permanentPartialDisablement_display" checked>
</div>
<div class="col-md-4">
<label for="permanentPartialDisablement">Permanent Partial Disablement</label>
</div>
<div class="col-md-6">
<input type="text" name="permanentPartialDisablement" id="permanentPartialDisablement" class="form-control">
<input type="text" name="permanentPartialDisablement" id="permanentPartialDisablement"
class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Temporary Total Disablement benefit</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="temporaryTotalDisablementBenefit_display" id="temporaryTotalDisablementBenefit_display" checked>
</div>
<div class="col-md-4">
<label for="temporaryTotalDisablementBenefit">Temporary Total Disablement Benefit</label>
</div>
<div class="col-md-6">
<input type="text" name="temporaryTotalDisablementBenefit" id="temporaryTotalDisablementBenefit" class="form-control">
<input type="text" name="temporaryTotalDisablementBenefit" id="temporaryTotalDisablementBenefit"
class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Accidental Hospitalization Expenses</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="medical_expenses_medical_extension_display" id="medical_expenses_medical_extension_display" checked>
</div>
<div class="col-md-4">
<label for="medical_expenses_medical_extension">Medical Expenses / Medical Extension (IPD)</label>
</div>
<div class="col-md-6">
<select name="accidentalHospitalizationExpenses" id="accidentalHospitalizationExpenses" class="form-control">
<option value="">Select an option</option>
<option value="No">No</option>
<option value="10%-40%">Covered upto 10% of SI or 40% of actual which ever is less</option>
<option value="20%-50%">Covered upto 20% of SI or 50% of actual which ever is less</option>
<option value="50K-500k">INR 50K, to vary in multiples of 25K till 5 Lacs</option>
</select>
<input type="text" name="medical_expenses_medical_extension" id="medical_expenses_medical_extension"
class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Children Education Welfare Fund</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="opd_treatment_cover_display" id="opd_treatment_cover_display" checked>
</div>
<div class="col-md-4">
<label for="opd_treatment_cover">OPD Treatment Cover</label>
</div>
<div class="col-md-6">
<select name="childrenEducationWelfareFund" id="childrenEducationWelfareFund" class="form-control">
<option value="">Select an option</option>
<option value="No">No</option>
<option value="10000">Covered upto 10,000/­ per child ( Restricted to 2 children)</option>
<option value="5000">Covered upto 5,000/­ per child ( Restricted to 2 children)</option>
</select>
<input type="text" name="opd_treatment_cover" id="opd_treatment_cover" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Compassionate Visit Expenses</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="ambulanceCharges_display" id="ambulanceCharges_display" checked>
</div>
<div class="col-md-4">
<label for="ambulanceCharges"> Ambulance Charges</label>
</div>
<div class="col-md-6">
<input type="radio" name="compassionateVisitExpenses" value="1"> Yes
<input type="radio" name="compassionateVisitExpenses" value="0" style="margin-left:10px" checked> No
</div>
</div>
<div class="row" style="margin-bottom: 10px;display:none;">
<div class="col-md-6">
<label for="totalSumInsured">Compassionate Visit Expenses Data</label>
</div>
<div class="col-md-6">
<input type="text" name="compassionateVisitExpensesData" id="compassionateVisitExpensesData" class="form-control">
<input type="text" name="ambulanceCharges" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Broken Bone Expenses</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="repatriation_of_mortal_remains_display" id="repatriation_of_mortal_remains_display" checked>
</div>
<div class="col-md-4">
<label for="repatriation_of_mortal_remains">Repatriation of Mortal Remains</label>
</div>
<div class="col-md-6">
<input type="radio" name="brokenBoneExpenses" value="1"> Yes
<input type="radio" name="brokenBoneExpenses" value="0" style="margin-left:10px" checked> No
</div>
</div>
<div class="row" style="margin-bottom: 10px;display:none;">
<div class="col-md-6">
<label for="totalSumInsured">Broken Bone Expenses Data</label>
</div>
<div class="col-md-6">
<input type="text" name="brokenBoneExpensesData" id="brokenBoneExpensesData" class="form-control">
<input type="text" name="repatriation_of_mortal_remains" id="repatriation_of_mortal_remains" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured"> Ambulance charges</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="childrenEducationWelfareFund_display" id="childrenEducationWelfareFund_display" checked>
</div>
<div class="col-md-4">
<label for="childrenEducationWelfareFund">Children Education Welfare Fund</label>
</div>
<div class="col-md-6">
<input type="radio" name="ambulanceCharges" value="1"> Yes
<input type="radio" name="ambulanceCharges" value="0" style="margin-left:10px" checked> No
</div>
</div>
<div class="row" style="margin-bottom: 10px;display:none;">
<div class="col-md-6">
<label for="totalSumInsured">Ambulance charges Data</label>
</div>
<div class="col-md-6">
<input type="text" name="ambulanceChargesData" id="ambulanceChargesData" class="form-control">
<input type="text" name="childrenEducationWelfareFund" id="childrenEducationWelfareFund" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured"> Burn Expenses</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="terrorism_display" id="gpa_terrorism_display" checked>
</div>
<div class="col-md-4">
<label for="terrorism">Terrorism</label>
</div>
<div class="col-md-6">
<input type="radio" name="burnExpenses" value="1"> Yes
<input type="radio" name="burnExpenses" value="0" style="margin-left:10px" checked> No
</div>
</div>
<div class="row" style="margin-bottom: 10px;display:none;">
<div class="col-md-6">
<label for="totalSumInsured">Burn Expenses Data</label>
</div>
<div class="col-md-6">
<input type="text" name="burnExpensesData" id="burnExpensesData" class="form-control">
<input type="text" name="terrorism" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Carriage of Dead Body</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="worldwideCover_display" id="worldwideCover_display" checked>
</div>
<div class="col-md-4">
<label for="worldwideCover">Worldwide Cover</label>
</div>
<div class="col-md-6">
<input type="radio" name="carriageOfDeadBody" value="1"> Yes
<input type="radio" name="carriageOfDeadBody" value="0" style="margin-left:10px" checked> No
</div>
</div>
<div class="row" style="margin-bottom: 10px;display:none;">
<div class="col-md-6">
<label for="totalSumInsured">Carriage of Dead Body Data</label>
</div>
<div class="col-md-6">
<input type="text" name="carriageOfDeadBodyData" id="carriageOfDeadBodyData" class="form-control">
<input type="text" name="worldwideCover" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Animal/Snake/Insect bite</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="family_transportation_benefits_display" id="family_transportation_benefits_display" checked>
</div>
<div class="col-md-4">
<label for="family_transportation_benefits">Family Transportation Benefits</label>
</div>
<div class="col-md-6">
<input type="radio" name="animalSnakeInsectBite" value="1"> Yes
<input type="radio" name="animalSnakeInsectBite" value="0" style="margin-left:10px" checked> No
<input type="text" name="family_transportation_benefits" id="family_transportation_benefits" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Terrorism</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="fractures_dislocation_burns_display" id="fractures_dislocation_burns_display" checked>
</div>
<div class="col-md-4">
<label for="fractures_dislocation_burns">Fractures / Dislocation / Burns</label>
</div>
<div class="col-md-6">
<input type="radio" name="terrorism" value="1"> Yes
<input type="radio" name="terrorism" value="0" style="margin-left:10px" checked> No
<input type="text" name="fractures_dislocation_burns" id="fractures_dislocation_burns" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-6">
<label for="totalSumInsured">Worldwide Cover</label>
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="coma_display" id="coma_display" checked>
</div>
<div class="col-md-4">
<label for="coma">Coma</label>
</div>
<div class="col-md-6">
<input type="radio" name="worldwideCover" value="1"> Yes
<input type="radio" name="worldwideCover" value="0" style="margin-left:10px" checked> No
<input type="text" name="coma" id="coma" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="carriageofDeadBody_display" id="carriageofDeadBody_display" checked>
</div>
<div class="col-md-4">
<label for="carriageOfDeadBody">Carriage of Dead Body</label>
</div>
<div class="col-md-6">
<input type="text" name="carriageOfDeadBody" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="compassionateVisitExpenses_display" id="compassionateVisitExpenses_display" checked>
</div>
<div class="col-md-4">
<label for="compassionateVisitExpenses">Compassionate Visit Expenses</label>
</div>
<div class="col-md-6">
<input type="text" name="compassionateVisitExpenses" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="travel_expenses_for_medical_treatment_display" id="travel_expenses_for_medical_treatment_display" checked>
</div>
<div class="col-md-4">
<label for="travel_expenses_for_medical_treatment">Travel expenses for Medical Treatment</label>
</div>
<div class="col-md-6">
<input type="text" name="travel_expenses_for_medical_treatment" id="travel_expenses_for_medical_treatment" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="daily_cash_allowance_display" id="daily_cash_allowance_display" checked>
</div>
<div class="col-md-4">
<label for="daily_cash_allowance">Daily cash Allowance</label>
</div>
<div class="col-md-6">
<input type="text" name="daily_cash_allowance" id="daily_cash_allowance" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="artifical_limb_and_prosthesis_display" id="artifical_limb_and_prosthesis_display" checked>
</div>
<div class="col-md-4">
<label for="artifical_limb_and_prosthesis">Artifical Limb and Prosthesis</label>
</div>
<div class="col-md-6">
<input type="text" name="artifical_limb_and_prosthesis" id="artifical_limb_and_prosthesis" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="animalSnakeInsectBite_display" id="animalSnakeInsectBite_display" checked>
</div>
<div class="col-md-4">
<label for="animalSnakeInsectBite">Animal/Snake/Insect bite</label>
</div>
<div class="col-md-6">
<input type="text" name="animalSnakeInsectBite" id="animalSnakeInsectBite" class="form-control">
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" class="unchecked" name="air_ambulance_display" id="air_ambulance_display" checked>
</div>
<div class="col-md-4">
<label for="air_ambulance">Air Ambulance</label>
</div>
<div class="col-md-6">
<input type="text" name="air_ambulance" id="air_ambulance" class="form-control">
</div>
</div>
@ -339,8 +454,10 @@
<br>
<div class="form-group text-right m-b-0" style="margin-top: -49px;">
<a href="#" class="button-like" id="gpaButtonSpecialCondition" title="Special Condition">Special Condition</a>
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1" id="btnGPATermsSubmit" style="margin-top: 100px;">Submit</button>
<a href="#" class="button-like" id="gpaButtonSpecialCondition" title="Special Condition">Special
Condition</a>
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1" id="btnGPATermsSubmit"
style="margin-top: 100px;">Submit</button>
</div>
</div>
@ -428,7 +545,6 @@
}
});
$("#policyGPATerms").submit(function(event) {
@ -451,11 +567,28 @@
return;
}
var specialConditions = [];
$(".removeDom").each(function () {
var isChecked = $(this).find("input[name='gpa_special_condition_display[]']").is(":checked");
if (isChecked) {
var label = $(this).find("input[name='gpa_special_condition_label[]']").val();
var input = $(this).find("input[name='gpa_special_condition_input[]']").val();
specialConditions.push({ [label]: input });
}
});
console.log("gpa_specialConditions", specialConditions);
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
var formData = new FormData($('#policyGPATerms')[0]);
var policy_form_action = '<?= base_url("client/terms/gpa_create") ?>';
formData.append("gpa_special_condition_display_value", JSON.stringify(specialConditions));
$.ajax({
data: formData,
@ -500,7 +633,6 @@
});
$('body').on('click', '.btnPolicyMaster', function() {
var client_policy_id = $(this).data('id');
@ -550,13 +682,15 @@
}
if (res) {
if (res && res.data) {
let gpaJsonObjectForSpecialCondition = JSON.parse(res.data);
Object.keys(gpaJsonObjectForSpecialCondition).forEach(function(key) {
if (key.includes("gpa_special_condition_label") || key.includes("gpa_special_condition_input")) {
if (key.includes("gpa_special_condition_label") || key.includes(
"gpa_special_condition_input")) {
if (key.includes("gpa_special_condition_label")) {
for (let index = 0; index < gpaJsonObjectForSpecialCondition[key].length; index++) {
for (let index = 0; index <
gpaJsonObjectForSpecialCondition[key].length; index++) {
specialConditionForGPA();
}
}
@ -565,10 +699,33 @@
if (elements) {
elements.forEach((element, index) => {
if(gpaJsonObjectForSpecialCondition[key][index] == undefined){
if (gpaJsonObjectForSpecialCondition[key][
index
] == undefined) {
element.value = " ";
} else {
element.value = gpaJsonObjectForSpecialCondition[key][index];
element.value =
gpaJsonObjectForSpecialCondition[key][
index
];
if (key.includes("gpa_special_condition_label")) {
let checkbox = $(element).closest('.form-group').find('input[name="gpa_special_condition_display[]"]');
console.log("First element:", element);
if (checkbox.length) {
console.log("Checkbox found:", checkbox);
// Correct way to set the 'id' attribute
let formattedValue = gpaJsonObjectForSpecialCondition[key][index].replace(/[\s\-\/,&]+/g, '').toLowerCase();
console.log('formattedValue', formattedValue);
checkbox.attr('id', formattedValue + '_display');
console.log("Updated Checkbox:", checkbox);
} else {
console.log("Checkbox not found for:", element);
}
}
}
});
}
@ -577,7 +734,8 @@
if (key.includes("multiple_sum_insured") && key != "") {
if (Array.isArray(gpaJsonObjectForSpecialCondition[key])) {
gpaJsonObjectForSpecialCondition[key].forEach((value, index) => {
gpaJsonObjectForSpecialCondition[key].forEach((value,
index) => {
appendGPASIAddMore(value);
});
} else {
@ -585,22 +743,36 @@
}
}
if (key.includes("enrollment_display_key") && key != "") {
console.log('enrollment_display_key');
console.log(gpaJsonObjectForSpecialCondition[key]);
processJsonObject2(gpaJsonObjectForSpecialCondition);
}
});
let jsonObject = JSON.parse(res.data);
$("#numberToWordSumInsured").text(convertCommaNumberToWords(jsonObject.sumInsured2) ?? '' );
$("#numberToWordTotalSumInsured").text(convertCommaNumberToWords(jsonObject.totalSumInsured) ?? '');
$("#numberToWordSumInsured").text(convertCommaNumberToWords(jsonObject
.sumInsured2) ?? '');
$("#numberToWordTotalSumInsured").text(convertCommaNumberToWords(jsonObject
.totalSumInsured) ?? '');
if (jsonObject.compassionateVisitExpenses == '1') {
var element = $('input[name="compassionateVisitExpenses"]').parent().parent().next()[0];
var element = $('input[name="compassionateVisitExpenses"]').parent()
.parent().next()[0];
$(element).css("display", "");
}
if (jsonObject.brokenBoneExpenses == '1') {
var element = $('input[name="brokenBoneExpenses"]').parent().parent().next()[0];
var element = $('input[name="brokenBoneExpenses"]').parent().parent()
.next()[0];
$(element).css("display", "");
}
if (jsonObject.ambulanceCharges == '1') {
var element = $('input[name="ambulanceCharges"]').parent().parent().next()[0];
var element = $('input[name="ambulanceCharges"]').parent().parent().next()[
0];
$(element).css("display", "");
}
if (jsonObject.burnExpenses == '1') {
@ -608,22 +780,23 @@
$(element).css("display", "");
}
if (jsonObject.carriageOfDeadBody == '1') {
var element = $('input[name="carriageOfDeadBody"]').parent().parent().next()[0];
var element = $('input[name="carriageOfDeadBody"]').parent().parent()
.next()[0];
$(element).css("display", "");
}
Object.keys(jsonObject).forEach(function(key) {
console.log('jsonObject key', key)
console.log('jsonObject value', jsonObject[key])
console.log('jsonObject value type',typeof jsonObject[key])
// console.log('jsonObject key', key)
// console.log('jsonObject value', jsonObject[key])
// console.log('jsonObject value type', typeof jsonObject[key])
let elements = document.getElementsByName(key);
if (elements && elements.length > 0) {
let element = elements[0];
if (element.tagName === 'INPUT' && (element.type === 'checkbox' || element.type === 'radio')) {
if (element.tagName === 'INPUT' && (element.type ===
'checkbox' || element.type === 'radio')) {
if (element.type === 'checkbox') {
element.checked = jsonObject[key] === '1';
@ -657,7 +830,6 @@
$('.multiple_sum_insured').trigger("keyup");
$("#totalSumInsured").trigger("keyup");
},
error: function(xhr, status, error) {
@ -676,7 +848,6 @@
}
});
</script>
@ -690,7 +861,6 @@
});
function specialConditionForGPA(count = 0) {
console.log('specialConditionForGPA function called')
@ -703,7 +873,9 @@
var index = $('.modifyclassinput').length;
var appendElement = `<div class="form-group col-md-6 form-group-client-policy-masters removeDom">
<div class="col-md-1">
<input type="checkbox" style="margin-top: 12px" name="gpa_special_condition_display[]" id="special_condition_display" class="unchecked" checked>
</div>
<label for="specialconditionlabel" class="special_condition_label[]" style="width: 450px;position: relative;bottom: 6px;">
<input class="form-control" name="gpa_special_condition_label[]" id="gpa_special_condition_label[]" style="position: relative;right: 5px;">
<span class="specialConditionClose" style="color: red; float: right;position: relative;bottom: 28px;left: 15px;">X</span>
@ -721,8 +893,6 @@
}
}
$(document).on('click', '#policyGPATermsClose', function() {
$('#policyGPATermsForm').css('display', 'none');
$('#police-tab').css('display', '');
@ -733,7 +903,6 @@
});
$("#sumInsured2").on("keyup", function() {
var inputNumber = $(this).val();
if (inputNumber) {
@ -759,7 +928,6 @@
}
});
function numtowordinkeyup(input) {
console.log('testing......')
console.log(input);
@ -779,7 +947,6 @@
}
$("#totalSumInsured").on("keyup", function() {
var inputNumber = $(this).val();
if (inputNumber) {
@ -790,9 +957,7 @@
}
});
function appendGPASIAddMore(data = null)
{
function appendGPASIAddMore(data = null) {
console.log('appendGPASIAddMore function called')
console.log('appendGPASIAddMore function data', data)
@ -818,4 +983,61 @@
$('#gpa_si_add_more').append(html);
}
function inArray(key, array) {
return array.includes(key);
}
function processJsonObject2(jsonObject) {
if (typeof jsonObject !== 'object' || Array.isArray(jsonObject)) {
console.log("jsonObject Input is not a valid object.");
return;
}
$('.unchecked').prop('checked', false);
for (let key in jsonObject) {
if (typeof jsonObject[key] === 'object' && !Array.isArray(jsonObject[key])) {
// console.log('enrollment_display_key');
// console.log(jsonObject[key]);
for (let innerKey in jsonObject[key]) {
const keysToCheck = [
"OPD Treatment Cover",
"Repatriation of Mortal Remains",
"Family Transportation Benefits",
"Fractures / Dislocation / Burns",
"Travel expenses for Medical Treatment",
"Daily cash Allowance",
"Artifical Limb and Prosthesis",
"Air Ambulance",
];
//let base_id = innerKey.replace(/[\s\-\/,&]+/g, '').toLowerCase();
let base_id = innerKey.replace(/[\s\-\/,&]+/g, '');
base_id = base_id.charAt(0).toLowerCase() + base_id.slice(1);
if (keysToCheck.includes(innerKey)) {
// console.log("Key found: " + innerKey);
base_id = innerKey.replace(/[\s\-\/]+/g, '_').toLowerCase();
} else if (innerKey == "Medical Expenses / Medical Extension (IPD)") {
// console.log("Key found: " + innerKey);
base_id = "medical_expenses_medical_extension";
} else if (innerKey == "Terrorism") {
// console.log("Key found: " + innerKey);
base_id = "gpa_terrorism";
}
let display_id = base_id + "_display";
$('#' + display_id).prop('checked', true);
// console.log('display_id : ', display_id);
// console.log($('#' + display_id))
}
} else {
console.log(`${key} is not an object.`);
}
}
}
</script>

View File

@ -52,6 +52,9 @@
</div>
<script>
var si_amt_parent_policy = new Set();
var si_amt_base_policy = new Set();
function loadModal(client_policy_id, base_policy_id) {
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
@ -65,7 +68,7 @@ function loadModal(client_policy_id, base_policy_id) {
$('.loader-mask').delay(350).fadeOut('slow');
};
var si_amt_base_policy = new Set();
function checkExistingMapping(client_policy_id, base_policy_id) {
$.ajax({
@ -78,27 +81,17 @@ function checkExistingMapping(client_policy_id, base_policy_id) {
success: function(response) {
if (response.status === true && response.code === 200 && response.data.length > 0) {
// Clear existing rows except the first one
$('.si-mapping-row:not(:first)').remove();
$('.si-mapping-row:not(:first)').empty();
// First, ensure base policy and parent policy data is loaded
fetchBasePolicy(client_policy_id, base_policy_id);
fetchParentPolicy(client_policy_id, base_policy_id);
// Wait for dropdowns to be populated
setTimeout(() => {
fetchBasePolicy(client_policy_id, base_policy_id).then(()=>{
fetchParentPolicy(client_policy_id, base_policy_id).then(()=>{
// setTimeout(() => {
response.data.forEach((mapping, index) => {
if (index === 0) {
// Handle first row
const firstRow = $('.si-mapping-row:first');
// Clear existing values
firstRow.find('select[name="choose_si_amount_from_base_policy"]')
.val('')
.trigger('change');
firstRow.find('select[name="choose_si_amount_for_policy[]"]')
.val([])
.trigger('change');
// Set base policy SI amount
firstRow.find('select[name="choose_si_amount_from_base_policy"]')
.val(mapping.base_policy_si_amount)
@ -113,22 +106,13 @@ function checkExistingMapping(client_policy_id, base_policy_id) {
// Store pk value
firstRow.find('input[name="primary_key"]').val(mapping.pk);
} else {
// Add new row for subsequent mappings
addRow();
$('#addButton').trigger("click");
// For subsequent mappings, add a new row WITHOUT triggering the add button
addSIMappingRow();
// Wait for the new row to be properly initialized
setTimeout(() => {
// setTimeout(() => {
const newRow = $('.si-mapping-row:last');
// Clear existing values
newRow.find('select[name="choose_si_amount_from_base_policy"]')
.val('')
.trigger('change');
newRow.find('select[name="choose_si_amount_for_policy[]"]')
.val([])
.trigger('change');
// Set base policy SI amount
newRow.find('select[name="choose_si_amount_from_base_policy"]')
.val(mapping.base_policy_si_amount)
@ -142,10 +126,16 @@ function checkExistingMapping(client_policy_id, base_policy_id) {
// Store pk value
newRow.find('input[name="primary_key"]').val(mapping.pk);
}, 500);
// }, 500);
}
});
}, 1000); // Wait for fetchBasePolicy and fetchParentPolicy to complete
// }, 1000);
})
})
// Wait for dropdowns to be populated
// Wait for fetchBasePolicy and fetchParentPolicy to complete
} else {
fetchBasePolicy(client_policy_id, base_policy_id);
fetchParentPolicy(client_policy_id, base_policy_id);
@ -159,7 +149,7 @@ function checkExistingMapping(client_policy_id, base_policy_id) {
}
function fetchBasePolicy(client_policy_id, base_policy_id) {
$.ajax({
return $.ajax({
url: '<?php echo base_url("util/getPolicySIRacketData")?>',
method: 'GET',
data: {
@ -180,17 +170,17 @@ function fetchBasePolicy(client_policy_id, base_policy_id) {
}
// Convert Set back to an array to use in the dropdown
si_amt_base_policy = Array.from(si_amt_base_policy);
console.log("Unique SI amounts:", si_amt_base_policy); // Check the result
var si_amt_base_policy_array = Array.from(si_amt_base_policy);
console.log("Unique SI amounts:", si_amt_base_policy_array); // Check the result
// Clear existing options in the dropdown
// $('#choose_si_amount_from_base_policy').empty();
$('#choose_si_amount_from_base_policy').empty();
$('#choose_si_amount_from_base_policy').append('<option value="">Select SI Amount</option>');
// Append the new options
for (let i = 0; i < si_amt_base_policy.length; i++) {
console.log("Appending option:", si_amt_base_policy[i]); // Log each SI value
$('#choose_si_amount_from_base_policy').append(`<option value="${si_amt_base_policy[i]}">${si_amt_base_policy[i]}</option>`);
for (let i = 0; i < si_amt_base_policy_array.length; i++) {
console.log("Appending option:", si_amt_base_policy_array[i]); // Log each SI value
$('#choose_si_amount_from_base_policy').append(`<option value="${si_amt_base_policy_array[i]}">${si_amt_base_policy_array[i]}</option>`);
}
} else {
@ -203,9 +193,8 @@ function fetchBasePolicy(client_policy_id, base_policy_id) {
});
}
var si_amt_parent_policy = new Set();
function fetchParentPolicy(client_policy_id, base_policy_id) {
$.ajax({
return $.ajax({
url: '<?= base_url("util/fetchPolicySIDataForParentPolicy")?>',
method: 'GET',
data: {
@ -224,17 +213,17 @@ function fetchParentPolicy(client_policy_id, base_policy_id) {
}
// Convert Set back to an array to use in the dropdown
si_amt_parent_policy = Array.from(si_amt_parent_policy);
console.log("Unique SI amounts:", si_amt_parent_policy); // Check the result
var si_amt_parent_policy_array = Array.from(si_amt_parent_policy);
console.log("Unique SI amounts:", si_amt_parent_policy_array); // Check the result
// Clear existing options in the dropdown
// $('#choose_si_amount_for_policy').empty();
$('#choose_si_amount_for_policy').empty();
$('#choose_si_amount_for_policy').append('<option value="">Select SI Amount</option>');
// Append the new options
for (let i = 0; i < si_amt_parent_policy.length; i++) {
console.log("Appending option:", si_amt_parent_policy[i]); // Log each SI value
$('#choose_si_amount_for_policy').append(`<option value="${si_amt_parent_policy[i]}">${si_amt_parent_policy[i]}</option>`);
for (let i = 0; i < si_amt_parent_policy_array.length; i++) {
console.log("Appending option:", si_amt_parent_policy_array[i]); // Log each SI value
$('#choose_si_amount_for_policy').append(`<option value="${si_amt_parent_policy_array[i]}">${si_amt_parent_policy_array[i]}</option>`);
}
} else {
@ -256,98 +245,10 @@ $(document).ready(function() {
$("textarea.select2-search__field").css('resize', 'none');
// Function to get all selected base policy values
function getSelectedBasePolicies() {
var selectedBasePolicies = [];
$('.si-mapping-row').each(function() {
var selectedBasePolicy = $(this).find('select[name="choose_si_amount_from_base_policy"]').val();
if (selectedBasePolicy) {
selectedBasePolicies.push(selectedBasePolicy);
}
});
return selectedBasePolicies;
}
function addRow() {
// Get selected base policies from all previous rows
var selectedBasePolicies = getSelectedBasePolicies();
// Check if si_amt_base_policy has been populated
if (si_amt_base_policy.length === 0) {
console.log("SI amounts not yet loaded.");
return; // Prevent adding the row if the data isn't ready
}
// Create a new row with the same structure as the existing row
var newRow = $('<div class="form-row si-mapping-row">');
// Generate unique IDs for the new row's selects
var uniqueIdForBasePolicy = 'choose_base_policy_' + Date.now();
var uniqueIdForSIAmountForPolicy = 'choose_si_amount_for_policy_' + Date.now();
newRow.append(
'<input name = "primary_key" type="hidden" id="'+uniqueIdForBasePolicy+'" value="">'+
'<div class="form-group col-md-3">' +
'<label>Base Policy SI Amount<span class="text-danger">*</span></label>' +
'<select class="form-control" id="' + uniqueIdForBasePolicy + '" name="choose_si_amount_from_base_policy">' +
'<option value="">Choose SI Amount</option>' +
'</select>' +
'</div>'
);
newRow.append(
'<div class="form-group col-md-3">' +
'<label>Policy SI Amount</label><br />' +
'<select class="form-control" id="' + uniqueIdForSIAmountForPolicy + '" name="choose_si_amount_for_policy[]" multiple>' +
'</select>' +
'</div>'
);
newRow.append(
'<div class="form-group">' +
'<div class="btn-group" style="margin-top: 45px;">' +
'<button type="button" class="btn btn-danger remove-row" style="margin-right: 5px;">x</button>' +
'<button type="button" class="btn btn-success add-row">+</button>' +
'</div>' +
'</div>'
);
// Append the new row to the container
$('#si-mapping-container').append(newRow);
// Loop through and append SI amounts to the new row's 'choose_si_amount_from_base_policy' dropdown
si_amt_base_policy.forEach(function(value) {
newRow.find('select[name="choose_si_amount_from_base_policy"]').append('<option value="'+value+'">'+value+'</option>');
});
// Remove selected base policies from the new row's 'choose_si_amount_from_base_policy' options
newRow.find('select[name="choose_si_amount_from_base_policy"] option').each(function() {
var value = $(this).val();
if (selectedBasePolicies.includes(value)) {
$(this).remove();
}
});
// Append the unique SI amounts to 'choose_si_amount_for_policy[]'
si_amt_parent_policy.forEach(function(value) {
newRow.find('select[name="choose_si_amount_for_policy[]"]').append('<option value="'+value+'">'+value+'</option>');
});
// Re-initialize select2 for the new row's dropdowns
newRow.find('select[name="choose_si_amount_for_policy[]"]').select2({
placeholder: 'Select SI Amount'
});
newRow.find('select[name="choose_si_amount_from_base_policy"]').select2({
placeholder: 'Choose SI Amount'
});
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
}
// Use event delegation to bind the click event for .add-row
$(document).on('click', '.add-row', function() {
addRow();
addSIMappingRow();
});
// Remove an SI Mapping row
@ -446,6 +347,9 @@ function submitForm() {
});
}
function resetFormAndRemoveRows() {
si_amt_parent_policy.clear();
si_amt_base_policy.clear();
// Reset the form fields
$('#si_mapping_form')[0].reset(); // Reset all form fields
@ -462,5 +366,93 @@ function resetFormAndRemoveRows() {
$('#choose_si_amount_for_policy').val('').trigger('change');
}
function getSelectedBasePolicies() {
var selectedBasePolicies = [];
$('.si-mapping-row').each(function() {
var selectedBasePolicy = $(this).find('select[name="choose_si_amount_from_base_policy"]').val();
if (selectedBasePolicy) {
selectedBasePolicies.push(selectedBasePolicy);
}
});
return selectedBasePolicies;
}
function addSIMappingRow() {
// Get selected base policies from all previous rows
var selectedBasePolicies = getSelectedBasePolicies();
// Check if si_amt_base_policy has been populated
if (si_amt_base_policy.length === 0) {
console.log("SI amounts not yet loaded.");
return; // Prevent adding the row if the data isn't ready
}
// Create a new row with the same structure as the existing row
var newRow = $('<div class="form-row si-mapping-row">');
// Generate unique IDs for the new row's selects
var uniqueIdForBasePolicy = 'choose_base_policy_' + Date.now();
var uniqueIdForSIAmountForPolicy = 'choose_si_amount_for_policy_' + Date.now();
newRow.append(
'<input name="primary_key" type="hidden" value="">'+
'<div class="form-group col-md-3">' +
'<label>Base Policy SI Amount<span class="text-danger">*</span></label>' +
'<select class="form-control" id="' + uniqueIdForBasePolicy + '" name="choose_si_amount_from_base_policy">' +
'<option value="">Choose SI Amount</option>' +
'</select>' +
'</div>'
);
newRow.append(
'<div class="form-group col-md-3">' +
'<label>Policy SI Amount</label><br />' +
'<select class="form-control" id="' + uniqueIdForSIAmountForPolicy + '" name="choose_si_amount_for_policy[]" multiple>' +
'</select>' +
'</div>'
);
newRow.append(
'<div class="form-group">' +
'<div class="btn-group" style="margin-top: 45px;">' +
'<button type="button" class="btn btn-danger remove-row" style="margin-right: 5px;">x</button>' +
'<button type="button" class="btn btn-success add-row">+</button>' +
'</div>' +
'</div>'
);
// Append the new row to the container
$('#si-mapping-container').append(newRow);
// First, populate all options
si_amt_base_policy.forEach(function(value) {
newRow.find('select[name="choose_si_amount_from_base_policy"]').append('<option value="'+value+'">'+value+'</option>');
});
// Then, remove already selected values from the dropdown
selectedBasePolicies.forEach(function(value) {
if (value) { // Check if the value is not empty
newRow.find('select[name="choose_si_amount_from_base_policy"] option[value="'+value+'"]').remove();
}
});
// Append the unique SI amounts to 'choose_si_amount_for_policy[]'
si_amt_parent_policy.forEach(function(value) {
newRow.find('select[name="choose_si_amount_for_policy[]"]').append('<option value="'+value+'">'+value+'</option>');
});
// Initialize select2 for the new dropdowns
newRow.find('select[name="choose_si_amount_for_policy[]"]').select2({
placeholder: 'Select SI Amount'
});
// newRow.find('select[name="choose_si_amount_from_base_policy"]').select2({
// placeholder: 'Choose SI Amount'
// });
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
}
</script>

View File

@ -420,17 +420,21 @@ document.addEventListener("DOMContentLoaded", function () {
// Create custom dropdown
function createCustomDropdown(row) {
// Get the original dropdown items
const originalDropdown = row.querySelector('.dropdown-menu');
if (!originalDropdown) return null;
// Create new dropdown with proper background and spacing
const customDropdown = document.createElement('div');
customDropdown.className = 'custom-dropdown-menu';
// Copy inner content while maintaining icon alignment
customDropdown.innerHTML = originalDropdown.innerHTML;
// Remove inline onclick handlers and store them in data attributes
const originalItems = originalDropdown.querySelectorAll('.dropdown-item');
customDropdown.querySelectorAll('.dropdown-item').forEach((item, index) => {
const originalOnclick = originalItems[index].getAttribute('onclick');
item.removeAttribute('onclick'); // Remove the inline handler
item.setAttribute('data-onclick', originalOnclick); // Store in data attribute
});
return customDropdown;
}
@ -444,45 +448,34 @@ document.addEventListener("DOMContentLoaded", function () {
document.body.appendChild(customDropdown);
row.addEventListener("click", function(event) {
// Ignore clicks on the first column (td:first-child)
if (event.target.closest('td:first-child')) {
return;
}
// Ignore clicks on the first column
if (event.target.closest('td:first-child')) return;
// Hide any active dropdown
if (activeDropdown) {
activeDropdown.style.display = 'none';
}
if (activeDropdown) activeDropdown.style.display = 'none';
// Get click position
const rect = event.target.getBoundingClientRect();
// Position the dropdown with some offset
customDropdown.style.display = 'block';
customDropdown.style.position = 'fixed';
customDropdown.style.left = `${rect.left}px`;
customDropdown.style.top = `${rect.bottom + 5}px`; // Add 5px gap
// Set as active dropdown
customDropdown.style.top = `${rect.bottom + 5}px`;
activeDropdown = customDropdown;
event.stopPropagation();
});
// Preserve click handlers and add auto-close
// Handle custom dropdown clicks
customDropdown.querySelectorAll('.dropdown-item').forEach(item => {
item.addEventListener('click', function(e) {
const onclickAttr = this.getAttribute('onclick');
if (onclickAttr) {
eval(onclickAttr);
}
e.preventDefault();
// Execute the original onclick from data attribute
const onclickAttr = this.getAttribute('data-onclick');
if (onclickAttr) eval(onclickAttr);
// Handle href navigation
const href = this.getAttribute('href');
if (href && href !== '#') {
window.location.href = href;
}
if (href && href !== '#') window.location.href = href;
// Close the dropdown after handling the click
if (activeDropdown) {
activeDropdown.style.display = 'none';
activeDropdown = null;
@ -493,7 +486,7 @@ document.addEventListener("DOMContentLoaded", function () {
});
});
// Close dropdown when clicking outside
// Close dropdown on outside click
document.addEventListener("click", function() {
if (activeDropdown) {
activeDropdown.style.display = 'none';