// This \Closure will find actual handler by date from handler's extra data $selector = function ($handlers, PackageInterface $package) { /** @var CalculatorInterface $currentHandler */ $currentHandler = null; $currentDate = null; /** @var CalculatorHandlerInterface $handler */ foreach ($handlers as $handler) { $extraData = $handler->get('extra_data'); $date = new \DateTime($extraData['date']); if ($package->getCalculationDate() >= $date && (is_null($currentHandler) || $date > $currentDate)) { $currentHandler = $handler; } } return $currentHandler; }; $calculator = new SelectiveCalculator(['handlers' => [AsendiaCalculatorHandler::create($config1), DhlCalculatorHandler::create($config2)], 'selector' => $selector]); $weight = new Weight(); $weight->setValue(10); $weight->setUnit('lb'); $dimensions = new Dimensions(); $dimensions->setLength(10); $dimensions->setWidth(10); $dimensions->setHeight(10); $dimensions->setUnit('in'); $senderAddress = new Address(); $senderAddress->setCountryCode('USA'); $recipientAddress = new Address(); $recipientAddress->setCountryCode('RUS'); $package = new Package(); // Change this date to calculate shipping by other calculator. // For example, `2015-12-12`.
public function testCreate() { $calculator = AsendiaCalculatorHandler::create(['zone_calculators' => [['name' => 1, 'weight_prices' => [['weight' => 10, 'price' => 21.4]]]], 'import_countries' => [['code' => 'USA', 'zone' => 1, 'maximum_weight' => 40]], 'export_countries' => [['code' => 'USA']], 'fuel_subcharge' => 0.07000000000000001, 'mass_unit' => 'lb', 'dimensions_unit' => 'in', 'maximum_dimension' => 41.338, 'maximum_girth' => 77.755]); $this->assertInstanceOf('EsteIt\\ShippingCalculator\\CalculatorHandler\\AsendiaCalculatorHandler', $calculator); }
<?php use EsteIt\ShippingCalculator\Calculator\BaseCalculator; use EsteIt\ShippingCalculator\CalculatorHandler\AsendiaCalculatorHandler; use EsteIt\ShippingCalculator\Model\Weight; use EsteIt\ShippingCalculator\Model\Dimensions; use EsteIt\ShippingCalculator\Model\Address; use EsteIt\ShippingCalculator\Model\Package; include_once __DIR__ . '/../vendor/autoload.php'; $config = (include __DIR__ . '/../src/Resources/Asendia/PMEI/tariff_2015_06_15.php'); $calculator = new BaseCalculator(['handler' => AsendiaCalculatorHandler::create($config)]); $weight = new Weight(); $weight->setValue(10); $weight->setUnit('lb'); $dimensions = new Dimensions(); $dimensions->setLength(10); $dimensions->setWidth(10); $dimensions->setHeight(10); $dimensions->setUnit('in'); $senderAddress = new Address(); $senderAddress->setCountryCode('USA'); $recipientAddress = new Address(); $recipientAddress->setCountryCode('RUS'); $package = new Package(); $package->setCalculationDate(new \DateTime()); $package->setWeight($weight); $package->setDimensions($dimensions); $package->setSenderAddress($senderAddress); $package->setRecipientAddress($recipientAddress); $result = $calculator->calculate($package); var_dump($result->getTotalCost());