@@ -289,6 +289,63 @@ public function registra()
289289 }
290290 }
291291
292+ /*
293+ * Controllo per giroconto IVA su fatture di acquisto
294+ * Se la data di registrazione è in un mese successivo alla data di competenza
295+ * e il giorno è minore del 16, viene effettuato un giroconto per spostare l'IVA a credito
296+ */
297+ if ($ is_acquisto && !$ is_nota && !empty ($ iva_detraibile )) {
298+ $ data_registrazione = \Carbon \Carbon::parse ($ this ->fattura ->data_registrazione );
299+ $ data_competenza = \Carbon \Carbon::parse ($ this ->fattura ->data_competenza );
300+
301+ // Verifica se il mese della data di registrazione è successivo al mese della data di competenza
302+ // e se il giorno della data di registrazione è minore del 16
303+ $ mese_registrazione_successivo = false ;
304+
305+ if (($ data_registrazione ->year == $ data_competenza ->year && $ data_registrazione ->month > $ data_competenza ->month && $ data_registrazione ->day >= 16 ) || ($ data_registrazione ->year > $ data_competenza ->year )) {
306+ $ mese_registrazione_successivo = true ;
307+ }
308+
309+ if ($ mese_registrazione_successivo ) {
310+ // Data del giroconto: primo giorno del mese successivo alla data di registrazione
311+ $ data_giroconto = $ this ->fattura ->data_registrazione ;
312+ $ descrizione_giroconto = 'Giroconto IVA al mese successivo ' ;
313+
314+
315+ if (isset ($ data_giroconto )) {
316+ // Crea un mastrino per il giroconto con data di competenza (per lo storno)
317+ $ mastrino_storno = Mastrino::build ('Storno IVA da data competenza - ' . $ this ->fattura ->getReference (1 ), $ this ->fattura ->data_competenza , false , false );
318+
319+ // Movimento di storno: Azzera l'IVA dalla data di competenza (DARE)
320+ $ movimento_storno = Movimento::build ($ mastrino_storno , setting ('Conto per Iva transitoria ' ), $ this ->fattura );
321+ $ movimento_storno ->setTotale (0 , $ iva_detraibile );
322+ $ movimento_storno ->descrizione = 'Storno IVA da data competenza - ' . $ this ->fattura ->getReference (1 );
323+ $ movimento_storno ->save ();
324+
325+ // Movimento di storno: Azzera l'IVA dalla data di competenza (AVERE)
326+ $ movimento_storno = Movimento::build ($ mastrino_storno , setting ('Conto per Iva su acquisti ' ), $ this ->fattura );
327+ $ movimento_storno ->setTotale ($ iva_detraibile , 0 );
328+ $ movimento_storno ->descrizione = 'Storno IVA da data competenza - ' . $ this ->fattura ->getReference (1 );
329+ $ movimento_storno ->save ();
330+
331+ // Crea un mastrino per il giroconto con la data corretta (per la registrazione)
332+ $ mastrino_giroconto = Mastrino::build ($ descrizione_giroconto . ' - ' . $ this ->fattura ->getReference (1 ), $ data_giroconto , false , false );
333+
334+ // Movimento di giroconto: Registra l'IVA nella data corretta (DARE)
335+ $ movimento_giroconto = Movimento::build ($ mastrino_giroconto , setting ('Conto per Iva su acquisti ' ), $ this ->fattura );
336+ $ movimento_giroconto ->setTotale (0 , $ iva_detraibile );
337+ $ movimento_giroconto ->descrizione = $ descrizione_giroconto . ' - ' . $ this ->fattura ->getReference (1 );
338+ $ movimento_giroconto ->save ();
339+
340+ // Movimento di giroconto: Registra l'IVA nella data corretta (AVERE)
341+ $ movimento_giroconto = Movimento::build ($ mastrino_giroconto , setting ('Conto per Iva transitoria ' ), $ this ->fattura );
342+ $ movimento_giroconto ->setTotale ($ iva_detraibile , 0 );
343+ $ movimento_giroconto ->descrizione = $ descrizione_giroconto . ' - ' . $ this ->fattura ->getReference (1 );
344+ $ movimento_giroconto ->save ();
345+ }
346+ }
347+ }
348+
292349 // Nel penultimo conto del mastrino inserisco l'eventuale differenza per evitare sbilanci nel totale,
293350 // evitando di mettere differenze nell'iva
294351 $ diff = round ($ totale_avere - $ totale_dare , 4 );
@@ -320,5 +377,30 @@ public function rimuovi()
320377 if (!empty ($ mastrino )) {
321378 $ mastrino ->delete ();
322379 }
380+
381+ // Elimina anche tutti i mastrini correlati ai giroconti IVA
382+ $ this ->rimuoviGirocontiIVA ();
383+ }
384+
385+ /**
386+ * Elimina tutti i mastrini correlati ai giroconti IVA della fattura.
387+ */
388+ protected function rimuoviGirocontiIVA ()
389+ {
390+ $ riferimento_fattura = $ this ->fattura ->getReference (1 );
391+
392+ // Cerca tutti i mastrini che contengono il riferimento della fattura e sono giroconti IVA
393+ $ mastrini_giroconti = Mastrino::where ('primanota ' , false )
394+ ->where (function ($ query ) use ($ riferimento_fattura ) {
395+ $ query ->where ('descrizione ' , 'like ' , "%Giroconto IVA a credito anno precedente - {$ riferimento_fattura }% " )
396+ ->orWhere ('descrizione ' , 'like ' , "%Giroconto IVA al mese successivo - {$ riferimento_fattura }% " )
397+ ->orWhere ('descrizione ' , 'like ' , "%Storno IVA da data competenza - {$ riferimento_fattura }% " );
398+ })
399+ ->get ();
400+
401+ // Elimina tutti i mastrini trovati
402+ foreach ($ mastrini_giroconti as $ mastrino_giroconto ) {
403+ $ mastrino_giroconto ->delete ();
404+ }
323405 }
324406}
0 commit comments