import { Tabs, TabsList, TabsTrigger, TabsContent, TabsContentWrapper, TypeList } from "docs-ui" export const metadata = { title: `Prices Calculation`, } # {metadata.title} In this document, you'll learn how prices are calculated when you use the [calculatePrices method](/references/pricing/calculatePrices) of the Pricing Module's main service. ## calculatePrices Method The [calculatePrices method](/references/pricing/calculatePrices) accepts as parameters the ID of one or more price sets and a context. It returns a price object with the best matching price for each price set. ### Calculation Context The calculation context is an optional object passed as a second parameter to the `calculatePrices` method. It accepts rules to restrict the selected prices in the price set. For example: ```ts const price = await pricingModuleService.calculatePrices( { id: [priceSetId] }, { context: { currency_code: currencyCode, region_id: "reg_123", }, } ) ``` In this example, you retrieve the prices in a price set for the specified currency code and region ID. ### Returned Price Object For each price set, the `calculatePrices` method selects two prices: - A calculated price: Either a price that belongs to a price list and best matches the specified context, or the same as the original price. - An original price, which is either: - The same price as the calculated price if the price list it belongs to is of type `override`; - Or a price that doesn't belong to a price list and best matches the specified context. Both prices are returned in an object that has the following properties: --- ## Examples Consider the following price set: ```ts const priceSet = await pricingModuleService.createPriceSets({ prices: [ // default price { amount: 500, currency_code: "EUR", rules: {}, }, // prices with rules { amount: 400, currency_code: "EUR", rules: { region_id: "reg_123", }, }, { amount: 450, currency_code: "EUR", rules: { city: "krakow", }, }, { amount: 500, currency_code: "EUR", rules: { city: "warsaw", region_id: "reg_123", }, }, ], }) ``` ### Default Price Selection Code Result ```ts const price = await pricingModuleService.calculatePrices( { id: [priceSet.id] }, { context: { currency_code: "EUR" } } ) ``` The returned price is: ```ts const price = { id: "", is_calculated_price_price_list: false, calculated_amount: 500, is_original_price_price_list: false, original_amount: 500, currency_code: "EUR", is_calculated_price_tax_inclusive: false, is_original_price_tax_inclusive: false, calculated_price: { price_id: "", price_list_id: null, price_list_type: null, min_quantity: null, max_quantity: null, }, original_price: { price_id: "", price_list_id: null, price_list_type: null, min_quantity: null, max_quantity: null, }, } ``` - Original price selection: since there are no provided rules in the context, the original price is the default price. - Calculated price selection: since there are no associated price lists, the calculated price is set to the original price. ### Calculate Prices with Rules Code Result ```ts const price = await pricingModuleService.calculatePrices( { id: [priceSet.id] }, { context: { currency_code: "EUR", region_id: "reg_123", city: "krakow" } } ) ``` The returned price is: ```ts const price = { id: "", is_calculated_price_price_list: false, calculated_amount: 500, is_original_price_price_list: false, original_amount: 500, currency_code: "EUR", is_calculated_price_tax_inclusive: false, is_original_price_tax_inclusive: false, calculated_price: { price_id: "", price_list_id: null, price_list_type: null, min_quantity: null, max_quantity: null, }, original_price: { price_id: "", price_list_id: null, price_list_type: null, min_quantity: null, max_quantity: null, }, } ``` - Original price selection: The fourth price in the price list is selected as the best price. - Calculated price selection: since there are no associated price lists, the calculated price is set to the original price. ### Price Selection with Price List Code Result ```ts const priceList = pricingModuleService.createPriceLists([{ title: "Summer Price List", description: "Price list for summer sale", starts_at: Date.parse("01/10/2023").toString(), ends_at: Date.parse("31/10/2023").toString(), rules: { region_id: ['PL'] }, type: "sale", prices: [ { amount: 400, currency_code: "EUR", price_set_id: priceSet.id, }, { amount: 450, currency_code: "EUR", price_set_id: priceSet.id, }, ], }]); const price = await pricingModuleService.calculatePrices( { id: [priceSet.id] }, { context: { currency_code: "EUR", region_id: "PL", city: "krakow" } } ) ``` The returned price is: ```ts const price = { id: "", is_calculated_price_price_list: true, calculated_amount: 400, is_original_price_price_list: false, original_amount: 500, currency_code: "EUR", is_calculated_price_tax_inclusive: false, is_original_price_tax_inclusive: false, calculated_price: { price_id: "", price_list_id: null, price_list_type: null, min_quantity: null, max_quantity: null, }, original_price: { price_id: "", price_list_id: "", price_list_type: "sale", min_quantity: null, max_quantity: null, }, } ``` - Original price selection: The fourth price in the price list is selected as the best price. - Calculated price selection: The first price of the price list is selected as the best price.