Jump to content

El servicio de validación del IVA no se encuentra disponible.


Recommended Posts

Hola,

 

Estoy intentando instalar el módulo de "Número de IVA europeo" pero en todos los casos que aparece este mensaje de error "El servicio de validación del IVA no se encuentra disponible".

 

Alguien sabe como configurarlo correctamente.

 

Con esto funcionando podríamos vender en diferentes países europeos y conectado con el Registro de Operadores Intracomunitarios prestashop no cobrará el IVA a aquellos que están inscriptos en el registro.

 

Sino, alguien sabe como hacerlo manualmente, es decir, eliminar impuestos de aquellos a los que no queremos cobrarles el IVA?

 

Muchas gracias.

Link to comment
Share on other sites

Hola,

 

Estoy intentando instalar el módulo de "Número de IVA europeo" pero en todos los casos que aparece este mensaje de error "El servicio de validación del IVA no se encuentra disponible".

 

Alguien sabe como configurarlo correctamente.

 

Con esto funcionando podríamos vender en diferentes países europeos y conectado con el Registro de Operadores Intracomunitarios prestashop no cobrará el IVA a aquellos que están inscriptos en el registro.

 

Sino, alguien sabe como hacerlo manualmente, es decir, eliminar impuestos de aquellos a los que no queremos cobrarles el IVA?

 

Muchas gracias.

 

Ummm

 

¿Puedes revisar un momento el log de errores por si las moscas?

Link to comment
Share on other sites

He creado España, Baleares, Canarias, Melilla y Ceuta, como diferentes países con el fin de aplicar impuestos y portes diferentes. Con esas mismas características he creado zonas, porque los transportistas solo me dejan configurarlos conforme a zonas y no países.

Link to comment
Share on other sites

A lo mejor el problema viene por ahí, no lo sé... Zonas sí, pero países no son, todas esas zonas son España, y quizás venga por ahí el problema. ¿Has activado los estados (provincias) para España? Crea Baleares, Canarias, Ceuta y Melilla como provincias de España, y después creas las zonas y las asignas para los transportes.

Link to comment
Share on other sites

Muchas gracias E-kipper por la idea, no me ha servido para lo del ROI pero si para organizar mejor lo de los transportes.

 

Volviendo al asunto yo activo la opción "Activar la comprobación del número de IVA con el WebService" y me devuelve el error "El servicio de validación del IVA no se encuentra disponible". Asi que lo que falla será el webservice.

 

Lo he comprobado y efectivamente, desactivo el webservice y funciona; pero no comprueba la validez del IVA Europeo.

Link to comment
Share on other sites

Yo estoy en la misma situación, si intento validar a través del webservice un VAT español, me da el mensaje "El servicio de validación del VAT no se encuentra disponible".

 

Lo curioso es que esto solo ocurre con los los VAT españoles, he probado con exito la validación de un VAT number alemán y otro francés. Por tanto el servicio de validación funciona, pero algo debe estar pasando con la validación de los numeros ES------

 

Sigo investigando....

 

Saludos

mnks

Link to comment
Share on other sites

Yo estoy en la misma situación, si intento validar a través del webservice un VAT español, me da el mensaje "El servicio de validación del VAT no se encuentra disponible".

 

Lo curioso es que esto solo ocurre con los los VAT españoles, he probado con exito la validación de un VAT number alemán y otro francés. Por tanto el servicio de validación funciona, pero algo debe estar pasando con la validación de los numeros ES------

 

Sigo investigando....

 

Saludos

mnks

 

 

¿No sera algún tipo de bug?

 

¿Habéis intentando buscar en el forge de prestashop?

 

Saludos,

Link to comment
Share on other sites

Mira que país tienes selecionado como predeterminado, porque si es España sería normal que fallara, digo yo.

 

Porque si vendes desde españa y es un VAT español es normal que no le quite los impuestos.

Link to comment
Share on other sites

Por lo que he podido ver, es un bug, pero del servicio web de validación del vat, no de prestashop.

 

El servicio contra el que se valida el vat esta en la siguiente url http://ec.europa.eu/taxation_customs/vies/viesquer.do (pagina oficial de la comisión europea)

 

