Beispiel #1
0
/**
 * Calculates tax line items for an order.
 *
 * @param $order
 *   An order object or an order id.
 *
 * @return
 *   An array of tax line item objects keyed by a module-specific id.
 */
function hook_uc_calculate_tax($order)
{
    if (!is_object($order)) {
        return array();
    }
    if (empty($order->delivery_postal_code)) {
        $order->delivery_postal_code = $order->billing_postal_code;
    }
    if (empty($order->delivery_zone)) {
        $order->delivery_zone = $order->billing_zone;
    }
    if (empty($order->delivery_country)) {
        $order->delivery_country = $order->billing_country;
    }
    $order->tax = array();
    if ($order->getStatusId()) {
        $use_same_rates = in_array($order->getStateId(), array('payment_received', 'completed'));
    } else {
        $use_same_rates = FALSE;
    }
    foreach (uc_tax_rate_load() as $tax) {
        if ($use_same_rates) {
            foreach ((array) $order->line_items as $old_line) {
                if ($old_line['type'] == 'tax' && $old_line['data']['tax_id'] == $tax->id) {
                    $tax->rate = $old_line['data']['tax_rate'];
                    break;
                }
            }
        }
        $set = rules_config_load('uc_tax_' . $tax->id);
        if ($set->execute($order)) {
            $line_item = uc_tax_apply_tax($order, $tax);
            if ($line_item) {
                $order->tax[$line_item->id] = $line_item;
            }
        }
    }
    return $order->tax;
}
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state)
 {
     $tax_config = $this->config('uc_tax.settings');
     $header = array($this->t('Name'), $this->t('Rate'), $this->t('Taxed products'), $this->t('Taxed product types'), $this->t('Taxed line items'), $this->t('Weight'), $this->t('Operations'));
     $form['methods'] = array('#type' => 'table', '#header' => $header, '#tabledrag' => array(array('action' => 'order', 'relationship' => 'sibling', 'group' => 'uc-tax-method-weight')), '#empty' => $this->t('No tax rates have been configured yet.'));
     $rows = array();
     foreach (uc_tax_rate_load() as $rate_id => $rate) {
         // Build a list of operations links.
         $operations = array('edit' => array('title' => $this->t('edit'), 'url' => Url::fromRoute('uc_tax.rate_edit', ['tax_rate' => $rate_id])), 'clone' => array('title' => $this->t('clone'), 'url' => Url::fromRoute('uc_tax.rate_clone', ['tax_rate' => $rate_id])), 'delete' => array('title' => $this->t('delete'), 'url' => Url::fromRoute('uc_tax.rate_delete', ['tax_rate' => $rate_id])));
         // Ensure "delete" comes towards the end of the list.
         if (isset($operations['delete'])) {
             $operations['delete']['weight'] = 10;
         }
         uasort($operations, 'Drupal\\Component\\Utility\\SortArray::sortByWeightElement');
         $form['methods'][$rate_id]['status'] = array('#type' => 'checkbox', '#title' => SafeMarkup::checkPlain($rate->name), '#default_value' => $rate->enabled);
         $form['methods'][$rate_id]['rate'] = array('#markup' => $rate->rate * 100 . '%');
         $form['methods'][$rate_id]['taxed_products'] = array('#markup' => $rate->shippable ? $this->t('Shippable products') : $this->t('Any product'));
         $form['methods'][$rate_id]['taxed_types'] = array('#markup' => implode(', ', $rate->taxed_product_types));
         $form['methods'][$rate_id]['taxed_line_items'] = array('#markup' => implode(', ', $rate->taxed_line_items));
         $form['methods'][$rate_id]['weight'] = array('#type' => 'weight', '#default_value' => $rate->weight, '#attributes' => array('class' => array('uc-tax-method-weight')));
         $form['methods'][$rate_id]['operations'] = array('#type' => 'operations', '#links' => $operations);
     }
     return parent::buildForm($form, $form_state);
 }