Calculators

Danger

We’re sorry but this documentation section is outdated. Please have that in mind when trying to use it. You can help us making documentation up to date via Sylius Github. Thank you!

FlatRateCalculator

FlatRateCalculator class charges a flat rate per shipment.

<?php

use Sylius\Component\Shipping\Model\Shipment;
use Sylius\Component\Shipping\Calculator\FlatRateCalculator;
use Sylius\Component\Shipping\Model\ShipmentItem;

$shipmentItem = new ShipmentItem();
$shipment = new Shipment();
$shipment->addItem($shipmentItem);

$flatRateCalculator = new FlatRateCalculator();
// this configuration should be defined in shipping method allowed for shipment
$configuration = array('amount' => 1500);

$flatRateCalculator->calculate($shipment, $configuration); // returns 1500
$configuration = array('amount' => 500);
$flatRateCalculator->calculate($shipment, $configuration); // returns 500

FlexibleRateCalculator

FlexibleRateCalculator calculates a shipping charge, where first item has different cost that other items.

<?php

use Sylius\Component\Shipping\Model\Shipment;
use Sylius\Component\Shipping\Calculator\FlexibleRateCalculator;

$shipment = new Shipment();
$shipmentItem = new ShipmentItem();
$shipmentItem2 = new ShipmentItem();
$shipmentItem3 = new ShipmentItem();
$shipmentItem4 = new ShipmentItem();

// this configuration should be defined in shipping method allowed for shipment
$configuration = array(
    'first_item_cost'       => 1000,
    'additional_item_cost'  => 200,
    'additional_item_limit' => 2
);

$flexibleRateCalculator = new FlexibleRateCalculator();

$shipment->addItem($shipmentItem);
$flexibleRateCalculator->calculate($shipment, $configuration); // returns 1000

$shipment->addItem($shipmentItem2);
$shipment->addItem($shipmentItem3);
$flexibleRateCalculator->calculate($shipment, $configuration); // returns 1400

$shipment->addItem($shipmentItem4);
$flexibleRateCalculator->calculate($shipment, $configuration);
// returns 1400, because additional item limit is 3

PerItemRateCalculator

PerItemRateCalculator charges a flat rate per item.

<?php

use Sylius\Component\Shipping\Model\Shipment;
use Sylius\Component\Shipping\Model\ShipmentItem;
use Sylius\Component\Shipping\Calculator\PerItemRateCalculator;

// this configuration should be defined in shipping method allowed for shipment
$configuration = array('amount' => 200);
$perItemRateCalculator = new PerItemRateCalculator();

$shipment = new Shipment();
$shipmentItem = new ShipmentItem();
$shipmentItem2 = new ShipmentItem();

$perItemRateCalculator->calculate($shipment, $configuration); // returns 0

$shipment->addItem($shipmentItem);
$perItemRateCalculator->calculate($shipment, $configuration); // returns 200

$shipment->addItem($shipmentItem2);
$perItemRateCalculator->calculate($shipment, $configuration); // returns 400

VolumeRateCalculator

VolumeRateCalculator charges amount rate per volume.

<?php

use Sylius\Component\Shipping\Model\Shipment;
use Sylius\Component\Shipping\Model\ShipmentItem;
use Sylius\Component\Shipping\Calculator\VolumeRateCalculator;

$wardrobe = new Wardrobe();

$shipmentItem = new ShipmentItem();
$shipmentItem->setShippable($wardrobe);

$shipment = new Shipment();
$shipment->addItem($shipmentItem);

$configuration = array('amount' => 200, 'division' => 5);
// this configuration should be defined in shipping method allowed for shipment
$volumeRateCalculator = new VolumeRateCalculator();

$wardrobe->setShippingVolume(100);
$volumeRateCalculator->calculate($shipment, $configuration); // returns 4000

$wardrobe->setShippingVolume(20);
$volumeRateCalculator->calculate($shipment, $configuration); // returns  800

Hint

To see implementation of Wardrobe class please go to Basic Usage.

WeightRateCalculator

WeightRateCalculator charges amount rate per weight.

<?php

use Sylius\Component\Shipping\Model\Shipment;
use Sylius\Component\Shipping\Model\ShipmentItem;
use Sylius\Component\Shipping\Calculator\WeightRateCalculator;

$configuration = array('fixed' => 200, 'variable' => 500, 'division' => 5);
// this configuration should be defined in shipping method allowed for shipment
$weightRateCalculator = new WeightRateCalculator();

$wardrobe = new Wardrobe();

$shipmentItem = new ShipmentItem();
$shipmentItem->setShippable($wardrobe);

$shipment = new Shipment();
$shipment->addItem($shipmentItem);

$wardrobe->setShippingWeight(100);
$weightRateCalculator->calculate($shipment, $configuration); // returns 10200

$wardrobe->setShippingWeight(10);
$weightRateCalculator->calculate($shipment, $configuration); // returns 1200

Hint

To see implementation of Wardrobe class please go to Basic Usage.