Dashboard for all 3 users dashboard : GWM
This commit is contained in:
parent
03d800583f
commit
0a9c6c35c0
@ -96,6 +96,8 @@ $routes->group('api', ['filter' => 'appSignature'], function ($routes) {
|
||||
$routes->post('endorsement/createEndorsement', 'EndorsementController::createEndorsement');
|
||||
|
||||
//dashboard
|
||||
$routes->get('dashboard/managerDashboard', 'DashboardController::managerDashboard');
|
||||
$routes->get('dashboard/staffDashboard', 'DashboardController::staffDashboard');
|
||||
$routes->get('dashboard/agentDashboard', 'DashboardController::agentDashboard');
|
||||
|
||||
});
|
||||
|
||||
@ -13,8 +13,10 @@ class DashboardController extends ResourceController
|
||||
$this->db = \Config\Database::connect();
|
||||
}
|
||||
|
||||
public function agentDashboard()
|
||||
public function managerDashboard()
|
||||
{
|
||||
|
||||
$manager_id = $this->request->getGet('manager_id');
|
||||
$today = date('Y-m-d');
|
||||
$month = date('m');
|
||||
$year = date('Y');
|
||||
@ -23,15 +25,18 @@ class DashboardController extends ResourceController
|
||||
$policiesToday = $this->db->table('partner_policy')
|
||||
->where('created_on >=', $today.' 00:00:00')
|
||||
->where('created_on <=', $today.' 23:59:59')
|
||||
->where('manager_id',$manager_id)
|
||||
->countAllResults();
|
||||
|
||||
$policiesMonth = $this->db->table('partner_policy')
|
||||
->where('MONTH(created_on)', $month)
|
||||
->where('YEAR(created_on)', $year)
|
||||
->where('manager_id',$manager_id)
|
||||
->countAllResults();
|
||||
|
||||
$policiesYear = $this->db->table('partner_policy')
|
||||
->where('YEAR(created_on)', $year)
|
||||
->where('manager_id',$manager_id)
|
||||
->countAllResults();
|
||||
|
||||
// --- Premium Value ---
|
||||
@ -39,17 +44,20 @@ class DashboardController extends ResourceController
|
||||
->selectSum('premium_amount', 'total')
|
||||
->where('created_on >=', $today.' 00:00:00')
|
||||
->where('created_on <=', $today.' 23:59:59')
|
||||
->where('manager_id',$manager_id)
|
||||
->get()->getRow()->total ?? 0);
|
||||
|
||||
$premiumMonth = (float) ($this->db->table('partner_policy')
|
||||
->selectSum('premium_amount', 'total')
|
||||
->where('MONTH(created_on)', $month)
|
||||
->where('YEAR(created_on)', $year)
|
||||
->where('manager_id',$manager_id)
|
||||
->get()->getRow()->total ?? 0);
|
||||
|
||||
$premiumYear = (float) ($this->db->table('partner_policy')
|
||||
->selectSum('premium_amount', 'total')
|
||||
->where('YEAR(created_on)', $year)
|
||||
->where('manager_id',$manager_id)
|
||||
->get()->getRow()->total ?? 0);
|
||||
|
||||
// --- Earnings (same as premium for now) ---
|
||||
@ -59,54 +67,41 @@ class DashboardController extends ResourceController
|
||||
|
||||
$last30 = date('Y-m-d H:i:s', strtotime('-30 days'));
|
||||
|
||||
// --- Performance Agents (top 5, last 30 days) ---
|
||||
$performanceAgents = $this->db->table('partner_policy pp')
|
||||
->select('pa.id AS agent_id, pa.name AS agent_name, COUNT(pp.id) AS policies_issued, COALESCE(SUM(pp.premium_amount),0) AS premium_value')
|
||||
->join('partner_agent pa', 'pa.id = pp.agent_id', 'inner')
|
||||
// --- Performance Agents (last 30 days) ---
|
||||
$performanceAgents = $this->db->table('partner_agent pa')
|
||||
->select('pa.id AS agent_id, pa.name AS agent_name, COUNT(pp.id) AS total_policy_issued, COALESCE(SUM(pp.premium_amount),0) AS total_premium_value, IF(COUNT(pp.id)>0,"Active","Inactive") AS status')
|
||||
->join('partner_policy pp', 'pp.agent_id = pa.id', 'inner')
|
||||
->where('pp.created_on >=', $last30)
|
||||
->groupBy('pa.id')
|
||||
->orderBy('policies_issued', 'DESC')
|
||||
->limit(5)
|
||||
->where('pa.manager_id',$manager_id)
|
||||
->get()
|
||||
->getResultArray();
|
||||
|
||||
|
||||
|
||||
// --- Non-Performing Agents (bottom 5, last 30 days) ---
|
||||
$nonPerformingAgents = $this->db->table('partner_agent pa')
|
||||
->select('pa.id AS agent_id, pa.name AS agent_name, COUNT(pp.id) AS policies_issued, IF(COUNT(pp.id)>0,"Active","Inactive") AS status')
|
||||
->join('partner_policy pp', 'pp.agent_id = pa.id', 'left')
|
||||
->where('pp.created_on >=', $last30)
|
||||
->groupBy('pa.id')
|
||||
->orderBy('policies_issued', 'ASC')
|
||||
->limit(5)
|
||||
->get()
|
||||
->getResultArray();
|
||||
|
||||
|
||||
dd($nonPerformingAgents);
|
||||
|
||||
// --- Quotations Pending ---
|
||||
$quotationsPending = $this->db->table('partner_quotation pq')
|
||||
->select('ps.name as staff_name, COUNT(pq.id) as quotation_issued, COALESCE(SUM(pq.premium_amount),0) as premium_value')
|
||||
->join('partner_enquiry pe', 'pe.id = pq.enquiry_id')
|
||||
->join('partner_staff ps', 'ps.id = pe.assigned_to')
|
||||
->where('pq.status', 'Pending')
|
||||
->groupBy('ps.id')
|
||||
->limit(10)
|
||||
->get()->getResultArray();
|
||||
// --- Staff level Quotations Pending ---
|
||||
$quotationsPending = $this->db->table('partner_staff ps')
|
||||
->select('ps.name as staff_name, COUNT(pe.id) as total_quotation_pending')
|
||||
->join('partner_enquiry pe', "pe.assigned_to = ps.id AND pe.status = 'Awaiting Quotation'", 'left')
|
||||
->where('ps.role_id', 2)
|
||||
->where('ps.manager_id',$manager_id)
|
||||
->groupBy('ps.id, ps.name')
|
||||
->get()->getResultArray();
|
||||
|
||||
dd($quotationsPending);
|
||||
|
||||
// --- Policies Pending ---
|
||||
$policiesPending = $this->db->table('partner_enquiry pe')
|
||||
->select('ps.name as staff_name, COUNT(pp.id) as policies_issued, COALESCE(SUM(pp.premium_amount),0) as premium_value')
|
||||
->join('partner_staff ps', 'ps.id = pe.assigned_to')
|
||||
->join('partner_policy pp', 'pp.enquiry_id = pe.id', 'left')
|
||||
// ->where('pp.id', null) // correct way in CI4 for IS NULL
|
||||
->groupBy('ps.id')
|
||||
->limit(15)
|
||||
->get()->getResultArray();
|
||||
|
||||
return $this->respond([
|
||||
// --- Staff level Policies Pending ---
|
||||
$policiesPending = $this->db->table('partner_staff ps')
|
||||
->select('ps.name as staff_name, COUNT(pe.id) as total_policis_pending, SUM(pq.premium_amount) as total_premium_value')
|
||||
->join('partner_enquiry pe', "pe.assigned_to = ps.id AND pe.status = 'Quotation Accepted'", 'left')
|
||||
->join('partner_quotation pq', "pq.enquiry_id = pe.id AND pq.status = 'Accepted'", 'left')
|
||||
->where('ps.role_id', 2)
|
||||
->where('ps.manager_id',$manager_id)
|
||||
->groupBy('ps.id, ps.name')
|
||||
->get()->getResultArray();
|
||||
|
||||
|
||||
$result = [
|
||||
'policies_issued' => [
|
||||
'today' => $policiesToday,
|
||||
'month' => $policiesMonth,
|
||||
@ -122,11 +117,148 @@ class DashboardController extends ResourceController
|
||||
'month' => $earningsMonth,
|
||||
'year' => $earningsYear,
|
||||
],
|
||||
'performance_agents' => $performanceAgents,
|
||||
'non_performing_agents'=> $nonPerformingAgents,
|
||||
'agents_performance' => $performanceAgents,
|
||||
'quotations_pending' => $quotationsPending,
|
||||
'policies_pending' => $policiesPending,
|
||||
]);
|
||||
];
|
||||
|
||||
return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200);
|
||||
}
|
||||
|
||||
public function staffDashboard()
|
||||
{
|
||||
|
||||
$staff_id = $this->request->getGet('staff_id');
|
||||
|
||||
|
||||
// --- Quotation pending for staff (last 30 days) ---
|
||||
$quotationsPending = $this->db->table('partner_enquiry pe')
|
||||
->select('pe.* , I.name as insurer_name, I.short_name as insurer_short_name')
|
||||
->join('insurers I', 'I.id = pe.insurer_id', 'left')
|
||||
->where('pe.assigned_to',$staff_id)
|
||||
->where('pe.status','Awaiting Quotation')
|
||||
->orderBy('pe.created_on', 'DESC')
|
||||
->get()
|
||||
->getResultArray();
|
||||
|
||||
// --- Policy pending for staff (last 30 days) ---
|
||||
$policiesPending = $this->db->table('partner_enquiry pe')
|
||||
->select('pe.* , I.name as insurer_name, I.short_name as insurer_short_name')
|
||||
->join('insurers I', 'I.id = pe.insurer_id', 'left')
|
||||
->where('pe.assigned_to',$staff_id)
|
||||
->where('pe.status','Quotation Accepted')
|
||||
->orderBy('pe.created_on', 'DESC')
|
||||
->get()
|
||||
->getResultArray();
|
||||
|
||||
$result = [
|
||||
'quotations_pending' => $quotationsPending,
|
||||
'policies_pending' => $policiesPending,
|
||||
];
|
||||
|
||||
|
||||
return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200);
|
||||
}
|
||||
|
||||
public function agentDashboard()
|
||||
{
|
||||
|
||||
$agent_id = $this->request->getGet('agent_id');
|
||||
$today = date('Y-m-d');
|
||||
$month = date('m');
|
||||
$year = date('Y');
|
||||
|
||||
// --- Policies Issued ---
|
||||
$policiesToday = $this->db->table('partner_policy')
|
||||
->where('created_on >=', $today.' 00:00:00')
|
||||
->where('created_on <=', $today.' 23:59:59')
|
||||
->where('agent_id',$agent_id)
|
||||
->countAllResults();
|
||||
|
||||
$policiesMonth = $this->db->table('partner_policy')
|
||||
->where('MONTH(created_on)', $month)
|
||||
->where('YEAR(created_on)', $year)
|
||||
->where('agent_id',$agent_id)
|
||||
->countAllResults();
|
||||
|
||||
$policiesYear = $this->db->table('partner_policy')
|
||||
->where('YEAR(created_on)', $year)
|
||||
->where('agent_id',$agent_id)
|
||||
->countAllResults();
|
||||
|
||||
// --- Premium Value ---
|
||||
$premiumToday = (float) ($this->db->table('partner_policy')
|
||||
->selectSum('premium_amount', 'total')
|
||||
->where('created_on >=', $today.' 00:00:00')
|
||||
->where('created_on <=', $today.' 23:59:59')
|
||||
->where('agent_id',$agent_id)
|
||||
->get()->getRow()->total ?? 0);
|
||||
|
||||
$premiumMonth = (float) ($this->db->table('partner_policy')
|
||||
->selectSum('premium_amount', 'total')
|
||||
->where('MONTH(created_on)', $month)
|
||||
->where('YEAR(created_on)', $year)
|
||||
->where('agent_id',$agent_id)
|
||||
->get()->getRow()->total ?? 0);
|
||||
|
||||
$premiumYear = (float) ($this->db->table('partner_policy')
|
||||
->selectSum('premium_amount', 'total')
|
||||
->where('YEAR(created_on)', $year)
|
||||
->where('agent_id',$agent_id)
|
||||
->get()->getRow()->total ?? 0);
|
||||
|
||||
// --- Earnings (same as premium for now) ---
|
||||
$earningsToday = $premiumToday;
|
||||
$earningsMonth = $premiumMonth;
|
||||
$earningsYear = $premiumYear;
|
||||
|
||||
$last30 = date('Y-m-d H:i:s', strtotime('-30 days'));
|
||||
|
||||
// --- Quotation pending for agent (last 30 days) ---
|
||||
$quotationsPending = $this->db->table('partner_enquiry pe')
|
||||
->select('pe.* , I.name as insurer_name , I.short_name as insurer_short_name')
|
||||
->join('insurers I', 'I.id = pe.insurer_id', 'left')
|
||||
->where('pe.created_on >=', $last30)
|
||||
->where('pe.agent_id',$agent_id)
|
||||
->where('pe.status','Awaiting Quotation')
|
||||
->orderBy('pe.created_on', 'DESC')
|
||||
->get()
|
||||
->getResultArray();
|
||||
|
||||
// --- Policy pending for agent (last 30 days) ---
|
||||
$policiesPending = $this->db->table('partner_enquiry pe')
|
||||
->select('pe.* , I.name as insurer_name , I.short_name as insurer_short_name')
|
||||
->join('insurers I', 'I.id = pe.insurer_id', 'left')
|
||||
->where('pe.created_on >=', $last30)
|
||||
->where('pe.agent_id',$agent_id)
|
||||
->where('pe.status','Quotation Accepted')
|
||||
->orderBy('pe.created_on', 'DESC')
|
||||
->get()
|
||||
->getResultArray();
|
||||
|
||||
$result = [
|
||||
'policies_issued' => [
|
||||
'today' => $policiesToday,
|
||||
'month' => $policiesMonth,
|
||||
'year' => $policiesYear,
|
||||
],
|
||||
'premium_value' => [
|
||||
'today' => $premiumToday,
|
||||
'month' => $premiumMonth,
|
||||
'year' => $premiumYear,
|
||||
],
|
||||
'earnings' => [
|
||||
'today' => $earningsToday,
|
||||
'month' => $earningsMonth,
|
||||
'year' => $earningsYear,
|
||||
],
|
||||
'quotations_pending' => $quotationsPending,
|
||||
'policies_pending' => $policiesPending,
|
||||
];
|
||||
|
||||
|
||||
|
||||
return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user