feat: new tax api (#979)

* feat: add tax calculation strategy (#885)

* feat: add tax calculation strategy

* fix: adds strategy loader

* fix: eslint ignore

* chore: cleanup

* fix: allow plugin overwrites

* fix: allow plugin overwrites

* fix: fake region

* Update packages/medusa/src/loaders/strategies.ts

Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>

Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>

* feat: adds tax related db entities + tax provider (#896)

* feat: adds tax related db entities + tax provider

* fix: add tax provider tests

* fix: add tax service unit tests

* fix: tests + migrations

* fix: add inherited tax lines

* chore: rm tax-line repo

* fix: test

* fix: pr comments

* fix: unit test

* feat: totals service to ts (#911)

* feat: adds tax related db entities + tax provider

* fix: add tax provider tests

* fix: add tax service unit tests

* fix: tests + migrations

* feat: totals service to ts

* fix: remove totals.js

* fix: add shipping methods

* fix: add inherited tax lines

* chore: rm tax-line repo

* fix: test

* fix: tests

* fix: tests

* fix: unit test

* fix: adds TotalsServiceProps

* feat: adds integration tests for automatic tax calculation + shipping tax rates (#945)

* feat: adds tax related db entities + tax provider

* fix: add tax provider tests

* fix: add tax service unit tests

* fix: tests + migrations

* feat: totals service to ts

* fix: remove totals.js

* fix: add shipping methods

* fix: add inherited tax lines

* chore: rm tax-line repo

* fix: test

* fix: tests

* fix: tests

* fix: unit test

* fix: integration test helpers

* fix: adds factories + tests automatic tax rates

* fix: remove verbose

* fix: adds TotalsServiceProps

* fix: add shipping tax lines

* fix: add migration for shipping taxes

* fix: integration tests for shipping taxes

* fix: integration tests for shipping taxes

* fix: jsdoc types

* Feat/manual taxes (#950)

* feat: adds tax related db entities + tax provider

* fix: add tax provider tests

* fix: add tax service unit tests

* fix: tests + migrations

* feat: totals service to ts

* fix: remove totals.js

* fix: add shipping methods

* fix: add inherited tax lines

* chore: rm tax-line repo

* fix: test

* fix: tests

* fix: tests

* fix: unit test

* fix: integration test helpers

* fix: adds factories + tests automatic tax rates

* fix: remove verbose

* fix: adds TotalsServiceProps

* fix: add shipping tax lines

* fix: add migration for shipping taxes

* fix: integration tests for shipping taxes

* fix: integration tests for shipping taxes

* fix: add integration tests for manual taxes

* fix: cart service - cleanup jsdoc

* feat: add /carts/id/taxes to manually calculate taxes

* feat: add integration tests for order tax calculations

* fix: unit tests

* fix: merge

* fix: rm verbose

* fix: unit tests

* fix: object -> cartOrOrder

* fix: rounding

* Feat/complete order w tax lines (#951)

* feat: adds tax related db entities + tax provider

* fix: add tax provider tests

* fix: add tax service unit tests

* fix: tests + migrations

* feat: totals service to ts

* fix: remove totals.js

* fix: add shipping methods

* fix: add inherited tax lines

* chore: rm tax-line repo

* fix: test

* fix: tests

* fix: tests

* fix: unit test

* fix: integration test helpers

* fix: adds factories + tests automatic tax rates

* fix: remove verbose

* fix: adds TotalsServiceProps

* fix: add shipping tax lines

* fix: add migration for shipping taxes

* fix: integration tests for shipping taxes

* fix: integration tests for shipping taxes

* fix: add integration tests for manual taxes

* fix: cart service - cleanup jsdoc

* feat: add /carts/id/taxes to manually calculate taxes

* feat: add integration tests for order tax calculations

* feat: adds cart completion strategy + create order w. tax lines

* fix: unit tests

* fix: merge

* fix: rm verbose

* fix: unit tests

* fix: unit tests

* fix: unit tests

* fix: ensure calculation for list orders

* fix: unit tests

* fix: integration tests

* fix: adds cart order type gaurds

* Docs/tax api (#954)

* feat: adds tax related db entities + tax provider

* fix: add tax provider tests

* fix: add tax service unit tests

* fix: tests + migrations

* feat: totals service to ts

* fix: remove totals.js

* fix: add shipping methods

* fix: add inherited tax lines

* chore: rm tax-line repo

* fix: test

* fix: tests

* fix: tests

* fix: unit test

* fix: integration test helpers

* fix: adds factories + tests automatic tax rates

* fix: remove verbose

* fix: adds TotalsServiceProps

* fix: add shipping tax lines

* fix: add migration for shipping taxes

* fix: integration tests for shipping taxes

* fix: integration tests for shipping taxes

* fix: add integration tests for manual taxes

* fix: cart service - cleanup jsdoc

* feat: add /carts/id/taxes to manually calculate taxes

* feat: add integration tests for order tax calculations

* feat: adds cart completion strategy + create order w. tax lines

* fix: unit tests

* fix: merge

* fix: rm verbose

* fix: unit tests

* fix: unit tests

* fix: unit tests

* fix: ensure calculation for list orders

* fix: unit tests

* fix: integration tests

* docs: documents tax related methods and types

* fix: require either item_id or shipping_method_id

* feat: product type tax rate (#969)

* feat: adds tax related db entities + tax provider

* fix: add tax provider tests

* fix: add tax service unit tests

* fix: tests + migrations

* feat: totals service to ts

* fix: remove totals.js

* fix: add shipping methods

* fix: add inherited tax lines

* chore: rm tax-line repo

* fix: test

* fix: tests

* fix: tests

* fix: unit test

* fix: integration test helpers

* fix: adds factories + tests automatic tax rates

* fix: remove verbose

* fix: adds TotalsServiceProps

* fix: add shipping tax lines

* fix: add migration for shipping taxes

* fix: integration tests for shipping taxes

* fix: integration tests for shipping taxes

* fix: add integration tests for manual taxes

* fix: cart service - cleanup jsdoc

* feat: add /carts/id/taxes to manually calculate taxes

* feat: add integration tests for order tax calculations

* feat: adds cart completion strategy + create order w. tax lines

* fix: unit tests

* fix: merge

* fix: rm verbose

* fix: unit tests

* fix: unit tests

* fix: unit tests

* fix: ensure calculation for list orders

* fix: unit tests

* fix: integration tests

* docs: documents tax related methods and types

* fix: require either item_id or shipping_method_id

* feat: adds returns tests for new tax system

* feat: adds return lines + integration tests for swaps

* feat: return integration tests

* feat: adds product type tax rates

* feat: add tax management endpoints

* fix: create single migration

* fix: adds tax rates to js client

* fix: strats

* Fix/plugin tests (#998)

* plugin testing setup

* fix: test sendgrid plugin

* fix: test sendgrid plugin

* chore: clean

* chore: clean

* fix: clean up tests

* fix: remove dirty import

* fix: sendgrid + brightpearl

* fix: plugin integration tests

* fix: klarna

* fix: shipping method tax

* fix: remove taxrates

* fix: unit tests

* fix: integration

* fix: integration

* fix: plugins tests

* fix: ignore plugins

* fix: tests

* fix: taxes (#1017)

* fix: taxes

* fix: taxes

* fix: faulty ref

* fix: create tax-lines with claim items

* fix: snapshot tax-liens

* fix: allows integration test teardown to force deleting tables

* fix: tests

* fix: merge

* fix: adds tax-rates to client

* fix: adds tax-rates to medusa-react

* fix: tests

* fix: tests

* fix: add product types

* fix: adds tax provider endpoint + cascaded deletes on tax rate relations

* fix: move errors to service layer

* fix: cleanup api

* fix: unit tests

* fix: error handler in base-service

* fix: Add order region to swap on createFulfillment (#1110)

Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
Sebastian Rindom
2022-02-24 20:14:09 +01:00
committed by olivermrbl
parent d80eaa172d
commit 47588e7a8d
223 changed files with 28546 additions and 2229 deletions

View File

@@ -8,6 +8,7 @@ export * from "./gift-cards"
export * from "./orders"
export * from "./products"
export * from "./product-tags"
export * from "./product-types"
export * from "./return-reasons"
export * from "./regions"
export * from "./shipping-options"
@@ -20,3 +21,4 @@ export * from "./store"
export * from "./swaps"
export * from "./users"
export * from "./variants"
export * from "./tax-rates"

View File

@@ -0,0 +1 @@
export * from "./queries"

View File

@@ -0,0 +1,34 @@
import {
AdminProductTypesListRes,
AdminGetProductTypesParams,
} from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
import { useQuery } from "react-query"
import { useMedusa } from "../../../contexts"
import { UseQueryOptionsWrapper } from "../../../types"
import { queryKeysFactory } from "../../utils/index"
const ADMIN_PRODUCT_TYPES_QUERY_KEY = `admin_product_types` as const
export const adminProductTypeKeys = queryKeysFactory(
ADMIN_PRODUCT_TYPES_QUERY_KEY
)
type ProductTypesQueryKeys = typeof adminProductTypeKeys
export const useAdminProductTypes = (
query?: AdminGetProductTypesParams,
options?: UseQueryOptionsWrapper<
Response<AdminProductTypesListRes>,
Error,
ReturnType<ProductTypesQueryKeys["list"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminProductTypeKeys.list(query),
() => client.admin.productTypes.list(query),
options
)
return { ...data, ...rest } as const
}

View File

@@ -2,7 +2,6 @@ import {
AdminProductsListRes,
AdminProductsRes,
AdminGetProductsParams,
AdminProductsListTypesRes,
AdminProductsListTagsRes,
} from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
@@ -51,22 +50,6 @@ export const useAdminProduct = (
return { ...data, ...rest } as const
}
export const useAdminProductTypes = (
options?: UseQueryOptionsWrapper<
Response<AdminProductsListTypesRes>,
Error,
ReturnType<ProductQueryKeys["detail"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminProductKeys.detail("types"),
() => client.admin.products.listTypes(),
options
)
return { ...data, ...rest } as const
}
export const useAdminProductTagUsage = (
options?: UseQueryOptionsWrapper<
Response<AdminProductsListTagsRes>,

View File

@@ -1,4 +1,8 @@
import { AdminPaymentProvidersList, AdminStoresRes } from "@medusajs/medusa"
import {
AdminTaxProvidersList,
AdminPaymentProvidersList,
AdminStoresRes,
} from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
import { useQuery } from "react-query"
import { useMedusa } from "../../../contexts"
@@ -27,6 +31,22 @@ export const useAdminStorePaymentProviders = (
return { ...data, ...rest } as const
}
export const useAdminStoreTaxProviders = (
options?: UseQueryOptionsWrapper<
Response<AdminTaxProvidersList>,
Error,
ReturnType<StoreQueryKeys["detail"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminStoreKeys.detail("tax_providers"),
() => client.admin.store.listTaxProviders(),
options
)
return { ...data, ...rest } as const
}
export const useAdminStore = (
options?: UseQueryOptionsWrapper<
Response<AdminStoresRes>,

View File

@@ -0,0 +1,2 @@
export * from "./queries"
export * from "./mutations"

View File

@@ -0,0 +1,203 @@
import { adminTaxRateKeys } from "./queries"
import {
AdminTaxRatesRes,
AdminTaxRatesDeleteRes,
AdminDeleteTaxRatesTaxRateProductsReq,
AdminDeleteTaxRatesTaxRateProductTypesReq,
AdminDeleteTaxRatesTaxRateShippingOptionsReq,
AdminPostTaxRatesReq,
AdminPostTaxRatesTaxRateReq,
AdminPostTaxRatesTaxRateProductsReq,
AdminPostTaxRatesTaxRateProductTypesReq,
AdminPostTaxRatesTaxRateShippingOptionsReq,
} from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
import { useMutation, UseMutationOptions, useQueryClient } from "react-query"
import { useMedusa } from "../../../contexts/medusa"
import { buildOptions } from "../../utils/buildOptions"
export const useAdminCreateTaxRate = (
options?: UseMutationOptions<
Response<AdminTaxRatesRes>,
Error,
AdminPostTaxRatesReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminPostTaxRatesReq) => client.admin.taxRates.create(payload),
buildOptions(queryClient, adminTaxRateKeys.lists(), options)
)
}
export const useAdminUpdateTaxRate = (
id: string,
options?: UseMutationOptions<
Response<AdminTaxRatesRes>,
Error,
AdminPostTaxRatesTaxRateReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminPostTaxRatesTaxRateReq) =>
client.admin.taxRates.update(id, payload),
buildOptions(
queryClient,
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
options
)
)
}
export const useAdminDeleteTaxRate = (
id: string,
options?: UseMutationOptions<Response<AdminTaxRatesDeleteRes>, Error, void>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
() => client.admin.taxRates.delete(id),
buildOptions(
queryClient,
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
options
)
)
}
export const useAdminCreateProductTaxRates = (
id: string,
options?: UseMutationOptions<
Response<AdminTaxRatesRes>,
Error,
AdminPostTaxRatesTaxRateProductsReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminPostTaxRatesTaxRateProductsReq) =>
client.admin.taxRates.addProducts(id, payload),
buildOptions(
queryClient,
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
options
)
)
}
export const useAdminDeleteProductTaxRates = (
id: string,
options?: UseMutationOptions<
Response<AdminTaxRatesRes>,
Error,
AdminDeleteTaxRatesTaxRateProductsReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminDeleteTaxRatesTaxRateProductsReq) =>
client.admin.taxRates.removeProducts(id, payload),
buildOptions(
queryClient,
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
options
)
)
}
export const useAdminCreateProductTypeTaxRates = (
id: string,
options?: UseMutationOptions<
Response<AdminTaxRatesRes>,
Error,
AdminPostTaxRatesTaxRateProductTypesReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminPostTaxRatesTaxRateProductTypesReq) =>
client.admin.taxRates.addProductTypes(id, payload),
buildOptions(
queryClient,
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
options
)
)
}
export const useAdminDeleteProductTypeTaxRates = (
id: string,
options?: UseMutationOptions<
Response<AdminTaxRatesRes>,
Error,
AdminDeleteTaxRatesTaxRateProductTypesReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminDeleteTaxRatesTaxRateProductTypesReq) =>
client.admin.taxRates.removeProductTypes(id, payload),
buildOptions(
queryClient,
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
options
)
)
}
export const useAdminCreateShippingTaxRates = (
id: string,
options?: UseMutationOptions<
Response<AdminTaxRatesRes>,
Error,
AdminPostTaxRatesTaxRateShippingOptionsReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminPostTaxRatesTaxRateShippingOptionsReq) =>
client.admin.taxRates.addShippingOptions(id, payload),
buildOptions(
queryClient,
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
options
)
)
}
export const useAdminDeleteShippingTaxRates = (
id: string,
options?: UseMutationOptions<
Response<AdminTaxRatesRes>,
Error,
AdminDeleteTaxRatesTaxRateShippingOptionsReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminDeleteTaxRatesTaxRateShippingOptionsReq) =>
client.admin.taxRates.removeShippingOptions(id, payload),
buildOptions(
queryClient,
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
options
)
)
}

