RestoreCustomerGroupId.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Observer\Frontend;
  7. use Magento\Customer\Helper\Address as CustomerAddress;
  8. use Magento\Customer\Model\Address\AbstractAddress;
  9. use Magento\Framework\Event\Observer;
  10. use Magento\Framework\Event\ObserverInterface;
  11. use Magento\Quote\Api\Data\ShippingAssignmentInterface;
  12. use Magento\Quote\Model\Quote;
  13. /**
  14. * Class RestoreCustomerGroupId
  15. */
  16. class RestoreCustomerGroupId implements ObserverInterface
  17. {
  18. /**
  19. * Customer address
  20. *
  21. * @var CustomerAddress
  22. */
  23. protected $customerAddressHelper;
  24. /**
  25. * @param CustomerAddress $customerAddressHelper
  26. */
  27. public function __construct(CustomerAddress $customerAddressHelper)
  28. {
  29. $this->customerAddressHelper = $customerAddressHelper;
  30. }
  31. /**
  32. * Restore initial customer group ID in quote if needed on collect_totals_after event of quote address
  33. *
  34. * @param Observer $observer
  35. * @return void
  36. */
  37. public function execute(Observer $observer)
  38. {
  39. /** @var ShippingAssignmentInterface $shippingAssignment */
  40. $shippingAssignment = $observer->getEvent()->getShippingAssignment();
  41. /** @var Quote $quote */
  42. $quote = $observer->getEvent()->getQuote();
  43. $address = $shippingAssignment->getShipping()->getAddress();
  44. $configAddressType = $this->customerAddressHelper->getTaxCalculationAddressType();
  45. // Restore initial customer group ID in quote only if VAT is calculated based on shipping address
  46. if ($address->hasPrevQuoteCustomerGroupId() &&
  47. $configAddressType == AbstractAddress::TYPE_SHIPPING
  48. ) {
  49. $quote->setCustomerGroupId($address->getPrevQuoteCustomerGroupId());
  50. $address->unsPrevQuoteCustomerGroupId();
  51. }
  52. }
  53. }