WordPress.org

Ready to get started?Download WordPress

Forums

WooCommerce - excelling eCommerce
BUGREPORT: WooCommerce 2.1.12 is wrongly counting the taxes?!! (6 posts)

  1. mijk
    Member
    Posted 2 weeks ago #

    Hello,
    I am hopeless. I have installed latest WC 2.1.12 to a clean WP 3.9.1 with no caching or any additional plugins. I've set it up the same way as before, ie:

    WC > Settings > Tax > Tax options:
    [x] Enable taxes and tax calculations
    [x] Yes, I will enter prices inclusive of tax
    Shipping Tax Class: Standard
    Display prices in the shop: Including tax
    Price display suffix: incl. VAT
    Display prices during cart/checkout: Including tax
    Display tax totals: Itemized
    (check the image gallery below)

    WC > Settings > Tax > Standard rates:
    * * * * Rate 21% VAT 1 [not selected] [x] (check image gallery below)

    ---

    Then I added a product that cost 100 (just to make it easier to see the wrong summation, btw i'm entering the prices incl. taxes), I've set up the VAT to 21% so the tax on the item should be 21, but WooCommerce counts it as 17.36... I don't understand!

    Gallery of screenshots of all the admin setting + frontend cart counting the totals:
    https://imgur.com/a/vo1pk

    ---

    Another strange thing is that based on this tutorial (Shipping Method API): http://docs.woothemes.com/document/shipping-method-api/ I've created a plugin (simply by copy+pasting the code from gist on the bottom of the page, and I've modified it a bit to suit my needs:

    <?php
    /*
    Plugin Name: DHL shipping
    Plugin URI: http://woothemes.com/woocommerce
    Description: DHL shipping method plugin
    Version: 1.0.0
    Author: WooThemes
    Author URI: http://woothemes.com
    */
    /**
     * Check if WooCommerce is active
     */
    if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    
    	function dhl_shipping_method_init() {
    		if ( ! class_exists( 'WC_DHL_Shipping_Method' ) ) {
    			class WC_DHL_Shipping_Method extends WC_Shipping_Method {
    				/**
    				 * Constructor for your shipping class
    				 *
    				 * @access public
    				 * @return void
    				 */
    				public function __construct() {
    					$this->id                 = 'dhl_shipping_method'; // Id for your shipping method. Should be uunique.
    					$this->method_title       = __( 'DHL' );  // Title shown in admin
    					$this->method_description = __( 'DHL' ); // Description shown in admin
    
    					$this->enabled            = "yes"; // This can be added as an setting but for this example its forced enabled
    					$this->title              = "DHL"; // This can be added as an setting but for this example its forced.
    
    					$this->init();
    				}
    
    				/**
    				 * Init your settings
    				 *
    				 * @access public
    				 * @return void
    				 */
    				function init() {
    					// Load the settings API
    					$this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
    					$this->init_settings(); // This is part of the settings API. Loads settings you previously init.
    
    					// Save settings in admin if you have any defined
    					add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
    				}
    
    				/**
    				 * calculate_shipping function.
    				 *
    				 * @access public
    				 * @param mixed $package
    				 * @return void
    				 */
    				public function calculate_shipping( $package ) {
    					$rate = array(
    						'id' => $this->id,
    						'label' => $this->title,
    						'cost' => '100',
    						'calc_tax' => 'per_item'
    					);
    
    					// Register the rate
    					$this->add_rate( $rate );
    				}
    			}
    		}
    	}
    
    	add_action( 'woocommerce_shipping_init', 'dhl_shipping_method_init' );
    
    	function add_dhl_shipping_method( $methods ) {
    		$methods[] = 'WC_DHL_Shipping_Method';
    		return $methods;
    	}
    
    	add_filter( 'woocommerce_shipping_methods', 'add_dhl_shipping_method' );
    }

    But the VAT for this shipping method isn't listed in tax totals, when is this method selected, at all...

    What am I doing wrong, please?

    https://wordpress.org/plugins/woocommerce/

  2. mijk
    Member
    Posted 2 weeks ago #

    sorry, I have accidently removed the gallery with settings and preview of the issue, here is the correct image gallery link:
    https://imgur.com/a/0JbPb

  3. lorro
    Member
    Posted 2 weeks ago #

    Q1)

    I added a product that cost 100 (just to make it easier to see the wrong summation, btw i'm entering the prices incl. taxes), I've set up the VAT to 21% so the tax on the item should be 21, but WooCommerce counts it as 17.36

    I think WooCommerce has it right:
    Item cost excluding tax = 82.64
    Tax = 82.64 x 21% = 17.36
    Customer pays 82.64 + 17.36 = 100 = price includes tax

    Q2)
    Its difficult to debug code without access to it, but check this page. You may need to add in:

    $this->is_taxable = True;

    in your new method's construct function.

  4. mijk
    Member
    Posted 2 weeks ago #

    Hello Iorro,
    thanks for your fast response,
    however:

    Q1)
    Simple arithmetics tells me it's not OK, if i'm entering prices INCL. the VAT, equation should be following:

    100 * 0.21 = 21 (VAT is 21 per cent of 100)
    100 - 21 = 79 (79 per cent of 100, price excluding the VAT)
    79 * 1.21 = 100 (total price incl. the VAT)

    so the equation of 17.36 being 21% of the 100 is absolutely out of any questions

    Q2) I'm so hopeless, the suggested code added to the constructor didn't work at all.
    I've pasted the complete code I use to handle my shipping in the first post in this thread, WooCommerce is just not adding the tax for the shipping in VAT totals (see the last two pics in my previously shared gallery here: https://imgur.com/a/0JbPb).

    My complete shipping plugin code is following:

    <?php
    /*
    Plugin Name: DHL shipping
    Plugin URI: http://woothemes.com/woocommerce
    Description: DHL shipping method plugin
    Version: 1.0.0
    Author: WooThemes
    Author URI: http://woothemes.com
    */
    /**
     * Check if WooCommerce is active
     */
    if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    
    	function dhl_shipping_method_init() {
    		if ( ! class_exists( 'WC_DHL_Shipping_Method' ) ) {
    			class WC_DHL_Shipping_Method extends WC_Shipping_Method {
    				/**
    				 * Constructor for your shipping class
    				 *
    				 * @access public
    				 * @return void
    				 */
    				public function __construct() {
    					$this->id                 = 'dhl_shipping_method'; // Id for your shipping method. Should be uunique.
    					$this->method_title       = __( 'DHL' );  // Title shown in admin
    					$this->method_description = __( 'DHL' ); // Description shown in admin
    
    					$this->enabled            = "yes"; // This can be added as an setting but for this example its forced enabled
    					$this->title              = "DHL"; // This can be added as an setting but for this example its forced.
    
    					$this->is_taxable         = True; // tax it - LINE ADDED AFTER IORRO's SUGGESTION
    
    					$this->init();
    				}
    
    				/**
    				 * Init your settings
    				 *
    				 * @access public
    				 * @return void
    				 */
    				function init() {
    					// Load the settings API
    					$this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
    					$this->init_settings(); // This is part of the settings API. Loads settings you previously init.
    
    					// Save settings in admin if you have any defined
    					add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
    				}
    
    				/**
    				 * calculate_shipping function.
    				 *
    				 * @access public
    				 * @param mixed $package
    				 * @return void
    				 */
    				public function calculate_shipping( $package ) {
    					$rate = array(
    						'id' => $this->id,
    						'label' => $this->title,
    						'cost' => '100',
    						'calc_tax' => 'per_item'
    					);
    
    					// Register the rate
    					$this->add_rate( $rate );
    				}
    			}
    		}
    	}
    
    	add_action( 'woocommerce_shipping_init', 'dhl_shipping_method_init' );
    
    	function add_dhl_shipping_method( $methods ) {
    		$methods[] = 'WC_DHL_Shipping_Method';
    		return $methods;
    	}
    
    	add_filter( 'woocommerce_shipping_methods', 'add_dhl_shipping_method' );
    }
  5. lorro
    Member
    Posted 2 weeks ago #

    Q1) Don't agree with your calc:

    If price of 100 includes VAT, then:

    item + VAT = 100

    VAT = item x 21%

    item + item x 21% = 100

    121% x item = 100

    item = 100 / 1.21 = 82.64

    vat = 100 - 82.64 = 17.36

    If price of 100 excludes VAT, (different setting) then:

    VAT = 100 x 21% = 21

    Customer pays 121.

    Q2) Sorry, can't help. Anyone else?

  6. mijk
    Member
    Posted 2 weeks ago #

    Q1)
    OK, tank you for your explanation. Sorry, I forgot to lower the price of the VAT in the first place.

    Q2)
    However, my second question (shipping method's VAT not being counted to the VAT totals in the checkout) still stands, thank you for your help, lorro.

Reply

You must log in to post.

About this Plugin

About this Topic