Calculator plugins
Edit on GitHubCalculator plugins are registered in the CalculationDependencyProvider::getQuoteCalculatorPluginStack()
for QuoteTransfer
and CalculationDependencyProvider::getOrderCalculatorPluginStack()
or in later versions of the Calculation module 4.00 and above 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
,sumGrossPriceWithProductOptions
forItemTransfer
andsumGrossPrice
forProductOptionTransfer
.>ItemTransfer::unitGrossPriceWithProductOptions = sum(ProductOptionTransfer::unitGrossPrice) + ItemTransfer::unitGrossPrice ItemTransfer::sumGrossPriceWithProductOptions = sum(ProductOptionTransfer::sumGrossPrice) + ItemTransfer:sumGrossPrice
-
SubtotalTotalsCalculatorPlugin
—Sums each of thesumGrossPriceWithProductOptions
items.TotalsTransfer::subtotal = sum(ItemTransfer::sumGrossPriceWithProductOptions)
-
ExpensesGrossSumAmountCalculatorPlugin
—CalculatessumGrossPrice
for each item.ExpenseTransfer::sumGrossPrice = ExpenseTransfer::unitGrossPrice * ExpenseTransfer::quantity
-
ExpenseTotalsCalculatorPlugin
—Calculates expenseTotal in TotalsTransfer.TotalsTransfer::expenseTotal = sum(ExpenseTransfer::sumGrossPrice)
-
DiscountCalculatorPlugin
—Applies discounts to currentQuoteTransfer
each discountable item with propertycalculatedDiscounts
, gets discounts filled. AlsovoucherDiscounts
andcartRuleDiscounts
are populated with additional used discount data for order level.
Discount calculation is a separate topic and is explained here Discount.
-
SumGrossCalculatedDiscountAmountCalculatorPlugin
—Calculates and setsItemTransfer
amounts after discounts tosumGrossPriceWithProductOptionAndDiscountAmounts
andunitGrossPriceWithProductOptionAndDiscountAmounts
; sets expense amounts after discounts tounitGrossPriceWithDiscounts
andsumGrossPriceWithDiscounts
.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
—Calculates total for discounts used and sets it to totalDiscount in TotalsTransfer. Sum all discountable item CalculatedDiscountTransfer gross amounts:TotalsTransfer:discountTotal += sum(ItemTransfer::CalculateDiscountTransfer::sumGrossAmount + ItemTransfer::ProductOptionTransfer::CalculateDiscountTransfer::sumGrossAmount + ExpenseTransfer::sumGrossAmount) GrandTotalTotalsCalculatorPlugin - Calculates grandTotal in TotalsTransfer. TotalsTransfer:grandTotal = TotalsTransfer::subtotal + TotalsTransfer:expenseTotal
-
GrandTotalWithDiscountsCalculatorPlugin
—CalculatesGrandTotal
after discounts inTotalsTransfer
.TotalsTransfer:grandTotal = TotalsTransfer::subtotal + TotalsTransfer:expenseTotal - TotalsTransfer::discountTotal
-
TaxTotalsCalculatorPlugin
—CalculatestaxTotal
andtaxRate
used 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