function uc_tax_apply_item_tax in Ubercart 8.4
Calculates taxable amount for a single product.
2 calls to uc_tax_apply_item_tax()
- uc_tax_apply_tax in uc_tax/
uc_tax.module  - Applies taxes to an order.
 - uc_tax_get_included_tax in uc_tax/
uc_tax.module  - Calculates the taxes that should be included in a product's display price.
 
File
- uc_tax/
uc_tax.module, line 442  - Ubercart Tax module.
 
Code
function uc_tax_apply_item_tax($item, $tax) {
  // @todo The $item parameter can be many different objects, refactor this!
  $nid = $item instanceof NodeInterface ? $item
    ->id() : $item->nid->target_id;
  // Determine the product type.
  if (is_array($item->data) && isset($item->data['type'])) {
    // Saved in the order product data array.
    $type = $item->data['type'];
  }
  elseif (empty($nid)) {
    // "Blank-line" product.
    $type = 'blank-line';
  }
  elseif ($node = Node::load($nid)) {
    // Use type of current node, if it exists.
    $type = $node
      ->getType();
  }
  else {
    // Default to generic product.
    $type = 'product';
  }
  // Determine whether this is a shippable product.
  if (is_array($item->data) && isset($item->data['shippable'])) {
    // Saved in the order product data array.
    $shippable = $item->data['shippable'];
  }
  elseif (empty($nid)) {
    // "Blank line" product.
    $shippable = $item->weight > 0;
  }
  elseif ($node = Node::load($nid)) {
    // Use current node.
    $shippable = $node->shippable->value;
  }
  else {
    // Use default for this node type.
    $settings = NodeType::load($type)
      ->getModuleSettings('uc_product');
    $shippable = isset($settings['shippable']) ? $settings['shippable'] : TRUE;
  }
  // Tax products if they are of a taxed type and if it is shippable if
  // the tax only applies to shippable products.
  if (in_array($type, $tax->taxed_product_types) && ($tax->shippable == 0 || $shippable == 1)) {
    return is_object($item->price) ? $item->price->value : $item->price;
  }
  else {
    return FALSE;
  }
}