diff --git a/dashboard_principal.php b/dashboard_principal.php new file mode 100644 index 00000000..b2935e4b --- /dev/null +++ b/dashboard_principal.php @@ -0,0 +1,254 @@ +prepare("SELECT COUNT(*) as total_pedidos, SUM(monto_total) as total_dinero FROM pedidos WHERE DATE(created_at) = ? AND estado != 'RETORNADO'"); +$stmtHoy->execute([$hoy]); +$statsHoy = $stmtHoy->fetch(PDO::FETCH_ASSOC); + +// 2. Pedidos Pendientes (ROTULADO ?) +$stmtPendientes = $db->query("SELECT COUNT(*) FROM pedidos WHERE estado = 'ROTULADO ?'"); +$pendientes = $stmtPendientes->fetchColumn(); + +// 3. Recaudo Esperado (En tránsito, En destino, Ruta contraentrega) +$stmtRecaudo = $db->query("SELECT SUM(monto_debe) FROM pedidos WHERE estado IN ('EN TRANSITO ?', 'EN DESTINO ?', 'RUTA_CONTRAENTREGA') AND (estado_pago != 'Pagado' OR estado_pago IS NULL)"); +$recaudoEsperado = $stmtRecaudo->fetchColumn() ?: 0; + +// 4. Stock Crítico (menos de 5 unidades en total entre todas las sedes) +$stmtStock = $db->query("SELECT COUNT(*) FROM (SELECT product_id, SUM(quantity) as total_stock FROM stock_sedes GROUP BY product_id HAVING total_stock <= 5) as critico"); +$stockCritico = $stmtStock->fetchColumn() ?: 0; + +// 5. Datos para Gráfico de Ventas (Últimos 7 días) +$ventas7dias = []; +for ($i = 6; $i >= 0; $i--) { + $fecha = date('Y-m-d', strtotime("-$i days")); + $stmt = $db->prepare("SELECT COUNT(*) as cant, SUM(monto_total) as monto FROM pedidos WHERE DATE(created_at) = ? AND estado != 'RETORNADO'"); + $stmt->execute([$fecha]); + $res = $stmt->fetch(PDO::FETCH_ASSOC); + $ventas7dias[] = [ + 'fecha' => date('d/m', strtotime($fecha)), + 'cantidad' => $res['cant'] ?: 0, + 'monto' => $res['monto'] ?: 0 + ]; +} + +// 6. Estados de Pedidos +$stmtEstados = $db->query("SELECT estado, COUNT(*) as total FROM pedidos GROUP BY estado"); +$estadosData = $stmtEstados->fetchAll(PDO::FETCH_ASSOC); + +// 7. Top Productos +$stmtTopProd = $db->query("SELECT producto, COUNT(*) as ventas FROM pedidos GROUP BY producto ORDER BY ventas DESC LIMIT 5"); +$topProductos = $stmtTopProd->fetchAll(PDO::FETCH_ASSOC); + +// 8. Ventas por Asesor +$stmtAsesores = $db->query("SELECT u.nombre_asesor, COUNT(p.id) as total_pedidos, COALESCE(SUM(p.monto_total), 0) as total_monto + FROM users u + LEFT JOIN pedidos p ON u.id = p.asesor_id AND p.estado != 'RETORNADO' + WHERE u.role = 'Asesor' + GROUP BY u.id + ORDER BY total_monto DESC"); +$ventasAsesores = $stmtAsesores->fetchAll(PDO::FETCH_ASSOC); + +$pageTitle = "Dashboard Principal"; +include 'layout_header.php'; +?> + +
pedidos
+Por procesar
+En ruta / Contraentrega
+Productos < 5 unidades
+| Asesor | +Pedidos | +Total Ventas | +
|---|---|---|
| + | + | S/ | +