Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
QuoteUpdater.php
Go to the documentation of this file.
1 <?php
7 
16 
21 {
25  private $config;
26 
30  private $quoteRepository;
31 
38  public function __construct(
39  Config $config,
40  CartRepositoryInterface $quoteRepository
41  ) {
42  $this->config = $config;
43  $this->quoteRepository = $quoteRepository;
44  }
45 
56  public function execute($nonce, array $details, Quote $quote)
57  {
58  if (empty($nonce) || empty($details)) {
59  throw new \InvalidArgumentException('The "nonce" and "details" fields does not exists');
60  }
61 
62  $payment = $quote->getPayment();
63 
65  $payment->setAdditionalInformation(DataAssignObserver::PAYMENT_METHOD_NONCE, $nonce);
66 
67  $this->updateQuote($quote, $details);
68  }
69 
77  private function updateQuote(Quote $quote, array $details)
78  {
79  $quote->setMayEditShippingAddress(false);
80  $quote->setMayEditShippingMethod(true);
81 
82  $this->updateQuoteAddress($quote, $details);
83  $this->disabledQuoteAddressValidation($quote);
84 
85  $quote->collectTotals();
86 
91  if ($quote->getExtensionAttributes()) {
92  $quote->getExtensionAttributes()->setShippingAssignments(null);
93  }
94 
95  $this->quoteRepository->save($quote);
96  }
97 
105  private function updateQuoteAddress(Quote $quote, array $details)
106  {
107  if (!$quote->getIsVirtual()) {
108  $this->updateShippingAddress($quote, $details);
109  }
110 
111  $this->updateBillingAddress($quote, $details);
112  }
113 
122  private function updateShippingAddress(Quote $quote, array $details)
123  {
124  $shippingAddress = $quote->getShippingAddress();
125 
126  $shippingAddress->setLastname($details['lastName']);
127  $shippingAddress->setFirstname($details['firstName']);
128  $shippingAddress->setEmail($details['email']);
129 
130  $shippingAddress->setCollectShippingRates(true);
131 
132  $this->updateAddressData($shippingAddress, $details['shippingAddress']);
133 
134  // PayPal's address supposes not saving against customer account
135  $shippingAddress->setSaveInAddressBook(false);
136  $shippingAddress->setSameAsBilling(false);
137  $shippingAddress->unsCustomerAddressId();
138  }
139 
147  private function updateBillingAddress(Quote $quote, array $details)
148  {
149  $billingAddress = $quote->getBillingAddress();
150 
151  if ($this->config->isRequiredBillingAddress()) {
152  $this->updateAddressData($billingAddress, $details['billingAddress']);
153  } else {
154  $this->updateAddressData($billingAddress, $details['shippingAddress']);
155  }
156 
157  $billingAddress->setFirstname($details['firstName']);
158  $billingAddress->setLastname($details['lastName']);
159  $billingAddress->setEmail($details['email']);
160 
161  // PayPal's address supposes not saving against customer account
162  $billingAddress->setSaveInAddressBook(false);
163  $billingAddress->setSameAsBilling(false);
164  $billingAddress->unsCustomerAddressId();
165  }
166 
174  private function updateAddressData(Address $address, array $addressData)
175  {
176  $extendedAddress = isset($addressData['extendedAddress'])
177  ? $addressData['extendedAddress']
178  : null;
179 
180  $address->setStreet([$addressData['streetAddress'], $extendedAddress]);
181  $address->setCity($addressData['locality']);
182  $address->setRegionCode($addressData['region']);
183  $address->setCountryId($addressData['countryCodeAlpha2']);
184  $address->setPostcode($addressData['postalCode']);
185 
186  // PayPal's address supposes not saving against customer account
187  $address->setSaveInAddressBook(false);
188  $address->setSameAsBilling(false);
189  $address->setCustomerAddressId(null);
190  }
191 }
$billingAddress
Definition: order.php:25
$config
Definition: fraud_order.php:17
__construct(Config $config, CartRepositoryInterface $quoteRepository)
$details
Definition: vault.phtml:10
$quote
$shippingAddress
Definition: order.php:40
$address
Definition: customer.php:38
$addressData
Definition: order.php:19
$payment
Definition: order.php:17
execute($nonce, array $details, Quote $quote)
$quoteRepository