Jump to content

Rendere campo P. Iva obbligatoria se compilato campo Azienda


dettotranoi

Recommended Posts

Approfitto del post, per chiedere aiuto ai piu' esperti di PS.

Sto proprio cercando di fare questa modifica, anche manualmente senza un modulo, non mi importa.

Al momento ho aggiunto una checkbox di selezione privato/azienda, in base alla quale viene modificato il form nascondendo o mostrando i campi azienda, partita iva e cf, e cambiando anche ovviamente il fatto che siano richiesti o meno.

Dove mi blocco e' nelle regole interne delle classi customer e address, che sono impostate ovviamente ai campi del form di default, ad esempio:

protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city');



Come si potrebbe procedere a rendere dinamici questi array dal controller authentication.php?
Se solo disarci o altri [spam-filter] suoi compari :-) potessero darmi la direzione almeno....

Link to comment
Share on other sites

  • 2 weeks later...
La prima cosa che mi è venuta in mente è impostare un campo del form come hidden, recuperarne il valore ed utilizzarlo per determinare gli array attraverso gli if.

Non è proprio il massimo, però forse è la cosa più semplice.


Ciao Pepozzo, si avevo pensato anche io una cosa del genere, il problema e' che questi array sono impostati come variabili protected all'interno della classe customer (e anche classe address), e non so se e' possibile cambiarli attraverso il file authentication.php, e se e' possibile come.
Link to comment
Share on other sites

Purtroppo non ti parlo per esperienza (quindi potrei cadere in errore), però ragioniamo :D

Nella mia idea l'if utilizzato andrebbe a creare una "nuova" variabile $fieldsRequired a seconda del valore del campo hidden.
Se tu imposti (esempio infimo):

if
protected $variabile
elseif
protected $variabile2
chiuso if



Alla fine la variabile rimarrebbe protected e quindi disponibile solamente per la classe e nella $variabile2 potresti aggiungere dei campi richiesti.

Link to comment
Share on other sites

Purtroppo non ti parlo per esperienza (quindi potrei cadere in errore), però ragioniamo :D

Nella mia idea l'if utilizzato andrebbe a creare una "nuova" variabile $fieldsRequired a seconda del valore del campo hidden.
Se tu imposti (esempio infimo):
if
protected $variabile
elseif
protected $variabile2
chiuso if



Alla fine la variabile rimarrebbe protected e quindi disponibile solamente per la classe e nella $variabile2 potresti aggiungere dei campi richiesti.



Si corretto, la mia difficolta' e' pero' passare alle due classi che dicevo questo campo extra dal controller authentication.php.
Link to comment
Share on other sites

  • 2 weeks later...
Ciao a tutti,
sarebbe molto utile fare in modo che, nella registrazione dell'utente, se si compila il campo Azienda, automaticamente diventasse obbligatorio il campo P. IVA.

Avete idea di come si può fare?

Grazie mille!


La cosa migliore sarebbe di poter scegliere tra Privato, Lavotatore autonomo (o libero professionista) e Azienda.
Impostando la partita IVA obbligatoria per lavoratore autonomo ed azienda.
Penso sia molto utile per gestire i campi partita IVA e C.F.

Avete nuove idee?
Link to comment
Share on other sites

  • 2 years later...

So che è un post vecchio, ma sempre utile magari dare una risposta in più.

Anche io come tanti ho affrontato questo problema e la mia soluzione è stata:

 

PASSAGGIO 1

 

Nel mio template authentication.tpl ho modificato la funzione javascript vat_number()

 


function vat_number()
{
   if ($('#company').val() != '')
   {
       $('#vat_number').show();
       $('#vat_number p').attr('class','required text');
       if($('#vat_number p sup').length==0)
       $('#vat_number p').append('<sup>*</sup>');
   }
   else
   {
   $('#vat_number input').val('');
   $('#vat_number').hide();
   $('#vat_number p').attr('class','text');
   $('#vat_number p sup').remove(); }
   }
}

 

PASSAGGIO 2

 

Nel mio controller AuthController.php nel metodo processSubmitAccount() a riga 447

nell'else ho inserito

 


