query("SELECT COUNT(*) FROM productos"); $total_products = $stmt->fetchColumn(); // Obtener stock por ciudad y producto, ordenando las ciudades por stock total $stock_stmt = $pdo->query(" SELECT c.nombre AS ciudad, p.nombre AS producto, s.stock_actual FROM stock_por_ciudad s JOIN ciudades c ON s.ciudad_id = c.id JOIN productos p ON s.producto_id = p.id JOIN (SELECT ciudad_id, SUM(stock_actual) as total_stock FROM stock_por_ciudad GROUP BY ciudad_id) as stock_totales ON c.id = stock_totales.ciudad_id WHERE s.stock_actual > 0 ORDER BY stock_totales.total_stock DESC, p.nombre; "); $stock_data = $stock_stmt->fetchAll(PDO::FETCH_ASSOC); // Agrupar por ciudad $stock_por_ciudad = []; foreach ($stock_data as $row) { $stock_por_ciudad[$row['ciudad']][] = [ 'producto' => $row['producto'], 'stock' => $row['stock_actual'] ]; } ?>

Bienvenido a tu Panel de Control

Aquí tienes un resumen de tu aplicación.

Total de Productos

Distribución de Stock
Stock por Ciudad y Producto

No hay datos de stock disponibles.

$productos): $ciudad_id = 'ciudad_' . $i++; ?>

Producto Stock
[ 'bg' => 'rgba(40, 167, 69, 0.8)', // Verde fondo 'border' => 'rgba(40, 167, 69, 1)' // Verde borde ] ]; if (!empty($stock_por_ciudad)) { $color_index = 0; foreach ($stock_por_ciudad as $ciudad => $productos) { $chart_labels[] = $ciudad; // Asignar color if (isset($city_color_map[$ciudad])) { $chart_bg_colors[] = $city_color_map[$ciudad]['bg']; $chart_border_colors[] = $city_color_map[$ciudad]['border']; } else { // Asignar un color de la paleta $chart_bg_colors[] = $color_palette_bg[$color_index % count($color_palette_bg)]; $chart_border_colors[] = $color_palette_border[$color_index % count($color_palette_border)]; $color_index++; } $total_stock = 0; foreach ($productos as $producto) { $total_stock += $producto['stock']; } $chart_data[] = $total_stock; } } ?>