FIX_productivity Dashboard

This commit is contained in:
sanjeev.p 2025-12-09 17:49:01 +05:30
parent f837f5e4c6
commit f471fbd1da

View File

@ -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;
}
}