fix(logistique) : bon de pesée — cartouche tiers + filtrage des listes contrepartie par site (ERP-208)
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 2m1s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m38s

- PDF : cartouche bordé en haut à droite avec le type (Client/Fournisseur/Autre) et le nom du tiers (getCounterpartyName + getCounterpartyTypeLabel).
- Écran ticket : listes Client/Fournisseur filtrées sur le site courant (param siteId[]) et rechargées au changement de site ; reset du tiers sélectionné s'il sort du périmètre du nouveau site.
This commit is contained in:
2026-06-25 14:09:33 +02:00
parent fdd4394e99
commit 527e47d822
11 changed files with 712 additions and 19 deletions
@@ -0,0 +1,44 @@
import { describe, it, expect, vi, beforeEach } from 'vitest'
import { useWeighingTicketReferentials } from '../useWeighingTicketReferentials'
const mockApiGet = vi.hoisted(() => vi.fn())
vi.stubGlobal('useApi', () => ({ get: mockApiGet }))
/**
* Tests des référentiels Client/Fournisseur de l'écran ticket de pesée (M5).
* Contrat couvert (ERP-208) : `load(siteId)` filtre les deux endpoints par site
* courant via `siteId[]` ; sans site → listes complètes (param absent).
*/
describe('useWeighingTicketReferentials', () => {
beforeEach(() => {
mockApiGet.mockReset()
mockApiGet.mockResolvedValue({ member: [] })
})
it('passe siteId[] aux deux endpoints quand un site courant est fourni', async () => {
const { load } = useWeighingTicketReferentials()
await load(7)
const clientsCall = mockApiGet.mock.calls.find(c => c[0] === '/clients')
const suppliersCall = mockApiGet.mock.calls.find(c => c[0] === '/suppliers')
expect(clientsCall?.[1]).toMatchObject({ pagination: 'false', 'siteId[]': [7] })
expect(suppliersCall?.[1]).toMatchObject({ pagination: 'false', 'siteId[]': [7] })
})
it('ne passe pas siteId[] quand aucun site (liste complète)', async () => {
const { load } = useWeighingTicketReferentials()
await load(null)
const clientsCall = mockApiGet.mock.calls.find(c => c[0] === '/clients')
expect(clientsCall?.[1]).not.toHaveProperty('siteId[]')
expect(clientsCall?.[1]).toMatchObject({ pagination: 'false' })
})
it('mappe les membres Hydra en options { value: @id, label: companyName }', async () => {
mockApiGet.mockResolvedValue({ member: [{ '@id': '/api/clients/3', companyName: 'ACME' }] })
const { load, clients } = useWeighingTicketReferentials()
await load(7)
expect(clients.value).toEqual([{ value: '/api/clients/3', label: 'ACME' }])
})
})