db = \Config\Database::connect(); } public function managerDashboard() { $manager_id = $this->request->getGet('manager_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('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 --- $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('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) --- $earningsToday = $premiumToday; $earningsMonth = $premiumMonth; $earningsYear = $premiumYear; $last30 = date('Y-m-d H:i:s', strtotime('-30 days')); // --- 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) ->where('pa.manager_id',$manager_id) ->get() ->getResultArray(); if(count($performanceAgents) == 1 && $performanceAgents[0]['agent_name'] == null){ $performanceAgents = []; } // --- Un assigned enquiry --- $unassignedEnquiry = $this->db->table('partner_enquiry pe') ->where('pe.assigned_to', 0) ->where('pe.manager_id', $manager_id) ->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(); // // --- Staff level Quotations Approva Pending --- // $quotationsApprovalPending = $this->db->table('partner_staff ps') // ->select('ps.name as staff_name, COUNT(pe.id) as total_approval_pending') // ->join('partner_enquiry pe', "pe.assigned_to = ps.id AND pe.status = 'Quotation Created'", 'left') // ->where('ps.role_id', 2) // ->where('ps.manager_id',$manager_id) // ->groupBy('ps.id, ps.name') // ->get()->getResultArray(); // // --- 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(); $staffLevelPendingSummary = $this->db->table('partner_enquiry pe') ->select(" ps.name AS staff_name, ps.id AS staff_id, ph.name AS handler_name, COUNT(pe.id) AS total_assigned, SUM(CASE WHEN pe.status = 'Awaiting Quotation' THEN 1 ELSE 0 END) AS awaiting_quotation, SUM(CASE WHEN pe.status = 'Quotation Created' THEN 1 ELSE 0 END) AS pending_quotation_approval, SUM(CASE WHEN pe.status = 'Quotation Accepted' THEN 1 ELSE 0 END) AS awaiting_policy, SUM(CASE WHEN pe.status = 'Policy Created' THEN 1 ELSE 0 END) AS policy_created ") ->join('partner_staff ps', 'ps.id = pe.assigned_to', 'left') ->join('partner_staff ph', 'ph.id = ps.handler_id', 'left') ->where('pe.manager_id', $manager_id) ->where('pe.is_active', 1) ->groupBy('pe.assigned_to') ->orderBy('ps.name', 'ASC') ->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, ], 'agents_performance' => $performanceAgents, 'unassigned_enquiry' => $unassignedEnquiry, // 'quotations_pending' => $quotationsPending, // 'quotations_approval_pending' => $quotationsApprovalPending, // 'policies_pending' => $policiesPending, 'staff_level_pending_summary' => $staffLevelPendingSummary ]; return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200); } public function handlerDashboard() { $handler_id = $this->request->getGet('handler_id'); $manager_id = $this->request->getGet('manager_id'); if (empty($handler_id)) { return $this->response->setJSON([ 'status' => false, 'message' => 'Handler ID is required.' ]); } $staffLevelPendingSummary = $this->db->table('partner_enquiry pe') ->select(" ps.name AS staff_name, ps.id AS staff_id, COUNT(pe.id) AS total_assigned, SUM(CASE WHEN pe.status = 'Awaiting Quotation' THEN 1 ELSE 0 END) AS awaiting_quotation, SUM(CASE WHEN pe.status = 'Quotation Created' THEN 1 ELSE 0 END) AS pending_quotation_approval, SUM(CASE WHEN pe.status = 'Quotation Accepted' THEN 1 ELSE 0 END) AS awaiting_policy, SUM(CASE WHEN pe.status = 'Policy Created' THEN 1 ELSE 0 END) AS policy_created ") ->join('partner_staff ps', 'ps.id = pe.assigned_to', 'left') ->where('ps.handler_id', $handler_id) ->where('pe.is_active', 1) ->groupBy('pe.assigned_to') ->orderBy('ps.name', 'ASC') ->get() ->getResultArray(); $last30 = date('Y-m-d H:i:s', strtotime('-30 days')); // --- 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) ->where('pa.manager_id',$manager_id) ->get() ->getResultArray(); if(count($performanceAgents) == 1 && $performanceAgents[0]['agent_name'] == null) { $performanceAgents = []; } // --- Un assigned enquiry --- $unassignedEnquiry = $this->db->table('partner_enquiry pe') ->where('pe.assigned_to', 0) ->where('pe.manager_id', $manager_id) ->get() ->getResultArray(); $result = [ 'staff_level_pending_summary' => $staffLevelPendingSummary, 'agents_performance' => $performanceAgents, 'unassigned_enquiry' => $unassignedEnquiry, ]; 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.* ') ->where('pe.assigned_to',$staff_id) ->whereIn('pe.status',["Awaiting Quotation","Quotation Rejected"]) ->orderBy('pe.created_on', 'DESC') ->get() ->getResultArray(); // --- Quotation Approval pending for staff (last 30 days) --- $quotationsApprovalPending = $this->db->table('partner_enquiry pe') ->select('pe.* ') ->where('pe.assigned_to',$staff_id) ->whereIn('pe.status',["Quotation Created"]) ->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('partner_quotation Q', 'Q.enquiry_id = pe.id AND Q.status = "Accepted"', 'left') ->join('insurers I', 'I.id = Q.insurer_id', 'left') ->where('pe.assigned_to',$staff_id) ->whereIn('pe.status',["Quotation Accepted"]) ->orderBy('pe.created_on', 'DESC') ->get() ->getResultArray(); $result = [ 'quotations_pending' => $quotationsPending, 'quotations_approval_pending' => $quotationsApprovalPending, 'quotations_rejected' => $quotationsApprovalPending, '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.* ') ->where('pe.created_on >=', $last30) ->where('pe.agent_id',$agent_id) ->whereIn('pe.status',["Awaiting Quotation","Quotation Rejected"]) ->orderBy('pe.created_on', 'DESC') ->get() ->getResultArray(); // --- Quotation approval pending for agent (last 30 days) --- $quotationsApprovalPending = $this->db->table('partner_enquiry pe') ->select('pe.* ') ->where('pe.created_on >=', $last30) ->where('pe.agent_id',$agent_id) ->whereIn('pe.status',["Awaiting Created"]) ->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('partner_quotation Q', 'Q.enquiry_id = pe.id AND Q.status = "Accepted"', 'left') ->join('insurers I', 'I.id = Q.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, 'quotations_approval_pending' => $quotationsApprovalPending, 'policies_pending' => $policiesPending, ]; return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200); } }