From bf7b83d5236f6e7659df43c48d7bab5cd36324d1 Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Fri, 9 Jan 2026 10:54:11 +0530 Subject: [PATCH] FIX_DateRange --- app/Controllers/ExcelExportController.php | 190 ++++++++++++++++++---- 1 file changed, 158 insertions(+), 32 deletions(-) diff --git a/app/Controllers/ExcelExportController.php b/app/Controllers/ExcelExportController.php index f8d64a7..b283360 100644 --- a/app/Controllers/ExcelExportController.php +++ b/app/Controllers/ExcelExportController.php @@ -494,7 +494,9 @@ class ExcelExportController extends ResourceController { try{ $managerId = $this->request->getGet('manager_id'); - + $from_date = $this->request->getGet('from_date'); + $to_date = $this->request->getGet('to_date'); + if (empty($managerId)) { $msg = "Missing: "; $msg .= empty($managerId) ? "manager_id " : ""; @@ -502,8 +504,32 @@ class ExcelExportController extends ResourceController // $ref = ['debug_msg' => 'Missing required parameters: manager_id, broker_id, and month must be provided.']; return $this->response->setJSON(['status' => 'error','code' => 400,'data' => [],'message' => 'Missing required parameters','ref' => $ref])->setStatusCode(200); } + + if (empty($from_date) || empty($to_date)) { - $data = $this->getDataLowPremiumAgent($managerId); + // Default: last 10 days + $fromObj = new \DateTime('-10 days'); + $toObj = new \DateTime(); + + } else { + + // Convert d-m-Y → DateTime + $fromObj = \DateTime::createFromFormat('d-m-Y', $from_date); + $toObj = \DateTime::createFromFormat('d-m-Y', $to_date); + + if (!$fromObj || !$toObj) { + return $this->response->setJSON([ + 'status' => 'error', + 'message' => 'Invalid date format (expected d-m-Y)', + ]); + } + } + + // For DB query + $fromDate = $fromObj->format('Y-m-d 00:00:00'); + $toDate = $toObj->format('Y-m-d 23:59:59'); + + $data = $this->getDataLowPremiumAgent($managerId,$fromDate,$toDate); if (empty($data)) { throw new \RuntimeException('No low premium agents found...', 404); } @@ -606,6 +632,8 @@ class ExcelExportController extends ResourceController try{ $managerId = $this->request->getGet('manager_id'); $agentId = $this->request->getGet('agent_id'); + $from_date = $this->request->getGet('from_date'); + $to_date = $this->request->getGet('to_date'); // $month = $this->request->getGet('month'); if (empty($managerId) || empty($agentId)) { @@ -618,8 +646,33 @@ class ExcelExportController extends ResourceController return $this->response->setJSON(['status' => 'error','code' => 400,'data' => [],'message' => 'Missing required parameters','ref' => $ref])->setStatusCode(200); } + if (empty($from_date) || empty($to_date)) { + + // Default: last 10 days + $fromObj = new \DateTime('-10 days'); + $toObj = new \DateTime(); + + } else { + + // Convert d-m-Y → DateTime + $fromObj = \DateTime::createFromFormat('d-m-Y', $from_date); + $toObj = \DateTime::createFromFormat('d-m-Y', $to_date); + + if (!$fromObj || !$toObj) { + return $this->response->setJSON([ + 'status' => 'error', + 'message' => 'Invalid date format (expected d-m-Y)', + ]); + } + } + + // For DB query + $fromDate = $fromObj->format('Y-m-d 00:00:00'); + $toDate = $toObj->format('Y-m-d 23:59:59'); + + // Renamed helper function for consistency: getAgentMonthlyPoliciesData - $data = $this->getDataPerformingAgentsByID($managerId, $agentId); // , $month); + $data = $this->getDataPerformingAgentsByID($managerId, $agentId,$fromDate,$toDate); // , $month); if (empty($data)) { throw new \RuntimeException('No policies found for this agent for the specified month.', 404); @@ -731,6 +784,8 @@ class ExcelExportController extends ResourceController try{ $managerId = $this->request->getGet('manager_id'); + $from_date = $this->request->getGet('from_date'); + $to_date = $this->request->getGet('to_date'); if (empty($managerId)) { $msg = "Missing: manager_id"; @@ -738,8 +793,40 @@ class ExcelExportController extends ResourceController return $this->response->setJSON(['status' => 'error', 'code' => 400, 'data' => [], 'message' => 'Missing required parameters', 'ref' => $ref])->setStatusCode(200); } + if (empty($from_date) || empty($to_date)) { + + // Default: last 10 days + $fromObj = new \DateTime('-10 days'); + $toObj = new \DateTime(); + + } else { + + // Convert d-m-Y → DateTime + $fromObj = \DateTime::createFromFormat('d-m-Y', $from_date); + $toObj = \DateTime::createFromFormat('d-m-Y', $to_date); + + if (!$fromObj || !$toObj) { + return $this->response->setJSON([ + 'status' => 'error', + 'message' => 'Invalid date format (expected d-m-Y)', + ]); + } + } + + // For DB query + $fromDate = $fromObj->format('Y-m-d 00:00:00'); + $toDate = $toObj->format('Y-m-d 23:59:59'); + + // For filename + $startDateFile = $fromObj->format('d_m_Y'); + $endDateFile = $toObj->format('d_m_Y'); + + // For title + $startDateTitle = $fromObj->format('d-m-Y'); + $endDateTitle = $toObj->format('d-m-Y'); + // Renamed helper function for consistency: getAgentMonthlyPoliciesData - $data = $this->getDataPerformingAgentsTop50($managerId); + $data = $this->getDataPerformingAgentsTop50($managerId,$fromDate,$toDate); $header = ['S.No', 'Partner Code', 'Partner Name', 'Policy Count', 'Premium Amount']; if (empty($data)) { @@ -780,14 +867,13 @@ class ExcelExportController extends ResourceController $totalRow[$lastColIndex] = $totalSum; $finalData[] = $totalRow; - $monthName = date('M_Y') ; - $fileName = 'Performing_Partner_Top_50_Policies_Details_Monthly_Report_' . $monthName . '.xlsx'; + $fileName = 'Performing_Partner_Top_50_Policies_Details_Monthly_Report.xlsx'; // --- CALL CENTRALIZED FUNCTION --- $this->streamExcelFile( $header, $finalData, - "Performing Partner ( Top 50 ) Policies Details - Monthly Report ".$monthName, + "Performing Partner ( Top 50 ) Policies Details - From ".$startDateTitle." to ".$endDateTitle." Report", $fileName, true // This will ignore the bold/alignment logic for the last row ); @@ -838,6 +924,8 @@ class ExcelExportController extends ResourceController { try{ $managerId = $this->request->getGet('manager_id'); + $from_date = $this->request->getGet('from_date'); + $to_date = $this->request->getGet('to_date'); if (empty($managerId)) { $msg = "Missing: "; @@ -847,7 +935,40 @@ class ExcelExportController extends ResourceController return $this->response->setJSON(['status' => 'error','code' => 400,'data' => [],'message' => 'Missing required parameters','ref' => $ref])->setStatusCode(200); } - $data = $this->getDataAgentsWithoutPolicies($managerId); + if (empty($from_date) || empty($to_date)) { + + // Default: last 10 days + $fromObj = new \DateTime('-10 days'); + $toObj = new \DateTime(); + + } else { + + // Convert d-m-Y → DateTime + $fromObj = \DateTime::createFromFormat('d-m-Y', $from_date); + $toObj = \DateTime::createFromFormat('d-m-Y', $to_date); + + if (!$fromObj || !$toObj) { + return $this->response->setJSON([ + 'status' => 'error', + 'message' => 'Invalid date format (expected d-m-Y)', + ]); + } + } + + // For DB query + $fromDate = $fromObj->format('Y-m-d 00:00:00'); + $toDate = $toObj->format('Y-m-d 23:59:59'); + + // For filename + $startDateFile = $fromObj->format('d_m_Y'); + $endDateFile = $toObj->format('d_m_Y'); + + // For title + $startDateTitle = $fromObj->format('d-m-Y'); + $endDateTitle = $toObj->format('d-m-Y'); + + + $data = $this->getDataAgentsWithoutPolicies($managerId,$fromDate,$toDate); if (empty($data)) { throw new \RuntimeException('No Partners without policies found.', 404); @@ -871,19 +992,12 @@ class ExcelExportController extends ResourceController } - - // End Date: Today - $endDate = date('Ymd'); - $endDateFile = date('d_m_Y'); - $endDateTitle = date('d-m-Y'); - // Start Date: 9 days ago (10th day is today) - $startDate = date('Ymd', strtotime('-9 days')); - $startDateFile = date('d_m_Y', strtotime('-9 days')); - $startDateTitle = date('d-m-Y', strtotime('-9 days')); // --- Filename Generation --- - $fileName = 'Non_Performing_Partners_No_Business_For_Last_10_Days_' . $startDateFile . '_to_' . $endDateFile . '.xlsx'; + // $fileName = 'Non_Performing_Partners_No_Business_For_Last_10_Days_' . $startDateFile . '_to_' . $endDateFile . '.xlsx'; + $fileName = 'Non_Performing_Partners_No_Business_From_' . $startDateFile . '_To_' . $endDateFile . '.xlsx'; + // Example output: Agents_Without_Policies_20251206_to_20251215.xlsx @@ -891,7 +1005,7 @@ class ExcelExportController extends ResourceController $this->streamExcelFile( $header, $finalData, - "Non Performing Partners ( No Business For Last 10 Days " . $startDateTitle . " to " . $endDateTitle." )", + "Non Performing Partners ( No Business From " . $startDateTitle . " to " . $endDateTitle . " )", $fileName, false // This will ignore the bold/alignment logic for the last row ); @@ -1067,10 +1181,12 @@ class ExcelExportController extends ResourceController ]); } + $fromDate = date('Y-m-d', strtotime('-10 days')); + $toDate = date('Y-m-d'); // 1. Fetch Data First - $monthlyData = $this->getDataPerformingAgentsByID($managerId, null); - $lowPremiumData = $this->getDataLowPremiumAgent($managerId); - $inactiveData = $this->getDataAgentsWithoutPolicies($managerId); + $monthlyData = $this->getDataPerformingAgentsByID($managerId,null,$fromDate,$toDate); + $lowPremiumData = $this->getDataLowPremiumAgent($managerId,$fromDate,$toDate); + $inactiveData = $this->getDataAgentsWithoutPolicies($managerId,$fromDate,$toDate); // 2. Add Total Rows where needed (Premium is usually the last index) if (!empty($monthlyData)) { @@ -1804,7 +1920,7 @@ class ExcelExportController extends ResourceController * @param string $month ('current' or 'previous') * @return array */ - private function getDataPerformingAgentsByID($managerId, $AgentId): array + private function getDataPerformingAgentsByID($managerId, $AgentId,$fromDate,$toDate): array { $data = []; @@ -1843,9 +1959,11 @@ class ExcelExportController extends ResourceController $builder->where('pp.policy_number IS NOT NULL'); $builder->where('pa.id', $AgentId); - $fromDate = date('Y-m-d', strtotime('-10 days')); - $toDate = date('Y-m-d'); + // $fromDate = date('Y-m-d', strtotime('-10 days')); + // $toDate = date('Y-m-d'); + + $builder->where('pp.issued_date >=', $fromDate); $builder->where('pp.issued_date <=', $toDate); @@ -1882,14 +2000,14 @@ class ExcelExportController extends ResourceController } - public function getDataPerformingAgentsTop50($manager_id){ + public function getDataPerformingAgentsTop50($manager_id,$fromDate,$toDate){ $data = []; try { $builder = $this->db->table('partner_policy pp'); - $fromDate = date('Y-m-d', strtotime('-10 days')); - $toDate = date('Y-m-d'); + // $fromDate = date('Y-m-d', strtotime('-10 days')); + // $toDate = date('Y-m-d'); $builder->select(" pa.agent_code, @@ -1934,7 +2052,7 @@ class ExcelExportController extends ResourceController * @param string $managerId * @return array */ - private function getDataAgentsWithoutPolicies($managerId): array + private function getDataAgentsWithoutPolicies($managerId,$fromDate,$toDate): array { $data = []; @@ -1956,8 +2074,13 @@ class ExcelExportController extends ResourceController $builder->join('partner_policy hist', 'pa.id = hist.agent_id', 'inner'); // 3. LEFT JOIN checks for policies in the last 10 days - $builder->join('partner_policy recent', - "pa.id = recent.agent_id AND recent.issued_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 10 DAY)", + // $builder->join('partner_policy recent', + // "pa.id = recent.agent_id AND recent.issued_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 10 DAY)", + // 'left' + // ); + $builder->join('partner_policy recent',"pa.id = recent.agent_id + AND recent.issued_date >= '{$fromDate}' + AND recent.issued_date <= '{$toDate}'", 'left' ); @@ -2005,7 +2128,7 @@ class ExcelExportController extends ResourceController * @return array */ //any changed in this query also change in do the same in DashboardController - getDataLowPremiumAgent - public function getDataLowPremiumAgent($manager_id){ + public function getDataLowPremiumAgent($manager_id,$fromDate,$toDate){ $builder = $this->db->table('partner_policy pp'); @@ -2028,6 +2151,9 @@ class ExcelExportController extends ResourceController $builder->having('total_premium_amount <', 50000); + $builder->where('pp.issued_date >=', $fromDate); + $builder->where('pp.issued_date <=', $toDate); + // RAW condition must be inside where() with FALSE // $builder->where(" // pp.issued_date >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY)