[Contribution] Quantity Discounts by That Software Guy
#101
Posted 18 December 2010 - 12:39 PM
How to show the calculated discount in shopping_cart.php just before Sub-total?
#102
Posted 18 December 2010 - 11:29 PM
Edit: I am with osc v.2.2-MS2
Just tested on v.2.3 and there work fine
Edited by spear, 18 December 2010 - 11:40 PM.
#103
Posted 19 December 2010 - 03:46 PM
#104
Posted 18 January 2011 - 07:47 PM
#105
Posted 18 January 2011 - 11:47 PM
#106
Posted 19 January 2011 - 12:23 AM
#107
Posted 24 January 2011 - 02:54 PM
Version 1.0
---------------
Oops, I didn't see the Install Module button. I'll try that now.
Edited by geokar1100, 24 January 2011 - 02:56 PM.
No outside links in signatures allowed.
#108
Posted 26 January 2011 - 09:43 AM
Is there a way to get the discounts to show up for me in 2.3.1?
No outside links in signatures allowed.
#109
Posted 26 January 2011 - 10:08 AM
geokar1100, on 26 January 2011 - 09:43 AM, said:
I haven't done it enough times to write up a bulletproof procedure for the PP changes required to do this. If you want to hire me to do this for you, send me an email.
#110
Posted 28 January 2011 - 09:51 PM
every different item in that category is valued $2.50. buy 3 for $5, buy 8 for $10 etc?
any of you help or expertise would be greatly appreciated,
best regards,
tom
#111
Posted 29 January 2011 - 11:35 AM
#112
Posted 10 February 2011 - 06:39 PM
(Sorry for my bad english from France)
My store is in France and need to show Taxes.
My store is calculating the tax on the initial subtotal of the order, if i check in the module " include tax "yes", recalculate "none".Normal
But if a check recalculate "standard", then the post-discount subtotal is wrong and the Taxe with.
(This is wrong in checkout_confirmation.php but right in shopping_cart.php and the boxes !!!
How to get the good and same total as in the cart ? and get the good tax, calculated on the price after reduction.
Did anyone get a solution?
Thank you
Edited by osh, 10 February 2011 - 06:40 PM.
#113
Posted 20 February 2011 - 11:36 PM
#114
Posted 24 February 2011 - 11:40 PM
#115
Posted 07 March 2011 - 06:19 AM
function apply_special_item_discount($id, $count, &$disc_amount) {
switch($id) {
case 19:
if ($count > 12) {
$disc_amount = 35;
}
break;
Is this supposed to take $35 off of each item or does it only take $35 off of the order total no matter how many items over 12?
I am only seeing $35 off of the order total.
Fresh install of osC 2.3.1
thank you!
#116
Posted 07 March 2011 - 10:35 AM
$disc_amount = 35 * $count;
not
$disc_amount = 35;
(You almost had it!)
#117
Posted 07 March 2011 - 02:08 PM
#118
Posted 09 March 2011 - 08:22 PM
Example:
Less than 6 items: add $25 design fee
6-12 items: no discount, no design fee
12 - 24 items: $0.50 discount per item
25+ items: $1.00 discount per item
This could be done by upping the price by $25, but that would make the item look too expensive.
I tried the following but no luck. Can price increase rather than discount be done?
case 20:
if ($count > 24) {
$disc_amount = 1 * $count;
} else if ($count > 11) {
$disc_amount = 0.5 * $count;
} else if ($count < 6) {
$disc_amount = -25;
}
break;
#119
Posted 10 March 2011 - 01:30 AM
#120
Posted 22 March 2011 - 01:36 AM
I am using 2.3.1
Here's the tax module
<?php
/*
$Id: ot_tax.php, v1.3 BETA
Canada Taxes Order Total Module (including Quebec)
by Vincent Demers vince@ptzioum.com
released on 2008/04/13 hpdl Exp $
Update by Jacob (Jack) Gryn to check sort order if shipping comes after taxes, don't tax shipping
Update by Vincent Demers to handle tax class on 2009/03/10
osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com
Copyright © 2003 osCommerce
Released under the GNU General Public License
*/
function get_subtotal($order) {
$sutotal=0;
for($i=0; $i < sizeof($order->products); $i++) { //Add only products with taxable class
if ($order->products[$i]['tax'] != 0) {
$subtotal+=($order->products[$i]['qty']*$order->products[$i]['price']);
}
}
return $subtotal;
}
class ot_tax {
var $title, $output;
function ot_tax() {
$this->code = 'ot_tax';
$this->title = MODULE_ORDER_TOTAL_TAX_TITLE;
$this->description = MODULE_ORDER_TOTAL_TAX_DESCRIPTION;
$this->enabled = ((MODULE_ORDER_TOTAL_TAX_STATUS == 'true') ? true : false);
$this->sort_order = MODULE_ORDER_TOTAL_TAX_SORT_ORDER;
$this->output = array();
}
function process() {
global $order, $currencies;
//WARNING: This module does not consider tax_class!!! We assume everything is taxable.
//We run SQL to get total number of taxes configured for our shipping zone
//If we have many taxes rates configured, we will compare tax priorities.
//If taxes have different priorities, ot_tax will apply 2nd priority tax_rate over 1rst (ex: for Quebec we have PST over GST), we assume GST has the lowest priority.
//If taxes have the same priorities, ot_tax still show taxes on two line but dosen't apply compounded taxes (ie: Ontario)
//If we get only one tax result, we assume we are handling only GST or HST (same scenario)
$tax_priority_query = tep_db_query("select tax_priority from " . TABLE_TAX_RATES . " tr left join " . TABLE_ZONES_TO_GEO_ZONES . " za on (tr.tax_zone_id = za.geo_zone_id) left join " . TABLE_GEO_ZONES . " tz on (tz.geo_zone_id = tr.tax_zone_id) where (za.zone_country_id = '" . $order->delivery['country']['id'] . "') and (za.zone_id = '" . $order->delivery['zone_id'] . "') order by tr.tax_priority");
$tax_query_raw="select tax_rates_id, tax_priority, tax_rate, tax_description from " . TABLE_TAX_RATES . " tr left join " . TABLE_ZONES_TO_GEO_ZONES . " za on (tr.tax_zone_id = za.geo_zone_id) left join " . TABLE_GEO_ZONES . " tz on (tz.geo_zone_id = tr.tax_zone_id) where (za.zone_country_id = '" . $order->delivery['country']['id'] . "') and (za.zone_id = '" . $order->delivery['zone_id'] . "') order by tr.tax_priority";
if (tep_db_num_rows($tax_priority_query)) {
if (tep_db_num_rows($tax_priority_query) == 2) { //Show taxes on two lines
$i=0;
while ($tax = tep_db_fetch_array($tax_priority_query)) { //compare tax_priotiries
if ($i == 0) {
$tax_priority = $tax['tax_priority'];
} else {
if ($tax_priority != $tax['tax_priority']) {
$compound_tax=true;
} else {
$compound_tax=false;
}
}
$i++;
}
//END Compare tax priorities
$tax_query = tep_db_query($tax_query_raw);
if ($compound_tax) { //ie Quebec
$j=0;
while ($tax = tep_db_fetch_array($tax_query)) {
if ($j == 0) {
$gst_description = $tax['tax_description'];
$gst_rate = $tax['tax_rate'] / 100;
} elseif ($j >= 1) {
$pst_description = $tax['tax_description'];
$pst_rate = $tax['tax_rate'] / 100;
}
$j++;
}
//$subtotal = $order->info['subtotal'];
$subtotal=get_subtotal($order);
if(MODULE_ORDER_TOTAL_SHIPPING_SORT_ORDER < MODULE_ORDER_TOTAL_TAX_SORT_ORDER)
$subtotal += $order->info['shipping_cost'];
$gst_total = tep_round($subtotal * $gst_rate, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']);
$pst_total = ($subtotal+$gst_total) * $pst_rate;
reset($order->info['tax_groups']);
while (list($key, $value) = each($order->info['tax_groups'])) {
if ($value > 0) {
$this->output[] = array('title' => $gst_description.':',
'text' => $currencies->format(
$gst_total, true, $order->info['currency'], $order->info['currency_value']),
'value' => $gst_total);
$this->output[] = array('title' => $pst_description.':',
'text' => $currencies->format(
$pst_total, true, $order->info['currency'], $order->info['currency_value']),
'value' => $pst_total);
}
}
} else { //ie: Ontario
$j=0;
while ($tax = tep_db_fetch_array($tax_query)) {
if ($j == 0) {
$gst_description = $tax['tax_description'];
$gst_rate = $tax['tax_rate'] / 100;
} elseif ($j >= 1) {
$pst_description = $tax['tax_description'];
$pst_rate = $tax['tax_rate'] / 100;
}
$j++;
}
//$subtotal = $order->info['subtotal'];
$subtotal=get_subtotal($order);
if(MODULE_ORDER_TOTAL_SHIPPING_SORT_ORDER < MODULE_ORDER_TOTAL_TAX_SORT_ORDER)
$subtotal += $order->info['shipping_cost'];
$gst_total = tep_round($subtotal * $gst_rate, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']);
$pst_total = $subtotal * $pst_rate;
reset($order->info['tax_groups']);
while (list($key, $value) = each($order->info['tax_groups'])) {
if ($value > 0) {
$this->output[] = array('title' => $gst_description.':',
'text' => $currencies->format(
$gst_total, true, $order->info['currency'], $order->info['currency_value']),
'value' => $gst_total);
$this->output[] = array('title' => $pst_description.':',
'text' => $currencies->format(
$pst_total, true, $order->info['currency'], $order->info['currency_value']),
'value' => $pst_total);
}
}
}
} elseif (tep_db_num_rows($tax_priority_query) == 1) { //Only GST or HST applies
$tax_query = tep_db_query($tax_query_raw);
while ($tax = tep_db_fetch_array($tax_query)) {
//$subtotal = $order->info['subtotal'];
$subtotal=get_subtotal($order);
if(MODULE_ORDER_TOTAL_SHIPPING_SORT_ORDER < MODULE_ORDER_TOTAL_TAX_SORT_ORDER)
$subtotal += $order->info['shipping_cost'];
$hst_total = $subtotal * ($tax['tax_rate'] / 100);
reset($order->info['tax_groups']);
while (list($key, $value) = each($order->info['tax_groups'])) {
if ($value > 0) {
$this->output[] = array('title' => $tax['tax_description'].':',
'text' => $currencies->format(
$hst_total, true, $order->info['currency'], $order->info['currency_value']),
'value' => $hst_total);
}
}
}
}
}
//We calculate $order->info with updated tax values. For this to work ot_tax has to be last ot module called, just before ot_total
$order->info['tax'] = tep_round($gst_total,$currencies->currencies[DEFAULT_CURRENCY]['decimal_places']) + tep_round($pst_total,$currencies->currencies[DEFAULT_CURRENCY]['decimal_places']) + tep_round($hst_total,$currencies->currencies[DEFAULT_CURRENCY]['decimal_places']);
$order->info['total'] = $order->info['subtotal'] + $order->info['tax'] + $order->info['shipping_cost'];
}
function check() {
if (!isset($this->_check)) {
$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_ORDER_TOTAL_TAX_STATUS'");
$this->_check = tep_db_num_rows($check_query);
}
return $this->_check;
}
function keys() {
return array('MODULE_ORDER_TOTAL_TAX_STATUS', 'MODULE_ORDER_TOTAL_TAX_SORT_ORDER');
}
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 Tax', 'MODULE_ORDER_TOTAL_TAX_STATUS', 'true', 'Do you want to display the order tax 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_TAX_SORT_ORDER', '3', 'Sort order of display.', '6', '2', now())");
}
function remove() {
tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
}
}
?>









