7
7
namespace Magento \Tax \Model \Sales \Total \Quote ;
8
8
9
9
use Magento \Framework \App \Config \ScopeConfigInterface ;
10
+ use Magento \Quote \Model \Quote ;
10
11
use Magento \Tax \Model \Config ;
11
12
use Magento \Tax \Model \Calculation ;
12
13
use Magento \Quote \Model \Quote \Item \Updater ;
13
- use \Magento \Catalog \Api \ProductRepositoryInterface ;
14
+ use Magento \Catalog \Api \ProductRepositoryInterface ;
15
+ use Magento \Catalog \Api \Data \ProductInterface ;
16
+ use Magento \Framework \Api \Filter ;
17
+ use Magento \Framework \Api \Search \FilterGroup ;
18
+ use Magento \Framework \Api \SearchCriteriaInterface ;
14
19
15
20
/**
16
21
* Setup utility for quote
@@ -598,7 +603,7 @@ protected function createCartRule($ruleDataOverride)
598
603
*
599
604
* @param array $quoteData
600
605
* @param \Magento\Customer\Api\Data\CustomerInterface $customer
601
- * @return \Magento\Quote\Model\ Quote
606
+ * @return Quote
602
607
*/
603
608
protected function createQuote ($ quoteData , $ customer )
604
609
{
@@ -623,8 +628,8 @@ protected function createQuote($quoteData, $customer)
623
628
$ quoteBillingAddress = $ this ->objectManager ->create (\Magento \Quote \Model \Quote \Address::class);
624
629
$ quoteBillingAddress ->importCustomerAddressData ($ addressService ->getById ($ billingAddress ->getId ()));
625
630
626
- /** @var \Magento\Quote\Model\ Quote $quote */
627
- $ quote = $ this ->objectManager ->create (\ Magento \ Quote \ Model \ Quote::class);
631
+ /** @var Quote $quote */
632
+ $ quote = $ this ->objectManager ->create (Quote::class);
628
633
$ quote ->setStoreId (1 )
629
634
->setIsActive (true )
630
635
->setIsMultiShipping (false )
@@ -638,7 +643,7 @@ protected function createQuote($quoteData, $customer)
638
643
/**
639
644
* Add products to quote
640
645
*
641
- * @param \Magento\Quote\Model\ Quote $quote
646
+ * @param Quote $quote
642
647
* @param array $itemsData
643
648
* @return $this
644
649
*/
@@ -661,7 +666,8 @@ protected function addProductToQuote($quote, $itemsData)
661
666
* Create a quote based on given data
662
667
*
663
668
* @param array $quoteData
664
- * @return \Magento\Quote\Model\Quote
669
+ *
670
+ * @return Quote
665
671
*/
666
672
public function setupQuote ($ quoteData )
667
673
{
@@ -671,16 +677,7 @@ public function setupQuote($quoteData)
671
677
672
678
$ this ->addProductToQuote ($ quote , $ quoteData ['items ' ]);
673
679
if (isset ($ quoteData ['update_items ' ])) {
674
- $ updater = $ this ->objectManager ->get (Updater::class);
675
- $ productRepository = $ this ->objectManager ->get (ProductRepositoryInterface::class);
676
- foreach ($ quoteData ['update_items ' ] as $ sku => $ updateItem ) {
677
- $ product = $ productRepository ->get ($ sku );
678
- $ quoteItem = $ quote ->getItemByProduct ($ product );
679
- $ updater ->update (
680
- $ quoteItem ,
681
- $ updateItem
682
- );
683
- }
680
+ $ this ->updateItems ($ quote , $ quoteData ['update_items ' ]);
684
681
}
685
682
//Set shipping amount
686
683
if (isset ($ quoteData ['shipping_method ' ])) {
@@ -698,4 +695,33 @@ public function setupQuote($quoteData)
698
695
699
696
return $ quote ;
700
697
}
698
+
699
+ /**
700
+ * Update quote items
701
+ *
702
+ * @param Quote $quote
703
+ * @param array $items
704
+ *
705
+ * @return void
706
+ */
707
+ private function updateItems (Quote $ quote , array $ items ): void
708
+ {
709
+ $ updater = $ this ->objectManager ->get (Updater::class);
710
+ $ productRepository = $ this ->objectManager ->get (ProductRepositoryInterface::class);
711
+ $ filter = $ this ->objectManager ->create (Filter::class);
712
+ $ filter ->setField ('sku ' )->setValue (array_keys ($ items ));
713
+ $ filterGroup = $ this ->objectManager ->create (FilterGroup::class);
714
+ $ filterGroup ->setFilters ([$ filter ]);
715
+ $ searchCriteria = $ this ->objectManager ->create (SearchCriteriaInterface::class);
716
+ $ searchCriteria ->setFilterGroups ([$ filterGroup ]);
717
+ $ products = $ productRepository ->getList ($ searchCriteria )->getItems ();
718
+ /** @var ProductInterface $product */
719
+ foreach ($ products as $ product ) {
720
+ $ quoteItem = $ quote ->getItemByProduct ($ product );
721
+ $ updater ->update (
722
+ $ quoteItem ,
723
+ $ items [$ product ->getSku ()]
724
+ );
725
+ }
726
+ }
701
727
}
0 commit comments