From ad8b4fdd62e301eb08f4074735cfeb66b1d7827c Mon Sep 17 00:00:00 2001 From: Maciej Zgadzaj Date: Fri, 20 Jan 2017 08:20:04 -0500 Subject: [PATCH 1/4] Issue #2845321: Add payment logging --- .../commerce_log.commerce_log_categories.yml | 4 + .../commerce_log.commerce_log_templates.yml | 29 ++++ .../log/src/CommerceLogServiceProvider.php | 5 + .../PaymentEventSubscriber.php | 142 ++++++++++++++++++ 4 files changed, 180 insertions(+) create mode 100644 modules/log/src/EventSubscriber/PaymentEventSubscriber.php diff --git a/modules/log/commerce_log.commerce_log_categories.yml b/modules/log/commerce_log.commerce_log_categories.yml index b921707752..8ea861b096 100644 --- a/modules/log/commerce_log.commerce_log_categories.yml +++ b/modules/log/commerce_log.commerce_log_categories.yml @@ -5,3 +5,7 @@ commerce_cart: commerce_order: label: Order entity_type: commerce_order + +commerce_payment: + label: Payment + entity_type: commerce_payment diff --git a/modules/log/commerce_log.commerce_log_templates.yml b/modules/log/commerce_log.commerce_log_templates.yml index 13dc722d95..fc70174529 100644 --- a/modules/log/commerce_log.commerce_log_templates.yml +++ b/modules/log/commerce_log.commerce_log_templates.yml @@ -23,3 +23,32 @@ order_canceled: category: commerce_order label: 'Order canceled' template: '

The order was canceled.

' + +payment_authorized: + category: commerce_payment + label: 'Payment authorized' + template: '

Payment {{ payment_remote_id }} was authorized.

' +payment_voided: + category: commerce_payment + label: 'Payment voided' + template: '

Payment {{ payment_remote_id }} was voided.

' +payment_expired: + category: commerce_payment + label: 'Payment expired' + template: '

Payment {{ payment_remote_id }} was expired.

' +payment_authorized_captured: + category: commerce_payment + label: 'Payment authorized and captured' + template: '

Payment {{ payment_remote_id }} was authorized and captured.

' +payment_captured: + category: commerce_payment + label: 'Payment captured' + template: '

Payment {{ payment_remote_id }} was captured.

' +payment_partially_refunded: + category: commerce_payment + label: 'Payment partially refunded' + template: '

Payment {{ payment_remote_id }} was partially refunded.

' +payment_refunded: + category: commerce_payment + label: 'Payment refunded' + template: '

Payment {{ payment_remote_id }} was refunded.

