{% extends 'layouts/authenticated.html.twig' %} {% block page_title %}Mouvements de stock{% endblock %} {% block content %}
{# Header #}

Mouvements de stock

Tracabilite complete des entrees et sorties {% if selectedProduct is defined and selectedProduct %} — {{ selectedProduct.name }} {% endif %}

Retour Stock
{# Filtres #}
Reset
{# Liste des mouvements - vue cards #} {% if movements|length > 0 %}
{% for movement in movements %} {% set isPositive = movement.positive %} {% set badgeColor = movement.typeBadgeColor %}
{# Left: type badge + product info #}
{% if movement.type == 'in' %} {% elseif movement.type == 'out' %} {% elseif movement.type == 'adjustment' %} {% elseif movement.type == 'return' %} {% elseif movement.type == 'loss' %} {% else %} {% endif %}
{{ movement.typeLabel }} {{ movement.createdAt|date('d/m/Y H:i') }}
{{ movement.product.name }} {{ movement.product.sku }}
{# Right: quantity + stock change #}
{{ isPositive ? '+' : '-' }}{{ movement.quantity }}
{{ movement.stockBefore }} {{ movement.stockAfter }}
{# Details row #}
{{ movement.performedBy.fullName|default(movement.performedBy.email) }} {% if movement.reference %} {{ movement.reference }} {% endif %} {% if movement.reason %} {{ movement.reason }} {% endif %}
{% endfor %}
{{ knp_pagination_render(movements) }}
{% else %}

Aucun mouvement

Aucun mouvement de stock enregistre pour les filtres selectionnes.

{% endif %}
{% endblock %}