/** * @param \Magento\Quote\Model\Quote\Address $address * @return $this */ public function collect(\Magento\Quote\Model\Quote\Address $address) { $address->setCustbalanceAmount(0); $address->setBaseCustbalanceAmount(0); $address->setGrandTotal($address->getGrandTotal() - $address->getCustbalanceAmount()); $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getBaseCustbalanceAmount()); return $this; }
/** * Collect grand total address amount * * @param \Magento\Quote\Model\Quote\Address $address * @return $this */ public function collect(\Magento\Quote\Model\Quote\Address $address) { $totals = array_sum($address->getAllTotalAmounts()); $baseTotals = array_sum($address->getAllBaseTotalAmounts()); $address->setGrandTotal($totals); $address->setBaseGrandTotal($baseTotals); return $this; }
/** * @param \Magento\Quote\Model\Quote\Address $address * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function collect(\Magento\Quote\Model\Quote\Address $address) { $quote = $address->getQuote(); $eventArgs = ['website_id' => $this->_storeManager->getStore($quote->getStoreId())->getWebsiteId(), 'customer_group_id' => $quote->getCustomerGroupId(), 'coupon_code' => $quote->getCouponCode()]; $address->setFreeShipping(0); $totalDiscountAmount = 0; $subtotalWithDiscount = 0; $baseTotalDiscountAmount = 0; $baseSubtotalWithDiscount = 0; $items = $address->getAllItems(); if (!count($items)) { $address->setDiscountAmount($totalDiscountAmount); $address->setSubtotalWithDiscount($subtotalWithDiscount); $address->setBaseDiscountAmount($baseTotalDiscountAmount); $address->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount); return $this; } foreach ($items as $item) { if ($item->getNoDiscount()) { $item->setDiscountAmount(0); $item->setBaseDiscountAmount(0); $item->setRowTotalWithDiscount($item->getRowTotal()); $item->setBaseRowTotalWithDiscount($item->getRowTotal()); $subtotalWithDiscount += $item->getRowTotal(); $baseSubtotalWithDiscount += $item->getBaseRowTotal(); } else { /** * Child item discount we calculate for parent */ if ($item->getParentItemId()) { continue; } /** * Composite item discount calculation */ if ($item->getHasChildren() && $item->isChildrenCalculated()) { foreach ($item->getChildren() as $child) { $eventArgs['item'] = $child; $this->_eventManager->dispatch('sales_quote_address_discount_item', $eventArgs); /** * Parent free shipping we apply to all children */ if ($item->getFreeShipping()) { $child->setFreeShipping($item->getFreeShipping()); } if (!$child->getDiscountAmount() && $item->getDiscountPercent()) { $child->setDiscountAmount($child->getRowTotal() * $item->getDiscountPercent()); } $totalDiscountAmount += $child->getDiscountAmount(); //*$item->getQty(); $baseTotalDiscountAmount += $child->getBaseDiscountAmount(); //*$item->getQty(); $child->setRowTotalWithDiscount($child->getRowTotal() - $child->getDiscountAmount()); $child->setBaseRowTotalWithDiscount($child->getBaseRowTotal() - $child->getBaseDiscountAmount()); $subtotalWithDiscount += $child->getRowTotalWithDiscount(); $baseSubtotalWithDiscount += $child->getBaseRowTotalWithDiscount(); } } else { $eventArgs['item'] = $item; $this->_eventManager->dispatch('sales_quote_address_discount_item', $eventArgs); $totalDiscountAmount += $item->getDiscountAmount(); $baseTotalDiscountAmount += $item->getBaseDiscountAmount(); $item->setRowTotalWithDiscount($item->getRowTotal() - $item->getDiscountAmount()); $item->setBaseRowTotalWithDiscount($item->getBaseRowTotal() - $item->getBaseDiscountAmount()); $subtotalWithDiscount += $item->getRowTotalWithDiscount(); $baseSubtotalWithDiscount += $item->getBaseRowTotalWithDiscount(); } } } $address->setDiscountAmount($totalDiscountAmount); $address->setSubtotalWithDiscount($subtotalWithDiscount); $address->setBaseDiscountAmount($baseTotalDiscountAmount); $address->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount); $address->setGrandTotal($address->getGrandTotal() - $address->getDiscountAmount()); $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getBaseDiscountAmount()); return $this; }