Passa ai contenuti principali

Controllo età anagrafica su Prestashop

Per alcune tipologie di prodotto la legge italiana e non solo richiedono il controllo dell'età anagrafica, il quanto il prodotto non è vendibile ai minori di diciotto anni.
Quindi come fare su prestashop?


Codice fiscale ed età anagrafica

Ci sono due modi per conoscere l'età anagrafica di una persona: controllarla in base alla data di nascita o in base al codice fiscale.
Meglio è l'incrocio di entrambe le informazioni: il codice fiscale deve corrispondere ai dati inseriti così si sarà sicuri che la data di nascita è corretta e quindi si potrà eseguire il controllo dell'età anagrafica.

Solo nuovi iscritti

Il controllo sarà valido solo per i nuovi iscritti in quanto Prestashop controllerebbe i dati anche dei già iscritti che se incompleti o incorretti darebbe errore.

Controllo codice fiscale

Per il controllo del codice fiscale è validissima questa libreria http://www.html.it/script/convalida-campo-iva-e-codice-fiscale/.

Override 

Class ValidateCore

Per effettuare il controllo è necessario effettuare un primo override della classe ValidateCore aggiungendo un nuovo  metodo checkCodiceFiscale($dni, $date) dove $dni corrisponde al codice fiscale e $date alla data di nascita.
All'interno si deve:
  1. che il codice fiscale sia valido
  2. recuperare i dati del codice fiscale: la data di nascita
  3. controllare che la data di nascita sia identica a quella del codice fiscale
  4. controllare che la differenza fra la data di nascita e oggi sia maggiore uguale a 18 anni 
$fc_ckeck = new ChkFiscalCode_it(strtoupper($dni), 'CF');
/** controllo codice fiscale **/
if( !$fc_ckeck->check() ) return 1;
/** recupero data di nascita codice fiscale **/
$cf_esploso = $fc_ckeck->explode();
$birthday_cf = new DateTime(sprintf('%s-%s-%s', $cf_esploso['year'], $cf_esploso['month'][0], $cf_esploso['day']));
/** controllo uguaglianza date di nascita **/
if($birthday_cf->format('Ymd') !== $birthday->format('Ymd')){ return 2; }
/** calcolo 18 anni **/
$now = new DateTime();
$interval = $now->diff($birthday, $absolute);
if($interval->y < 18) return 3;

I controlli restituiscono 3 codici 1, 2 e 3 che corrispondono a:

  1.  errore di consistenza del codice fiscale
  2. data di nascita non corrispondente a codice fiscale
  3. la differenza fra data odierna e data di nascita è minore di 18 anni

Class AddressControllerCore

La classe richiama il metodo preProcess() per i controlli dai dati indirizzo (anagrafici) del cliente.
Ecco l'override del metodo:
class AddressController extends AddressControllerCore {
    public function preProcess() {
   
       //.... controlli iniziali di esistenza codice fiscale e data di nascita
     
      $r = Validate::checkCodiceFiscale(Tools::getValue('dni'), Tools::getValue('birthday'));
      //.... controllo del risultato $r
      //... invio errore
      //... richiamo dei controlli del core se è tutto ok
       parent::preProcess();
   }
}

Altre info

La seguente soluzione custom, che non è possibile implementare con un modulo in quanto andrebbe a cancellare precedenti override già presenti, permette di effettuare un controllo completo dell'età anagrafica e di mantenere la compatibilità del sistema con eventuali aggiornamenti.
Se avete necessità di maggiori informazioni scriveteci a info@bwlab.it.

Commenti

  1. C'è un'aggiunta da fare:
    il controllo del codice fiscale va replicato nell'override della classe AuthControllerCore

    RispondiElimina
  2. salve,

    è possibile utilizzare questo script anche su opencart?

    se si come?

    RispondiElimina
  3. salve... il check codice fiscale si.
    non ho mai utilizzato open cart però i sistemi si equivalgono.
    Su opencart in fase di login devi avere codice fiscale e data di nascita inseribili dall'utente. l'utente invia i dati. open cart da qualche parte controlla. in quel punto prendi data di nascita e codice fiscale. controlla che la data di nascita sia riempita. controlla che il codice fiscale sia valido (tramite lo script http://www.html.it/script/convalida-campo-iva-e-codice-fiscale/ esplodi il codice fiscale e controlla che la data di nascita esista). fai la differenza far le due date. controlla che l'acquirente abbia più di 18 anni.
    Per una consulenza contattami direttamente: lmassa@bwlab.it
    Saluti

    RispondiElimina

Posta un commento

Post popolari in questo blog

install language on osTicket

this simple guide aims you to install and configure your language on osTicket i written this guide based on forum post http://osticket.com/forum/discussion/76252/installing-language-pack

Develop Prestashop Module - puntata 1 creazione di un modulo prestashop

la creazione o lo sviluppo di un modulo   Prestashop funziona sia per il front-end che il back-end del sistema la struttura di un modulo è fissa che si compone con una serie di step: file di configurazione file di installazione files controllers per l'amministrazione files controllers per il frontend files delle view creazione dell'infrastruttura base del modulo per Frontend all'interno della cartella modules di prestashop creare una cartella  esempio     <root>          |---modules                    |-----miomodulo naturalmente il nome del modulo lo potete personalizzare all'interno della cartella miomodulo  creare i seguenti file config.xml index.php miomodulo .php   <-- inserite il vostro nome modulo al posto di mio modulo index.php il codice di index php , file che dovrà essere inserito in ogni cartella : <?php /* ...

Prestashop: override PayPal about.tpl

Abbiamo incontrato una difficoltà nell'override del template "about.tpl" di PayPal su Prestashop. Abbiamo cercato sul forge di Prestashop e abbiamo trovato questo bug . Ora il consiglio che viene dato è quello di utilizzare il "core display method". Così dopo un po' di debug l'abbiamo fatto. Per abilitare all'override l'"about.tpl" di Prestashop è necessario modificare il file "modules/paypal/backaward_compatibility/Display.php": <?php /**  * Class allow to display tpl on the FO  */ class BWDisplay extends FrontController { // Assign template, on 1.4 create it else assign for 1.5 public function setTemplate($template) { if (_PS_VERSION_ >= '1.5') parent::setTemplate($template); else $this->template = $template; } // Overload displayContent for 1.4 public function displayContent() { parent::displayContent();                 echo Module::display('paypal', ...