55 */
66namespace Magento \Tax \Observer ;
77
8- use Magento \Framework \Event \ObserverInterface ;
98use Magento \Catalog \Pricing \Price \BasePrice ;
109use Magento \Catalog \Pricing \Price \RegularPrice ;
10+ use Magento \Framework \Event \ObserverInterface ;
1111
12+ /**
13+ * Modifies the bundle config for the front end to resemble the tax included price when tax included prices.
14+ */
1215class GetPriceConfigurationObserver implements ObserverInterface
1316{
1417 /**
@@ -23,6 +26,11 @@ class GetPriceConfigurationObserver implements ObserverInterface
2326 */
2427 protected $ registry ;
2528
29+ /**
30+ * @var array Cache of the current bundle selection items
31+ */
32+ private $ selectionCache = [];
33+
2634 /**
2735 * @param \Magento\Framework\Registry $registry
2836 * @param \Magento\Tax\Helper\Data $taxData
@@ -44,6 +52,7 @@ public function __construct(
4452 */
4553 public function execute (\Magento \Framework \Event \Observer $ observer )
4654 {
55+ $ this ->selectionCache = [];
4756 if ($ this ->taxData ->displayPriceIncludingTax ()) {
4857 /** @var \Magento\Catalog\Model\Product $product */
4958 $ product = $ this ->registry ->registry ('current_product ' );
@@ -78,12 +87,11 @@ private function recurConfigAndUpdatePrice($input, $searchKey)
7887 if (is_array ($ el )) {
7988 $ holder [$ key ] =
8089 $ this ->recurConfigAndUpdatePrice ($ el , $ searchKey );
81- if ($ key === $ searchKey ) {
82- if ((array_key_exists ('basePrice ' , $ holder [$ key ]))) {
83- if (array_key_exists ('optionId ' , $ input )) {
84- $ holder = $ this ->updatePriceForBundle ($ holder , $ key );
85- }
86- }
90+ if ($ key === $ searchKey
91+ && array_key_exists ('optionId ' , $ input )
92+ && array_key_exists ('basePrice ' , $ holder [$ key ])
93+ ) {
94+ $ holder = $ this ->updatePriceForBundle ($ holder , $ key );
8795 }
8896 } else {
8997 $ holder [$ key ] = $ el ;
@@ -102,32 +110,35 @@ private function recurConfigAndUpdatePrice($input, $searchKey)
102110 */
103111 private function updatePriceForBundle ($ holder , $ key )
104112 {
105- if (array_key_exists ($ key , $ holder )) {
106- if (array_key_exists ('basePrice ' , $ holder [$ key ])) {
107- /** @var \Magento\Catalog\Model\Product $product */
108- $ product = $ this ->registry ->registry ('current_product ' );
109- if ($ product ->getTypeId () == \Magento \Catalog \Model \Product \Type::TYPE_BUNDLE ) {
113+ if (array_key_exists ($ key , $ holder )
114+ && array_key_exists ('basePrice ' , $ holder [$ key ])) {
115+ /** @var \Magento\Catalog\Model\Product $product */
116+ $ product = $ this ->registry ->registry ('current_product ' );
117+ if ($ product ->getTypeId () == \Magento \Catalog \Model \Product \Type::TYPE_BUNDLE ) {
118+ if (!isset ($ this ->selectionCache [$ product ->getId ()])) {
110119 $ typeInstance = $ product ->getTypeInstance ();
111120 $ typeInstance ->setStoreFilter ($ product ->getStoreId (), $ product );
112121
113122 $ selectionCollection = $ typeInstance ->getSelectionsCollection (
114123 $ typeInstance ->getOptionsIds ($ product ),
115124 $ product
116125 );
126+ $ this ->selectionCache [$ product ->getId ()] = $ selectionCollection ->getItems ();
127+ }
128+ $ arrSelections = $ this ->selectionCache [$ product ->getId ()];
117129
118- foreach ($ selectionCollection -> getItems () as $ selectionItem ) {
119- if ($ holder ['optionId ' ] == $ selectionItem ->getId ()) {
120- /** @var \Magento\Framework\Pricing\Amount\Base $baseAmount */
121- $ baseAmount = $ selectionItem ->getPriceInfo ()->getPrice (BasePrice::PRICE_CODE )->getAmount ();
122- /** @var \Magento\Framework\Pricing\Amount\Base $oldAmount */
123- $ oldAmount =
130+ foreach ($ arrSelections as $ selectionItem ) {
131+ if ($ holder ['optionId ' ] == $ selectionItem ->getId ()) {
132+ /** @var \Magento\Framework\Pricing\Amount\Base $baseAmount */
133+ $ baseAmount = $ selectionItem ->getPriceInfo ()->getPrice (BasePrice::PRICE_CODE )->getAmount ();
134+ /** @var \Magento\Framework\Pricing\Amount\Base $oldAmount */
135+ $ oldAmount =
124136 $ selectionItem ->getPriceInfo ()->getPrice (RegularPrice::PRICE_CODE )->getAmount ();
125- if ($ baseAmount ->hasAdjustment ('tax ' )) {
126- $ holder [$ key ]['basePrice ' ]['amount ' ] =
137+ if ($ baseAmount ->hasAdjustment ('tax ' )) {
138+ $ holder [$ key ]['basePrice ' ]['amount ' ] =
127139 $ baseAmount ->getBaseAmount () + $ baseAmount ->getAdjustmentAmount ('tax ' );
128- $ holder [$ key ]['oldPrice ' ]['amount ' ] =
140+ $ holder [$ key ]['oldPrice ' ]['amount ' ] =
129141 $ oldAmount ->getBaseAmount () + $ oldAmount ->getAdjustmentAmount ('tax ' );
130- }
131142 }
132143 }
133144 }
0 commit comments