Files
ERP_Distribution/distribution_fe/lib/api/operations.ts
T

117 lines
3.8 KiB
TypeScript

import { api } from '@/lib/api'
import type {
PaginatedResponse,
RideResponse,
LoadingSheetResponse,
DeliveryTaskResponse,
RideStatus,
CancelRequestType,
LoadingSheetStatus,
} from '@/types/api'
import type { PageParams } from './master'
// ─── Rides ────────────────────────────────────────────────────────────────────
export interface RideBody {
vehicleId: string
driverProfileId: string
meterstart: number
}
export interface RideListParams extends PageParams {
status?: RideStatus
driverProfileId?: string
vehicleId?: string
}
export interface CancelRideBody {
typeCode: CancelRequestType
reason: string
}
export const rides = {
list: (params?: RideListParams) =>
api.get<PaginatedResponse<RideResponse>>('/rides', { params }).then(r => r.data),
get: (id: string) =>
api.get<RideResponse>(`/rides/${id}`).then(r => r.data),
create: (body: RideBody) =>
api.post<RideResponse>('/rides', body).then(r => r.data),
assignDriver: (id: string, driverProfileId: string) =>
api.put<RideResponse>(`/rides/${id}/driver`, { driverProfileId }).then(r => r.data),
close: (id: string, meterend: number) =>
api.post<RideResponse>(`/rides/${id}/close`, { meterend }).then(r => r.data),
cancel: (id: string, body: CancelRideBody) =>
api.post<RideResponse>(`/rides/${id}/cancel`, body).then(r => r.data),
}
// ─── Loading Sheets ───────────────────────────────────────────────────────────
export interface LoadingSheetCreateBody {
fK_RideId: string
populatedByUserId?: string | null
}
export interface LoadingSheetItemInput {
fK_ItemId: string
fK_WarehouseId: string
quantity: number
fK_ShopPOItemId?: string | null
}
export interface LoadingSheetListParams extends PageParams {
rideId?: string
status?: LoadingSheetStatus
routeId?: string
regionId?: string
}
export const loadingSheets = {
list: (params?: LoadingSheetListParams) =>
api.get<PaginatedResponse<LoadingSheetResponse>>('/loading-sheets', { params }).then(r => r.data),
get: (id: string) =>
api.get<LoadingSheetResponse>(`/loading-sheets/${id}`).then(r => r.data),
create: (body: LoadingSheetCreateBody) =>
api.post<LoadingSheetResponse>('/loading-sheets', body).then(r => r.data),
updateItems: (id: string, items: LoadingSheetItemInput[]) =>
api.put<LoadingSheetResponse>(`/loading-sheets/${id}/items`, { items }).then(r => r.data),
confirm: (id: string, confirmedByUserId?: string | null) =>
api.post<LoadingSheetResponse>(`/loading-sheets/${id}/confirm`, { confirmedByUserId }).then(r => r.data),
}
// ─── Delivery Tasks ───────────────────────────────────────────────────────────
export interface DeliveryTaskItemQuantity {
itemId: string
quantityFulfilled: number
}
export const deliveryTasks = {
generate: (rideId: string) =>
api.post<DeliveryTaskResponse[]>(`/rides/${rideId}/tasks/generate`).then(r => r.data),
listByRide: (rideId: string) =>
api.get<DeliveryTaskResponse[]>(`/rides/${rideId}/tasks`).then(r => r.data),
get: (id: string) =>
api.get<DeliveryTaskResponse>(`/delivery-tasks/${id}`).then(r => r.data),
setQuantities: (id: string, items: DeliveryTaskItemQuantity[]) =>
api.put<DeliveryTaskResponse>(`/delivery-tasks/${id}/quantities`, { items }).then(r => r.data),
confirm: (id: string) =>
api.post<DeliveryTaskResponse>(`/delivery-tasks/${id}/confirm`).then(r => r.data),
fail: (id: string, note: string) =>
api.post<DeliveryTaskResponse>(`/delivery-tasks/${id}/fail`, { note }).then(r => r.data),
}