mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 00:45:41 +00:00
fix
This commit is contained in:
@@ -43,6 +43,7 @@ import {
|
|||||||
} from "@/services/first-mile.service";
|
} from "@/services/first-mile.service";
|
||||||
import { bookingsService } from "@/services/bookings.service";
|
import { bookingsService } from "@/services/bookings.service";
|
||||||
import { vehiclesService } from "@/services/vehicles.service";
|
import { vehiclesService } from "@/services/vehicles.service";
|
||||||
|
import { ratesService } from "@/services/rates.service";
|
||||||
import type { BookingDetail } from "@/types/booking";
|
import type { BookingDetail } from "@/types/booking";
|
||||||
|
|
||||||
const formatPrice = (amount: number) =>
|
const formatPrice = (amount: number) =>
|
||||||
@@ -348,6 +349,14 @@ const FirstMilePage = () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { data: ratesData } = useQuery({
|
||||||
|
queryKey: ["rates", "FIRST_MILE"],
|
||||||
|
queryFn: async () => {
|
||||||
|
const res = await ratesService.getByType("FIRST_MILE");
|
||||||
|
return res.data;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const { data: paidBookingsData, isLoading: bookingsLoading } = useQuery({
|
const { data: paidBookingsData, isLoading: bookingsLoading } = useQuery({
|
||||||
queryKey: QUERY_KEYS.BOOKINGS.list({ status: "PAID" }),
|
queryKey: QUERY_KEYS.BOOKINGS.list({ status: "PAID" }),
|
||||||
queryFn: () => bookingsService.list({ status: "PAID", pageSize: 100 }),
|
queryFn: () => bookingsService.list({ status: "PAID", pageSize: 100 }),
|
||||||
@@ -385,8 +394,8 @@ const FirstMilePage = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const updateDistanceMutation = useMutation({
|
const updateDistanceMutation = useMutation({
|
||||||
mutationFn: ({ id, exactKm }: { id: string; exactKm: number }) =>
|
mutationFn: ({ id, exactKm, remainingPayment }: { id: string; exactKm: number; remainingPayment?: number }) =>
|
||||||
firstMileService.update(id, { exactKm }),
|
firstMileService.update(id, { exactKm, ...(remainingPayment != null && { remainingPayment }) }),
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
void qc.invalidateQueries({ queryKey: QUERY_KEYS.FIRST_MILE.ROOT });
|
void qc.invalidateQueries({ queryKey: QUERY_KEYS.FIRST_MILE.ROOT });
|
||||||
if (activeRecord) {
|
if (activeRecord) {
|
||||||
@@ -492,7 +501,19 @@ const FirstMilePage = () => {
|
|||||||
toast({ title: "Invalid distance", description: "Enter a valid distance value.", variant: "destructive" });
|
toast({ title: "Invalid distance", description: "Enter a valid distance value.", variant: "destructive" });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
updateDistanceMutation.mutate({ id: activeId, exactKm: distance });
|
|
||||||
|
let remainingPayment: number | undefined;
|
||||||
|
if (ratesData?.data) {
|
||||||
|
const firstMileRate = ratesData.data.find(
|
||||||
|
(r) => r.rateType === "FIRST_MILE" && r.status === "LIVE"
|
||||||
|
);
|
||||||
|
if (firstMileRate) {
|
||||||
|
const rateValue = parseFloat(firstMileRate.rateValue);
|
||||||
|
remainingPayment = distance * rateValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateDistanceMutation.mutate({ id: activeId, exactKm: distance, remainingPayment });
|
||||||
};
|
};
|
||||||
|
|
||||||
const matchesFilter = (r: FirstMileRecord) => {
|
const matchesFilter = (r: FirstMileRecord) => {
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import { api } from '../auth/http';
|
||||||
|
|
||||||
|
export interface Rate {
|
||||||
|
id: string;
|
||||||
|
rateType: string;
|
||||||
|
appliesTo: string;
|
||||||
|
trigger: string;
|
||||||
|
containerTypeId: string | null;
|
||||||
|
cargoTypeId: string | null;
|
||||||
|
tradeDirection: string | null;
|
||||||
|
currency: string;
|
||||||
|
rateValue: string;
|
||||||
|
rateUnit: string;
|
||||||
|
status: string;
|
||||||
|
proposedByStaffId: string;
|
||||||
|
approvedByCeoId: string | null;
|
||||||
|
approvedAt: string | null;
|
||||||
|
effectiveFrom: string;
|
||||||
|
effectiveTo: string | null;
|
||||||
|
createdAt: string;
|
||||||
|
updatedAt: string;
|
||||||
|
deletedAt: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RatesListResponse {
|
||||||
|
data: Rate[];
|
||||||
|
meta: { total: number; page: number; pageSize: number; totalPages: number };
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ratesService = {
|
||||||
|
list: (pageSize = 1000) =>
|
||||||
|
api.get<RatesListResponse>(`/rates?pageSize=${pageSize}`),
|
||||||
|
getByType: (rateType: string) =>
|
||||||
|
api.get<RatesListResponse>(`/rates?rateType=${rateType}&pageSize=1000`),
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user