You are here

public function PaymentLineItemsDisplay::preRender in Payment 8.2

Implements form #pre_render callback.

Throws

\InvalidArgumentException

File

src/Element/PaymentLineItemsDisplay.php, line 75

Class

PaymentLineItemsDisplay
Provides an element to display payment line items.

Namespace

Drupal\payment\Element

Code

public function preRender(array $element) {
  if (!isset($element['#payment_line_items']) || !$element['#payment_line_items'] instanceof LineItemCollectionInterface) {
    throw new \InvalidArgumentException(sprintf('#payment_line_items must be an instance of %s.', LineItemCollectionInterface::class));
  }
  $element['table'] = array(
    '#empty' => $this
      ->t('There are no line items.'),
    '#header' => array(
      $this
        ->t('Description'),
      $this
        ->t('Quantity'),
      $this
        ->t('Amount'),
      $this
        ->t('Total'),
    ),
    '#type' => 'table',
  );

  /** @var \Drupal\payment\LineItemCollectionInterface $payment_line_items */
  $payment_line_items = $element['#payment_line_items'];
  foreach ($payment_line_items
    ->getLineItems() as $delta => $payment_line_item) {

    /** @var \Drupal\currency\Entity\CurrencyInterface $currency */
    $currency = $this->currencyStorage
      ->load($payment_line_item
      ->getCurrencyCode());
    $element['table']['line_item_' . $payment_line_item
      ->getName()] = array(
      '#attributes' => array(
        'class' => array(
          'payment-line-item',
          'payment-line-item-name-' . $payment_line_item
            ->getName(),
          'payment-line-item-plugin-' . $payment_line_item
            ->getPluginId(),
        ),
      ),
      'description' => array(
        '#attributes' => array(
          'class' => array(
            'payment-line-item-description',
          ),
        ),
        '#markup' => $payment_line_item
          ->getDescription(),
      ),
      'quantity' => array(
        '#attributes' => array(
          'class' => array(
            'payment-line-item-quantity',
          ),
        ),
        '#markup' => $payment_line_item
          ->getQuantity(),
      ),
      'amount' => array(
        '#attributes' => array(
          'class' => array(
            'payment-line-item-amount',
          ),
        ),
        '#markup' => $currency
          ->formatAmount($payment_line_item
          ->getAmount()),
      ),
      'total' => array(
        '#attributes' => array(
          'class' => array(
            'payment-line-item-amount-total',
          ),
        ),
        '#markup' => $currency
          ->formatAmount($payment_line_item
          ->getTotalAmount()),
      ),
    );
  }

  /** @var \Drupal\currency\Entity\CurrencyInterface $payment_line_items_currency */
  $payment_line_items_currency = $this->currencyStorage
    ->load($payment_line_items
    ->getCurrencyCode());
  $element['table']['payment_total'] = array(
    '#attributes' => array(
      'class' => array(
        'payment-amount',
      ),
    ),
    'label' => array(
      '#attributes' => array(
        'class' => array(
          'payment-amount-label',
        ),
        'colspan' => 3,
      ),
      '#markup' => $this
        ->t('Total amount'),
    ),
    'total' => array(
      '#attributes' => array(
        'class' => array(
          'payment-amount-total',
        ),
      ),
      '#markup' => $payment_line_items_currency
        ->formatAmount($payment_line_items
        ->getAmount()),
    ),
  );
  return $element;
}