63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
import { ref } from 'vue'
|
|
|
|
/**
|
|
* Référentiels alimentant les selects de contrepartie de l'écran « Ticket de
|
|
* pesée » (M5, ERP-189) : liste des clients (M1) et des fournisseurs (M2).
|
|
*
|
|
* Collections récupérées en entier via l'échappatoire `?pagination=false`
|
|
* (référentiels de quelques dizaines d'entrées), avec l'en-tête
|
|
* `Accept: application/ld+json` imposé par API Platform 4 pour obtenir
|
|
* l'enveloppe Hydra (`member`). La valeur d'option est l'IRI Hydra (`@id`) —
|
|
* renvoyée telle quelle dans le payload POST/PATCH (relation ManyToOne).
|
|
*
|
|
* Miroir de `useClientReferentials` (M1). État 100 % local à l'instance.
|
|
*/
|
|
|
|
/** Option au format attendu par MalioSelect ({ label, value }). */
|
|
export interface RefOption {
|
|
value: string
|
|
label: string
|
|
}
|
|
|
|
interface PartyMember {
|
|
'@id': string
|
|
companyName: string
|
|
}
|
|
|
|
const LD_JSON_HEADERS = { Accept: 'application/ld+json' }
|
|
|
|
export function useWeighingTicketReferentials() {
|
|
const api = useApi()
|
|
|
|
const clients = ref<RefOption[]>([])
|
|
const suppliers = ref<RefOption[]>([])
|
|
|
|
/** Récupère une collection complète (pagination désactivée) en Hydra. */
|
|
async function fetchAll(url: string): Promise<PartyMember[]> {
|
|
const res = await api.get<{ member?: PartyMember[] }>(
|
|
url,
|
|
{ pagination: 'false' },
|
|
{ headers: LD_JSON_HEADERS, toast: false },
|
|
)
|
|
return res.member ?? []
|
|
}
|
|
|
|
/**
|
|
* Charge en parallèle clients + fournisseurs (résilient : un référentiel en
|
|
* échec — ex. 403 selon le rôle — laisse simplement son select vide sans
|
|
* faire échouer l'autre).
|
|
*/
|
|
async function load(): Promise<void> {
|
|
await Promise.allSettled([
|
|
fetchAll('/clients').then((list) => {
|
|
clients.value = list.map(c => ({ value: c['@id'], label: c.companyName }))
|
|
}),
|
|
fetchAll('/suppliers').then((list) => {
|
|
suppliers.value = list.map(s => ({ value: s['@id'], label: s.companyName }))
|
|
}),
|
|
])
|
|
}
|
|
|
|
return { clients, suppliers, load }
|
|
}
|