' diff --git a/modules/log/src/CommerceLogServiceProvider.php b/modules/log/src/CommerceLogServiceProvider.php index 769cc5fc21..a130fab387 100644 --- a/modules/log/src/CommerceLogServiceProvider.php +++ b/modules/log/src/CommerceLogServiceProvider.php @@ -29,6 +29,11 @@ public function register(ContainerBuilder $container) { ->addTag('event_subscriber') ->addArgument(new Reference('entity_type.manager')); } + if (isset($modules['commerce_payment'])) { + $container->register('commerce_log.payment_subscriber', 'Drupal\commerce_log\EventSubscriber\PaymentEventSubscriber') + ->addTag('event_subscriber') + ->addArgument(new Reference('entity_type.manager')); + } } } diff --git a/modules/log/src/EventSubscriber/PaymentEventSubscriber.php b/modules/log/src/EventSubscriber/PaymentEventSubscriber.php new file mode 100644 index 0000000000..e99b2a0943 --- /dev/null +++ b/modules/log/src/EventSubscriber/PaymentEventSubscriber.php @@ -0,0 +1,142 @@ +logStorage = $entity_type_manager->getStorage('commerce_log'); + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events = [ + 'commerce_payment.authorize.pre_transition' => ['onAuthorize', -100], + 'commerce_payment.void.pre_transition' => ['onVoid', -100], + 'commerce_payment.expire.pre_transition' => ['onExpire', -100], + 'commerce_payment.authorize_capture.pre_transition' => ['onAuthorizeCapture', -100], + 'commerce_payment.capture.pre_transition' => ['onCapture', -100], + 'commerce_payment.partially_refund.pre_transition' => ['onPartiallyRefund', -100], + 'commerce_payment.refund.pre_transition' => ['onRefund', -100], + ]; + return $events; + } + + /** + * Creates a log when a payment is authorized. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onAuthorize(WorkflowTransitionEvent $event) { + /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ + $payment = $event->getEntity(); + $this->logStorage->generate($payment, 'payment_authorized', [ + 'payment_remote_id' => $payment->getRemoteId(), + ])->save(); + } + + /** + * Creates a log when a payment is voided. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onVoid(WorkflowTransitionEvent $event) { + /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ + $payment = $event->getEntity(); + $this->logStorage->generate($payment, 'payment_voided', [ + 'payment_remote_id' => $payment->getRemoteId(), + ])->save(); + } + + /** + * Creates a log when a payment is expired. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onExpire(WorkflowTransitionEvent $event) { + /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ + $payment = $event->getEntity(); + $this->logStorage->generate($payment, 'payment_expired', [ + 'payment_remote_id' => $payment->getRemoteId(), + ])->save(); + } + + /** + * Creates a log when a payment is authorized and captured. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onAuthorizeCapture(WorkflowTransitionEvent $event) { + /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ + $payment = $event->getEntity(); + $this->logStorage->generate($payment, 'payment_authorized_captured', [ + 'payment_remote_id' => $payment->getRemoteId(), + ])->save(); + } + + /** + * Creates a log when a payment is captured. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onCapture(WorkflowTransitionEvent $event) { + /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ + $payment = $event->getEntity(); + $this->logStorage->generate($payment, 'payment_captured', [ + 'payment_remote_id' => $payment->getRemoteId(), + ])->save(); + } + + /** + * Creates a log when a payment is partially refunded. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onPartiallyRefund(WorkflowTransitionEvent $event) { + /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ + $payment = $event->getEntity(); + $this->logStorage->generate($payment, 'payment_partially_refunded', [ + 'payment_remote_id' => $payment->getRemoteId(), + ])->save(); + } + + /** + * Creates a log when a payment is fully refunded. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onRefund(WorkflowTransitionEvent $event) { + /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ + $payment = $event->getEntity(); + $this->logStorage->generate($payment, 'payment_refunded', [ + 'payment_remote_id' => $payment->getRemoteId(), + ])->save(); + } + +} From 1b6c883ab2a23a533781a20a6d0a02d80ce57252 Mon Sep 17 00:00:00 2001 From: Maciej Zgadzaj Date: Fri, 20 Jan 2017 08:21:07 -0500 Subject: [PATCH 2/4] Issue #2845321: Alter admin Order activity view to show payment logs --- modules/log/commerce_log.module | 4 +++- .../log/config/install/views.view.commerce_activity.yml | 7 +++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/log/commerce_log.module b/modules/log/commerce_log.module index 9c4927c624..7d0bdd2007 100644 --- a/modules/log/commerce_log.module +++ b/modules/log/commerce_log.module @@ -11,11 +11,13 @@ function commerce_log_preprocess_commerce_order(&$variables) { /** @var \Drupal\commerce_order\Entity\OrderInterface $order */ $order = $variables['elements']['#commerce_order']; + $order_payments = \Drupal::entityTypeManager()->getStorage('commerce_payment')->loadByProperties(['order_id' => $order->id()]); + $entity_ids = implode(',', array_merge([$order->id()], array_keys($order_payments))); $variables['order']['activity'] = [ '#type' => 'view', '#name' => 'commerce_activity', '#display_id' => 'default', - '#arguments' => [$order->id(), 'commerce_order'], + '#arguments' => [$entity_ids, 'commerce_order,commerce_payment'], '#embed' => TRUE, '#title' => t('Order activity'), ]; diff --git a/modules/log/config/install/views.view.commerce_activity.yml b/modules/log/config/install/views.view.commerce_activity.yml index 852aecc801..74c49e556d 100644 --- a/modules/log/config/install/views.view.commerce_activity.yml +++ b/modules/log/config/install/views.view.commerce_activity.yml @@ -44,9 +44,8 @@ display: sort_asc_label: Asc sort_desc_label: Desc pager: - type: some + type: none options: - items_per_page: 5 offset: 0 style: type: table @@ -316,7 +315,7 @@ display: type: none fail: 'not found' validate_options: { } - break_phrase: false + break_phrase: true not: false entity_type: commerce_log entity_field: source_entity_id @@ -358,7 +357,7 @@ display: case: none path_case: none transform_dash: false - break_phrase: false + break_phrase: true entity_type: commerce_log entity_field: source_entity_type plugin_id: string From d784d3b0be3c9d52b73538fa761ae5b1449c3827 Mon Sep 17 00:00:00 2001 From: Maciej Zgadzaj Date: Fri, 20 Jan 2017 11:24:53 -0500 Subject: [PATCH 3/4] Added payment events and refactored payment event subscribers accordingly --- .../commerce_log.commerce_log_templates.yml | 8 +- .../PaymentEventSubscriber.php | 152 +++++++++++++----- modules/payment/src/Entity/Payment.php | 1 + modules/payment/src/Event/PaymentEvent.php | 42 +++++ modules/payment/src/Event/PaymentEvents.php | 144 +++++++++++++++++ .../src/PluginForm/PaymentCaptureForm.php | 9 ++ .../src/PluginForm/PaymentRefundForm.php | 9 ++ 7 files changed, 322 insertions(+), 43 deletions(-) create mode 100644 modules/payment/src/Event/PaymentEvent.php create mode 100644 modules/payment/src/Event/PaymentEvents.php diff --git a/modules/log/commerce_log.commerce_log_templates.yml b/modules/log/commerce_log.commerce_log_templates.yml index fc70174529..449dbc744e 100644 --- a/modules/log/commerce_log.commerce_log_templates.yml +++ b/modules/log/commerce_log.commerce_log_templates.yml @@ -40,10 +40,14 @@ payment_authorized_captured: category: commerce_payment label: 'Payment authorized and captured' template: '

