Jump to content



Photo
* * * - - 1 votes

[Contribution] Quantity Discounts by That Software Guy


  • Please log in to reply
170 replies to this topic

#1   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 16 May 2009 - 20:42

My Quantity Discounts contribution permits you to offer discounts that are structured many different ways:

* By total number of items purchased
* By number of items purchased, counting per item
* By number of items purchased, counting per category
* Counting by items or by number of dollars spent, in any of the ways above
* Specifying the discount as a percentage, a flat dollar figure or dollars per item

The contribution is here:
http://addons.oscommerce.com/info/6751
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#2   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 24 May 2009 - 23:07

You can see this contribution live on my test cart at http://www.thissoftw...uy.com/osc_2_2/
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#3   CheriJ

CheriJ
  • Members
  • 23 posts
  • Real Name:Cheri Jones

Posted 29 May 2009 - 18:04

You can see this contribution live on my test cart at http://www.thissoftw...uy.com/osc_2_2/


I downloaded your contrib and have one little issue with it. After I installed it and went to edit the options, when I move my curser over any of the options on the right to edit them, everything is underlined as a link to your site (but the site is spelled wrong and i get an address not found error). Is there something I'm missing here? This is a free contrib isn't it? I wouldn't want to try using something that I was supposed to pay for. (If that is the case please accept my apologies and let me know how much and who and where to pay.)/blink.gif' class='bbc_emoticon' alt=':blink:' />

Thanks for the help,
Cheri

#4   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 29 May 2009 - 18:12

You've done something wrong - perhaps the file has been damaged. The links to my site are for help and donations if this software helps you make money. Try downloading it again and reinstalling.
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#5   CheriJ

CheriJ
  • Members
  • 23 posts
  • Real Name:Cheri Jones

Posted 29 May 2009 - 18:16

You've done something wrong - perhaps the file has been damaged. The links to my site are for help and donations if this software helps you make money. Try downloading it again and reinstalling.

Thanks for the fast reply! I'll try that and if/when I make some money on this I'll certainly make a donation. /smile.gif' class='bbc_emoticon' alt=':)' />
Thanks,
Cheri

#6   CheriJ

CheriJ
  • Members
  • 23 posts
  • Real Name:Cheri Jones

Posted 29 May 2009 - 19:36

Thanks for the fast reply! I'll try that and if/when I make some money on this I'll certainly make a donation. /smile.gif' class='bbc_emoticon' alt=':)' />
Thanks,
Cheri


Nope, I uninstalled it and removed the files then redownloaded it and uploaded the files here:

includes/modules/order-total and includes/languages/english/modules/order-total

I am still getting the links when I try to edit it in the admin.

I'm perplexed as to what to do, geez the whole thing is just one file, it shouldn't be this difficult to get it to work. Now I don't mean to simplify your work on this contrib, it is much appreciated. I just can't seem to get it to work in my environment.

Thanks for any help you can afford me,
Cheri

#7   routenyc

routenyc
  • Members
  • 3 posts
  • Real Name:Jim Cooney

Posted 29 May 2009 - 21:33

Hi,

Is there a way to take the discount out BEFORE subtotal on the order confirmation page? I see how you can do it in the display order, but I need to display the discount in the actual subtotal dollar amount before shipping is applied. For example:

Product: $10
Quantity Discount: -$2
Subtotal: $8
Shipping: $1
Total: $9

Thanks!

#8   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 30 May 2009 - 00:26

Is there a way to take the discount out BEFORE subtotal on the order confirmation page?


There's no way to do this without writing additional software.

Scott
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#9   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 30 May 2009 - 01:50

I am still getting the links when I try to edit it in the admin.


This seems to be an issue in 2.2-MS2 (but not in 2.2rc2a). I will post a fix shortly.
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#10   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 30 May 2009 - 20:21

If you are using 2.2-MS2 instead of 2.2rc2a, you need to make one small change to Quantity Discounts to make it work.

The change is documented here:
http://www.thatsoftw...counts.html#MS2

This change is *only* required for MS2.

Scott
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#11   yuprawn1982

yuprawn1982
  • Members
  • 1 posts
  • Real Name:yuanyuan

Posted 09 June 2009 - 09:30

i have OSC 2.2 RC2A . i applied your nice moudule . and when it go to checkout_payment.php . i find this error .

