142 lines
4.6 KiB
TypeScript
142 lines
4.6 KiB
TypeScript
import { api } from '@/lib/api'
|
|
import type {
|
|
PaginatedResponse,
|
|
RideResponse,
|
|
CancelRequestResponse,
|
|
LoadingSheetResponse,
|
|
DeliveryTaskResponse,
|
|
RideType,
|
|
RideStatus,
|
|
CancelRequestType,
|
|
LoadingSheetStatus,
|
|
} from '@/types/api'
|
|
|
|
import type { PageParams } from './master'
|
|
|
|
// ─── Rides ────────────────────────────────────────────────────────────────────
|
|
|
|
export interface RideBody {
|
|
rideType: RideType
|
|
vehicleId: string
|
|
driverProfileId: string
|
|
routeId: string
|
|
sourceWarehouseId: string
|
|
meterstart: number
|
|
}
|
|
|
|
export interface RideListParams extends PageParams {
|
|
status?: RideStatus
|
|
rideType?: RideType
|
|
driverProfileId?: string
|
|
vehicleId?: string
|
|
}
|
|
|
|
export interface CancelRequestBody {
|
|
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),
|
|
|
|
activate: (id: string) =>
|
|
api.patch<RideResponse>(`/rides/${id}/activate`).then(r => r.data),
|
|
|
|
close: (id: string, meterend: number) =>
|
|
api.patch<RideResponse>(`/rides/${id}/close`, { meterend }).then(r => r.data),
|
|
|
|
cancelRequests: {
|
|
getForRide: (rideId: string) =>
|
|
api.get<CancelRequestResponse | null>(`/rides/${rideId}/cancel-request`).then(r => r.data),
|
|
|
|
raise: (rideId: string, body: CancelRequestBody) =>
|
|
api.post<CancelRequestResponse>(`/rides/${rideId}/cancel-request`, body).then(r => r.data),
|
|
|
|
approve: (requestId: string) =>
|
|
api.post<CancelRequestResponse>(`/rides/cancel-requests/${requestId}/approve`).then(r => r.data),
|
|
|
|
reject: (requestId: string) =>
|
|
api.post<CancelRequestResponse>(`/rides/cancel-requests/${requestId}/reject`).then(r => r.data),
|
|
},
|
|
}
|
|
|
|
// ─── Loading Sheets ───────────────────────────────────────────────────────────
|
|
|
|
export interface LoadingSheetItemBody {
|
|
itemId: string
|
|
quantityDispatched: number
|
|
}
|
|
|
|
export interface LoadingSheetBody {
|
|
rideId: string
|
|
sourceWarehouseId: string
|
|
items: LoadingSheetItemBody[]
|
|
}
|
|
|
|
export interface LoadingSheetReceiptItemBody {
|
|
itemId: string
|
|
quantityReceived: number
|
|
}
|
|
|
|
export interface LoadingSheetListParams extends PageParams {
|
|
rideId?: string
|
|
status?: LoadingSheetStatus
|
|
}
|
|
|
|
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: LoadingSheetBody) =>
|
|
api.post<LoadingSheetResponse>('/loading-sheets', body).then(r => r.data),
|
|
|
|
confirmDispatch: (id: string) =>
|
|
api.patch<LoadingSheetResponse>(`/loading-sheets/${id}/dispatch`).then(r => r.data),
|
|
|
|
confirmReceipt: (id: string, items: LoadingSheetReceiptItemBody[]) =>
|
|
api.patch<LoadingSheetResponse>(`/loading-sheets/${id}/receipt`, { items }).then(r => r.data),
|
|
|
|
resolve: (id: string) =>
|
|
api.patch<LoadingSheetResponse>(`/loading-sheets/${id}/resolve`).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}/delivery-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),
|
|
}
|