fix : correction des retours de la V0
This commit is contained in:
@@ -1,54 +1,64 @@
|
||||
import {computed, ref} from 'vue'
|
||||
import type {WeightEntryData} from '~/services/dto/reception-data'
|
||||
import type {WeightData} from '~/services/dto/weight-data'
|
||||
import {getWeight} from '~/services/reception'
|
||||
import {getWeightShipment} from '~/services/shipment'
|
||||
import {createWeight, updateWeight} from '~/services/weight'
|
||||
import type {UseWeighingShipmentOptions, UseWeighingOptions} from '~/services/weight'
|
||||
import type {WeightShipmentEntryData} from "~/services/dto/shipment-data";
|
||||
import { computed, ref } from 'vue'
|
||||
import type { Ref } from 'vue'
|
||||
import type { WeightEntryData } from '~/services/dto/reception-data'
|
||||
import type { WeightData } from '~/services/dto/weight-data'
|
||||
import { createWeight, updateWeight } from '~/services/weight'
|
||||
|
||||
export type WeighingMode = 'gross' | 'tare'
|
||||
|
||||
export interface UseWeighingOptions {
|
||||
mode: WeighingMode
|
||||
entity: Ref<{ id: number; currentStep: number; isValid: boolean; weights?: WeightEntryData[] | null } | null>
|
||||
entityName: 'reception' | 'shipment'
|
||||
apiResource: string
|
||||
titleLabel: string
|
||||
getWeightFromScale: () => Promise<WeightData>
|
||||
updateEntity: (id: number, payload: any) => Promise<any>
|
||||
loadEntity?: (id: number) => Promise<any>
|
||||
}
|
||||
|
||||
export const useWeighing = ({
|
||||
mode,
|
||||
reception,
|
||||
updateReception,
|
||||
loadReception
|
||||
}: UseWeighingOptions) => {
|
||||
mode,
|
||||
entity,
|
||||
entityName,
|
||||
apiResource,
|
||||
titleLabel,
|
||||
getWeightFromScale,
|
||||
updateEntity,
|
||||
loadEntity
|
||||
}: UseWeighingOptions) => {
|
||||
const weightData = ref<WeightData | null>(null)
|
||||
const isFetching = ref(false)
|
||||
|
||||
const currentWeightEntry = computed<WeightEntryData | null>(() => {
|
||||
const weights = reception.value?.weights ?? []
|
||||
const weights = entity.value?.weights ?? []
|
||||
return weights.find((entry) => entry.type === mode) ?? null
|
||||
})
|
||||
|
||||
const displayWeight = computed(() => weightData.value?.weight ?? currentWeightEntry.value?.weight ?? null)
|
||||
const displayDsd = computed(() => weightData.value?.dsd ?? currentWeightEntry.value?.dsd ?? '-')
|
||||
const title = computed(() => (mode === 'gross' ? 'Pesée à plein' : 'Pesée à vide'))
|
||||
const title = computed(() => titleLabel)
|
||||
const showLoadingBox = computed(() => isFetching.value)
|
||||
|
||||
const fetchWeight = async () => {
|
||||
isFetching.value = true
|
||||
weightData.value = await getWeight().finally(() => {
|
||||
weightData.value = await getWeightFromScale().finally(() => {
|
||||
isFetching.value = false
|
||||
})
|
||||
}
|
||||
|
||||
const saveWeight = async () => {
|
||||
if (!reception.value) {
|
||||
return
|
||||
}
|
||||
if (!entity.value) return
|
||||
|
||||
const existingEntry = currentWeightEntry.value
|
||||
const baseDsd = weightData.value?.dsd ?? existingEntry?.dsd ?? null
|
||||
const baseWeight = weightData.value?.weight ?? existingEntry?.weight ?? null
|
||||
const baseWeighedAt = weightData.value?.weighedAt ?? existingEntry?.weighedAt ?? null
|
||||
|
||||
if (baseWeight === null) {
|
||||
return
|
||||
}
|
||||
if (baseWeight === null) return
|
||||
|
||||
const relationPayload: Record<string, string> = {}
|
||||
relationPayload[entityName] = `/api/${apiResource}/${entity.value.id}`
|
||||
|
||||
if (existingEntry?.id) {
|
||||
await updateWeight(existingEntry.id, {
|
||||
@@ -59,7 +69,7 @@ export const useWeighing = ({
|
||||
})
|
||||
} else {
|
||||
await createWeight({
|
||||
reception: `/api/receptions/${reception.value.id}`,
|
||||
...relationPayload,
|
||||
type: mode,
|
||||
dsd: baseDsd,
|
||||
weight: baseWeight,
|
||||
@@ -68,15 +78,15 @@ export const useWeighing = ({
|
||||
}
|
||||
|
||||
const nextStep = mode === 'tare'
|
||||
? reception.value.currentStep
|
||||
: reception.value.currentStep + 1
|
||||
await updateReception(reception.value.id, {
|
||||
? entity.value.currentStep
|
||||
: entity.value.currentStep + 1
|
||||
await updateEntity(entity.value.id, {
|
||||
currentStep: nextStep,
|
||||
isValid: reception.value.isValid
|
||||
isValid: entity.value.isValid
|
||||
})
|
||||
|
||||
if (loadReception) {
|
||||
await loadReception(reception.value.id)
|
||||
if (loadEntity) {
|
||||
await loadEntity(entity.value.id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,84 +102,29 @@ export const useWeighing = ({
|
||||
}
|
||||
}
|
||||
|
||||
// Backward-compatible aliases
|
||||
export const useWeighingShipment = ({
|
||||
modeShipment,
|
||||
shipment,
|
||||
updateShipment,
|
||||
loadShipment
|
||||
}: UseWeighingShipmentOptions) => {
|
||||
const weightData = ref<WeightData | null>(null)
|
||||
const isFetching = ref(false)
|
||||
|
||||
const currentWeightEntry = computed<WeightShipmentEntryData | null>(() => {
|
||||
const weights = shipment.value?.weights ?? []
|
||||
return weights.find((entry) => entry.type === modeShipment) ?? null
|
||||
modeShipment,
|
||||
shipment,
|
||||
updateShipment,
|
||||
loadShipment
|
||||
}: {
|
||||
modeShipment: WeighingMode
|
||||
shipment: Ref<any>
|
||||
updateShipment: (id: number, payload: any) => Promise<any>
|
||||
loadShipment?: (id: number) => Promise<any>
|
||||
}) => {
|
||||
return useWeighing({
|
||||
mode: modeShipment,
|
||||
entity: shipment,
|
||||
entityName: 'shipment',
|
||||
apiResource: 'shipments',
|
||||
titleLabel: modeShipment === 'gross' ? 'Pesée à vide' : 'Pesée à plein',
|
||||
getWeightFromScale: async () => {
|
||||
const { getWeightShipment } = await import('~/services/shipment')
|
||||
return getWeightShipment()
|
||||
},
|
||||
updateEntity: updateShipment,
|
||||
loadEntity: loadShipment
|
||||
})
|
||||
|
||||
const displayWeight = computed(() => weightData.value?.weight ?? currentWeightEntry.value?.weight ?? null)
|
||||
const displayDsd = computed(() => weightData.value?.dsd ?? currentWeightEntry.value?.dsd ?? '-')
|
||||
const title = computed(() => (modeShipment === 'gross' ? 'Pesée à vide' : 'Pesée à plein'))
|
||||
const showLoadingBox = computed(() => isFetching.value)
|
||||
|
||||
const fetchWeight = async () => {
|
||||
isFetching.value = true
|
||||
weightData.value = await getWeightShipment().finally(() => {
|
||||
isFetching.value = false
|
||||
})
|
||||
}
|
||||
|
||||
const saveWeight = async () => {
|
||||
if (!shipment.value) {
|
||||
return
|
||||
}
|
||||
|
||||
const existingEntry = currentWeightEntry.value
|
||||
const baseDsd = weightData.value?.dsd ?? existingEntry?.dsd ?? null
|
||||
const baseWeight = weightData.value?.weight ?? existingEntry?.weight ?? null
|
||||
const baseWeighedAt = weightData.value?.weighedAt ?? existingEntry?.weighedAt ?? null
|
||||
|
||||
if (baseWeight === null) {
|
||||
return
|
||||
}
|
||||
|
||||
if (existingEntry?.id) {
|
||||
await updateWeight(existingEntry.id, {
|
||||
type: modeShipment,
|
||||
dsd: baseDsd,
|
||||
weight: baseWeight,
|
||||
weighedAt: baseWeighedAt
|
||||
})
|
||||
} else {
|
||||
await createWeight({
|
||||
shipment: `/api/shipments/${shipment.value.id}`,
|
||||
type: modeShipment,
|
||||
dsd: baseDsd,
|
||||
weight: baseWeight,
|
||||
weighedAt: baseWeighedAt
|
||||
})
|
||||
}
|
||||
|
||||
const nextStep = modeShipment === 'tare'
|
||||
? shipment.value.currentStep
|
||||
: shipment.value.currentStep + 1
|
||||
await updateShipment(shipment.value.id, {
|
||||
currentStep: nextStep,
|
||||
isValid: shipment.value.isValid
|
||||
})
|
||||
|
||||
if (loadShipment) {
|
||||
await loadShipment(shipment.value.id)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
weightData,
|
||||
currentWeightEntry,
|
||||
displayWeight,
|
||||
displayDsd,
|
||||
title,
|
||||
showLoadingBox,
|
||||
fetchWeight,
|
||||
saveWeight
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user