Files
2026-09-03 13:28:48 +05:30

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),
}