From f471fbd1dab2c197c8da321ed44cbf7b435e2a18 Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Tue, 9 Dec 2025 17:49:01 +0530 Subject: [PATCH] FIX_productivity Dashboard --- app/Controllers/DashboardController.php | 297 +++++++++++------------- 1 file changed, 134 insertions(+), 163 deletions(-) diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index bc3fbda..f3752f8 100644 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -571,8 +571,8 @@ class DashboardController extends ResourceController try { // 1. Fetch all data concurrently (or sequentially, as shown) - $details['StaffWise'] = $this->productivityStaffWise($manager_id); - $details['ProductWise'] = $this->productivityProductWise($manager_id); + $details['StaffWise'] = $this->staffWiseProductList($manager_id); + // $details['ProductWise'] = $this->productivityProductWise($manager_id); // 2. Check for overall emptiness (optional, but good practice) $is_empty = array_reduce($details, function ($carry, $item) { @@ -640,8 +640,8 @@ class DashboardController extends ResourceController COUNT( CASE - WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) - AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + WHEN MONTH(pp.issued_date) = MONTH(CURRENT_DATE()) + AND YEAR(pp.issued_date) = YEAR(CURRENT_DATE()) THEN pp.client_policy_id ELSE NULL END @@ -649,8 +649,8 @@ class DashboardController extends ResourceController SUM( CASE - WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) - AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + WHEN MONTH(pp.issued_date) = MONTH(CURRENT_DATE()) + AND YEAR(pp.issued_date) = YEAR(CURRENT_DATE()) THEN pp.premium_amount ELSE 0 END @@ -658,8 +658,8 @@ class DashboardController extends ResourceController 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') + WHEN pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') THEN pp.client_policy_id ELSE NULL END @@ -667,8 +667,8 @@ class DashboardController extends ResourceController 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') + WHEN pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') THEN pp.premium_amount ELSE 0 END @@ -679,8 +679,8 @@ class DashboardController extends ResourceController $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') + pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') ", null, false); $builder->where('pp.manager_id',$manager_id); @@ -711,8 +711,8 @@ class DashboardController extends ResourceController COUNT( CASE - WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) - AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + WHEN MONTH(pp.issued_date) = MONTH(CURRENT_DATE()) + AND YEAR(pp.issued_date) = YEAR(CURRENT_DATE()) THEN pp.client_policy_id ELSE NULL END @@ -720,8 +720,8 @@ class DashboardController extends ResourceController SUM( CASE - WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) - AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + WHEN MONTH(pp.issued_date) = MONTH(CURRENT_DATE()) + AND YEAR(pp.issued_date) = YEAR(CURRENT_DATE()) THEN pp.premium_amount ELSE 0 END @@ -729,8 +729,8 @@ class DashboardController extends ResourceController 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') + WHEN pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') THEN pp.client_policy_id ELSE NULL END @@ -738,8 +738,8 @@ class DashboardController extends ResourceController 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') + WHEN pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') THEN pp.premium_amount ELSE 0 END @@ -750,8 +750,8 @@ class DashboardController extends ResourceController $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') + pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') ", null, false); $builder->where('pp.manager_id',$manager_id); @@ -776,8 +776,8 @@ class DashboardController extends ResourceController COUNT( CASE - WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) - AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + WHEN MONTH(pp.issued_date) = MONTH(CURRENT_DATE()) + AND YEAR(pp.issued_date) = YEAR(CURRENT_DATE()) THEN pp.client_policy_id ELSE NULL END @@ -785,8 +785,8 @@ class DashboardController extends ResourceController SUM( CASE - WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) - AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) + WHEN MONTH(pp.issued_date) = MONTH(CURRENT_DATE()) + AND YEAR(pp.issued_date) = YEAR(CURRENT_DATE()) THEN pp.premium_amount ELSE 0 END @@ -794,8 +794,8 @@ class DashboardController extends ResourceController 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') + WHEN pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') THEN pp.client_policy_id ELSE NULL END @@ -803,8 +803,8 @@ class DashboardController extends ResourceController 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') + WHEN pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') THEN pp.premium_amount ELSE 0 END @@ -812,8 +812,8 @@ class DashboardController extends ResourceController "); $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') + pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') ", null, false); $builder->where('pp.manager_id',$manager_id); @@ -847,8 +847,8 @@ class DashboardController extends ResourceController $builder->join('partner_agent pa', 'pp.agent_id = pa.id', 'inner'); $builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left'); - $builder->where("MONTH(pp.created_on) = MONTH('$customDate')", null, false); - $builder->where("YEAR(pp.created_on) = YEAR('$customDate')", null, false); + $builder->where("MONTH(pp.issued_date) = MONTH('$customDate')", null, false); + $builder->where("YEAR(pp.issued_date) = YEAR('$customDate')", null, false); $builder->where('pp.manager_id',$manager_id); @@ -880,8 +880,8 @@ class DashboardController extends ResourceController $builder->join('partner_agent pa', 'pp.agent_id = pa.id', 'inner'); $builder->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left'); - $builder->where("MONTH(pp.created_on) = MONTH('$customDate')", null, false); - $builder->where("YEAR(pp.created_on) = YEAR('$customDate')", null, false); + $builder->where("MONTH(pp.issued_date) = MONTH('$customDate')", null, false); + $builder->where("YEAR(pp.issued_date) = YEAR('$customDate')", null, false); $builder->where('pp.manager_id',$manager_id); @@ -912,7 +912,7 @@ class DashboardController extends ResourceController $builder->join( 'partner_policy pp', - "pa.id = pp.agent_id AND pp.created_on >= $interval", + "pa.id = pp.agent_id AND pp.issued_date >= $interval", 'left', false // IMPORTANT → allows raw SQL ); @@ -947,154 +947,125 @@ class DashboardController extends ResourceController WHEN pa.is_active = 1 THEN 'Active Agent' ELSE 'Inactive Agent' END AS agent_status, - DATE_FORMAT(pp.created_on, '%d-%m-%Y') AS created_date_ui_formatted, - pp.created_on AS created_date_sql_formatted + DATE_FORMAT(pp.issued_date, '%d-%m-%Y') AS created_date_ui_formatted, + pp.issued_date AS created_date_sql_formatted "); $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); // raw SQL + $builder->where("pp.issued_date >= $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(); } - //Step 5.1 - public function productivityStaffWise($manager_id){ - + // Step 5 + public function staffWiseProductList($manager_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, - pa.sales_executive_id, - pse.name as sales_executive_name, - pse.id as PSE_sales_executive_id, - pa.id,pp.manager_id, - - - COUNT( - CASE - WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) - AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) - THEN pp.client_policy_id - 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 - 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 - "); + 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, + + pa.sales_executive_id, + pse.name as sales_executive_name, + pp.manager_id, + pp.vehicle_type AS vechile_type, + COUNT( + CASE + WHEN MONTH(pp.issued_date) = MONTH(CURRENT_DATE()) + AND YEAR(pp.issued_date) = YEAR(CURRENT_DATE()) + THEN pp.client_policy_id + END + ) AS total_policies_current_month, + + SUM( + CASE + WHEN MONTH(pp.issued_date) = MONTH(CURRENT_DATE()) + AND YEAR(pp.issued_date) = YEAR(CURRENT_DATE()) + THEN pp.premium_amount ELSE 0 + END + ) AS total_premium_current_month, + + COUNT( + CASE + WHEN pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') + THEN pp.client_policy_id + END + ) AS total_policies_pre_month, + + SUM( + CASE + WHEN pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < 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('partner_agent pa', 'pa.id = pp.agent_id', 'left'); $builder->join('partner_sales_executive pse', 'pse.id = pa.sales_executive_id', 'left'); + + // Date filters $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') + pp.issued_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') + AND pp.issued_date < DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-01') ", null, false); - $builder->where('pp.manager_id',$manager_id); - $builder->where('pa.sales_executive_id IS NOT NULL'); - $builder->where('pse.is_active',1); - $builder->groupBy('pa.sales_executive_id'); - $builder->orderBy('pa.sales_executive_id'); + $builder->where('pp.manager_id', $manager_id); + $builder->where('pa.sales_executive_id IS NOT NULL', null, false); + $builder->where('pse.is_active', 1); - $query = $builder->get(); - $result = $query->getResultArray(); - return $result; + // Group by sales exec + vehicle type + $builder->groupBy("pa.sales_executive_id, pp.vehicle_type"); + $builder->orderBy("pa.sales_executive_id"); + $rows = $builder->get()->getResultArray(); + + // Final compilation + $final = []; + + foreach ($rows as $row) { + $se_id = $row['sales_executive_id']; + + if (!isset($final[$se_id])) { + $final[$se_id] = [ + "curr_month" => $row["curr_month"], + "year_of_curr_month" => $row["year_of_curr_month"], + "pre_month" => $row["pre_month"], + "year_of_last_month" => $row["year_of_last_month"], + + "sales_executive_id" => $row["sales_executive_id"], + "sales_executive_name" => $row["sales_executive_name"], + "manager_id" => $row["manager_id"], + + "products_list" => [], + "total_products" => 0 + ]; + } + + // Add each product entry + $final[$se_id]["products_list"][] = [ + "vechile_type" => $row["vechile_type"], + "total_policies_current_month" => $row["total_policies_current_month"], + "total_premium_current_month" => $row["total_premium_current_month"], + "total_policies_pre_month" => $row["total_policies_pre_month"], + "total_premium_pre_month" => $row["total_premium_pre_month"] + ]; + } + + // Add total_products count + // foreach ($final as $key => $value) { + // $final[$key]["total_products"] = count($value["products_list"]); + // } + + return array_values($final); } - //Step 5.2 - public function productivityProductWise($manager_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, - pse.name as sales_executive_name, - pse.id as PSE_sales_executive_id, - pa.id, - COUNT( - CASE - WHEN MONTH(pp.created_on) = MONTH(CURRENT_DATE()) - AND YEAR(pp.created_on) = YEAR(CURRENT_DATE()) - THEN pp.client_policy_id - 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 - 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->join('partner_agent pa', 'pa.id = pp.agent_id', 'left'); - $builder->join('partner_sales_executive pse', 'pse.id = pa.sales_executive_id', 'left'); - $builder->where('pp.manager_id',$manager_id); - $builder->where('pa.sales_executive_id IS NOT NULL'); - $builder->where('pse.is_active',1); - $builder->groupBy('pa.sales_executive_id,pp.vehicle_type'); - $builder->orderBy('pa.sales_executive_id'); - - $query = $builder->get(); - - $result = $query->getResultArray(); - return $result; - - } }