Skip to content

Commit 9e588df

Browse files
committed
fix: allineamento logica coerente con modules/fatture/controller_before.php per conteggio fatture elettroniche in errore
1 parent f25c1da commit 9e588df

1 file changed

Lines changed: 35 additions & 3 deletions

File tree

plugins/receiptFE/src/NotificheRicevuteHook.php

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
use Models\Module;
2626
use Models\Plugin;
2727
use Modules\Fatture\Fattura;
28+
use Modules\Fatture\Stato;
29+
use Util\XML;
2830

2931
/**
3032
* Hook specializzato per il conteggio e la segnalazione di Fatture senza ricevute oppure con ricevuta in stato di errore.
@@ -36,11 +38,41 @@ class NotificheRicevuteHook extends Manager
3638
public function response()
3739
{
3840
// Messaggio informativo su fatture con stato di errore
39-
$con_errore = Fattura::vendita()
40-
->whereIn('codice_stato_fe', ['NS', 'ERR', 'EC02'])
41+
// Esclusione delle fatture duplicate (codice 00404) dal conteggio degli errori
42+
// Logica coerente con modules/fatture/controller_before.php
43+
$fatture_errore = Fattura::vendita()
44+
->whereIn('codice_stato_fe', ['NS', 'ERR', 'EC02', 'ERVAL'])
4145
->where('data_stato_fe', '>=', $_SESSION['period_start'])
4246
->orderBy('data_stato_fe')
43-
->count();
47+
->get();
48+
49+
$con_errore = 0;
50+
foreach ($fatture_errore as $fattura) {
51+
// Conteggio diretto per ERR, EC02, ERVAL
52+
if (in_array($fattura->codice_stato_fe, ['ERR', 'EC02', 'ERVAL'])) {
53+
++$con_errore;
54+
continue;
55+
}
56+
57+
// In caso di NS verifico che non sia semplicemente un codice 00404 (Fattura duplicata)
58+
if ($fattura->codice_stato_fe == 'NS' && ($fattura->stato != Stato::where('name', 'Bozza')->first()->id) && ($fattura->stato != Stato::where('name', 'Non valida')->first()->id)) {
59+
$ricevuta_principale = $fattura->getRicevutaPrincipale();
60+
61+
// Se non esiste alcuna ricevuta, non conteggio come errore
62+
if (!empty($ricevuta_principale)) {
63+
$contenuto_ricevuta = XML::readFile(base_dir().'/files/fatture/vendite/'.$ricevuta_principale->filename);
64+
$lista_errori = $contenuto_ricevuta['ListaErrori'];
65+
if ($lista_errori) {
66+
$lista_errori = $lista_errori[0] ? $lista_errori : [$lista_errori];
67+
$errore = $lista_errori[0]['Errore'];
68+
// Escludo le fatture duplicate (codice 00404) dal conteggio
69+
if ($errore['Codice'] != '00404') {
70+
++$con_errore;
71+
}
72+
}
73+
}
74+
}
75+
}
4476

4577
// Controllo se ci sono fatture in elaborazione da più di 7 giorni per le quali non ho ancora una ricevuta
4678
$data_limite = (new Carbon())->subDays(7);

0 commit comments

Comments
 (0)