From 3abcbcc06a8df99f5622b6071e9721b98fffd3eb Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Mon, 5 Jan 2026 10:49:43 +0530 Subject: [PATCH] Date filter for partner dashboard : GWM --- app/Controllers/DashboardController.php | 158 ++++++++++++++++-------- 1 file changed, 108 insertions(+), 50 deletions(-) diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index 6ed0a07..938f359 100644 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -3,6 +3,7 @@ namespace App\Controllers; use CodeIgniter\RESTful\ResourceController; +use DateTime; class DashboardController extends ResourceController { @@ -498,10 +499,22 @@ class DashboardController extends ResourceController try { // 1. Fetch all data concurrently (or sequentially, as shown) - $date = $this->request->getGet('date'); - $date = $date ?? date('Y-m-d'); + $from_date = $this->request->getGet('from_date'); + $to_date = $this->request->getGet('to_date'); + if (empty($from_date) || empty($to_date)) + { + // Default last 10 days + $fromDate = date('Y-m-d', strtotime('-10 days')); + $toDate = date('Y-m-d'); + } else { + // Convert d-m-Y → Y-m-d + $fromDate = DateTime::createFromFormat('d-m-Y', $from_date)->format('Y-m-d 00:00:00'); + $toDate = DateTime::createFromFormat('d-m-Y', $to_date)->format('Y-m-d 23:59:59'); + } - $data1 = $this->getDataPerformingAgents($date, $manager_id, false); + + + $data1 = $this->getDataPerformingAgents($fromDate, $toDate, $manager_id, false); if (!empty($data1)) { @@ -514,8 +527,8 @@ class DashboardController extends ResourceController } $details['agentsPerformanceList'] = $data1; - $details['nonAgentsPerformanceList'] = $this->getDataNonAgentsPerformanceList($manager_id,$raw); - $data2 = $this->getDataLowPremiumAgent($manager_id,$raw); + $details['nonAgentsPerformanceList'] = $this->getDataNonAgentsPerformanceList($fromDate, $toDate,$manager_id,$raw); + $data2 = $this->getDataLowPremiumAgent($fromDate, $toDate,$manager_id,$raw); if (!empty($data2)) { $lastIndex2 = count(reset($data2)) - 1; @@ -826,12 +839,10 @@ class DashboardController extends ResourceController } //Step 2 - public function getDataPerformingAgents($customDate,$manager_id, $raw){ + public function getDataPerformingAgents($fromDate, $toDate, $manager_id, $raw){ $builder = $this->db->table('partner_policy pp'); - $fromDate = date('Y-m-d', strtotime('-10 days')); - $toDate = date('Y-m-d'); $builder->select(" pa.id AS agent_id, @@ -893,31 +904,78 @@ class DashboardController extends ResourceController // } //Step 3 no buiness - public function getDataNonAgentsPerformanceList($managerId, $raw){ + // public function getDataNonAgentsPerformanceList($managerId, $raw){ - // $builder = $this->db->table('partner_agent pa'); - // $builder->select(' - // pa.id AS agent_id, - // pa.name AS agent_name, - // pa.email, - // pa.mobile, - // pa.agent_code, - // pa.is_active - // '); + // // $builder = $this->db->table('partner_agent pa'); + // // $builder->select(' + // // pa.id AS agent_id, + // // pa.name AS agent_name, + // // pa.email, + // // pa.mobile, + // // pa.agent_code, + // // pa.is_active + // // '); - // $builder->join( - // 'partner_policy pp', - // "pa.id = pp.agent_id AND pp.issued_date >= $interval AND pp.manager_id = $manager_id", - // 'left', - // false // IMPORTANT → allows raw SQL - // ); + // // $builder->join( + // // 'partner_policy pp', + // // "pa.id = pp.agent_id AND pp.issued_date >= $interval AND pp.manager_id = $manager_id", + // // 'left', + // // false // IMPORTANT → allows raw SQL + // // ); - // $builder->where('pa.manager_id',$manager_id); - // $builder->where('pp.id', null); - // $builder->orderBy('pa.name'); + // // $builder->where('pa.manager_id',$manager_id); + // // $builder->where('pp.id', null); + // // $builder->orderBy('pa.name'); - // 1. Select the required columns + // // 1. Select the required columns + // $builder = $this->db->table('partner_agent pa'); + // $builder->select(' + // pa.id AS agent_id, + // pa.agent_code, + // pa.name AS agent_name, + // pa.email, + // pa.mobile, + // pa.is_active, + // MAX(hist.issued_date) AS last_issued_date + // '); + + // // 2. INNER JOIN ensures they have at least one policy in history (skips new/empty agents) + // $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)", + // 'left' + // ); + + // // 4. Filters + // $builder->where('pa.manager_id', $managerId); + // $builder->where('pa.is_active', 1); + // $builder->where('recent.id', NULL); // Keeps only those with NO activity in the 10-day window + + // // 5. Grouping and Ordering + // $builder->groupBy('pa.id'); + // $builder->orderBy('pa.name', 'ASC'); + + // // 6. Get Raw Query + // if ($raw === true) { + // return $builder->getCompiledSelect(); + // } + // // 7. Execute + // $query = $builder->get(); + // $result = $query->getResult(); + + // // 8. To verify the exact SQL for debugging: + // // echo (string) $db->getLastQuery(); + // // echo $this->db->getLastQuery()->getQuery();die; + // return $result; + + // } + + public function getDataNonAgentsPerformanceList($fromDate, $toDate, $managerId, $raw) + { $builder = $this->db->table('partner_agent pa'); + $builder->select(' pa.id AS agent_id, pa.agent_code, @@ -928,42 +986,44 @@ class DashboardController extends ResourceController MAX(hist.issued_date) AS last_issued_date '); - // 2. INNER JOIN ensures they have at least one policy in history (skips new/empty agents) - $builder->join('partner_policy hist', 'pa.id = hist.agent_id', 'inner'); + // Must have at least one policy ever + $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)", + // Check activity inside the date range + $builder->join( + 'partner_policy recent', + "pa.id = recent.agent_id + AND recent.issued_date >= '{$fromDate}' + AND recent.issued_date <= '{$toDate}'", 'left' ); - // 4. Filters + // Filters $builder->where('pa.manager_id', $managerId); $builder->where('pa.is_active', 1); - $builder->where('recent.id', NULL); // Keeps only those with NO activity in the 10-day window - // 5. Grouping and Ordering + // Key condition → NO activity in date range + $builder->where('recent.agent_id IS NULL', null, false); + + // Group & Order $builder->groupBy('pa.id'); $builder->orderBy('pa.name', 'ASC'); - // 6. Get Raw Query if ($raw === true) { return $builder->getCompiledSelect(); } - // 7. Execute - $query = $builder->get(); - $result = $query->getResult(); - - // 8. To verify the exact SQL for debugging: - // echo (string) $db->getLastQuery(); - // echo $this->db->getLastQuery()->getQuery();die; - return $result; + return $builder->get()->getResult(); } + //Step 4 //any changed in this query also change in do the same in ExcelExportController - getDataLowPremiumAgent - public function getDataLowPremiumAgent($manager_id, $raw){ + public function getDataLowPremiumAgent($fromDate, $toDate,$manager_id, $raw){ $builder = $this->db->table('partner_policy pp'); @@ -986,10 +1046,8 @@ class DashboardController extends ResourceController $builder->having('total_premium_amount <', 50000); - // RAW condition must be inside where() with FALSE - // $builder->where(" - // pp.issued_date >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY) - // ", null, false); + $builder->where('pp.issued_date >=', $fromDate); + $builder->where('pp.issued_date <=', $toDate); // groupBy must be array of separate fields $builder->groupBy([