function calculate_tax_deduction($amount, $od_amount, $method) { global $oOrder; switch ($method) { case 'Standard': $ratio1 = round($od_amount / $amount, 2); $tod_amount = 0; foreach ($oOrder->info['tax_groups'] as $key => $value) { $tax_rate = oos_get_tax_rate_from_desc($key); $total_net += $tax_rate * $oOrder->info['tax_groups'][$key]; } if ($od_amount > $total_net) { $od_amount = $total_net; } foreach ($oOrder->info['tax_groups'] as $key => $value) { $tax_rate = oos_get_tax_rate_from_desc($key); $net = $tax_rate * $oOrder->info['tax_groups'][$key]; if ($net > 0) { $god_amount = $oOrder->info['tax_groups'][$key] * $ratio1; $tod_amount += $god_amount; $oOrder->info['tax_groups'][$key] = $oOrder->info['tax_groups'][$key] - $god_amount; } } $oOrder->info['tax'] -= $tod_amount; $oOrder->info['total'] -= $tod_amount; break; case 'Credit Note': $tax_rate = oos_get_tax_rate($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tax_desc = oos_get_tax_description($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tod_amount = $this->deduction / (100 + $tax_rate) * $tax_rate; $oOrder->info['tax_groups'][$tax_desc] -= $tod_amount; // $oOrder->info['total'] -= $tod_amount; break; default: } return $tod_amount; }
function calculate_tax_deduction($amount, $od_amount, $method) { global $oOrder, $cc_id; // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); $cc_id = intval($_SESSION['cc_id']); $couponstable = $oostable['coupons']; $coupon_query = $dbconn->Execute("SELECT coupon_code FROM {$couponstable} WHERE coupon_id = '" . intval($cc_id) . "'"); if ($coupon_query->RecordCount() != 0) { $coupon_result = $coupon_query->fields; $coupon_get = $dbconn->Execute("SELECT coupon_amount, coupon_minimum_order, restrict_to_products, restrict_to_categories, coupon_type FROM " . $oostable['coupons'] . " WHERE coupon_code = '" . $coupon_result['coupon_code'] . "'"); $get_result = $coupon_get->fields; if ($get_result['coupon_type'] != 'S') { if ($get_result['restrict_to_products'] || $get_result['restrict_to_categories']) { // What to do here. // Loop through all products and build a list of all product_ids, price, tax class // at the same time create total net amount. // then // for percentage discounts. simply reduce tax group per product by discount percentage // or // for fixed payment amount // calculate ratio based on total net // for each product reduce tax group per product by ratio amount. $products = $_SESSION['cart']->get_products(); $nArrayCountProducts = count($products); for ($i = 0; $i < $nArrayCountProducts; $i++) { $t_prid = oos_get_product_id($products[$i]['id']); $productstable = $oostable['products']; $cc_query = $dbconn->Execute("SELECT products_tax_class_id FROM {$productstable} WHERE products_id = '" . (int) $t_prid . "'"); $cc_result = $cc_query->fields; $valid_product = false; if ($get_result['restrict_to_products']) { $pr_ids = split("[,]", $get_result['restrict_to_products']); $nArrayCountProductsIds = count($pr_ids); for ($p = 0; $p < $nArrayCountProductsIds; $p++) { if ($pr_ids[$p] == $t_prid) { $valid_product = true; } } } if ($get_result['restrict_to_categories']) { $cat_ids = split("[,]", $get_result['restrict_to_categories']); for ($c = 0; $c < count($cat_ids); $c++) { $products_to_categoriestable = $oostable['products_to_categories']; $cat_query = $dbconn->Execute("SELECT products_id FROM {$products_to_categoriestable} WHERE products_id = '" . (int) $products_id . "' AND categories_id = '" . (int) $cat_ids[$i] . "'"); if ($cat_query->RecordCount() != 0) { $valid_product = true; } } } if ($valid_product) { $valid_array[] = array('product_id' => $t_prid, 'products_price' => $products[$i]['final_price'] * $products[$i]['quantity'], 'products_tax_class' => $cc_result['products_tax_class_id']); $total_price += $products[$i]['final_price'] * $products[$i]['quantity']; } } if ($valid_product) { if ($get_result['coupon_type'] == 'P') { $ratio = $get_result['coupon_amount'] / 100; } else { $ratio = $od_amount / $total_price; } if ($get_result['coupon_type'] == 'S') { $ratio = 1; } if ($method == 'Credit Note') { $tax_rate = oos_get_tax_rate($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tax_desc = oos_get_tax_description($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); if ($get_result['coupon_type'] == 'P') { $tod_amount = $od_amount / (100 + $tax_rate) * $tax_rate; } else { $tod_amount = $oOrder->info['tax_groups'][$tax_desc] * $od_amount / 100; } $oOrder->info['tax_groups'][$tax_desc] -= $tod_amount; $oOrder->info['total'] -= $tod_amount; } else { $nArrayCountValid = count($valid_array); for ($p = 0; $p < $nArrayCountValid; $p++) { $tax_rate = oos_get_tax_rate($valid_array[$p]['products_tax_class'], $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tax_desc = oos_get_tax_description($valid_array[$p]['products_tax_class'], $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); if ($tax_rate > 0) { $tod_amount[$tax_desc] += $valid_array[$p]['products_price'] * $tax_rate / 100 * $ratio; $oOrder->info['tax_groups'][$tax_desc] -= $valid_array[$p]['products_price'] * $tax_rate / 100 * $ratio; $oOrder->info['total'] -= $valid_array[$p]['products_price'] * $tax_rate / 100 * $ratio; } } } } } else { if ($get_result['coupon_type'] == 'F') { $tod_amount = 0; if ($method == 'Credit Note') { $tax_rate = oos_get_tax_rate($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tax_desc = oos_get_tax_description($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tod_amount = $od_amount / (100 + $tax_rate) * $tax_rate; $oOrder->info['tax_groups'][$tax_desc] -= $tod_amount; } else { $ratio1 = $od_amount / $amount; foreach ($oOrder->info['tax_groups'] as $key => $value) { $tax_rate = oos_get_tax_rate_from_desc($key); $net = $tax_rate * $oOrder->info['tax_groups'][$key]; if ($net > 0) { $god_amount = $oOrder->info['tax_groups'][$key] * $ratio1; $tod_amount += $god_amount; $oOrder->info['tax_groups'][$key] = $oOrder->info['tax_groups'][$key] - $god_amount; } } } $oOrder->info['total'] -= $tod_amount; } if ($get_result['coupon_type'] == 'P') { $tod_amount = 0; if ($method == 'Credit Note') { $tax_desc = oos_get_tax_description($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tod_amount = $oOrder->info['tax_groups'][$tax_desc] * $od_amount / 100; $oOrder->info['tax_groups'][$tax_desc] -= $tod_amount; } else { foreach ($oOrder->info['tax_groups'] as $key => $value) { $god_amout = 0; $tax_rate = oos_get_tax_rate_from_desc($key); $net = $tax_rate * $oOrder->info['tax_groups'][$key]; if ($net > 0) { $god_amount = $oOrder->info['tax_groups'][$key] * $get_result['coupon_amount'] / 100; $tod_amount += $god_amount; $oOrder->info['tax_groups'][$key] = $oOrder->info['tax_groups'][$key] - $god_amount; } } } $oOrder->info['tax'] -= $tod_amount; } } } } return $tod_amount; }