[#271]Créer une nouvelle expédition (étape 1) (!12)

| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|          #271        |         Créer une nouvelle expédition (étape 1)        |

## Description de la PR

## Modification du .env

## Check list

[x ] Pas de régression
TU/TI/TF rédigée
[x ] TU/TI/TF OK
[x ] CHANGELOG modifié

Co-authored-by: kevin <kevin@yuno.malio.fr>
Reviewed-on: https://gitea.malio.fr/MALIO-DEV/Ferme/pulls/12
Reviewed-by: Autin <tristan@yuno.malio.fr>
Co-authored-by: Matteo <matteo@yuno.malio.fr>
Co-committed-by: Matteo <matteo@yuno.malio.fr>
This commit is contained in:
Matteo
2026-02-12 07:31:40 +00:00
committed by Kevin Boudet
parent ab6de16319
commit b1c3952d09
50 changed files with 2842 additions and 335 deletions
+50
View File
@@ -0,0 +1,50 @@
import { useApi } from '~/composables/useApi'
import type { BovinShipmentData } from '~/services/dto/bovin-shipment-data'
import type { ShipmentBovinePayload, BovinShipmentListResponse } from '~/services/dto/bovin-shipment-data'
export async function getBovinShipmentList(
shipmentIri: string
): Promise<BovinShipmentData[]> {
const api = useApi()
const response = await api.get<BovinShipmentListResponse>(
'bovin_shipments',
{ shipment: shipmentIri },
{
toastErrorKey: 'errors.shipmentBovine.list'
}
)
if (Array.isArray(response)) {
return response
}
if (response && typeof response === 'object' && Array.isArray(response['hydra:member'])) {
return response['hydra:member']
}
return []
}
export async function createShipmentBovine(
payload: ShipmentBovinePayload
): Promise<BovinShipmentData> {
const api = useApi()
return api.post<BovinShipmentData>('bovin_shipments', payload, {
toastErrorKey: 'errors.shipmentBovine.create'
})
}
export async function deleteShipmentBovine(id: number): Promise<void> {
const api = useApi()
await api.delete<void>(`bovin_shipments/${id}`, {}, {
toastErrorKey: 'errors.shipmentBovine.delete'
})
}
export async function updateShipmentBovine(
id: number,
payload: Partial<ShipmentBovinePayload>
): Promise<BovinShipmentData> {
const api = useApi()
return api.patch<BovinShipmentData>(`bovin_shipments/${id}`, payload, {
toastErrorKey: 'errors.shipmentBovine.update'
})
}
+23
View File
@@ -0,0 +1,23 @@
import { useApi } from '~/composables/useApi'
import type { CustomerData } from '~/services/dto/customer-data'
export type CustomerListResponse =
| CustomerData[]
| { 'hydra:member'?: CustomerData[] }
export async function getCustomerList(): Promise<CustomerData[]> {
const api = useApi()
const response = await api.get<CustomerListResponse>('customers', {}, {
toastErrorKey: 'errors.customer.list'
})
if (Array.isArray(response)) {
return response
}
if (response && typeof response === 'object' && Array.isArray(response['hydra:member'])) {
return response['hydra:member']
}
return []
}
@@ -0,0 +1,18 @@
import type {ShipmentTypeData} from "~/services/dto/shipment-type-data";
export interface BovinShipmentData {
id: number
nbBovinSend: number | null
shipment?: string | null
shipmentType?: ShipmentTypeData | null
}
export type ShipmentBovinePayload = {
nbBovinSend: number
shipment: string
shipmentType: string
}
export type BovinShipmentListResponse =
| BovinShipmentData[]
| { 'hydra:member'?: BovinShipmentData[] }
+8
View File
@@ -0,0 +1,8 @@
import type { AddressData } from "~/services/dto/address-data"
export interface CustomerData {
id: number
label: string
code?: string | null
addresses?: AddressData[] | null
}
+65
View File
@@ -0,0 +1,65 @@
import type {CarrierData} from '~/services/dto/carrier-data'
import type {TruckData} from '~/services/dto/truck-data'
import type {CustomerData} from '~/services/dto/customer-data'
export interface ShipmentTypeData {
id: number
label: string
code: string
}
export interface BovinShipmentData {
id?: number
shipmentType?: ShipmentTypeData | string | null
nbBovinSend: number | null
}
export type ShipmentData = {
id: number
identificationNumber?: string | null
licencePlate: string | null
shipmentDate: string
currentStep: number
isValid: boolean
carrier?: CarrierData | null
truck?: TruckData | null
customer?: CustomerData | null
bovinShipments?: BovinShipmentData[] | null
weights?: WeightShipmentEntryData[] | null
}
export interface WeightShipmentEntryData {
id?: number
type: 'gross' | 'tare'
dsd: number | null
weight: number | null
weighedAt: string | null
}
export type ShipmentFormData = {
userId: string,
shipmentDate: string,
customerId: string,
addressId: string,
truckId: string,
carrierId: string,
driverId: string,
vehicleId: string,
licencePlate: string,
}
export type ShipmentPayload = {
licencePlate?: string | null
shipmentDate?: string
currentStep?: number
isValid?: boolean
carrier?: string | null
truck?: string | null
customer?: string | null
bovinShipments?: string[] | null
address?: string | null
user?: string | null
driver?: string | null
}
@@ -0,0 +1,5 @@
export interface ShipmentTypeData {
id: number
label: string
code: string
}
+24
View File
@@ -0,0 +1,24 @@
import { useApi } from '~/composables/useApi'
import type {ShipmentTypeData} from "~/services/dto/shipment-type-data";
export type ShipmentTypeListResponse =
| ShipmentTypeData[]
| { 'hydra:member'?: ShipmentTypeData[] }
export async function getShipmentTypeList(): Promise<ShipmentTypeData[]> {
const api = useApi()
const response = await api.get<ShipmentTypeListResponse>('shipment_types', {}, {
toastErrorKey: 'errors.shipmentType.list'
})
if (Array.isArray(response)) {
return response
}
if (response && typeof response === 'object' && Array.isArray(response['hydra:member'])) {
return response['hydra:member']
}
return []
}
+40
View File
@@ -0,0 +1,40 @@
import {useApi} from '~/composables/useApi'
import type {ShipmentData, ShipmentPayload} from '~/services/dto/shipment-data'
import type {WeightData} from '~/services/dto/weight-data'
export async function getShipmentList(isValid: boolean|null = null) {
const api = useApi()
const query = isValid !== null ? { isValid: isValid} : {}
return api.get<ShipmentData[]>('shipments', query, {
toastErrorKey: 'errors.shipment.list'
})
}
export async function getShipment(id: number) {
const api = useApi()
return api.get<ShipmentData>(`shipments/${id}`, {}, {
toastErrorKey: 'errors.shipment.fetch'
})
}
export async function createShipment(payload: ShipmentPayload = {}) {
const api = useApi()
return api.post<ShipmentData>('shipments', payload, {
toastErrorKey: 'errors.shipment.create'
})
}
export async function updateShipment(id: number, payload: ShipmentPayload) {
const api = useApi()
return api.patch<ShipmentData>(`shipments/${id}`, payload, {
toastErrorKey: 'errors.shipment.update',
toastSuccessKey: 'success.shipment.update'
})
}
export async function getWeightShipment(): Promise<WeightData> {
const api = useApi()
return api.get<WeightData>('shipments/weigh', {}, {
toastErrorKey: 'errors.shipment.weigh'
})
}
+20 -2
View File
@@ -1,8 +1,12 @@
import { useApi } from '~/composables/useApi'
import type { WeightEntryData } from '~/services/dto/reception-data'
import type {ReceptionData, ReceptionPayload, WeightEntryData} from '~/services/dto/reception-data'
import type {Ref} from "vue";
import type {ShipmentData, ShipmentPayload} from "~/services/dto/shipment-data";
import type {WeighingMode} from "~/composables/useWeighing";
export type WeightPayload = {
reception: string
reception?: string
shipment?: string
type: 'gross' | 'tare'
dsd: number | null
weight: number | null
@@ -21,3 +25,17 @@ export async function updateWeight(id: number, payload: Partial<WeightPayload>)
toastSuccessKey: 'success.weight.update'
})
}
export type UseWeighingShipmentOptions = {
modeShipment: WeighingMode
shipment: Ref<ShipmentData | null>
updateShipment: (id: number, payload: ShipmentPayload) => Promise<ShipmentData | null>
loadShipment?: (id: number) => Promise<ShipmentData | null>
}
export type UseWeighingOptions = {
mode: WeighingMode
reception: Ref<ReceptionData | null>
updateReception: (id: number, payload: ReceptionPayload) => Promise<ReceptionData | null>
loadReception?: (id: number) => Promise<ReceptionData | null>
}