Merge remote-tracking branch 'origin/main'

This commit is contained in:
velz 2025-12-17 11:48:21 +05:30
commit 61115e0a5d
10 changed files with 423 additions and 91 deletions

View File

@ -116,6 +116,7 @@ $routes->group('api', ['filter' => 'appSignature'], function ($routes) {
$routes->get('policy/downloadPolicyFile', 'PolicyController::downloadPolicyFile'); $routes->get('policy/downloadPolicyFile', 'PolicyController::downloadPolicyFile');
$routes->post('policy/uploadPolicyFile', 'PolicyController::uploadPolicyFile'); $routes->post('policy/uploadPolicyFile', 'PolicyController::uploadPolicyFile');
$routes->get("policy/searchThePolicies", "PolicyController::searchThePolicies"); $routes->get("policy/searchThePolicies", "PolicyController::searchThePolicies");
$routes->post('policy/calculateCommissionRequest', 'PolicyController::calculateCommissionRequest');
//claims //claims

View File

@ -678,6 +678,7 @@ class DashboardController extends ResourceController
$builder = $this->db->table('partner_policy pp'); $builder = $this->db->table('partner_policy pp');
$builder->select(" $builder->select("
pb.name AS broker_name, pb.name AS broker_name,
pb.short_name AS broker_short_name,
pb.id AS broker_id, pb.id AS broker_id,
COUNT( COUNT(
CASE CASE

View File

@ -3,9 +3,12 @@
namespace App\Controllers; namespace App\Controllers;
use CodeIgniter\RESTful\ResourceController; use CodeIgniter\RESTful\ResourceController;
use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate; // <--- THIS MUST BE HERE
use PhpOffice\PhpSpreadsheet\Style\Alignment;
class ExcelExportController extends ResourceController class ExcelExportController extends ResourceController
{ {
@ -48,13 +51,21 @@ class ExcelExportController extends ResourceController
$sheet = $spreadsheet->getActiveSheet(); $sheet = $spreadsheet->getActiveSheet();
// 1. Title (Merged across the header columns) // 1. Title (Merged across the header columns)
$lastCol = $sheet->getHighestColumn(); // $lastCol = $sheet->getHighestColumn();
$sheet->mergeCells("A1:{$lastCol}1"); $columnCount = count($header);
$lastCol = Coordinate::stringFromColumnIndex($columnCount); // <--- MUST be ONLY 'Coordinate::'
$sheet->mergeCells("A1:{$lastCol}1"); // Merges A1:E1
// $sheet->mergeCells("A1:{$lastCol}1");
$sheet->setCellValue('A1', $title); $sheet->setCellValue('A1', $title);
$sheet->getStyle('A1')->getFont()->setBold(true);
$sheet->getStyle('A1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); $sheet->getStyle('A1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
// 2. Headers (Row 2) // 2. Headers (Row 2)
// $sheet->fromArray($header, NULL, 'A2')->getFont()->setBold(true);
$headerRange = 'A2:' . $lastCol . '2';
$sheet->fromArray($header, NULL, 'A2'); $sheet->fromArray($header, NULL, 'A2');
$sheet->getStyle($headerRange)->getFont()->setBold(true);
// 3. Data (Starting from Row 3) // 3. Data (Starting from Row 3)
// Note: The total row MUST be included in the $data array passed to this function. // Note: The total row MUST be included in the $data array passed to this function.
@ -108,18 +119,26 @@ class ExcelExportController extends ResourceController
$data = $this->getBrokerPoliciesData($managerId, $brokerId, $month); $data = $this->getBrokerPoliciesData($managerId, $brokerId, $month);
$header = ['Broker Name', 'Issue Date', 'Policy Number', 'Premium Amount']; $header = [
'Received Date', 'Assigned To',
'Partner Name' , 'Partner Code',
'Insurer Name' ,'Insurer Short Name',
'Insured Name', 'Vehicle Number',
'Payment Mode', 'Plan Type',
'Broker Name', 'Issue Date', 'Policy Number', 'Premium Amount'];
if (empty($data)) { if (empty($data)) {
throw new \RuntimeException('No policies found...', 404); throw new \RuntimeException('No policies found...', 404);
} }
// Calculate and append total // Calculate and append total
$grandTotal = array_sum(array_column($data, 3)); $grandTotal = array_sum(array_column($data, 13));
$data[] = ['','','Total:', $grandTotal]; // Column C (index 2) is 'Total:', Column D (index 3) is the value $data[] = ['','','','','','','','','','','','','Total:', $grandTotal]; // Column C (index 2) is 'Total:', Column D (index 3) is the value
$monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month')); $monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month'));
$brokerName = $data[0][0] ?? 'Broker'; $brokerName = $data[0][10] ?? 'Broker';
$cleanbrokerName = str_replace(' ', '_', strtolower($brokerName)); $cleanbrokerName = str_replace(' ', '_', strtolower($brokerName));
$fileName = $cleanbrokerName . '_Policies_Details_' . $monthName . '.xlsx'; $fileName = $cleanbrokerName . '_Policies_Details_' . $monthName . '.xlsx';
@ -129,8 +148,8 @@ class ExcelExportController extends ResourceController
$data, $data,
"Broker Policies Details for {$monthName}", "Broker Policies Details for {$monthName}",
$fileName, $fileName,
'C', // Total Label Column (aligned right) 'M', // Total Label Column (aligned right)
'D' // Total Value Column (bold) 'N' // Total Value Column (bold)
); );
return; return;
@ -198,17 +217,24 @@ class ExcelExportController extends ResourceController
} }
$data = $this->getProductPoliciesData($managerId, $vehicleType, $month); $data = $this->getProductPoliciesData($managerId, $vehicleType, $month);
$header = ['Vehicle Type', 'Issue Date', 'Policy Number', 'Premium Amount']; // $header = ['Vehicle Type', 'Issue Date', 'Policy Number', 'Premium Amount'];
$header = [
'Received Date', 'Assigned To',
'Partner Name' , 'Partner Code',
'Insurer Name' ,'Insurer Short Name',
'Insured Name', 'Vehicle Number',
'Payment Mode', 'Plan Type',
'Vehicle Type', 'Issue Date', 'Policy Number', 'Premium Amount'];
if (empty($data)) { if (empty($data)) {
throw new \RuntimeException('No policies found for this vehicle type...', 404); throw new \RuntimeException('No policies found for this vehicle type...', 404);
} }
$grandTotal = array_sum(array_column($data, 3)); $grandTotal = array_sum(array_column($data, 13));
$data[] = ['','','Total:',$grandTotal]; // Column C is 'Total:', Column D is the value $data[] = ['','','','','','','','','','','','','Total:',$grandTotal]; // Column C is 'Total:', Column D is the value
$monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month')); $monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month'));
$vehicleType = $data[0][0] ?? 'Vehicle'; $vehicleType = $data[0][10] ?? 'Vehicle';
$cleanVehicleType = str_replace(' ', '_', strtolower($vehicleType)); $cleanVehicleType = str_replace(' ', '_', strtolower($vehicleType));
$fileName = $cleanVehicleType . '_Policies_Details_' . $monthName . '.xlsx'; $fileName = $cleanVehicleType . '_Policies_Details_' . $monthName . '.xlsx';
@ -218,8 +244,8 @@ class ExcelExportController extends ResourceController
$data, $data,
"Vehicle Type Policies Details for {$monthName}", "Vehicle Type Policies Details for {$monthName}",
$fileName, $fileName,
'C', // Total Label Column 'M', // Total Label Column
'D' // Total Value Column 'N' // Total Value Column
); );
return; return;
@ -293,18 +319,23 @@ class ExcelExportController extends ResourceController
$data = $this->getInsurerPoliciesData($managerId, $insurerId, $month); $data = $this->getInsurerPoliciesData($managerId, $insurerId, $month);
// Define column headers // Define column headers
$header = ['Insurer Name', 'Insurer Short Name','Insured Name', 'Policy Issued Date','Policy Number', 'Premium Amount']; $header = [
'Received Date', 'Assigned To',
'Partner Name' , 'Partner Code',
'Vehicle Number',
'Payment Mode', 'Plan Type',
'Insurer Name', 'Insurer Short Name','Insured Name', 'Policy Issued Date','Policy Number', 'Premium Amount'];
// --- 1. MODIFIED LOGIC: Throw RuntimeException if no data --- // --- 1. MODIFIED LOGIC: Throw RuntimeException if no data ---
if (empty($data)) { if (empty($data)) {
throw new \RuntimeException('No policies found for this insurer for the specified month.', 404); throw new \RuntimeException('No policies found for this insurer for the specified month.', 404);
} }
$grandTotal = array_sum(array_column($data, 5)); $grandTotal = array_sum(array_column($data, 12));
$data[] = ['','','','','Total:',$grandTotal]; $data[] = ['','','','','','','','','','','','Total:',$grandTotal];
$monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month')); $monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month'));
$InsurerName = $data[0][0] ?? 'Insurer' ; $InsurerName = $data[0][7] ?? 'Insurer' ;
$cleanInsurerName = str_replace(' ', '_', strtolower($InsurerName)); $cleanInsurerName = str_replace(' ', '_', strtolower($InsurerName));
$fileName = $cleanInsurerName . '_Policies_Details_' . $monthName . '.xlsx'; $fileName = $cleanInsurerName . '_Policies_Details_' . $monthName . '.xlsx';
@ -314,8 +345,8 @@ class ExcelExportController extends ResourceController
$data, $data,
"Insurer Policies Details for {$monthName}", "Insurer Policies Details for {$monthName}",
$fileName, $fileName,
'E', // Total Label Column 'L', // Total Label Column
'F' // Total Value Column 'M' // Total Value Column
); );
return; // STOP CI4 rendering anything else return; // STOP CI4 rendering anything else
@ -376,28 +407,33 @@ class ExcelExportController extends ResourceController
} }
$data = $this->getLowPremiumAgentData($managerId); $data = $this->getLowPremiumAgentData($managerId);
$header = ['Partner Name', 'Partner Code','Partner Status' ,'Policy Number','Issued Date', 'Premium Amount']; $header = [
'Received Date', 'Assigned To',
'Insurer Name' ,'Insurer Short Name',
'Insured Name', 'Vehicle Number',
'Payment Mode', 'Plan Type',
'Partner Name', 'Partner Code','Partner Status' ,'Policy Number','Issued Date', 'Premium Amount'];
if (empty($data)) { if (empty($data)) {
throw new \RuntimeException('No low premium agents found...', 404); throw new \RuntimeException('No low premium agents found...', 404);
} }
$grandTotal = array_sum(array_column($data, 5)); $grandTotal = array_sum(array_column($data, 13));
$data[] = ['','','','','Total:', $grandTotal]; // Column E is 'Total:', Column F is the value $data[] = ['','','','','','','','','','','','','Total:', $grandTotal]; // Column E is 'Total:', Column F is the value
// Note: $month variable is undefined, assuming you want current month for filename // Note: $month variable is undefined, assuming you want current month for filename
$monthName = date('Ym'); $monthName = date('M_Y');
$PartnerName = $data[0][0] ?? 'Partner'; $PartnerName = $data[0][8] ?? 'Partner';
$fileName = $PartnerName . '_Low_Premium_Details_' . $monthName . '.xlsx'; $fileName = 'Partners_Low_Premium_Policy_Details.xlsx';
// --- CALL CENTRALIZED FUNCTION --- // --- CALL CENTRALIZED FUNCTION ---
$this->streamExcelFile( $this->streamExcelFile(
$header, $header,
$data, $data,
$PartnerName ." Low Premium Agents Policy Details", // Adjusted Title "Partners Low Premium Policy Details",
$fileName, $fileName,
'E', // Total Label Column 'M', // Total Label Column
'F' // Total Value Column 'N' // Total Value Column
); );
return; return;
@ -447,31 +483,37 @@ class ExcelExportController extends ResourceController
try{ try{
$managerId = $this->request->getGet('manager_id'); $managerId = $this->request->getGet('manager_id');
$agentId = $this->request->getGet('agent_id'); $agentId = $this->request->getGet('agent_id');
$month = $this->request->getGet('month'); // $month = $this->request->getGet('month');
if (empty($managerId) || empty($agentId) || empty($month)) { if (empty($managerId) || empty($agentId)) {
$msg = "Missing: "; $msg = "Missing: ";
$msg .= empty($managerId) ? "manager_id " : ""; $msg .= empty($managerId) ? "manager_id " : "";
$msg .= empty($agentId) ? "agent_id " : ""; $msg .= empty($agentId) ? "agent_id " : "";
$msg .= empty($month) ? "month " : ""; // $msg .= empty($month) ? "month " : "";
$ref = ['debug_msg' => $msg]; $ref = ['debug_msg' => $msg];
return $this->response->setJSON(['status' => 'error','code' => 400,'data' => [],'message' => 'Missing required parameters','ref' => $ref])->setStatusCode(200); return $this->response->setJSON(['status' => 'error','code' => 400,'data' => [],'message' => 'Missing required parameters','ref' => $ref])->setStatusCode(200);
} }
// Renamed helper function for consistency: getAgentMonthlyPoliciesData // Renamed helper function for consistency: getAgentMonthlyPoliciesData
$data = $this->getAgentMonthlyPoliciesData($managerId, $agentId, $month); $data = $this->getAgentMonthlyPoliciesData($managerId, $agentId); // , $month);
$header = ['Partner Name','Partner Code' ,'Issue Date', 'Policy Number', 'Premium Amount']; $header = [
'Received Date', 'Assigned To',
'Insurer Name' ,'Insurer Short Name',
'Insured Name', 'Vehicle Number',
'Payment Mode', 'Plan Type',
'Partner Name','Partner Code' , 'Policy Number','Issue Date', 'Premium Amount'];
if (empty($data)) { if (empty($data)) {
throw new \RuntimeException('No policies found for this agent for the specified month.', 404); throw new \RuntimeException('No policies found for this agent for the specified month.', 404);
} }
$grandTotal = array_sum(array_column($data, 4)); $grandTotal = array_sum(array_column($data, 12));
$data[] = ['','','','Total:',$grandTotal]; // Column D is 'Total:', Column E is the value $data[] = ['','','','','','','','','','','','Total:',$grandTotal]; // Column D is 'Total:', Column E is the value
$monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month')); // $monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month'));
$PartnerName = $data[0][0] ?? 'Partner'; $monthName = date('M Y') ;
$PartnerName = $data[0][8] ?? 'Partner';
$cleanPartnerName = str_replace(' ', '_', strtolower($PartnerName)); $cleanPartnerName = str_replace(' ', '_', strtolower($PartnerName));
$fileName = $cleanPartnerName . '_Policies_Details_' . $monthName . '.xlsx'; $fileName = $cleanPartnerName . '_Policies_Details_' . $monthName . '.xlsx';
@ -481,8 +523,8 @@ class ExcelExportController extends ResourceController
$data, $data,
"Partner Policies Details for {$monthName}", "Partner Policies Details for {$monthName}",
$fileName, $fileName,
'D', // Total Label Column 'L', // Total Label Column
'E' // Total Value Column 'M' // Total Value Column
); );
return; return;
@ -628,18 +670,25 @@ class ExcelExportController extends ResourceController
} }
$data = $this->getStaffAndProductPoliciesExcel($managerId, $executiveId,$vehicleType, $month); $data = $this->getStaffAndProductPoliciesExcel($managerId, $executiveId,$vehicleType, $month);
$executiveName = $data[0][0] ?? 'Sales Executive'; $executiveName = $data[0][11] ?? 'Sales Executive';
$vehicleType = $data[0][1] ?? 'Vehicle Type'; $vehicleType = $data[0][12] ?? 'Vehicle Type';
// Define column headers // Define column headers
$header = ['Sales Executive Name', 'Vehicle Type', 'Policy Number','Issued Date', 'Premium Amount'];
$header = [
'Received Date', 'Assigned To',
'Partner Name' , 'Partner Code',
'Insurer Name' ,'Insurer Short Name',
'Insured Name', 'Vehicle Number',
'Payment Mode', 'Plan Type',
'Sales Executive Name', 'Vehicle Type', 'Policy Number','Issued Date', 'Premium Amount'];
// --- 1. MODIFIED LOGIC: Throw RuntimeException if no data --- // --- 1. MODIFIED LOGIC: Throw RuntimeException if no data ---
if (empty($data)) { if (empty($data)) {
throw new \RuntimeException('No policies found for the specified month.', 404); throw new \RuntimeException('No policies found for the specified month.', 404);
} }
$grandTotal = array_sum(array_column($data, 4)); $grandTotal = array_sum(array_column($data, 14));
$data[] = ['','','','Total:',$grandTotal]; // Column D is 'Total:', Column E is the value $data[] = ['','','','','','','','','','','','','','Total:',$grandTotal]; // Column D is 'Total:', Column E is the value
$monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month')); $monthName = ($month === 'current') ? date('M_Y') : date('M_Y', strtotime('-1 month'));
@ -652,10 +701,10 @@ class ExcelExportController extends ResourceController
$this->streamExcelFile( $this->streamExcelFile(
$header, $header,
$data, $data,
"Staff And Product Policies Details for {$monthName}", "Staff And Product Policies Details for {$monthName}",
$fileName, $fileName,
'D', // Total Label Column 'N', // Total Label Column
'E' // Total Value Column 'O' // Total Value Column
); );
return; // STOP CI4 rendering anything else return; // STOP CI4 rendering anything else
@ -716,9 +765,26 @@ class ExcelExportController extends ResourceController
try { try {
$builder = $this->db->table('partner_policy pp'); $builder = $this->db->table('partner_policy pp');
// Note: I removed 'broker_id' from SELECT as it's redundant in the Excel sheet details // Note: I removed 'broker_id' from SELECT as it's redundant in the Excel sheet details
$builder->select('pb.name AS broker_name, DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.policy_number, pp.premium_amount');
$builder->select('
DATE_FORMAT(pe.created_on, "%d-%m-%Y %h:%i %p") AS received_date,
S.name as assigned_to_name,
A.name as agent_name, A.agent_code,
I.name as insurer_name,I.short_name as insurer_short_name,
pe.name as insured_name,
pe.reg_no,
pm.value as payment_mode_value,
ipti.insurance_plan_type,
pb.name AS broker_name, DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.policy_number, pp.premium_amount');
$builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left'); $builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left');
$builder->join('partner_brokers pb', 'pb.id = pe.broker_id', 'left'); $builder->join('partner_brokers pb', 'pb.id = pe.broker_id', 'left');
$builder->join('partner_quotation Q', 'Q.enquiry_id = pe.id', 'left');
$builder->join('partner_payment_mode_master pm', 'pm.id = Q.payment_mode_id', 'left');
$builder->join('partner_agent A', 'A.id = pe.agent_id', 'left');
$builder->join('partner_insurance_plan_type_master ipti', 'ipti.id = Q.insurance_plan_type_id', 'left');
$builder->join('insurers I', 'I.id = Q.insurer_id', 'left');
$builder->join('partner_staff S', 'S.id = pe.assigned_to', 'left');
// --- Correction 2: Use Robust Date Range Filtering --- // --- Correction 2: Use Robust Date Range Filtering ---
if ($month === "current") { if ($month === "current") {
@ -769,7 +835,24 @@ class ExcelExportController extends ResourceController
try { try {
$builder = $this->db->table('partner_policy pp'); $builder = $this->db->table('partner_policy pp');
// Note: I removed 'broker_id' from SELECT as it's redundant in the Excel sheet details // Note: I removed 'broker_id' from SELECT as it's redundant in the Excel sheet details
$builder->select('pp.vehicle_type, DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.policy_number, pp.premium_amount'); $builder->select('
DATE_FORMAT(pe.created_on, "%d-%m-%Y %h:%i %p") AS received_date,
S.name as assigned_to_name,
A.name as agent_name, A.agent_code,
I.name as insurer_name,I.short_name as insurer_short_name,
pe.name as insured_name,
pe.reg_no,
pm.value as payment_mode_value,
ipti.insurance_plan_type,
pp.vehicle_type, DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.policy_number, pp.premium_amount');
$builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left');
$builder->join('partner_quotation Q', 'Q.enquiry_id = pe.id', 'left');
$builder->join('partner_payment_mode_master pm', 'pm.id = Q.payment_mode_id', 'left');
$builder->join('partner_agent A', 'A.id = pe.agent_id', 'left');
$builder->join('partner_insurance_plan_type_master ipti', 'ipti.id = Q.insurance_plan_type_id', 'left');
$builder->join('insurers I', 'I.id = Q.insurer_id', 'left');
$builder->join('partner_staff S', 'S.id = pe.assigned_to', 'left');
// --- Correction 2: Use Robust Date Range Filtering --- // --- Correction 2: Use Robust Date Range Filtering ---
@ -821,11 +904,23 @@ class ExcelExportController extends ResourceController
try { try {
$builder = $this->db->table('partner_policy pp'); $builder = $this->db->table('partner_policy pp');
// Note: I removed 'broker_id' from SELECT as it's redundant in the Excel sheet details // Note: I removed 'broker_id' from SELECT as it's redundant in the Excel sheet details
$builder->select('i.name AS insurer_name,i.short_name,pp.insured_name, DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.policy_number, pp.premium_amount'); $builder->select('
DATE_FORMAT(pe.created_on, "%d-%m-%Y %h:%i %p") AS received_date,
S.name as assigned_to_name,
A.name as agent_name, A.agent_code,
pe.reg_no,
pm.value as payment_mode_value,
ipti.insurance_plan_type,
i.name AS insurer_name,i.short_name,pp.insured_name, DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.policy_number, pp.premium_amount');
$builder->join('partner_quotation pq', 'pq.id = pp.quotation_id', 'left'); $builder->join('partner_quotation pq', 'pq.id = pp.quotation_id', 'left');
$builder->join('insurers i', 'i.id = pq.insurer_id', 'left'); $builder->join('insurers i', 'i.id = pq.insurer_id', 'left');
$builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left');
$builder->join('partner_payment_mode_master pm', 'pm.id = pq.payment_mode_id', 'left');
$builder->join('partner_agent A', 'A.id = pe.agent_id', 'left');
$builder->join('partner_insurance_plan_type_master ipti', 'ipti.id = pq.insurance_plan_type_id', 'left');
$builder->join('partner_staff S', 'S.id = pe.assigned_to', 'left');
// --- Correction 2: Use Robust Date Range Filtering --- // --- Correction 2: Use Robust Date Range Filtering ---
if ($month === "current") { if ($month === "current") {
@ -844,7 +939,7 @@ class ExcelExportController extends ResourceController
$builder->where('i.id', $insurerId); $builder->where('i.id', $insurerId);
$builder->where('i.is_active',1); $builder->where('i.is_active',1);
$builder->orderBy('pp.issued_date', 'DESC'); $builder->orderBy('pp.issued_date', 'DESC');
// print_r($builder->getCompiledSelect());die;
$results = $builder->get()->getResultArray(); $results = $builder->get()->getResultArray();
// Restructure data for PhpSpreadsheet (2D array of values) // Restructure data for PhpSpreadsheet (2D array of values)
@ -878,10 +973,29 @@ class ExcelExportController extends ResourceController
try { try {
$builder = $this->db->table('partner_policy pp'); $builder = $this->db->table('partner_policy pp');
$builder->select('pse.name as sales_executive_name, pp.vehicle_type AS vechile_type,pp.policy_number,DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.premium_amount'); $builder->select('
DATE_FORMAT(pe.created_on, "%d-%m-%Y %h:%i %p") AS received_date,
S.name as assigned_to_name,
pa.name as agent_name, pa.agent_code,
I.name as insurer_name,I.short_name as insurer_short_name,
pe.name as insured_name,
pe.reg_no,
pm.value as payment_mode_value,
ipti.insurance_plan_type,
pse.name as sales_executive_name, pp.vehicle_type AS vechile_type,pp.policy_number,DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.premium_amount');
$builder->join('partner_agent pa', 'pa.id = pp.agent_id', 'left'); $builder->join('partner_agent pa', 'pa.id = pp.agent_id', 'left');
$builder->join('partner_sales_executive pse', 'pse.id = pa.sales_executive_id', 'left'); $builder->join('partner_sales_executive pse', 'pse.id = pa.sales_executive_id', 'left');
$builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left');
$builder->join('partner_brokers pb', 'pb.id = pe.broker_id', 'left');
$builder->join('partner_quotation Q', 'Q.enquiry_id = pe.id', 'left');
$builder->join('partner_payment_mode_master pm', 'pm.id = Q.payment_mode_id', 'left');
$builder->join('partner_insurance_plan_type_master ipti', 'ipti.id = Q.insurance_plan_type_id', 'left');
$builder->join('insurers I', 'I.id = Q.insurer_id', 'left');
$builder->join('partner_staff S', 'S.id = pe.assigned_to', 'left');
// --- Correction 2: Use Robust Date Range Filtering --- // --- Correction 2: Use Robust Date Range Filtering ---
if ($month === "current") { if ($month === "current") {
// WHERE issued_date >= start_of_current_month AND issued_date < start_of_next_month // WHERE issued_date >= start_of_current_month AND issued_date < start_of_next_month
@ -926,7 +1040,7 @@ class ExcelExportController extends ResourceController
* @param string $month ('current' or 'previous') * @param string $month ('current' or 'previous')
* @return array * @return array
*/ */
private function getAgentMonthlyPoliciesData($managerId, $AgentId, $month): array private function getAgentMonthlyPoliciesData($managerId, $AgentId): array
{ {
// --- Correction 1: Initialize Database Connection --- // --- Correction 1: Initialize Database Connection ---
@ -935,26 +1049,44 @@ class ExcelExportController extends ResourceController
try { try {
$builder = $this->db->table('partner_policy pp'); $builder = $this->db->table('partner_policy pp');
// Note: I removed 'broker_id' from SELECT as it's redundant in the Excel sheet details // Note: I removed 'broker_id' from SELECT as it's redundant in the Excel sheet details
$builder->select('pa.name AS agent_name,pa.agent_code,pp.policy_number,DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.premium_amount'); $builder->select('
DATE_FORMAT(pe.created_on, "%d-%m-%Y %h:%i %p") AS received_date,
S.name as assigned_to_name,
I.name as insurer_name,I.short_name as insurer_short_name,
pe.name as insured_name,
pe.reg_no,
pm.value as payment_mode_value,
ipti.insurance_plan_type,
pa.name AS agent_name,pa.agent_code,pp.policy_number,DATE_FORMAT(pp.issued_date, "%d-%m-%Y") AS issued_date,pp.premium_amount');
$builder->join('partner_agent pa', 'pp.agent_id = pa.id', 'inner'); $builder->join('partner_agent pa', 'pp.agent_id = pa.id', 'inner');
$builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left'); $builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left');
$builder->join('partner_brokers pb', 'pb.id = pe.broker_id', 'left');
$builder->join('partner_quotation Q', 'Q.enquiry_id = pe.id', 'left');
$builder->join('partner_payment_mode_master pm', 'pm.id = Q.payment_mode_id', 'left');
$builder->join('partner_insurance_plan_type_master ipti', 'ipti.id = Q.insurance_plan_type_id', 'left');
$builder->join('insurers I', 'I.id = Q.insurer_id', 'left');
$builder->join('partner_staff S', 'S.id = pe.assigned_to', 'left');
$builder->where('pp.manager_id', $managerId); $builder->where('pp.manager_id', $managerId);
$builder->where('pa.id', $AgentId); $builder->where('pa.id', $AgentId);
$builder->where('pp.policy_number IS NOT NULL'); $builder->where('pp.policy_number IS NOT NULL');
// --- Correction 2: Use Robust Date Range Filtering --- // --- Correction 2: Use Robust Date Range Filtering ---
if ($month === "current") { // if ($month === "current") {
// WHERE issued_date >= start_of_current_month AND issued_date < start_of_next_month // // WHERE issued_date >= start_of_current_month AND issued_date < start_of_next_month
$builder->where("pp.issued_date >= DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01')", NULL, FALSE); $builder->where("pp.issued_date >= DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01')", NULL, FALSE);
$builder->where("pp.issued_date < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01')", NULL, FALSE); $builder->where("pp.issued_date < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01')", NULL, FALSE);
} // }
else if ($month === "previous") { // else if ($month === "previous") {
// WHERE issued_date >= start_of_previous_month AND issued_date < start_of_current_month // // WHERE issued_date >= start_of_previous_month AND issued_date < start_of_current_month
$builder->where("pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01')", NULL, FALSE); // $builder->where("pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01')", NULL, FALSE);
$builder->where("pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01')", NULL, FALSE); // $builder->where("pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01')", NULL, FALSE);
} // }
$builder->orderBy('pp.issued_date', 'DESC'); $builder->orderBy('pp.issued_date', 'DESC');
@ -978,8 +1110,6 @@ class ExcelExportController extends ResourceController
/** /**
* Executes the detailed policy query and extracts the data for the spreadsheet. * Executes the detailed policy query and extracts the data for the spreadsheet.
* @param string $managerId * @param string $managerId
* @param int $brokerId
* @param string $month ('current' or 'previous')
* @return array * @return array
*/ */
private function getAgentsWithoutPoliciesData($managerId): array private function getAgentsWithoutPoliciesData($managerId): array
@ -1019,8 +1149,6 @@ class ExcelExportController extends ResourceController
/** /**
* Executes the detailed policy query and extracts the data for the spreadsheet. * Executes the detailed policy query and extracts the data for the spreadsheet.
* @param string $managerId * @param string $managerId
* @param int $brokerId
* @param string $month ('current' or 'previous')
* @return array * @return array
*/ */
private function getLowPremiumAgentData($managerId): array private function getLowPremiumAgentData($managerId): array
@ -1033,11 +1161,18 @@ class ExcelExportController extends ResourceController
$builder = $this->db->table('partner_policy pp'); $builder = $this->db->table('partner_policy pp');
$builder->select(" $builder->select("
DATE_FORMAT(pe.created_on, '%d-%m-%Y %h:%i %p') AS received_date,
S.name as assigned_to_name,
I.name as insurer_name,I.short_name as insurer_short_name,
pe.name as insured_name,
pe.reg_no,
pm.value as payment_mode_value,
ipti.insurance_plan_type,
pa.name AS agent_name, pa.name AS agent_name,
pa.agent_code, pa.agent_code,
CASE CASE
WHEN pa.is_active = 1 THEN 'Active Agent' WHEN pa.is_active = 1 THEN 'Active Partner'
ELSE 'Inactive Agent' ELSE 'Inactive Partner'
END AS agent_status, END AS agent_status,
pp.policy_number, pp.policy_number,
DATE_FORMAT(pp.issued_date, '%d-%m-%Y') AS issued_date, DATE_FORMAT(pp.issued_date, '%d-%m-%Y') AS issued_date,
@ -1045,6 +1180,15 @@ class ExcelExportController extends ResourceController
"); ");
$builder->join('partner_agent pa', 'pa.id = pp.agent_id', 'inner'); $builder->join('partner_agent pa', 'pa.id = pp.agent_id', 'inner');
$builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left');
$builder->join('partner_quotation Q', 'Q.enquiry_id = pe.id', 'left');
$builder->join('partner_payment_mode_master pm', 'pm.id = Q.payment_mode_id', 'left');
$builder->join('partner_insurance_plan_type_master ipti', 'ipti.id = Q.insurance_plan_type_id', 'left');
$builder->join('insurers I', 'I.id = Q.insurer_id', 'left');
$builder->join('partner_staff S', 'S.id = pe.assigned_to', 'left');
// WHERE conditions // WHERE conditions
$builder->where('pp.manager_id', $managerId); $builder->where('pp.manager_id', $managerId);
// $builder->where('pa.id', $agentId); // $builder->where('pa.id', $agentId);

View File

@ -35,7 +35,9 @@ class InvoiceController extends ResourceController
{ {
try { try {
$data = $this->InvoiceModel->select('partner_invoice.*, PB.name as broker_name, PA.name as agent_name') $data = $this->InvoiceModel->select('partner_invoice.*, PB.name as broker_name, PA.name as agent_name,
FORMAT(partner_invoice.invoice_amount, 2, "en_IN") AS invoice_amount_indian_format,
DATE_FORMAT(partner_invoice.invoice_date, "%d-%m-%Y") AS invoice_date_ui_format')
->join('partner_brokers PB', 'PB.id = partner_invoice.broker_id', 'left') ->join('partner_brokers PB', 'PB.id = partner_invoice.broker_id', 'left')
->join('partner_agent PA', 'PA.id = partner_invoice.agent_id', 'left') ->join('partner_agent PA', 'PA.id = partner_invoice.agent_id', 'left')
->where('partner_invoice.is_active', 1) ->where('partner_invoice.is_active', 1)
@ -103,7 +105,7 @@ class InvoiceController extends ResourceController
'agent_id' => $input['agent_id'] ?? '', 'agent_id' => $input['agent_id'] ?? '',
'till_date' => $input['till_date'] ? date('Y-m-d', strtotime($input['till_date'])) : null, 'till_date' => $input['till_date'] ? date('Y-m-d', strtotime($input['till_date'])) : null,
'invoice_date' => $input['invoice_date'] ? date('Y-m-d', strtotime($input['invoice_date'])) : null, 'invoice_date' => $input['invoice_date'] ? date('Y-m-d', strtotime($input['invoice_date'])) : null,
'payout_status' => $input['payout_status'] ?? 0, 'payout_status' => 1,
'is_active' => 1, 'is_active' => 1,
'updated_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'),
'updated_by' => $input['updated_by'] ?? 0 'updated_by' => $input['updated_by'] ?? 0
@ -204,9 +206,10 @@ class InvoiceController extends ResourceController
'message'=> 'agent_id and issued_date are required' 'message'=> 'agent_id and issued_date are required'
], 400); ], 400);
} }
$invoice_id = isset($input['invoice_id']) ? $input['invoice_id'] : '';
$data = $this->PolicyModel $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') ->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( ->join(
'partner_enquiry pe', 'partner_enquiry pe',
@ -221,10 +224,33 @@ class InvoiceController extends ResourceController
->findAll(); ->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.agent_id', $input['agent_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([ return $this->respond([
'status' => 'success', 'status' => 'success',
'code' => 200, 'code' => 200,
'previous' => $data_previous,
'data' => $data 'data' => $data
], 200); ], 200);

View File

@ -54,7 +54,7 @@ class MasterController extends ResourceController
public function getRoleMaster() public function getRoleMaster()
{ {
$data = $this->RoleMasterModel->whereIn('id',[2,3])->findAll(); $data = $this->RoleMasterModel->whereIn('id',[2,3,4])->findAll();
if (!$data) { if (!$data) {
return $this->failNotFound('No data found'); return $this->failNotFound('No data found');
@ -162,6 +162,7 @@ class MasterController extends ResourceController
$data = [ $data = [
'name' => $input['name'], 'name' => $input['name'],
'short_name' => $input['short_name'],
'is_active' => 1, 'is_active' => 1,
'created_by' => $input['created_by'] ?? null, 'created_by' => $input['created_by'] ?? null,
]; ];
@ -197,7 +198,8 @@ class MasterController extends ResourceController
} }
$data = [ $data = [
'name' => $input['name'] ?? null, 'name' => $input['name'] ,
'short_name'=> $input['short_name'],
'updated_by' => $input['updated_by'] ?? null, 'updated_by' => $input['updated_by'] ?? null,
]; ];

View File

@ -196,7 +196,7 @@ class PolicyController extends ResourceController
} }
// Call helper to create BDS record after creating client,clientPolicy,vehicle records // Call helper to create BDS record after creating client,clientPolicy,vehicle records
$policyData = $this->PolicyModel->select('partner_policy.*,Q.insurer_id,Q.insurer_branch_id,E.name as client_name,E.mobile as client_mobile,E.email as client_email,E.reg_no,E.vehicle_type_id,A.id as agent_id,A.agent_code') $policyData = $this->PolicyModel->select('partner_policy.*,Q.insurer_id,Q.insurer_branch_id,partner_policy.insured_name as client_name,E.mobile as client_mobile,E.email as client_email,E.reg_no,E.vehicle_type_id,A.id as agent_id,A.agent_code')
->join('partner_quotation Q', 'Q.id = partner_policy.quotation_id AND Q.status = "Accepted"', 'left') ->join('partner_quotation Q', 'Q.id = partner_policy.quotation_id AND Q.status = "Accepted"', 'left')
->join('partner_enquiry E', 'E.id = partner_policy.enquiry_id', 'left') ->join('partner_enquiry E', 'E.id = partner_policy.enquiry_id', 'left')
->join('partner_agent A', 'A.id = partner_policy.agent_id', 'left') ->join('partner_agent A', 'A.id = partner_policy.agent_id', 'left')
@ -566,6 +566,7 @@ class PolicyController extends ResourceController
$policyData['cubic_capacity'] = $data['vehicle']['cubic_capacity'] ?? null; $policyData['cubic_capacity'] = $data['vehicle']['cubic_capacity'] ?? null;
$policyData['vehicle_type'] = $vehicleType; $policyData['vehicle_type'] = $vehicleType;
$policyData['rc_no'] = $data['vehicle']['reg_no'] ?? null; $policyData['rc_no'] = $data['vehicle']['reg_no'] ?? null;
$policyData['insured_name'] = $data['insured']['name'] ?? null;
@ -653,7 +654,7 @@ class PolicyController extends ResourceController
// The prompt you want to send to the model // The prompt you want to send to the model
// $prompt = "give me a json with emp data like name,age,dob,mobile and email. only json not any explanations"; // $prompt = "give me a json with emp data like name,age,dob,mobile and email. only json not any explanations";
$prompt = "Read the following motor policy pdf document and convert into JSON format as sample specified. Give me only JSON,not any explanations.while pick up premium break up give own damage, third party ,personal accident and taxes as mentioned in JSON format.Notes:vehicle_type should be like Two Wheeler,Four Feeler,Good Vehicle,Bus, Tractor,Commercial Vehicle.rto_state_code is first two char of reg_no and rto_city_code 3rd & 4th char of reg_no and it should be two digit numeric code. Any date should be in mysql date format"; $prompt = "Read the following motor policy pdf document and convert into JSON format as sample specified. Give me only JSON,not any explanations.while pick up premium break up give own damage, third party ,personal accident and taxes as mentioned in JSON format.Notes:vehicle_type should be like Two Wheeler,Four Feeler,Good Vehicle,Bus, Tractor,Commercial Vehicle.rto_state_code is first two char of reg_no and rto_city_code 3rd & 4th char of reg_no and it should be two digit numeric code. Any date should be in mysql date format";
$prompt .= '"{\"policy\":{\"intermediary_name\":\"\",\"policy_number\":\"\",\"issue_date\":\"\",\"period\":{\"start\":\"\",\"end\":\"\"},\"insurer\":\"\",\"previous_policy_number\":\"\"},\"insured\":{\"name\":\"\",\"father_name\":\"\",\"address\":[\"\"],\"mobile\":\"\",\"id_proofs\":{\"aadhaar\":\"\",\"pan\":\"\"}},\"vehicle\":{\"reg_no\":\"\",\"rto_state_code\":\"\",\"rto_city_code\":\"\",\"weight\":\"\",\"fuel_type\":\"\",\"date_of_registration\":\"\",\"year_of_manufacture\":\"\",\"engine_no\":\"\",\"chassis_no\":\"\",\"make\":\"\",\"model\":\"\",\"year\":\"\",\"cubic_capacity\":\"\",\"vehicle_type\":\"\"},\"rto\":\"\",\"premium\":{\"tp\":0,\"od\":0,\"pa\":0,\"taxes\":{},\"total\":0,\"in_words\":\"\"},\"endorsements\":[{\"code\":\"\",\"desc\":\"\"}]}"'; $prompt .= '"{\"policy\":{\"intermediary_name\":\"\",\"policy_number\":\"\",\"issue_date\":\"\",\"period\":{\"start\":\"\",\"end\":\"\"},\"insurer\":\"\",\"previous_policy_number\":\"\"},\"insured\":{\"name\":\"\",\"father_name\":\"\",\"address\":[\"\"],\"mobile\":\"\",\"id_proofs\":{\"aadhaar\":\"\",\"pan\":\"\"}},\"vehicle\":{\"reg_no\":\"\",\"rto_state_code\":\"\",\"rto_city_code\":\"\",\"weight\":\"\",\"fuel_type\":\"\",\"date_of_registration\":\"\",\"year_of_manufacture\":\"\",\"engine_no\":\"\",\"chassis_no\":\"\",\"make\":\"\",\"model\":\"\",\"year\":\"\",\"cubic_capacity\":\"\",\"vehicle_type\":\"\"},\"rto\":\"\",\"premium\":{\"tp\":0,\"od\":0,\"pa\":0,\"taxes\":{\"cgst\":\"\",\"sgst\":\"\",\"igst\":\"\"},\"total\":0,\"in_words\":\"\"},\"endorsements\":[{\"code\":\"\",\"desc\":\"\"}]}"';
$payloadPart = null; $payloadPart = null;
@ -975,8 +976,8 @@ class PolicyController extends ResourceController
} }
public function searchThePolicies()
public function searchThePolicies() { {
try{ try{
@ -1013,17 +1014,110 @@ class PolicyController extends ResourceController
} catch (\Exception $e) { } catch (\Exception $e) {
return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500);
} }
} }
public function resolveVehicleTypeTier1(string $incoming)
{
public function resolveVehicleTypeTier1(string $incoming) $value = strtolower(trim($incoming));
$value = preg_replace('/\s+/', ' ', $value); // normalize spaces
return $this->phraseMap[$value] ?? 'UN_IDEN_TYPE';
}
public function calculateCommissionRequest()
{
$postRequest = $this->request->getJSON(true);
$apiUrl = getenv('COMMISSION_CALCULATION_URL');
$token = getenv('COMMISSION_CALCULATION_TOKEN');
$manufactureYear = (int) $postRequest['year_of_manufacture'];
$currentYear = (int) date("Y");
$vehicleAge = $currentYear - $manufactureYear;
$postData = [
"department" => "Motor",
"policy_business_type" => "retail",
"product" => "",
"renewal_type" => "fresh",
"renewal_sub_type" => "fresh",
"vehicle_type" => $postRequest['vehicle_type'],
"policy_type" => $postRequest['insurance_plan_type'],
"premium" => $postRequest['premium_amount'],
"od_premium" => $postRequest['od'],
"tp_premium" => $postRequest['tp'],
"cubic_capacity" => $postRequest['cubic_capacity'],
"weight" => $postRequest['weight'],
"make" => $postRequest['make'],
"model" => $postRequest['model'],
"manufacture_year" => $postRequest['year_of_manufacture'],
"vehicle_age" => $vehicleAge,
"date_of_registration" => $postRequest['date_of_registration'],
"fuel_type" => $postRequest['fuel_type'],
"geo_rto_state" => $postRequest['rto_state_code'],
"geo_rto_city" => $postRequest['rto_city_code'],
"policy_issue_date" => $postRequest['issued_date'],
"insurer_id" => $postRequest['insurer_id']
];
log_message('debug', 'API Request Payload: ' . json_encode($postData));
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"Authorization: Bearer " . $token
]);
// POST Data
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error)
{ {
log_message('error', 'cURL Error: ' . $error);
$value = strtolower(trim($incoming)); return $this->respond( ['status'=>"failed", 'message'=> 'cURL Error: ' . $error], 200);
$value = preg_replace('/\s+/', ' ', $value); // normalize spaces
return $this->phraseMap[$value] ?? 'UN_IDEN_TYPE'; } else {
log_message('debug', 'API Response: ' . $response);
$result = json_decode($response, true);
if (!empty($result) && isset($result['success']) && $result['success'] === true) {
// Safely extract values
$policyData = [
'commission_amount' => $result['data']['payout'] ?? null,
'commission_applied_rule' => $result['data']['rule']['id'] ?? null,
];
log_message('debug', 'Updating Policy (ID=75) With: ' . json_encode($policyData));
return $this->respond(['status' => 'success', 'code' => 200, 'data' => $policyData ], 200);
} else {
log_message('debug', 'calculateCommission() - Invalid API Response');
return $this->respond( ['status'=>"failed", 'message'=> "Invalid API Response!"], 200);
}
} }
}

View File

@ -31,7 +31,7 @@ class StaffController extends ResourceController
$data = $this->StaffModel->select('partner_staff.* , R.role') $data = $this->StaffModel->select('partner_staff.* , R.role')
->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left')
->where('partner_staff.manager_id' , $manager_id ) ->where('partner_staff.manager_id' , $manager_id )
->whereIn('partner_staff.role_id' , [2,3] ) ->whereIn('partner_staff.role_id' , [2,3,4] )
->findAll(); ->findAll();
}else if(!empty($handler_id)){ }else if(!empty($handler_id)){

View File

@ -108,6 +108,7 @@ if (!function_exists('createBDS')) {
'month' => $policyData['issued_date'], 'month' => $policyData['issued_date'],
'policy_start_date' => $policyData['start_date'], 'policy_start_date' => $policyData['start_date'],
'policy_end_date' => $policyData['end_date'], 'policy_end_date' => $policyData['end_date'],
'renewal_date' => (new DateTime($policyData['end_date']))->modify('+1 day')->format('Y-m-d'),
'endorsement_no' => null, 'endorsement_no' => null,
'action_type' => 'inception', 'action_type' => 'inception',
'revenue_type' => "NA", 'revenue_type' => "NA",
@ -131,13 +132,15 @@ if (!function_exists('createBDS')) {
// 5. Always create pt co-share details // 5. Always create pt co-share details
$ptCoShareDetails = [ $ptCoShareDetails = [
'pt_id' => $policyTransactionId, 'pt_id' => $policyTransactionId,
'insurer_id' => $policyData['insurer_id'], 'insurer_id' => $policyData['insurer_id'],
'insurer_branch_id' => $policyData['insurer_branch_id'], 'insurer_branch_id' => $policyData['insurer_branch_id'],
'co_share_type' => 1, 'co_share_type' => 1,
'co_share_per' => 100, 'co_share_per' => 100,
'bp_amt' => $policyData['premium_amount'], 'bp_amt' => $policyData['premium_amount'],
'cop_amt' => $policyData['premium_amount'], 'cop_amt' => $policyData['premium_amount'],
'exp_amt' => $policyData['commission_amount'],
'pt_policy_issue_date' => $policyData['issued_date']
]; ];
$ptCoShareId = $ptCoShareDetailsModel->insert($ptCoShareDetails, true); $ptCoShareId = $ptCoShareDetailsModel->insert($ptCoShareDetails, true);
$log[] = "PT Co-Share details created (ID: {$ptCoShareId})"; $log[] = "PT Co-Share details created (ID: {$ptCoShareId})";

View File

@ -14,6 +14,7 @@ class PartnerBrokerModel extends Model
protected $allowedFields = [ protected $allowedFields = [
'name', 'name',
'short_name',
'is_active', 'is_active',
'created_by', 'created_by',
'updated_by' 'updated_by'

View File

@ -0,0 +1,60 @@
<?php namespace App\Models;
use CodeIgniter\Model;
class PartnerPosModel extends Model
{
protected $table = 'partner_pos';
protected $primaryKey = 'id';
protected $returnType = 'array'; // Can be 'array' or 'object' (e.g., \App\Entities\PartnerPos)
protected $useAutoIncrement = true;
protected $useTimestamps = true;
protected $createdField = 'created_on';
protected $updatedField = 'updated_on';
protected $allowedFields = [
'name',
'email',
'mobile',
'pos_code',
'certificate_file_name',
'aadhar',
'pan',
'is_active',
'created_by',
'updated_by',
'manager_id',
];
protected $validationRules = [
'name' => 'required|min_length[3]',
'email' => 'permit_empty|valid_email|is_unique[partner_pos.email,id,{id}]',
'mobile' => 'permit_empty|numeric|max_length[20]|is_unique[partner_pos.mobile,id,{id}]',
'manager_id' => 'required|integer',
];
protected $validationMessages = [
'email' => [
'is_unique' => 'Sorry, that email address is already registered.',
],
];
/**
* @var bool Whether to skip validation during inserts and updates.
*/
protected $skipValidation = false;
/**
* @var bool Whether to clean data for SQL Injection.
*/
protected $cleanValidationRules = true;
}