else // if registration type is in one step, we save the address
{

//**************************************************************************************************************
// Rende obbligatorio inserimento della PARTITA IVA se è compilato il campo AZIENDA
// VALIDO SOLO IN FASE DI REGISTRAZIONE "CON INDIRIZZO"
//**************************************************************************************************************
if(isset($_POST['company']) && $_POST['company']!='')
{
   if((isset($_POST['vat_number']) && $_POST['vat_number']=='') || !isset($_POST['vat_number']))
   $this->errors[] = Tools::displayError('Se inserisci l\'azienda, la Partita IVA è obbligatoria');
}

....

 

Spero sia utile a qualcuno.

Purtroppo modificare un controller così in modo crudo non è bello, ma purtroppo l'override sembra non funzionare per niente nella versione 1.5.2, ho postato a riguardo ma ancora non ho ricevuto risposta.

Consiglio vivamente di segnarvi a parte qualsiasi modifica facciate alle classi e controller, altrimenti vi giocate la possibilità di fare gli aggiornamenti.

 

ATTENZIONE: VERSIONE 1.5.2 di Prestashop

Edited by bluego78 (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 2 months later...
  • 3 weeks later...

Nel mio template authentication.tpl ho modificato la funzione javascript vat_number()

 


function vat_number()
{
if ($('#company').val() != '')
{
	$('#vat_number').show();
	$('#vat_number p').attr('class','required text');
	if($('#vat_number p sup').length==0)
	$('#vat_number p').append('<sup>*</sup>');
}
else
{
$('#vat_number input').val('');
$('#vat_number').hide();
$('#vat_number p').attr('class','text');
$('#vat_number p sup').remove(); }
}
}

 

 

 

Ciao a tutti, e ringrazio bluego78 per la soluzione... Mi sono accorto di un piccolo errore nel tuo script che se copiato così come è non funziona sicuramente... In pratica c'è una parentesi graffa in più da rimuovere alla fine dell'else...

Ecco la funzione corretta:


function vat_number()
{
if ($('#company').val() != '')
{
	$('#vat_number').show();
	$('#vat_number p').attr('class','required text');
	if($('#vat_number p sup').length==0)
	$('#vat_number p').append('<sup>*</sup>');
}
else
{
$('#vat_number input').val('');
$('#vat_number').hide();
$('#vat_number p').attr('class','text');
$('#vat_number p sup').remove();
}
}

 

 

Ora anche chi "mastica" poco di codice, può apportare tale modifica con successo. Io l'ho testata sulla versione 1.5.3.1 con successo. Grazie ancora!

Edited by l.zuccarini (see edit history)
  • Like 1
Link to comment
Share on other sites

Ciao Zuccarini grazie, si mi ero accorto dell'errore ma non avevo più modificato il post, per fortuna l'hai fatto tu, grazie.

Tra l'altro alla fine, con una nuova installazione di PS 1.5.2 sono riuscito a far funzionare l'override così la modifica l'ho apportata nel controller in override.

Mi fa piacere che sia servito il mio aiuto.

Bye!

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Salve a tutti, una domanda.

Se volessi fare la stessa modifica nella pagina degli indirizzi sapreste come fare?

In pratica vorrei attivare la stessa funzionalità quando un utente aggiunge un nuovo indirizzo di spedizione/fatturazione (i miei indirizzi).

 

Grazie in anticipo e buona giornata.

Link to comment
Share on other sites

  • 3 weeks later...

Io ho un altro problema non ho attivo il b2b ho la versione 1520 quando un cliente si registra nel form alla fine della registrazione compare l'errore che manca la partita iva ma non appare il campo per inserirla, ho risolto con il modulo partita iva europea installato ed il cliente digita sia sul codice fiscale che sulla partita iva gli stessi dati e funziona ma non mi pare corretto

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

  • 1 month later...

Ciao a tutti, mi permetto di fare un piccolo aggiornamento allo script fornito. Corretto per il modulo di login della versione 1.5.4.1

 

Nel mio template authentication.tpl ho modificato la funzione javascript vat_number()

 

function vat_number()
{
 if ($('#company').val() != '')
 {
  $('#vat_number').show();
  $('#vat_number p').addClass('required');
  if($('#vat_number label sup').length==0)
$('#vat_number label').append('<sup>*</sup>');
 }
 else
 {
  $('#vat_number input').val('');
  $('#vat_number').hide();
  $('#vat_number p').removeClass('required');
  $('#vat_number label sup').remove();
 }
}

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

ciao.

dove va questa correzione, e cosa fa?

 

Ho aggiornato il post in modo da indicarti in che file va la correzione. Ho usato il template base di prestashop 1.5.4.1.

 

Non fa niente di diverso da prima solo che imposta correttamente il campo IVA come obbligatorio anche per le nuove versioni.

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

Ciao Wiploo, ho provato a fare la modifica da te descritta, ma a me sembra non funzionare.

sono andato negli indirizzi di una utenza già creata ed ho provato ad inserire un nuovo indirizzo, ma anche se lascio la p.iva vuota me lo fa creare (non appare neppure la * di obbligatorio).

Se invece non metto il CF, giustamente mi da errore.

Probabilmente sbaglio qualcosa io...

 

Qui il codice che ho modificato, prendendolo un po' prima e un po dopo per dirmi se ho dimenticato qualcosa.

 

{literal}

$(document).ready(function() {

$('#company').blur(function(){

vat_number();

});

vat_number();

function vat_number()

{

if ($('#company').val() != '')

{

$('#vat_number').show();

$('#vat_number').show();

$('#vat_number p').addClass('required');

if($('#vat_number label sup').length==0)

$('#vat_number label').append('<sup>*</sup>');

}

else

{

$('#vat_number input').val('');

$('#vat_number').hide();

$('#vat_number p').removeClass('required');

$('#vat_number label sup').remove();

}

}

});

{/literal}

</script>

Link to comment
Share on other sites

  • 1 month later...

Io ho risolto nella parte i miei indirizzi una volta effettuato l'accesso

 

1: aggiungere in AddressController.php dopo la condizione // Check country DNI in linea circa 158

 

 

/// CHECK piva HACK
if ( isset($address->company)&& $address->company !="")
{
if((isset($_POST['vat_number']) && $_POST['vat_number']=='') || !isset($_POST['vat_number']))
$this->errors[] = Tools::displayError('Partita iva Richiesta');
}

 

2: ripetere il passaggio 1 anche nel file AuthController.php in /controllers/front/AuthController.php

inserite il codice dopo la il controllo // US customer: normalize the address a riga circa 480

 

 

 

3: mettere il * rosso nel form editre il file address.tpl all'interno del vostro thema

 

<div id="vat_area">
  <div id="vat_number">
<p class="required text">
 <label for="vat_number">{l s='VAT number'} <sup>*</sup></label>
 <input type="text" class="text" name="vat_number" value="{if isset($smarty.post.vat_number)}{$smarty.post.vat_number}{else}{if isset($address->vat_number)}{$address->vat_number}{/if}{/if}" />
</p>
  </div>

 

4: stessa cosa in order-opc-new-account.tpl all'interno del vostro thema

 

<div id="vat_number_block" style="display:none;">

<p class="required text">

<label for="vat_number">{l s='VAT number'} <sup>*</sup></label>

<input type="text" class="text" name="vat_number" id="vat_number" value="{if isset($guestInformations) && $guestInformations.vat_number}{$guestInformations.vat_number}{/if}" />

</p>

</div>

 

<div id="vat_number_block_invoice" class="is_customer_param" style="display:none;">

<p class="required text">

<label for="vat_number_invoice">{l s='VAT number'} <sup>*</sup></label>

<input type="text" class="text" id="vat_number_invoice" name="vat_number_invoice" value="" />

</p>

</div>

 

 

testato su ps 1.5.4

ciao

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

  • 2 months later...

I could't find english version of this, anyway - I did these 4 steps and when I create an account and insert VAT and submit the form I get the error message: "Enter/Inser VAT"?  Could you point me to solution (english)?

 

Thanks, cheerz.

Link to comment
Share on other sites

  • 2 months later...

Io ho fatto in un altro modo, che mi sembra più semplice: ve lo propongo.

 

1) Ho attivato il codice fiscale obbligatorio e l'ho aggiunto in fattura come descritto qui.

