diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index dcf7f56..d913287 100644 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -559,6 +559,69 @@ class DashboardController extends ResourceController } } + + public function newDashboard(){ + + $manager_id = $this->request->getGet('sales_executive_id'); + + // Initialize the details array to ensure the final output is always structured. + $details = [ 'brokerWise' => [], 'productWise' => [], 'insurerWise' => []]; + $code = 200; + $message = "new Dashboard Data Retrieved Successfully"; + + try { + // 1. Fetch all data concurrently (or sequentially, as shown) + $details['brokerWise'] = $this->brokerWise1($sales_executive_id); + $details['productWise'] = $this->productWise1($sales_executive_id); + $details['insurerWise'] = $this->insurerWise1($sales_executive_id); + + // 2. Check for overall emptiness (optional, but good practice) + $is_empty = array_reduce($details, function ($carry, $item) { + return $carry && empty($item); + }, true); + + if ($is_empty) { + // Throw a 404 if ALL data sections are empty + throw new \RuntimeException('No Data Found', 404); + } + + // 3. Return a successful, combined JSON response + return $this->response->setJSON([ + 'status' => 'success', + 'data' => $details, // Contains the nested arrays: brokerWise, productWise, insurerWise + 'code' => 200, + 'message' => $message, + 'ref' => 'NIL' + ])->setStatusCode(200); + + } catch (\Throwable $e) { + // --- Centralized Error Handling Logic --- + $code = ($e->getCode() && $e->getCode() >= 100 && $e->getCode() < 600) + ? $e->getCode() : 500; + + $isDbError = $e instanceof \CodeIgniter\Database\Exceptions\DatabaseException + || $e instanceof \mysqli_sql_exception + || $e instanceof \PDOException; + + if ($isDbError) { + // Log the full error, but return minimal info for security + $ref = $e->getFile() . " / LN : " . $e->getLine(); + } else { + // This catches the \RuntimeException for "No Data found" (code 404) + $ref = "Application exception occurred"; + } + + // Return an error JSON response + return $this->response->setJSON([ + 'status' => 'error', + 'data' => [], // Return empty data on error + 'code' => $e->getCode(), + 'message' => $e->getMessage(), + 'ref' => $ref, + ])->setStatusCode($code); + } + } + //Step 1.1 public function insurerWise($manager_id){ @@ -614,7 +677,7 @@ class DashboardController extends ResourceController "); $builder->join('partner_quotation pq', 'pq.id = pp.quotation_id', 'left'); - $builder->join('insurers i', 'i.id = pq.insurer_id and i.is_active = 1', 'left'); + $builder->join('insurers i', 'i.id = pq.insurer_id', 'left'); $builder->where(" pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') @@ -622,6 +685,7 @@ class DashboardController extends ResourceController ", null, false); $builder->where('pp.manager_id',$manager_id); + $builder->where('i.is_active',1); $builder->where("pq.insurer_id != 0"); $builder->groupBy('pq.insurer_id'); @@ -896,4 +960,209 @@ class DashboardController extends ResourceController $builder->orderBy('created_date_sql_formatted', 'DESC'); return $builder->get()->getResultArray(); } + + //Step 5.1 + public function insurerWise1($sales_executive_id){ + + $builder = $this->db->table('partner_policy pp'); + + $builder->select(" + DATE_FORMAT(CURRENT_DATE(), '%b') AS curr_month, + YEAR(CURRENT_DATE()) AS year_of_curr_month, + DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%b') AS pre_month, + YEAR(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) AS year_of_last_month, + i.name, + i.short_name, + i.id AS insurer_id, + pq.insurer_id AS PQ_insurer_id, + pq.insurer_id, + pp.insured_name, + + COUNT( + CASE + WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) + AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + THEN pp.client_policy_id + ELSE NULL + END + ) AS total_policies_current_month, + + SUM( + CASE + WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) + AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + THEN pp.premium_amount + ELSE 0 + END + ) AS total_premium_current_month, + + COUNT( + CASE + WHEN pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') + THEN pp.client_policy_id + ELSE NULL + END + ) AS total_policies_pre_month, + + SUM( + CASE + WHEN pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') + THEN pp.premium_amount + ELSE 0 + END + ) AS total_premium_pre_month + "); + + $builder->join('partner_quotation pq', 'pq.id = pp.quotation_id', 'left'); + $builder->join('insurers i', 'i.id = pq.insurer_id', 'left'); + + $builder->where(" + pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + ", null, false); + + $builder->where('pp.manager_id',$manager_id); + $builder->where('i.is_active',1); + $builder->where("pq.insurer_id != 0"); + $builder->groupBy('pq.insurer_id'); + $builder->orderBy('pq.insurer_id'); + + $query = $builder->get(); + $result = $query->getResultArray(); + return $result; + + } + + //Step 5.2 + public function brokerWise2($sales_executive_id){ + + $builder = $this->db->table('partner_policy pp'); + $builder->select(" + DATE_FORMAT(CURRENT_DATE(), '%b') AS curr_month, + YEAR(CURRENT_DATE()) AS year_of_curr_month, + DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%b') AS pre_month, + YEAR(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) AS year_of_last_month, + pb.name AS broker_name, + pb.id AS broker_id, + pe.broker_id AS PE_broker_id, + + COUNT( + CASE + WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) + AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + THEN pp.client_policy_id + ELSE NULL + END + ) AS total_policies_current_month, + + SUM( + CASE + WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) + AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + THEN pp.premium_amount + ELSE 0 + END + ) AS total_premium_current_month, + + COUNT( + CASE + WHEN pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') + THEN pp.client_policy_id + ELSE NULL + END + ) AS total_policies_pre_month, + + SUM( + CASE + WHEN pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') + THEN pp.premium_amount + ELSE 0 + END + ) AS total_premium_pre_month + "); + + $builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left'); + $builder->join('partner_brokers pb', 'pb.id = pe.broker_id', 'left'); + + $builder->where(" + pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + ", null, false); + + $builder->where('pp.manager_id',$manager_id); + + $builder->groupBy('pb.id'); + $builder->orderBy('pb.id'); + + $query = $builder->get(); + $result = $query->getResultArray(); + return $result; + } + + //Step 5.3 + public function productWise3($sales_executive_id){ + $builder = $this->db->table('partner_policy pp'); + $builder->select(" + DATE_FORMAT(CURRENT_DATE(), '%b') AS curr_month, + YEAR(CURRENT_DATE()) AS year_of_curr_month, + DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%b') AS pre_month, + YEAR(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) AS year_of_last_month, + pp.vehicle_type, + + COUNT( + CASE + WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) + AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + THEN pp.client_policy_id + ELSE NULL + END + ) AS total_policies_current_month, + + SUM( + CASE + WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) + AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + THEN pp.premium_amount + ELSE 0 + END + ) AS total_premium_current_month, + + COUNT( + CASE + WHEN pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') + THEN pp.client_policy_id + ELSE NULL + END + ) AS total_policies_pre_month, + + SUM( + CASE + WHEN pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') + THEN pp.premium_amount + ELSE 0 + END + ) AS total_premium_pre_month + "); + + $builder->where(" + pp.created_on >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.created_on < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + ", null, false); + + $builder->where('pp.manager_id',$manager_id); + + $builder->groupBy('pp.vehicle_type'); + + $query = $builder->get(); + + $result = $query->getResultArray(); + return $result; + + } }