mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 21:08:12 +00:00
79 lines
2.8 KiB
TypeScript
79 lines
2.8 KiB
TypeScript
import { api } from '../auth/http';
|
|
import { URL_CONSTANTS } from '@/constants/URLS';
|
|
|
|
export const LAST_MILE_STATUSES = [
|
|
'PAYMENT_PENDING',
|
|
'READY_TO_TRANSIT',
|
|
'IN_TRANSIT',
|
|
'DELIVERED',
|
|
] as const;
|
|
export type LastMileApiStatus = (typeof LAST_MILE_STATUSES)[number];
|
|
|
|
export interface LastMileBooking {
|
|
id: string;
|
|
reference: string;
|
|
lastMileDeliveryAddress?: string | null;
|
|
cargoFreeText?: string | null;
|
|
cargoTotalWeightVgm: number;
|
|
totalAmount: number;
|
|
scheduledDate?: string | null;
|
|
company?: { id: string; name?: string; phone?: string | null; contactPersonName?: string | null; contactPersonPhone?: string | null } | null;
|
|
serviceType?: { id: string; name?: string; label?: string } | null;
|
|
originYard?: { id: string; name?: string; label?: string } | null;
|
|
destinationYard?: { id: string; name?: string; label?: string } | null;
|
|
cargoType?: { id: string; name?: string; label?: string; cargoTypeName?: string } | null;
|
|
/** Container lines — total container count drives how many trucks are needed. */
|
|
bookingContainers?: Array<{ id: string; quantity: number }>;
|
|
}
|
|
|
|
export interface LastMileVehicle {
|
|
id: string;
|
|
plateNumber: string;
|
|
manufacturer: string;
|
|
model: string;
|
|
vehicleType?: string | null;
|
|
code?: string | null;
|
|
powerPlateNo?: string | null;
|
|
trailerPlateNo?: string | null;
|
|
assignedDriverId?: string | null;
|
|
assignedDriverName?: string | null;
|
|
}
|
|
|
|
export interface LastMileRecord {
|
|
id: string;
|
|
bookingId: string;
|
|
status: LastMileApiStatus;
|
|
advancedPayment: number;
|
|
remainingPayment: number;
|
|
estimatedKm?: number | null;
|
|
exactKm?: number | null;
|
|
vehicleId?: string | null;
|
|
booking?: LastMileBooking | null;
|
|
vehicle?: LastMileVehicle | null;
|
|
/** Full set of vehicles serving this delivery (multi-truck). */
|
|
vehicleAssignments?: Array<{ id: string; vehicleId: string; vehicle?: LastMileVehicle | null }>;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export interface LastMileListResponse {
|
|
data: LastMileRecord[];
|
|
meta: { total: number; page: number; pageSize: number; totalPages: number };
|
|
}
|
|
|
|
const LM = URL_CONSTANTS.LAST_MILE;
|
|
|
|
export const lastMileService = {
|
|
list: (pageSize = 1000) =>
|
|
api.get<LastMileListResponse>(`${LM.BASE}?pageSize=${pageSize}`),
|
|
getById: (id: string) => api.get<LastMileRecord>(LM.BY_ID(id)),
|
|
update: (id: string, data: { status?: LastMileApiStatus; vehicleId?: string | null; estimatedKm?: number | null; exactKm?: number | null; paid?: boolean }) =>
|
|
api.patch<LastMileRecord>(LM.BY_ID(id), data),
|
|
accept: (bookingReference: string) =>
|
|
api.post<LastMileRecord>(LM.ACCEPT(encodeURIComponent(bookingReference))),
|
|
remove: (id: string) =>
|
|
api.delete<void>(LM.BY_ID(id)),
|
|
setVehicles: (id: string, vehicleIds: string[]) =>
|
|
api.post<LastMileRecord>(`${LM.BASE}/${id}/vehicles`, { vehicleIds }),
|
|
};
|