2) Ho cambiato in /themes/my_theme/address.tpl questa porzione di codice aggiungendo il commento per fargli tenere il numero di partita iva sempre nascosto:

function vat_number()
{
	/*if ($('#company').val() != '')
		$('#vat_number').show();
	else*/
		$('#vat_number').hide();
}

3) Ho modificato nello stesso file la zona in cui compare il textbox del codice fiscale in modo da mostrare l'asterisco per indicare che è campo obbligatorio e ho cambiato la label indicando che si può inserire CF o P.IVA [Nota a fondo]. Ho nascosto inoltre quella scritta "DNI / NIF / NIE" perché non mi piaceva!

<p class="required text dni">
	<label for="dni">{l s='Identification number'} (o Partita IVA se Azienda)<sup>*</sup></label>
	<input type="text" class="text" name="dni" id="dni" value="{if isset($smarty.post.dni)}{$smarty.post.dni}{else}{if isset($address->dni)}{$address->dni}{/if}{/if}" />
	<!--<span class="form_info">{l s='DNI / NIF / NIE'}</span>-->
</p>

4) Ho eliminato dalla fattura la voce vat_number, con lo stesso procedimento fatto al punto 1 per aggiungere il CF.

 

In questo modo ho sempre uno dei due dati: che sia P.IVA o CF mi va bene comunque. Un'azienda inserirà la P.IVA, un privato inserirà il suo CF. 

 

