Support » Plugin: WooCommerce Fattureincloud » Creare la fattura in automatico a pagamento ricevuto (solo se con Partita Iva)

  • Resolved andreabaino

    (@andreabaino)


    Ciao Cristiano,
    per il momento grazie per l’ottimo plugin!
    Avrei però la necessità di generare la fattura in automatico solo nel caso in cui l’utente abbia inserito CF e/o P.Iva (rimuovendo l’obbligo di inserire il C.F. nel checkout) ed eventualmente generarla alla conferma dell’ordine (o ricezione del pagamento) senza attendere che l’ordine sia completato.
    E’ possibile farlo (anche con la versione Pro)?

    Al momento ho rimosso il campo obbligatorio sovrascrivendo i campi creati dal plugin ma se provo a chiamare la funzione con l’hook woocommerce_order_status_processing e la funzione fattureincloud_order_completed($order_id) non ottengo nulla.

    C’è un modo per chiamare la funzione verificando prima se l’ordine contiene i dati?
    Grazie mille
    Andrea

Viewing 14 replies - 1 through 14 (of 14 total)
  • Plugin Author Cristiano Zanca

    (@cristianozanca)

    Ciao @andreabaino

    Grazie per i complimenti!

    Se si modifica il plugin il consiglio ( se non è già stato fatto ) è di non sovrascriverlo ma di crearne uno dove inserire liberamente tutte le modifiche volute, come se fosse un “child plugin”, altrimenti al prossimo aggiornamento salta tutto.

    La funzionalità cercata è teoricamente possibile, ma necessita di tempo, test e sviluppo che al momento purtroppo non sono disponibili

    Ciao Cristiano, grazie per la rapidissima risposta!
    In realtà al momento sto creando una modifica per un sito nello specifico e sto lavorando nelle functions.php del tema.

    Il problema è che chiamando la funzione fattureincloud_order_completed($order_id) all’interno della funzione verifica che il campo Auto_Save sia flaggato (ma ovviamente non lo è perché non voglio quella funzione).

    Al momento ho risolto con un piccolo workaround, flaggando il campo in automatico prima di eseguire la funzione e riportandolo a 0 subito dopo:

    function crea_fattura($order_id) {
    	// Ottieni i dati dell'ordine.
    	$billing_partita_iva = get_post_meta( $order_id, '_billing_partita_iva', true );
    	$billing_cod_fisc = get_post_meta( $order_id, '_billing_cod_fisc', true );
    	// Controlla se l'ordine contiene la P.Iva o il C.F.
    	if($billing_partita_iva || $billing_cod_fisc){
    
    		// Per fare in modo che funzioni, attiva la modalità auto-save.
    		update_option('fattureincloud_auto_save', 1 );
    
    		// Esegui la funzione.
    		$woofatture = new woo_fattureincloud();
    		$woofatture->fattureincloud_order_completed($order_id);
    
    		// Per evitare le fatture senza C.F. o P.Iva disabilita la modalità auto-save.
    		update_option('fattureincloud_auto_save', 0 );
    
    	}
    }// All'ordine in lavorazione attiva la creazione della fattura.
    add_action( 'woocommerce_order_status_completed', 'crea_fattura');
    
    function billing_fields_woofc_mod( $fields ) {
    	$fields['billing_cod_fisc'] = array(
    		'label'       => __('Codice Fiscale','woocommerce'),
    		'placeholder' => __('Scrivere il Codice Fiscale','woocommerce'),
    		'required'    => false,
    		'class'       => array('piva-number-class form-row-wide' ),
    		'clear'		  => true
    	);
    	return $fields;
    }
    add_filter( 'woocommerce_billing_fields' , 'billing_fields_woofc_mod', 10, 1);

    Proverò se questa soluzione funziona correttamente anche con la versione Pro perché se funziona è esattamente quello di cui ho bisogno!
    Per il momento di nuovo grazie per la tua attenzione,
    Andrea

    Plugin Author Cristiano Zanca

    (@cristianozanca)

    Interessante come soluzione, se funziona con questa versione del plugin dovrebbe anche funzionare con la versione Pro

    Perfetto, grazie mille.
    Allora lo provo con la versione Pro!
    Andrea

    Ciao Andrea,
    un nostro cliente ha chiesto di fare la stessa modifica.
    Dove hai inserito il codice di cui sopra nel file functions.php del tema?
    Grazie.

    Ciao @happybrain!
    In realtà nel functions.php non importa dove lo si inserisce, direi di aggiungerlo al fondo.

    In particolare in quella funzione potete modificare l’hook di woocommerce per generare la fattura in differenti stati dell’ordine. Io alla fine ho usato:
    add_action( ‘woocommerce_order_status_processing’, ‘crea_fattura’);
    In questo modo genera la fattura all’ordine (o alla ricezione del pagamento).

    Nella stessa funzione con qualche riga in più si possono poi ottenere molte altre cose, in particolare il mio cliente ha voluto attivare anche l’invio automatico della fattura via e-mail subito dopo la creazione.

    Ciao,
    Andrea

    Ciao @andreabaino
    il cliente ha letto la tua risposta e ci ha chiesto di poter anche attivare l’invio automatico della fattura come nel tuo caso.
    Saresti così gentile da condividerci anche quella parte del codice?
    Grazie 🙂

    In realtà ci sto ancora lavorando perché al momento ho una soluzione ancora abbastanza rudimentale che ha molti bug che devo risolvere.
    Non voglio quindi mettere qua del codice sbagliato e comunque non ancora correttamente funzionante.

    In sostanza nella stessa funzione crea_fattura() faccio una nuova chiamata API a FattureinCloud cercando nella lista delle fatture una corrispondenza con l’ID dell’ordine. Il problema di questo approccio è che l’ordine con ID = 1234 mi troverà anche gli ordini 12340, 12341, 12342… e così via. Non dovrebbero esserci problemi se la funzione è applicata solamente al momento dell’ordine e non con ordini vecchi.

    In più voglio implementare l’invio della mail con un template WooCommerce in maniera da formattarla nello stesso modo: al momento la soluzione test invia una mail con il solo link PDF della fattura.

    Se restiamo in contatto anche fuori dal forum possiamo provare a portare avanti insieme lo sviluppo in maniera da trovare la soluzione più adeguata insieme.
    Ciao!
    Andrea

    Ok @andreabaino grazie per la risposta.
    Per il momento testiamo l’altra porzione di codice!
    Ci aggiorniamo!
    Grazie e buon lavoro

    Certo, quella la sto utilizzando e insieme al plugin funziona correttamente.
    Appena ho novità (spero nelle prossime settimane al massimo) sul resto vi aggiorno.

    Ciao @cristianozanca,
    lavorando sulle implementazioni di cui abbiamo discusso sopra, e in particolare l’invio automatico della fattura via e-mail l’approccio che sto utilizzando per integrarlo con il plugin è di fatto una soluzione non proprio ottimale.

    Guardando la documentazione delle API di Fatture in cloud vedo che nella creazione della nuova fattura la funzione restituisce:

    DocNuovoResponse {
       success (boolean),
       new_id (number): Identificativo del documento creato,
       token (string): Identificativo permanente del documento (rimane lo stesso anche a seguito di modifiche)
    }

    E’ possibile in un aggiornamento del plugin integrare nella funzione function fattureincloud_order_completed($order_id) il return della variabile $fattureincloud_result?
    Testandolo in locale non dovrebbe creare alcun problema e in questo modo potrei accedere al documento con il suo token in maniera sicura e univoca.

    Grazie mille per la tua attenzione,
    Andrea

    Plugin Author Cristiano Zanca

    (@cristianozanca)

    Ciao @andreabaino

    Grazie a te per l’interessante suggerimento, sicuramente sarà testato per la prossima versione del plugin

    Ottimo, grazie mille.
    In questo modo all’ordine con il token ottengo la fattura con /fattura/dettagli.
    Inoltre avere il token alla generazione mi permette anche di salvarlo in un campo meta dell’ordine (per eventuali necessità future) e di salvare sempre in un meta la conferma di creazione fattura e invio per mail.
    Ciao
    Andrea

    Ciao!
    Con la modifica al plugin e questa funzione ottengo la fattura con il token generato alla creazione del documento. La mail la genero includendo un template esterno che può essere sia un template WooCommerce che un template html differente.

    function crea_fattura($order_id) {
    	// Ottieni i dati dell'ordine.
    	$billing_partita_iva = get_post_meta( $order_id, '_billing_partita_iva', true );
    	$billing_cod_fisc = get_post_meta( $order_id, '_billing_cod_fisc', true );
    	// Controlla se l'ordine contiene la P.Iva o il C.F.
    	if($billing_partita_iva || $billing_cod_fisc){
    
    		// Per fare in modo che funzioni, attiva la modalità auto-save.
    		update_option('fattureincloud_auto_save', 1 );
    
    		// Esegui la funzione.
    		$woofatture = new woo_fattureincloud();
    		$fattureincloud_result = $woofatture->fattureincloud_order_completed($order_id);
    
    		// Per evitare le fatture senza C.F. o P.Iva disabilita la modalità auto-save.
    		update_option('fattureincloud_auto_save', 0 );
    
    		// ======================== Invio automatico fattura. ========================
    		// 
    		// Attendi l'aggiornamento del plugin per questa funzionalità.
    		// La variabile $fattureincloud_result: è un array con result, new_id e token.
    
    		$url_get_fattura = "https://api.fattureincloud.it:443/v1/fatture/dettagli";
    		$api_uid = get_option('api_uid_fattureincloud');
    		$api_key = get_option('api_key_fattureincloud');
    		$token = $fattureincloud_result['token'];
    
    		$request_get_fattura = array(
    		    "api_uid" => $api_uid,
    		    "api_key" => $api_key,
    		    "token" => $token
    		);
    		$options_get_fattura = array(
    		    "http" => array(
    			    "header"  => "Content-type: text/json\r\n",
    			    "method"  => "POST",
    			    "content" => json_encode($request_get_fattura)
    		    ),
    		);
    		$context_get_fattura  = stream_context_create($options_get_fattura);
    		$result_get_fattura = json_decode(file_get_contents($url_get_fattura, false, $context_get_fattura), true);
    
    		// E' un array con tutti i dati della fattura.
    		$dettagli_documento = $result_get_fattura['dettagli_documento'];
    		// Per esempio posso ottenere il link del documento con ['link_doc'].
    		$link_doc = $dettagli_documento['link_doc'];
    	
    
    		// Ottengo i dati dell'ordine e l'utente.
    		$order = wc_get_order( $order_id );
    		$user = $order->get_user_id();
    
    		// Ottengo tutti i dati dell'utente.
    		$user_info = get_userdata($user);
    		$username = $user_info->user_login;
    		$firstname = $user_info->first_name;
    
    		// Carico un template e-mail.
    		ob_start();
    		include(get_template_directory() . '/email/invia-fattura.php');
    		$message = ob_get_clean();
    		ob_end_clean();
            
    		$to = $user_info->user_email;
    		$subject = $firstname.', ecco la fattura per il tuo ordine n.'.$order_id.'.';
    		// Usa il messaggio se non carichi un template custom.
    		//$message = 'Scarica la fattura a questo link: '.$link_doc;
    		$headers[] = 'From: Sito — fattura <fatture@sito.it>';
    		$headers[] = 'Content-Type: text/html; charset=UTF-8';
    
    		wp_mail( $to, $subject, $message, $headers );
    	}
    }
    // All'ordine in lavorazione attiva la creazione della fattura.
    add_action( 'woocommerce_order_status_processing', 'crea_fattura');
    • This reply was modified 1 year, 4 months ago by andreabaino.
Viewing 14 replies - 1 through 14 (of 14 total)
  • The topic ‘Creare la fattura in automatico a pagamento ricevuto (solo se con Partita Iva)’ is closed to new replies.