Skip to main content
Shipping · Revision #2

How do I set a custom item price totalizer for shipping rates?

How do I set a custom item price totalizer for shipping rates?

Shipping rates can define a custom item price totalizer to control how the total item price is calculated when determining whether a rate is applicable.

For example, you may want to calculate the shipping rate's price threshold using the original item prices rather than the discounted prices.

First, add settings to control whether discounts should be excluded:

\Aero\Cart\Models\ShippingRate::settings('extras', function (\Aero\Settings\Models\ModelSettingGroup $group) {
    $group->boolean('exclude_discount_from_total');
});

The setItemPriceTotalizer method can then calculate the total using the items' original prices when both the shipping rate has this option enabled:

\Aero\Cart\Models\ShippingRate::setItemPriceTotalizer(function ($items, \Aero\Cart\Models\ShippingRate $rate) {
    if (! $rate->setting('extras.exclude_discount_from_total')) {
        return null;
    }

    $total = $items->sum(function (\Aero\Cart\Models\OrderItem $item) {
        return $item->subtotal_price->inc()->value;
    });

    return round($total);
});

The totalizer receives the order items and the shipping rate as parameters and should return the total in pence or null

Returning null means the default item price totalizer will be used.


Parameters

Parameter Type Description
$items
\Aero\Common\Eloquent\JavaScriptableCollection
The order items being evaluated.
$rate
\Aero\Cart\Models\ShippingRate
The shipping rate being evaluated.