diff --git a/locale/defaultMessages.json b/locale/defaultMessages.json index c876de88e..796678ae6 100644 --- a/locale/defaultMessages.json +++ b/locale/defaultMessages.json @@ -3839,6 +3839,10 @@ "context": "checkbox", "string": "Refund shipment costs" }, + "src_dot_orders_dot_components_dot_OrderRefundReturnAmount_dot_982301568": { + "context": "label", + "string": "No refund" + }, "src_dot_orders_dot_components_dot_OrderRefundReturnAmount_dot_amountTooBig": { "context": "Amount error message", "string": "Amount cannot be bigger than max refund" diff --git a/src/components/Timeline/TimelineEvent.tsx b/src/components/Timeline/TimelineEvent.tsx index d379d6eb9..6182bccb9 100644 --- a/src/components/Timeline/TimelineEvent.tsx +++ b/src/components/Timeline/TimelineEvent.tsx @@ -25,7 +25,6 @@ const useStyles = makeStyles( paddingTop: theme.spacing(2) }, "&.Mui-expanded": { - borderColor: "red", margin: 0, minHeight: 0 }, @@ -48,7 +47,7 @@ const useStyles = makeStyles( "&> .MuiExpansionPanelSummary-expandIcon": { padding: 0, position: "absolute", - right: theme.spacing(18) + right: theme.spacing(20) }, margin: 0, minHeight: 0, 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/OrderRefundReturnAmount/utils.ts b/src/orders/components/OrderRefundReturnAmount/utils.ts index 96f343487..7a89ec46c 100644 --- a/src/orders/components/OrderRefundReturnAmount/utils.ts +++ b/src/orders/components/OrderRefundReturnAmount/utils.ts @@ -149,8 +149,8 @@ export const getReturnProductsAmountValues = ( const authorizedAmount = getAuthorizedAmount(order); const { - fulfiledItemsQuantities, - unfulfiledItemsQuantities, + fulfilledItemsQuantities, + unfulfilledItemsQuantities, refundShipmentCosts } = formData; @@ -177,8 +177,8 @@ export const getReturnProductsAmountValues = ( return { ...getProductsAmountValues( order, - fulfiledItemsQuantities, - unfulfiledItemsQuantities, + fulfilledItemsQuantities, + unfulfilledItemsQuantities, refundShipmentCosts ), refundTotalAmount, diff --git a/src/orders/components/OrderReturnPage/OrderReturnPage.tsx b/src/orders/components/OrderReturnPage/OrderReturnPage.tsx index 457ae52e6..2311961ab 100644 --- a/src/orders/components/OrderReturnPage/OrderReturnPage.tsx +++ b/src/orders/components/OrderReturnPage/OrderReturnPage.tsx @@ -46,11 +46,11 @@ const OrderRefundPage: React.FC = props => { return ( {({ data, handlers, change, submit }) => { - const { fulfiledItemsQuantities, unfulfiledItemsQuantities } = data; + const { fulfilledItemsQuantities, unfulfilledItemsQuantities } = data; const hasAnyItemsSelected = - fulfiledItemsQuantities.some(({ value }) => !!value) || - unfulfiledItemsQuantities.some(({ value }) => !!value); + fulfilledItemsQuantities.some(({ value }) => !!value) || + unfulfilledItemsQuantities.some(({ value }) => !!value); return ( @@ -66,13 +66,13 @@ const OrderRefundPage: React.FC = props => { />
- {!!data.unfulfiledItemsQuantities.length && ( + {!!data.unfulfilledItemsQuantities.length && ( <> = props => { order={order} fulfilmentId={id} lines={getParsedFulfiledLines(lines)} - itemsQuantities={data.fulfiledItemsQuantities} + itemsQuantities={data.fulfilledItemsQuantities} itemsSelections={data.itemsToBeReplaced} onChangeQuantity={handlers.changeFulfiledItemsQuantity} onSetMaxQuantity={handlers.handleSetMaximalFulfiledItemsQuantities( @@ -107,6 +107,7 @@ const OrderRefundPage: React.FC = props => {
{ } ]; - const unfulfiledItemsQuantities: FormsetData = [ + const unfulfilledItemsQuantities: FormsetData = [ { data: { isFulfillment: false, isRefunded: false }, id: "1", @@ -759,7 +759,7 @@ describe("Get the total value of all replaced products", () => { } ]; - const fulfiledItemsQuantities: FormsetData = [ + const fulfilledItemsQuantities: FormsetData = [ { data: { isFulfillment: true, isRefunded: false }, id: "4", @@ -861,8 +861,8 @@ describe("Get the total value of all replaced products", () => { }, { itemsToBeReplaced, - unfulfiledItemsQuantities, - fulfiledItemsQuantities + unfulfilledItemsQuantities, + fulfilledItemsQuantities } ); @@ -1085,42 +1085,42 @@ describe("Get the total value of all selected products", () => { } ]; - const unfulfiledItemsQuantities: FormsetData = [ + const unfulfilledItemsQuantities: FormsetData = [ { - data: null, + data: { isFulfillment: false, isRefunded: false }, id: "1", label: null, value: 0 }, { - data: null, + data: { isFulfillment: false, isRefunded: false }, id: "2", label: null, value: 2 }, { - data: null, + data: { isFulfillment: false, isRefunded: false }, id: "3", label: null, value: 1 } ]; - const fulfiledItemsQuantities: FormsetData = [ + const fulfilledItemsQuantities: FormsetData = [ { - data: null, + data: { isFulfillment: true, isRefunded: false }, id: "4", label: null, value: 4 }, { - data: null, + data: { isFulfillment: true, isRefunded: false }, id: "5", label: null, value: 0 }, { - data: null, + data: { isFulfillment: true, isRefunded: false }, id: "6", label: null, value: 3 @@ -1196,8 +1196,8 @@ describe("Get the total value of all selected products", () => { }, { itemsToBeReplaced, - unfulfiledItemsQuantities, - fulfiledItemsQuantities + unfulfilledItemsQuantities, + fulfilledItemsQuantities } ); diff --git a/src/orders/utils/data.ts b/src/orders/utils/data.ts index 72c1954b3..8980507a6 100644 --- a/src/orders/utils/data.ts +++ b/src/orders/utils/data.ts @@ -53,8 +53,8 @@ const getItemPriceAndQuantity = ({ const selectItemPriceAndQuantity = ( order: OrderDetails_order, { - fulfiledItemsQuantities, - unfulfiledItemsQuantities + fulfilledItemsQuantities, + unfulfilledItemsQuantities }: Partial, id: string, isFulfillment: boolean @@ -62,12 +62,12 @@ const selectItemPriceAndQuantity = ( isFulfillment ? getItemPriceAndQuantity({ id, - itemsQuantities: fulfiledItemsQuantities, + itemsQuantities: fulfilledItemsQuantities, orderLines: getAllOrderFulfilledLines(order) }) : getItemPriceAndQuantity({ id, - itemsQuantities: unfulfiledItemsQuantities, + itemsQuantities: unfulfilledItemsQuantities, orderLines: order.lines }); @@ -75,8 +75,8 @@ export const getReplacedProductsAmount = ( order: OrderDetails_order, { itemsToBeReplaced, - unfulfiledItemsQuantities, - fulfiledItemsQuantities + unfulfilledItemsQuantities, + fulfilledItemsQuantities }: Partial ) => { if (!order || !itemsToBeReplaced.length) { @@ -94,7 +94,7 @@ export const getReplacedProductsAmount = ( const { unitPrice, selectedQuantity } = selectItemPriceAndQuantity( order, - { fulfiledItemsQuantities, unfulfiledItemsQuantities }, + { fulfilledItemsQuantities, unfulfilledItemsQuantities }, id, isFulfillment ); @@ -107,20 +107,20 @@ export const getReplacedProductsAmount = ( export const getReturnSelectedProductsAmount = ( order: OrderDetails_order, - { itemsToBeReplaced, unfulfiledItemsQuantities, fulfiledItemsQuantities } + { itemsToBeReplaced, unfulfilledItemsQuantities, fulfilledItemsQuantities } ) => { if (!order) { return 0; } const unfulfilledItemsValue = getPartialProductsValue({ - itemsQuantities: unfulfiledItemsQuantities, + itemsQuantities: unfulfilledItemsQuantities, itemsToBeReplaced, orderLines: order.lines }); const fulfiledItemsValue = getPartialProductsValue({ - itemsQuantities: fulfiledItemsQuantities, + itemsQuantities: fulfilledItemsQuantities, itemsToBeReplaced, orderLines: getAllOrderFulfilledLines(order) }); @@ -137,24 +137,24 @@ const getPartialProductsValue = ({ itemsQuantities: FormsetData; 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..cc3c4ba7e 100644 --- a/src/orders/views/OrderReturn/utils.tsx +++ b/src/orders/views/OrderReturn/utils.tsx @@ -23,17 +23,17 @@ class ReturnFormDataParser { public getParsedData = (): OrderReturnProductsInput => { const { - fulfiledItemsQuantities, - unfulfiledItemsQuantities, + fulfilledItemsQuantities, + unfulfilledItemsQuantities, refundShipmentCosts } = this.formData; const fulfillmentLines = this.getParsedLineData< OrderReturnFulfillmentLineInput - >(fulfiledItemsQuantities, "fulfillmentLineId"); + >(fulfilledItemsQuantities, "fulfillmentLineId"); const orderLines = this.getParsedLineData( - unfulfiledItemsQuantities, + unfulfilledItemsQuantities, "orderLineId" ); @@ -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; }