You are here

public function TaxRateForm::form in Ubercart 8.4

Gets the actual form array to be built.

Overrides EntityForm::form

See also

\Drupal\Core\Entity\EntityForm::processForm()

\Drupal\Core\Entity\EntityForm::afterBuild()

File

uc_tax/src/Form/TaxRateForm.php, line 40

Class

TaxRateForm
Builds the form to edit tax rate entities.

Namespace

Drupal\uc_tax\Form

Code

public function form(array $form, FormStateInterface $form_state) {
  $definition = $this->plugin
    ->getPluginDefinition();
  $form['type'] = [
    '#type' => 'item',
    '#title' => $this
      ->t('Type'),
    '#markup' => $definition['label'],
  ];
  $form['label'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Label'),
    '#maxlength' => 255,
    '#default_value' => $this->entity
      ->label(),
    '#description' => $this
      ->t('The tax rate name shown to the customer at checkout.'),
    '#required' => TRUE,
  ];
  $form['id'] = [
    '#type' => 'machine_name',
    '#default_value' => $this->entity
      ->id(),
    '#maxlength' => 32,
    '#machine_name' => [
      'exists' => '\\Drupal\\uc_tax\\Entity\\TaxRate::load',
    ],
    '#disabled' => !$this->entity
      ->isNew(),
  ];
  $form['settings'] = $this->plugin
    ->buildConfigurationForm([], $form_state);
  $form['settings']['#tree'] = 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) $this->entity
      ->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' => $this->entity
      ->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' => $this->entity
      ->getLineItemTypes(),
    '#options' => $options,
  ];
  $form['display_include'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Include this tax when displaying product prices.'),
    '#default_value' => $this->entity
      ->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' => $this->entity
      ->getInclusionText(),
  ];
  return parent::form($form, $form_state);
}