Per aggiornare le fatture già emesse (fortunatamente poche finora!!!) ho mandato un'email alle persone necessarie, chiedendogli di collegarsi e aggiornare i propri indirizzi. Dopodiché andando sull'ordine, e modificando dal menu a tendina l'indirizzo (selezionando tuttavia lo stesso) si è aggiunto il CF (o P.IVA) così la fattura ora lo contiene. 

 

HTH

nimloth

 

[Nota]: In realtà sarebbe più corretto modificare la traduzione di quella specifica label dal BO, ma purtroppo non posso farlo perché ho il problema del  numero massimo di variabili non configurabile perché sono su un hosting base Aruba :(

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

  • 1 month later...

Qualcuno sa come fare l'override del file AddressController.php con la soluzione proposta da Spad?

In tal modo non ci sarebbero problemi futuri in caso di aggiornamenti.

 

Ho provato a copiare il file dalla cartella controllers/front alla cartella override/front e modificarlo come proposto da Spad, ma non funziona.

Funziona invece se modifico direttamente il file controllers/front/AddressController.php

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

  • 1 year later...

riprendo questa discussione, sono sull'ultima versione di prestashop, e servirebbe anche a me avere la partita iva solo se viene selezionata l'azienda. 

Ho controllato i file ma sono un po diversi, cosa devo cambiare ?

 

EDIT:

Con l'ultima versione è di default ;)

Edited by that's (see edit history)
Link to comment
Share on other sites

  • 2 months later...

riprendo questa discussione, sono sull'ultima versione di prestashop, e servirebbe anche a me avere la partita iva solo se viene selezionata l'azienda. 

Ho controllato i file ma sono un po diversi, cosa devo cambiare ?

 

EDIT:

Con l'ultima versione è di default ;)

Ciao That's, io sono alla versione 1.6.1.4 di PS, ma la P.IVA obbligatoria SOLO nel caso sia compilato il campo Azienda non è di default come dici tu.

Potresti darmi qualche indicazione in più?

 

ho la funzione b2b disattivata perchè a me interessa solo inserire la partita iva in caso di azienda, in tutti gli altri casi mi va bene così e non ho bisogno di altre funz. b2b.

 

Nel caso non sia di default, potremmo scrivere un post completo con le modifiche da apportare all'ultima versione?

 

scorrendo tutto il topic ho provato ad effettuare le modifiche proposte ma è tutto un pò confusionale visto che man mano che si scorre vengono proposte modifiche/correzzioni alle modifiche.

Link to comment
Share on other sites

Aggiornamento:

 

rimanendo solo sul problema di verificare l'esistenza della partita iva solo nel caso venga inserito il campo azienda

ho inserito il codice suggerito da Spad:

/// CHECK piva HACK
if ( isset($address->company)&& $address->company !="")
{
if((isset($_POST['vat_number']) && $_POST['vat_number']=='') || !isset($_POST['vat_number']))
$this->errors[] = Tools::displayError('Partita iva Richiesta');
}

nel file "/controllers/front/AddressController.php" alla riga 164, dopo il controllo "// Check country DNI"

e questo mi ha risolto il problema nel caso un utente già registrato voglia aggiungere un nuovo indirizzo come azienda.

 

Ora mi serve avere lo stesso risultato nel caso di una nuova registrazione ma non so con precisione dove inserire la modifica,

il file dovrebbe essere "/controllers/front/AddressController.php" e ho provato, sempre come suggerito da Spad, ad inserirlo alla riga 506,

all'interno della funzione processSubmitAccount(), precisamente dopo la porzione di codice che segue:

        } else {
            // if registration type is in one step, we save the address

            /// CHECK piva EMANUELE HACK
            ... 

ma in questo caso non ho avuto il risultato atteso, potete aiutarmi?

 

la mia versione di Prestashop è 1.6.1.4, se avete bisogno di altre informazioni fatemi sapere

 

Grazie.

Link to comment
Share on other sites

Aggiornamento:

 

Ho inserito lo snippet alla riga 562 di AuthController.php

if ((Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) && $contains_state && !$id_state) {
                    $this->errors[] = Tools::displayError('This country requires you to choose a State.');
                }

                /// CHECK piva EMANUELE HACK
                if ( isset($address->company)&& $address->company !="")
                {
                    if((isset($_POST['vat_number']) && $_POST['vat_number']=='') || !isset($_POST['vat_number']))
                    $this->errors[] = Tools::displayError('Partita IVA obbligatoria se viene compilato il campo Azienda.');
                }

Ora funziona

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...