diff --git a/src/orders/components/OrderRefundPage/form.tsx b/src/orders/components/OrderRefundPage/form.tsx index 3a1917527..6f95ff7c4 100644 --- a/src/orders/components/OrderRefundPage/form.tsx +++ b/src/orders/components/OrderRefundPage/form.tsx @@ -14,7 +14,8 @@ export enum OrderRefundType { } export enum OrderRefundAmountCalculationMode { AUTOMATIC = "automatic", - MANUAL = "manual" + MANUAL = "manual", + NONE = "none" } export interface OrderRefundData { diff --git a/src/orders/components/OrderRefundReturnAmount/OrderRefundReturnAmount.tsx b/src/orders/components/OrderRefundReturnAmount/OrderRefundReturnAmount.tsx index e67629555..7c0404c15 100644 --- a/src/orders/components/OrderRefundReturnAmount/OrderRefundReturnAmount.tsx +++ b/src/orders/components/OrderRefundReturnAmount/OrderRefundReturnAmount.tsx @@ -82,6 +82,7 @@ interface OrderRefundAmountProps { isReturn?: boolean; errors: OrderErrorFragment[]; amountData: OrderRefundAmountValuesProps; + allowNoRefund?: boolean; onChange: (event: React.ChangeEvent) => void; onRefund: () => void; } @@ -96,7 +97,8 @@ const OrderRefundAmount: React.FC = props => { onRefund, isReturn = false, amountData, - disableSubmitButton + disableSubmitButton, + allowNoRefund = false } = props; const classes = useStyles(props); const intl = useIntl(); @@ -144,6 +146,17 @@ const OrderRefundAmount: React.FC = props => { onChange={onChange} name="amountCalculationMode" > + {allowNoRefund && ( + } + label={intl.formatMessage({ + defaultMessage: "No refund", + description: "label" + })} + /> + )} = props => { description: "label" })} /> + {data.amountCalculationMode === + OrderRefundAmountCalculationMode.NONE && ( + <> + + + + )} {data.amountCalculationMode === OrderRefundAmountCalculationMode.AUTOMATIC && ( <> diff --git a/src/orders/components/OrderReturnPage/OrderReturnPage.tsx b/src/orders/components/OrderReturnPage/OrderReturnPage.tsx index 457ae52e6..169f5f0ca 100644 --- a/src/orders/components/OrderReturnPage/OrderReturnPage.tsx +++ b/src/orders/components/OrderReturnPage/OrderReturnPage.tsx @@ -107,6 +107,7 @@ const OrderRefundPage: React.FC = props => {
; orderLines: OrderDetails_order_lines[]; }) => - itemsQuantities.reduce((resultAmount, { id, value: quantity }) => { - const { - value: isItemToBeReplaced, - data: { isRefunded } - } = itemsToBeReplaced.find(getById(id)); + itemsQuantities.reduce( + (resultAmount, { id, value: quantity, data: { isRefunded } }) => { + const { value: isItemToBeReplaced } = itemsToBeReplaced.find(getById(id)); - if (quantity < 1 || isItemToBeReplaced || isRefunded) { - return resultAmount; - } + if (quantity < 1 || isItemToBeReplaced || isRefunded) { + return resultAmount; + } - const { selectedQuantity, unitPrice } = getItemPriceAndQuantity({ - id, - itemsQuantities, - orderLines - }); + const { selectedQuantity, unitPrice } = getItemPriceAndQuantity({ + id, + itemsQuantities, + orderLines + }); - return resultAmount + unitPrice.gross.amount * selectedQuantity; - }, 0); + return resultAmount + unitPrice.gross.amount * selectedQuantity; + }, + 0 + ); export function getRefundedLinesPriceSum( lines: OrderRefundData_order_lines[], diff --git a/src/orders/views/OrderReturn/utils.tsx b/src/orders/views/OrderReturn/utils.tsx index 02f02f834..16c8c4923 100644 --- a/src/orders/views/OrderReturn/utils.tsx +++ b/src/orders/views/OrderReturn/utils.tsx @@ -78,7 +78,11 @@ class ReturnFormDataParser { orderLines: OrderReturnLineInput[], fulfillmentLines: OrderReturnFulfillmentLineInput[] ) => { - if (!this.order.totalCaptured?.amount) { + if ( + !this.order.totalCaptured?.amount || + this.formData.amountCalculationMode === + OrderRefundAmountCalculationMode.NONE + ) { return false; }