Posts

Aelia - News badge

EU VAT Assistant on WordPress.org – Update 12 December 2018

This post is a follow-up to the one we published on the 10 December 2018, in relation to the removal of our EU VAT Assistant from the WordPress repository.

Analysing the issue with the WordPress Team

As explained in the earlier post, due to technical limitations, the WP.org repository can only be used to host plugins that don’t have external dependencies. Plugins are expected to carry around a copy of all the files they need, even if this may cause conflicts with different versions of the same files, which might be installed on the site. Our EU VAT Assistant relies our Aelia Foundation Classes (or AFC, for short), which is an external framework. Due to that, it didn’t match the described requirement.

We had a long discussion with the WordPress Team, during which we went into the details of the decisions behind the design for our EU VAT Assistant, as well as our other plugins. We proposed several solutions, all of which were technically valid, but they were rejected on the ground of not being fully compliant with the current policies that apply to WordPress.org. The conclusion was our solutions are highly modular (and work well that way), but the public WordPress repository, in its current form, doesn’t support such architecture.

The challenge

The restrictions on the WordPress repository presented a significant challenge. We spent a significant amount of time and effort to create our existing, modular architecture. All our solutions are based on it, and they have been thoroughly tested. The WordPress Team insist that all plugins should carry around their own copy of the required files, while we have enough experience and statistical data to disagree with such statement. Besides, we couldn’t afford to discard years of work to go back to the required “monolithic” design, risking to introduce issues in the process.

The main hurdle came from one of the core principle on which the Aelia Foundation Classes is based. We wrote the AFC Framework with the assumption that there will always be one copy of such framework installed, at any given time. Such requirement can be easily enforced, and it allows to share the same code across multiple plugins. It also avoids having to write a convoluted logic to check if multiple copies of a framework are installed, and which one should be used. Based on our tests and experience, it’s a leaner and more effective approach.

Our challenge was to find a way to reach the following targets:

  1. Allow the EU VAT Assistant to carry around and load its own framework.
  2. Allow plugins that rely on the shared AFC Framework to keep doing so.
  3. Avoid substantial rewriting of any of the plugins, or the framework.

The AFC Framework as the key

After a careful analysis of our options, we realised that the AFC Framework could be the solution to the issue. Like our plugins, the framework is highly modular, and structured so that its components are loosely coupled. Although we designed the framework to be installed as a separate plugin, we were able to extract parts of it, and transform them into an “embedded framework”. This was also made easier by the logic used by our plugins to find the AFC, and interact with it, which allows for good flexibility. In short, we found a way to satisfy all the requirements, while keeping our modular structure and full compatibility with our other products.

The proposed solution

We reviewed the AFC Framework, focusing our attention on its basic, core elements, and we came up with a smart, yet simple solution:

  1. We built a smaller version of the framework, called AFC Embedded, which excludes non-essential features, as well as any feature that is not deemed “appropriate” for inclusion in the WordPress repository.
  2. We added the AFC Embedded framework to the EU VAT Assistant.
  3. We modified the loader logic used by the EU VAT Assistant, to perform the following operations:
    1. When the standalone AFC Framework is active, use that one. In such case, the plugin would behave exactly as it did before.
    2. When the standalone AFC Framework is not active, or not installed, load the embedded AFC Framework.

This approach required only minor changes in both the framework and the EU VAT Assistant, and no changes at all in our other products. It also covers the scenario where the EU VAT plugin is installed first, and the standalone framework at a later stage, e.g. after installing one of our premium WooCommerce plugins. In that case, the EU VAT Assistant switches from the embedded framework to the standalone one, transparently. Simple, yet effective!

Current status

We discussed the above solution with the WordPress Team, and they agreed that it would be within the guidelines of the WordPress.org repository. We have submitted an updated version of our EU VAT Assistant for their review, and we are waiting for their reply. If all goes well, our solution for EU VAT compliance should be back online very soon.

Any questions? Always happy to answer!

Should you have any questions about the EU VAT Assistant, or the progress with the new version, please feel free to contact us. We will be happy to answer all your questions, and give you any information you might need.

Thanks again for staying with us, we are looking forward to sharing with you some good news soon!

Regards,

The Aelia Team

Aelia - News badge

The EU VAT Assistant for WooCommerce is still “alive and kicking”!

On the 9 December 2018, the WordPress Team removed our popular EU VAT Assistant from the public repository on WordPress.org. In this article, we are going to explain why they took that decision.

Preliminary note

