FIX_Agentpayout

This commit is contained in:
sanjeev.p 2026-04-08 15:52:25 +05:30
parent fac6c7f968
commit c3e035f0be
2 changed files with 66 additions and 28 deletions

View File

@ -556,10 +556,11 @@ class AgentIncentiveController extends ResourceController
} }
// 2. Extract Filters // 2. Extract Filters
$insurer = $request->getGet('insurer'); $insurer = trim((string) ($request->getGet('insurer') ?? ''));
$rto = $request->getGet('rto'); $rto = trim((string) ($request->getGet('rto') ?? ''));
$segment = $request->getGet('segment'); $segment = trim((string) ($request->getGet('segment') ?? ''));
$vehicle_type = $request->getGet('vehicle_type'); $vehicle_type = trim((string) ($request->getGet('vehicle_type') ?? ''));
$search = trim((string) ($request->getGet('search') ?? ''));
// ── 3. Resolve file_id based on role ───────────────────────────────── // ── 3. Resolve file_id based on role ─────────────────────────────────
$db = \Config\Database::connect(); $db = \Config\Database::connect();
@ -603,14 +604,30 @@ class AgentIncentiveController extends ResourceController
$builder->where('partner_agent_incentive_file_id', $resolvedFileId); $builder->where('partner_agent_incentive_file_id', $resolvedFileId);
$builder->orderBy('vehicle_type', 'ASC')->orderBy('insurer', 'ASC'); $builder->orderBy('vehicle_type', 'ASC')->orderBy('insurer', 'ASC');
// Apply filters for every role on the same resolved file.
if ($insurer !== '') {
$builder->where('insurer', $insurer);
}
if ($rto !== '') {
$builder->where('rto', $rto);
}
if ($segment !== '') {
$builder->where('segment', $segment);
}
if ($vehicle_type !== '') {
$builder->where('vehicle_type', $vehicle_type);
}
if ($search !== '') {
$builder->groupStart()
->like('insurer', $search)
->orLike('vehicle_type', $search)
->orLike('segment', $search)
->orLike('rto', $search)
->orLike('remarks', $search)
->groupEnd();
}
if (in_array($role, ['Manager', 'Accounts'], true)) { if (in_array($role, ['Manager', 'Accounts'], true)) {
// Optional filters for Manager / Accounts
if (!empty($insurer)) $builder->where('insurer', $insurer);
if (!empty($rto)) $builder->where('rto', $rto);
if (!empty($segment)) $builder->where('segment', $segment);
if (!empty($vehicle_type)) $builder->where('vehicle_type', $vehicle_type);
$builder->select('id, insurer, vehicle_type, segment, rto, comp, tp, od, fuel, $builder->select('id, insurer, vehicle_type, segment, rto, comp, tp, od, fuel,
broker_name, remarks, broker_comp, broker_tp, broker_od, broker_name, remarks, broker_comp, broker_tp, broker_od,
created_by, created_at, updated_by, updated_at'); created_by, created_at, updated_by, updated_at');
@ -665,10 +682,10 @@ class AgentIncentiveController extends ResourceController
'data' => [ 'data' => [
'id' => $resolvedFileId, 'id' => $resolvedFileId,
'grid' => $gridResults, 'grid' => $gridResults,
'rtos' => $this->getUniqueColumnValues('rto'), 'rtos' => $this->getUniqueColumnValues('rto', $resolvedFileId),
'segments' => $this->getUniqueColumnValues('segment'), 'segments' => $this->getUniqueColumnValues('segment', $resolvedFileId),
'vehicle_types' => $this->getUniqueColumnValues('vehicle_type'), 'vehicle_types' => $this->getUniqueColumnValues('vehicle_type', $resolvedFileId),
'insurers' => $this->getUniqueColumnValues('insurer'), 'insurers' => $this->getUniqueColumnValues('insurer', $resolvedFileId),
] ]
], 200); ], 200);
@ -684,14 +701,19 @@ class AgentIncentiveController extends ResourceController
/** /**
* Helper function to fetch unique non-empty values for a column * Helper function to fetch unique non-empty values for a column
*/ */
private function getUniqueColumnValues($column) private function getUniqueColumnValues($column, ?int $fileId = null)
{ {
$results = $this->PayoutGridModel->select($column) $builder = $this->PayoutGridModel->select($column)
->distinct() ->distinct()
->where("$column IS NOT NULL") ->where("$column IS NOT NULL")
->where("$column !=", '') ->where("$column !=", '')
->orderBy($column, 'ASC') ->orderBy($column, 'ASC');
->findAll();
if (!empty($fileId)) {
$builder->where('partner_agent_incentive_file_id', (int) $fileId);
}
$results = $builder->findAll();
return array_column($results, $column); return array_column($results, $column);
} }

