Date filter for partner dashboard : GWM
This commit is contained in:
parent
97d468c0ad
commit
3abcbcc06a
@ -3,6 +3,7 @@
|
|||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\RESTful\ResourceController;
|
use CodeIgniter\RESTful\ResourceController;
|
||||||
|
use DateTime;
|
||||||
|
|
||||||
class DashboardController extends ResourceController
|
class DashboardController extends ResourceController
|
||||||
{
|
{
|
||||||
@ -498,10 +499,22 @@ class DashboardController extends ResourceController
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// 1. Fetch all data concurrently (or sequentially, as shown)
|
// 1. Fetch all data concurrently (or sequentially, as shown)
|
||||||
$date = $this->request->getGet('date');
|
$from_date = $this->request->getGet('from_date');
|
||||||
$date = $date ?? date('Y-m-d');
|
$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)) {
|
if (!empty($data1)) {
|
||||||
|
|
||||||
@ -514,8 +527,8 @@ class DashboardController extends ResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$details['agentsPerformanceList'] = $data1;
|
$details['agentsPerformanceList'] = $data1;
|
||||||
$details['nonAgentsPerformanceList'] = $this->getDataNonAgentsPerformanceList($manager_id,$raw);
|
$details['nonAgentsPerformanceList'] = $this->getDataNonAgentsPerformanceList($fromDate, $toDate,$manager_id,$raw);
|
||||||
$data2 = $this->getDataLowPremiumAgent($manager_id,$raw);
|
$data2 = $this->getDataLowPremiumAgent($fromDate, $toDate,$manager_id,$raw);
|
||||||
if (!empty($data2)) {
|
if (!empty($data2)) {
|
||||||
|
|
||||||
$lastIndex2 = count(reset($data2)) - 1;
|
$lastIndex2 = count(reset($data2)) - 1;
|
||||||
@ -826,12 +839,10 @@ class DashboardController extends ResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Step 2
|
//Step 2
|
||||||
public function getDataPerformingAgents($customDate,$manager_id, $raw){
|
public function getDataPerformingAgents($fromDate, $toDate, $manager_id, $raw){
|
||||||
|
|
||||||
|
|
||||||
$builder = $this->db->table('partner_policy pp');
|
$builder = $this->db->table('partner_policy pp');
|
||||||
$fromDate = date('Y-m-d', strtotime('-10 days'));
|
|
||||||
$toDate = date('Y-m-d');
|
|
||||||
|
|
||||||
$builder->select("
|
$builder->select("
|
||||||
pa.id AS agent_id,
|
pa.id AS agent_id,
|
||||||
@ -893,31 +904,78 @@ class DashboardController extends ResourceController
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
//Step 3 no buiness
|
//Step 3 no buiness
|
||||||
public function getDataNonAgentsPerformanceList($managerId, $raw){
|
// public function getDataNonAgentsPerformanceList($managerId, $raw){
|
||||||
|
|
||||||
// $builder = $this->db->table('partner_agent pa');
|
// // $builder = $this->db->table('partner_agent pa');
|
||||||
// $builder->select('
|
// // $builder->select('
|
||||||
// pa.id AS agent_id,
|
// // pa.id AS agent_id,
|
||||||
// pa.name AS agent_name,
|
// // pa.name AS agent_name,
|
||||||
// pa.email,
|
// // pa.email,
|
||||||
// pa.mobile,
|
// // pa.mobile,
|
||||||
// pa.agent_code,
|
// // pa.agent_code,
|
||||||
// pa.is_active
|
// // pa.is_active
|
||||||
// ');
|
// // ');
|
||||||
|
|
||||||
// $builder->join(
|
// // $builder->join(
|
||||||
// 'partner_policy pp',
|
// // 'partner_policy pp',
|
||||||
// "pa.id = pp.agent_id AND pp.issued_date >= $interval AND pp.manager_id = $manager_id",
|
// // "pa.id = pp.agent_id AND pp.issued_date >= $interval AND pp.manager_id = $manager_id",
|
||||||
// 'left',
|
// // 'left',
|
||||||
// false // IMPORTANT → allows raw SQL
|
// // false // IMPORTANT → allows raw SQL
|
||||||
// );
|
// // );
|
||||||
|
|
||||||
// $builder->where('pa.manager_id',$manager_id);
|
// // $builder->where('pa.manager_id',$manager_id);
|
||||||
// $builder->where('pp.id', null);
|
// // $builder->where('pp.id', null);
|
||||||
// $builder->orderBy('pa.name');
|
// // $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 = $this->db->table('partner_agent pa');
|
||||||
|
|
||||||
$builder->select('
|
$builder->select('
|
||||||
pa.id AS agent_id,
|
pa.id AS agent_id,
|
||||||
pa.agent_code,
|
pa.agent_code,
|
||||||
@ -928,42 +986,44 @@ class DashboardController extends ResourceController
|
|||||||
MAX(hist.issued_date) AS last_issued_date
|
MAX(hist.issued_date) AS last_issued_date
|
||||||
');
|
');
|
||||||
|
|
||||||
// 2. INNER JOIN ensures they have at least one policy in history (skips new/empty agents)
|
// Must have at least one policy ever
|
||||||
$builder->join('partner_policy hist', 'pa.id = hist.agent_id', 'inner');
|
$builder->join(
|
||||||
|
'partner_policy hist',
|
||||||
|
'pa.id = hist.agent_id',
|
||||||
|
'inner'
|
||||||
|
);
|
||||||
|
|
||||||
// 3. LEFT JOIN checks for policies in the last 10 days
|
// Check activity inside the date range
|
||||||
$builder->join('partner_policy recent',
|
$builder->join(
|
||||||
"pa.id = recent.agent_id AND recent.issued_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 10 DAY)",
|
'partner_policy recent',
|
||||||
|
"pa.id = recent.agent_id
|
||||||
|
AND recent.issued_date >= '{$fromDate}'
|
||||||
|
AND recent.issued_date <= '{$toDate}'",
|
||||||
'left'
|
'left'
|
||||||
);
|
);
|
||||||
|
|
||||||
// 4. Filters
|
// Filters
|
||||||
$builder->where('pa.manager_id', $managerId);
|
$builder->where('pa.manager_id', $managerId);
|
||||||
$builder->where('pa.is_active', 1);
|
$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->groupBy('pa.id');
|
||||||
$builder->orderBy('pa.name', 'ASC');
|
$builder->orderBy('pa.name', 'ASC');
|
||||||
|
|
||||||
// 6. Get Raw Query
|
|
||||||
if ($raw === true) {
|
if ($raw === true) {
|
||||||
return $builder->getCompiledSelect();
|
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
|
//Step 4
|
||||||
//any changed in this query also change in do the same in ExcelExportController - getDataLowPremiumAgent
|
//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');
|
$builder = $this->db->table('partner_policy pp');
|
||||||
|
|
||||||
@ -986,10 +1046,8 @@ class DashboardController extends ResourceController
|
|||||||
|
|
||||||
$builder->having('total_premium_amount <', 50000);
|
$builder->having('total_premium_amount <', 50000);
|
||||||
|
|
||||||
// RAW condition must be inside where() with FALSE
|
$builder->where('pp.issued_date >=', $fromDate);
|
||||||
// $builder->where("
|
$builder->where('pp.issued_date <=', $toDate);
|
||||||
// pp.issued_date >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY)
|
|
||||||
// ", null, false);
|
|
||||||
|
|
||||||
// groupBy must be array of separate fields
|
// groupBy must be array of separate fields
|
||||||
$builder->groupBy([
|
$builder->groupBy([
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user