ShippingAddressAssignment.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Quote\Model;
  7. class ShippingAddressAssignment
  8. {
  9. /**
  10. * @var \Magento\Quote\Model\Quote\ShippingAssignment\ShippingAssignmentProcessor
  11. */
  12. private $shippingAssignmentProcessor;
  13. /**
  14. * @var \Magento\Quote\Api\Data\CartExtensionFactory
  15. */
  16. private $cartExtensionFactory;
  17. /**
  18. * ShippingAddressAssignment constructor.
  19. * @param \Magento\Quote\Api\Data\CartExtensionFactory $cartExtensionFactory
  20. * @param Quote\ShippingAssignment\ShippingAssignmentProcessor $shippingAssignmentProcessor
  21. */
  22. public function __construct(
  23. \Magento\Quote\Api\Data\CartExtensionFactory $cartExtensionFactory,
  24. \Magento\Quote\Model\Quote\ShippingAssignment\ShippingAssignmentProcessor $shippingAssignmentProcessor
  25. ) {
  26. $this->shippingAssignmentProcessor = $shippingAssignmentProcessor;
  27. $this->cartExtensionFactory = $cartExtensionFactory;
  28. }
  29. /**
  30. * @param \Magento\Quote\Api\Data\CartInterface $quote
  31. * @param \Magento\Quote\Api\Data\AddressInterface $address
  32. * @param bool $useForShipping
  33. * @return void
  34. */
  35. public function setAddress(
  36. \Magento\Quote\Api\Data\CartInterface $quote,
  37. \Magento\Quote\Api\Data\AddressInterface $address,
  38. $useForShipping = false
  39. ) {
  40. if ($useForShipping) {
  41. $quote->removeAddress($quote->getShippingAddress()->getId());
  42. $address->setSameAsBilling(1);
  43. $address->setCollectShippingRates(true);
  44. } else {
  45. $address = $quote->getShippingAddress()->setSameAsBilling(0);
  46. }
  47. $quote->setShippingAddress($address);
  48. $cartExtension = $quote->getExtensionAttributes();
  49. if ($cartExtension === null) {
  50. $cartExtension = $this->cartExtensionFactory->create();
  51. }
  52. /** @var \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment */
  53. $shippingAssignment = $this->shippingAssignmentProcessor->create($quote);
  54. $cartExtension->setShippingAssignments([$shippingAssignment]);
  55. $quote->setExtensionAttributes($cartExtension);
  56. }
  57. }