Example #1
0
 /**
  * @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;
 }
Example #2
0
 /**
  * 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);
 }
Example #3
0
 /**
  * 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;
 }