From e6151a8a82bc2b3196a89097da32a6861b0bad57 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Thu, 18 Dec 2025 14:16:42 +0530 Subject: [PATCH] commission list --- app/Controllers/InvoiceController.php | 156 ++++++++++++++++++++------ 1 file changed, 121 insertions(+), 35 deletions(-) diff --git a/app/Controllers/InvoiceController.php b/app/Controllers/InvoiceController.php index a592dd2..f77b30b 100644 --- a/app/Controllers/InvoiceController.php +++ b/app/Controllers/InvoiceController.php @@ -200,56 +200,75 @@ class InvoiceController extends ResourceController $input = $this->request->getJSON(true); - if (empty($input['broker_id']) || empty($input['issued_date'])) { - return $this->respond([ 'status' => 'failed', 'code' => 400, 'message'=> 'issued_date are required' ], 400); + if (empty($input['broker_id'])) { + return $this->respond([ + 'status' => 'failed', + 'code' => 400, + 'message'=> 'broker_id is required' + ], 400); } $invoice_id = isset($input['invoice_id']) ? $input['invoice_id'] : ''; - - $data_previous = $this->PolicyModel - ->select('partner_policy.policy_number as policy_no,partner_policy.id as policy_id , partner_policy.issued_date, partner_policy.commission_amount, pe.name as customer_name , pq.premium_amount') + // Build the main query + $query = $this->PolicyModel + ->select('partner_policy.policy_number as policy_no, partner_policy.id as policy_id, partner_policy.issued_date, partner_policy.commission_amount, partner_policy.insured_name as customer_name, pe.agent_id, partner_policy.premium_amount, pi.id as invoice_id, pi.invoice_no') ->join( 'partner_enquiry pe', 'pe.id = partner_policy.enquiry_id AND pe.broker_id = ' . (int)$input['broker_id'], 'left' ) - ->join('partner_quotation pq','pq.id = partner_policy.quotation_id ', 'left') - // ->where('partner_policy.pos_id', $input['pos_id']) - ->where('partner_policy.issued_date <=', date('Y-m-d', strtotime($input['issued_date']))) - ->where('partner_policy.is_active', 1) - ->where('partner_policy.is_data_accuracy_checked', 1) - ->findAll(); + ->join('partner_quotation pq', 'pq.id = partner_policy.quotation_id', 'left') + ->join('partner_invoice_items pii', 'pii.policy_id = partner_policy.id', 'left') + ->join('partner_invoice pi', 'pi.id = pii.invoice_id AND pi.is_active = 1', 'left') + ->where('partner_policy.is_active', 1) + ->where('partner_policy.commission_amount > 0') + ->where('partner_policy.is_data_accuracy_checked', 1); - - $query = $this->PolicyModel - ->select('partner_policy.policy_number as policy_no, partner_policy.id as policy_id, partner_policy.issued_date, partner_policy.commission_amount, pe.name as customer_name, pq.premium_amount, pi.id as invoice_id, pi.invoice_no') - ->join( - 'partner_enquiry pe', - 'pe.id = partner_policy.enquiry_id AND pe.broker_id = ' . (int)$input['broker_id'], - 'left' - ) - ->join('partner_quotation pq','pq.id = partner_policy.quotation_id ', 'left') - ->join('partner_invoice_items pii', 'pii.policy_id = partner_policy.id', 'left' ) - ->join('partner_invoice pi', 'pi.id = pii.invoice_id AND pi.is_active = 1', 'left') - // ->where('partner_policy.pos_id', $input['pos_id']) - ->where('partner_policy.issued_date <=', date('Y-m-d', strtotime($input['issued_date']))) - ->where('partner_policy.is_active', 1) - ->where('partner_policy.commission_amount > 0') - ->where('partner_policy.is_data_accuracy_checked', 1); - if (empty($invoice_id)) { - $query->where('pii.policy_id IS NULL'); - } else { - $query->where('pi.id', $invoice_id); - } + // Apply agent_id filter (supports multiple agents) + if (!empty($input['agent_id'])) { + if (is_array($input['agent_id'])) { + $query->whereIn('pe.agent_id', $input['agent_id']); + } else { + $query->where('pe.agent_id', $input['agent_id']); + } + } - $data = $query->findAll(); + // Apply date range filters + if (!empty($input['from_date'])) { + $query->where('partner_policy.issued_date >=', date('Y-m-d', strtotime($input['from_date']))); + } + + if (!empty($input['to_date'])) { + $query->where('partner_policy.issued_date <=', date('Y-m-d', strtotime($input['to_date']))); + } + + // Apply POS filter if provided + if (!empty($input['pos_id'])) { + $query->where('partner_policy.pos_id', $input['pos_id']); + } + + // Filter based on invoice_id or policies not yet invoiced + if (empty($invoice_id)) { + $query->where('pii.policy_id IS NULL'); + } else { + $query->where('pi.id', $invoice_id); + } + + $data = $query->findAll(); + + // Calculate total commission + $total_commission = 0; + foreach ($data as $policy) { + $total_commission += $policy['commission_amount']; + } return $this->respond([ 'status' => 'success', 'code' => 200, - 'previous' => $data_previous, - 'data' => $data + 'data' => $data, + 'total_commission' => $total_commission, + 'total_policies' => count($data) ], 200); } catch (\Exception $e) { @@ -261,6 +280,73 @@ class InvoiceController extends ResourceController } } + // public function getCommissionRateList() + // { + // try { + + // $input = $this->request->getJSON(true); + + // if (empty($input['broker_id']) || empty($input['issued_date'])) { + // return $this->respond([ 'status' => 'failed', 'code' => 400, 'message'=> 'issued_date are required' ], 400); + // } + + // $invoice_id = isset($input['invoice_id']) ? $input['invoice_id'] : ''; + + + // $data_previous = $this->PolicyModel + // ->select('partner_policy.policy_number as policy_no,partner_policy.id as policy_id , partner_policy.issued_date, partner_policy.commission_amount, pe.name as customer_name , pq.premium_amount') + // ->join( + // 'partner_enquiry pe', + // 'pe.id = partner_policy.enquiry_id AND pe.broker_id = ' . (int)$input['broker_id'], + // 'left' + // ) + // ->join('partner_quotation pq','pq.id = partner_policy.quotation_id ', 'left') + // // ->where('partner_policy.pos_id', $input['pos_id']) + // ->where('partner_policy.issued_date <=', date('Y-m-d', strtotime($input['issued_date']))) + // ->where('partner_policy.is_active', 1) + // ->where('partner_policy.is_data_accuracy_checked', 1) + // ->findAll(); + + + // $query = $this->PolicyModel + // ->select('partner_policy.policy_number as policy_no, partner_policy.id as policy_id, partner_policy.issued_date, partner_policy.commission_amount, pe.name as customer_name, pq.premium_amount, pi.id as invoice_id, pi.invoice_no') + // ->join( + // 'partner_enquiry pe', + // 'pe.id = partner_policy.enquiry_id AND pe.broker_id = ' . (int)$input['broker_id'], + // 'left' + // ) + // ->join('partner_quotation pq','pq.id = partner_policy.quotation_id ', 'left') + // ->join('partner_invoice_items pii', 'pii.policy_id = partner_policy.id', 'left' ) + // ->join('partner_invoice pi', 'pi.id = pii.invoice_id AND pi.is_active = 1', 'left') + // // ->where('partner_policy.pos_id', $input['pos_id']) + // ->where('partner_policy.issued_date <=', date('Y-m-d', strtotime($input['issued_date']))) + // ->where('partner_policy.is_active', 1) + // ->where('partner_policy.commission_amount > 0') + // ->where('partner_policy.is_data_accuracy_checked', 1); + // if (empty($invoice_id)) { + // $query->where('pii.policy_id IS NULL'); + // } else { + // $query->where('pi.id', $invoice_id); + // } + + // $data = $query->findAll(); + + // return $this->respond([ + // 'status' => 'success', + // 'code' => 200, + // 'previous' => $data_previous, + // 'data' => $data + // ], 200); + + // } catch (\Exception $e) { + // return $this->respond([ + // 'status' => 'failed', + // 'code' => 500, + // 'message'=> $e->getMessage() + // ], 500); + // } + // } +