Fatal error: Call to undefined method ot_quantity_discount::use_credit_amount() in /home2/nikeshop/public_html/NL/includes/classes/order_total.php on line 150

Hope can get your kindly reply /smile.gif' class='bbc_emoticon' alt=':)' />
yuan

#12   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 09 June 2009 - 10:09

You have a bad copy of includes/classes/order_total.php. This file only has 80 lines.
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#13   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 14 June 2009 - 16:22

Quantity Discounts 1.0.1 has been released. It provides compatibility with the Order Editor contribution.
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#14   asbestos0

asbestos0
  • Members
  • 4 posts
  • Real Name:Raymond Ong

Posted 15 June 2009 - 04:25

Quantity Discounts 1.0.1 has been released. It provides compatibility with the Order Editor contribution.





Hi all!

I just try it!...it work fine for me!



Thank That Software Guy!
asbestos0

#15   gnowell

gnowell
  • Members
  • 15 posts
  • Real Name:Guy Nowell

Posted 18 June 2009 - 23:17

Just installed your contribution. It was easy. Works great. One question. Is it possible to have the first 2 levels at percentage and total by item then the third level change to currency and total items in cart?
Thanks
Guy

#16   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 18 June 2009 - 23:23

Is it possible to have the first 2 levels at percentage and total by item then the third level change to currency and total items in cart?


You'd have to write software; nothing like that is built in.
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#17   gnowell

gnowell
  • Members
  • 15 posts
  • Real Name:Guy Nowell

Posted 19 June 2009 - 00:41

Thanks,
That's what I thought but I figured I would ask
Guy

#18   LucyFoster

LucyFoster
  • Members
  • 64 posts
  • Real Name:Lucy Foster
  • Location:Leeds

Posted 22 June 2009 - 13:42

I have a similar problem as is discussed above:

"Fatal error: Call to undefined method ot_quantity_discount::use_credit_amount() in /var/............./httpdocs/includes/classes/order_total.php on line 118"


I dont consider that my classes/order_total.php file is bad but there is obviously something wrong with it or needed in order to accomodate this nice contribution.
Clearly I dont know the answer but would be really grateful if anyone else does?

Thanks

L

#19   swguy

swguy
  • Members
  • 183 posts
  • Real Name:Scott Wilson
  • Gender:Male
  • Location:Tampa Bay, Florida

Posted 22 June 2009 - 23:30

I dont consider that my classes/order_total.php file is bad but there is obviously something wrong with it ...


If you download a vanilla copy of osCommerce rc2.2 you'll see your copy of includes/classes/order_total.php is quite different from the one in the download, which only has 80 lines. I have no idea what changes you've made or why, but they are not compatible with this mod. You can use a default copy of this file, but that will probably break something else in your cart.
Contributions: Better Together and Quantity Discounts, for osCommerce 2.2, 2.3.x and 3.0. See my profile for more details.

#20   LucyFoster

LucyFoster
  • Members
  • 64 posts
  • Real Name:Lucy Foster
  • Location:Leeds

Posted 23 June 2009 - 12:46

Can anyone see how I can adjust my code to accomodate this module? The line 118 below is bold underlined. That is where the error seems to kick in.

<?php
/*
$Id: order_total.php,v 1.2 2004/03/09 18:56:37 ccwjr Exp $
orig : order_total.php,v 1.4 2003/02/11 00:04:53 hpdl Exp $

osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com

Copyright © 2003 osCommerce

Released under the GNU General Public License
*/

