mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 12:18:11 +00:00
feat(bookings): update payment eligibility logic for general contracts and one-time bookings
This commit is contained in:
@@ -3,10 +3,11 @@
|
|||||||
* Times run in EAT so the 07:00/10:00/… boundaries match the local operating clock.
|
* Times run in EAT so the 07:00/10:00/… boundaries match the local operating clock.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Batch boundaries — every 3h from 07:00 (the 07:00–10:00 intake settles at 10:00, etc.). */
|
/** Batch boundaries — every 3h from 00:00 (00–03, 03–06, … 21–24), matching the board windows. */
|
||||||
// export const BATCH_CRON = '0 7,10,13,16,19,22 * * *';
|
// export const BATCH_CRON = '0 7,10,13,16,19,22 * * *';
|
||||||
// export const BATCH_CRON = '*/3 * * * *';
|
// export const BATCH_CRON = '*/3 * * * *';
|
||||||
export const BATCH_CRON = '*/5 * * * *';
|
export const BATCH_CRON = '*/5 * * * *';
|
||||||
|
// export const BATCH_CRON = '0 */3 * * *';//
|
||||||
|
|
||||||
export const BATCH_TIMEZONE = 'Africa/Addis_Ababa';
|
export const BATCH_TIMEZONE = 'Africa/Addis_Ababa';
|
||||||
|
|
||||||
|
|||||||
@@ -50,8 +50,15 @@ export function ReadonlyBookingView({ booking }: { booking: Freight.IBooking })
|
|||||||
});
|
});
|
||||||
|
|
||||||
const pricing = booking.pricingBreakdown;
|
const pricing = booking.pricingBreakdown;
|
||||||
|
// A general contract is paid once it's FULLY_EXECUTED (signed) — it never
|
||||||
|
// enters batch selection. A one-time booking can only pay once it's been
|
||||||
|
// SELECTED_FOR_BATCH (assigned a slot with a pay window).
|
||||||
|
const isGeneralContract = booking.bookingType === "GENERAL_CONTRACT";
|
||||||
const canPay =
|
const canPay =
|
||||||
status === "SELECTED_FOR_BATCH" && booking.paymentStatus !== "PAID";
|
booking.paymentStatus !== "PAID" &&
|
||||||
|
(isGeneralContract
|
||||||
|
? status === "FULLY_EXECUTED"
|
||||||
|
: status === "SELECTED_FOR_BATCH");
|
||||||
const showCountdown = canPay && !!booking.paymentDeadline;
|
const showCountdown = canPay && !!booking.paymentDeadline;
|
||||||
const isExpired = status === "EXPIRED";
|
const isExpired = status === "EXPIRED";
|
||||||
const isPendingConsolidation = status === "PENDING_CONSOLIDATION";
|
const isPendingConsolidation = status === "PENDING_CONSOLIDATION";
|
||||||
|
|||||||
@@ -180,6 +180,9 @@ function PrimaryAction({
|
|||||||
}) {
|
}) {
|
||||||
const { status, id } = booking;
|
const { status, id } = booking;
|
||||||
const go = () => onNavigate(`/bookings/${id}`);
|
const go = () => onNavigate(`/bookings/${id}`);
|
||||||
|
// A general contract is payable as soon as it's FULLY_EXECUTED (signed); a
|
||||||
|
// one-time booking only after it's SELECTED_FOR_BATCH.
|
||||||
|
const isGeneralContract = booking.bookingType === "GENERAL_CONTRACT";
|
||||||
if (status === "DRAFT") {
|
if (status === "DRAFT") {
|
||||||
return (
|
return (
|
||||||
<Button
|
<Button
|
||||||
@@ -210,7 +213,10 @@ function PrimaryAction({
|
|||||||
</Button>
|
</Button>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (status === "SELECTED_FOR_BATCH" && booking.paymentStatus !== "PAID") {
|
const payableStatus = isGeneralContract
|
||||||
|
? "FULLY_EXECUTED"
|
||||||
|
: "SELECTED_FOR_BATCH";
|
||||||
|
if (status === payableStatus && booking.paymentStatus !== "PAID") {
|
||||||
return <PayNowButton booking={booking} />;
|
return <PayNowButton booking={booking} />;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user