{% extends "base.html" %} {% block title %}Inventario{% endblock %} {% block page_title %}Inventario y stock{% endblock %} {% block topbar_actions %}
Fichas de producto Catálogo {% endblock %} {% block content %} {% if alertas > 0 %}
{{ alertas }} producto(s) con stock por debajo del mínimo. Aparecen marcados en rojo en la tabla.
{% endif %} {% if resumen and resumen.total_productos %}
Productos distintos
{{ resumen.total_productos }}
Unidades compradas
{{ "%.0f"|format(resumen.total_comprado or 0) }}
Total invertido
{{ "%.2f"|format(resumen.total_gastado or 0) }} €
{% endif %}
Stock por producto {% if buscar %} Quitar filtro {% endif %}
{% if not productos %}
{% if buscar %}No hay productos que coincidan con "{{ buscar }}" {% else %}El inventario está vacío{% endif %}
{% if not buscar %}

El inventario se rellena automáticamente con las líneas de las facturas recibidas.

{% endif %}
{% else %}
{% for p in productos %} {% set alerta = p.stock_minimo > 0 and p.stock_disponible < p.stock_minimo %} {% set margen = ((p.precio_medio_venta - p.precio_medio_compra) / p.precio_medio_compra * 100) if p.precio_medio_compra > 0 and p.precio_medio_venta > 0 else none %} {% endfor %}
Producto Stock disponible Comprado Vendido P. compra P. venta Margen Invertido Última compra
{{ p.nombre }} {% if alerta %} {% endif %} {% if p.stock_disponible <= 0 %} {{ "%.0f"|format(p.stock_disponible) }} {% elif alerta %} {{ "%.0f"|format(p.stock_disponible) }} {% else %} {{ "%.0f"|format(p.stock_disponible) }} {% endif %} {% if p.stock_minimo > 0 %}
mín {{ p.stock_minimo|int }}
{% set raw_pct = (p.stock_disponible / p.stock_minimo * 100)|int %} {% if raw_pct < 0 %}{% set pct_bar = 0 %} {% elif raw_pct > 100 %}{% set pct_bar = 100 %} {% else %}{% set pct_bar = raw_pct %}{% endif %}
{% endif %}
{{ "%.0f"|format(p.comprado) }} {{ "%.0f"|format(p.vendido) }} {% if p.precio_medio_compra > 0 %}{{ "%.2f"|format(p.precio_medio_compra) }} €{% else %}—{% endif %} {% if p.precio_medio_venta > 0 %}{{ "%.2f"|format(p.precio_medio_venta) }} €{% else %}—{% endif %} {% if margen is not none %} {{ "%.1f"|format(margen) }}% {% else %} {% endif %} {{ "%.2f"|format(p.total_gastado) }} € {{ p.ultima_compra or '—' }}
{% endif %}
{% endblock %}