/app/code/core/Mage/Sales/Block/Order/Totals.php
https://github.com/OpenMage/magento-lts · PHP · 316 lines · 184 code · 18 blank · 114 comment · 31 complexity · 603b13b30375e7b4affb824ff0d5f776 MD5 · raw file
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magento.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magento.com for more information.
- *
- * @category Mage
- * @package Mage_Sales
- * @copyright Copyright (c) 2006-2020 Magento, Inc. (http://www.magento.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- class Mage_Sales_Block_Order_Totals extends Mage_Core_Block_Template
- {
- /**
- * Associated array of totals
- * array(
- * $totalCode => $totalObject
- * )
- *
- * @var array
- */
- protected $_totals;
- protected $_order = null;
- /**
- * Initialize self totals and children blocks totals before html building
- *
- * @inheritDoc
- */
- protected function _beforeToHtml()
- {
- $this->_initTotals();
- foreach ($this->getChild() as $child) {
- if (method_exists($child, 'initTotals')) {
- $child->initTotals();
- }
- }
- return parent::_beforeToHtml();
- }
- /**
- * Get order object
- *
- * @return Mage_Sales_Model_Order
- */
- public function getOrder()
- {
- if ($this->_order === null) {
- if ($this->hasData('order')) {
- $this->_order = $this->_getData('order');
- } elseif (Mage::registry('current_order')) {
- $this->_order = Mage::registry('current_order');
- } elseif ($this->getParentBlock()->getOrder()) {
- $this->_order = $this->getParentBlock()->getOrder();
- }
- }
- return $this->_order;
- }
- /**
- * @param Mage_Sales_Model_Order $order
- * @return $this
- */
- public function setOrder($order)
- {
- $this->_order = $order;
- return $this;
- }
- /**
- * Get totals source object
- *
- * @return Mage_Sales_Model_Order
- */
- public function getSource()
- {
- return $this->getOrder();
- }
- /**
- * Initialize order totals array
- *
- * @return $this
- */
- protected function _initTotals()
- {
- $source = $this->getSource();
- $this->_totals = array();
- $this->_totals['subtotal'] = new Varien_Object(array(
- 'code' => 'subtotal',
- 'value' => $source->getSubtotal(),
- 'label' => $this->__('Subtotal')
- ));
- /**
- * Add shipping
- */
- if (!$source->getIsVirtual() && ((float) $source->getShippingAmount() || $source->getShippingDescription())) {
- $this->_totals['shipping'] = new Varien_Object(array(
- 'code' => 'shipping',
- 'field' => 'shipping_amount',
- 'value' => $this->getSource()->getShippingAmount(),
- 'label' => $this->__('Shipping & Handling')
- ));
- }
- /**
- * Add discount
- */
- if (((float)$this->getSource()->getDiscountAmount()) != 0) {
- if ($this->getSource()->getDiscountDescription()) {
- $discountLabel = $this->__('Discount (%s)', $source->getDiscountDescription());
- } else {
- $discountLabel = $this->__('Discount');
- }
- $this->_totals['discount'] = new Varien_Object(array(
- 'code' => 'discount',
- 'field' => 'discount_amount',
- 'value' => $source->getDiscountAmount(),
- 'label' => $discountLabel
- ));
- }
- $this->_totals['grand_total'] = new Varien_Object(array(
- 'code' => 'grand_total',
- 'field' => 'grand_total',
- 'strong'=> true,
- 'value' => $source->getGrandTotal(),
- 'label' => $this->__('Grand Total')
- ));
- /**
- * Base grandtotal
- */
- if ($this->getOrder()->isCurrencyDifferent()) {
- $this->_totals['base_grandtotal'] = new Varien_Object(array(
- 'code' => 'base_grandtotal',
- 'value' => $this->getOrder()->formatBasePrice($source->getBaseGrandTotal()),
- 'label' => $this->__('Grand Total to be Charged'),
- 'is_formated' => true,
- ));
- }
- return $this;
- }
- /**
- * Add new total to totals array after specific total or before last total by default
- *
- * @param Varien_Object $total
- * @param null|string $after accepted values: 'first', 'last'
- * @return Mage_Sales_Block_Order_Totals
- */
- public function addTotal(Varien_Object $total, $after = null)
- {
- if ($after !== null && $after != 'last' && $after != 'first') {
- $totals = array();
- $added = false;
- foreach ($this->_totals as $code => $item) {
- $totals[$code] = $item;
- if ($code == $after) {
- $added = true;
- $totals[$total->getCode()] = $total;
- }
- }
- if (!$added) {
- $last = array_pop($totals);
- $totals[$total->getCode()] = $total;
- $totals[$last->getCode()] = $last;
- }
- $this->_totals = $totals;
- } elseif ($after=='last') {
- $this->_totals[$total->getCode()] = $total;
- } elseif ($after=='first') {
- $totals = array($total->getCode()=>$total);
- $this->_totals = array_merge($totals, $this->_totals);
- } else {
- $last = array_pop($this->_totals);
- $this->_totals[$total->getCode()] = $total;
- $this->_totals[$last->getCode()] = $last;
- }
- return $this;
- }
- /**
- * Add new total to totals array before specific total or after first total by default
- *
- * @param Varien_Object $total
- * @param null|array|string $before
- * @return Mage_Sales_Block_Order_Totals
- */
- public function addTotalBefore(Varien_Object $total, $before = null)
- {
- if ($before !== null) {
- if (!is_array($before)) {
- $before = array($before);
- }
- foreach ($before as $beforeTotals) {
- if (isset($this->_totals[$beforeTotals])) {
- $totals = array();
- foreach ($this->_totals as $code => $item) {
- if ($code == $beforeTotals) {
- $totals[$total->getCode()] = $total;
- }
- $totals[$code] = $item;
- }
- $this->_totals = $totals;
- return $this;
- }
- }
- }
- $totals = array();
- $first = array_shift($this->_totals);
- $totals[$first->getCode()] = $first;
- $totals[$total->getCode()] = $total;
- foreach ($this->_totals as $code => $item) {
- $totals[$code] = $item;
- }
- $this->_totals = $totals;
- return $this;
- }
- /**
- * Get Total object by code
- *
- * @param string $code
- * @return Varien_Object|false
- */
- public function getTotal($code)
- {
- if (isset($this->_totals[$code])) {
- return $this->_totals[$code];
- }
- return false;
- }
- /**
- * Delete total by specific
- *
- * @param string $code
- * @return Mage_Sales_Block_Order_Totals
- */
- public function removeTotal($code)
- {
- unset($this->_totals[$code]);
- return $this;
- }
- /**
- * Apply sort orders to totals array.
- * Array should have next structure
- * array(
- * $totalCode => $totalSortOrder
- * )
- *
- *
- * @param array $order
- * @return Mage_Sales_Block_Order_Totals
- */
- public function applySortOrder($order)
- {
- return $this;
- }
- /**
- * get totals array for visualization
- *
- * @param null|string $area
- * @return array
- */
- public function getTotals($area = null)
- {
- $totals = array();
- if ($area === null) {
- $totals = $this->_totals;
- } else {
- $area = (string)$area;
- foreach ($this->_totals as $total) {
- $totalArea = (string) $total->getArea();
- if ($totalArea == $area) {
- $totals[] = $total;
- }
- }
- }
- return $totals;
- }
- /**
- * Format total value based on order currency
- *
- * @param Varien_Object $total
- * @return string
- */
- public function formatValue($total)
- {
- if (!$total->getIsFormated()) {
- return $this->getOrder()->formatPrice($total->getValue());
- }
- return $total->getValue();
- }
- }