/** * @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); }
/** * Check if giftmessages is allowed for specified entity. * * @param string $type * @param \Magento\Framework\DataObject $entity * @param \Magento\Store\Model\Store|int|null $store * @return bool|string|null * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function isMessagesAllowed($type, \Magento\Framework\DataObject $entity, $store = null) { if ($type == 'items') { $items = $entity->getAllItems(); if (!is_array($items) || empty($items)) { return $this->scopeConfig->getValue(self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store); } if ($entity instanceof \Magento\Quote\Model\Quote) { $_type = $entity->getIsMultiShipping() ? 'address_item' : 'item'; } else { $_type = 'order_item'; } foreach ($items as $item) { if ($item->getParentItem()) { continue; } if ($this->isMessagesAllowed($_type, $item, $store)) { return true; } } } elseif ($type == 'item') { return $this->_getDependenceFromStoreConfig($entity->getProduct()->getGiftMessageAvailable(), $store); } elseif ($type == 'order_item') { return $this->_getDependenceFromStoreConfig($entity->getGiftMessageAvailable(), $store); } elseif ($type == 'address_item') { $storeId = is_numeric($store) ? $store : $this->_storeManager->getStore($store)->getId(); if (!$this->isCached('address_item_' . $entity->getProductId())) { try { $giftMessageAvailable = $this->productRepository->getById($entity->getProductId(), false, $storeId)->getGiftMessageAvailable(); } catch (\Magento\Framework\Exception\NoSuchEntityException $noEntityException) { $giftMessageAvailable = null; } $this->setCached('address_item_' . $entity->getProductId(), $giftMessageAvailable); } return $this->_getDependenceFromStoreConfig($this->getCached('address_item_' . $entity->getProductId()), $store); } else { return $this->scopeConfig->getValue(self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ORDER, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store); } return false; }