2121namespace Modules \Fatture \Gestori ;
2222
2323use Modules \Fatture \Fattura ;
24+ use Modules \Pagamenti \Pagamento ;
2425use Modules \Scadenzario \Scadenza ;
2526use Plugins \AssicurazioneCrediti \AssicurazioneCrediti ;
2627use Plugins \ImportFE \FatturaElettronica as FatturaElettronicaImport ;
3334 */
3435class Scadenze
3536{
36- public function __construct (private readonly Fattura $ fattura )
37+ public function __construct (private readonly Fattura $ fattura, $ database = null )
3738 {
39+ $ this ->database = $ database ?: database (); // Allow mocking
3840 }
3941
4042 /**
@@ -49,11 +51,11 @@ public function registra($is_pagato = false, $ignora_fe = false)
4951 $ this ->rimuovi ();
5052
5153 if (!$ ignora_fe && $ this ->fattura ->module == 'Fatture di acquisto ' && $ this ->fattura ->isFE ()) {
52- $ scadenze_fe = $ this ->registraScadenzeFE ($ is_pagato );
54+ $ scadenze = $ this ->registraScadenzeFE ($ is_pagato );
5355 }
5456
55- if (empty ($ scadenze_fe )) {
56- $ this ->registraScadenzeTradizionali ($ is_pagato );
57+ if (empty ($ scadenze )) {
58+ $ scadenze = $ this ->registraScadenzeTradizionali ($ is_pagato );
5759 }
5860
5961 // Registrazione scadenza per Ritenuta d'Acconto
@@ -78,8 +80,10 @@ public function registra($is_pagato = false, $ignora_fe = false)
7880 $ id_banca_controparte = $ this ->fattura ->id_banca_controparte ;
7981 $ importo = -$ ritenuta_acconto ;
8082
81- self ::registraScadenza ($ this ->fattura , $ importo , $ scadenza , $ is_pagato , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte , 'ritenutaacconto ' );
83+ $ scadenze [] = self ::registraScadenza ($ this ->fattura , $ importo , $ scadenza , $ is_pagato , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte , 'ritenutaacconto ' );
8284 }
85+
86+ return $ scadenze ;
8387 }
8488
8589 /**
@@ -88,14 +92,15 @@ public function registra($is_pagato = false, $ignora_fe = false)
8892 public function rimuovi ()
8993 {
9094 $ scadenze = $ this ->fattura ->scadenze ;
95+ $ assicurazioni = [];
9196 foreach ($ scadenze as $ scadenza ) {
92- $ assicurazione_crediti = AssicurazioneCrediti:: where ( ' id_anagrafica ' , $ scadenza -> idanagrafica )-> where ( ' data_inizio ' , ' <= ' , $ scadenza ->scadenza )-> where ( ' data_fine ' , ' >= ' , $ scadenza ->scadenza )-> first ( );
97+ $ assicurazione_crediti = this -> trovaAssicurazioneCrediti ( $ scadenza ->idanagrafica , $ scadenza ->scadenza );
9398 if (!empty ($ assicurazione_crediti )) {
9499 $ assicurazioni [] = $ assicurazione_crediti ;
95100 }
96101 }
97102
98- database () ->delete ('co_scadenziario ' , ['iddocumento ' => $ this ->fattura ->id ]);
103+ $ this -> database ->delete ('co_scadenziario ' , ['iddocumento ' => $ this ->fattura ->id ]);
99104
100105 foreach ($ assicurazioni as $ assicurazione ) {
101106 $ assicurazione ->fixTotale ();
@@ -117,18 +122,35 @@ protected function registraScadenza(Fattura $fattura, $importo, $data_scadenza,
117122 $ descrizione = $ fattura ->tipo ->getTranslation ('title ' ).' numero ' .$ numero ;
118123 $ idanagrafica = $ fattura ->idanagrafica ;
119124
120- $ scadenza = Scadenza:: build ($ idanagrafica , $ descrizione , $ importo , $ data_scadenza , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte , $ type , $ is_pagato );
125+ $ scadenza = $ this -> generaScadenza ($ idanagrafica , $ descrizione , $ importo , $ data_scadenza , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte , $ type , $ is_pagato );
121126
122127 $ scadenza ->documento ()->associate ($ fattura );
123128 $ scadenza ->data_emissione = $ fattura ->data ;
124129
125130 $ scadenza ->save ();
126131
127- $ assicurazione_crediti = AssicurazioneCrediti:: where ( ' id_anagrafica ' , $ scadenza -> idanagrafica )-> where ( ' data_inizio ' , ' <= ' , $ scadenza ->scadenza )-> where ( ' data_fine ' , ' >= ' , $ scadenza ->scadenza )-> first ( );
132+ $ assicurazione_crediti = $ this -> trovaAssicurazioneCrediti ( $ scadenza ->idanagrafica , $ scadenza ->scadenza );
128133 if (!empty ($ assicurazione_crediti )) {
129134 $ assicurazione_crediti ->fixTotale ();
130135 $ assicurazione_crediti ->save ();
131136 }
137+
138+ return $ scadenza ;
139+ }
140+
141+ protected function trovaPagamento ($ idpagamento ): ?Pagamento
142+ {
143+ return Pagamento::where ('id ' , $ idpagamento )->first ();
144+ }
145+
146+ protected function trovaAssicurazioneCrediti ($ idanagrafica , $ data_scadenza ): ?AssicurazioneCrediti
147+ {
148+ return AssicurazioneCrediti::where ('id_anagrafica ' , $ idanagrafica )->where ('data_inizio ' , '<= ' , $ data_scadenza )->where ('data_fine ' , '>= ' , $ data_scadenza )->first ();
149+ }
150+
151+ protected function generaScadenza ($ idanagrafica , $ descrizione , $ importo , $ data_scadenza , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte , $ type , $ is_pagato ): Scadenza
152+ {
153+ return Scadenza::build ($ idanagrafica , $ descrizione , $ importo , $ data_scadenza , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte , $ type , $ is_pagato );
132154 }
133155
134156 /**
@@ -151,6 +173,7 @@ protected function registraScadenzeFE($is_pagato = false)
151173 $ pagamenti = isset ($ pagamenti [0 ]) ? $ pagamenti : [$ pagamenti ];
152174 }
153175
176+ $ results = [];
154177 foreach ($ pagamenti as $ pagamento ) {
155178 $ rate = $ pagamento ['DettaglioPagamento ' ];
156179 $ rate = isset ($ rate [0 ]) ? $ rate : [$ rate ];
@@ -162,11 +185,11 @@ protected function registraScadenzeFE($is_pagato = false)
162185 $ scadenza = !empty ($ rata ['DataScadenzaPagamento ' ]) ? FatturaElettronicaImport::parseDate ($ rata ['DataScadenzaPagamento ' ]) : $ this ->fattura ->data ;
163186 $ importo = $ this ->fattura ->isNota () ? $ rata ['ImportoPagamento ' ] : -$ rata ['ImportoPagamento ' ];
164187
165- self ::registraScadenza ($ this ->fattura , $ importo , $ scadenza , $ is_pagato , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte );
188+ $ results [] = self ::registraScadenza ($ this ->fattura , $ importo , $ scadenza , $ is_pagato , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte );
166189 }
167190 }
168191
169- return ! empty ( $ pagamenti ) ;
192+ return $ results ;
170193 }
171194
172195 /**
@@ -181,17 +204,20 @@ protected function registraScadenzeTradizionali($is_pagato = false)
181204 $ netto = $ this ->fattura ->isNota () ? -$ netto : $ netto ;
182205
183206 // Calcolo delle rate
184- $ rate = ($ this ->fattura ->pagamento ?: \ Modules \ Pagamenti \Pagamento:: where ( ' id ' , $ this ->fattura ->idpagamento )-> first ()) ->calcola ($ netto , $ this ->fattura ->data , $ this ->fattura ->idanagrafica );
207+ $ rate = ($ this ->fattura ->pagamento ?: $ this -> trovaPagamento ( $ this ->fattura ->idpagamento )) ->calcola ($ netto , $ this ->fattura ->data , $ this ->fattura ->idanagrafica , $ this -> database );
185208 $ direzione = $ this ->fattura ->tipo ->dir ;
186209
210+ $ results = [];
187211 foreach ($ rate as $ rata ) {
188212 $ scadenza = $ rata ['scadenza ' ];
189213 $ importo = $ direzione == 'uscita ' ? -$ rata ['importo ' ] : $ rata ['importo ' ];
190214 $ id_pagamento = $ this ->fattura ->idpagamento ;
191215 $ id_banca_azienda = $ this ->fattura ->id_banca_azienda ;
192216 $ id_banca_controparte = $ this ->fattura ->id_banca_controparte ;
193217
194- self ::registraScadenza ($ this ->fattura , $ importo , $ scadenza , $ is_pagato , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte );
218+ $ results [] = self ::registraScadenza ($ this ->fattura , $ importo , $ scadenza , $ is_pagato , $ id_pagamento , $ id_banca_azienda , $ id_banca_controparte );
195219 }
220+
221+ return $ results ;
196222 }
197223}
0 commit comments