OpenCart 🇺🇦

Схема

public mixed getRates ( $value, $tax_class_id )

Аргументы

Аргумент Возможный тип Описание
$value
$tax_class_id

Описание

Метод пока еще не документирован.

Исходный код

$tax_rates = array();

if ($this->customer->isLogged()) {
	$customer_group_id = $this->customer->getCustomerGroupId();
} else {
	$customer_group_id = $this->config->get('config_customer_group_id');
}

if ($this->shipping_address) {
	$tax_query = $this->db->query("SELECT tr2.tax_rate_id, tr2.name, tr2.rate, tr2.type, tr1.priority FROM " . DB_PREFIX . "tax_rule tr1 LEFT JOIN " . DB_PREFIX . "tax_rate tr2 ON (tr1.tax_rate_id = tr2.tax_rate_id) INNER JOIN " . DB_PREFIX . "tax_rate_to_customer_group tr2cg ON (tr2.tax_rate_id = tr2cg.tax_rate_id) LEFT JOIN " . DB_PREFIX . "zone_to_geo_zone z2gz ON (tr2.geo_zone_id = z2gz.geo_zone_id) LEFT JOIN " . DB_PREFIX . "geo_zone gz ON (tr2.geo_zone_id = gz.geo_zone_id) WHERE tr1.tax_class_id = '" . (int)$tax_class_id . "' AND tr1.based = 'shipping' AND tr2cg.customer_group_id = '" . (int)$customer_group_id . "' AND z2gz.country_id = '" . (int)$this->shipping_address['country_id'] . "' AND (z2gz.zone_id = '0' OR z2gz.zone_id = '" . (int)$this->shipping_address['zone_id'] . "') ORDER BY tr1.priority ASC");

	foreach ($tax_query->rows as $result) {
		$tax_rates[$result['tax_rate_id']] = array(
			'tax_rate_id' => $result['tax_rate_id'],
			'name'        => $result['name'],
			'rate'        => $result['rate'],
			'type'        => $result['type'],
			'priority'    => $result['priority']
		);
	}
}

if ($this->payment_address) {
	$tax_query = $this->db->query("SELECT tr2.tax_rate_id, tr2.name, tr2.rate, tr2.type, tr1.priority FROM " . DB_PREFIX . "tax_rule tr1 LEFT JOIN " . DB_PREFIX . "tax_rate tr2 ON (tr1.tax_rate_id = tr2.tax_rate_id) INNER JOIN " . DB_PREFIX . "tax_rate_to_customer_group tr2cg ON (tr2.tax_rate_id = tr2cg.tax_rate_id) LEFT JOIN " . DB_PREFIX . "zone_to_geo_zone z2gz ON (tr2.geo_zone_id = z2gz.geo_zone_id) LEFT JOIN " . DB_PREFIX . "geo_zone gz ON (tr2.geo_zone_id = gz.geo_zone_id) WHERE tr1.tax_class_id = '" . (int)$tax_class_id . "' AND tr1.based = 'payment' AND tr2cg.customer_group_id = '" . (int)$customer_group_id . "' AND z2gz.country_id = '" . (int)$this->payment_address['country_id'] . "' AND (z2gz.zone_id = '0' OR z2gz.zone_id = '" . (int)$this->payment_address['zone_id'] . "') ORDER BY tr1.priority ASC");

	foreach ($tax_query->rows as $result) {
		$tax_rates[$result['tax_rate_id']] = array(
			'tax_rate_id' => $result['tax_rate_id'],
			'name'        => $result['name'],
			'rate'        => $result['rate'],
			'type'        => $result['type'],
			'priority'    => $result['priority']
		);
	}
}

if ($this->store_address) {
	$tax_query = $this->db->query("SELECT tr2.tax_rate_id, tr2.name, tr2.rate, tr2.type, tr1.priority FROM " . DB_PREFIX . "tax_rule tr1 LEFT JOIN " . DB_PREFIX . "tax_rate tr2 ON (tr1.tax_rate_id = tr2.tax_rate_id) INNER JOIN " . DB_PREFIX . "tax_rate_to_customer_group tr2cg ON (tr2.tax_rate_id = tr2cg.tax_rate_id) LEFT JOIN " . DB_PREFIX . "zone_to_geo_zone z2gz ON (tr2.geo_zone_id = z2gz.geo_zone_id) LEFT JOIN " . DB_PREFIX . "geo_zone gz ON (tr2.geo_zone_id = gz.geo_zone_id) WHERE tr1.tax_class_id = '" . (int)$tax_class_id . "' AND tr1.based = 'store' AND tr2cg.customer_group_id = '" . (int)$customer_group_id . "' AND z2gz.country_id = '" . (int)$this->store_address['country_id'] . "' AND (z2gz.zone_id = '0' OR z2gz.zone_id = '" . (int)$this->store_address['zone_id'] . "') ORDER BY tr1.priority ASC");

	foreach ($tax_query->rows as $result) {
		$tax_rates[$result['tax_rate_id']] = array(
			'tax_rate_id' => $result['tax_rate_id'],
			'name'        => $result['name'],
			'rate'        => $result['rate'],
			'type'        => $result['type'],
			'priority'    => $result['priority']
		);
	}
}			

$tax_rate_data = array();

foreach ($tax_rates as $tax_rate) {
	if (isset($tax_rate_data[$tax_rate['tax_rate_id']])) {
		$amount = $tax_rate_data[$tax_rate['tax_rate_id']]['amount'];
	} else {
		$amount = 0;
	}

	if ($tax_rate['type'] == 'F') {
		$amount += $tax_rate['rate'];
	} elseif ($tax_rate['type'] == 'P') {
		$amount += ($value / 100 * $tax_rate['rate']);
	}

	$tax_rate_data[$tax_rate['tax_rate_id']] = array(
		'tax_rate_id' => $tax_rate['tax_rate_id'],
		'name'        => $tax_rate['name'],
		'rate'        => $tax_rate['rate'],
		'type'        => $tax_rate['type'],
		'amount'      => $amount
	);
}

return $tax_rate_data;