Prestashop 1.6: El número de identificación es incorrecto o ya ha sido utilizado en cuentas para invitado

En algunas versiones de Prestashop 1.6 cuando un usuario intenta realizar un pedido como invitado, aunque meta su DNI, le aparece este mensaje "El número de identificación es incorrecto o ya ha sido utilizado". En este post os explicamos cómo soluconarlo en vuestra tienda online.


¿Cuándo podéis tener este problema? 

Cuando queréis que se pida el DNI de forma obligatoria y queréis que se puedan realizar pedidos como invitado. Por tanto:

- En Localización > Países, en la configuración de vuestro país "¿Necesita el número de identificación fiscal?" a SÍ, haciendo que se solicite el DNI de forma obligatoria.
- Tenéis activado en Preferencias > Pedidos "Activar el pedido express para cuentas de invitado" a SÍ.

¿Dónde está el problema?
Generalmente, cuando un usuario se registra e introduce su DNI no aparece ningún error, pero cuando pretende hacer el pedido como invitado, aunque introduzca un DNI y correcto, se muestra este error:
El número de identificación es incorrecto o ya ha sido utilizado

¿Cómo solucionarlo?
1.- Vamos a la carpeta "controllers" y copiamos el archivo AuthController.php
2.- Pegamos el archivo en la carpeta "override/controllers"
3.- Editamos el archivo en esta última carpeta

Buscamos la línea

if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))

y la sustituimos por esta otra:


//if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))
if (!Validate::isDniLite(Tools::getValue('dni')))


4.- Como queremos que el DNI sea obligatorio, nos aseguraremos de que están bien configurados estos parámetros:
   a) En Clientes > Direcciones, hay un botón, al final de la sección, en el que pone "Establezca los campos obligatorios para esta sección". Haremos clic y seleccionaremos el campo "dni". Guardaremos cambios.
  b) En Localización > Países, nos iremos al país que estemos configurando y en "Formato de dirección" nos aseguraremos de que, en la caja de texto, esté el campo dni. Si no es así, lo incluiremos.



5.- Iremos a Parámetros avanzados > Rendimiento y en "Caché de plantillas" pondremos "Forzar compilación". Guardaremos cambios.
Después, haremos clic sobre el botón "Vaciar el caché" de la esquina superior derecha de esa misma sección.

6.- Una vez hecho esto, podemos volver a poner el valor de Caché de plantillas que tuviésemos puesto antes (generalmente "Recompilar las plantillas cuando los archivos sean modificados").


Y esto es todo, vuestro problema debería estar solucionado. Si no es así, dependiendo de la versión de Prestashop, puede que tengáis que hacer otro cambio en vuestra plantilla:

1.- Tendréis que hacer una copia de este archivo
 templates/nombre_de_vuestra_plantilla/authentication.tpl
por si algo va mal, poder restaurarlo.
2.- Editar ese archivo (el original)
buscaremos estas líneas
<div class="required form-group dni_invoice">
  <label for="dni">{l s='Identification number'} <sup>*</sup></label>
  <input type="text" class="text form-control" name="dni_invoice" id="dni_invoice" value="{if isset($guestInformations) && $guestInformations.dni_invoice}{$guestInformations.dni_invoice}{/if}" />
  <span class="form_info">{l s='DNI / NIF / NIE'}</span>
 </div>

y las sustituiremos por estas otras:
<div class="required dni form-group">
  <label for="dni">{l s='Identification number'} <sup>*</sup></label>
  <input type="text" class="text form-control" name="dni" id="dni" value="{if isset($smarty.post.dni)}{$smarty.post.dni}{/if}" />
  <span class="form_info">{l s='DNI / NIF / NIE'}</span>
 </div>

2.- Hayamos encontrado o no esas líneas en nuestro archivo, sustituiremos todas las apariciones de "dni_invoice" por "dni".