AddBillingAgreementToSessionObserver.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Observer;
  7. use Magento\Framework\Event\ObserverInterface;
  8. use Magento\Framework\Event\Observer as EventObserver;
  9. /**
  10. * PayPal module observer
  11. */
  12. class AddBillingAgreementToSessionObserver implements ObserverInterface
  13. {
  14. /**
  15. * @var \Magento\Paypal\Model\Billing\AgreementFactory
  16. */
  17. protected $agreementFactory;
  18. /**
  19. * @var \Magento\Checkout\Model\Session
  20. */
  21. protected $checkoutSession;
  22. /**
  23. * Constructor
  24. *
  25. * @param \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory
  26. * @param \Magento\Checkout\Model\Session $checkoutSession
  27. */
  28. public function __construct(
  29. \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory,
  30. \Magento\Checkout\Model\Session $checkoutSession
  31. ) {
  32. $this->agreementFactory = $agreementFactory;
  33. $this->checkoutSession = $checkoutSession;
  34. }
  35. /**
  36. * @param EventObserver $observer
  37. * @return void
  38. */
  39. public function execute(EventObserver $observer)
  40. {
  41. /** @var \Magento\Sales\Model\Order\Payment $orderPayment */
  42. $orderPayment = $observer->getEvent()->getPayment();
  43. $agreementCreated = false;
  44. if ($orderPayment->getBillingAgreementData()) {
  45. $order = $orderPayment->getOrder();
  46. /** @var \Magento\Paypal\Model\Billing\Agreement $agreement */
  47. $agreement = $this->agreementFactory->create()->importOrderPayment($orderPayment);
  48. if ($agreement->isValid()) {
  49. $message = __('Created billing agreement #%1.', $agreement->getReferenceId());
  50. $order->addRelatedObject($agreement);
  51. $agreement->addOrderRelation($order);
  52. $this->checkoutSession->setLastBillingAgreementReferenceId($agreement->getReferenceId());
  53. $agreementCreated = true;
  54. } else {
  55. $message = __('We can\'t create a billing agreement for this order.');
  56. }
  57. $comment = $order->addStatusHistoryComment($message);
  58. $order->addRelatedObject($comment);
  59. }
  60. if (!$agreementCreated) {
  61. $this->checkoutSession->unsLastBillingAgreementReferenceId();
  62. }
  63. }
  64. }