/** * @param Dimensions $dimensions * @return Weight */ public function calculate(Dimensions $dimensions) { $length = $this->lengthConverter->convert($dimensions->getLength(), $dimensions->getUnit(), LengthUnits::IN); $width = $this->lengthConverter->convert($dimensions->getWidth(), $dimensions->getUnit(), LengthUnits::IN); $height = $this->lengthConverter->convert($dimensions->getHeight(), $dimensions->getUnit(), LengthUnits::IN); $volume = $this->math->mul($length, $width); $volume = $this->math->mul($volume, $height); $value = $this->math->div($volume, $this->getFactor()); $value = $this->math->roundUp($value, 3); $weight = new Weight(); $weight->setValue($value); $weight->setUnit(WeightUnits::LB); return $weight; }
/** * @param Dimensions $dimensions * @return Dimensions */ public function normalize(Dimensions $dimensions) { $values = [$dimensions->getLength(), $dimensions->getWidth(), $dimensions->getHeight()]; usort($values, [$this, 'sort']); $normalized = new Dimensions(); $normalized->setUnit($dimensions->getUnit()); $normalized->setLength(reset($values)); $normalized->setWidth(next($values)); $normalized->setHeight(next($values)); return $normalized; }
/** * @return \Closure */ protected function createDimensionsNormalizer() { return function (Options $options, $value) { if (!$value instanceof Dimensions) { $config = $value; $value = new Dimensions(); $value->setLength(reset($config)); $value->setWidth(next($config)); $value->setHeight(next($config)); } return $value; }; }
<?php use EsteIt\ShippingCalculator\Calculator\BaseCalculator; use EsteIt\ShippingCalculator\Handler\IParcelHandler; use EsteIt\ShippingCalculator\Weight; use EsteIt\ShippingCalculator\Dimensions; use EsteIt\ShippingCalculator\Address; use EsteIt\ShippingCalculator\Package; include_once __DIR__ . '/../vendor/autoload.php'; $config = (include __DIR__ . '/../src/Resources/IParcel/tariff_2015_01_12_usa.php'); $calculator = new BaseCalculator(['handler' => IParcelHandler::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('SGP'); $package = new Package(); $package->setWeight($weight); $package->setDimensions($dimensions); $package->setSenderAddress($senderAddress); $package->setRecipientAddress($recipientAddress); $result = $calculator->calculate($package); var_dump($result->getData());