45 private $itemPriceCalculator;
57 \
Magento\Framework\
App\Config\ScopeConfigInterface $scopeConfig,
58 \
Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory,
59 \Psr\Log\LoggerInterface
$logger,
60 \
Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory,
61 \
Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory,
65 $this->_rateResultFactory = $rateResultFactory;
66 $this->_rateMethodFactory = $rateMethodFactory;
67 $this->itemPriceCalculator = $itemPriceCalculator;
68 parent::__construct($scopeConfig, $rateErrorFactory,
$logger,
$data);
83 $freeBoxes = $this->getFreeBoxesCount(
$request);
84 $this->setFreeBoxes($freeBoxes);
87 $result = $this->_rateResultFactory->create();
103 private function getFreeBoxesCount(RateRequest
$request)
108 if (
$item->getProduct()->isVirtual() ||
$item->getParentItem()) {
112 if (
$item->getHasChildren() &&
$item->isShipSeparately()) {
113 $freeBoxes += $this->getFreeBoxesCountFromChildren(
$item);
115 $freeBoxes +=
$item->getQty();
142 $shippingPrice = $this->itemPriceCalculator->getShippingPricePerOrder(
$request, $configPrice, $freeBoxes);
150 if (
$shippingPrice !==
false && $request->getPackageQty() == $freeBoxes) {
163 $method = $this->_rateMethodFactory->create();
165 $method->setCarrier(
'flatrate');
168 $method->setMethod(
'flatrate');
180 private function getFreeBoxesCountFromChildren(
$item)
183 foreach (
$item->getChildren() as $child) {
184 if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
185 $freeBoxes +=
$item->getQty() * $child->getQty();
elseif(isset( $params[ 'redirect_parent']))
getFinalPriceWithHandlingFee($cost)
collectRates(RateRequest $request)
__construct(\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory, \Psr\Log\LoggerInterface $logger, \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory, \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory, \Magento\OfflineShipping\Model\Carrier\Flatrate\ItemPriceCalculator $itemPriceCalculator, array $data=[])