You are here

public function OrderPaymentsForm::buildForm in Ubercart 8.4

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

payment/uc_payment/src/Form/OrderPaymentsForm.php, line 85

Class

OrderPaymentsForm
Displays a list of payments attached to an order.

Namespace

Drupal\uc_payment\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, OrderInterface $uc_order = NULL) {
  $this->order = $uc_order;
  $form['#attached']['library'][] = 'uc_payment/uc_payment.styles';
  $total = $this->order
    ->getTotal();
  $payments = uc_payment_load_payments($this->order
    ->id());
  $form['order_total'] = [
    '#type' => 'item',
    '#title' => $this
      ->t('Order total'),
    '#theme' => 'uc_price',
    '#price' => $total,
  ];
  $form['payments'] = [
    '#type' => 'table',
    '#header' => [
      $this
        ->t('Received'),
      $this
        ->t('User'),
      $this
        ->t('Method'),
      $this
        ->t('Amount'),
      $this
        ->t('Balance'),
      $this
        ->t('Comment'),
      $this
        ->t('Action'),
    ],
    '#weight' => 10,
  ];
  foreach ($payments as $id => $payment) {
    $form['payments'][$id]['received'] = [
      '#markup' => $this->dateFormatter
        ->format($payment
        ->getReceived(), 'short'),
    ];
    $form['payments'][$id]['user'] = [
      '#theme' => 'username',
      '#account' => $payment
        ->getUser(),
    ];
    $form['payments'][$id]['method'] = [
      '#markup' => $payment
        ->getMethod()
        ->getPluginDefinition()['name'],
    ];
    $form['payments'][$id]['amount'] = [
      '#theme' => 'uc_price',
      '#price' => $payment
        ->getAmount(),
    ];
    $total -= $payment
      ->getAmount();
    $form['payments'][$id]['balance'] = [
      '#theme' => 'uc_price',
      '#price' => $total,
    ];
    $form['payments'][$id]['comment'] = [
      '#markup' => $payment
        ->getComment() ?: '-',
    ];
    $form['payments'][$id]['action'] = [
      '#type' => 'operations',
      '#links' => [
        'delete' => [
          'title' => $this
            ->t('Delete'),
          'url' => Url::fromRoute('uc_payments.delete', [
            'uc_order' => $this->order
              ->id(),
            'uc_payment_receipt' => $id,
          ]),
        ],
      ],
      '#access' => $this
        ->currentUser()
        ->hasPermission('delete payments'),
    ];
  }
  $form['balance'] = [
    '#type' => 'item',
    '#title' => $this
      ->t('Current balance'),
    '#theme' => 'uc_price',
    '#price' => $total,
  ];
  if ($this
    ->currentUser()
    ->hasPermission('manual payments')) {
    $form['new'] = [
      '#type' => 'details',
      '#title' => $this
        ->t('Add payment'),
      '#open' => TRUE,
      '#weight' => 20,
    ];
    $form['new']['amount'] = [
      '#type' => 'uc_price',
      '#title' => $this
        ->t('Amount'),
      '#required' => TRUE,
      '#size' => 6,
    ];
    $options = array_map(function ($definition) {
      return $definition['name'];
    }, array_filter($this->paymentMethodManager
      ->getDefinitions(), function ($definition) {
      return !$definition['no_ui'];
    }));
    $form['new']['method'] = [
      '#type' => 'select',
      '#title' => $this
        ->t('Payment method'),
      '#options' => $options,
    ];
    $form['new']['comment'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Comment'),
    ];
    $form['new']['received'] = [
      '#type' => 'datetime',
      '#title' => $this
        ->t('Date'),
      '#date_date_element' => 'date',
      '#date_time_element' => 'time',
      '#default_value' => DrupalDateTime::createFromTimestamp($this->time
        ->getRequestTime()),
    ];
    $form['new']['action'] = [
      '#type' => 'actions',
    ];
    $form['new']['action']['action'] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('Record payment'),
    ];
  }
  return $form;
}