View File

@@ -0,0 +1,51 @@
import {
AdminTaxRatesRes,
AdminTaxRatesListRes,
AdminGetTaxRatesParams,
} from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
import { useQuery } from "react-query"
import { useMedusa } from "../../../contexts"
import { UseQueryOptionsWrapper } from "../../../types"
import { queryKeysFactory } from "../../utils/index"
const ADMIN_TAX_RATES_QUERY_KEY = `admin_tax_rates` as const
export const adminTaxRateKeys = queryKeysFactory(ADMIN_TAX_RATES_QUERY_KEY)
type TaxRateQueryKeys = typeof adminTaxRateKeys
export const useAdminTaxRates = (
query?: AdminGetTaxRatesParams,
options?: UseQueryOptionsWrapper<
Response<AdminTaxRatesListRes>,
Error,
ReturnType<TaxRateQueryKeys["list"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminTaxRateKeys.list(query),
() => client.admin.taxRates.list(query),
options
)
return { ...data, ...rest } as const
}
export const useAdminTaxRate = (
id: string,
query?: AdminGetTaxRatesParams,
options?: UseQueryOptionsWrapper<
Response<AdminTaxRatesRes>,
Error,
ReturnType<TaxRateQueryKeys["detail"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminTaxRateKeys.detail(id),
() => client.admin.taxRates.retrieve(id, query),
options
)
return { ...data, ...rest } as const
}