Skip navigation
Help

hook_uc_calculate_tax

7 uc_taxes.api.php hook_uc_calculate_tax($order)

Calculates tax line items for an order.

Parameters

$order: An order object or an order id.

Return value

An array of tax line item objects keyed by a module-specific id.

Related topics

2 functions implement hook_uc_calculate_tax()

1 invocation of hook_uc_calculate_tax()

File

ubercart/uc_taxes/uc_taxes.api.php, line 22
Hooks provided by the Taxes module.

Code

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->taxes = array();

  if (isset($order->order_status)) {
    $state = uc_order_status_data($order->order_status, 'state');
    $use_same_rates = in_array($state, array('payment_received', 'completed'));
  }
  else {
    $use_same_rates = FALSE;
  }

  foreach (uc_taxes_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_taxes_' . $tax->id);
    if ($set->execute($order)) {
      $line_item = uc_taxes_apply_tax($order, $tax);
      if ($line_item) {
        $order->taxes[$line_item->id] = $line_item;
      }
    }
  }

  return $order->taxes;
}