arch-8.x-1.x-dev/modules/order/src/Plugin/Field/FieldFormatter/OrderLineItemFormatter.php

modules/order/src/Plugin/Field/FieldFormatter/OrderLineItemFormatter.php
<?php

namespace Drupal\arch_order\Plugin\Field\FieldFormatter;

use Drupal\arch_order\Plugin\Field\FieldWidget\OrderLineItemWidget;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FormatterBase;

/**
 * Plugin implementation of the 'order_line_item_formatter' formatter.
 *
 * @FieldFormatter(
 *   id = "order_line_item_formatter",
 *   module = "arch_order",
 *   label = @Translation("Line item", context = "arch_order"),
 *   field_types = {
 *     "order_line_item"
 *   }
 * )
 */
class OrderLineItemFormatter extends FormatterBase {

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = [];
    $tabledata = [];

    $values = [
      'type' => $this->t('Type', [], ['context' => 'arch_line_item']),
      'product_id' => $this->t('Product ID', [], ['context' => 'arch_line_item']),
      'product_bundle' => $this->t('Product type', [], ['context' => 'arch_product']),
      'price_net' => $this->t('Net price', [], ['context' => 'arch_price']),
      'price_gross' => $this->t('Gross price', [], ['context' => 'arch_price']),
      'price_vat_rate' => $this->t('VAT rate', [], ['context' => 'arch_price']),
      'price_vat_cat_name' => $this->t('VAT category', [], ['context' => 'arch_line_item']),
      'price_vat_amount' => $this->t('VAT amount', [], ['context' => 'arch_price']),
      'calculated_net' => $this->t('Calculated net price', [], ['context' => 'arch_line_item']),
      'calculated_gross' => $this->t('Calculated gross price', [], ['context' => 'arch_line_item']),
      'calculated_vat_rate' => $this->t('Calculated VAT rate', [], ['context' => 'arch_line_item']),
      'calculated_vat_cat_name' => $this->t('Calculated VAT category', [], ['context' => 'arch_line_item']),
      'calculated_vat_amount' => $this->t('Calculated VAT amount', [], ['context' => 'arch_line_item']),
      'reason_of_diff' => $this->t('Reason of diff', [], ['context' => 'arch_line_item']),
      'data' => $this->t('Options', [], ['context' => 'arch_line_item']),
    ];
    foreach ($items as $delta => $table) {
      foreach ($values as $value_name => $value_label) {
        $value = $table->{$value_name} ?? NULL;
        if ($value_name == 'type') {
          $type_options = OrderLineItemWidget::getTypeOptions();
          $value = $type_options[$value];
        }
        $tabledata[$delta][] = [
          'data' => $value,
          'class' => ['value', 'value-name-' . $value_name],
        ];
      }
    }

    if (empty($tabledata)) {
      return [];
    }

    $header = [];
    foreach ($values as $value_label) {
      $header[] = [
        'data' => $value_label,
        'class' => ['header-value'],
      ];
    }

    $render_array = [];
    $render_array['line_items'] = [
      '#type' => 'table',
      '#header' => $header,
      '#rows' => $tabledata,
      '#attributes' => [
        'class' => [
          'order-line-items-table',
        ],
      ],
    ];

    $elements[] = $render_array;

    return $elements;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc