Calculator plugins
Edit on GitHubCalculator plugins are registered in the CalculationDependencyProvider::getQuoteCalculatorPluginStack() for QuoteTransfer and CalculationDependencyProvider::getOrderCalculatorPluginStack(). In later versions of the Calculation module 4.00 and above, plugins are registered in CalculationDependencyProvider::getQuoteCalculatorPluginStack() for OrderTransfer.
This method can be extended on the project level and the plugin stack can be updated with your own plugins.
Each calculator must implement CalculatorPluginInterface.
<?php
interface CalculationPluginInterface
{
/**
* @api
*
* @param /Generated/Shared/Transfer/CalculableObjectTransfer $calculableObjectTransfer
*
* @return void
*/
public function recalculate(CalculableObjectTransfer $calculableObjectTransfer);
}
-
RemoveTotalsCalculatorPlugin—resets quote totals, sets TotalsTransfer empty. -
RemoveAllCalculatedDiscountsCalculatorPlugin—resets every CalculatedDiscountTransfer. -
ItemGrossAmountsCalculatorPlugin—calculates sumGrossPrice for each ItemTransfer.ItemTransfer::sumGrossPrice = ItemTransfer::unitGrossPrice * ItemTransfer::quantity -
ProductOptionGrossSumCalculatorPlugin—calculatesunitGrossPriceWithProductOptions,sumGrossPriceWithProductOptionsforItemTransferandsumGrossPriceforProductOptionTransfer.ProductOptionTransfer::sumGrossPrice=ProductOptionTransfer::unitGrossPrice*ProductOptionTransfer::quantityItemTransfer::unitGrossPriceWithProductOptions=sum(ProductOptionTransfer::unitGrossPrice)+ItemTransfer::unitGrossPriceItemTransfer::sumGrossPriceWithProductOptions=sum(ProductOptionTransfer::sumGrossPrice)+ItemTransfer:sumGrossPrice -
SubtotalTotalsCalculatorPluginsums each of thesumGrossPriceWithProductOptionsitems.TotalsTransfer::subtotal = sum(ItemTransfer::sumGrossPriceWithProductOptions). -
ExpensesGrossSumAmountCalculatorPlugin—calculatessumGrossPricefor each item.ExpenseTransfer::sumGrossPrice = ExpenseTransfer::unitGrossPrice * ExpenseTransfer::quantity -
ExpenseTotalsCalculatorPlugin—calculates expenseTotal in TotalsTransfer.TotalsTransfer::expenseTotal = sum(ExpenseTransfer::sumGrossPrice) -
DiscountCalculatorPlugin—applies discounts to currentQuoteTransferfor each discountable item with propertycalculatedDiscounts; gets discounts filled. AlsovoucherDiscountsandcartRuleDiscountsare populated with additional used discount data for order level.Discount CalculationDiscount calculation is a separate topic and is explained here Discount.
-
SumGrossCalculatedDiscountAmountCalculatorPlugin—calculates and setsItemTransferamounts after discounts tosumGrossPriceWithProductOptionAndDiscountAmountsandunitGrossPriceWithProductOptionAndDiscountAmounts; sets expense amounts after discounts tounitGrossPriceWithDiscountsandsumGrossPriceWithDiscounts.ItemTransfer::unitGrossPriceWithProductOptionAndDiscountAmounts=ItemTransfer::unitGrossPriceWithProductOptions-(sum(ItemTransfer:calculatedDiscounts::unitGrossPrice)+sum(ProductOptionTransfer::calculatedDiscounts::unitGrossPrice))ItemTransfer::sumGrossPriceWithProductOptionAndDiscountAmounts=ItemTransfer::sumGrossPriceWithProductOptions-(sum(ItemTransfer:calculatedDiscounts::sumGrossPrice)+sum(ProductOptionTransfer::calculatedDiscounts::sumGrossPrice)) -
DiscountTotalsCalculatorPlugin—сalculates total for discounts used and sets it tototalDiscountinTotalsTransfer. Sum all discountable itemCalculatedDiscountTransfergross amounts:TotalsTransfer:discountTotal+=sum(ItemTransfer::CalculateDiscountTransfer::sumGrossAmount+ItemTransfer::ProductOptionTransfer::CalculateDiscountTransfer::sumGrossAmount+ExpenseTransfer::sumGrossAmount)GrandTotalTotalsCalculatorPlugincalculatesgrandTotalinTotalsTransfer.TotalsTransfer:grandTotal=TotalsTransfer::subtotal+TotalsTransfer:expenseTotal -
GrandTotalWithDiscountsCalculatorPlugin—calculatesGrandTotalafter discounts inTotalsTransfer.TotalsTransfer:grandTotal = TotalsTransfer::subtotal + TotalsTransfer:expenseTotal - TotalsTransfer::discountTotal -
TaxTotalsCalculatorPlugin—calculatestaxTotalandtaxRateused fromTotalTransfer::grandTotal, sets it inTotalsTransfer::TaxTotalsTransfer.TaxableItems = ItemTransfer, ProductOptionTransfer, ExpenseTransfer. TaxTotalsTransfer::taxRate = sum(TaxableItems) / TaxableItems TaxTotalsTransfer::taxAmount = round((TotalsTransfer::grandTotal * TaxTotalsTransfer::taxRate) / TaxTotalsTransfer::taxRate / 100)
Thank you!
For submitting the form