123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Pricing\Amount;
- use Magento\Framework\Pricing\Adjustment\AdjustmentInterface;
- /**
- * Amount base model
- */
- class Base implements AmountInterface
- {
- /**
- * @var float
- */
- protected $amount;
- /**
- * @var float
- */
- protected $baseAmount;
- /**
- * @var float
- */
- protected $totalAdjustmentAmount;
- /**
- * @var float[]
- */
- protected $adjustmentAmounts = [];
- /**
- * @var AdjustmentInterface[]
- */
- protected $adjustments = [];
- /**
- * @param float $amount
- * @param array $adjustmentAmounts
- */
- public function __construct(
- $amount,
- array $adjustmentAmounts = []
- ) {
- $this->amount = $amount;
- $this->adjustmentAmounts = $adjustmentAmounts;
- }
- /**
- * Return full amount value
- *
- * @param null|string|array $exclude
- * @return float
- */
- public function getValue($exclude = null)
- {
- if ($exclude === null) {
- return $this->amount;
- } else {
- if (!is_array($exclude)) {
- $exclude = [(string)$exclude];
- }
- $amount = $this->amount;
- foreach ($exclude as $code) {
- if ($this->hasAdjustment($code)) {
- $amount -= $this->adjustmentAmounts[$code];
- }
- }
- return $amount;
- }
- }
- /**
- * Return full amount value in string format
- *
- * @return string
- */
- public function __toString()
- {
- return (string) $this->getValue();
- }
- /**
- * Return base amount part value
- *
- * @return float|null
- */
- public function getBaseAmount()
- {
- if ($this->baseAmount === null) {
- $this->calculateAmounts();
- }
- return $this->baseAmount;
- }
- /**
- * Return adjustment amount part value by adjustment code
- *
- * @param string $adjustmentCode
- * @return bool|float
- */
- public function getAdjustmentAmount($adjustmentCode)
- {
- return $this->adjustmentAmounts[$adjustmentCode] ?? false;
- }
- /**
- * Return sum amount of all applied adjustments
- *
- * @return float|null
- */
- public function getTotalAdjustmentAmount()
- {
- if ($this->totalAdjustmentAmount === null) {
- $this->calculateAmounts();
- }
- return $this->totalAdjustmentAmount;
- }
- /**
- * Return all applied adjustments as array
- *
- * @return float[]
- */
- public function getAdjustmentAmounts()
- {
- return $this->adjustmentAmounts;
- }
- /**
- * Check if adjustment is contained in amount object
- *
- * @param string $adjustmentCode
- * @return bool
- */
- public function hasAdjustment($adjustmentCode)
- {
- return array_key_exists($adjustmentCode, $this->adjustmentAmounts);
- }
- /**
- * Calculate base amount
- *
- * @return void
- */
- protected function calculateAmounts()
- {
- $this->baseAmount = $this->amount;
- $this->totalAdjustmentAmount = 0.;
- foreach ($this->adjustmentAmounts as $amount) {
- $this->baseAmount -= $amount;
- $this->totalAdjustmentAmount += $amount;
- }
- }
- }
|