1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Bundle\Pricing\Price;
use Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface;
use Magento\Catalog\Model\Product;
use Magento\Framework\Pricing\Price\AbstractPrice;
use Magento\Framework\App\ObjectManager;
/**
* Bundle option price model with final price.
*/
class BundleOptionPrice extends AbstractPrice implements BundleOptionPriceInterface
{
/**
* Price model code
*/
const PRICE_CODE = 'bundle_option';
/**
* @var BundleCalculatorInterface
*/
protected $calculator;
/**
* @var BundleSelectionFactory
* @deprecated 100.2.3
*/
protected $selectionFactory;
/**
* @var float|bool|null
*/
protected $maximalPrice;
/**
* @var BundleOptions
*/
private $bundleOptions;
/**
* @param Product $saleableItem
* @param float $quantity
* @param BundleCalculatorInterface $calculator
* @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
* @param BundleSelectionFactory $bundleSelectionFactory
* @param BundleOptions|null $bundleOptions
*/
public function __construct(
Product $saleableItem,
$quantity,
BundleCalculatorInterface $calculator,
\Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
BundleSelectionFactory $bundleSelectionFactory,
BundleOptions $bundleOptions = null
) {
$this->selectionFactory = $bundleSelectionFactory;
parent::__construct($saleableItem, $quantity, $calculator, $priceCurrency);
$this->product->setQty($this->quantity);
$this->bundleOptions = $bundleOptions ?: ObjectManager::getInstance()->get(BundleOptions::class);
}
/**
* {@inheritdoc}
*/
public function getValue()
{
if (null === $this->value) {
$this->value = $this->bundleOptions->calculateOptions($this->product);
}
return $this->value;
}
/**
* Getter for maximal price of options.
*
* @return bool|float
* @deprecated 100.2.3
*/
public function getMaxValue()
{
if (null === $this->maximalPrice) {
$this->maximalPrice = $this->bundleOptions->calculateOptions($this->product, false);
}
return $this->maximalPrice;
}
/**
* Get Options with attached Selections collection.
*
* @return \Magento\Bundle\Model\ResourceModel\Option\Collection
*/
public function getOptions()
{
return $this->bundleOptions->getOptions($this->product);
}
/**
* Get selection amount.
*
* @param \Magento\Bundle\Model\Selection $selection
* @return \Magento\Framework\Pricing\Amount\AmountInterface
*/
public function getOptionSelectionAmount($selection)
{
return $this->bundleOptions->getOptionSelectionAmount(
$this->product,
$selection,
false
);
}
/**
* Calculate maximal or minimal options value.
*
* @param bool $searchMin
* @return bool|float
*/
protected function calculateOptions($searchMin = true)
{
return $this->bundleOptions->calculateOptions($this->product, $searchMin);
}
/**
* Get minimal amount of bundle price with options
*
* @return \Magento\Framework\Pricing\Amount\AmountInterface
*/
public function getAmount()
{
return $this->calculator->getOptionsAmount($this->product);
}
}