71 lines
3.1 KiB
TypeScript
71 lines
3.1 KiB
TypeScript
import { usePaginatedList } from '~/shared/composables/usePaginatedList'
|
|
|
|
/**
|
|
* Vue MINIMALE du referentiel QUALIMAT embarque (groupe `qualimat:read`) dans la
|
|
* LISTE des transporteurs. Seuls les champs consommes par le Repertoire sont
|
|
* types : `validityDate` alimente la colonne « Date de validité » (fond rouge si
|
|
* perimee — RG-4.04). L'id QUALIMAT est une chaine (colonne BIGINT cote back).
|
|
*/
|
|
export interface CarrierQualimat {
|
|
id: string
|
|
name: string | null
|
|
/** Date ISO de validite de l'agrement QUALIMAT (date_immutable) — RG-4.04. */
|
|
validityDate: string | null
|
|
status: string | null
|
|
}
|
|
|
|
/**
|
|
* Vue MINIMALE d'un transporteur pour le Repertoire (datatable). Volontairement
|
|
* partielle : seuls les champs des colonnes + l'id (navigation) sont types ici.
|
|
* Le detail complet (onglets Adresses / Contacts / Prix) est hors perimetre de
|
|
* cet ecran (ERP-164, ticket #9).
|
|
*
|
|
* `certificationType` : QUALIMAT | GMP_PLUS | OVOCOM | COMPTE_PROPRE | AUTRE, ou
|
|
* `null` dans le cas LIOT (compte-propre interne sans certification — RG-4.01).
|
|
* Le libelle affiche est resolu cote front (cle i18n `transport.carriers.certification.*`).
|
|
*/
|
|
export interface Carrier {
|
|
id: number
|
|
name: string | null
|
|
certificationType: string | null
|
|
/** Lien editable vers le referentiel QUALIMAT (null si transporteur non QUALIMAT). */
|
|
qualimatCarrier: CarrierQualimat | null
|
|
/** Date ISO de derniere modification (default:read) — colonne « Dernière activité ». */
|
|
updatedAt: string | null
|
|
isArchived: boolean
|
|
}
|
|
|
|
/**
|
|
* Filtres du Repertoire transporteurs, branches sur les query params de
|
|
* `GET /api/carriers` (spec-back § 4.1). Pilotes par la page via `setFilters` :
|
|
* - `search` : recherche fuzzy sur le nom ;
|
|
* - `certificationType[]` : multi-valeurs (OR cote back) ;
|
|
* - `archivedOnly` : n'affiche QUE les archives (toggle « Voir les archivés »,
|
|
* aligne sur les autres repertoires M1/M2/M3).
|
|
*/
|
|
export interface CarrierFilters {
|
|
search?: string
|
|
'certificationType[]'?: string[]
|
|
archivedOnly?: boolean
|
|
}
|
|
|
|
/**
|
|
* Repertoire transporteurs (M4, ERP-164) — simple enveloppe de
|
|
* `usePaginatedList<Carrier>` sur la ressource `/carriers` (regle ABSOLUE n°13 :
|
|
* pagination serveur obligatoire ; jamais de chargement integral en memoire).
|
|
* Miroir de `useSuppliersRepository` (M2) / `useProvidersRepository` (M3).
|
|
*
|
|
* Les filtres (recherche, certifications, archives) sont pilotes par la page via
|
|
* `setFilters` du composable partage — la remise en page 1 est garantie. Par
|
|
* defaut AUCUN `archivedOnly` n'est envoye : le back masque alors les archives
|
|
* (§ 2.4). Cocher « Voir les archivés » envoie `archivedOnly=true` (seules les
|
|
* archives sont listees, aligne sur Client / Fournisseur / Prestataire).
|
|
*
|
|
* Volontairement PAR INSTANCE (pas de singleton module-level) : l'etat tableau
|
|
* est propre a l'ecran Repertoire et meurt avec lui, comme tout consommateur de
|
|
* `usePaginatedList`. Aucun reset au logout a gerer.
|
|
*/
|
|
export function useCarriersRepository() {
|
|
return usePaginatedList<Carrier, CarrierFilters>({ url: '/carriers' })
|
|
}
|