GWM: payout report api

This commit is contained in:
Gowtham M 2026-04-03 17:53:54 +05:30
parent 1c6a7539c8
commit d2ecb2459e
2 changed files with 91 additions and 0 deletions

View File

@ -138,6 +138,7 @@ $routes->group('api', ['filter' => ["jwtAuth:1,2,3,4,agent","appSignature"] ], f
$routes->get('policy/downloadCommissionUploadSampleExcel', 'PolicyController::downloadCommissionUploadSampleExcel');
$routes->post('policy/uploadCommissionExcel', 'PolicyController::uploadCommissionExcel');
$routes->post('policy/payoutInilneEditUpdate', 'PolicyController::payoutInilneEditUpdate');
$routes->get('policy/commissionPayoutReport', 'PolicyController::commissionPayoutReport');
//claims
$routes->get('claim/ClaimList', 'ClaimController::ClaimList');

View File

@ -1641,6 +1641,96 @@ class PolicyController extends ResourceController
}
}
/**
* GET: commission / payout rows with filters. Invoice "raised" = active row in partner_invoice_items for policy_id.
*
* Query: from_date, to_date (issued_date), agent_id (partner_policy.agent_id), payout_raised=yes|no
* At least one filter required among: from_date, to_date, agent_id, payout_raised.
*
* List columns also include: reg_no, weight, fuel_type, vehicle_type, utr_no (from partner_invoice_utr via invoice).
*/
public function commissionPayoutReport()
{
try {
$fromDate = $this->request->getGet('from_date');
$toDate = $this->request->getGet('to_date');
$agentIdRaw = $this->request->getGet('agent_id');
$payoutRaised = $this->request->getGet('payout_raised');
$fromDate = ($fromDate !== null && $fromDate !== '') ? trim((string) $fromDate) : null;
$toDate = ($toDate !== null && $toDate !== '') ? trim((string) $toDate) : null;
$agentId = null;
if ($agentIdRaw !== null && $agentIdRaw !== '') {
$agentId = (int) $agentIdRaw;
}
if ($payoutRaised !== null && $payoutRaised !== '') {
$payoutRaised = strtolower(trim((string) $payoutRaised));
if (! in_array($payoutRaised, ['yes', 'no'], true)) {
return $this->respond([
'status' => 'failed',
'code' => 400,
'data' => 'payout_raised must be yes or no',
], 400);
}
} else {
$payoutRaised = null;
}
$hasDateFilter = $fromDate !== null || $toDate !== null;
if (! $hasDateFilter && $agentId === null && $payoutRaised === null) {
return $this->respond([
'status' => 'failed',
'code' => 400,
'data' => 'Provide at least one filter: from_date, to_date, agent_id, or payout_raised',
], 400);
}
$db = \Config\Database::connect();
$builder = $db->table('partner_policy pp');
$builder->select('pa.agent_code, pp.policy_number AS policy_no, pp.premium_amount AS premium, pp.commission_amount, pe.reg_no, pp.weight, pp.fuel_type, pp.vehicle_type');
$builder->select('COALESCE((SELECT GROUP_CONCAT(piu.utr_no ORDER BY piu.id SEPARATOR ", ") FROM partner_invoice_items pii_utr INNER JOIN partner_invoice pi_u ON pi_u.id = pii_utr.invoice_id AND pi_u.is_active = 1 INNER JOIN partner_invoice_utr piu ON piu.invoice_id = pii_utr.invoice_id AND piu.is_active = 1 WHERE pii_utr.policy_id = pp.id AND pii_utr.is_active = 1), "") AS utr_no', false);
$builder->select("(CASE WHEN EXISTS (SELECT 1 FROM partner_invoice_items pii INNER JOIN partner_invoice pi ON pi.id = pii.invoice_id AND pi.is_active = 1 WHERE pii.policy_id = pp.id AND pii.is_active = 1) THEN 'yes' ELSE 'no' END) AS received_or_not", false);
$builder->join('partner_agent pa', 'pa.id = pp.agent_id', 'left');
$builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left');
$builder->where('pp.is_active', 1);
if ($fromDate !== null) {
$builder->where('pp.issued_date >=', date('Y-m-d', strtotime($fromDate)));
}
if ($toDate !== null) {
$builder->where('pp.issued_date <=', date('Y-m-d', strtotime($toDate)));
}
if ($agentId !== null) {
$builder->where('pp.agent_id', $agentId);
}
if ($payoutRaised === 'yes') {
$builder->where('EXISTS (SELECT 1 FROM partner_invoice_items pii2 INNER JOIN partner_invoice pi2 ON pi2.id = pii2.invoice_id AND pi2.is_active = 1 WHERE pii2.policy_id = pp.id AND pii2.is_active = 1)', null, false);
} elseif ($payoutRaised === 'no') {
$builder->where('NOT EXISTS (SELECT 1 FROM partner_invoice_items pii2 INNER JOIN partner_invoice pi2 ON pi2.id = pii2.invoice_id AND pi2.is_active = 1 WHERE pii2.policy_id = pp.id AND pii2.is_active = 1)', null, false);
}
$builder->orderBy('pa.agent_code', 'ASC');
$builder->orderBy('pp.policy_number', 'ASC');
$rows = $builder->get()->getResultArray();
return $this->respond([
'status' => 'success',
'code' => 200,
'data' => $rows,
'count' => count($rows),
], 200);
} catch (\Throwable $e) {
return $this->respond([
'status' => 'failed',
'code' => 500,
'message' => $e->getMessage(),
], 500);
}
}
/**
* POST multipart field: commission_excel (xlsx). Updates partner_policy.commission_amount by policy number.
*/