Before explaining the reason for the removal, we would like to clarify that the EU VAT Assistant is still working fine, it’s fully supported and it will be maintained for the foreseeable future. There isn’t any technical issue, we’re just dealing with a minor conflict with the regulations on WordPress.org.

Why the plugin was closed on WordPress.org

The WordPress Team closed the EU VAT Assistant on the 9th of December, 2018, because that plugin, like (almost) every other Aelia plugin, requires our mini-framework, called Aelia Foundation Classes (or AFC, for short). That mini-framework comes as an independent plugin, which has to be installed separately. We introduced such framework in our development cycle back in 2013, when we realised that the old approach of bundling multiple copies of the same files and libraries in each plugin was inefficient. Since WordPress didn’t include a dependency management system (and still doesn’t), we implemented our own, simple solution. That allowed us to get the result we were looking for:

  1. We were able to the files and libraries common to multiple plugins to a shared framework (the Aelia Foundation Classes).
  2. We were able to leverage the functions offered by WordPress to detect when such plugin is missing, and prompt the administrator to install it.

Thanks to the above, the EU VAT Assistant and our other plugins can detect if the AFC framework is not installed. When that is the case, they ask the administrators if they want to install it manually. To make thins even easier, our plugins also offers a convenient “one click” interface to do that installation. This is how the EU VAT Assistant always worked, ever since we released its first version, back in 2014. Apparently, now this presents an issue.

The issue

The rules for the WordPress repository indicate that a plugin can’t download another plugin from sources other than WordPress.org. Since the “one click install” downloads the framework from our site, that feature is no longer allowed. Due to that, the WordPress team deemed necessary to close the plugin, and informed us about that closure right after it was performed. Unfortunately, we didn’t receive an advance notice about this, or we would have informed our users about it.

As mentioned, the reason for the plugin closure is not technical. The EU VAT Assistant works perfectly fine as it is, and it’s not affected by bugs or technical issues. More simply, there’s a disagreement about our plugin’s architecture, as the WordPress team deemed such design to no longer conform with the repository guidelines. Due to this, they decided to remove the plugin, despite its popularity and the fact that it has been running smoothly for over 4 years.

Possible solutions

The only reported non-conformity in the EU VAT Assistant is the dependency management that the plugin uses. Our solution allows administrators to download the required AFC mini-framework from our site, which is external to WordPress.org. From a technical perspective, this could be solved easily in a few ways:

  1. The AFC framework could be hosted on WordPress.org.
  2. The framework could be bundled within the EU VAT Assistant, which would then take care of installing it as a separate plugin, without having to download it from an external source.
  3. The “once click install” feature could be removed from the EU VAT Assistant, thus removing the “download from an external site” altogether.

Unfortunately, the WordPress team didn’t accept any of the above:

  1. The first solution won’t be allowed by another regulation, which doesn’t allow to use WordPress.org to host framework plugins.
  2. The third solution would involve “bundling a plugin within a plugin”, which is also not allowed.
  3. The third solution won’t be allowed either. Requiring a manual installation of the framework would imply that the EU VAT Assistant “doesn’t work” straight out of the box (unless the framework is installed first), which is another of the requirements on WordPress.org repository to ensure a smooth user experience.

Feedback from the WordPress Team

The WordPress Team suggested that we change the the EU VAT Assistant so that it doesn’t require the AFC framework, or so that the files from the framework are part of the plugin itself. Unfortunately, that won’t be an option. The decision of having the framework as an external plugin was deliberate, to make our plugins modular and more robust. Such design, fairly common on other platforms, allows to keep modules lean, and greatly reduces the chance of conflicts caused by the presence of multiple copies of the same files. Our target was to move away from the obsolete “monolithic” architecture, and all the bloating that it involves, and have a single, shared framework. Other developers adopted such approach (popular themes like Genesis and Avada also use a framework plugin), and it works well.

Rewriting the EU VAT Assistant to go back to the old “bundle everything” design would be a significant step backward, and it would introduce a high risk of causing conflicts with our other plugins, which are based on current “shared framework” architecture. Regrettably, we can’t redesign all the plugins we developed just to comply with a restriction on WordPress.org, which affects a single plugin.

Current status (updated 10 December 2018)

We had an extensive conversation with the WordPress Team about the removal of the EU VAT Assistant from the repository, and how it could be restored. As of the the 10th of December, we haven’t reached an agreement. We proposed a few solutions that would not require a radical changes in the plugin’s architecture. They would also avoid a cascade effect with other plugins based on the same design. Unfortunately, the WP Team keeps insisting that the only solution they deem acceptable by them is to rewrite the plugin and bundle the framework in it. As explained above, that’s basically the only approach we can’t follow. It’s simply not feasible.

