Skip to content

Commit 6075550

Browse files
committed
fix: movimenti di giroconto per fatture
1 parent aa63ff2 commit 6075550

4 files changed

Lines changed: 371 additions & 153 deletions

File tree

modules/fatture/src/Gestori/Movimenti.php

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)