{% extends 'layout/app.html.twig' %} {% block title %}{{ sourcingRequest.title }} - Demandes - Portail{% endblock %} {% block breadcrumb %}Demandes / {{ sourcingRequest.externalReference }}{% endblock %} {% block app_content %} {% if app.environment in ['dev', 'test'] and sourcingRequest.open %}Préparer une consultation fournisseur{% endif %}

{{ sourcingRequest.title }}

{{ sourcingRequest.status.label }}

Référence {{ sourcingRequest.externalReference }}

importée le {{ sourcingRequest.importedAt|date('d/m/Y H:i') }} par {{ sourcingRequest.importedBy.firstName }} {{ sourcingRequest.importedBy.lastName }} {% if sourcingRequest.closedAt %} · clôturée le {{ sourcingRequest.closedAt|date('d/m/Y H:i') }}{% if sourcingRequest.closedBy %} par {{ sourcingRequest.closedBy.firstName }} {{ sourcingRequest.closedBy.lastName }}{% endif %}{% endif %}

{# Comparatif : une colonne par sourceur, sa dernière version. Des faits côte à côte, sans classement ni score — le choix reste humain (DEC-R-160). #} {% set compared = sourcingRequest.assignments|filter(a => a.active or a.proposal)|sort((a, b) => a.sourcer.name <=> b.sourcer.name) %} {% if compared is not empty %}

Propositions reçues

Dernière version de chaque sourceur. Aucun d'eux ne voit les autres.

{% for assignment in compared %} {% endfor %} {% for assignment in compared %} {% endfor %} {% for assignment in compared %} {% set version = assignment.proposal ? assignment.proposal.latestVersion : null %} {% endfor %} {% for field, label in { unitPrice: 'Prix unitaire', moq: 'Quantité minimale', leadTimeDays: 'Délai de production', incoterm: 'Incoterm' } %} {% for assignment in compared %} {% set version = assignment.proposal ? assignment.proposal.latestVersion : null %} {% endfor %} {% endfor %} {% for assignment in compared %} {% endfor %}
{{ assignment.sourcer.name }}{% if not assignment.active %} (retiré){% endif %}
État {% if assignment.proposal %}{% include 'proposal/_state.html.twig' with { state: assignment.proposal.state, audience: 'team' } only %} {% else %}Aucune proposition{% endif %}
Version{% if version %}Version {{ version.number }}{% else %}—{% endif %}
{{ label }} {% if not version %}— {% else %} {% set raw = version.values[field] %} {{ proposal_value(field, raw) }}{% if field == 'unitPrice' and raw is not null %} {{ version.currency ?? '(devise à confirmer)' }}{% endif %} {% endif %}
{% if assignment.proposal %}Ouvrir{% endif %}
{% endif %} {% include 'request/_sheet.html.twig' with { sheet: sourcingRequest } only %}

Sourceurs

{% if sourcingRequest.open %}

Coche ceux qui doivent voir cette demande. Aucun ne voit le nom des autres. Adresser une demande n'est ni une commande ni un engagement.

{# Proposés : les sourceurs actifs, plus ceux déjà assignés (même désactivés depuis, pour pouvoir les décocher). #} {% set eligible = sourcers|filter(s => s.active or sourcingRequest.hasActiveAssignmentFor(s)) %} {% for sourcer in eligible %} {% endfor %} {% if eligible is empty %}

Aucun sourceur actif. Créer un sourceur

{% else %} {% endif %}
{% else %} {% set assigned = sourcingRequest.activeAssignments %}

{% if assigned is empty %}Aucun sourceur n'était assigné.{% else %}Étaient assignés : {{ assigned|map(a => a.sourcer.name)|join(', ') }}.{% endif %}

{% endif %}
{% if sourcingRequest.open %}

Clôturer : la demande sort de la liste des sourceurs. Elle reste consultable ici.

{% endif %}
{% endblock %}