Jump to content
Joahim2509

customer discount dont sho corect

Recommended Posts

Hi. I am trying to configure a "Customer Discount" add-on . This add-on make take the value from database that is seated for user as % discount. After that apply this discount to "Cart" in the checkout_confirmation. The problem is that he shows the value of the % discount and not the sum that must to be payed. Ex: user discount 5% , amount is 304.50 and he shows 15.23- this is the value that must to be minus amount and after that show to client total price. You can show the image attached . What I need to change to obtain the correct result or how I can add a new line after the Discount line (Rabatt Summe) to show the amount that must to be payed. Wher I need to insert for example some thing like

echo "Amount after Discount Applied:"

There is the code of the add-on

<?php
/*
  $Id: ot_customer_discount.php,v 1.2.1 2003/08/15 07:36:01 celiawessen Exp $

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

  Copyright (c) 2002 osCommerce

  Released under the GNU General Public License
*/

class ot_customer_discount {
    var $title, $output;

    function ot_customer_discount() {
        $this->code = 'ot_customer_discount';
        $this->title = MODULE_CUSTOMER_DISCOUNT_TITLE;
        $this->description = MODULE_CUSTOMER_DISCOUNT_DESCRIPTION;
        $this->enabled = MODULE_CUSTOMER_DISCOUNT_STATUS;
        $this->sort_order = MODULE_CUSTOMER_DISCOUNT_SORT_ORDER;
        $this->include_shipping = MODULE_CUSTOMER_DISCOUNT_INC_SHIPPING;
        $this->include_tax = MODULE_CUSTOMER_DISCOUNT_INC_TAX;
        $this->calculate_tax = MODULE_CUSTOMER_DISCOUNT_CALC_TAX;
        $this->output = array();
    }

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

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

    function calculate_discount($amount) {
        global $order, $customer_id;
        $od_amount=0;
        $query = tep_db_query("select customers_discount from " . TABLE_CUSTOMERS . " where customers_id = '" . $customer_id . "'");
        $query_result = tep_db_fetch_array($query);
        $od_pc = $query_result['customers_discount'];
        if ($query_result['customers_discount'] > 0) {
            // Calculate tax reduction if necessary
            if ($this->calculate_tax == 'true') {
                // Calculate main tax reduction
                $tod_amount = round($order->info['tax']*10)/10*$od_pc/100;
                $order->info['tax'] = $order->info['tax'] - $tod_amount;
                // Calculate tax group deductions
                reset($order->info['tax_groups']);
                while (list($key, $value) = each($order->info['tax_groups'])) {
                    $god_amount = round($value*10)/10*$od_pc/100;
                    $order->info['tax_groups'][$key] = $order->info['tax_groups'][$key] - $god_amount;
                }
            }
            $od_amount = (round($amount*10)/10)*$od_pc/100;
//	  $od_amount = $od_amount + $tod_amount;
        }
        return $od_amount;
    }


    function get_order_total() {
        global  $order, $cart;
        $order_total = $order->info['total'];
        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'];
        return $order_total;
    }

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

        return $this->check;
    }

    function keys() {
        return array('MODULE_CUSTOMER_DISCOUNT_STATUS', 'MODULE_CUSTOMER_DISCOUNT_SORT_ORDER', 'MODULE_CUSTOMER_DISCOUNT_INC_SHIPPING', 'MODULE_CUSTOMER_DISCOUNT_INC_TAX', 'MODULE_CUSTOMER_DISCOUNT_CALC_TAX');
    }

    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_CUSTOMER_DISCOUNT_STATUS', 'true', 'Do you want to enable the Customer specific order discount module?', '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_CUSTOMER_DISCOUNT_SORT_ORDER', '999', '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_CUSTOMER_DISCOUNT_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_CUSTOMER_DISCOUNT_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 ('Calculate Tax', 'MODULE_CUSTOMER_DISCOUNT_CALC_TAX', 'false', 'Re-calculate Tax on discounted amount.', '6', '5','tep_cfg_select_option(array(\'true\', \'false\'), ', 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 . ")");
    }
}
?>
 

 

post-338182-0-36877700-1450993287_thumb.jpg

Share this post


Link to post
Share on other sites

@@Joahim2509

 

If you change the sort order as @@allaboutwicker suggested, I think it will work.  I ran into that issue a long, long time ago.   Mess around with it and if it still doesn't work post back and maybe someone else can help but I think you'll get it to work

 

Dan

Share this post


Link to post
Share on other sites

@@Joahim2509 

 

If I remember correctly the discount has to be placed before the tax.  Try changing the sort order accordingly.

 

Dan

Share this post


Link to post
Share on other sites

Thanks but I made this, the problem is that the total amount is now not correct, in my case is minus. cost of product is 79 euro, shipping: 7.50, costumer discount:77.85EUR, TAX 19.0%: 1.27EUR, Total: -2.69EUR. All this is by 90% discount for client

Share this post


Link to post
Share on other sites

@@Joahim2509  That makes sense....move the discount to 2 and the shipping to 3 and see if that works.

 

Dan

