feat: Plug tax inclusivity in cart and order workflows (#8013)

This commit is contained in:
Stevche Radevski
2024-07-09 11:10:42 +02:00
committed by GitHub
parent b86812f615
commit db6969578f
18 changed files with 116 additions and 7 deletions

View File

@@ -105,6 +105,7 @@ export const productVariantsFields = [
"product.collection",
"product.handle",
"calculated_price.calculated_amount",
"calculated_price.is_calculated_price_tax_inclusive",
"inventory_items.inventory_item_id",
"inventory_items.required_quantity",
"inventory_items.inventory.location_levels.stock_locations.id",

View File

@@ -9,6 +9,7 @@ interface Input {
quantity: BigNumberInput
metadata?: Record<string, any>
unitPrice: BigNumberInput
isTaxInclusive?: boolean
variant: ProductVariantDTO
taxLines?: CreateOrderLineItemTaxLineDTO[]
adjustments?: CreateOrderAdjustmentDTO[]
@@ -19,6 +20,7 @@ export function prepareLineItemData(data: Input) {
const {
variant,
unitPrice,
isTaxInclusive,
quantity,
metadata,
cartId,
@@ -51,6 +53,7 @@ export function prepareLineItemData(data: Input) {
variant_title: variant.title,
unit_price: unitPrice,
is_tax_inclusive: !!isTaxInclusive,
metadata,
}

View File

@@ -47,7 +47,12 @@ export const addShippingMethodToWorkflow = createWorkflow(
const shippingOptions = useRemoteQueryStep({
entry_point: "shipping_option",
fields: ["id", "name", "calculated_price.calculated_amount"],
fields: [
"id",
"name",
"calculated_price.calculated_amount",
"calculated_price.is_calculated_price_tax_inclusive",
],
variables: {
id: optionIds,
calculated_price: {
@@ -67,6 +72,9 @@ export const addShippingMethodToWorkflow = createWorkflow(
return {
shipping_option_id: shippingOption.id,
amount: shippingOption.calculated_price.calculated_amount,
is_tax_inclusive:
!!shippingOption.calculated_price
.is_calculated_price_tax_inclusive,
data: option.data ?? {},
name: shippingOption.name,
cart_id: data.input.cart_id,

View File

@@ -75,6 +75,8 @@ export const addToCartWorkflow = createWorkflow(
return prepareLineItemData({
variant: variant,
unitPrice: variant.calculated_price.calculated_amount,
isTaxInclusive:
variant.calculated_price.is_calculated_price_tax_inclusive,
quantity: item.quantity,
metadata: item?.metadata ?? {},
cartId: data.input.cart.id,

View File

@@ -122,6 +122,8 @@ export const createCartWorkflow = createWorkflow(
return prepareLineItemData({
variant: variant,
unitPrice: data.priceSets[item.variant_id].calculated_amount,
isTaxInclusive:
data.priceSets[item.variant_id].is_calculated_price_tax_inclusive,
quantity: item.quantity,
metadata: item?.metadata ?? {},
})

View File

@@ -42,6 +42,7 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
"stock_locations.fulfillment_sets.service_zones.shipping_options.provider.is_enabled",
"stock_locations.fulfillment_sets.service_zones.shipping_options.calculated_price.calculated_amount",
"stock_locations.fulfillment_sets.service_zones.shipping_options.calculated_price.is_calculated_price_tax_inclusive",
],
variables: {
id: input.sales_channel_id,
@@ -88,6 +89,8 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
return {
...options,
amount: calculated_price?.calculated_amount,
is_tax_inclusive:
!!calculated_price?.is_calculated_price_tax_inclusive,
}
}
)

View File

@@ -71,6 +71,8 @@ export const updateLineItemInCartWorkflow = createWorkflow(
data: {
...data.input.update,
unit_price: variant.calculated_price.calculated_amount,
is_tax_inclusive:
!!variant.calculated_price.is_calculated_price_tax_inclusive,
},
selector: {
id: item.id,

View File

@@ -4,6 +4,7 @@ interface Input {
quantity: BigNumberInput
metadata?: Record<string, any>
unitPrice: BigNumberInput
isTaxInclusive?: boolean
variant: {
title: string
sku?: string
@@ -18,11 +19,12 @@ interface Output {
variant_barcode?: string
variant_title?: string
unit_price: BigNumberInput
is_tax_inclusive: boolean
metadata?: Record<string, any>
}
export function prepareCustomLineItemData(data: Input): Output {
const { variant, unitPrice, quantity, metadata } = data
const { variant, unitPrice, isTaxInclusive, quantity, metadata } = data
const lineItem: any = {
quantity,
@@ -32,6 +34,7 @@ export function prepareCustomLineItemData(data: Input): Output {
variant_title: variant.title,
unit_price: unitPrice,
is_tax_inclusive: !!isTaxInclusive,
metadata,
}

View File

@@ -28,6 +28,7 @@ function prepareLineItems(data) {
...item,
},
unitPrice: MathBN.max(0, item.unit_price),
isTaxInclusive: item.is_tax_inclusive,
quantity: item.quantity as number,
metadata: item?.metadata ?? {},
})
@@ -39,6 +40,9 @@ function prepareLineItems(data) {
0,
item.unit_price ?? data.priceSets[item.variant_id!]?.calculated_amount
),
isTaxInclusive:
item.is_tax_inclusive ??
data.priceSets[item.variant_id!]?.is_calculated_price_tax_inclusive,
quantity: item.quantity as number,
metadata: item?.metadata ?? {},
taxLines: item.tax_lines || [],

View File

@@ -109,6 +109,7 @@ function prepareShippingMethodData({
order_id: orderId,
shipping_option_id: returnShippingOption.id,
amount: 0,
is_tax_inclusive: false,
data: {},
// Computed later in the flow
tax_lines: [],
@@ -122,6 +123,9 @@ function prepareShippingMethodData({
// TODO: retrieve calculated price and assign to amount
} else {
obj.amount = returnShippingOption.calculated_price.calculated_amount
obj.is_tax_inclusive =
!!returnShippingOption.calculated_price
.is_calculated_price_tax_inclusive
}
}
@@ -317,6 +321,7 @@ export const createReturnOrderWorkflow = createWorkflow(
"name",
"provider_id",
"calculated_price.calculated_amount",
"calculated_price.is_calculated_price_tax_inclusive",
"service_zone.fulfillment_set.location.id",
],
variables: returnShippingOptionsVariables,