2525use Models \Module ;
2626use Models \Plugin ;
2727use 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