¿Cómo configurar el IVA para Canarias, Ceuta y Melilla en WooCommerce 2.0?

  • WooCommerce - Blog

¿Cómo configurar el IVA para Canarias, Ceuta y Melilla en WooCommerce 2.0?

Esta entrada es funcional únicamente para instalaciones sobre WooCommerce 2.0. Si buscas la forma de hacerlo bajo WooCommerce 2.1, debes visitar ¿Cómo configurar el IVA para Canarias, Ceuta y Melilla en WooCommerce 2.1?.

Impuestos en WooCommerce

Impuestos en WooCommerce

Tras haber terminado de configurar nuestra primera tienda virtual bajo el plugin WooCommerce para WordPress, y descubrir sus grandezas y sus miserias, vamos a publicar una serie de entradas donde os vamos a contar algunos pequeños trucos que os van a hacer la tarea de configurar vuestro WooCommerce mucho más sencilla.

En la documentación oficial de WooCommerce viene muy bien explicado cómo configurar los distintos tipos de impuestos (IVA) que necesitemos en nuestra tienda online, pero ya os adelantamos que para nuestro caso particular, España, no sirve absolutamente de nada y no funciona.

¿Entonces cómo configuramos el IVA?

IVA estándar en WooCommerce

IVA estándar en WooCommerce

Para hacerlo correctamente debemos seguir la ruta WooCommerce -> Ajustes -> Impuestos y, una vez allí, crear todos los tipos de IVA que necesitemos para nuestro proyecto de eCommerce.

En nuestro caso en particular, tal y como podemos ver en la captura de pantalla de la derecha, hemos necesitado y configurado tres tipos de IVA:

IVA al 21% en WooCommerce

IVA al 21% en WooCommerce

  • IVA al 10%: que ha sido configurado como impuesto estándar y que es el utilizado de forma predeterminada por la tienda virtual. Como podemos ver en la captura de pantalla, es un IVA universal que afecta a todos los países soportados y que no se aplica a los gastos de envío.
  • IVA al 21%: que ha sido configurado exactamente igual que el anterior, tal y como podemos ver en la captura de pantalla, aunque esta vez con una tasa del 21% y afectando a los gastos de envío, ya que este es el tipo de IVA que se va ha utilizar para calcular su importe correctamente.
IVA al 0% en WooCommerce

IVA al 0% en WooCommerce

IVA al 0%: que, al igual que en el caso anterior, ha sido configurado también para que afecte a los gastos de envío, aunque para esto funcione es necesario un plugin que hemos creado y que publicaremos en los próximos días llamado WooCommerce – APG Weight and Postcode/State/Country Shipping.

Una vez que tenemos configurados los 3 IVAs, y, dado que WooCommerce no va a saber cuando utilizarlos, necesitamos introducir un alguna modificación en el archivo functions.php de nuestro tema o hijo de WordPress. Concretamente este puñado de líneas de código:

//Cálculo de IVA en Ceuta, Melilla y Canarias
function iva_excluido( $tipo_de_iva ) {
	global $woocommerce;

	list ( $pais, $provincia, $codigo_postal, $ciudad ) = $woocommerce->customer->get_taxable_address();
	if ( $provincia == 'CE' || $provincia == 'ML' || $provincia == 'GC' || $provincia == 'TF') {
		$tipo_de_iva = 'Excluido';
	}

	return $tipo_de_iva;
}
if ( !is_admin() ) {
	add_filter('woocommerce_product_tax_class', 'iva_excluido');
}

Gracias a ellas, nuestra tienda virtual usará el tipo de IVA al 0%, llamado Excluido en nuestro caso particular, siempre que el cliente se encuentre en Canarias, Ceuta o Melilla.

¿Ya está todo hecho?

En realidad no, si queremos que todo funcione correctamente debemos configurar WooCommerce para que los productos tengan el IVA añadido, tal y como podemos ver en la primera captura de pantalla, y debemos introducir los precios netos, sin IVA, en los productos, e indicar el tipo de IVA que queremos que se aplique, en nuestro caso particular, el 10% o el 21%.

