Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Coupons won't work for low cost items


coldfission

Recommended Posts

We are running into a problem with our Coupon system. When a customer wants to order fifteen $4.50 items (total: $67.50) and a $10 off coupon is used, the coupon will not show up on the checkout_confirmation page and it will not be calculated into the total. But, when i add a more expensive item (ex: one $450 item) the coupon works fine.

 

Also, the free shipping coupon will not work for these low cost items.

 

Here is my code for modules/order_total/ot_coupon.php

 

<?php

class ot_coupon {
var $title, $output;

function ot_coupon() {

$this->code = 'ot_coupon';
$this->header = MODULE_ORDER_TOTAL_COUPON_HEADER;
$this->title = MODULE_ORDER_TOTAL_COUPON_TITLE;
$this->description = MODULE_ORDER_TOTAL_COUPON_DESCRIPTION;
$this->user_prompt = '';
$this->enabled = MODULE_ORDER_TOTAL_COUPON_STATUS;
$this->sort_order = MODULE_ORDER_TOTAL_COUPON_SORT_ORDER;
$this->include_shipping = MODULE_ORDER_TOTAL_COUPON_INC_SHIPPING;
$this->include_tax = MODULE_ORDER_TOTAL_COUPON_INC_TAX;
$this->calculate_tax = MODULE_ORDER_TOTAL_COUPON_CALC_TAX;
$this->tax_class = MODULE_ORDER_TOTAL_COUPON_TAX_CLASS;
$this->credit_class = true;
$this->output = array();

}

function process() {
global $PHP_SELF, $order, $currencies;


$order_total=$this->get_order_total();
$od_amount = $this->calculate_credit($order_total);
$tod_amount = 0.0; //Fred
$this->deduction = $od_amount;
if ($this->calculate_tax != 'None') { //Fred - changed from 'none' to 'None'!
	$tod_amount = $this->calculate_tax_deduction($order_total, $this->deduction, $this->calculate_tax);
}

if ($od_amount > 0) {
	$order->info['total'] = $order->info['total'] - $od_amount;
	$this->output[] = array('title' => $this->title . ': ' . $this->coupon_code .':','text' => '<b>-' . $currencies->format($od_amount) . '</b>', 'value' => $od_amount); //Fred added hyphen
}
}

function selection_test() {
return false;
}


function pre_confirmation_check($order_total) {
global $customer_id;
return $this->calculate_credit($order_total);
}

function use_credit_amount() {
return $output_string;
}


function credit_selection() {
global $customer_id, $currencies, $language;
$selection_string = '';
$selection_string .= '<tr>' . "\n";
$selection_string .= ' <td width="10">' . tep_draw_separator('pixel_trans.gif', '10', '1') .'</td>';
$selection_string .= ' <td class="main">' . "\n";
$image_submit = '<input type="image" name="submit_redeem" onClick="submitFunction()" src="' . DIR_WS_LANGUAGES . $language . '/images/buttons/button_redeem.gif" border="0" alt="' . IMAGE_REDEEM_VOUCHER . '" title = "' . IMAGE_REDEEM_VOUCHER . '">';
$selection_string .= TEXT_ENTER_COUPON_CODE . tep_draw_input_field('gv_redeem_code') . '</td>';
$selection_string .= ' <td align="right">' . $image_submit . '</td>';
$selection_string .= ' <td width="10">' . tep_draw_separator('pixel_trans.gif', '10', '1') . '</td>';
$selection_string .= '</tr>' . "\n";
return $selection_string;
}


function collect_posts() {
// All tep_redirect URL parameters modified for this function in v5.13 by Rigadin
global $HTTP_POST_VARS, $customer_id, $currencies, $cc_id;
if ($HTTP_POST_VARS['gv_redeem_code']) {

// get some info from the coupon table
$coupon_query=tep_db_query("select coupon_id, coupon_amount, coupon_type, coupon_minimum_order,uses_per_coupon, uses_per_user, restrict_to_products,restrict_to_categories from " . TABLE_COUPONS . " where coupon_code='".$HTTP_POST_VARS['gv_redeem_code']."' and coupon_active='Y'");
$coupon_result=tep_db_fetch_array($coupon_query);

if ($coupon_result['coupon_type'] != 'G') {

	if (tep_db_num_rows($coupon_query)==0) {
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error='.$this->code.'&error=' . urlencode(ERROR_NO_INVALID_REDEEM_COUPON), 'SSL'));
	}

	$date_query=tep_db_query("select coupon_start_date from " . TABLE_COUPONS . " where coupon_start_date <= now() and coupon_code='".$HTTP_POST_VARS['gv_redeem_code']."'");

	if (tep_db_num_rows($date_query)==0) {
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error='.$this->code.'&error=' . urlencode(ERROR_INVALID_STARTDATE_COUPON), 'SSL'));
	}

	$date_query=tep_db_query("select coupon_expire_date from " . TABLE_COUPONS . " where coupon_expire_date >= now() and coupon_code='".$HTTP_POST_VARS['gv_redeem_code']."'");

if (tep_db_num_rows($date_query)==0) {
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error='.$this->code.'&error=' . urlencode(ERROR_INVALID_FINISDATE_COUPON), 'SSL'));
	}

	$coupon_count = tep_db_query("select coupon_id from " . TABLE_COUPON_REDEEM_TRACK . " where coupon_id = '" . $coupon_result['coupon_id']."'");
	$coupon_count_customer = tep_db_query("select coupon_id from " . TABLE_COUPON_REDEEM_TRACK . " where coupon_id = '" . $coupon_result['coupon_id']."' and customer_id = '" . $customer_id . "'");

	if (tep_db_num_rows($coupon_count)>=$coupon_result['uses_per_coupon'] && $coupon_result['uses_per_coupon'] > 0) {
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error='.$this->code.'&error=' . urlencode(ERROR_INVALID_USES_COUPON . $coupon_result['uses_per_coupon'] . TIMES ), 'SSL'));
	}

	if (tep_db_num_rows($coupon_count_customer)>=$coupon_result['uses_per_user'] && $coupon_result['uses_per_user'] > 0) {
		tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error='.$this->code.'&error=' . urlencode(ERROR_INVALID_USES_USER_COUPON . $coupon_result['uses_per_user'] . TIMES ), 'SSL'));
	}
	//if ($coupon_result['coupon_type']=='S') {
	//	$coupon_amount = $order->info['shipping_cost'];
	//} else {
	//	$coupon_amount = $currencies->format($coupon_result['coupon_amount']) . ' ';
	//}
	if ($coupon_result['coupon_type']=='P') $coupon_amount = $coupon_result['coupon_amount'] . '% ';
	if ($coupon_result['coupon_minimum_order']>0) $coupon_amount .= 'on orders greater than ' . $coupon_result['coupon_minimum_order'];
	if (!tep_session_is_registered('cc_id')) tep_session_register('cc_id'); //Fred - this was commented out before
	$cc_id = $coupon_result['coupon_id']; //Fred ADDED, set the global and session variable
	// $_SESSION['cc_id'] = $coupon_result['coupon_id']; //Fred commented out, do not use $_SESSION[] due to backward comp. Reference the global var instead.
}
if ($HTTP_POST_VARS['submit_redeem_coupon_x'] && !$HTTP_POST_VARS['gv_redeem_code']) tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error='.$this->code.'&error=' . urlencode(ERROR_NO_REDEEM_CODE), 'SSL'));
}
}

function calculate_credit($amount) {
global $customer_id, $order, $cc_id;
//$cc_id = $_SESSION['cc_id']; //Fred commented out, do not use $_SESSION[] due to backward comp. Reference the global var instead.
$od_amount = 0;
if (isset($cc_id) ) {
	$coupon_query = tep_db_query("select coupon_code from " . TABLE_COUPONS . " where coupon_id = '" . $cc_id . "'");
	if (tep_db_num_rows($coupon_query) !=0 ) {
		$coupon_result = tep_db_fetch_array($coupon_query);
		$this->coupon_code = $coupon_result['coupon_code'];
		$coupon_get = tep_db_query("select coupon_amount, coupon_minimum_order, restrict_to_products, restrict_to_categories, coupon_type from " . TABLE_COUPONS ." where coupon_code = '". $coupon_result['coupon_code'] . "'");
		$get_result = tep_db_fetch_array($coupon_get);
		$c_deduct = $get_result['coupon_amount'];
		if ($get_result['coupon_type']=='S') $c_deduct = $order->info['shipping_cost'] + $get_result['coupon_amount'];
		if ($get_result['coupon_minimum_order'] <= $this->get_order_total()) {
			if ($get_result['restrict_to_products'] || $get_result['restrict_to_categories']) {
				for ($i=0; $i<sizeof($order->products); $i++) {
					if ($get_result['restrict_to_products']) {
						$pr_ids = split("[,]", $get_result['restrict_to_products']);
						for ($ii = 0; $ii < count($pr_ids); $ii++) {
							if ($pr_ids[$ii] == tep_get_prid($order->products[$i]['id'])) {
								if ($get_result['coupon_type'] == 'P') {
										/* Fixes to Gift Voucher module 5.03
										=================================
										Submitted by Rob Cote, [email protected]

										original code: $od_amount = round($amount*10)/10*$c_deduct/100;
										$pr_c = $order->products[$i]['final_price']*$order->products[$i]['qty'];
										$pod_amount = round($pr_c*10)/10*$c_deduct/100;
										*/
										//$pr_c = $order->products[$i]['final_price']*$order->products[$i]['qty'];
										//$pr_c = $this->product_price($pr_ids[$ii]); //Fred 2003-10-28, fix for the row above, otherwise the discount is calc based on price excl VAT!
										$pr_c = $this->product_price($order->products[$i]['id']); //osCMax bugfix #47
										$pod_amount = round($pr_c*10)/10*$c_deduct/100;
										$od_amount = $od_amount + $pod_amount;
									} else {
										$od_amount = $c_deduct;
									}
								}
							}
						} else {
							$cat_ids = split("[,]", $get_result['restrict_to_categories']);
							for ($i=0; $i<sizeof($order->products); $i++) {
								$my_path = tep_get_product_path(tep_get_prid($order->products[$i]['id']));
								$sub_cat_ids = split("[_]", $my_path);
								for ($iii = 0; $iii < count($sub_cat_ids); $iii++) {
									for ($ii = 0; $ii < count($cat_ids); $ii++) {
										if ($sub_cat_ids[$iii] == $cat_ids[$ii]) {
											if ($get_result['coupon_type'] == 'P') {
												/* Category Restriction Fix to Gift Voucher module 5.04
												Date: August 3, 2003
												=================================
												Nick Stanko of UkiDev.com, [email protected]

												original code:
												$od_amount = round($amount*10)/10*$c_deduct/100;
												$pr_c = $order->products[$i]['final_price']*$order->products[$i]['qty'];
												$pod_amount = round($pr_c*10)/10*$c_deduct/100;
												*/
												//$od_amount = round($amount*10)/10*$c_deduct/100;
												//$pr_c = $order->products[$i]['final_price']*$order->products[$i]['qty'];
												//$pr_c = $this->product_price(tep_get_prid($order->products[$i]['id'])); //Fred 2003-10-28, fix for the row above, otherwise the discount is calc based on price excl VAT!
												$pr_c = $this->product_price($order->products[$i]['id']); //osCMax bugfix #47
												$pod_amount = round($pr_c*10)/10*$c_deduct/100;
												$od_amount = $od_amount + $pod_amount;
											} else {
												$od_amount = $c_deduct;
											}
										}
									}
								}
							}
						}
					}
				} else {
					if ($get_result['coupon_type'] !='P') {
						$od_amount = $c_deduct;
					} else {
						$od_amount = $amount * $get_result['coupon_amount'] / 100;
					}
				}
			}
		}
	if ($od_amount>$amount) $od_amount = $amount;
	}
return $od_amount;
}

function calculate_tax_deduction($amount, $od_amount, $method) {
global $customer_id, $order, $cc_id, $cart;
//$cc_id = $_SESSION['cc_id']; //Fred commented out, do not use $_SESSION[] due to backward comp. Reference the global var instead.
$coupon_query = tep_db_query("select coupon_code from " . TABLE_COUPONS . " where coupon_id = '" . $cc_id . "'");
if (tep_db_num_rows($coupon_query) !=0 ) {
	$coupon_result = tep_db_fetch_array($coupon_query);
	$coupon_get = tep_db_query("select coupon_amount, coupon_minimum_order, restrict_to_products, restrict_to_categories, coupon_type from " . TABLE_COUPONS . " where coupon_code = '". $coupon_result['coupon_code'] . "'");
	$get_result = tep_db_fetch_array($coupon_get);
	if ($get_result['coupon_type'] != 'S') {

		//RESTRICTION--------------------------------
		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 = $cart->get_products();
			$valid_product = false;
			for ($i=0; $i<sizeof($products); $i++) {
			$valid_product = false;
				$t_prid = tep_get_prid($products[$i]['id']);
				$cc_query = tep_db_query("select products_tax_class_id from " . TABLE_PRODUCTS . " where products_id = '" . $t_prid . "'");
				$cc_result = tep_db_fetch_array($cc_query);
				if ($get_result['restrict_to_products']) {
					$pr_ids = split("[,]", $get_result['restrict_to_products']);
					for ($p = 0; $p < sizeof($pr_ids); $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 < sizeof($cat_ids); $c++) {
						$cat_query = tep_db_query("select products_id from products_to_categories where products_id = '" . $products_id . "' and categories_id = '" . $cat_ids[$i] . "'");
						if (tep_db_num_rows($cat_query) !=0 ) $valid_product = true;
					}
				}
				if ($valid_product) {
					$price_excl_vat = $products[$i]['final_price'] * $products[$i]['quantity']; //Fred - added
					$price_incl_vat = $this->product_price($t_prid); //Fred - added
					$valid_array[] = array('product_id' => $t_prid, 'products_price' => $price_excl_vat, 'products_tax_class' => $cc_result['products_tax_class_id']); //jason //Fred - changed from $products[$i]['final_price'] 'products_tax_class' => $cc_result['products_tax_class_id']);
//						$total_price += $price_incl_vat; //Fred - changed
					$total_price += $price_excl_vat; // changed
				}
			}
			if (sizeof($valid_array) > 0) { // 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 = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
					$tax_desc = tep_get_tax_description($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
					if ($get_result['coupon_type'] == 'P') {
						$tod_amount = $od_amount / (100 + $tax_rate)* $tax_rate;
					} else {
						$tod_amount = $order->info['tax_groups'][$tax_desc] * $od_amount/100;
					}
					$order->info['tax_groups'][$tax_desc] -= $tod_amount;
					$order->info['total'] -= $tod_amount; //  need to modify total ...OLD
					$order->info['tax'] -= $tod_amount; //Fred - added
				} else {
					for ($p=0; $p<sizeof($valid_array); $p++) {
						$tax_rate = tep_get_tax_rate($valid_array[$p]['products_tax_class'], $order->delivery['country']['id'], $order->delivery['zone_id']);
						$tax_desc = tep_get_tax_description($valid_array[$p]['products_tax_class'], $order->delivery['country']['id'], $order->delivery['zone_id']);
						if ($tax_rate > 0) {
							//Fred $tod_amount[$tax_desc] += ($valid_array[$p]['products_price'] * $tax_rate)/100 * $ratio; //OLD
							$tod_amount = ($valid_array[$p]['products_price'] * $tax_rate)/100 * $ratio; // calc total tax Fred - added
							$order->info['tax_groups'][$tax_desc] -= ($valid_array[$p]['products_price'] * $tax_rate)/100 * $ratio;
							$order->info['total'] -= ($valid_array[$p]['products_price'] * $tax_rate)/100 * $ratio; // adjust total
							$order->info['tax'] -= ($valid_array[$p]['products_price'] * $tax_rate)/100 * $ratio; // adjust tax -- Fred - added
						}
					}
				}
			}
			//NO RESTRICTION--------------------------------
		} else {
			if ($get_result['coupon_type'] =='F') {
				$tod_amount = 0;
				if ($method=='Credit Note') {
					$tax_rate = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
					$tax_desc = tep_get_tax_description($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
					$tod_amount = $od_amount / (100 + $tax_rate)* $tax_rate;
					$order->info['tax_groups'][$tax_desc] -= $tod_amount;
				} else {
//						$ratio1 = $od_amount/$amount;   // this produces the wrong ratipo on fixed amounts
					reset($order->info['tax_groups']);
					while (list($key, $value) = each($order->info['tax_groups'])) {
						$ratio1 = $od_amount/($amount-$order->info['tax_groups'][$key]); ////debug
						$tax_rate = tep_get_tax_rate_from_desc($key);
						$net = $tax_rate * $order->info['tax_groups'][$key];
						if ($net>0) {
							$god_amount = $order->info['tax_groups'][$key] * $ratio1;
							$tod_amount += $god_amount;
							$order->info['tax_groups'][$key] = $order->info['tax_groups'][$key] - $god_amount;
						}
					}
				}
				$order->info['total'] -= $tod_amount; //OLD
				$order->info['tax'] -= $tod_amount; //Fred - added
		}
		if ($get_result['coupon_type'] =='P') {
			$tod_amount=0;
			if ($method=='Credit Note') {
				$tax_desc = tep_get_tax_description($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
				$tod_amount = $order->info['tax_groups'][$tax_desc] * $od_amount/100;
				$order->info['tax_groups'][$tax_desc] -= $tod_amount;
			} else {
				reset($order->info['tax_groups']);
				while (list($key, $value) = each($order->info['tax_groups'])) {
					$god_amout=0;
					$tax_rate = tep_get_tax_rate_from_desc($key);
					$net = $tax_rate * $order->info['tax_groups'][$key];
					if ($net>0) {
						$god_amount = $order->info['tax_groups'][$key] * $get_result['coupon_amount']/100;
						$tod_amount += $god_amount;
						$order->info['tax_groups'][$key] = $order->info['tax_groups'][$key] - $god_amount;
					}
				}
			}
			$order->info['total'] -= $tod_amount; // have to modify total also
			$order->info['tax'] -= $tod_amount;
		}
	}
}
}
return $tod_amount;
}

function update_credit_account($i) {
return false;
}

function apply_credit() {
global $insert_id, $customer_id, $REMOTE_ADDR, $cc_id;
//$cc_id = $_SESSION['cc_id']; //Fred commented out, do not use $_SESSION[] due to backward comp. Reference the global var instead.
if ($this->deduction !=0) {
	tep_db_query("insert into " . TABLE_COUPON_REDEEM_TRACK . " (coupon_id, redeem_date, redeem_ip, customer_id, order_id) values ('" . $cc_id . "', now(), '" . $REMOTE_ADDR . "', '" . $customer_id . "', '" . $insert_id . "')");
}
tep_session_unregister('cc_id');
}

function get_order_total() {
global $order, $cart, $customer_id, $cc_id;
//$cc_id = $_SESSION['cc_id']; //Fred commented out, do not use $_SESSION[] due to backward comp. Reference the global var instead.
$order_total = $order->info['total'];
// Check if gift voucher is in cart and adjust total
$products = $cart->get_products();
for ($i=0; $i<sizeof($products); $i++) {
	$t_prid = tep_get_prid($products[$i]['id']);
	$gv_query = tep_db_query("select products_price, products_tax_class_id, products_model from " . TABLE_PRODUCTS . " where products_id = '" . $t_prid . "'");
	$gv_result = tep_db_fetch_array($gv_query);
	if (ereg('^GIFT', addslashes($gv_result['products_model']))) {
		$qty = $cart->get_quantity($t_prid);
		$products_tax = tep_get_tax_rate($gv_result['products_tax_class_id']);
		if ($this->include_tax =='false') {
			$gv_amount = $gv_result['products_price'] * $qty;
		} else {
			$gv_amount = ($gv_result['products_price'] + tep_calculate_tax($gv_result['products_price'],$products_tax)) * $qty;
		}
		$order_total=$order_total - $gv_amount;
	}
}
if ($this->include_tax == 'false') $order_total=$order_total-$order->info['tax'];
if ($this->include_shipping == 'false') $order_total=$order_total-$order->info['shipping_cost'];
// OK thats fine for global coupons but what about restricted coupons
// where you can only redeem against certain products/categories.
// and I though this was going to be easy !!!
$coupon_query=tep_db_query("select coupon_code from " . TABLE_COUPONS . " where coupon_id='".$cc_id."'");
if (tep_db_num_rows($coupon_query) !=0) {
	$coupon_result=tep_db_fetch_array($coupon_query);
	$coupon_get=tep_db_query("select coupon_amount, coupon_minimum_order,restrict_to_products,restrict_to_categories, coupon_type from " . TABLE_COUPONS . " where coupon_code='".$coupon_result['coupon_code']."'");
	$get_result=tep_db_fetch_array($coupon_get);
	$in_cat = true;
	if ($get_result['restrict_to_categories']) {
		$cat_ids = split("[,]", $get_result['restrict_to_categories']);
		$in_cat=false;
		for ($i = 0; $i < count($cat_ids); $i++) {
			if (is_array($this->contents)) {
				reset($this->contents);
				while (list($products_id, ) = each($this->contents)) {
					$cat_query = tep_db_query("select products_id from products_to_categories where products_id = '" . $products_id . "' and categories_id = '" . $cat_ids[$i] . "'");
					if (tep_db_num_rows($cat_query) !=0 ) {
						$in_cat = true;
						$total_price += $this->get_product_price($products_id);
					}
				}
			}
		}
	}
	$in_cart = true;
	if ($get_result['restrict_to_products']) {

		$pr_ids = split("[,]", $get_result['restrict_to_products']);

		$in_cart=false;
		$products_array = $cart->get_products();

		for ($i = 0; $i < sizeof($pr_ids); $i++) {
			for ($ii = 1; $ii<=sizeof($products_array); $ii++) {
				if (tep_get_prid($products_array[$ii-1]['id']) == $pr_ids[$i]) {
					$in_cart=true;
					$total_price += $this->get_product_price($products_array[$ii-1]['id']);
				}
			}
		}
		$order_total = $total_price;
	}
}
return $order_total;
}

function get_product_price($product_id) {
global $cart, $order;
$products_id = tep_get_prid($product_id);
// products price
$qty = $cart->contents[$product_id]['qty'];
$product_query = tep_db_query("select products_id, products_price, products_tax_class_id, products_weight from " . TABLE_PRODUCTS . " where products_id='" . $product_id . "'");
if ($product = tep_db_fetch_array($product_query)) {
	$prid = $product['products_id'];
	$products_tax = tep_get_tax_rate($product['products_tax_class_id']);
	$products_price = $product['products_price'];
	$specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . $prid . "' and status = '1'");
	if (tep_db_num_rows ($specials_query)) {
		$specials = tep_db_fetch_array($specials_query);
		$products_price = $specials['specials_new_products_price'];
	}
	if ($this->include_tax == 'true') {
		$total_price += ($products_price + tep_calculate_tax($products_price, $products_tax)) * $qty;
//			echo("total price = " . $total_price . " products_price = " . $products_price . " products_tax = " . $products_tax . "<br>");

	} else {
		$total_price += $products_price * $qty;
	}

	// attributes price
	if (isset($cart->contents[$product_id]['attributes'])) {
		reset($cart->contents[$product_id]['attributes']);
		while (list($option, $value) = each($cart->contents[$product_id]['attributes'])) {
			$attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . $prid . "' and options_id = '" . $option . "' and options_values_id = '" . $value . "'");
			$attribute_price = tep_db_fetch_array($attribute_price_query);
			if ($attribute_price['price_prefix'] == '+') {
				if ($this->include_tax == 'true') {
					$total_price += $qty * ($attribute_price['options_values_price'] + tep_calculate_tax($attribute_price['options_values_price'], $products_tax));
				} else {
					$total_price += $qty * ($attribute_price['options_values_price']);
				}
			} else {
				if ($this->include_tax == 'true') {
					$total_price -= $qty * ($attribute_price['options_values_price'] + tep_calculate_tax($attribute_price['options_values_price'], $products_tax));
				} else {
					$total_price -= $qty * ($attribute_price['options_values_price']);
				}
			}
		}
	}
}
if ($this->include_shipping == 'true') {

	$total_price += $order->info['shipping_cost'];
}
return $total_price;
}