Prestashop compone bien la url para la consulta, para un vat ficticio ESB12345678

 

http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=ES&iso=ES&vat=B12345678

 

El valor de ms y de iso es un substring con los dos primeros caracteres del vat a validar

El valor de vat es substring restante del vat a validar.

 

Si disponeis de un vat real, en http://ec.europa.eu/taxation_customs/vies/viesquer.do se puede validar cumplimentado los campos del formulario, os dirá que el numero es valido.

 

Si se accede a la url directemente (como hace prestashop) colocando en el navegador la url anterior con sus parametros, devolverá un error "Application unavailable"

 

Por contra, si haceis esto mismo con un vat de otro pais, funcionará de las dos formas.

 

Por ejemplo: http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=FR&iso=FR&vat=53532832201

 

Creo que no hay mucho mas que rascar....

Link to comment
Share on other sites

Casualmente estoy mirando dentro del código porque tengo el mismo problema que tenéis los de arriba. Tengo varios VAT number originales de UK, Suiza, Alemania y todos funcionan a la perfección pero cuando quiero poner uno español que tenemos nos da error en el puto sistema.. He probado a cambiar el país por defecto como comentan arriba pero na de na.. Estoy con el archivo php abierto a ver si me da tiempo echarle un vistazo al módulo y ver que pasa. Si alguien tiene alguna novedad por favor que la comente.

Saludos

Link to comment
Share on other sites

Nadie, el gran problema es que el propio webservice de la UE no funciona.. es el que da el error.. por ejemplo:

 

Tengo un vat number de Suecia:

 

http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=SE&iso=SE&vat=xxxxxxxxxxxx

 

Tengo el vat number de 12 cifras original y cuando lo pongo en las X y armo la url me da un resultado satisfactorio dentro de la UE donde se verifican los VAT number

 

Sin embargo si haces eso con la de españa que es algo así:

 

http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=ES&iso=ES&vat=xxxxxxxxx

 

El sistema no reconoce la url y desde la UE dice que el servicio no está disponible.

 

La cosa no pinta nada bien la verdad. Ya nos discriminan hasta para estas cosas :facepalm:

Link to comment
Share on other sites

  • 2 weeks later...

¿Como está el asunto? ¿Alguien ha dado con la solucion?

 

Estoy pensando en comprar este módulo para poder implementar la función de verificar el nº de IVA y asignar el cliente a un grupo concreto, pero desconfío de que pueda verificar el número, dado que el webservice falla desde prestashop?

 

http://addons.prestashop.com/en/front-office-features-prestashop-modules/4946-eu-vat-and-client-group.html

 

¿Alguien lo ha probado? ¿Funciona?

 

Gracias

Link to comment
Share on other sites

  • 1 month later...

Bueno pues mirando por ahí he encontrado esta página:

 

http://vatid.eu/

 

Que valida si un código vat es correcto o no. Y ahora lo que voy a generar es un campo en los formularios donde se añaden los VAT que compruebe si el vat introducido es correcto o no por medio de ajax.

 

Por el momento he creado un php que llamado por URL y pasándole el ISO y el NIF te dice si el VAT es correcto o incorrecto. Aquí os dejo el php por si le interesa a alguien:

 

<?
function vat_correcto_sn($url) {
   if ((@$f = fopen($url, 'r')) != false) {
    fclose($f);
    $res = join(file($url));
   $v_aux = strpos($res, "true");
   if (!empty($v_aux))
 echo 'S';
   else
 echo 'N';
   }
}
$v_vat = "http://vatid.eu/check/".$_GET["pais_vat"]."/".$_GET["iva_vat"]."";
vat_correcto_sn($v_vat);
?>

 

Mi intención es hacer algo como lo que pyrolisis500 pero no tan complejo y gratuito.

Ya os diré cuando esté terminado por si le interesa a alguien.

Link to comment
Share on other sites

Bueno señores pues ya lo tengo.

 

Antes de nada indicar que no soy ningún Gurú (ni de lejos) de Prestahop y que mucho código que he generado se podría haber creado de otra forma mucho mas optima pero de momento es lo que hay.

 

