Come aggiungere i dati per la fatturazione italiana su WooCommerce senza plugin

Oggi vedremo come aggiunge i campi neccessari alla fatturazione italiana durante l’acquisto su woocommerce.

Creare uno shop su woocommerce è davvero facile, ma alcune volte non fornisce le caratteristiche necessarie per gestire gli obblighi di legge italiani.

Come aggiungere i dati per la fatturazione italiana su WooCommerce senza plugin

In italia nel caso in cui si voglia fatturare un’acquisto sono necessari due campi, Partita Iva dell’acquirente e Codice Fiscale, ecco come aggiungerli al vostro shop wordpress.

1. Fatturazione italiana su WooCommerce: Aggiunta del campo di richiesta fatturazione

Come prima cosa dobbiamo creare una checkbox che ci dia l’informazione se il cliente desidera la fattura.

Ecco quindi il primo codice da aggiungere al file function.php del nostro tema.

(Nel caso si voglia aggiungere questi campi globalmente su wordpress al di la del tema scelto, al posto di utilizzare il file function.php, si può utilizzare il file ms-function.php dentro la cartella wp-includes).

//creo il campo richiesta fattura?
add_filter( 'woocommerce_checkout_fields' , 'richiesta_fattura' );
function richiesta_fattura( $fields ) {
     $fields['billing']['richiesta_fattura'] = array(
		'type'      => 'checkbox',
    'label'     => __('Fattura', 'woocommerce'),
    'placeholder'   => _x('Fattura', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row'),
    'clear'     => true
     );

     return $fields;
}

add_action( 'woocommerce_checkout_update_order_meta', 'richiesta_fattura_order_meta' );
function richiesta_fattura_order_meta( $order_id ) {
    if ( ! empty( $_POST['richiesta_fattura'] ) ) {
        update_post_meta( $order_id, 'Fattura', sanitize_text_field( $_POST['richiesta_fattura'] ) );
    }
}

Ora, se vogliamo aggiungerlo anche nel back-end, quindi poterlo vedere quando aprimo un’ordine dal pannello amministrativo, dobbiamo aggiungere il seguente script di codice:

//inserisco il campo richiesta fattura nel beck-end
add_action( 'woocommerce_admin_order_data_after_billing_address', 'richiesta_fattura_order_meta_admin', 10, 1 );
function richiesta_fattura_order_meta_admin($order){

    echo '<p><strong>'.__('Fattura').':</strong> ' . (get_post_meta( $order->get_id(), 'Fattura', true ) == 1 ? 'si' : 'no') . '</p>';
}

Se vogliamo inoltre aggiungerlo anche nella mail dell’ordine:

//inserisco il campo richiesta fattura nella mail dell'ordine
add_filter('woocommerce_email_order_meta_keys', 'my_custom_fattura_order_meta_keys');
function my_custom_fattura_order_meta_keys( $keys ) {
    $keys[] = 'Fattura';
    return $keys;
}

Ecco il risultato appena ottenuto:

Fatturazione italiana su WooCommerce

2. Fatturazione italiana su WooCommerce: Aggiunta campo Codice Fiscale

Come fatto precedentemente con il campo per la richesta della fattura, aggiungiamo anche il campo Codice Fiscale, con la differenza che sarà un campo di tipo testuale:

//creo il campo codice fiscale
add_filter( 'woocommerce_checkout_fields' , 'codice_fiscale' );
function codice_fiscale( $fields ) {
     $fields['billing']['codice_fiscale'] = array(
    'label'     => __('Codice Fiscale', 'woocommerce'),
    'placeholder'   => _x('Codice Fiscale', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-first'),
    'clear'     => true
     );

     return $fields;
}

add_action( 'woocommerce_checkout_update_order_meta', 'codice_fiscale_order_meta' );
function codice_fiscale_order_meta( $order_id ) {
    if ( ! empty( $_POST['codice_fiscale'] ) ) {
        update_post_meta( $order_id, 'Codice Fiscale', sanitize_text_field( $_POST['codice_fiscale'] ) );
    }
}

//inserisco il codice fiscale nel back end
add_action( 'woocommerce_admin_order_data_after_billing_address', 'codice_fiscale_order_meta_admin', 10, 1 );
function codice_fiscale_order_meta_admin($order){
    echo '<p><strong>'.__('Codice Fiscale').':</strong> ' . get_post_meta( $order->get_id(), 'Codice Fiscale', true ) ?? '' . '</p>';
}

//inserisco il codice fiscale nella mail dell'ordine
add_filter('woocommerce_email_order_meta_keys', 'my_custom_fiscale_order_meta_keys');
function my_custom_fiscale_order_meta_keys( $keys ) {
    $keys[] = 'Codice Fiscale';
    return $keys;
}

Risultato ottenuto:

Fatturazione italiana su WooCommerce

3. Fatturazione italiana su WooCommerce: Aggiungo il campo Partita Iva

Seguamo lo stesso processo appena visto per creare il campo Partita Iva:

//creo il campo partita iva
add_filter( 'woocommerce_checkout_fields' , 'partita_iva' );
function partita_iva( $fields ) {
     $fields['billing']['partita_iva'] = array(
    'label'     => __('Partita Iva', 'woocommerce'),
    'placeholder'   => _x('Partita Iva', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-last'),
    'clear'     => true
     );

     return $fields;
}

add_action( 'woocommerce_checkout_update_order_meta', 'partita_iva_order_meta' );
function partita_iva_order_meta( $order_id ) {
    if ( ! empty( $_POST['partita_iva'] ) ) {
        update_post_meta( $order_id, 'Partita Iva', sanitize_text_field( $_POST['partita_iva'] ) );
    }
}

//inserisco il partita iva nel back end
add_action( 'woocommerce_admin_order_data_after_billing_address', 'partita_iva_order_meta_admin', 10, 1 );
function partita_iva_order_meta_admin($order){
    echo '<p><strong>'.__('Partita Iva').':</strong> ' . get_post_meta( $order->get_id(), 'Partita Iva', true ) ?? '' . '</p>';
}

//inserisco il partita iva nella mail dell'ordine
add_filter('woocommerce_email_order_meta_keys', 'my_custom_partita_iva_order_meta_keys');
function my_custom_partita_iva_order_meta_keys( $keys ) {
    $keys[] = 'Partita Iva';
    return $keys;
}

Risultato ottenuto:

Fatturazione italiana su WooCommerce

4. Fatturazione italiana su WooCommerce: Aggiunta Controlli

Il primo controllo da aggiungere è che se il campo richiesta fattura è selezionato, i campi codice fiscale e partita iva siano compilati.

Ecco lo snipset per fare ciò:

//controllo che se il campo fattura = true allora cf e pi siano compilati
add_action('woocommerce_checkout_process', 'required_f_checkout_field_process');
function required_f_checkout_field_process() {
    if ( $_POST['richiesta_fattura'] ){
			if ( ! $_POST['codice_fiscale'] ){
	        wc_add_notice( __( 'Compila il campo Codice Fiscale .' ), 'error' );
				}

			if ( ! $_POST['partita_iva'] ){
					wc_add_notice( __( 'Compila il campo Partita Iva .' ), 'error' );
				}

		}
}

5. Controllo la validità del Codice fiscale

Aggiungiamo ora una funzione che controlli la valità sintattica del codice fiscale.

Utilizzeremo dopo questa funzione per aggiungere il controllo alla funzione scritta nel punto 4.

Questa funzione dovrà restituire true se il codice fiscale è corretto sintatticamente e false in caso contrario:

function controllaCodiceFiscale($cf){
     if($cf=='')
	return false;

     if(strlen($cf)!= 16)
	return false;

     $cf=strtoupper($cf);
     if(!preg_match("/[A-Z0-9]+$/", $cf))
	return false;
     $s = 0;
     for($i=1; $i<=13; $i+=2){
	$c=$cf[$i];
	if('0'<=$c and $c<='9')
	     $s+=ord($c)-ord('0');
	else
	     $s+=ord($c)-ord('A');
     }

     for($i=0; $i<=14; $i+=2){
	$c=$cf[$i];
	switch($c){
             case '0':  $s += 1;  break;
	     case '1':  $s += 0;  break;
             case '2':  $s += 5;  break;
	     case '3':  $s += 7;  break;
	     case '4':  $s += 9;  break;
	     case '5':  $s += 13;  break;
	     case '6':  $s += 15;  break;
	     case '7':  $s += 17;  break;
	     case '8':  $s += 19;  break;
	     case '9':  $s += 21;  break;
	     case 'A':  $s += 1;  break;
	     case 'B':  $s += 0;  break;
	     case 'C':  $s += 5;  break;
	     case 'D':  $s += 7;  break;
	     case 'E':  $s += 9;  break;
	     case 'F':  $s += 13;  break;
	     case 'G':  $s += 15;  break;
	     case 'H':  $s += 17;  break;
	     case 'I':  $s += 19;  break;
	     case 'J':  $s += 21;  break;
	     case 'K':  $s += 2;  break;
	     case 'L':  $s += 4;  break;
	     case 'M':  $s += 18;  break;
	     case 'N':  $s += 20;  break;
	     case 'O':  $s += 11;  break;
	     case 'P':  $s += 3;  break;
             case 'Q':  $s += 6;  break;
	     case 'R':  $s += 8;  break;
	     case 'S':  $s += 12;  break;
	     case 'T':  $s += 14;  break;
	     case 'U':  $s += 16;  break;
	     case 'V':  $s += 10;  break;
	     case 'W':  $s += 22;  break;
	     case 'X':  $s += 25;  break;
	     case 'Y':  $s += 24;  break;
	     case 'Z':  $s += 23;  break;
	}
    }

    if( chr($s%26+ord('A'))!=$cf[15] )
	return false;

    return true;
}

6. Controllo la validità del la Partita Iva

Come nel punto precente, aggiungiamo ora una funzione che controlli la valità sintattica della Partita Iva.

Utilizzeremo dopo questa funzione per aggiungere il controllo alla funzione scritta nel punto 4.

Questa funzione dovrà restituire true se la partita iva è corretta sintatticamente e false in caso contrario:

function controllaPartitaIVA($pi)
{
  if ($pi === '') return '';
  elseif (strlen($pi) != 11) return 'La Partita IVA deve essere composta da 11 caratteri';
  elseif (preg_match("/^[0-9]+\\$/D", $pi) != 1) return 'La Partita IVA deve contenere solo numeri';
  else {
    $s = $c = 0;
    for($i=0; $i<=9; $i+=2) {
      $s += ord($pi[$i]) - ord('0');
    }
    for ($i=1; $i<=9; $i+=2) {
      $c = 2*(ord($pi[$i]) - ord('0'));
      if ($c > 9) $c = $c - 9;
      $s += $c;
    }
    $controllo = (10 - $s%10)%10;
    if ($controllo != (ord($pi[10]) - ord('0'))) {
      return false;
    }else{
      return true;
    }
  }
}

7. Aggiungo i controlli all funzione del punto 4

Aggiungento le funzione scritti precedentemente al controllo dei campi otteniamo questa funzione ( sostituirla a quella scritta nel punto 4).

//controllo che se il campo fattura = true allora cf e pi siano compilati
add_action('woocommerce_checkout_process', 'required_f_checkout_field_process');
function required_f_checkout_field_process() {
    if ( $_POST['richiesta_fattura'] ){
			if ( ! $_POST['codice_fiscale'] ){
	     	wc_add_notice( __( 'Compila il campo Codice Fiscale .' ), 'error' );
			}elseif (controllaCodiceFiscale($_POST['codice_fiscale']) !== true AND controllaPartitaIVA($_POST['codice_fiscale']) !== true){
				wc_add_notice( __( 'Inserire un codice fiscale valido' ), 'error' );
			}

			if ( ! $_POST['partita_iva'] ){
					wc_add_notice( __( 'Compila il campo Partita Iva .' ), 'error' );
			}elseif (controllaPartitaIVA($_POST['partita_iva']) !== true){
					wc_add_notice( __( 'Inserire una Partita Iva valida' ), 'error' );
			}

		}
}

Se controllate bene per controllare il codice fiscale utilizzo sia la funzione controllaCodiceFiscale(), che la funzione controllaPartitaIva, non è un errore, ma nel caso di Fattura ad Azienda il Codice Fiscale è uguale alla Partita Iva dell’azienda, quindi lo controllo in questo modo.

Fatemi sapere se secondo voi dovrei aggiungere il controllo che cf e pi siano uguali nel caso il cui la verifica del codice fiscale non andasse a buon fine.

Spero che questa guida vi possa aver aiutato, per qualsiasi domanda non esitate a lasciare un commento qui sotto.

Lascia un commento