From efe503ea40255ae04e5598d5bb3e123138698860 Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Fri, 26 Dec 2025 19:37:37 +0530 Subject: [PATCH] FIX_ExportExcel --- app/Controllers/ExcelExportController.php | 157 ++++++++++++---------- 1 file changed, 88 insertions(+), 69 deletions(-) diff --git a/app/Controllers/ExcelExportController.php b/app/Controllers/ExcelExportController.php index 77d7bbb..e5b85f9 100644 --- a/app/Controllers/ExcelExportController.php +++ b/app/Controllers/ExcelExportController.php @@ -788,10 +788,10 @@ class ExcelExportController extends ResourceController // We create a new array for each row $finalData[] = [ $serialNo++, - $row['agent_code'], - $row['agent_name'], - $row['email'], - $row['mobile'] + $row[0], + $row[1], + $row[2], + $row[3] ]; } @@ -1205,7 +1205,7 @@ class ExcelExportController extends ResourceController public function downloadStaffPendingSummaryExcelByID() { - // try{ + try{ $managerId = $this->request->getGet('manager_id'); $staffId = $this->request->getGet('staff_id'); $status = $this->request->getGet('status'); @@ -1231,9 +1231,13 @@ class ExcelExportController extends ResourceController // 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 $lastIndex = count(reset($data)) - 1; // usort($data, function($a, $b) use ($lastIndex) { @@ -1249,65 +1253,65 @@ class ExcelExportController extends ResourceController $finalData[] = array_merge([$serialNo++], $row); } - $staffName = $finalData[0][1] ?? 'Staff'; - - $fileName = $staffName.'_'.$status.'_Summary.xlsx'; - // Calculate and append total + $staffName = $finalData[0][2] ?? 'Staff'; $cleanStaffName = str_replace(' ', '_', strtolower($staffName)); - $cleanStatus = ucwords(str_replace('_', ' ', strtolower($status))); - $fileName = $cleanStaffName . '_' . $cleanStatus . '_Summary.xlsx'; + $cleanStaffName2 = ucwords($staffName); + $cleanStatus = str_replace('_', ' ', strtolower($status)); + $cleanStatus2 = ucwords(str_replace('_', ' ', strtolower($status))); + + $fileName = $cleanStaffName . '_' . $cleanStatus . '_Summary.xlsx'; // --- CALL CENTRALIZED FUNCTION --- $this->streamExcelFile( $header, $finalData, - $cleanStaffName ." ". $cleanStatus." Summary", + $cleanStaffName2 ." ". $cleanStatus2." Summary", $fileName, false ); return; // STOP CI4 rendering anything else - // } catch (\Throwable $e) { + } catch (\Throwable $e) { - // // ... (Your error handling remains the same) ... - // $ref = []; - // // Case 1: No Data Found (Soft Success JSON) - // if ($e instanceof \RuntimeException && $e->getCode() === 404) { - // $ref['message'] = 'No Data Found'; - // return $this->respond([ - // 'status' => 'success', - // 'code' => 200, - // 'data' => [], - // 'message' => 'No Data Found', - // 'ref' => $ref - // ], 200); - // } + // ... (Your error handling remains the same) ... + $ref = []; + // Case 1: No Data Found (Soft Success JSON) + if ($e instanceof \RuntimeException && $e->getCode() === 404) { + $ref['message'] = 'No Data Found'; + return $this->respond([ + 'status' => 'success', + 'code' => 200, + 'data' => [], + 'message' => 'No Data Found', + 'ref' => $ref + ], 200); + } - // // Case 2: Database or Other Error (Error JSON) - // $isDbError = $e instanceof \CodeIgniter\Database\Exceptions\DatabaseException - // || $e instanceof \mysqli_sql_exception - // || $e instanceof \PDOException; + // Case 2: Database or Other Error (Error JSON) + $isDbError = $e instanceof \CodeIgniter\Database\Exceptions\DatabaseException + || $e instanceof \mysqli_sql_exception + || $e instanceof \PDOException; - // if ($isDbError) { - // $ref['debug_info'] = $e->getFile() . " / LN : " . $e->getLine(); - // $ref['message'] = 'Database Error Occurred.'; - // $message = 'Database Error Occurred.'; - // } else { - // $ref['message'] = 'An unexpected error occurred: ' . $e->getMessage(); - // $message = 'An unexpected error occurred: ' . $e->getMessage(); - // } + if ($isDbError) { + $ref['debug_info'] = $e->getFile() . " / LN : " . $e->getLine(); + $ref['message'] = 'Database Error Occurred.'; + $message = 'Database Error Occurred.'; + } else { + $ref['message'] = 'An unexpected error occurred: ' . $e->getMessage(); + $message = 'An unexpected error occurred: ' . $e->getMessage(); + } - // return $this->respond([ - // 'status' => 'error', - // 'code' => 500, - // 'data' => [], - // 'message'=> $message, - // 'ref' => $ref - // ], 200); - // } + return $this->respond([ + 'status' => 'error', + 'code' => 500, + 'data' => [], + 'message'=> $message, + 'ref' => $ref + ], 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 = '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' 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') ->where('pe.manager_id', $managerId) @@ -1872,15 +1881,29 @@ class ExcelExportController extends ResourceController { try { $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, - CONCAT('\t', pe.reg_no) AS reg_no, - DATE_FORMAT(pe.created_on, '%d-%m-%Y %h:%i %p') AS created_on - ", false); + 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, + 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_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.assigned_to', $staffId); @@ -1891,31 +1914,31 @@ class ExcelExportController extends ResourceController $todayEnd = date('Y-m-d 23:59:59'); switch ($status) { - case 'today_assigned': + case 'TodayAssigned': $builder->where('pe.created_on >=', $todayStart); $builder->where('pe.created_on <=', $todayEnd); break; - - case 'today_pending': + case 'Assigned': $builder->where('pe.enquiry_status', 'Assigned'); $builder->where('pe.created_on >=', $todayStart); $builder->where('pe.created_on <=', $todayEnd); break; - - case 'today_in_progress': + case 'InProgress': $builder->where('pe.enquiry_status', 'In progress'); $builder->where('pe.created_on >=', $todayStart); $builder->where('pe.created_on <=', $todayEnd); break; - - case 'today_completed': + case 'Completed': $builder->where('pe.enquiry_status', 'Completed'); $builder->where('pe.created_on >=', $todayStart); $builder->where('pe.created_on <=', $todayEnd); break; - case 'previous_total_pending': - // "Previous Pending" usually means anything NOT completed from BEFORE today + case 'PrevPending': + /** * 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.created_on <', $todayStart); break; @@ -1925,11 +1948,7 @@ class ExcelExportController extends ResourceController $data = []; foreach ($results as $row) { - $data[] = [ - $row['staff_name'] ?? 'N/A', - $row['reg_no'] ?? '-', - $row['created_on'] ?? '-' // Matches the alias in select - ]; + $data[] = array_values($row); } return $data;