Os pongo aquí la explicación:

 

1.- He creado un nuevo módulo llamado estadosvat que básicamente es una pantalla de mantenimiento de una tabla nueva donde se guardan los estados y sus códigos. En este módulo se puede insertar, modificar y eliminar en la tabla.

 

2.- He añadido una función a classes/Tools.php llamada iva_intracomunitario:

 

/**
* Obtiene los estados dados de alta para el IVA intracomunitario
*
*/
public static function iva_intracomunitario()
{
$sql = 'SELECT * from iva_intracomunitario';
$iva_intracomunitarios = Db::getInstance()->executeS($sql);
//
$i = 1;
foreach ($iva_intracomunitarios as $iva_intracomunitario)
{
 $valor_devuelto[$i]["iva_codigo"] = $iva_intracomunitario["iva_codigo"];
 $valor_devuelto[$i]["iva_nombre"] = $iva_intracomunitario["iva_nombre"];
 //
 $i = $i + 1;
}
return $valor_devuelto;
}

 

Esta función simplemente lee los datos de la tabla creada en el punto 1 iva_intracomunitario y los devuelve en un array.

 

3.- He modificado controllers/front/AuthController.php para que lea los datos de la nueva tabla y los devuelva al tpl. Para dicha modificación simplemente he añadido el siguiente código en la linea 149, antes de llamar a authentication.tpl:

	$this->context->smarty->assign("iva_intracomunitarios", Tools::iva_intracomunitario());

 

Por lo que la función initContent debe quedar así:

 

public function initContent()
{
	parent::initContent();

	/* Secure restriction for guest */
	if ($this->context->customer->is_guest)
		Tools::redirect('index.php?controller=addresses');

	$this->assignCountries();
	$this->assignVatNumber();
	$this->assignAddressFormat();

	// Assign common vars
	$this->context->smarty->assign(array(
		'onr_phone_at_least' => (int)Configuration::get('PS_ONE_PHONE_AT_LEAST'),
		'ajaxurl' => _MODULE_DIR_,
		'errors' => $this->errors,
		'token' => Tools::getToken(false),
		'select_address' => (int)Tools::getValue('select_address'),
		'address' => $this->_address,
		'id_address' => (Validate::isLoadedObject($this->_address)) ? $this->_address->id : 0,
	));

	if ($back = Tools::getValue('back'))
		$this->context->smarty->assign('back', Tools::safeOutput($back));
	if ($mod = Tools::getValue('mod'))
		$this->context->smarty->assign('mod', Tools::safeOutput($mod));
	if (isset($this->context->cookie->account_created))
	{
		$this->context->smarty->assign('account_created', 1);
		unset($this->context->cookie->account_created);
	}
	//
	$this->context->smarty->assign("iva_intracomunitarios", Tools::iva_intracomunitario());
	$this->setTemplate(_PS_THEME_DIR_.'address.tpl');
}

 

4.- He modificado controllers/front/AddressController.php para que lea los datos de la nueva tabla y los devuelva al tpl. Para dicha modificación simplemente he añadido el siguiente código en la linea 286, antes de llamar a address.tpl:

	$this->context->smarty->assign("iva_intracomunitarios", Tools::iva_intracomunitario());

 

Por lo que la función initContent debe quedar así:

 

