/** * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _initSubtotal() { $store = $this->getStore(); $parent = $this->getParentBlock(); $subtotal = $parent->getTotal('subtotal'); if (!$subtotal) { return $this; } if ($this->_config->displaySalesSubtotalBoth($store)) { $subtotal = (double) $this->_source->getSubtotal(); $baseSubtotal = (double) $this->_source->getBaseSubtotal(); $subtotalIncl = (double) $this->_source->getSubtotalInclTax(); $baseSubtotalIncl = (double) $this->_source->getBaseSubtotalInclTax(); if (!$subtotalIncl || !$baseSubtotalIncl) { // Calculate the subtotal if it is not set $subtotalIncl = $subtotal + $this->_source->getTaxAmount() - $this->_source->getShippingTaxAmount(); $baseSubtotalIncl = $baseSubtotal + $this->_source->getBaseTaxAmount() - $this->_source->getBaseShippingTaxAmount(); if ($this->_source instanceof Order) { // Adjust for the discount tax compensation foreach ($this->_source->getAllItems() as $item) { $subtotalIncl += $item->getDiscountTaxCompensationAmount(); $baseSubtotalIncl += $item->getBaseDiscountTaxCompensationAmount(); } } } $subtotalIncl = max(0, $subtotalIncl); $baseSubtotalIncl = max(0, $baseSubtotalIncl); $totalExcl = new \Magento\Framework\DataObject(['code' => 'subtotal_excl', 'value' => $subtotal, 'base_value' => $baseSubtotal, 'label' => __('Subtotal (Excl.Tax)')]); $totalIncl = new \Magento\Framework\DataObject(['code' => 'subtotal_incl', 'value' => $subtotalIncl, 'base_value' => $baseSubtotalIncl, 'label' => __('Subtotal (Incl.Tax)')]); $parent->addTotal($totalExcl, 'subtotal'); $parent->addTotal($totalIncl, 'subtotal_excl'); $parent->removeTotal('subtotal'); } elseif ($this->_config->displaySalesSubtotalInclTax($store)) { $subtotalIncl = (double) $this->_source->getSubtotalInclTax(); $baseSubtotalIncl = (double) $this->_source->getBaseSubtotalInclTax(); if (!$subtotalIncl) { $subtotalIncl = $this->_source->getSubtotal() + $this->_source->getTaxAmount() - $this->_source->getShippingTaxAmount(); } if (!$baseSubtotalIncl) { $baseSubtotalIncl = $this->_source->getBaseSubtotal() + $this->_source->getBaseTaxAmount() - $this->_source->getBaseShippingTaxAmount(); } $total = $parent->getTotal('subtotal'); if ($total) { $total->setValue(max(0, $subtotalIncl)); $total->setBaseValue(max(0, $baseSubtotalIncl)); } } return $this; }
/** * Collect rates by address * * @param \Magento\Framework\DataObject $address * @param null|bool|array $limitCarrier * @return $this */ public function collectRatesByAddress(\Magento\Framework\DataObject $address, $limitCarrier = null) { /** @var $request \Magento\Quote\Model\Quote\Address\RateRequest */ $request = $this->_shipmentRequestFactory->create(); $request->setAllItems($address->getAllItems()); $request->setDestCountryId($address->getCountryId()); $request->setDestRegionId($address->getRegionId()); $request->setDestPostcode($address->getPostcode()); $request->setPackageValue($address->getBaseSubtotal()); $request->setPackageValueWithDiscount($address->getBaseSubtotalWithDiscount()); $request->setPackageWeight($address->getWeight()); $request->setFreeMethodWeight($address->getFreeMethodWeight()); $request->setPackageQty($address->getItemQty()); $request->setStoreId($this->_storeManager->getStore()->getId()); $request->setWebsiteId($this->_storeManager->getStore()->getWebsiteId()); $request->setBaseCurrency($this->_storeManager->getStore()->getBaseCurrency()); $request->setPackageCurrency($this->_storeManager->getStore()->getCurrentCurrency()); $request->setLimitCarrier($limitCarrier); $request->setBaseSubtotalInclTax($address->getBaseSubtotalInclTax()); return $this->collectRates($request); }
/** * Calculate price considering free shipping and handling fee * * @param string $cost * @param string $method * @return float|string * @api */ public function getMethodPrice($cost, $method = '') { return $method == $this->getConfigData($this->_freeMethod) && $this->getConfigFlag('free_shipping_enable') && $this->getConfigData('free_shipping_subtotal') <= $this->_rawRequest->getBaseSubtotalInclTax() ? '0.00' : $this->getFinalPriceWithHandlingFee($cost); }
/** * Prepare and set request in property of current instance * * @param \Magento\Framework\DataObject $request * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function setRequest(\Magento\Framework\DataObject $request) { $this->_request = $request; $this->setStore($request->getStoreId()); $requestObject = new \Magento\Framework\DataObject(); $requestObject->setIsGenerateLabelReturn($request->getIsGenerateLabelReturn()); $requestObject->setStoreId($request->getStoreId()); if ($request->getLimitMethod()) { $requestObject->setService($request->getLimitMethod()); } $requestObject = $this->_addParams($requestObject); if ($request->getDestPostcode()) { $requestObject->setDestPostal($request->getDestPostcode()); } $requestObject->setOrigCountry($this->_getDefaultValue($request->getOrigCountry(), Shipment::XML_PATH_STORE_COUNTRY_ID))->setOrigCountryId($this->_getDefaultValue($request->getOrigCountryId(), Shipment::XML_PATH_STORE_COUNTRY_ID)); $shippingWeight = $request->getPackageWeight(); $requestObject->setValue(round($request->getPackageValue(), 2))->setValueWithDiscount($request->getPackageValueWithDiscount())->setCustomsValue($request->getPackageCustomsValue())->setDestStreet($this->string->substr(str_replace("\n", '', $request->getDestStreet()), 0, 35))->setDestStreetLine2($request->getDestStreetLine2())->setDestCity($request->getDestCity())->setOrigCompanyName($request->getOrigCompanyName())->setOrigCity($request->getOrigCity())->setOrigPhoneNumber($request->getOrigPhoneNumber())->setOrigPersonName($request->getOrigPersonName())->setOrigEmail($this->_scopeConfig->getValue('trans_email/ident_general/email', \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $requestObject->getStoreId()))->setOrigCity($request->getOrigCity())->setOrigPostal($request->getOrigPostal())->setOrigStreetLine2($request->getOrigStreetLine2())->setDestPhoneNumber($request->getDestPhoneNumber())->setDestPersonName($request->getDestPersonName())->setDestCompanyName($request->getDestCompanyName()); $originStreet2 = $this->_scopeConfig->getValue(Shipment::XML_PATH_STORE_ADDRESS2, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $requestObject->getStoreId()); $requestObject->setOrigStreet($request->getOrigStreet() ? $request->getOrigStreet() : $originStreet2); if (is_numeric($request->getOrigState())) { $requestObject->setOrigState($this->_regionFactory->create()->load($request->getOrigState())->getCode()); } else { $requestObject->setOrigState($request->getOrigState()); } if ($request->getDestCountryId()) { $destCountry = $request->getDestCountryId(); } else { $destCountry = self::USA_COUNTRY_ID; } // for DHL, Puerto Rico state for US will assume as Puerto Rico country // for Puerto Rico, dhl will ship as international if ($destCountry == self::USA_COUNTRY_ID && ($request->getDestPostcode() == '00912' || $request->getDestRegionCode() == self::PUERTORICO_COUNTRY_ID)) { $destCountry = self::PUERTORICO_COUNTRY_ID; } $requestObject->setDestCountryId($destCountry)->setDestState($request->getDestRegionCode())->setWeight($shippingWeight)->setFreeMethodWeight($request->getFreeMethodWeight())->setOrderShipment($request->getOrderShipment()); if ($request->getPackageId()) { $requestObject->setPackageId($request->getPackageId()); } $requestObject->setBaseSubtotalInclTax($request->getBaseSubtotalInclTax()); $this->setRawRequest($requestObject); return $this; }