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
$insurer = $request->getGet('insurer');
$rto = $request->getGet('rto');
$segment = $request->getGet('segment');
$vehicle_type = $request->getGet('vehicle_type');
$insurer = trim((string) ($request->getGet('insurer') ?? ''));
$rto = trim((string) ($request->getGet('rto') ?? ''));
$segment = trim((string) ($request->getGet('segment') ?? ''));
$vehicle_type = trim((string) ($request->getGet('vehicle_type') ?? ''));
$search = trim((string) ($request->getGet('search') ?? ''));
// ── 3. Resolve file_id based on role ─────────────────────────────────
$db = \Config\Database::connect();
@ -603,14 +604,30 @@ class AgentIncentiveController extends ResourceController
$builder->where('partner_agent_incentive_file_id', $resolvedFileId);
$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)) {
// 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,
broker_name, remarks, broker_comp, broker_tp, broker_od,
created_by, created_at, updated_by, updated_at');
@ -665,10 +682,10 @@ class AgentIncentiveController extends ResourceController
'data' => [
'id' => $resolvedFileId,
'grid' => $gridResults,
'rtos' => $this->getUniqueColumnValues('rto'),
'segments' => $this->getUniqueColumnValues('segment'),
'vehicle_types' => $this->getUniqueColumnValues('vehicle_type'),
'insurers' => $this->getUniqueColumnValues('insurer'),
'rtos' => $this->getUniqueColumnValues('rto', $resolvedFileId),
'segments' => $this->getUniqueColumnValues('segment', $resolvedFileId),
'vehicle_types' => $this->getUniqueColumnValues('vehicle_type', $resolvedFileId),
'insurers' => $this->getUniqueColumnValues('insurer', $resolvedFileId),
]
], 200);
@ -684,14 +701,19 @@ class AgentIncentiveController extends ResourceController
/**
* 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()
->where("$column IS NOT NULL")
->where("$column !=", '')
->orderBy($column, 'ASC')
->findAll();
->orderBy($column, 'ASC');
if (!empty($fileId)) {
$builder->where('partner_agent_incentive_file_id', (int) $fileId);
}
$results = $builder->findAll();
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.
* Original null / empty / '-' / zero / negative / unparseable '-'.
* Result 0 '-'.
*/
public static function agentPayoutColumnFromPartnerRr($raw, float $partnerRr): string
{
@ -175,10 +174,6 @@ class PartnerPayoutGridRetention
}
$result = $partnerRr - $base;
if ($result < 0 || abs($result) < 0.00001) {
return '-';
}
return self::formatGridNumericDisplay($result);
}
@ -270,11 +265,18 @@ class PartnerPayoutGridRetention
$row['oa'] = $oa;
$row['ob'] = $ob;
$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);
if ($pm === null) {
$row['partner_VT'] = '-';
$row['partner_RR'] = '-';
$row['partner_comp'] = '-';
$row['partner_tp'] = '-';
$row['partner_od'] = '-';
if (array_key_exists('comp', $row)) {
$row['comp'] = '-';
}
@ -290,16 +292,30 @@ class PartnerPayoutGridRetention
$row['partner_VT'] = $pm['partner_VT'];
$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)) {
$row['comp'] = self::agentPayoutColumnFromPartnerRr($oa, $rr);
$row['comp'] = $partnerComp;
}
if (array_key_exists('tp', $row)) {
$row['tp'] = self::agentPayoutColumnFromPartnerRr($ob, $rr);
$row['tp'] = $partnerTp;
}
if (array_key_exists('od', $row)) {
$row['od'] = self::agentPayoutColumnFromPartnerRr($oc, $rr);
$row['od'] = $partnerOd;
}
}
unset($row);