public function initContent()
{
	parent::initContent();

	$this->context->smarty->assign('genders', Gender::getGenders());

	$this->assignDate();

	$this->assignCountries();

	$active_module_newsletter = false;
	if ($module_newsletter = Module::getInstanceByName('blocknewsletter'))
		$active_module_newsletter = $module_newsletter->active;

	$this->context->smarty->assign('newsletter', (int)$active_module_newsletter);

	$back = Tools::getValue('back');
	$key = Tools::safeOutput(Tools::getValue('key'));
	if (!empty($key))
		$back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key;
	if (!empty($back))
		$this->context->smarty->assign('back', Tools::safeOutput($back));

	if (Tools::getValue('display_guest_checkout'))
	{
		if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES'))
			$countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
		else
			$countries = Country::getCountries($this->context->language->id, true);

		$this->context->smarty->assign(array(
				'inOrderProcess' => true,
				'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'),
				'PS_REGISTRATION_PROCESS_TYPE' => Configuration::get('PS_REGISTRATION_PROCESS_TYPE'),
				'sl_country' => (int)Tools::getValue('id_country', Configuration::get('PS_COUNTRY_DEFAULT')),
				'countries' => $countries
			));
	}

	if (Tools::getValue('create_account'))
		$this->context->smarty->assign('email_create', 1);

	if (Tools::getValue('multi-shipping') == 1)
		$this->context->smarty->assign('multi_shipping', true);
	else
		$this->context->smarty->assign('multi_shipping', false);

	$this->assignAddressFormat();

	// Call a hook to display more information on form
	$this->context->smarty->assign(array(
			'HOOK_CREATE_ACCOUNT_FORM' => Hook::exec('displayCustomerAccountForm'),
			'HOOK_CREATE_ACCOUNT_TOP' => Hook::exec('displayCustomerAccountFormTop')
		));

	if ($this->ajax)
	{
		// Call a hook to display more information on form
		$this->context->smarty->assign(array(
				'PS_REGISTRATION_PROCESS_TYPE' => Configuration::get('PS_REGISTRATION_PROCESS_TYPE'),
				'genders' => Gender::getGenders()
			));

		$return = array(
			'hasError' => !empty($this->errors),
			'errors' => $this->errors,
			'page' => $this->context->smarty->fetch(_PS_THEME_DIR_.'authentication.tpl'),
			'token' => Tools::getToken(false)
		);
		die(Tools::jsonEncode($return));
	}
	$this->context->smarty->assign("iva_intracomunitarios", Tools::iva_intracomunitario());
	//
	$this->setTemplate(_PS_THEME_DIR_.'authentication.tpl');
}

 

5.- He modificado themes/default/authentication.tpl para que lea todos los nuevos registros de la tabla iva_intracomunitario y valide si el valor introducido es correcto o no. Se adjunta el tpl.

 

6.- He modificado themes/default/address.tpl para que lea todos los nuevos registros de la tabla iva_intracomunitario y valide si el valor introducido es correcto o no. Se adjunta tpl

 

7.-Ahora en el directorio raiz creamos un archivo php (comprueba_vat.php) que valida que el VAT esté correcto:

 

<?
function vat_correcto_sn($url) {
if ((@$f = fopen($url, 'r')) != false) {
	fclose($f);
	$res = join(file($url));
			$v_aux = strpos($res, "true");
			if (!empty($v_aux))
				echo 'S';
			else
				echo 'N';
}
}

$v_vat = "http://vatid.eu/check/".$_GET["pais_vat"]."/".$_GET["iva_vat"]."";
vat_correcto_sn($v_vat);
?>

 

Y listo. Con esto teneis un módulo donde podeis introducir los valores de los estados que permiten iva intracomunitario y lo valída en el momento.

 

 

Nota: Puede que las modificaciones sobre Authentication no sirvan para mucho, yo he buscado todas las referencias de IVA y allí donde aparecía he realizado las modificaciones

 

Os pongo un enlace al módulo alojado en mi web ya que no me da la opción de poner un archivo adjunto, no se porque.

 

Para que funcione el módulo hay que seguir los siguientes pasos:

 

1.- Descargar y descomprimir el archivo de: http://www.reunga.com/modulo_estados_vat.rar

2.- Abrir la carpeta estadosvat y lanzar el archivo script.txt en la base de datos

2.- La carpeta estadosvat moverla dentro de módulos e instalar.

3.- Añadir los estados y los códigos que se necesiten.

4.- Mover el archivo comprueba_vat.php al directorio raiz de la web.

5.- Abrir las carpetas restantes e ir poniendo su contenido en la carpeta correspondiente de la web.

 

Nota: Está realizado sobre la versión 1.5.2.0 y no se (ni tengo intención de saberlo) si funciona sobre ninguna otra

 

Espero que le sirva a alguien

Edited by Agusjar (see edit history)
  • Like 1
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...