feat: Implement conversion rate as (Completed Orders / Total Orders) × 100 and fix Recharts prop warning

This commit is contained in:
dwindown
2025-11-04 18:36:45 +07:00
parent 3c76d571cc
commit a2dd6a98a3
2 changed files with 19 additions and 6 deletions

View File

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

View File

@@ -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,
], ],
], ],