FIX_Dashboard and ExportExcel
This commit is contained in:
parent
efe503ea40
commit
e689db5d48
@ -515,7 +515,7 @@ class DashboardController extends ResourceController
|
|||||||
|
|
||||||
$details['monthlyPolicyCount'] = $data1;
|
$details['monthlyPolicyCount'] = $data1;
|
||||||
$details['noPolicyTimeRange'] = $this->agentNoPolicyTimeRange($manager_id,$raw);
|
$details['noPolicyTimeRange'] = $this->agentNoPolicyTimeRange($manager_id,$raw);
|
||||||
$data2 = $this->agentBelow50tPremiumTimeRange($manager_id,$raw);
|
$data2 = $this->getLowPremiumAgentData($manager_id,$raw);
|
||||||
if (!empty($data2)) {
|
if (!empty($data2)) {
|
||||||
|
|
||||||
$lastIndex2 = count(reset($data2)) - 1;
|
$lastIndex2 = count(reset($data2)) - 1;
|
||||||
@ -890,10 +890,8 @@ class DashboardController extends ResourceController
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
//Step 3 no buiness
|
//Step 3 no buiness
|
||||||
public function agentNoPolicyTimeRange($manager_id, $raw){
|
public function agentNoPolicyTimeRange($managerId, $raw){
|
||||||
|
|
||||||
|
|
||||||
$interval = "DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY)";
|
|
||||||
// $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,
|
||||||
@ -915,37 +913,54 @@ class DashboardController extends ResourceController
|
|||||||
// $builder->where('pp.id', null);
|
// $builder->where('pp.id', null);
|
||||||
// $builder->orderBy('pa.name');
|
// $builder->orderBy('pa.name');
|
||||||
|
|
||||||
|
// 1. Select the required columns
|
||||||
$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.name AS agent_name,
|
pa.name AS agent_name,
|
||||||
pa.email,
|
pa.email,
|
||||||
pa.mobile,
|
pa.mobile,
|
||||||
pa.agent_code,
|
pa.is_active,
|
||||||
pa.is_active
|
MAX(hist.issued_date) AS last_issued_date
|
||||||
');
|
');
|
||||||
|
|
||||||
$builder->join(
|
// 2. INNER JOIN ensures they have at least one policy in history (skips new/empty agents)
|
||||||
'partner_policy pp',
|
$builder->join('partner_policy hist', 'pa.id = hist.agent_id', 'inner');
|
||||||
"pa.id = pp.agent_id AND pp.issued_date >= $interval",
|
|
||||||
'left',
|
// 3. LEFT JOIN checks for policies in the last 10 days
|
||||||
false // IMPORTANT → allows raw SQL
|
$builder->join('partner_policy recent',
|
||||||
|
"pa.id = recent.agent_id AND recent.issued_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 10 DAY)",
|
||||||
|
'left'
|
||||||
);
|
);
|
||||||
|
|
||||||
$builder->where('pa.manager_id',$manager_id);
|
// 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
|
||||||
|
|
||||||
$builder->where('pp.id IS NULL');
|
// 5. Grouping and Ordering
|
||||||
$builder->orderBy('pa.name');
|
$builder->groupBy('pa.id');
|
||||||
|
$builder->orderBy('pa.name', 'ASC');
|
||||||
|
|
||||||
|
// 6. Get Raw Query
|
||||||
if ($raw === true) {
|
if ($raw === true) {
|
||||||
return $builder->getCompiledSelect();
|
return $builder->getCompiledSelect();
|
||||||
}
|
}
|
||||||
$result = $builder->get()->getResultArray();
|
// 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 $result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Step 4
|
//Step 4
|
||||||
public function agentBelow50tPremiumTimeRange($manager_id, $raw){
|
//any changed in this query also change in do the same in ExcelExportController - getLowPremiumAgentData
|
||||||
|
public function getLowPremiumAgentData($manager_id, $raw){
|
||||||
|
|
||||||
$builder = $this->db->table('partner_policy pp');
|
$builder = $this->db->table('partner_policy pp');
|
||||||
|
|
||||||
@ -958,6 +973,7 @@ class DashboardController extends ResourceController
|
|||||||
ELSE 'Inactive Agent'
|
ELSE 'Inactive Agent'
|
||||||
END AS agent_status,
|
END AS agent_status,
|
||||||
MAX(pp.issued_date) AS last_business_date,
|
MAX(pp.issued_date) AS last_business_date,
|
||||||
|
CONCAT('₹ ', FORMAT(SUM(pp.premium_amount), 2, 'en_IN')) AS display_premium,
|
||||||
SUM(pp.premium_amount) AS total_premium_amount
|
SUM(pp.premium_amount) AS total_premium_amount
|
||||||
");
|
");
|
||||||
|
|
||||||
@ -968,9 +984,9 @@ class DashboardController extends ResourceController
|
|||||||
$builder->having('total_premium_amount <', 50000);
|
$builder->having('total_premium_amount <', 50000);
|
||||||
|
|
||||||
// RAW condition must be inside where() with FALSE
|
// RAW condition must be inside where() with FALSE
|
||||||
$builder->where("
|
// $builder->where("
|
||||||
pp.issued_date >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY)
|
// pp.issued_date >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY)
|
||||||
", null, false);
|
// ", null, false);
|
||||||
|
|
||||||
// groupBy must be array of separate fields
|
// groupBy must be array of separate fields
|
||||||
$builder->groupBy([
|
$builder->groupBy([
|
||||||
|
|||||||
@ -1735,22 +1735,55 @@ class ExcelExportController extends ResourceController
|
|||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$builder = $this->db->table('partner_agent pa');
|
|
||||||
$builder->select('pa.agent_code,pa.name AS agent_name, pa.email, pa.mobile');
|
|
||||||
|
|
||||||
$builder->join(
|
// 1. Select the required columns
|
||||||
'partner_policy pp',
|
$builder = $this->db->table('partner_agent pa');
|
||||||
'pa.id = pp.agent_id AND pp.issued_date >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY)',
|
$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'
|
'left'
|
||||||
);
|
);
|
||||||
$builder->where('pa.manager_id', $managerId);
|
|
||||||
$builder->where('pp.id IS NULL', null, false);
|
|
||||||
|
|
||||||
|
// 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');
|
$builder->orderBy('pa.name', 'ASC');
|
||||||
|
|
||||||
$results = $builder->get()->getResultArray();
|
// 6. Execute
|
||||||
|
$query = $builder->get();
|
||||||
|
$results = $query->getResultArray();
|
||||||
|
|
||||||
|
// 7. To verify the exact SQL for debugging:
|
||||||
|
// echo (string) $db->getLastQuery();
|
||||||
|
// echo $this->db->getLastQuery()->getQuery();die;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach ($results as $row) {
|
foreach ($results as $row) {
|
||||||
|
// Now you can use unset because $row is an array
|
||||||
|
unset($row['agent_id']);
|
||||||
|
unset($row['is_active']);
|
||||||
|
// If you want to show last_issued_date in the Excel, don't unset it here.
|
||||||
|
// If you want to skip it, keep the unset.
|
||||||
|
unset($row['last_issued_date']);
|
||||||
|
|
||||||
$data[] = array_values($row);
|
$data[] = array_values($row);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1810,7 +1843,7 @@ class ExcelExportController extends ResourceController
|
|||||||
// WHERE conditions
|
// WHERE conditions
|
||||||
$builder->where('pp.manager_id', $managerId);
|
$builder->where('pp.manager_id', $managerId);
|
||||||
// $builder->where('pa.id', $agentId);
|
// $builder->where('pa.id', $agentId);
|
||||||
$builder->where('pp.premium_amount <', 50000);
|
$builder->having('total_premium_amount <', 50000);
|
||||||
$builder->orderBy('pp.issued_date', 'DESC');
|
$builder->orderBy('pp.issued_date', 'DESC');
|
||||||
|
|
||||||
$results = $builder->get()->getResultArray();
|
$results = $builder->get()->getResultArray();
|
||||||
@ -1829,6 +1862,83 @@ class ExcelExportController extends ResourceController
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//any changed in this query also change in do the same in DashboardController - getLowPremiumAgentData
|
||||||
|
private function getLowPremiumAgentData_new($managerId): array
|
||||||
|
{
|
||||||
|
// --- Correction 1: Initialize Database Connection ---
|
||||||
|
|
||||||
|
$data = [];
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 1. First, get the IDs of agents who meet the < 50,000 criteria
|
||||||
|
$subQuery = $this->db->table('partner_policy')
|
||||||
|
->select('agent_id')
|
||||||
|
->where('manager_id', $managerId)
|
||||||
|
->groupBy('agent_id')
|
||||||
|
->having('SUM(premium_amount) <', 50000)
|
||||||
|
->get()
|
||||||
|
->getResultArray();
|
||||||
|
|
||||||
|
$agentIds = array_column($subQuery, 'agent_id');
|
||||||
|
|
||||||
|
// 2. If no agents found, return empty to avoid SQL errors
|
||||||
|
if (empty($agentIds)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Now build the detailed Export Query
|
||||||
|
$builder = $this->db->table('partner_policy pp');
|
||||||
|
|
||||||
|
$builder->select("
|
||||||
|
DATE_FORMAT(pe.created_on, '%d-%m-%Y %h:%i %p') AS received_date,
|
||||||
|
S.name as assigned_to_name,
|
||||||
|
I.name as insurer_name,
|
||||||
|
I.short_name as insurer_short_name,
|
||||||
|
pe.name as insured_name,
|
||||||
|
pe.reg_no,
|
||||||
|
pm.value as payment_mode_value,
|
||||||
|
ipti.insurance_plan_type,
|
||||||
|
pa.name AS agent_name,
|
||||||
|
pa.agent_code,
|
||||||
|
CASE
|
||||||
|
WHEN pa.is_active = 1 THEN 'Active Partner'
|
||||||
|
ELSE 'Inactive Partner'
|
||||||
|
END AS agent_status,
|
||||||
|
CONCAT('\t', pp.policy_number) AS policy_number,
|
||||||
|
DATE_FORMAT(pp.issued_date, '%d-%m-%Y') AS issued_date,
|
||||||
|
pp.premium_amount
|
||||||
|
");
|
||||||
|
|
||||||
|
$builder->join('partner_agent pa', 'pa.id = pp.agent_id', 'inner');
|
||||||
|
$builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_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_insurance_plan_type_master ipti', 'ipti.id = Q.insurance_plan_type_id', 'left');
|
||||||
|
$builder->join('insurers I', 'I.id = Q.insurer_id', 'left');
|
||||||
|
$builder->join('partner_staff S', 'S.id = pe.assigned_to', 'left');
|
||||||
|
|
||||||
|
// WHERE conditions
|
||||||
|
$builder->where('pp.manager_id', $managerId);
|
||||||
|
$builder->whereIn('pp.agent_id', $agentIds); // Filter by the IDs we found above
|
||||||
|
|
||||||
|
$builder->orderBy('pp.issued_date', 'DESC');
|
||||||
|
|
||||||
|
$results = $builder->get()->getResultArray();
|
||||||
|
// return $results;
|
||||||
|
// Restructure data for PhpSpreadsheet (2D array of values)
|
||||||
|
foreach ($results as $row) {
|
||||||
|
$data[] = array_values($row);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (DatabaseException $e) {
|
||||||
|
log_message('error', 'Database Error during Excel fetch: ' . $e->getMessage());
|
||||||
|
// Re-throw the exception so it is caught by the main function's catch block
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
private function getStaffPendingSummaryExcel($managerId): array
|
private function getStaffPendingSummaryExcel($managerId): array
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user