Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

customer discount dont sho corect


Joahim2509

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

Link to comment
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

Link to comment
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

Link to comment
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

Link to comment
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

Link to comment
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

Link to comment
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 . ")");
    }
}
?>
Link to comment
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

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...