El problema surge cuando vamos a nuestra tienda virtual y nos encontramos con que los precios de los productos se muestran tal y como los hemos introducido, es decir, sin el IVA añadido. Para solucionarlo necesitamos añadir otro puñado de líneas de código en nuestro archivo functions.php:

//Precios con IVA incluido
function precio_con_iva( $precio, $producto ) {
	global $woocommerce;

	if ( $producto->price > 0 ) {
		if ( $producto->is_on_sale() && isset( $producto->regular_price ) ) {
			return $producto->get_price_html_from_to( dame_iva( $producto->regular_price, $producto ), $producto->get_price_including_tax() );
		} else {
			return woocommerce_price( $producto->get_price_including_tax() );
		}
	}

	return $precio;
}
if ( !is_admin() ) {
	add_filter( 'woocommerce_get_price_html', 'precio_con_iva', 100, 2 );
}

function dame_iva($precio, $producto, $cantidad = 1) {
	global $woocommerce;

	$iva  = new WC_Tax();

	if ( $producto->is_taxable() ) {
		if ( get_option( 'woocommerce_prices_include_tax' ) == 'no' ) {
			$tipo_de_iva = $iva->get_rates( $producto->get_tax_class() );
			$impuestos = $iva->calc_tax( $precio * $cantidad, $tipo_de_iva, false );
			$precio = round( $precio * $cantidad + $iva->get_tax_total( $impuestos ), 2 );
		}
	}

	return $precio;
}

Con estas configuraciones y pequeñas modificaciones veremos que nuestra tienda mostrará los precios con su IVA correspondiente en toda España y en Canarias, Ceuta y Melilla nos mostrará los precios sin IVA.

Por cierto, notaréis que os saldrá un mensaje que dice (incl. IGC) en lugar de (incl. IVA), para arreglarlo, cada vez que se actualice WooCommerce hay que hacerlo, debemos editar los archivos de idioma de WooCommerce: woocommerce-es_ES.po y woocommerce-es_ES.mo. Para ello podemos utilizar algún plugin como CodeStyling Localization, que os será de gran ayuda. Lo que no terminamos de entender es el porqué de que este error siga perenne, cuando es un error conocido y reportado hasta la saciedad.

Todo lo aquí explicado lo puedes ver en funcionamiento en la tienda virtual de Herves-Vida. Esperamos que os resulte útil esta entrada, y si es así, esperamos vuestros comentarios.

El próximo día os explicaremos cómo añadir un campo NIF/CIF de forma fácil y sencilla, aunque ya estamos pensando en crear plugin para hacerlo aún más simple, y, obviamente, os informaremos de la publicación de WooCommerce – APG Weight and Postcode/State/Country Shipping, pero eso será otro día.

Actualización: gracias al aviso de Jose Costa Ros hemos detectado que la función precio_con_iva no era correcta cuando el producto utilizaba precio rebajado o cualquier otra combinación. Ahora, con la nueva función que publicamos, funciona correctamente.