View File

@ -162,7 +162,6 @@ class PartnerPayoutGridRetention
/** /**
* Agent: only if original comp/tp/od is a positive number partner_RR value. * Agent: only if original comp/tp/od is a positive number partner_RR value.
* Original null / empty / '-' / zero / negative / unparseable '-'. * Original null / empty / '-' / zero / negative / unparseable '-'.
* Result 0 '-'.
*/ */
public static function agentPayoutColumnFromPartnerRr($raw, float $partnerRr): string public static function agentPayoutColumnFromPartnerRr($raw, float $partnerRr): string
{ {
@ -175,10 +174,6 @@ class PartnerPayoutGridRetention
} }
$result = $partnerRr - $base; $result = $partnerRr - $base;
if ($result < 0 || abs($result) < 0.00001) {
return '-';
}
return self::formatGridNumericDisplay($result); return self::formatGridNumericDisplay($result);
} }
@ -270,11 +265,18 @@ class PartnerPayoutGridRetention
$row['oa'] = $oa; $row['oa'] = $oa;
$row['ob'] = $ob; $row['ob'] = $ob;
$row['oc'] = $oc; $row['oc'] = $oc;
// Explicit raw aliases for UI/API consumers.
$row['raw_comp'] = $oa;
$row['raw_tp'] = $ob;
$row['raw_od'] = $oc;
$pm = self::resolvePartnerMetaForGridRow($row, $metaMap, $master); $pm = self::resolvePartnerMetaForGridRow($row, $metaMap, $master);
if ($pm === null) { if ($pm === null) {
$row['partner_VT'] = '-'; $row['partner_VT'] = '-';
$row['partner_RR'] = '-'; $row['partner_RR'] = '-';
$row['partner_comp'] = '-';
$row['partner_tp'] = '-';
$row['partner_od'] = '-';
if (array_key_exists('comp', $row)) { if (array_key_exists('comp', $row)) {
$row['comp'] = '-'; $row['comp'] = '-';
} }
@ -290,16 +292,30 @@ class PartnerPayoutGridRetention
$row['partner_VT'] = $pm['partner_VT']; $row['partner_VT'] = $pm['partner_VT'];
$row['partner_RR'] = $pm['partner_RR']; $row['partner_RR'] = $pm['partner_RR'];
$rr = (float) $pm['partner_RR']; $rr = (float) $pm['partner_RR'];
$partnerComp = array_key_exists('comp', $row)
? self::agentPayoutColumnFromPartnerRr($oa, $rr)
: '-';
$partnerTp = array_key_exists('tp', $row)
? self::agentPayoutColumnFromPartnerRr($ob, $rr)
: '-';
$partnerOd = array_key_exists('od', $row)
? self::agentPayoutColumnFromPartnerRr($oc, $rr)
: '-';
$row['partner_comp'] = $partnerComp;
$row['partner_tp'] = $partnerTp;
$row['partner_od'] = $partnerOd;
if (array_key_exists('comp', $row)) { if (array_key_exists('comp', $row)) {
$row['comp'] = self::agentPayoutColumnFromPartnerRr($oa, $rr); $row['comp'] = $partnerComp;
} }
if (array_key_exists('tp', $row)) { if (array_key_exists('tp', $row)) {
$row['tp'] = self::agentPayoutColumnFromPartnerRr($ob, $rr); $row['tp'] = $partnerTp;
} }
if (array_key_exists('od', $row)) { if (array_key_exists('od', $row)) {
$row['od'] = self::agentPayoutColumnFromPartnerRr($oc, $rr); $row['od'] = $partnerOd;
} }
} }
unset($row); unset($row);