import { usePaginatedList } from '~/shared/composables/usePaginatedList' /** * Vue MINIMALE d'une contrepartie embarquee (Client M1 ou Fournisseur M2) dans la * LISTE des tickets de pesee. Seul `companyName` alimente les colonnes * « Client » / « Fournisseur » ; l'objet sort embarque (`client:read` / * `supplier:read`) ou est carrement absent du JSON quand null (`skip_null_values`, * spec-back § 4.0.bis) — d'ou le `?? null` systematique cote page. */ export interface WeighingTicketParty { id: number companyName: string | null } /** * Vue MINIMALE d'un ticket de pesee pour la datatable (M5, ERP-188). Volontairement * partielle : seuls les champs des colonnes (docx p.3) + l'id (navigation) sont * types. Le detail complet (pesees vide/plein, immatriculation, site, DSD) releve * de l'ecran Modification (ERP-190) — hors perimetre de cet ecran. * * Contrepartie mutuellement exclusive (RG-5.03) : un seul de `client` / `supplier` * / `otherLabel` est renseigne ; les deux autres sont omis du JSON (null). * `displayDate` = getter serveur `fullDate ?? emptyDate` (spec-back § 4.0). * `netWeight` = plein − vide en kg (RG-5.05). */ export interface WeighingTicket { id: number /** Numero metier `{siteCode}-TP-{NNNN}` attribue par site (RG-5.02). */ number: string /** Embarque uniquement si contrepartie = Client (RG-5.03), sinon absent. */ client: WeighingTicketParty | null /** Embarque uniquement si contrepartie = Fournisseur (RG-5.03), sinon absent. */ supplier: WeighingTicketParty | null /** Libelle libre si contrepartie = Autre (RG-5.03), sinon absent. */ otherLabel: string | null /** Date ISO du ticket (`fullDate ?? emptyDate`) — colonne « Date ». */ displayDate: string | null /** Poids net en kg (= plein − vide, RG-5.05) — colonne « Poids ». */ netWeight: number | null } /** * Filtres de la liste des tickets de pesee, branches sur les query params de * `GET /api/weighing_tickets` (spec-back § 4.1). La liste est par ailleurs * cloisonnee par site courant cote back (`SiteScopedQueryExtension`, § 2.3) — le * front n'a pas a envoyer le site. */ export interface WeighingTicketFilters { search?: string } /** * Liste des tickets de pesee (M5, ERP-188) — simple enveloppe de * `usePaginatedList` sur la ressource `/weighing_tickets` * (URL API en snake_case ; la route Nuxt reste `/weighing-tickets`). Pagination * serveur obligatoire (regle ABSOLUE n°13), etat 100 % local (regle ABSOLUE n°6). * * Miroir de `useCarriersRepository` (M4). Volontairement PAR INSTANCE (pas de * singleton) : l'etat tableau est propre a l'ecran et meurt avec lui. */ export function useWeighingTicketsRepository() { return usePaginatedList({ url: '/weighing_tickets' }) }