64 lines
2.8 KiB
TypeScript
64 lines
2.8 KiB
TypeScript
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<WeighingTicket>` 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<WeighingTicket, WeighingTicketFilters>({ url: '/weighing_tickets' })
|
||
}
|