docs: migrate guides to TSDoc references (#6100)

This commit is contained in:
Shahed Nasser authored and GitHub committed 2024-01-22 18:38:35 +01:00
1 parent 85dad169bb
commit 4792c55226
980 files changed
+195537 -160619

No files matched your search

@@ -0,0 +1,100 @@
---
displayed_sidebar: modules
---
import ParameterTypes from "@site/src/components/ParameterTypes"
# ITaxCalculationStrategy
## Overview
A tax calculation strategy is used to calculate taxes when calculating a cart's totals. The Medusa
backend provides a tax calculation strategy that handles calculating the taxes, taking into account the
defined tax rates and settings such as whether tax-inclusive pricing is enabled.
You can override the tax calculation strategy to implement different calculation logic or to
integrate a third-party service that handles the tax calculation. You can override it either
in a Medusa backend setup or in a plugin.
A tax calculation strategy should be defined in a TypeScript or JavaScript file created under the `src/strategies` directory.
The class must also implement the `ITaxCalculationStrategy` interface imported from the `@medusajs/medusa` package.
For example, you can create the file `src/strategies/tax-calculation.ts` with the following content:
```ts title="src/strategies/tax-calculation.ts"
import {
ITaxCalculationStrategy,
LineItem,
LineItemTaxLine,
ShippingMethodTaxLine,
TaxCalculationContext,
} from "@medusajs/medusa"
class TaxCalculationStrategy
implements ITaxCalculationStrategy {
async calculate(
items: LineItem[],
taxLines: (ShippingMethodTaxLine | LineItemTaxLine)[],
calculationContext: TaxCalculationContext
): Promise<number> {
throw new Error("Method not implemented.")
}
}
export default TaxCalculationStrategy
```
---
## Methods
### calculate
This method calculates the tax amount for a given set of line items under applicable
tax conditions and calculation contexts.
This method is used whenever taxes are calculated. If automatic tax calculation is disabled in a region,
then it's only triggered when taxes are calculated manually as explained in
[this guide](https://docs.medusajs.com/modules/taxes/storefront/manual-calculation).
#### Example
An example of the general implementation of this method in the Medusa backend's tax calculation strategy:
```ts
async calculate(
items: LineItem[],
taxLines: (ShippingMethodTaxLine | LineItemTaxLine)[],
calculationContext: TaxCalculationContext
): Promise<number> {
const lineItemsTaxLines = taxLines.filter(
(tl) => "item_id" in tl
) as LineItemTaxLine[]
const shippingMethodsTaxLines = taxLines.filter(
(tl) => "shipping_method_id" in tl
) as ShippingMethodTaxLine[]
const lineItemsTax = this.calculateLineItemsTax(
items,
lineItemsTaxLines,
calculationContext
)
const shippingMethodsTax = this.calculateShippingMethodsTax(
calculationContext.shipping_methods,
shippingMethodsTaxLines
)
return Math.round(lineItemsTax + shippingMethodsTax)
}
```
#### Parameters
<ParameterTypes parameters={[{"name":"items","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)[]","description":"The line items to calculate the tax total for.","optional":false,"defaultValue":"","expandable":false,"children":[{"name":"adjustments","type":"[LineItemAdjustment](../../entities/classes/entities.LineItemAdjustment.mdx)[]","description":"The details of the item's adjustments, which are available when a discount is applied on the item.","optional":false,"defaultValue":"","expandable":true,"children":[{"name":"amount","type":"`number`","description":"The adjustment amount","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"description","type":"`string`","description":"The line item's adjustment description","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"discount","type":"[Discount](../../entities/classes/entities.Discount.mdx)","description":"The details of the discount associated with the adjustment.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"discount_id","type":"`string`","description":"The ID of the discount associated with the adjustment","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"id","type":"`string`","description":"The Line Item Adjustment's ID","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"item","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)","description":"The details of the line item.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"item_id","type":"`string`","description":"The ID of the line item","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"metadata","type":"`Record<string, unknown>`","description":"An optional key-value map with additional details","optional":false,"defaultValue":"","expandable":false,"children":[]}]},{"name":"allow_discounts","type":"`boolean`","description":"Flag to indicate if the Line Item should be included when doing discount calculations.","optional":false,"defaultValue":"true","expandable":false,"children":[]},{"name":"cart","type":"[Cart](../../entities/classes/entities.Cart.mdx)","description":"The details of the cart that the line item may belongs to.","optional":false,"defaultValue":"","expandable":true,"children":[{"name":"billing_address","type":"[Address](../../entities/classes/entities.Address.mdx)","description":"The details of the billing address associated with the cart.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"billing_address_id","type":"`string`","description":"The billing address's ID","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"completed_at","type":"`Date`","description":"The date with timezone at which the cart was completed.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"context","type":"`Record<string, unknown>`","description":"The context of the cart which can include info like IP or user agent.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"created_at","type":"`Date`","description":"The date with timezone at which the resource was created.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"customer","type":"[Customer](../../entities/classes/entities.Customer.mdx)","description":"The details of the customer the cart belongs to.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"customer_id","type":"`string`","description":"The customer's ID","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"deleted_at","type":"`null` \\| `Date`","description":"The date with timezone at which the resource was deleted.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"discounts","type":"[Discount](../../entities/classes/entities.Discount.mdx)[]","description":"An array of details of all discounts applied to the cart.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"email","type":"`string`","description":"The email associated with the cart","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"gift_cards","type":"[GiftCard](../../entities/classes/entities.GiftCard.mdx)[]","description":"An array of details of all gift cards applied to the cart.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"id","type":"`string`","description":"The cart's ID","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"idempotency_key","type":"`string`","description":"Randomly generated key used to continue the completion of a cart in case of failure.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"items","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)[]","description":"The line items added to the cart.","optional":false,"defaultValue":"","Line truncated
#### Returns
<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"The calculated tax total","expandable":false,"children":[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]}]} />