//Added by Fred -- BOF -----------------------------------------------------
//JUST RETURN THE PRODUCT PRICE (INCL ATTRIBUTE PRICES) WITH OR WITHOUT TAX
function product_price($product_id) {
$total_price = $this->get_product_price($product_id);
if ($this->include_shipping == 'true') $total_price -= $order->info['shipping_cost'];
return $total_price;
}
//Added by Fred -- EOF -----------------------------------------------------

// START added by Rigadin in v5.13, needed to show module errors on checkout_payment page
function get_error() {
  global $HTTP_GET_VARS;

  $error = array('title' => MODULE_ORDER_TOTAL_COUPON_TEXT_ERROR,
				 'error' => stripslashes(urldecode($HTTP_GET_VARS['error'])));

  return $error;
}
// END added by Rigadin

function check() {
if (!isset($this->check)) {
	$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_ORDER_TOTAL_COUPON_STATUS'");
	$this->check = tep_db_num_rows($check_query);
}

return $this->check;
}

function keys() {
return array('MODULE_ORDER_TOTAL_COUPON_STATUS', 'MODULE_ORDER_TOTAL_COUPON_SORT_ORDER', 'MODULE_ORDER_TOTAL_COUPON_INC_SHIPPING', 'MODULE_ORDER_TOTAL_COUPON_INC_TAX', 'MODULE_ORDER_TOTAL_COUPON_CALC_TAX', 'MODULE_ORDER_TOTAL_COUPON_TAX_CLASS');
}

