InvoiceConfirmationSubscriber.php in Commerce Invoice 8.2
File
src/EventSubscriber/InvoiceConfirmationSubscriber.php
View source
<?php
namespace Drupal\commerce_invoice\EventSubscriber;
use Drupal\commerce_invoice\Mail\InvoiceConfirmationMailInterface;
use Drupal\Core\DestructableInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\state_machine\Event\WorkflowTransitionEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class InvoiceConfirmationSubscriber implements EventSubscriberInterface, DestructableInterface {
protected $entityTypeManager;
protected $invoiceConfirmationMail;
protected $invoicesList = [];
public function __construct(EntityTypeManagerInterface $entity_type_manager, InvoiceConfirmationMailInterface $invoice_confirmation_mail) {
$this->entityTypeManager = $entity_type_manager;
$this->invoiceConfirmationMail = $invoice_confirmation_mail;
}
public static function getSubscribedEvents() {
return [
'commerce_invoice.confirm.post_transition' => [
'sendInvoiceConfirmation',
-100,
],
];
}
public function sendInvoiceConfirmation(WorkflowTransitionEvent $event) {
$invoice = $event
->getEntity();
$invoice_type_storage = $this->entityTypeManager
->getStorage('commerce_invoice_type');
$invoice_type = $invoice_type_storage
->load($invoice
->bundle());
if ($invoice_type
->shouldSendConfirmation()) {
$this->invoicesList[$invoice
->id()] = $invoice
->id();
}
}
public function destruct() {
if (empty($this->invoicesList)) {
return;
}
$invoice_storage = $this->entityTypeManager
->getStorage('commerce_invoice');
$invoice_type_storage = $this->entityTypeManager
->getStorage('commerce_invoice_type');
$invoices = $invoice_storage
->loadMultiple($this->invoicesList);
foreach ($invoices as $invoice) {
if ($invoice
->isPaid()) {
continue;
}
$invoice_type = $invoice_type_storage
->load($invoice
->bundle());
$this->invoiceConfirmationMail
->send($invoice, $invoice
->getEmail(), $invoice_type
->getConfirmationBcc());
}
}
}