Jump to content

codice fiscale obbligatorio solo per l'italia


gioreva

Recommended Posts

Buongiorno, a questo link leggo che dalla versione 1.7.3 il problema sarebbe risolto, ma io ho la versione 1.7.6.5 e se non sbaglio a fare qualcosa, non funziona.

https://brescia-web.it/e-commerce/prestashop-1-7-come-rendere-obbligatorio-il-codice-fiscale-solo-per-litalia/


Mi serve che in Italia, si metta o la partita IVA o il Codice Fiscale.

In Internazionale, Località c'è il campo vat_number e dni sia italia che estero.
Adesso non trovo più dove è impostato, ma appare solo se in italia.

Se in clienti, indirizzi, campi obbligatori, metto "dni", mi blocca gli ordini dall'estero, anche se il campo dni non appare.
Gli dice che l'indirizzo è incompleto.

Link to comment
Share on other sites

Ciao,

avevo dato soluzione quá...ancora non ho provato sulla 1.7.6 perché non ho casi in cui si richiede obbligatorio...anzi meno cose chiedete obbligatorie e meglio é!!! In Italia invece di semplificare si complica sempre ( perché poi come fate a sapere se il cf inserito é corretto?...come lo verificate??..argh)...cmq fate quello che ho scritto quá dentro in :

 

 

Link to comment
Share on other sites

Il problema è che gli artigiani non emettono scontrino.
Possiamo solo fare fattura con partita iva oppure su codice fiscale.
Così adesso devo richiamare tutti i clienti privati per farmelo dare.

Link to comment
Share on other sites

Si certo capisco,

cmq ha provato la modifica di cui sopra correttamente? Non funziona sulla 1.7.6.x?? Sicuro di avere cancellato le cache delle classi che si trova nella VAR/cache/prod....puó cancellare la cartella prod...se non cancella le cache la modifica non la prende..inoltre dovrebbe applicare la modifica con Override altrimenti al primo agg. perde tutto!.

 

 

Link to comment
Share on other sites

Lo sto facendo, ma non so programmare in php

Devo lasciare qualche inizializer nel nuovo file ?

 

<?php

use Symfony\Component\Translation\TranslatorInterface;

class CustomerAddressFormatterCore implements FormFormatterInterface
{

 

O inzia direttamente così?

