FIX_EXECED_DEPENDENT_APPROVED_COUNT
This commit is contained in:
parent
43ee415407
commit
ca0eee9625
@ -7080,6 +7080,20 @@ class EmployeeRestController extends AdminController
|
||||
}
|
||||
|
||||
if ($status === 'approved') {
|
||||
$floaterLimitCheck = $this->checkFamilyFloaterDependentLimit(
|
||||
$employee,
|
||||
(int) $client_policy_id,
|
||||
(int) $employee_id
|
||||
);
|
||||
|
||||
if ($floaterLimitCheck['allowed'] === false) {
|
||||
return $this->respond([
|
||||
'status' => 'failed',
|
||||
'code' => 400,
|
||||
'data' => $floaterLimitCheck['message'],
|
||||
], 200);
|
||||
}
|
||||
|
||||
$employee_update_data = [
|
||||
'updated_by' => $updated_by,
|
||||
'processed_by' => $processed_by_role,
|
||||
@ -7153,6 +7167,95 @@ class EmployeeRestController extends AdminController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On approve: ensure spouse/child counts stay within policy_terms.family_floaters limits.
|
||||
*
|
||||
* @return array{allowed: bool, message: string|null}
|
||||
*/
|
||||
private function checkFamilyFloaterDependentLimit(array $employee, int $clientPolicyId, int $employeeId): array
|
||||
{
|
||||
$relationship = strtolower(trim((string) ($employee['relationship'] ?? '')));
|
||||
$floaterKey = ! empty($employee['family_floater_key'])
|
||||
? preg_replace('/\d/', '', strtolower(trim((string) $employee['family_floater_key'])))
|
||||
: strtolower((string) ($this->RelationshipMap($employee['relationship'] ?? '') ?? ''));
|
||||
|
||||
$isSpouse = ($relationship === 'spouse' || $floaterKey === 'spouse');
|
||||
$isChild = in_array($relationship, ['son', 'daughter'], true) || $floaterKey === 'child';
|
||||
|
||||
// Only spouse / child are validated against family_floaters for dependent-add approve
|
||||
if (! $isSpouse && ! $isChild) {
|
||||
return ['allowed' => true, 'message' => null];
|
||||
}
|
||||
|
||||
$clientPolicy = $this->clientPolicyModel->select('policy_terms')->where('id', $clientPolicyId)->first();
|
||||
if (empty($clientPolicy['policy_terms'])) {
|
||||
return ['allowed' => true, 'message' => null];
|
||||
}
|
||||
|
||||
$policyTerms = json_decode($clientPolicy['policy_terms'], true);
|
||||
if (! is_array($policyTerms) || empty($policyTerms['family_floaters'])) {
|
||||
return ['allowed' => true, 'message' => null];
|
||||
}
|
||||
|
||||
$familyFloaters = is_array($policyTerms['family_floaters'])
|
||||
? $policyTerms['family_floaters']
|
||||
: (array) $policyTerms['family_floaters'];
|
||||
|
||||
$allowedSpouseCount = (int) ($familyFloaters['spouse'] ?? 0);
|
||||
$allowedChildCount = (int) ($familyFloaters['childrens'] ?? 0);
|
||||
|
||||
$existingFamily = $this->employeeModel
|
||||
->select('employees.id, employees.relationship, employees.family_floater_key')
|
||||
->join('employee_polices', 'employee_polices.employee_id = employees.id')
|
||||
->where('employees.emp_code', $employee['emp_code'])
|
||||
->where('employees.client_id', $employee['client_id'])
|
||||
->where('employee_polices.client_policy_id', $clientPolicyId)
|
||||
->where('employees.emp_status', 'active')
|
||||
->where('employee_polices.status', 'active')
|
||||
->where('employees.is_active', 1)
|
||||
->where('employee_polices.is_active', 1)
|
||||
->where('employees.id !=', $employeeId)
|
||||
->findAll();
|
||||
|
||||
$activeSpouseCount = 0;
|
||||
$activeChildCount = 0;
|
||||
|
||||
foreach ($existingFamily as $member) {
|
||||
$memberRelationship = strtolower(trim((string) ($member['relationship'] ?? '')));
|
||||
$memberFloaterKey = ! empty($member['family_floater_key'])
|
||||
? preg_replace('/\d/', '', strtolower(trim((string) $member['family_floater_key'])))
|
||||
: '';
|
||||
|
||||
if ($memberRelationship === 'spouse' || $memberFloaterKey === 'spouse') {
|
||||
$activeSpouseCount++;
|
||||
} elseif (in_array($memberRelationship, ['son', 'daughter'], true) || $memberFloaterKey === 'child') {
|
||||
$activeChildCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($isSpouse) {
|
||||
if (($activeSpouseCount + 1) > $allowedSpouseCount) {
|
||||
return [
|
||||
'allowed' => false,
|
||||
'message' => 'Spouse count exceeds policy family floater limit. Allowed: '
|
||||
. $allowedSpouseCount . ', existing active: ' . $activeSpouseCount,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
if ($isChild) {
|
||||
if (($activeChildCount + 1) > $allowedChildCount) {
|
||||
return [
|
||||
'allowed' => false,
|
||||
'message' => 'Child count exceeds policy family floater limit. Allowed: '
|
||||
. $allowedChildCount . ', existing active: ' . $activeChildCount,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return ['allowed' => true, 'message' => null];
|
||||
}
|
||||
|
||||
/**
|
||||
* List dependent-add workflow members (API + mobile).
|
||||
* Returns only pending_approval, approved, and rejected dependents (not all members).
|
||||
|
||||
Loading…
Reference in New Issue
Block a user