Skip to content
Snippets Groups Projects

Issue #3246055: Refactor ticket display page and PDF generation

Files
9
@@ -3,10 +3,9 @@
namespace Drupal\commerce_ticketing\EventSubscriber;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_order\Entity\OrderType;
use Drupal\commerce_order\Event\OrderEvent;
use Drupal\commerce_product\Entity\ProductVariationType;
use Drupal\commerce_ticketing\Entity\CommerceTicket;
use Drupal\commerce_ticketing\CommerceTicketCreateTickets;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Lock\LockBackendInterface;
use Drupal\Core\Logger\LoggerChannelInterface;
@@ -18,6 +17,7 @@ use Drupal\Core\Queue\QueueFactory;
class OrderEventSubscriber implements EventSubscriberInterface {
use StringTranslationTrait;
use CommerceTicketCreateTickets;
/**
* The entity type manager.
@@ -154,77 +154,6 @@ class OrderEventSubscriber implements EventSubscriberInterface {
}
/**
* Create tickets for all relevant line items.
*
* @param \Drupal\commerce_order\Entity\OrderInterface $order
*/
private function createTickets(OrderInterface $order) {
$line_items = $order->getItems();
$existing_tickets = $order->get('tickets')->referencedEntities();
$sorted_tickets = [];
/** @var CommerceTicket $existing_ticket */
foreach ($existing_tickets as $existing_ticket) {
if (!empty($item_id = $existing_ticket->getOrderItemId())) {
$sorted_tickets[] = $item_id;
}
}
$sorted_tickets = array_count_values($sorted_tickets);
foreach ($line_items as $line_item) {
$purchased_entity = $line_item->getPurchasedEntity();
if (!empty($purchased_entity)) {
/** @var ProductVariationType $variation_type */
$variation_type = ProductVariationType::load($purchased_entity->bundle());
/** @var OrderType $order_type */
$order_type = OrderType::load($order->bundle());
$ticket_type = $order_type->getThirdPartySetting('commerce_ticketing', 'ticket_type');
$order_state = $variation_type->getThirdPartySetting('commerce_ticketing', 'order_state');
$auto_create_ticket = $variation_type->getThirdPartySetting('commerce_ticketing', 'auto_create_ticket');
$auto_activate_ticket = $variation_type->getThirdPartySetting('commerce_ticketing', 'auto_activate_ticket');
$default_state = 'created';
if ($auto_activate_ticket && $order->getState()->getId() == $order_state) {
$default_state = 'active';
}
if (!empty($ticket_type) && $auto_create_ticket) {
// Create multiple tickets per line item.
$quantity = $line_item->getQuantity();
$current_quantity = !empty($sorted_tickets[$line_item->id()]) ? $sorted_tickets[$line_item->id()] : 0;
if (empty($sorted_tickets[$line_item->id()]) || $current_quantity < $quantity) {
for ($i = $current_quantity; $i < $quantity; $i++) {
$ticket = CommerceTicket::create(
[
'name' => $this->t('Ticket') . ' ' . $purchased_entity->label(),
'bundle' => $ticket_type,
'state' => $default_state,
'uid' => $order->get('uid'),
'order_id' => $order->id(),
'order_item_id' => $line_item->id(),
]
);
$ticket->save();
}
}
}
}
}
// Update backreference on order.
$storage = $this->entityTypeManager->getStorage('commerce_ticket');
$ticket_ids = $storage->getQuery()
->condition('order_id', $order->id())
->sort('id')
->execute();
$order->set('tickets', $ticket_ids);
}
/**
* Activate tickets.
*
Loading