RecollectOnGroupChange.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Quote\Plugin;
  8. use Magento\Quote\Api\CartRepositoryInterface;
  9. use Magento\Customer\Model\ResourceModel\Customer as CustomerResource;
  10. use Magento\Customer\Model\Customer;
  11. use Magento\Framework\Model\AbstractModel;
  12. /**
  13. * Recollect quote totals after change customer group
  14. */
  15. class RecollectOnGroupChange
  16. {
  17. /**
  18. * @var CartRepositoryInterface
  19. */
  20. private $cartRepository;
  21. /**
  22. * @param CartRepositoryInterface $cartRepository
  23. */
  24. public function __construct(
  25. CartRepositoryInterface $cartRepository
  26. ) {
  27. $this->cartRepository = $cartRepository;
  28. }
  29. /**
  30. * Recollect totals if customer group change
  31. *
  32. * @param CustomerResource $subject
  33. * @param CustomerResource $result
  34. * @param AbstractModel $customer
  35. * @return CustomerResource
  36. *
  37. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  38. */
  39. public function afterSave(CustomerResource $subject, CustomerResource $result, AbstractModel $customer)
  40. {
  41. /** @var Customer $customer */
  42. if ($customer->getOrigData('group_id') !== null
  43. && $customer->getOrigData('group_id') != $customer->getGroupId()
  44. ) {
  45. try {
  46. /** @var \Magento\Quote\Model\Quote $quote */
  47. $quote = $this->cartRepository->getActiveForCustomer($customer->getId());
  48. $quote->setCustomerGroupId($customer->getGroupId());
  49. $quote->collectTotals();
  50. $this->cartRepository->save($quote);
  51. } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
  52. //no active cart for customer
  53. }
  54. }
  55. return $result;
  56. }
  57. }