fix(logistique) : PDF — numéro dans le titre + bouton Imprimer réservé aux tickets terminés
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m46s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m38s

- Titre du bon de pesée : « Ticket de pesée 86-TP-0001 » (numéro accolé, absent en brouillon).
- Bouton « Imprimer » (edit) : v-if isValidated → masqué sur un ticket en attente (DRAFT, sans numéro).
This commit is contained in:
2026-06-29 14:11:52 +02:00
parent d21025067a
commit c698edab3c
3 changed files with 13 additions and 1 deletions
@@ -123,6 +123,14 @@ describe('Écran Modification ticket de pesée (page /weighing-tickets/{id}/edit
expect(wrapper.find('[data-label="logistique.weighingTickets.form.validate"]').exists()).toBe(false) expect(wrapper.find('[data-label="logistique.weighingTickets.form.validate"]').exists()).toBe(false)
}) })
it('ticket en attente (DRAFT) : PAS de bouton « Imprimer », action principale « Valider »', async () => {
// Un brouillon n'a pas de numéro : le bon de pesée ne doit pas être imprimable.
mockFetchTicket.mockReset().mockResolvedValue({ ...DETAIL, status: 'DRAFT', number: null })
const wrapper = await mountPage()
expect(wrapper.find('[data-label="logistique.weighingTickets.form.print"]').exists()).toBe(false)
expect(wrapper.find('[data-label="logistique.weighingTickets.form.validate"]').exists()).toBe(true)
})
it('« Imprimer » ouvre le bon de pesée PDF servi par le back (RG-5.08)', async () => { it('« Imprimer » ouvre le bon de pesée PDF servi par le back (RG-5.08)', async () => {
const wrapper = await mountPage() const wrapper = await mountPage()
await wrapper.find('[data-label="logistique.weighingTickets.form.print"]').trigger('click') await wrapper.find('[data-label="logistique.weighingTickets.form.print"]').trigger('click')
@@ -115,7 +115,10 @@
<!-- Bas d'écran : « Imprimer » (ouvre le PDF back) + action principale <!-- Bas d'écran : « Imprimer » (ouvre le PDF back) + action principale
(« Valider » si brouillon, « Enregistrer » si déjà validé). --> (« Valider » si brouillon, « Enregistrer » si déjà validé). -->
<div class="mt-12 flex justify-center gap-6"> <div class="mt-12 flex justify-center gap-6">
<!-- « Imprimer » uniquement sur un ticket terminé (VALIDATED) : un
brouillon n'a pas de numéro et ne doit pas produire de bon. -->
<MalioButton <MalioButton
v-if="isValidated"
variant="secondary" variant="secondary"
icon-name="mdi:printer-outline" icon-name="mdi:printer-outline"
icon-position="left" icon-position="left"
@@ -83,7 +83,8 @@
</tr> </tr>
</table> </table>
<div class="title">Ticket de pesée</div> {# Numéro accolé au titre (ex. « Ticket de pesée 86-TP-0001 ») ; absent en brouillon (numéro attribué à la validation). #}
<div class="title">Ticket de pesée{% if ticket.number %} {{ ticket.number }}{% endif %}</div>
{# {#
DSD de la pesée : valeur du pont en AUTO, valeur saisie par l'opérateur en DSD de la pesée : valeur du pont en AUTO, valeur saisie par l'opérateur en