You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

175 lines
5.9 KiB

{% extends "Base.html" %}
{% block content %}
{% if user.is_authenticated %}
<div class="container my-4">
<h1 class="text-center mb-4">Dashboard - Inventario y Ventas</h1>
<!-- Fila de los resúmenes de datos -->
<div class="row mb-4">
<!-- Resumen de total de ventas -->
<div class="col-md-3 mb-3">
<div class="card bg-primary text-white">
<div class="card-body">
<h5 class="card-title">Total de Ventas</h5>
<p class="card-text">
<strong>${{ total_ventas|floatformat:2 }}</strong>
</p>
</div>
</div>
</div>
<!-- Resumen de productos en inventario -->
<div class="col-md-3 mb-3">
<div class="card bg-success text-white">
<div class="card-body">
<h5 class="card-title">Productos en Inventario</h5>
<p class="card-text">
<strong>{{ total_productos_en_inventario }}</strong>
</p>
</div>
</div>
</div>
<!-- Resumen de artículos vendidos -->
<div class="col-md-3 mb-3">
<div class="card bg-warning text-dark">
<div class="card-body">
<h5 class="card-title">Artículos Vendidos</h5>
<p class="card-text">
<strong>{{ total_articulos_vendidos }}</strong>
</p>
</div>
</div>
</div>
<!-- Resumen de proveedores -->
<div class="col-md-3 mb-3">
<div class="card bg-info text-white">
<div class="card-body">
<h5 class="card-title">Proveedores</h5>
<p class="card-text">
<strong>{{ total_proveedores }}</strong>
</p>
</div>
</div>
</div>
</div>
<!-- Fila para organizar los gráficos -->
<div class="row">
<!-- Gráfico Ventas por Bodega -->
<div class="col-md-6 mb-4">
<h4 class="text-center">Ventas por Bodega</h4>
<canvas id="ventasPorBodega"></canvas>
</div>
<!-- Gráfico Inventario Total -->
<div class="col-md-6 mb-4">
<h4 class="text-center">Inventario Total</h4>
<canvas id="inventarioTotal"></canvas>
</div>
</div>
<div class="row">
<!-- Gráfico Ventas por Artículo -->
<div class="col-md-6 mb-4">
<h4 class="text-center">Ventas por Artículo</h4>
<canvas id="ventasPorArticulo"></canvas>
</div>
<!-- Gráfico Precios de Artículos -->
<div class="col-md-6 mb-4">
<h4 class="text-center">Precios de Artículos</h4>
<canvas id="preciosArticulos"></canvas>
</div>
</div>
</div>
<script>
// Ventas por bodega
const ventasPorBodega = {{ ventas_por_bodega|safe }};
const bodegaLabels = ventasPorBodega.map(item => item.bodega__nombre_bodega);
const bodegaData = ventasPorBodega.map(item => item.total_ventas);
new Chart(document.getElementById('ventasPorBodega'), {
type: 'bar',
data: {
labels: bodegaLabels,
datasets: [{
label: 'Ventas Totales',
data: bodegaData,
backgroundColor: 'rgba(75, 192, 192, 0.2)',
borderColor: 'rgba(75, 192, 192, 1)',
borderWidth: 1
}]
}
});
// Inventario total por artículo
const inventarioTotal = {{ inventario_total|safe }};
const inventarioLabels = inventarioTotal.map(item => item.articulo__nombre_articulo);
const inventarioData = inventarioTotal.map(item => item.total);
new Chart(document.getElementById('inventarioTotal'), {
type: 'pie',
data: {
labels: inventarioLabels,
datasets: [{
label: 'Inventario Total',
data: inventarioData,
backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0'],
}]
}
});
// Ventas por artículo
const ventasPorArticulo = {{ ventas_por_articulo|safe }};
const articuloLabels = ventasPorArticulo.map(item => item.articulo__nombre_articulo);
const articuloData = ventasPorArticulo.map(item => item.total);
new Chart(document.getElementById('ventasPorArticulo'), {
type: 'line',
data: {
labels: articuloLabels,
datasets: [{
label: 'Unidades Vendidas',
data: articuloData,
borderColor: 'rgba(153, 102, 255, 1)',
borderWidth: 2
}]
}
});
// Comparación de precios de artículos
const preciosArticulos = {{ precios_articulos|safe }};
const precioLabels = preciosArticulos.map(item => item.nombre_articulo);
const precioCompraData = preciosArticulos.map(item => item.precio_compra);
const precioVentaData = preciosArticulos.map(item => item.precio_venta);
new Chart(document.getElementById('preciosArticulos'), {
type: 'bar',
data: {
labels: precioLabels,
datasets: [
{
label: 'Precio de Compra',
data: precioCompraData,
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderColor: 'rgba(255, 99, 132, 1)',
borderWidth: 1
},
{
label: 'Precio de Venta',
data: precioVentaData,
backgroundColor: 'rgba(54, 162, 235, 0.2)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}
]
}
});
</script>
{% else %}
<script>
window.location.href = "{% url 'signin' %}";
</script>
{% endif %}
{% endblock %}