feat: Implement conversion rate as (Completed Orders / Total Orders) × 100 and fix Recharts prop warning
This commit is contained in:
@@ -511,8 +511,8 @@ export default function Dashboard() {
|
|||||||
>
|
>
|
||||||
<Pie
|
<Pie
|
||||||
data={sortedOrderStatus}
|
data={sortedOrderStatus}
|
||||||
dataKey={(entry) => entry.count || entry.value || 0}
|
dataKey="count"
|
||||||
nameKey={(entry) => entry.status || entry.name || 'Unknown'}
|
nameKey="status"
|
||||||
cx="50%"
|
cx="50%"
|
||||||
cy="50%"
|
cy="50%"
|
||||||
innerRadius={70}
|
innerRadius={70}
|
||||||
|
|||||||
@@ -368,7 +368,7 @@ class AnalyticsController {
|
|||||||
ORDER BY count DESC
|
ORDER BY count DESC
|
||||||
");
|
");
|
||||||
|
|
||||||
// Format status distribution
|
// Format status distribution and calculate conversion rate
|
||||||
$formatted_status = [];
|
$formatted_status = [];
|
||||||
$status_colors = [
|
$status_colors = [
|
||||||
'wc-completed' => '#10b981',
|
'wc-completed' => '#10b981',
|
||||||
@@ -380,11 +380,21 @@ class AnalyticsController {
|
|||||||
'wc-failed' => '#dc2626',
|
'wc-failed' => '#dc2626',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$total_all_orders = 0;
|
||||||
|
$completed_orders = 0;
|
||||||
|
|
||||||
foreach ($orderStatusDistribution as $status) {
|
foreach ($orderStatusDistribution as $status) {
|
||||||
$status_name = str_replace('wc-', '', $status->status);
|
$status_name = str_replace('wc-', '', $status->status);
|
||||||
|
$count = intval($status->count);
|
||||||
|
|
||||||
|
$total_all_orders += $count;
|
||||||
|
if ($status->status === 'wc-completed') {
|
||||||
|
$completed_orders = $count;
|
||||||
|
}
|
||||||
|
|
||||||
$formatted_status[] = [
|
$formatted_status[] = [
|
||||||
'status' => ucfirst($status_name),
|
'status' => ucfirst($status_name),
|
||||||
'count' => intval($status->count),
|
'count' => $count,
|
||||||
'color' => $status_colors[$status->status] ?? '#6b7280',
|
'color' => $status_colors[$status->status] ?? '#6b7280',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -392,6 +402,9 @@ class AnalyticsController {
|
|||||||
// Calculate metrics
|
// Calculate metrics
|
||||||
$avg_order_value = $total_orders > 0 ? round($total_revenue / $total_orders, 2) : 0;
|
$avg_order_value = $total_orders > 0 ? round($total_revenue / $total_orders, 2) : 0;
|
||||||
|
|
||||||
|
// Calculate conversion rate: (Completed Orders / Total Orders) × 100
|
||||||
|
$conversion_rate = $total_all_orders > 0 ? round(($completed_orders / $total_all_orders) * 100, 2) : 0.00;
|
||||||
|
|
||||||
// Get top products
|
// Get top products
|
||||||
$products_table = $wpdb->prefix . 'wc_order_product_lookup';
|
$products_table = $wpdb->prefix . 'wc_order_product_lookup';
|
||||||
$top_products = $wpdb->get_results($wpdb->prepare("
|
$top_products = $wpdb->get_results($wpdb->prepare("
|
||||||
@@ -465,8 +478,8 @@ class AnalyticsController {
|
|||||||
'change' => 0,
|
'change' => 0,
|
||||||
],
|
],
|
||||||
'conversionRate' => [
|
'conversionRate' => [
|
||||||
'today' => 0, // TODO: Calculate
|
'today' => $conversion_rate,
|
||||||
'yesterday' => 0,
|
'yesterday' => 0, // TODO: Calculate previous period
|
||||||
'change' => 0,
|
'change' => 0,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user