GWM : report
This commit is contained in:
parent
6428bffa81
commit
619ac5f83c
@ -170,6 +170,9 @@ $routes->group('api', ['filter' => 'appSignature'], function ($routes) {
|
|||||||
$routes->post('salesExecutive/createExecutive', 'SalesExecutive::createSalesExecutive');
|
$routes->post('salesExecutive/createExecutive', 'SalesExecutive::createSalesExecutive');
|
||||||
$routes->post('salesExecutive/updateExecutive', 'SalesExecutive::updateSalesExecutivedetails');
|
$routes->post('salesExecutive/updateExecutive', 'SalesExecutive::updateSalesExecutivedetails');
|
||||||
$routes->post('salesExecutive/changeExecutiveStatus', 'SalesExecutive::changeSalesExecutiveStatus');
|
$routes->post('salesExecutive/changeExecutiveStatus', 'SalesExecutive::changeSalesExecutiveStatus');
|
||||||
|
|
||||||
|
//report
|
||||||
|
$routes->get('reports/policy-excel', 'PolicyReportController::downloadExcel');
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -207,3 +210,6 @@ $routes->get("processjob", "JobWorker::processJob");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
175
app/Controllers/PolicyReportController.php
Normal file
175
app/Controllers/PolicyReportController.php
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Controllers;
|
||||||
|
|
||||||
|
use CodeIgniter\Controller;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||||
|
use DateTime;
|
||||||
|
|
||||||
|
class PolicyReportController extends Controller
|
||||||
|
{
|
||||||
|
public function downloadExcel()
|
||||||
|
{
|
||||||
|
$db = \Config\Database::connect();
|
||||||
|
|
||||||
|
// -----------------------------
|
||||||
|
// REQUEST PARAMS
|
||||||
|
// -----------------------------
|
||||||
|
$managerId = $this->request->getGet('manager_id');
|
||||||
|
$fromDate = $this->request->getGet('from_date');
|
||||||
|
$toDate = $this->request->getGet('to_date');
|
||||||
|
$fromDate = DateTime::createFromFormat('d-m-Y', $fromDate)->format('Y-m-d 00:00:00');
|
||||||
|
$toDate = DateTime::createFromFormat('d-m-Y', $toDate)->format('Y-m-d 23:59:59');
|
||||||
|
|
||||||
|
if (!$managerId || !$fromDate || !$toDate) {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'status' => 'failed',
|
||||||
|
'message' => 'manager_id, from_date and to_date are required'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------
|
||||||
|
// QUERY (100% Excel-aligned)
|
||||||
|
// -----------------------------
|
||||||
|
$data = $db->query("
|
||||||
|
SELECT
|
||||||
|
pos.pos_code AS pos_code,
|
||||||
|
pos.name AS pos_name,
|
||||||
|
pa.agent_code AS ref_code,
|
||||||
|
pp.created_on AS inward_date,
|
||||||
|
pa.name AS partner_name,
|
||||||
|
ins.short_name AS insurer,
|
||||||
|
pp.policy_number,
|
||||||
|
pp.insured_name,
|
||||||
|
pq.insurance_plan_type_id AS plan_type,
|
||||||
|
pp.vehicle_type AS product,
|
||||||
|
|
||||||
|
pp.od AS od,
|
||||||
|
pp.tp AS tp,
|
||||||
|
(IFNULL(pp.od,0) + IFNULL(pp.tp,0)) AS net_amount,
|
||||||
|
|
||||||
|
(IFNULL(pp.cgst,0) + IFNULL(pp.sgst,0) + IFNULL(pp.igst,0)) AS service_tax,
|
||||||
|
|
||||||
|
(IFNULL(pp.od,0) + IFNULL(pp.tp,0)
|
||||||
|
+ IFNULL(pp.cgst,0) + IFNULL(pp.sgst,0) + IFNULL(pp.igst,0)
|
||||||
|
) AS total_amount,
|
||||||
|
|
||||||
|
pm.value AS payment_mode,
|
||||||
|
CONCAT(pp.rto_state_code,'-',pp.rto_city_code) AS rto_loc,
|
||||||
|
NULL AS ncb_percent,
|
||||||
|
pp.end_date AS expire_date,
|
||||||
|
|
||||||
|
pb.short_name AS broker_code,
|
||||||
|
ps.name AS assigned_to,
|
||||||
|
pp.manager_id AS sales_manager,
|
||||||
|
pa.name AS sales_executive,
|
||||||
|
pa.mobile AS contact_no,
|
||||||
|
pos.address,
|
||||||
|
pos.pincode,
|
||||||
|
|
||||||
|
pe.status AS booking_status,
|
||||||
|
pe.created_on AS booking_date,
|
||||||
|
pe.id AS booking_ref_no,
|
||||||
|
|
||||||
|
pp.agent_retention_rate AS grid_percent,
|
||||||
|
pp.commission_amount AS grid_amount,
|
||||||
|
pe.remarks AS remark
|
||||||
|
FROM partner_policy pp
|
||||||
|
LEFT JOIN partner_agent pa ON pa.id = pp.agent_id
|
||||||
|
LEFT JOIN partner_pos pos ON pos.id = pa.pos_id
|
||||||
|
LEFT JOIN partner_quotation pq ON pq.id = pp.quotation_id
|
||||||
|
LEFT JOIN insurers ins ON ins.id = pq.insurer_id
|
||||||
|
LEFT JOIN partner_payment_mode_master pm ON pm.id = pq.payment_mode_id
|
||||||
|
LEFT JOIN partner_enquiry pe ON pe.id = pp.enquiry_id
|
||||||
|
LEFT JOIN partner_staff ps ON ps.id = pe.assigned_to
|
||||||
|
LEFT JOIN partner_brokers pb ON pb.id = pe.broker_id
|
||||||
|
WHERE pp.manager_id = ?
|
||||||
|
AND pp.issued_date BETWEEN ? AND ?
|
||||||
|
ORDER BY pp.created_on DESC
|
||||||
|
", [$managerId, $fromDate, $toDate])->getResultArray();
|
||||||
|
|
||||||
|
// -----------------------------
|
||||||
|
// EXCEL GENERATION
|
||||||
|
// -----------------------------
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
|
||||||
|
// EXACT HEADER FROM YOUR EXCEL
|
||||||
|
$headers = [
|
||||||
|
'POS CODE','POS NAME','REFF CODE','Inward Date','PARTNER NAME',
|
||||||
|
'Insurer','Policy No','Issured Name','PLAN TYPE','Product',
|
||||||
|
'A (OD)','B (TP)','A+B (NET)','S.TAX','TOTAL',
|
||||||
|
'PAYMENT MODE','RTO LOC.','NCB %','Expire Date','BROKER CODE',
|
||||||
|
'Assigned To','SALES MANAGER','SALES EXECUTIVE','CONTACT NO',
|
||||||
|
'ADDRESS','PIN CODE','BOOKING STATUS','DATE OF BOOKING',
|
||||||
|
'BOOKING REF NO','GRID %','GRID AMT','REMARK'
|
||||||
|
];
|
||||||
|
|
||||||
|
// Header row
|
||||||
|
$col = 'A';
|
||||||
|
foreach ($headers as $header) {
|
||||||
|
$sheet->setCellValue($col.'1', $header);
|
||||||
|
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||||
|
$col++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Data rows
|
||||||
|
$row = 2;
|
||||||
|
foreach ($data as $d) {
|
||||||
|
$sheet->fromArray([
|
||||||
|
$d['pos_code'],
|
||||||
|
$d['pos_name'],
|
||||||
|
$d['ref_code'],
|
||||||
|
$d['inward_date'],
|
||||||
|
$d['partner_name'],
|
||||||
|
$d['insurer'],
|
||||||
|
$d['policy_number'],
|
||||||
|
$d['insured_name'],
|
||||||
|
$d['plan_type'],
|
||||||
|
$d['product'],
|
||||||
|
$d['od'],
|
||||||
|
$d['tp'],
|
||||||
|
$d['net_amount'],
|
||||||
|
$d['service_tax'],
|
||||||
|
$d['total_amount'],
|
||||||
|
$d['payment_mode'],
|
||||||
|
$d['rto_loc'],
|
||||||
|
$d['ncb_percent'],
|
||||||
|
$d['expire_date'],
|
||||||
|
$d['broker_code'],
|
||||||
|
$d['assigned_to'],
|
||||||
|
$d['sales_manager'],
|
||||||
|
$d['sales_executive'],
|
||||||
|
$d['contact_no'],
|
||||||
|
$d['address'],
|
||||||
|
$d['pincode'],
|
||||||
|
$d['booking_status'],
|
||||||
|
$d['booking_date'],
|
||||||
|
$d['booking_ref_no'],
|
||||||
|
$d['grid_percent'],
|
||||||
|
$d['grid_amount'],
|
||||||
|
$d['remark']
|
||||||
|
], null, "A$row");
|
||||||
|
|
||||||
|
$row++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------
|
||||||
|
// DOWNLOAD RESPONSE
|
||||||
|
// -----------------------------
|
||||||
|
$fileName = 'Policy_Report_' . date('YmdHis') . '.xlsx';
|
||||||
|
|
||||||
|
$response = $this->response;
|
||||||
|
$response->setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
||||||
|
$response->setHeader('Content-Disposition', 'attachment; filename="'.$fileName.'"');
|
||||||
|
$response->setHeader('Cache-Control', 'max-age=0');
|
||||||
|
|
||||||
|
$writer = new Xlsx($spreadsheet);
|
||||||
|
ob_start();
|
||||||
|
$writer->save('php://output');
|
||||||
|
$excelOutput = ob_get_clean();
|
||||||
|
|
||||||
|
return $response->setBody($excelOutput);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -26,4 +26,21 @@ class StaffModel extends Model
|
|||||||
];
|
];
|
||||||
|
|
||||||
protected $useTimestamps = false; // we manually manage created_on / updated_on
|
protected $useTimestamps = false; // we manually manage created_on / updated_on
|
||||||
|
|
||||||
|
protected $validationRules = [
|
||||||
|
'name' => 'required|min_length[3]',
|
||||||
|
'email' => 'permit_empty|valid_email|is_unique[partner_staff.email,id,{id}]',
|
||||||
|
'mobile' => 'permit_empty|numeric|max_length[20]|is_unique[partner_staff.mobile,id,{id}]',
|
||||||
|
'manager_id' => 'required|integer',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $validationMessages = [
|
||||||
|
'email' => [
|
||||||
|
'is_unique' => 'Sorry, that email address is already registered.',
|
||||||
|
],
|
||||||
|
'mobile' => [
|
||||||
|
'is_unique' => 'Sorry, that mobile number is already registered.',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user