We are aware that this sudden change could cause alarm among the merchants who are using our EU VAT Assistant. We received several enquiries, from our customers, asking what the future of the our VAT plugin is going to be. All of them expressed their support to us, and were puzzled by such sudden decision about an established and useful solution. You can read the conversation on the plugin’s public support forum, available here: https://wordpress.org/support/topic/plugin-removed-from-wordpress-repository/.

As anticipated, the EU VAT Assistant is still fully functional and supported, still free and it will be maintained for the time being. We will keep checking with the WordPress Team if we can find a compromise that can allow to restore our plugin on the WordPress repository. In the meantime, the EU VAT Assistant will still be available, free of charge, directly from our website. We will also take care of serving updates for our solution directly, while the files hosted on WordPress.org are offline.

Any questions? Always happy to answer!

Should you have any questions about the EU VAT Assistant, please feel free to contact us. We will get back to you as soon as possible.

Thanks for reading this long post, and apologies for the inconvenience caused by the sudden change, which was outside our control.

Regards,

The Aelia Team

Aelia - News badge

WooCommerce EU VAT Assistant – Make VAT number optional when cart total is zero

Recently, we have been asked for a customisation for the EU VAT Assistant, to cover the following scenario:

  • The VAT number should be required to complete a purchase, if a payment has to be made.
  • The VAT number should not be required if the checkout doesn’t require a payment (i.e. if the cart total is zero). This could be the case if the customer only adds free products to the cart.

The above scenario is outside the scope of the EU VAT Assistant. The purpose of the “VAT number required” option is to force only B2B transactions. By making the VAT number required, only verified businesses can complete a transaction. By design, this rule applies whether the transaction requires a payment or not.

If you need to make the VAT number required only when a payment is needed, you can easily do so with a customisation. Your custom code will have to cover two elements:

  1. The validation of the VAT number on the checkout page
    When the field is set as “required”, the customer cannot go ahead with the checkout until such field is filled. For this part, we will rely on JavaScript to show or hide the VAT number field dynamically, as well as making it required, or not required
  2. The validation of the VAT number during the checkout process
    For this part, we will use a simple filter to verify if the VAT number should be required during the final checkout phase.

Now we have a plan, let’s get started.

Step 1 – Expose the cart total to the JavaScript frontend

The cart total is not easily accessible via JavaScript, as it’s not stored in the data returned by the Ajax requests triggered on the checkout page. Luckily, there is a convenient  filter that will allow us to add that information, called woocommerce_update_order_review_fragments. Our filter will be the following.

/**
 * Adds the cart total to the fragments returned as a response to the Ajax
 * requests on the checkout page.
 *
 * @param array fragments The fragments returned as a response.
 * @return array
 */
add_filter('woocommerce_update_order_review_fragments', function($fragments) {
  $fragments['_cart_total'] = WC()->cart->total;
  return $fragments;
});

Done. Now, every time the checkout form changes, we will have the cart total handy.

Step 2 – Get the cart total from the fragments, via JavaScript

Now that we have the cart total exposed to the JavaScript on the checkout page, we can use it to show or hide the VAT number field, as well as change its “required” status. For that purpose, we just have to add a simple script to the page footer.

/**
 * Adds a script to the checkout page, to make the VAT number required or not
 * required, depending on the cart total.
 */
add_action('wp_footer', function() {
  // We need to render our script only on the checkout page
  if(!is_checkout()) {
    return;
  }
  ?>
  <script>
  jQuery(document).ready(function($) {
    // Run the script every time the checkout form is updated. This will
    // allow us to check if the total changed
    $(document.body).on('updated_checkout', function(ev, data) {
      if(!data['fragments'] || !data['fragments'].hasOwnProperty('_cart_total')) {
        return;
      }

      var cart_total = parseFloat(data['fragments']['_cart_total']);
      var vat_number_required = (cart_total > 0);

      var $eu_vat_number = $('#woocommerce_eu_vat_number');
      // Show the VAT number is the cart total is greater than zero,
      // hide it otherwise
      $eu_vat_number.toggle(vat_number_required);
      // Make the VAT number required only if the cart total is greater than zero
      $eu_vat_number.find('.form-row').toggleClass('validate-required', vat_number_required);
    });
  })
  </script>
  <?php
});

With this script, we covered the checkout page. The VAT number will appear automatically when the cart total is greater than zero, and disappear when it’s not. Customers will be able to checkout without entering a number, if no payment is needed.

