From 6697a498c7b3acc4a2b27913681ec3433bc3bc4e Mon Sep 17 00:00:00 2001 From: AJAL ODORA JONATHAN <43242517+ODORA0@users.noreply.github.com> Date: Tue, 4 Jun 2024 20:51:30 +0300 Subject: [PATCH] (Enhancement) Enhance Line Items Billing Status --- src/invoice/payments/payments.component.tsx | 7 +++--- src/invoice/payments/utils.ts | 24 +++++++++++---------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/invoice/payments/payments.component.tsx b/src/invoice/payments/payments.component.tsx index 98b2bf2..d8e7352 100644 --- a/src/invoice/payments/payments.component.tsx +++ b/src/invoice/payments/payments.component.tsx @@ -31,7 +31,6 @@ export type PaymentFormValue = { const Payments: React.FC = ({ bill, selectedLineItems, mutate }) => { const { t } = useTranslation(); - const { defaultCurrency } = useConfig(); const { billableServices, isLoading, isValidating, error } = useBillableServices(); const paymentSchema = z.object({ method: z.string().refine((value) => !!value, 'Payment method is required'), @@ -43,6 +42,7 @@ const Payments: React.FC = ({ bill, selectedLineItems, mutate }) = const paymentFormSchema = z.object({ payment: z.array(paymentSchema) }); const { currentVisit } = useVisit(bill?.patientUuid); + const { defaultCurrency } = useConfig(); const methods = useForm({ mode: 'all', defaultValues: {}, @@ -58,7 +58,6 @@ const Payments: React.FC = ({ bill, selectedLineItems, mutate }) = const computedTotal = hasMoreThanOneLineItem ? computeTotalPrice(selectedLineItems) : bill?.totalAmount ?? 0; const totalAmountTendered = formValues?.reduce((curr: number, prev) => curr + Number(prev.amount) ?? 0, 0) ?? 0; const amountDue = Number(computedTotal) - (Number(bill?.tenderedAmount) + Number(totalAmountTendered)); - const newAmountDue = Number(bill?.totalAmount - bill?.tenderedAmount); const handleNavigateToBillingDashboard = () => navigate({ @@ -68,7 +67,7 @@ const Payments: React.FC = ({ bill, selectedLineItems, mutate }) = const handleProcessPayment = () => { const paymentPayload = createPaymentPayload( bill, - bill.patientUuid, + bill?.patientUuid, formValues, amountDue, billableServices, @@ -109,7 +108,7 @@ const Payments: React.FC = ({ bill, selectedLineItems, mutate }) =
{bill && } - +
diff --git a/src/invoice/payments/utils.ts b/src/invoice/payments/utils.ts index e59ebdf..da1d501 100644 --- a/src/invoice/payments/utils.ts +++ b/src/invoice/payments/utils.ts @@ -1,4 +1,3 @@ -import { type OpenmrsResource } from '@openmrs/esm-framework'; import { type LineItem, type MappedBill } from '../../types'; import { type Payment } from './payments.component'; @@ -20,8 +19,8 @@ export const createPaymentPayload = ( ) => { const { cashier } = bill; const totalAmount = bill?.totalAmount; - const totalPaymentStatus = amountDue <= 0 ? 'PAID' : 'PENDING'; - const previousPayments = bill.payments.map((payment) => ({ + const paymentStatus = amountDue <= 0 ? 'PAID' : 'PENDING'; + const previousPayments = bill?.payments.map((payment) => ({ amount: payment.amount, amountTendered: payment.amountTendered, attributes: [], @@ -39,27 +38,29 @@ export const createPaymentPayload = ( const updatedPayments = [...newPayments, ...previousPayments]; const totalAmountRendered = updatedPayments.reduce((acc, payment) => acc + payment.amountTendered, 0); + const updatedLineItems = bill?.lineItems.map((lineItem) => ({ ...lineItem, billableService: getBillableServiceUuid(billableServices, lineItem.billableService), - item: lineItem?.item, - paymentStatus: hasLineItem(selectedLineItems ?? [], lineItem) - ? totalAmountRendered >= lineItem.price * lineItem.quantity - ? 'PAID' - : 'PENDING' - : lineItem.paymentStatus, + item: processBillItem?.(lineItem), + paymentStatus: + bill?.lineItems.length > 1 + ? hasLineItem(selectedLineItems ?? [], lineItem) && totalAmountRendered >= lineItem.price * lineItem.quantity + ? 'PAID' + : 'PENDING' + : paymentStatus, })); const allItemsBillPaymentStatus = updatedLineItems.filter((item) => item.paymentStatus === 'PENDING').length === 0 ? 'PAID' : 'PENDING'; const processedPayment = { - cashPoint: bill.cashPointUuid, + cashPoint: bill?.cashPointUuid, cashier: cashier.uuid, lineItems: updatedLineItems, payments: [...updatedPayments], patient: patientUuid, - status: selectedLineItems?.length > 0 ? allItemsBillPaymentStatus : totalPaymentStatus, + status: selectedLineItems?.length > 0 ? allItemsBillPaymentStatus : paymentStatus, }; return processedPayment; @@ -68,3 +69,4 @@ export const createPaymentPayload = ( export const getBillableServiceUuid = (billableServices: Array, serviceName: string) => { return billableServices.length ? billableServices.find((service) => service.name === serviceName).uuid : null; }; +const processBillItem = (item) => (item.item || item.billableService)?.split(':')[0];