Share this post


Link to post
Share on other sites

@@Joahim2509  Mine is set as follows and works correctly....

 

Discount Coupon      1
Sub-Total                 2
Shipping                  3
Tax                          4
Total                        5

 

Dan

Share this post


Link to post
Share on other sites

 

1.Zwischensumme (subtotal):

 

100.00EUR

 

2.Freier Versand(shipping):

 

0.00EUR

 

Rabatt Summe ohne MwSt.(DIscount):

 

90.00EUR

 

MwSt. 19.0%(VAT):

 

1.57EUR

 

Gesamtsumme(Total):

 

-4.40EUR

 

Share this post


Link to post
Share on other sites

@@Joahim2509  What happens when you set it like I suggested above?

 

Discount Coupon      1
Sub-Total                 2
Shipping                  3
Tax                          4
Total                        5

 

Dan

Share this post


Link to post
Share on other sites

Rabatt Summe : 90.00EUR

Zwischensumme: 10.00EUR

Freier Versand: 0.00EUR

MwSt. 19.0%: 1.57EUR

Gesamtsumme: -4.40EUR

Edited by Joahim2509

Share this post


Link to post
Share on other sites

@@Joahim2509  That is weird...the math doesn't make any sense....are you changing the code in the discount module you posted above?  If it were me I would try to echo out the variables in the module to see where things are going a muck.

 

Dan

Share this post


Link to post
Share on other sites

the problem is that I have not changed any thing in code. if you want and help for my roblem i can send you my discound code page sorce doc.

<?php
/*
  $Id: ot_customer_discount.php,v 1.2.1 2003/08/15 07:36:01 celiawessen Exp $

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

  Copyright (c) 2002 osCommerce

  Released under the GNU General Public License
*/

class ot_customer_discount {
    var $title, $output;

    function ot_customer_discount() {
        $this->code = 'ot_customer_discount';
        $this->title = MODULE_CUSTOMER_DISCOUNT_TITLE;
        $this->description = MODULE_CUSTOMER_DISCOUNT_DESCRIPTION;
        $this->enabled = MODULE_CUSTOMER_DISCOUNT_STATUS;
        $this->sort_order = MODULE_CUSTOMER_DISCOUNT_SORT_ORDER;
        $this->include_shipping = MODULE_CUSTOMER_DISCOUNT_INC_SHIPPING;
        $this->include_tax = MODULE_CUSTOMER_DISCOUNT_INC_TAX;
        $this->calculate_tax = MODULE_CUSTOMER_DISCOUNT_CALC_TAX;
        $this->output = array();
    }

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

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

    function calculate_discount($amount) {
        global $order, $customer_id;
        $od_amount=0;
        $query = tep_db_query("select customers_discount from " . TABLE_CUSTOMERS . " where customers_id = '" . $customer_id . "'");
        $query_result = tep_db_fetch_array($query);
        $od_pc = $query_result['customers_discount'];
        if ($query_result['customers_discount'] > 0) {
            // Calculate tax reduction if necessary
            if ($this->calculate_tax == 'true') {
                // Calculate main tax reduction
                $tod_amount = round($order->info['tax']*10)/10*$od_pc/100;
                $order->info['tax'] = $order->info['tax'] - $tod_amount;
                // Calculate tax group deductions
                reset($order->info['tax_groups']);
                while (list($key, $value) = each($order->info['tax_groups'])) {
                    $god_amount = round($value*10)/10*$od_pc/100;
                    $order->info['tax_groups'][$key] = $order->info['tax_groups'][$key] - $god_amount;
                }
            }
            $od_amount = (round($amount*10)/10)*$od_pc/100;
//	  $od_amount = $od_amount + $tod_amount;

        }
        return $od_amount;
    }


    function get_order_total() {
        global  $order, $cart;
        $order_total = $order->info['total'];
        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'];
        return $order_total;
    }

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

        return $this->check;
    }

    function keys() {
        return array('MODULE_CUSTOMER_DISCOUNT_STATUS', 'MODULE_CUSTOMER_DISCOUNT_SORT_ORDER', 'MODULE_CUSTOMER_DISCOUNT_INC_SHIPPING', 'MODULE_CUSTOMER_DISCOUNT_INC_TAX', 'MODULE_CUSTOMER_DISCOUNT_CALC_TAX');
    }

    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_CUSTOMER_DISCOUNT_STATUS', 'true', 'Do you want to enable the Customer specific order discount module?', '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_CUSTOMER_DISCOUNT_SORT_ORDER', '999', '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_CUSTOMER_DISCOUNT_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_CUSTOMER_DISCOUNT_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 ('Calculate Tax', 'MODULE_CUSTOMER_DISCOUNT_CALC_TAX', 'false', 'Re-calculate Tax on discounted amount.', '6', '5','tep_cfg_select_option(array(\'true\', \'false\'), ', 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 . ")");
    }
}
?>

Share this post


Link to post
Share on other sites

@@Joahim2509  I really don't want to get that involved....just trying to point you in the right direction.   Did you manage to echo out the variables?

 

Dan

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×