class order_total {
var $modules;

// class constructor
function order_total() {
global $language;

if (defined('MODULE_ORDER_TOTAL_INSTALLED') && tep_not_null(MODULE_ORDER_TOTAL_INSTALLED)) {
$this->modules = explode(';', MODULE_ORDER_TOTAL_INSTALLED);

reset($this->modules);
while (list(, $value) = each($this->modules)) {
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/' . $value);
include(DIR_WS_MODULES . 'order_total/' . $value);

$class = substr($value, 0, strrpos($value, '.'));
$GLOBALS[$class] = new $class;
}
}
}

function process() {
$order_total_array = array();
if (is_array($this->modules)) {
reset($this->modules);
while (list(, $value) = each($this->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
if ($GLOBALS[$class]->enabled) {
$GLOBALS[$class]->process();

for ($i=0, $n=sizeof($GLOBALS[$class]->output); $i<$n; $i++) {
if (tep_not_null($GLOBALS[$class]->output[$i]['title']) && tep_not_null($GLOBALS[$class]->output[$i]['text'])) {
$order_total_array[] = array('code' => $GLOBALS[$class]->code,
'title' => $GLOBALS[$class]->output[$i]['title'],
'text' => $GLOBALS[$class]->output[$i]['text'],
'value' => $GLOBALS[$class]->output[$i]['value'],
'sort_order' => $GLOBALS[$class]->sort_order);
}
}
}
}
}

return $order_total_array;
}

function output() {
$output_string = '';
if (is_array($this->modules)) {
reset($this->modules);
while (list(, $value) = each($this->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
if ($GLOBALS[$class]->enabled) {
$size = sizeof($GLOBALS[$class]->output);
for ($i=0; $i<$size; $i++) {
$output_string .= ' <tr>' . "\n" .
' <td align="right" class="main">' . $GLOBALS[$class]->output[$i]['title'] . '</td>' . "\n" .
' <td align="right" class="main">' . $GLOBALS[$class]->output[$i]['text'] . '</td>' . "\n" .
' </tr>';
}
}
}
}

return $output_string;
}
// ICW ORDER TOTAL CREDIT CLASS/GV SYSTEM - START ADDITION
//
// This function is called in checkout payment after display of payment methods. It actually calls
// two credit class functions.
//
// use_credit_amount() is normally a checkbox used to decide whether the credit amount should be applied to reduce
// the order total. Whether this is a Gift Voucher, or discount coupon or reward points etc.
//
// The second function called is credit_selection(). This in the credit classes already made is usually a redeem box.
// for entering a Gift Voucher number. Note credit classes can decide whether this part is displayed depending on
// E.g. a setting in the admin section.
//
function credit_selection() {
$selection_string = '';
$close_string = '';
$credit_class_string = '' ;
if (MODULE_ORDER_TOTAL_INSTALLED) {
$header_string = '<tr>' . "\n";
$header_string .= ' <td><table border="0" width="100%" cellspacing="0" cellpadding="2">' . "\n";
$header_string .= ' <tr>' . "\n";
$header_string .= ' <td class="main"><b>' . TABLE_HEADING_CREDIT . '</b></td>' . "\n";
$header_string .= ' </tr>' . "\n";
$header_string .= ' </table></td>' . "\n";
$header_string .= ' </tr>' . "\n";
$header_string .= '<tr>' . "\n";
$header_string .= ' <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">' . "\n";
$header_string .= ' <tr class="infoBoxContents"><td><table border="0" width="100%" cellspacing="0" cellpadding="2">' ."\n";
$header_string .= ' <tr><td width="10">' . tep_draw_separator('pixel_trans.gif', '10', '1') .'</td>' . "\n";
$header_string .= ' <td colspan="2"><table border="0" width="100%" cellspacing="0" cellpadding="2">' . "\n";
$close_string = ' </table></td>';
$close_string .= '<td width="10">' . tep_draw_separator('pixel_trans.gif', '10', '1') . '</td>';
$close_string .= '</tr></table></td></tr></table></td>';
$close_string .= '<tr><td width="100%">' . tep_draw_separator('pixel_trans.gif', '100%', '10') . '</td></tr>';
reset($this->modules);
$output_string = '';
while (list(, $value) = each($this->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
if ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) {
$use_credit_string = $GLOBALS[$class]->use_credit_amount();
// if ($selection_string =='') $selection_string = $GLOBALS[$class]->credit_selection();
$selection_string = $GLOBALS[$class]->credit_selection();
if ( ($use_credit_string !='' ) || ($selection_string != '') ) {
$output_string .= '<tr><td colspan="4">' . tep_draw_separator('pixel_trans.gif', '100%', '10') . '</td></tr>' . "\n";
$output_string .= ' <tr class="moduleRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" >' . "\n" .
' <td class="main"><b>' . $GLOBALS[$class]->title . '</b></td>' . "\n" . $use_credit_string;
$output_string .= ' </tr>' . "\n";
$output_string .= $selection_string;
}

}
}
if ($output_string != '') {
$return_string = $header_string . $output_string . $close_string;
} else {
$return_string = '';
}
}
return $return_string;
}


// if ($selection_string !='') {
// $output_string .= '</td>' . "\n";
// $output_string .= $selection_string;
// }




// update_credit_account is called in checkout process on a per product basis. It's purpose
// is to decide whether each product in the cart should add something to a credit account.
// e.g. for the Gift Voucher it checks whether the product is a Gift voucher and then adds the amount
// to the Gift Voucher account.
// Another use would be to check if the product would give reward points and add these to the points/reward account.
//
function update_credit_account($i) {
if (MODULE_ORDER_TOTAL_INSTALLED) {
reset($this->modules);
while (list(, $value) = each($this->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) {
$GLOBALS[$class]->update_credit_account($i);
}
}
}
}
// This function is called in checkout confirmation.
// It's main use is for credit classes that use the credit_selection() method. This is usually for
// entering redeem codes(Gift Vouchers/Discount Coupons). This function is used to validate these codes.
// If they are valid then the necessary actions are taken, if not valid we are returned to checkout payment
// with an error
//
function collect_posts() {
global $HTTP_POST_VARS,$HTTP_SESSION_VARS;
if (MODULE_ORDER_TOTAL_INSTALLED) {
reset($this->modules);
while (list(, $value) = each($this->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) {
$post_var = 'c' . $GLOBALS[$class]->code;
if ($HTTP_POST_VARS[$post_var]) {
if (!tep_session_is_registered($post_var)) tep_session_register($post_var);
$post_var = $HTTP_POST_VARS[$post_var];
}
$GLOBALS[$class]->collect_posts();
}
}
}
}
// pre_confirmation_check is called on checkout confirmation. It's function is to decide whether the
// credits available are greater than the order total. If they are then a variable (credit_covers) is set to
// true. This is used to bypass the payment method. In other words if the Gift Voucher is more than the order
// total, we don't want to go to paypal etc.
//
function pre_confirmation_check() {
global $payment, $order, $credit_covers;
if (MODULE_ORDER_TOTAL_INSTALLED) {
$total_deductions = 0;
reset($this->modules);
$order_total = $order->info['total'];
while (list(, $value) = each($this->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
$order_total = $this->get_order_total_main($class,$order_total);
if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) {
$total_deductions = $total_deductions + $GLOBALS[$class]->pre_confirmation_check($order_total);
$order_total = $order_total - $GLOBALS[$class]->pre_confirmation_check($order_total);
}
}
if ($order->info['total'] - $total_deductions <= 0 ) {
if(!tep_session_is_registered('credit_covers')) tep_session_register('credit_covers');
$credit_covers = true;
}
else{ // belts and suspenders to get rid of credit_covers variable if it gets set once and they put something else in the cart
if(tep_session_is_registered('credit_covers')) tep_session_unregister('credit_covers');
}
}
}
// this function is called in checkout process. it tests whether a decision was made at checkout payment to use
// the credit amount be applied aginst the order. If so some action is taken. E.g. for a Gift voucher the account
// is reduced the order total amount.
//
function apply_credit() {
if (MODULE_ORDER_TOTAL_INSTALLED) {
reset($this->modules);
while (list(, $value) = each($this->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) {
$GLOBALS[$class]->apply_credit();
}
}
}
}
// Called in checkout process to clear session variables created by each credit class module.
//
function clear_posts() {
global $HTTP_POST_VARS,$HTTP_SESSION_VARS;
if (MODULE_ORDER_TOTAL_INSTALLED) {
reset($this->modules);
while (list(, $value) = each($this->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) {
$post_var = 'c' . $GLOBALS[$class]->code;
if (tep_session_is_registered($post_var)) tep_session_unregister($post_var);
}
}
}
}
// Called at various times. This function calulates the total value of the order that the
// credit will be appled aginst. This varies depending on whether the credit class applies
// to shipping & tax
//
function get_order_total_main($class, $order_total) {
global $credit, $order;
// if ($GLOBALS[$class]->include_tax == 'false') $order_total=$order_total-$order->info['tax'];
// if ($GLOBALS[$class]->include_shipping == 'false') $order_total=$order_total-$order->info['shipping_cost'];
return $order_total;
}
// ICW ORDER TOTAL CREDIT CLASS/GV SYSTEM - END ADDITION
}
?>