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/ |