gioreva Posted May 8, 2020 Share Posted May 8, 2020 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 More sharing options...
Fabry Posted May 8, 2020 Share Posted May 8, 2020 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 More sharing options...
gioreva Posted May 8, 2020 Author Share Posted May 8, 2020 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 More sharing options...
Fabry Posted May 8, 2020 Share Posted May 8, 2020 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 More sharing options...
gioreva Posted May 8, 2020 Author Share Posted May 8, 2020 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 More sharing options...
Fabry Posted May 8, 2020 Share Posted May 8, 2020 (edited) 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 May 8, 2020 by Fabry mancava una parte! (see edit history) Link to comment Share on other sites More sharing options...
Fabry Posted May 8, 2020 Share Posted May 8, 2020 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 More sharing options...
gioreva Posted May 9, 2020 Author Share Posted May 9, 2020 (edited) 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 May 9, 2020 by gioreva (see edit history) Link to comment Share on other sites More sharing options...
gioreva Posted May 9, 2020 Author Share Posted May 9, 2020 Questo file CustomerAddressFormatter.php Link to comment Share on other sites More sharing options...
Fabry Posted May 9, 2020 Share Posted May 9, 2020 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 More sharing options...
gioreva Posted May 9, 2020 Author Share Posted May 9, 2020 Non c'è nulla di selezionato li. Ma poi sembra un errore di codice, non di funzioni. Link to comment Share on other sites More sharing options...
gioreva Posted May 9, 2020 Author Share Posted May 9, 2020 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 More sharing options...
Fabry Posted May 9, 2020 Share Posted May 9, 2020 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 More sharing options...
gioreva Posted May 9, 2020 Author Share Posted May 9, 2020 Si, in italia appare il codice fiscale, negli altri stati no. Ma la chache la posso pulire dal backoffice in performance ? Sto provando senza modulo acquistato. Link to comment Share on other sites More sharing options...
gioreva Posted May 9, 2020 Author Share Posted May 9, 2020 Modulo disabilitato e chache pulita da backoffice, stesso errore. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now