diff --git a/dashboard.php b/dashboard.php index 6181fbd5..b4a6b445 100644 --- a/dashboard.php +++ b/dashboard.php @@ -153,7 +153,7 @@ if ($user_role === 'Administrador' || $user_role === 'Control Logistico' || $use $stmt_completados = $pdo->prepare(" SELECT COUNT(*) FROM pedidos - WHERE asesor_id = ? AND estado = 'COMPLETADO ✅' AND MONTH(created_at) = ? AND YEAR(created_at) = ? + WHERE asesor_id = ? AND estado = 'COMPLETADO ✅' AND MONTH(COALESCE(fecha_completado, created_at)) = ? AND YEAR(COALESCE(fecha_completado, created_at)) = ? "); $stmt_completados->execute([$asesor['id'], $selected_month, $selected_year]); $total_completados = $stmt_completados->fetchColumn(); @@ -198,6 +198,7 @@ $pedidos_mensual_contraentrega_asesora = []; $asesoras_mensual = []; $asesoras_mensual_provincia = []; $asesoras_mensual_contraentrega = []; +$asesor_data_provincia = []; if ($user_role === 'Administrador' || $user_role === 'Control Logistico' || $user_role === 'Logistica' || $user_role === 'Asesor') { // 1. Obtener todas las asesoras @@ -211,18 +212,27 @@ if ($user_role === 'Administrador' || $user_role === 'Control Logistico' || $use $asesora_ids = array_column($asesoras_mensual, 'id'); if (!empty($asesora_ids)) { - // PROVINCIA + // PROVINCIA (se cuenta por fecha de registro del pedido) $estados_provincia = ['ROTULADO 📦', 'EN TRANSITO 🚛', 'EN DESTINO 🏬', 'COMPLETADO ✅']; $placeholders_estados_prov = implode(',', array_fill(0, count($estados_provincia), '?')); $placeholders_asesores = implode(',', array_fill(0, count($asesora_ids), '?')); + $asesor_data_provincia = []; + foreach ($asesoras_mensual as $asesora) { + $asesor_data_provincia[$asesora['id']] = [ + 'nombre' => !empty($asesora['nombre_asesor']) ? $asesora['nombre_asesor'] : '', + 'pedidos' => array_fill_keys($estados_provincia, 0), + 'total' => 0 + ]; + } + $provincia_date_expr = 'p.created_at'; // Fecha de registro del envío $stmt_prov = $pdo->prepare(" - SELECT DAY(created_at) as dia, asesor_id, COUNT(id) as total_pedidos - FROM pedidos - WHERE estado IN ($placeholders_estados_prov) - AND MONTH(created_at) = ? AND YEAR(created_at) = ? - AND asesor_id IN ($placeholders_asesores) - GROUP BY dia, asesor_id + SELECT DAY($provincia_date_expr) as dia, p.asesor_id, COUNT(p.id) as total_pedidos + FROM pedidos p + WHERE p.estado IN ($placeholders_estados_prov) + AND MONTH($provincia_date_expr) = ? AND YEAR($provincia_date_expr) = ? + AND p.asesor_id IN ($placeholders_asesores) + GROUP BY dia, p.asesor_id "); $params_prov = array_merge($estados_provincia, [$selected_month, $selected_year], $asesora_ids); $stmt_prov->execute($params_prov); @@ -250,6 +260,36 @@ if ($user_role === 'Administrador' || $user_role === 'Control Logistico' || $use return $total_a <=> $total_b; // de menor a mayor }); + $stmt_resumen_prov = $pdo->prepare(" + SELECT p.asesor_id, p.estado, COUNT(p.id) as total_pedidos + FROM pedidos p + WHERE p.estado IN ($placeholders_estados_prov) + AND MONTH($provincia_date_expr) = ? AND YEAR($provincia_date_expr) = ? + AND p.asesor_id IN ($placeholders_asesores) + GROUP BY p.asesor_id, p.estado + "); + $stmt_resumen_prov->execute($params_prov); + $resumen_prov_data = $stmt_resumen_prov->fetchAll(PDO::FETCH_ASSOC); + + foreach ($resumen_prov_data as $row) { + $asesor_id = (int)$row['asesor_id']; + $estado = $row['estado']; + $total_pedidos = (int)$row['total_pedidos']; + + if (isset($asesor_data_provincia[$asesor_id])) { + $asesor_data_provincia[$asesor_id]['pedidos'][$estado] = $total_pedidos; + } + } + + foreach ($asesor_data_provincia as &$data_prov) { + $data_prov['total'] = array_sum($data_prov['pedidos']); + } + unset($data_prov); + + uasort($asesor_data_provincia, function ($a, $b) { + return $b['total'] <=> $a['total']; + }); + // CONTRAENTREGA $estados_contraentrega = ['RUTA_CONTRAENTREGA', 'RETORNADO', 'ENTREGA EXITOSA']; $placeholders_estados_contra = implode(',', array_fill(0, count($estados_contraentrega), '?')); @@ -623,14 +663,14 @@ $selected_month] . ' ' . $selected_year; ?>)
- +