How do I set a custom item volume totalizer for shipping rates?
Shipping rates can define a custom item volume totalizer to control how item volumes are calculated when determining whether a rate is applicable.
For example, you may want to account for additional packaging space by applying a percentage allowance to the volume of each item.
First, define the packaging allowance on the shipping method:
\Aero\Cart\Models\ShippingMethod::settings('extras', function (\Aero\Common\Settings\ModelSettingGroup $group) {
$group->integer('packaging_allowance')->default(20);
});
The setItemVolumeTotalizer method can then apply the allowance when calculating the total volume:
\Aero\Cart\Models\ShippingRate::setItemVolumeTotalizer(function ($items, \Aero\Cart\Models\ShippingRate $rate) {
$packagingAllowance = 1 + ($rate->shippingMethod->setting('extras.packaging_allowance') / 100);
return $items->sum(function (\Aero\Cart\Models\OrderItem $item) use ($packagingAllowance) {
return $item->buyable->volume * $packagingAllowance;
});
});
The totalizer receives the order items and the shipping rate as parameters and should return the total volume of the items or null.
Returning null means the default item volume 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. |