function install() {
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Display Total', 'MODULE_ORDER_TOTAL_COUPON_STATUS', 'true', 'Do you want to display the Discount Coupon value?', '6', '1','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_ORDER_TOTAL_COUPON_SORT_ORDER', '9', 'Sort order of display.', '6', '2', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Include Shipping', 'MODULE_ORDER_TOTAL_COUPON_INC_SHIPPING', 'true', 'Include Shipping in calculation', '6', '5', 'tep_cfg_select_option(array(\'true\', \'false\'), ', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Include Tax', 'MODULE_ORDER_TOTAL_COUPON_INC_TAX', 'true', 'Include Tax in calculation.', '6', '6','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Re-calculate Tax', 'MODULE_ORDER_TOTAL_COUPON_CALC_TAX', 'None', 'Re-Calculate Tax', '6', '7','tep_cfg_select_option(array(\'None\', \'Standard\', \'Credit Note\'), ', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_ORDER_TOTAL_COUPON_TAX_CLASS', '0', 'Use the following tax class when treating Discount Coupon as Credit Note.', '6', '0', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
}

function remove() {
$keys = '';
$keys_array = $this->keys();
for ($i=0; $i<sizeof($keys_array); $i++) {
	$keys .= "'" . $keys_array[$i] . "',";
}
$keys = substr($keys, 0, -1);

tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in (" . $keys . ")");
}
}
?>

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...