FIX_ExportExcel

This commit is contained in:
sanjeev.p 2025-12-26 19:37:37 +05:30
parent 6dff58e50e
commit efe503ea40

View File

@ -788,10 +788,10 @@ class ExcelExportController extends ResourceController
// We create a new array for each row // We create a new array for each row
$finalData[] = [ $finalData[] = [
$serialNo++, $serialNo++,
$row['agent_code'], $row[0],
$row['agent_name'], $row[1],
$row['email'], $row[2],
$row['mobile'] $row[3]
]; ];
} }
@ -1205,7 +1205,7 @@ class ExcelExportController extends ResourceController
public function downloadStaffPendingSummaryExcelByID() public function downloadStaffPendingSummaryExcelByID()
{ {
// try{ try{
$managerId = $this->request->getGet('manager_id'); $managerId = $this->request->getGet('manager_id');
$staffId = $this->request->getGet('staff_id'); $staffId = $this->request->getGet('staff_id');
$status = $this->request->getGet('status'); $status = $this->request->getGet('status');
@ -1231,9 +1231,13 @@ class ExcelExportController extends ResourceController
// Define column headers // Define column headers
$header = ['S.No', 'Staff Name', 'REG Number','Received Date'];
// Initialize totals $header = ['S.No', 'Received Date',
'Assigned To(Staff Name)',
'Partner Name', 'Partner Code',
'Insurer Name', 'Insurer Short Name',
'Insured Name', 'Vehicle Number',
'Payment Mode', 'Plan Type'];
// Initialize totals // Initialize totals
$lastIndex = count(reset($data)) - 1; $lastIndex = count(reset($data)) - 1;
// usort($data, function($a, $b) use ($lastIndex) { // usort($data, function($a, $b) use ($lastIndex) {
@ -1249,65 +1253,65 @@ class ExcelExportController extends ResourceController
$finalData[] = array_merge([$serialNo++], $row); $finalData[] = array_merge([$serialNo++], $row);
} }
$staffName = $finalData[0][1] ?? 'Staff'; $staffName = $finalData[0][2] ?? 'Staff';
$fileName = $staffName.'_'.$status.'_Summary.xlsx';
// Calculate and append total
$cleanStaffName = str_replace(' ', '_', strtolower($staffName)); $cleanStaffName = str_replace(' ', '_', strtolower($staffName));
$cleanStatus = ucwords(str_replace('_', ' ', strtolower($status))); $cleanStaffName2 = ucwords($staffName);
$fileName = $cleanStaffName . '_' . $cleanStatus . '_Summary.xlsx';
$cleanStatus = str_replace('_', ' ', strtolower($status));
$cleanStatus2 = ucwords(str_replace('_', ' ', strtolower($status)));
$fileName = $cleanStaffName . '_' . $cleanStatus . '_Summary.xlsx';
// --- CALL CENTRALIZED FUNCTION --- // --- CALL CENTRALIZED FUNCTION ---
$this->streamExcelFile( $this->streamExcelFile(
$header, $header,
$finalData, $finalData,
$cleanStaffName ." ". $cleanStatus." Summary", $cleanStaffName2 ." ". $cleanStatus2." Summary",
$fileName, $fileName,
false false
); );
return; // STOP CI4 rendering anything else return; // STOP CI4 rendering anything else
// } catch (\Throwable $e) { } catch (\Throwable $e) {
// // ... (Your error handling remains the same) ... // ... (Your error handling remains the same) ...
// $ref = []; $ref = [];
// // Case 1: No Data Found (Soft Success JSON) // Case 1: No Data Found (Soft Success JSON)
// if ($e instanceof \RuntimeException && $e->getCode() === 404) { if ($e instanceof \RuntimeException && $e->getCode() === 404) {
// $ref['message'] = 'No Data Found'; $ref['message'] = 'No Data Found';
// return $this->respond([ return $this->respond([
// 'status' => 'success', 'status' => 'success',
// 'code' => 200, 'code' => 200,
// 'data' => [], 'data' => [],
// 'message' => 'No Data Found', 'message' => 'No Data Found',
// 'ref' => $ref 'ref' => $ref
// ], 200); ], 200);
// } }
// // Case 2: Database or Other Error (Error JSON) // Case 2: Database or Other Error (Error JSON)
// $isDbError = $e instanceof \CodeIgniter\Database\Exceptions\DatabaseException $isDbError = $e instanceof \CodeIgniter\Database\Exceptions\DatabaseException
// || $e instanceof \mysqli_sql_exception || $e instanceof \mysqli_sql_exception
// || $e instanceof \PDOException; || $e instanceof \PDOException;
// if ($isDbError) { if ($isDbError) {
// $ref['debug_info'] = $e->getFile() . " / LN : " . $e->getLine(); $ref['debug_info'] = $e->getFile() . " / LN : " . $e->getLine();
// $ref['message'] = 'Database Error Occurred.'; $ref['message'] = 'Database Error Occurred.';
// $message = 'Database Error Occurred.'; $message = 'Database Error Occurred.';
// } else { } else {
// $ref['message'] = 'An unexpected error occurred: ' . $e->getMessage(); $ref['message'] = 'An unexpected error occurred: ' . $e->getMessage();
// $message = 'An unexpected error occurred: ' . $e->getMessage(); $message = 'An unexpected error occurred: ' . $e->getMessage();
// } }
// return $this->respond([ return $this->respond([
// 'status' => 'error', 'status' => 'error',
// 'code' => 500, 'code' => 500,
// 'data' => [], 'data' => [],
// 'message'=> $message, 'message'=> $message,
// 'ref' => $ref 'ref' => $ref
// ], 200); ], 200);
// } }
} }
@ -1840,7 +1844,12 @@ class ExcelExportController extends ResourceController
SUM(CASE WHEN pe.enquiry_status = 'Assigned' AND DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END) AS today_pending, SUM(CASE WHEN pe.enquiry_status = 'Assigned' AND DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END) AS today_pending,
SUM(CASE WHEN pe.enquiry_status = 'In progress' AND DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END) AS today_in_progress, SUM(CASE WHEN pe.enquiry_status = 'In progress' AND DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END) AS today_in_progress,
SUM(CASE WHEN pe.enquiry_status = 'Completed' AND DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END) AS today_completed, SUM(CASE WHEN pe.enquiry_status = 'Completed' AND DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END) AS today_completed,
SUM(CASE WHEN pe.enquiry_status != 'Completed' THEN 1 ELSE 0 END) AS previous_total_pending, /* SUM(CASE WHEN pe.enquiry_status != 'Completed' THEN 1 ELSE 0 END) AS previous_total_pending,
Logic: (All Pending) - (All Assigned Today) */
GREATEST(0,
SUM(CASE WHEN pe.enquiry_status != 'Completed' THEN 1 ELSE 0 END) -
SUM(CASE WHEN DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END)
) AS previous_total_pending
") ")
->join('partner_staff ps', 'ps.id = pe.assigned_to', 'left') ->join('partner_staff ps', 'ps.id = pe.assigned_to', 'left')
->where('pe.manager_id', $managerId) ->where('pe.manager_id', $managerId)
@ -1872,15 +1881,29 @@ class ExcelExportController extends ResourceController
{ {
try { try {
$builder = $this->db->table('partner_enquiry pe'); $builder = $this->db->table('partner_enquiry pe');
$builder = $this->db->table('partner_enquiry pe');
// Note: Change 'received_date' back to 'created_on' or update the loop below $builder->select('
$builder->select(" DATE_FORMAT(pe.created_on, "%d-%m-%Y %h:%i %p") AS received_date,
ps.name AS staff_name, ps.name AS staff_name,
CONCAT('\t', pe.reg_no) AS reg_no, A.name as agent_name,
DATE_FORMAT(pe.created_on, '%d-%m-%Y %h:%i %p') AS created_on A.agent_code,
", false); I.name as insurer_name,
I.short_name as insurer_short_name,
pe.name as insured_name,
CONCAT("\t", pe.reg_no) AS reg_no,
pm.value as payment_mode_value,
ipti.insurance_plan_type
', false); // 'false' prevents CI from automatically escaping quotes in functions like DATE_FORMAT
$builder->join('partner_policy pp', 'pp.enquiry_id = pe.id', 'left');
$builder->join('partner_staff ps', 'ps.id = pe.assigned_to', 'left'); $builder->join('partner_staff ps', 'ps.id = pe.assigned_to', '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->where('pe.manager_id', $managerId); $builder->where('pe.manager_id', $managerId);
$builder->where('pe.assigned_to', $staffId); $builder->where('pe.assigned_to', $staffId);
@ -1891,31 +1914,31 @@ class ExcelExportController extends ResourceController
$todayEnd = date('Y-m-d 23:59:59'); $todayEnd = date('Y-m-d 23:59:59');
switch ($status) { switch ($status) {
case 'today_assigned': case 'TodayAssigned':
$builder->where('pe.created_on >=', $todayStart); $builder->where('pe.created_on >=', $todayStart);
$builder->where('pe.created_on <=', $todayEnd); $builder->where('pe.created_on <=', $todayEnd);
break; break;
case 'Assigned':
case 'today_pending':
$builder->where('pe.enquiry_status', 'Assigned'); $builder->where('pe.enquiry_status', 'Assigned');
$builder->where('pe.created_on >=', $todayStart); $builder->where('pe.created_on >=', $todayStart);
$builder->where('pe.created_on <=', $todayEnd); $builder->where('pe.created_on <=', $todayEnd);
break; break;
case 'InProgress':
case 'today_in_progress':
$builder->where('pe.enquiry_status', 'In progress'); $builder->where('pe.enquiry_status', 'In progress');
$builder->where('pe.created_on >=', $todayStart); $builder->where('pe.created_on >=', $todayStart);
$builder->where('pe.created_on <=', $todayEnd); $builder->where('pe.created_on <=', $todayEnd);
break; break;
case 'Completed':
case 'today_completed':
$builder->where('pe.enquiry_status', 'Completed'); $builder->where('pe.enquiry_status', 'Completed');
$builder->where('pe.created_on >=', $todayStart); $builder->where('pe.created_on >=', $todayStart);
$builder->where('pe.created_on <=', $todayEnd); $builder->where('pe.created_on <=', $todayEnd);
break; break;
case 'previous_total_pending': case 'PrevPending':
// "Previous Pending" usually means anything NOT completed from BEFORE today /** * To match your Summary Logic (SUM CASE WHEN status != 'Completed'):
* We remove the date restriction.
* This shows ALL records that are not completed, regardless of date.
*/
$builder->where('pe.enquiry_status !=', 'Completed'); $builder->where('pe.enquiry_status !=', 'Completed');
$builder->where('pe.created_on <', $todayStart); $builder->where('pe.created_on <', $todayStart);
break; break;
@ -1925,11 +1948,7 @@ class ExcelExportController extends ResourceController
$data = []; $data = [];
foreach ($results as $row) { foreach ($results as $row) {
$data[] = [ $data[] = array_values($row);
$row['staff_name'] ?? 'N/A',
$row['reg_no'] ?? '-',
$row['created_on'] ?? '-' // Matches the alias in select
];
} }
return $data; return $data;