diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 658b32c..2f8c5d2 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -129,7 +129,7 @@ $routes->group('api', ['filter' => 'appSignature'], function ($routes) { $routes->get('dashboard/handlerDashboard', 'DashboardController::handlerDashboard'); $routes->get('dashboard/staffDashboard', 'DashboardController::staffDashboard'); $routes->get('dashboard/agentDashboard', 'DashboardController::agentDashboard'); - + $routes->get("dashboard/businessDashboard", "DashboardController::businessDashboard"); $routes->get("dashboard/partnerDashboard", "DashboardController::partnerDashboard"); diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index b2f411d..4670832 100644 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -875,11 +875,11 @@ class DashboardController extends ResourceController $builder = $this->db->table('partner_policy pp'); $builder->select(" - pp.premium_amount, - pp.agent_id AS PP_agent_id, pa.id AS agent_id, pa.name AS agent_name, pa.agent_code AS agent_code, + pp.agent_id AS PP_agent_id, + SUM(pp.premium_amount) AS total_premium_amount, CASE WHEN pa.is_active = 1 THEN 'Active Agent' ELSE 'Inactive Agent' @@ -887,20 +887,13 @@ class DashboardController extends ResourceController DATE_FORMAT(pp.created_on, '%d-%m-%Y') AS created_date_ui_formatted, pp.created_on AS created_date_sql_formatted "); - - $builder->join( - 'partner_agent pa', - 'pa.id = pp.agent_id', - 'left' - ); - - $builder->where('pp.manager_id',$manager_id); - + $builder->join('partner_agent pa', 'pa.id = pp.agent_id', 'left'); + $builder->where('pp.manager_id', $manager_id); $builder->where('pp.premium_amount <', 50000); - $builder->where("pp.created_on >= $interval", null, false); // false = prevent escaping raw SQL - $builder->orderBy('pp.created_on', 'DESC'); - $result = $builder->get()->getResultArray(); - return $result; - + $builder->where("pp.created_on >= $interval", null, false); // raw SQL + $builder->groupBy('pa.id'); + $builder->orderBy('total_premium_amount', 'DESC'); + $builder->orderBy('created_date_sql_formatted', 'DESC'); + return $builder->get()->getResultArray(); } } diff --git a/app/Controllers/EnquiryController.php b/app/Controllers/EnquiryController.php index ce24d4c..eaa456d 100644 --- a/app/Controllers/EnquiryController.php +++ b/app/Controllers/EnquiryController.php @@ -682,11 +682,81 @@ class EnquiryController extends ResourceController return $this->respond(['status' => 'success','data' => $enquiryId ], 200); } - public function checkDuplicate() + public function checkVehicleDuplicate() { - $request = $this->request->getGet("reg_no"); - } + // --- 1. Input Validation --- + $reg_no = $this->request->getGet("reg_no"); + if (!$reg_no) { + return $this->response->setJSON([ + 'status' => 'error', + 'message' => 'Please provide a valid vehicle registration number.' + ])->setStatusCode(400); + } + + // --- 2. Step 1: Check in partner_enquiry (Active/Latest Record) --- + // Get the LATEST ACTIVE enquiry record for the registration number + $enquiry = $this->db->table("partner_enquiry") + ->select("*") + ->where("reg_no", $reg_no) + ->where("is_active", 1) // Only consider active enquiries + ->orderBy("id", "DESC") + ->get() + ->getRowArray(); + + // If no active enquiry is found, the vehicle is considered 'not' a duplicate + if (!$enquiry) { + return $this->response->setJSON([ + "status" => "not exists", + "message" => "No active record found for this vehicle number in enquiries." + ]); + } + + // NOTE: The previous check for $enquiry["is_active"] == 0 is now redundant + // because the query already filters for where("is_active", 1). + + // --- 3. Step 2: Check in partner_policy (Active Policy for Enquiry) --- + // Get the LATEST ACTIVE policy for the found enquiry + $policy = $this->db->table("partner_policy") + ->select("*") + ->where("enquiry_id", $enquiry["id"]) + ->where("is_active", 1) // Only consider active policies + ->orderBy("id", "DESC") + ->get() + ->getRowArray(); + + // If no active policy is found for the active enquiry, return "not" + if (!$policy) { + return $this->response->setJSON([ + "status" => "exists", + "message" => "Vehicle enquiry found but no active policy issued." + ]); + } + + // --- 4. Step 3: Compare end_date >= CURRENT_DATE --- + $currentDate = date("Y-m-d"); + + // The policy is active if the end_date is TODAY or in the FUTURE. + if ($policy["end_date"] >= $currentDate) { + // ACTIVE POLICY → 'exists' + $msg = $enquiry["name"]." with policy ".$policy["policy_number"]." for vehicle ".$reg_no." already exists and is active."; + + return $this->response->setJSON([ + "status" => "exists", + "message" => $msg, + "ref" => [ + "enquiry" => $enquiry, + "policy" => $policy + ] + ]); + } + + // POLICY expired (end_date is in the past) + return $this->response->setJSON([ + "status" => "not exists", + "message" => "Policy exists but is expired for vehicle number " . $reg_no + ]); + }