 getFormat(

Link to comment
Share on other sites

No l'ovverride di una classe si fá cosí te lo faccio al volo giá pronto da incollare nel nuovo file che avrá lo stesso nome CustomerAddressFormatter.php e che caricherai in /override/classes/form...segue codice!:

Attenzione io non l'ho provato sulla 1.7.6..per cui non garantisco che funzioni!!..te l'ho fatto ora senza test.

 

 

<?php

/*
    * override per rendere il codice fiscale obbligatorio
    * by Fabry 08/05/2020
    */
use Symfony\Component\Translation\TranslatorInterface;
class CustomerAddressFormatter extends CustomerAddressFormatterCore
{

    public function getFormat()
    {
        $fields = AddressFormat::getOrderedAddressFields(
            $this->country->id,
            true,
            true
        );
        $required = array_flip(AddressFormat::getFieldsRequired());

        $format = [
            'back' => (new FormField())
                ->setName('back')
                ->setType('hidden'),
            'token' => (new FormField())
                ->setName('token')
                ->setType('hidden'),
            'alias' => (new FormField())
                ->setName('alias')
                ->setLabel(
                    $this->getFieldLabel('alias')
                ),
        ];

        foreach ($fields as $field) {
            $formField = new FormField();
            $formField->setName($field);

            $fieldParts = explode(':', $field, 2);

           if ($field === 'dni') { 
                if ($this-> country-> need_identification_number) {
                    $formField-> setRequired (true); 
                }
            } 

            if (count($fieldParts) === 1) {
                if ($field === 'postcode') {
                    if ($this->country->need_zip_code) {
                        $formField->setRequired(true);
                    }
                } elseif ($field === 'phone') {
                    $formField->setType('tel');
                } elseif ($field === 'dni' && null !== $this->country) {
                    if ($this->country->need_identification_number) {
                        $formField->setRequired(true);
                    }
                }
            } elseif (count($fieldParts) === 2) {
                list($entity, $entityField) = $fieldParts;

                // Fields specified using the Entity:field
                // notation are actually references to other
                // entities, so they should be displayed as a select
                $formField->setType('select');

                // Also, what we really want is the id of the linked entity
                $formField->setName('id_' . strtolower($entity));

                if ($entity === 'Country') {
                    $formField->setType('countrySelect');
                    $formField->setValue($this->country->id);
                    foreach ($this->availableCountries as $country) {
                        $formField->addAvailableValue(
                            $country['id_country'],
                            $country[$entityField]
                        );
                    }
                } elseif ($entity === 'State') {
                    if ($this->country->contains_states) {
                        $states = State::getStatesByIdCountry($this->country->id, true);
                        foreach ($states as $state) {
                            $formField->addAvailableValue(
                                $state['id_state'],
                                $state[$entityField]
                            );
                        }
                        $formField->setRequired(true);
                    }
                }
            }

            $formField->setLabel($this->getFieldLabel($field));
            if (!$formField->isRequired()) {
                // Only trust the $required array for fields
                // that are not marked as required.
                // $required doesn't have all the info, and fields
                // may be required for other reasons than what
                // AddressFormat::getFieldsRequired() says.
                $formField->setRequired(
                    array_key_exists($field, $required)
                );
            }

            $format[$formField->getName()] = $formField;
        }

        //To add the extra fields in address form
        $additionalAddressFormFields = Hook::exec('additionalCustomerAddressFields', array(), null, true);
        if (is_array($additionalAddressFormFields)) {
            foreach ($additionalAddressFormFields as $moduleName => $additionnalFormFields) {
                if (!is_array($additionnalFormFields)) {
                    continue;
                }

                foreach ($additionnalFormFields as $formField) {
                    $formField->moduleName = $moduleName;
                    $format[$moduleName . '_' . $formField->getName()] = $formField;
                }
            }
        }

        return $this->addConstraints(
                $this->addMaxLength(
                    $format
                )
        );
    }

}

  

 

 

Edited by Fabry
mancava una parte! (see edit history)
Link to comment
Share on other sites

Hey...allora? Funziona o no?..ok ti rispondo io: funziona anche sulla 1.7.6.4 ovviamente.

Sono all'estero e una volta creato un account quando vado a creare l'indirizzo se inserisco Portugal....ovviamente non chiede il CF...se inserisco Italia esce il CF obbligatorio infatti se tento di inviare i dati mi dice che va compilato:-)..non si passa senza inserire il CF!!

 

 

ciao

Link to comment
Share on other sites

Ciao Fabry, grazie.

No, non funziona.

shop.gevaelettronica.it

Ho messo il file CustomerAddressFormatter.php

Con solo il tuo contenuto, creato sotto Windows.

in Override/Classes/Form

E pulita la cache, ma quando faccio edit dell'indirizzo appare una pagina con errore.

La pagina non funziona

shop.gevaelettronica.it al momento non è in grado di gestire la richiesta.

HTTP ERROR 500

 

Edited by gioreva (see edit history)
Link to comment
Share on other sites

Ciao,

 

sei sicuro che non hai messo obbligatorio il campo in Clienti>Indirizzi...poi in fondo pagina dove dice "Impostare i campi obbligatori.."....lí non devi spuntare il dni altrimenti lo mette obbligatorio su tutti i paesi!!...mentre invece lo aggiungi solo allo stato Italia e nel formato indirizzo aggiungi il dni...ecco lí ovviamente ci va inserito

 

fammi sapere

 

Link to comment
Share on other sites

dal backoffice, 
Se metto solo il codice fiscale o la partita iva va.
Se non metto nessuno dei due mi dice:
"Il numero di codice fiscale non è corretto o è già stato utilizzato."

 

Ho dimenticato di dirti che ho un modulo acquistato che mi controlla la validità della partita iva, se è valida.
La verifica sul sito VIES

 

European VAT number
v1.3.11 di MassonVincent
Clean all VAT number

Per il momento rimuovo il tuo file perchè mi blocca il sito.

Link to comment
Share on other sites

ma nell'address devi avere sia vat number che dni ovviamente in tutti i paesi in cui che vengano fuori.

Ci sarebbe da vedere se quel modulo fá un'override della stessa funzione...e se lo fá allora non possono coesistere i due ovveride.

e se disattivi il modulo che succede? hai provato

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...