Jump to content

Problema con DNI en registro cliente


PrestashopTrackglobe

Recommended Posts

Hola a todos:

 

Despues de mucho tiempo en modo real con la tienda me he dado cuenta de que hay un error algo "grave", y es que si algun cliente se registra desde aqui:

 

http://www.eluniversodelperro.com/autenticacion

 

al introducir todos los datos (DNI incluido) se puede ver que nos devuelve este error:

 

Fatal error (Address -> dni is empty)

 

No obstante, aunque aparece este error el cliente se registra perfectamente.

 

No se cual puede ser el problema, cache lo tengo activado.

 

¿Alguna idea?

 

Muchas gracias.

Link to comment
Share on other sites

  • 3 weeks later...

Hola Victor.

 

A mi también me pasaba lo mismo con la versión 1.3.2.3. Al final conseguí poner el dni obligatorio y solucionar problemas de funcionamiento de la tienda realizando las siguientes modificaciones:

 

Dentro del tema que estés usando

 

authentication.tpl

 

Al comienzo asegúrate de que aparece lo siguiente:

 

valueDni = {if isset($smarty.post.dni) && $smarty.post.dni}{$smarty.post.dni}{else}false{/if};

 

Al final del fichero asegúrate de incluir lo siguiente:

 

    <fieldset class="account_creation dni">
       <h3>{l s='Tax identification'}</h3>

       <p class="required text">
           <label for="dni">{l s='Identication number'}</label>
           <input type="text" class="text" name="dni" id="dni" value="{if isset($smarty.post.dni)}{$smarty.post.dni}{/if}" />
           <sup>*</sup>
           <span class="form_info">{l s='DNI / NIF / NIE'}</span>
       </p>
   </fieldset>

 

adress.tpl

 

Incluye el siguiente código dentro del fieldset en la posición que quieras:

 


  	 <p class="required text">
           <label for="dni">{l s='Identication number'}</label>
           <input type="text" class="text" name="dni" id="dni" value="{if isset($smarty.post.dni)}{$smarty.post.dni}{else}{$address->dni|escape:'htmlall':'UTF-8'}{/if}" />
           <sup>*</sup>
           <span class="form_info">{l s='DNI / NIF / NIE'}</span>
       </p>

 

 

addresses.tpl (opcional)

 

Si quieres mostrar el DNI/CIF en la lista de direcciones del cliente, incluye esta línea a continuación de por ejemplo

<li class="address_name">{$address.firstname} {$address.lastname}</li>:

 

 <li class="address_name">{$address.firstname} {$address.lastname}</li>
 {if $address.dni}<li class="address_name">{$address.dni}</li>{/if}

 

Dentro del directorio "classes"

 

Address.php

 

Tras la línea 60 incluir:

 

/** @var string DNI */
   public         $dni;

 

A partir de la línea 83 sustituye las variables $fieldsRequired, $fieldsSize y $fieldsValidate por las siguientes:

 

   protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city','dni');
   protected    $fieldsSize = array('alias' => 32, 'company' => 32, 'lastname' => 32, 'firstname' => 32,
                                   'address1' => 128, 'address2' => 128, 'postcode' => 12, 'city' => 64,
                                   'other' => 300, 'phone' => 16, 'phone_mobile' => 16, 'dni' => 16);
   protected    $fieldsValidate = array('id_customer' => 'isNullOrUnsignedId', 'id_manufacturer' => 'isNullOrUnsignedId',
                                       'id_supplier' => 'isNullOrUnsignedId', 'id_country' => 'isUnsignedId', 'id_state' => 'isNullOrUnsignedId',
                                       'alias' => 'isGenericName', 'company' => 'isGenericName', 'lastname' => 'isName',
                                       'firstname' => 'isName', 'address1' => 'isAddress', 'address2' => 'isAddress',
                                       'postcode' => 'isPostCode', 'city' => 'isCityName', 'other' => 'isMessage',
                                       'phone' => 'isPhoneNumber', 'phone_mobile' => 'isPhoneNumber', 'dni' => 'isDni', 'deleted' => 'isBool');

Tras la línea 151 incluye el siguiente código:

 

$fields['dni'] = pSQL($this->dni);

 

Customer.php

 

Asegúrate de que está declarada la variable:

 

/** @var string dni */
   public        $dni;

 

Cambia esta línea

 

protected     $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email');

 

por esta otra

 

protected     $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email', 'dni');

 

 

En la base de datos

 

tabla ps_address

 

Añade un nuevo campo llamado dni tipo varchar(16) que permita valores nulos y cuyo valor predeterminado sea NULL.

 

A continuación ejecuta la siguiente consulta:

 

UPDATE ps_address SET dni='-' WHERE dni IS NULL;

 

Listo. Con esto tendrás el CIF/DNI obligatorio y los clientes podrán darse de alta especificando una o varias direcciones y realizar pedidos sin ningún problema.

 

Suerte ;-)

Link to comment
Share on other sites

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