You are here

public function TaxRateFormBase::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 EntityForm::buildForm

1 call to TaxRateFormBase::buildForm()
TaxRateEditForm::buildForm in uc_tax/src/Form/TaxRateEditForm.php
Form constructor.
1 method overrides TaxRateFormBase::buildForm()
TaxRateEditForm::buildForm in uc_tax/src/Form/TaxRateEditForm.php
Form constructor.

File

uc_tax/src/Form/TaxRateFormBase.php, line 28

Class

TaxRateFormBase
Defines the tax rate add/edit form.

Namespace

Drupal\uc_tax\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form = parent::buildForm($form, $form_state);
  $rate = $this->entity;
  $form['label'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Label'),
    '#description' => $this
      ->t('This name will appear to the customer when this tax is applied to an order.'),
    '#default_value' => $rate
      ->label(),
    '#required' => TRUE,
  ];
  $form['id'] = [
    '#type' => 'machine_name',
    '#title' => $this
      ->t('Machine name'),
    '#default_value' => $rate
      ->id(),
    '#maxlength' => 32,
    '#machine_name' => [
      'exists' => [
        $this,
        'exists',
      ],
      'replace_pattern' => '([^a-z0-9_]+)|(^custom$)',
      'error' => 'The machine-readable name must be unique, and can only contain lowercase letters, numbers, and underscores. Additionally, it can not be the reserved word "custom".',
    ],
  ];
  $form['rate'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Rate'),
    '#description' => $this
      ->t('The tax rate as a percent or decimal. Examples: 6%, .06'),
    '#size' => 15,
    '#default_value' => (double) $rate
      ->getRate() * 100.0 . '%',
    '#required' => TRUE,
  ];
  $form['shippable'] = [
    '#type' => 'radios',
    '#title' => $this
      ->t('Taxed products'),
    '#options' => [
      0 => $this
        ->t('Apply tax to any product regardless of its shippability.'),
      1 => $this
        ->t('Apply tax to shippable products only.'),
    ],
    '#default_value' => (int) $rate
      ->isForShippable(),
  ];

  // @todo Remove the need for a special case for product kit module.
  $options = [];
  foreach (node_type_get_names() as $type => $name) {
    if ($type != 'product_kit' && uc_product_is_product($type)) {
      $options[$type] = $name;
    }
  }
  $options['blank-line'] = $this
    ->t('"Blank line" product');
  $form['product_types'] = [
    '#type' => 'checkboxes',
    '#title' => $this
      ->t('Taxed product types'),
    '#description' => $this
      ->t('Apply taxes to the specified product types/classes.'),
    '#default_value' => $rate
      ->getProductTypes(),
    '#options' => $options,
  ];
  $options = [];
  $definitions = \Drupal::service('plugin.manager.uc_order.line_item')
    ->getDefinitions();
  foreach ($definitions as $id => $line_item) {
    if (!in_array($id, [
      'subtotal',
      'tax_subtotal',
      'total',
      'tax_display',
    ])) {
      $options[$id] = $line_item['title'];
    }
  }
  $form['line_item_types'] = [
    '#type' => 'checkboxes',
    '#title' => $this
      ->t('Taxed line items'),
    '#description' => $this
      ->t('Adds the checked line item types to the total before applying this tax.'),
    '#default_value' => $rate
      ->getLineItemTypes(),
    '#options' => $options,
  ];
  $form['weight'] = [
    '#type' => 'weight',
    '#title' => $this
      ->t('Weight'),
    '#description' => $this
      ->t('Taxes are sorted by weight and then applied to the order sequentially. This value is important when taxes need to include other tax line items.'),
    '#default_value' => $rate
      ->getWeight(),
  ];
  $form['display_include'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Include this tax when displaying product prices.'),
    '#default_value' => $rate
      ->isIncludedInPrice(),
  ];
  $form['inclusion_text'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Tax inclusion text'),
    '#description' => $this
      ->t('This text will be displayed near the price to indicate that it includes tax.'),
    '#default_value' => $rate
      ->getInclusionText(),
  ];
  return $form;
}