Step 3 – Make the VAT number optional during the checkout process

This is the last step, to allow the checkout to complete when the cart total is zero and the customer did not enter a VAT number. This filter is very simple.

/**
 * Sets the VAT number field as "not required" when the cart total is zero (or
 * less; which should never happen, but better to cover that case).
 *
 * @param bool is_vat_number_required Indicates if the VAT number is required.
 * @param string country The billing country selected at checkout.
 * @return bool
 */
add_filter('wc_aelia_euva_order_is_eu_vat_number_required', function($is_vat_number_required, $country) {
  // Make VAT number "not required" if the cart total is zero
  if($is_vat_number_required && (WC()->cart->total <= 0)) {
    $is_vat_number_required = false;
  }
	
  return $is_vat_number_required;
}, 10, 2);

That’s it. We covered the checkout process as well. The result will be the following:

  • When the cart total is greater than zero, the VAT number will be required. It won’t be possible to complete the checkout without entering it.
  • When the cart total is zero, the VAT number will be hidden, and optional. Customers won’t need to enter it.

You can find the complete code here: WooCommerce – Make VAT number optional if cart total is zero (Pastebin).

Need help?

Should you need assistance adding this custom code to your site, or if you need it tailored to your needs, you can hire us on Codeable. We will analyse your specifications and send you an estimate for your customisation.

Thanks for reading, and for using our EU VAT Assistant. See you soon for the next WooCommerce Tips & Tricks!

The Aelia Team

Aelia - News badge

VIES Validation Service is down, affecting EU VAT number validation

We have been informed that the VIES service used by our EU VAT Assistant to validate VAT numbers is currently inaccessible. Here is a screenshot from the European Commission website, taken today, 23rd January, at 11:30 GMT:

EU Commission - Website unavailable (screenshot)

EU Commission – Website unavailable

This downtime will affect the validation operations performed by our plugin, which will be unable to validate VAT numbers. Unfortunately, this is outside of our control. We will have to wait until the service is back online, then the EU VAT Assistant will start working correctly again.

Apologies for the inconvenience on behalf of the team managing the EU website.

The Aelia Team

Aelia - News badge

Happy new year! Time to update VAT rate for Romania

Happy new year to you all! We hope you had some great Christmas time, and that you are ready for a great 2017. Considering how 2016 went, it can only get better!

The new year starts with a good news for our Romanian friends. As announced last year, the Romanian government reduced the standard VAT rate from 20% to 19%, from the 1st January 2017.

This means that your products will be slightly cheaper. It would be a good idea to update your tax settings as soon as possible.

How to update the tax rates

Updating tax rates is a simple operation:

  1. Go to WordPress Admin > WooCommerce > Settings > Tax.
  2. Click on the tax rate you would like to update (e.g. “Standard“), at the top of the page.
  3. Change the rate in the row with the country code “RO” to “19”.
  4. If needed, update the tax rate description.
  5. Save the changes.

Now all that’s left is double checking that all tax rates are correct. Our plugin updates the rates related to EU countries, therefore you will have to check the rates that refer to countries outside the European Union. If you don’t have any, then you’re done. WooCommerce will now use the new rates for orders placed from now on, and our plugin will collect the tax data automatically.

Again, best wishes for an incredible 2017 from the Aelia Team. May the new year be full of joy and, of course, business opportunities!

The Aelia Team

Aelia - News badge

EU VAT rate update – Greece

We have recently been informed that the standard VAT rate for Greece was changed on the 1st June 2016, from 23% to 24%. Some changes were made to reduced VAT rates as well.

We would recommend to take the opportunity to update the VAT rates configured in your system, to make sure that you are using the correct ones.

How to update the tax rates

Updating tax rates is a simple operation:

  1. Go to WordPress Admin > WooCommerce > Settings > Tax.
  2. Click on the tax rate you would like to update (e.g. “Standard“), at the top of the page.
  3. Change the rate in the row with the country code “GR” to “24”.
  4. Save the changes.

If you are using our EU VAT Assistant plugin, you can update all EU tax rates with a single click. Simply select the rate type at the bottom of the page and click on Update EU VAT Rates. Make sure that you select the appropriate rates (Standard or Reduced), the plugin will do the rest.

WooCommerce Tax Rates Settings - Screenshot

With our EU VAT Assistant you can update all VAT rates with a single click

Once the operation is completed, review the tax rates, to ensure that they are correct, and click on Save Changes. WooCommerce will now use the new rates.

Quick and easy! 🙂

The Aelia Team