9e2206a7d6
En pesée manuelle, le serveur incrémentait automatiquement le DSD et ignorait la saisie de l'opérateur. Désormais l'opérateur saisit le poids ET le DSD (le numéro du pont réellement utilisé), conservés tels quels — plus d'auto-incrément. Le champ « Numéro de pesée » séparé (manualNumber) est supprimé : pour le client c'est la même chose que le DSD. Pas de contrainte d'unicité sur le DSD (doublons autorisés). Colonnes empty_manual_number/full_manual_number droppées.
54 lines
2.0 KiB
TypeScript
54 lines
2.0 KiB
TypeScript
import type { WeighbridgeMode } from '~/modules/logistique/composables/useWeighbridge'
|
|
import type { CounterpartyType, WeighingTicketStatus } from '~/modules/logistique/composables/useWeighingTicketForm'
|
|
|
|
/**
|
|
* Détail d'un ticket de pesée (`GET /api/weighing_tickets/{id}`, spec-back
|
|
* § 4.0.bis). Champs null OMIS du JSON (`skip_null_values`) → tous optionnels,
|
|
* lus avec un défaut côté hydratation du formulaire.
|
|
*/
|
|
export interface WeighingTicketDetail {
|
|
id: number
|
|
/** Cycle de vie (DRAFT/VALIDATED, ERP-193). */
|
|
status?: WeighingTicketStatus
|
|
/** Numéro `{siteCode}-TP-{NNNN}` — null tant que brouillon, immuable ensuite (RG-5.09). */
|
|
number?: string | null
|
|
/** Site rattaché (embarqué) — immuable (RG-5.09). */
|
|
site?: { id: number, name: string, code: string } | null
|
|
counterpartyType?: CounterpartyType | null
|
|
client?: { '@id': string, companyName: string } | null
|
|
supplier?: { '@id': string, companyName: string } | null
|
|
otherLabel?: string | null
|
|
immatriculation?: string | null
|
|
plateFreeFormat?: boolean
|
|
// Pesée à vide
|
|
emptyDate?: string | null
|
|
emptyWeight?: number | null
|
|
emptyDsd?: number | null
|
|
emptyMode?: WeighbridgeMode | null
|
|
// Pesée à plein
|
|
fullDate?: string | null
|
|
fullWeight?: number | null
|
|
fullDsd?: number | null
|
|
fullMode?: WeighbridgeMode | null
|
|
netWeight?: number | null
|
|
}
|
|
|
|
/**
|
|
* Charge le détail d'un ticket de pesée pour l'écran de modification (M5,
|
|
* ERP-190). `Accept: application/ld+json` impose l'enveloppe Hydra (relations
|
|
* embarquées : client/supplier/site). Appel via `useApi()` (jamais `$fetch`).
|
|
*/
|
|
export function useWeighingTicket() {
|
|
const api = useApi()
|
|
|
|
async function fetchTicket(id: number | string): Promise<WeighingTicketDetail> {
|
|
return await api.get<WeighingTicketDetail>(
|
|
`/weighing_tickets/${id}`,
|
|
{},
|
|
{ headers: { Accept: 'application/ld+json' }, toast: false },
|
|
)
|
|
}
|
|
|
|
return { fetchTicket }
|
|
}
|