mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 22:18:12 +00:00
feat(billing): add PAYMENT_PROCESSING invoice status on payment success redirect (all except CBE bill)
This commit is contained in:
@@ -249,6 +249,7 @@ const INVOICE_STATUS_COLOR: Record<Freight.InvoiceStatus, string> = {
|
||||
DRAFT: "gray",
|
||||
ISSUED: "cyan",
|
||||
PENDING: "yellow",
|
||||
PAYMENT_PROCESSING: "indigo",
|
||||
PARTIALLY_PAID: "orange",
|
||||
PAID: "edr-green",
|
||||
OVERDUE: "red",
|
||||
|
||||
@@ -14,6 +14,7 @@ import { openPdfBlob } from './pdf';
|
||||
const INVOICE_STATUS_COLOR: Record<WarehouseInvoiceStatus, string> = {
|
||||
DRAFT: 'gray',
|
||||
ISSUED: 'orange',
|
||||
PAYMENT_PROCESSING: 'indigo',
|
||||
PARTIALLY_PAID: 'yellow',
|
||||
PAID: 'edr-green',
|
||||
CANCELLED: 'gray',
|
||||
|
||||
@@ -183,6 +183,7 @@ export default function InvoicesPage() {
|
||||
data={[
|
||||
{ label: "All", value: "all" },
|
||||
{ label: "Pending", value: "PENDING" },
|
||||
{ label: "Payment processing", value: "PAYMENT_PROCESSING" },
|
||||
{ label: "Paid", value: "PAID" },
|
||||
{ label: "Overdue", value: "OVERDUE" },
|
||||
]}
|
||||
|
||||
@@ -79,6 +79,7 @@ const INVOICE_STATUS_META: Record<string, { label: string; color: string }> = {
|
||||
PAID: { label: "Paid", color: "green" },
|
||||
PARTIALLY_PAID: { label: "Partially Paid", color: "teal" },
|
||||
PENDING: { label: "Pending", color: "yellow" },
|
||||
PAYMENT_PROCESSING: { label: "Payment Processing", color: "indigo" },
|
||||
UNPAID: { label: "Unpaid", color: "yellow" },
|
||||
OPEN: { label: "Open", color: "yellow" },
|
||||
ISSUED: { label: "Issued", color: "blue" },
|
||||
|
||||
@@ -86,6 +86,7 @@ const INVOICE_STATUS_META: Record<string, { label: string; color: string }> = {
|
||||
PAID: { label: "Paid", color: "green" },
|
||||
PARTIALLY_PAID: { label: "Partially Paid", color: "teal" },
|
||||
PENDING: { label: "Pending", color: "yellow" },
|
||||
PAYMENT_PROCESSING: { label: "Payment Processing", color: "indigo" },
|
||||
UNPAID: { label: "Unpaid", color: "yellow" },
|
||||
OPEN: { label: "Open", color: "yellow" },
|
||||
ISSUED: { label: "Issued", color: "blue" },
|
||||
|
||||
@@ -75,6 +75,7 @@ const CONTRACT_STATUSES = [
|
||||
const INVOICE_STATUSES = [
|
||||
"ISSUED",
|
||||
"PENDING",
|
||||
"PAYMENT_PROCESSING",
|
||||
"PARTIALLY_PAID",
|
||||
"PAID",
|
||||
"OVERDUE",
|
||||
|
||||
@@ -42,6 +42,7 @@ import { extractErrorMessage } from '@/components/warehouses/options';
|
||||
const STATUS_COLOR: Record<WarehouseInvoiceStatus, string> = {
|
||||
DRAFT: 'gray',
|
||||
ISSUED: 'orange',
|
||||
PAYMENT_PROCESSING: 'indigo',
|
||||
PARTIALLY_PAID: 'yellow',
|
||||
PAID: 'edr-green',
|
||||
CANCELLED: 'gray',
|
||||
|
||||
@@ -907,6 +907,7 @@ export interface AllocationCriteria {
|
||||
export const WAREHOUSE_INVOICE_STATUSES = [
|
||||
'DRAFT',
|
||||
'ISSUED',
|
||||
'PAYMENT_PROCESSING',
|
||||
'PARTIALLY_PAID',
|
||||
'PAID',
|
||||
'CANCELLED',
|
||||
|
||||
@@ -194,6 +194,8 @@ export const URL_CONSTANTS = {
|
||||
PAYMENTS: {
|
||||
INITIATE: "/api/payments/initiate",
|
||||
INTENT: (bookingId: string) => `/api/payments/intents/${bookingId}`,
|
||||
REDIRECT_SUCCESS: (bookingId: string) =>
|
||||
`/api/payments/redirect-success/${bookingId}`,
|
||||
CHECKOUT: "/api/payments/checkout",
|
||||
},
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ const STATUS_STYLE: Record<
|
||||
[Freight.InvoiceStatus.Draft]: { label: "Draft", bg: "#EEF2F6", fg: "#64748B" },
|
||||
[Freight.InvoiceStatus.Issued]: { label: "Due", bg: "#FEF3E2", fg: "#B45309" },
|
||||
[Freight.InvoiceStatus.Pending]: { label: "Due", bg: "#FEF3E2", fg: "#B45309" },
|
||||
[Freight.InvoiceStatus.PaymentProcessing]: { label: "Payment processing", bg: "#EAF1FB", fg: "#2563EB" },
|
||||
[Freight.InvoiceStatus.PartiallyPaid]: { label: "Partially paid", bg: "#FEF9E7", fg: "#A16207" },
|
||||
[Freight.InvoiceStatus.Paid]: { label: "Paid", bg: "#E6F7EF", fg: "#0A6F4D" },
|
||||
[Freight.InvoiceStatus.Overdue]: { label: "Overdue", bg: "#FDECEC", fg: "#C0392B" },
|
||||
|
||||
@@ -41,6 +41,7 @@ const INVOICE_STATUS_LABELS: Record<string, string> = {
|
||||
DRAFT: "Draft",
|
||||
ISSUED: "Issued",
|
||||
PENDING: "Due",
|
||||
PAYMENT_PROCESSING: "Payment processing",
|
||||
PARTIALLY_PAID: "Partially paid",
|
||||
PAID: "Paid",
|
||||
OVERDUE: "Overdue",
|
||||
|
||||
@@ -120,6 +120,7 @@ const PAYMENT_COLORS: Record<string, string> = {
|
||||
// Backend emits the long form on some flows; keep the short alias too.
|
||||
VERIFICATION_IN_PROGRESS: "yellow",
|
||||
PAYMENT_VERIFICATION_IN_PROGRESS: "yellow",
|
||||
PAYMENT_PROCESSING: "yellow",
|
||||
OVERDUE: "red",
|
||||
REFUNDED: "blue",
|
||||
CANCELLED: "gray",
|
||||
@@ -132,6 +133,7 @@ const PAYMENT_LABELS: Record<string, string> = {
|
||||
PNR_GENERATED: "PNR generated",
|
||||
VERIFICATION_IN_PROGRESS: "Verifying",
|
||||
PAYMENT_VERIFICATION_IN_PROGRESS: "Verifying",
|
||||
PAYMENT_PROCESSING: "Payment processing",
|
||||
OVERDUE: "Overdue",
|
||||
REFUNDED: "Refunded",
|
||||
CANCELLED: "Cancelled",
|
||||
|
||||
@@ -8,10 +8,22 @@ import {
|
||||
ThemeIcon,
|
||||
} from "@mantine/core";
|
||||
import { CheckCircle2, FileText, Home } from "lucide-react";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { useEffect } from "react";
|
||||
import { useNavigate, useSearchParams } from "react-router-dom";
|
||||
import { paymentsService } from "@/services/payments.service";
|
||||
|
||||
export default function PaymentSuccessPage() {
|
||||
const navigate = useNavigate();
|
||||
const [searchParams] = useSearchParams();
|
||||
const bookingId = searchParams.get("bookingId");
|
||||
|
||||
// Fire-and-forget ack: payment → processing, invoice → PAYMENT_PROCESSING.
|
||||
// The provider webhook remains the source of truth for the final PAID state.
|
||||
useEffect(() => {
|
||||
if (bookingId) {
|
||||
paymentsService.acknowledgeSuccessRedirect(bookingId).catch(() => {});
|
||||
}
|
||||
}, [bookingId]);
|
||||
|
||||
return (
|
||||
<Box
|
||||
|
||||
@@ -107,6 +107,11 @@ export const paymentsService = {
|
||||
return data.data ?? data;
|
||||
},
|
||||
|
||||
/** Success-redirect ack: payment → processing, invoice → PAYMENT_PROCESSING. */
|
||||
acknowledgeSuccessRedirect: async (bookingId: string): Promise<void> => {
|
||||
await client.post(P.REDIRECT_SUCCESS(bookingId));
|
||||
},
|
||||
|
||||
checkoutUrl: buildCheckoutUrl,
|
||||
checkoutUrlForInvoice: buildCheckoutUrlForInvoice,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user