Payment {{ payment_remote_id }} was authorized and captured.

' +payment_partially_captured: + category: commerce_payment + label: 'Payment partially captured' + template: '

Payment {{ payment_remote_id }} was partially captured.

' payment_captured: category: commerce_payment label: 'Payment captured' - template: '

Payment {{ payment_remote_id }} was captured.

' + template: '

Payment {{ payment_remote_id }} was fully captured.

' payment_partially_refunded: category: commerce_payment label: 'Payment partially refunded' @@ -51,4 +55,4 @@ payment_partially_refunded: payment_refunded: category: commerce_payment label: 'Payment refunded' - template: '

Payment {{ payment_remote_id }} was refunded.

' + template: '

Payment {{ payment_remote_id }} was fully refunded.

' diff --git a/modules/log/src/EventSubscriber/PaymentEventSubscriber.php b/modules/log/src/EventSubscriber/PaymentEventSubscriber.php index e99b2a0943..3b13e920c7 100644 --- a/modules/log/src/EventSubscriber/PaymentEventSubscriber.php +++ b/modules/log/src/EventSubscriber/PaymentEventSubscriber.php @@ -2,6 +2,9 @@ namespace Drupal\commerce_log\EventSubscriber; +use Drupal\commerce_payment\Entity\PaymentInterface; +use Drupal\commerce_payment\Event\PaymentEvent; +use Drupal\commerce_payment\Event\PaymentEvents; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\state_machine\Event\WorkflowTransitionEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -30,13 +33,18 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager) { */ public static function getSubscribedEvents() { $events = [ - 'commerce_payment.authorize.pre_transition' => ['onAuthorize', -100], - 'commerce_payment.void.pre_transition' => ['onVoid', -100], - 'commerce_payment.expire.pre_transition' => ['onExpire', -100], - 'commerce_payment.authorize_capture.pre_transition' => ['onAuthorizeCapture', -100], - 'commerce_payment.capture.pre_transition' => ['onCapture', -100], - 'commerce_payment.partially_refund.pre_transition' => ['onPartiallyRefund', -100], - 'commerce_payment.refund.pre_transition' => ['onRefund', -100], + 'commerce_payment.authorize.pre_transition' => ['onAuthorizeTransition', -100], + 'commerce_payment.void.pre_transition' => ['onVoidTransition', -100], + 'commerce_payment.expire.pre_transition' => ['onExpireTransition', -100], + 'commerce_payment.authorize_capture.pre_transition' => ['onAuthorizeCaptureTransition', -100], + PaymentEvents::PAYMENT_AUTHORIZED => ['onAuthorize', -100], + PaymentEvents::PAYMENT_VOIDED => ['onVoid', -100], + PaymentEvents::PAYMENT_EXPIRED => ['onExpire', -100], + PaymentEvents::PAYMENT_AUTHORIZED_CAPTURED => ['onAuthorizeCapture', -100], + PaymentEvents::PAYMENT_PARTIALLY_CAPTURED => ['onPartialCapture', -100], + PaymentEvents::PAYMENT_CAPTURED => ['onCapture', -100], + PaymentEvents::PAYMENT_PARTIALLY_REFUNDED => ['onPartialRefund', -100], + PaymentEvents::PAYMENT_REFUNDED => ['onRefund', -100], ]; return $events; } @@ -47,9 +55,64 @@ public static function getSubscribedEvents() { * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event * The transition event. */ - public function onAuthorize(WorkflowTransitionEvent $event) { - /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ - $payment = $event->getEntity(); + public function onAuthorizeTransition(WorkflowTransitionEvent $event) { + $this->dispatch(PaymentEvents::PAYMENT_AUTHORIZED, $event->getEntity()); + } + + /** + * Creates a log when a payment is voided. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onVoidTransition(WorkflowTransitionEvent $event) { + $this->dispatch(PaymentEvents::PAYMENT_VOIDED, $event->getEntity()); + } + + /** + * Creates a log when a payment is expired. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onExpireTransition(WorkflowTransitionEvent $event) { + $this->dispatch(PaymentEvents::PAYMENT_EXPIRED, $event->getEntity()); + } + + /** + * Creates a log when a payment is authorized and captured. + * + * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event + * The transition event. + */ + public function onAuthorizeCaptureTransition(WorkflowTransitionEvent $event) { + $this->dispatch(PaymentEvents::PAYMENT_AUTHORIZED_CAPTURED, $event->getEntity()); + } + + /** + * Dispatches a PaymentEvent for a payment. + * + * @param string $event_name + * A name of the payment event to dispatch. + * @param \Drupal\commerce_payment\Entity\PaymentInterface $payment + * A payment to use for dispatching the event. + */ + private function dispatch($event_name, PaymentInterface $payment) { + /** @var \Drupal\commerce_payment\Event\PaymentEvent $event */ + $event = new PaymentEvent($payment); + /** @var \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $event_dispatcher */ + $event_dispatcher = \Drupal::service('event_dispatcher'); + $event_dispatcher->dispatch($event_name, $event); + } + + /** + * Creates a log when a payment is authorized. + * + * @param \Drupal\commerce_payment\Event\PaymentEvent $event + * The payment event. + */ + public function onAuthorize(PaymentEvent $event) { + $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_authorized', [ 'payment_remote_id' => $payment->getRemoteId(), ])->save(); @@ -58,12 +121,11 @@ public function onAuthorize(WorkflowTransitionEvent $event) { /** * Creates a log when a payment is voided. * - * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event - * The transition event. + * @param \Drupal\commerce_payment\Event\PaymentEvent $event + * The payment event. */ - public function onVoid(WorkflowTransitionEvent $event) { - /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ - $payment = $event->getEntity(); + public function onVoid(PaymentEvent $event) { + $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_voided', [ 'payment_remote_id' => $payment->getRemoteId(), ])->save(); @@ -72,12 +134,11 @@ public function onVoid(WorkflowTransitionEvent $event) { /** * Creates a log when a payment is expired. * - * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event - * The transition event. + * @param \Drupal\commerce_payment\Event\PaymentEvent $event + * The payment event. */ - public function onExpire(WorkflowTransitionEvent $event) { - /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ - $payment = $event->getEntity(); + public function onExpire(PaymentEvent $event) { + $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_expired', [ 'payment_remote_id' => $payment->getRemoteId(), ])->save(); @@ -86,26 +147,37 @@ public function onExpire(WorkflowTransitionEvent $event) { /** * Creates a log when a payment is authorized and captured. * - * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event - * The transition event. + * @param \Drupal\commerce_payment\Event\PaymentEvent $event + * The payment event. */ - public function onAuthorizeCapture(WorkflowTransitionEvent $event) { - /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ - $payment = $event->getEntity(); + public function onAuthorizeCapture(PaymentEvent $event) { + $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_authorized_captured', [ 'payment_remote_id' => $payment->getRemoteId(), ])->save(); } /** - * Creates a log when a payment is captured. + * Creates a log when a payment is partially captured. * - * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event - * The transition event. + * @param \Drupal\commerce_payment\Event\PaymentEvent $event + * The payment event. */ - public function onCapture(WorkflowTransitionEvent $event) { - /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ - $payment = $event->getEntity(); + public function onPartialCapture(PaymentEvent $event) { + $payment = $event->getPayment(); + $this->logStorage->generate($payment, 'payment_partially_captured', [ + 'payment_remote_id' => $payment->getRemoteId(), + ])->save(); + } + + /** + * Creates a log when a payment is fully captured. + * + * @param \Drupal\commerce_payment\Event\PaymentEvent $event + * The payment event. + */ + public function onCapture(PaymentEvent $event) { + $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_captured', [ 'payment_remote_id' => $payment->getRemoteId(), ])->save(); @@ -114,12 +186,11 @@ public function onCapture(WorkflowTransitionEvent $event) { /** * Creates a log when a payment is partially refunded. * - * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event - * The transition event. + * @param \Drupal\commerce_payment\Event\PaymentEvent $event + * The payment event. */ - public function onPartiallyRefund(WorkflowTransitionEvent $event) { - /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ - $payment = $event->getEntity(); + public function onPartialRefund(PaymentEvent $event) { + $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_partially_refunded', [ 'payment_remote_id' => $payment->getRemoteId(), ])->save(); @@ -128,12 +199,11 @@ public function onPartiallyRefund(WorkflowTransitionEvent $event) { /** * Creates a log when a payment is fully refunded. * - * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event - * The transition event. + * @param \Drupal\commerce_payment\Event\PaymentEvent $event + * The payment event. */ - public function onRefund(WorkflowTransitionEvent $event) { - /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */ - $payment = $event->getEntity(); + public function onRefund(PaymentEvent $event) { + $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_refunded', [ 'payment_remote_id' => $payment->getRemoteId(), ])->save(); diff --git a/modules/payment/src/Entity/Payment.php b/modules/payment/src/Entity/Payment.php index 84ecb0d640..1ac7549bcd 100644 --- a/modules/payment/src/Entity/Payment.php +++ b/modules/payment/src/Entity/Payment.php @@ -24,6 +24,7 @@ * bundle_plugin_type = "commerce_payment_type", * handlers = { * "access" = "Drupal\commerce_payment\PaymentAccessControlHandler", + * "event" = "Drupal\commerce_payment\Event\PaymentEvent", * "list_builder" = "Drupal\commerce_payment\PaymentListBuilder", * "storage" = "Drupal\commerce_payment\PaymentStorage", * "form" = { diff --git a/modules/payment/src/Event/PaymentEvent.php b/modules/payment/src/Event/PaymentEvent.php new file mode 100644 index 0000000000..dcac009bf4 --- /dev/null +++ b/modules/payment/src/Event/PaymentEvent.php @@ -0,0 +1,42 @@ +payment = $payment; + } + + /** + * Gets the payment. + * + * @return \Drupal\commerce_payment\Entity\PaymentInterface + * The payment. + */ + public function getPayment() { + return $this->payment; + } + +} diff --git a/modules/payment/src/Event/PaymentEvents.php b/modules/payment/src/Event/PaymentEvents.php new file mode 100644 index 0000000000..d88a976409 --- /dev/null +++ b/modules/payment/src/Event/PaymentEvents.php @@ -0,0 +1,144 @@ +plugin; $payment_gateway_plugin->capturePayment($payment, $amount); + + /** @var \Drupal\commerce_payment\Event\PaymentEvent $event */ + $event = new PaymentEvent($payment); + /** @var \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $event_dispatcher */ + $event_dispatcher = \Drupal::service('event_dispatcher'); + $event_name = ($payment->getOrder()->getTotalPrice()->greaterThan($payment->getAmount())) ? PaymentEvents::PAYMENT_PARTIALLY_CAPTURED : PaymentEvents::PAYMENT_CAPTURED; + $event_dispatcher->dispatch($event_name, $event); } } diff --git a/modules/payment/src/PluginForm/PaymentRefundForm.php b/modules/payment/src/PluginForm/PaymentRefundForm.php index 1a580fd268..14f718d89b 100644 --- a/modules/payment/src/PluginForm/PaymentRefundForm.php +++ b/modules/payment/src/PluginForm/PaymentRefundForm.php @@ -2,6 +2,8 @@ namespace Drupal\commerce_payment\PluginForm; +use Drupal\commerce_payment\Event\PaymentEvent; +use Drupal\commerce_payment\Event\PaymentEvents; use Drupal\commerce_price\Price; use Drupal\Core\Form\FormStateInterface; @@ -50,6 +52,13 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s /** @var \Drupal\commerce_payment\Plugin\Commerce\PaymentGateway\SupportsRefundsInterface $payment_gateway_plugin */ $payment_gateway_plugin = $this->plugin; $payment_gateway_plugin->refundPayment($payment, $amount); + + /** @var \Drupal\commerce_payment\Event\PaymentEvent $event */ + $event = new PaymentEvent($payment); + /** @var \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $event_dispatcher */ + $event_dispatcher = \Drupal::service('event_dispatcher'); + $event_name = ($payment->getBalance()->isZero()) ? PaymentEvents::PAYMENT_REFUNDED : PaymentEvents::PAYMENT_PARTIALLY_REFUNDED; + $event_dispatcher->dispatch($event_name, $event); } } From b7084810ebd129e7b24740fc17b33393bce35640 Mon Sep 17 00:00:00 2001 From: Maciej Zgadzaj Date: Fri, 20 Jan 2017 18:39:08 -0500 Subject: [PATCH 4/4] Added amount to partial capture and partial refund payment logs --- .../commerce_log.commerce_log_templates.yml | 4 +-- .../PaymentEventSubscriber.php | 2 ++ modules/payment/src/Event/PaymentEvent.php | 26 +++++++++++++++++++ .../src/PluginForm/PaymentCaptureForm.php | 1 + .../src/PluginForm/PaymentRefundForm.php | 1 + 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/modules/log/commerce_log.commerce_log_templates.yml b/modules/log/commerce_log.commerce_log_templates.yml index 449dbc744e..9dfb2d34de 100644 --- a/modules/log/commerce_log.commerce_log_templates.yml +++ b/modules/log/commerce_log.commerce_log_templates.yml @@ -43,7 +43,7 @@ payment_authorized_captured: payment_partially_captured: category: commerce_payment label: 'Payment partially captured' - template: '

Payment {{ payment_remote_id }} was partially captured.

' + template: '

Payment {{ payment_remote_id }} was partially captured ({{ captured_amount }}).

' payment_captured: category: commerce_payment label: 'Payment captured' @@ -51,7 +51,7 @@ payment_captured: payment_partially_refunded: category: commerce_payment label: 'Payment partially refunded' - template: '

Payment {{ payment_remote_id }} was partially refunded.

' + template: '

Payment {{ payment_remote_id }} was partially refunded ({{ refunded_amount }}).

' payment_refunded: category: commerce_payment label: 'Payment refunded' diff --git a/modules/log/src/EventSubscriber/PaymentEventSubscriber.php b/modules/log/src/EventSubscriber/PaymentEventSubscriber.php index 3b13e920c7..31ccf23606 100644 --- a/modules/log/src/EventSubscriber/PaymentEventSubscriber.php +++ b/modules/log/src/EventSubscriber/PaymentEventSubscriber.php @@ -167,6 +167,7 @@ public function onPartialCapture(PaymentEvent $event) { $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_partially_captured', [ 'payment_remote_id' => $payment->getRemoteId(), + 'captured_amount' => $event->getAmount(), ])->save(); } @@ -193,6 +194,7 @@ public function onPartialRefund(PaymentEvent $event) { $payment = $event->getPayment(); $this->logStorage->generate($payment, 'payment_partially_refunded', [ 'payment_remote_id' => $payment->getRemoteId(), + 'refunded_amount' => $event->getAmount(), ])->save(); } diff --git a/modules/payment/src/Event/PaymentEvent.php b/modules/payment/src/Event/PaymentEvent.php index dcac009bf4..73c874916d 100644 --- a/modules/payment/src/Event/PaymentEvent.php +++ b/modules/payment/src/Event/PaymentEvent.php @@ -3,6 +3,7 @@ namespace Drupal\commerce_payment\Event; use Drupal\commerce_payment\Entity\PaymentInterface; +use Drupal\commerce_price\Price; use Symfony\Component\EventDispatcher\Event; /** @@ -19,6 +20,13 @@ class PaymentEvent extends Event { */ protected $payment; + /** + * The payment operation amount. + * + * @var \Drupal\commerce_price\Price + */ + protected $amount; + /** * Constructs a new PaymentEvent. * @@ -29,6 +37,24 @@ public function __construct(PaymentInterface $payment) { $this->payment = $payment; } + /** + * @param \Drupal\commerce_price\Price $amount + * The payment operation amount. + */ + public function setAmount(Price $amount) { + $this->amount = $amount; + } + + /** + * Gets the payment operation amount. + * + * @return \Drupal\commerce_price\Price + * The payment operation amount. + */ + public function getAmount() { + return $this->amount; + } + /** * Gets the payment. * diff --git a/modules/payment/src/PluginForm/PaymentCaptureForm.php b/modules/payment/src/PluginForm/PaymentCaptureForm.php index 35ff3dfd19..c5145f437c 100644 --- a/modules/payment/src/PluginForm/PaymentCaptureForm.php +++ b/modules/payment/src/PluginForm/PaymentCaptureForm.php @@ -41,6 +41,7 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s /** @var \Drupal\commerce_payment\Event\PaymentEvent $event */ $event = new PaymentEvent($payment); + $event->setAmount($amount); /** @var \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $event_dispatcher */ $event_dispatcher = \Drupal::service('event_dispatcher'); $event_name = ($payment->getOrder()->getTotalPrice()->greaterThan($payment->getAmount())) ? PaymentEvents::PAYMENT_PARTIALLY_CAPTURED : PaymentEvents::PAYMENT_CAPTURED; diff --git a/modules/payment/src/PluginForm/PaymentRefundForm.php b/modules/payment/src/PluginForm/PaymentRefundForm.php index 14f718d89b..c4150770ed 100644 --- a/modules/payment/src/PluginForm/PaymentRefundForm.php +++ b/modules/payment/src/PluginForm/PaymentRefundForm.php @@ -55,6 +55,7 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s /** @var \Drupal\commerce_payment\Event\PaymentEvent $event */ $event = new PaymentEvent($payment); + $event->setAmount($amount); /** @var \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $event_dispatcher */ $event_dispatcher = \Drupal::service('event_dispatcher'); $event_name = ($payment->getBalance()->isZero()) ? PaymentEvents::PAYMENT_REFUNDED : PaymentEvents::PAYMENT_PARTIALLY_REFUNDED;