20 Comentarios

  1. Jorge lunes, 25 de noviembre de 2013 en 12:41- Responder

    Hola. Muchas gracias por la aportación pero tengo una duda: dejando en Canarias exenta de aplicar el IVA no aplicamos ningún impuesto, pero en Canarias ¿no habría que aplicar el IGIC que sustituye al IVA en ese territorio?
    En tal caso supongo que habría que configurar otro impuesto más, el IGIC con sus variantes, para ese territorio.
    Gracias

    • Art Project Group lunes, 25 de noviembre de 2013 en 12:45- Responder

      Efectivamente en Canarias existe el IGIC, pero este normalmente se cobra directamente por la empresa de transporte al cliente a la hora de entregar el paquete. Lo mismo ocurre en Ceuta y Melilla, donde también tienen un recargo especial. Dado que este tipo de recargos varían en función de varios factores, no creemos que sea necesario programarlo. Aún así, si alguien tiene especial interés y nos hace llegar la documentación al respecto, podemos estudiar la forma de implementarlo en el plugin.

      Muchas gracias por usar nuestro plugin.

      Un saludo.

    • Art Project Group miércoles, 27 de noviembre de 2013 en 11:04- Responder

      De todas formas en tus Condiciones de compra, debes dejarle claro al cliente este punto. Por ejemplo en las Condiciones de compra de Herves-Vida tienes el punto 2.6 que dice:
      2.6. Moneda,impuestos y precio

      De acuerdo con la legislación vigente, toda la compra desde nuestro sitio web estará sujeta al impuesto sobre el valor añadido, excepción hecha de Canarias, Ceuta y Melilla. El tipo aplicable será el legalmente vigente en cada momento.

      En los pedidos con destino a Canarias, Ceuta y Melilla, las entregas se considerarán exentas de IVA, sin perjuicio de la aplicación de los impuestos y aranceles derivados de la entrada del producto en dichos territorios (según normativa vigente), y que deberán ser pagados directamente por el cliente al operador logístico encargado de la entrega del producto.

      Todos los precios se muestran en euros (€) y deben ser considerados como el precio final a pagar por el cliente (incluyendo el IVA o no en función del territorio de entrega, tal y como se indica en los párrafos anteriores). Los costes de transporte (si proceden) así como los impuestos y aranceles para la entrada del producto en Canarias, Ceuta y Melilla no están incluidos en dicho precio.

      Las compras con destino a Canarias están exentas de IVA español, pero el cliente deberá asumir los impuestos y gastos de entrada del producto en su Comunidad (IGIC, despachos aduaneros, etc.). Estos gastos deberán ser pagados directamente por el cliente al operador logístico encargado de la entrega del producto. Del mismo modo, el cliente deberá asumir el coste de la salida del producto de su comunidad (despachos aduaneros) cuando se realiza la devolución del pedido, más el coste del envío del paquete, que variará en función del origen.

  2. josecostaros domingo, 1 de diciembre de 2013 en 10:57- Responder

    Funcionando perfectamente 😀 GRACIAS!

  3. josecostaros domingo, 15 de diciembre de 2013 en 16:46- Responder

    Una vez más, ¡gracias!, los plugins que nos ofreces son muy útiles y funcionaes, así como las instrucciones de uso “paso a paso” que nos facilitan mucho el trabajo a los usuarios.

  4. bernardo domingo, 26 de enero de 2014 en 21:22- Responder

    Hola a todos he instalado el pluging shiping y va bien pero tengo problema con el calculo de la IVA he hecho como ponéis en el tutorial pero al momento de realizar la compra con ceuta melilla o gran canarias pone la IVA al cero pero se cumula con la IVA al 21% si tenéis una solución genial , pero os felicito por vuestro pluging

    Saludos

    • Art Project Group lunes, 27 de enero de 2014 en 7:41- Responder

      Algo has debido de hacer mal, ya que el IVA en Canarias, Ceuta y Melilla debe de salir a 0 en todos los productos y en el gasto de envío, y tal y como está descrito en esta entradas, así es. Somos muchos los que lo usamos sin problema alguno.

      Revisa tu configuración y lo explicado aquí, además de la función que hay que insertar en el archivo functions.php.

      Suerte.

  5. bernardo lunes, 27 de enero de 2014 en 13:21- Responder

    Voy a revisarlo todo el proceso la unica diferencia es que solo utilizo 2 IVa 1 al 21% y la del 0% para canarias debemos modificar algo en el codigo a añadir
    garcias

  6. bernardo lunes, 27 de enero de 2014 en 15:34- Responder

    http://www.galimard-perfumes.es es la web en la cual he puesto el plugin cuando tengáis el tiempo y ver que cuando poner una de las provincias con la IVA al cero pues cumulan las 2 he hecho lo que me habéis dicho pero algo debo hacer mal no logro por ahora solucionarlo
    gracias

    • Art Project Group lunes, 27 de enero de 2014 en 18:35- Responder

      Buenas tardes Bernardo.

      Según hemos visto en tu Panel de Administración había dos problemas, el primero es que la Localización Base no estaba bien configurada, ya que tenías puesto un país exótico ;-). Por otro lado no has entendido bien el comentario que le escribimos, por lo que hemos escrito una nueva entrada (¿Cómo configurar correctamente el IVA en WooCommerce?) y así lo veréis más claro.

      No puedes usar los impuestos estándar para los gastos de envío, ya que WooCommerce no devuelve su valor, creemos que es algún error propio, por lo que tienes que crear un nuevo impuesto al 21% para los gastos de envío, y verás cómo todo funcionará correctamente.

      Esperemos que ahora lo veas más claro.

  7. bernardo lunes, 27 de enero de 2014 en 21:55- Responder

    Hola a todos ya todo solucionado genial y sobre todo muchas gracias Emilio por tu atención, respuestas super rápido “chapeau” como se dice en Francia, un milion de gracias tu plugin la bomba.

  8. Rubén viernes, 11 de abril de 2014 en 13:37- Responder

    Muy buen tutorial, pero me surge un problema.

    Nosotros operamos desde Canarias y, aunque ya hemos configurado el “IVA” (IGIC) al 3%, no consigo saber como cambiar literalmente la palabra IVA del carrito y sustituirla por IGIC.

    Muchas gracias de antemano.

    • Art Project Group viernes, 11 de abril de 2014 en 13:41- Responder

      Para eso tienes que modificar las traducciones de WooCommerce.

      Puedes hacerlo con un fantástico plugin gratuito que se llama Codestyling Localization.

      Un saludo.

  9. Sergio martes, 10 de junio de 2014 en 14:10- Responder

    Hola, qué sentido tiene el IVA estándar al 10%?. Acabo de instalar ambos plugin y hasta ahora tenía el estándar a 21%. De esa manera los precios aparecen con el IVA Incluído del 21%. Si sigo vuestras instrucciones, cómo logro que eso continúe así?. Puedo imaginar que los precios son mostrados a todo el mundo en el sitio web con el IVA correspondiente a la tienda base, es eso así?. Porque si es así, perfecto, porque estamos en Madrid. Luego, al proyectar el pedido, si el cliente estaría en Canarias, el precio le descontaría el IVA. Estoy en lo cierto?. Gracias por vuestro plugin.

    • Art Project Group martes, 10 de junio de 2014 en 14:33- Responder

      Ninguno si no lo necesitas. En el ejemplo era necesario, y así se ha explicado, con el IVA al 10%. Lo único que tienes que hacer es seguir el ejemplo pero para el tipo de IVA que necesitas.

      Lee bien la entrada.

      Un saludo.

  10. Frank.- domingo, 4 de enero de 2015 en 1:40- Responder

    Hola Equipo!!
    En mi caso estoy configurando una tienda online pero no quiero hacer envíos fuera de la península. Es posible configurar vuestro plugin para que si se introduce algún código postal de Canarias, Baleares, Ceuta o Melilla no aparezca ningún método de envío? O que aparezca un mensaje diciendo que no es posible?
    Muchas gracias!

  11. Sergio Rubio martes, 24 de marzo de 2015 en 20:23- Responder

    Hola a todos,

    No se si es un problema de mi configuración, pero he observado que en los productos variables, en caso de que existan diferentes precios en las variaciones, desaparece el “precio min-max” (con la nueva versión de woocommerce) y el “desde:precio mínimo” (con la versión anterior de woocommerce) lo que puede provocar confusión a los clientes. Si os soy sincero y dado mis escasos conocimientos de programación, no logro detectar el motivo por el que el código provoque este funcionamiento (si es que es un problema del código… que no estoy yo tan seguro de que no sea mi configuración)

    Muchas gracias por vuestro esfuerzo por añadir esta y otras funcionalidades para resolver nuestros problemas del día a día.

    Un saludo.

Deje un comentario

Comparte esto con un amigo