21
21
namespace Modules \Fatture \Gestori ;
22
22
23
23
use Modules \Fatture \Fattura ;
24
+ use Modules \Pagamenti \Pagamento ;
24
25
use Modules \Scadenzario \Scadenza ;
25
26
use Plugins \AssicurazioneCrediti \AssicurazioneCrediti ;
26
27
use Plugins \ImportFE \FatturaElettronica as FatturaElettronicaImport ;
33
34
*/
34
35
class Scadenze
35
36
{
36
- public function __construct (private readonly Fattura $ fattura )
37
+ public function __construct (private readonly Fattura $ fattura, $ database = null )
37
38
{
39
+ $ this ->database = $ database ?: database (); // Allow mocking
38
40
}
39
41
40
42
/**
@@ -49,11 +51,11 @@ public function registra($is_pagato = false, $ignora_fe = false)
49
51
$ this ->rimuovi ();
50
52
51
53
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 );
53
55
}
54
56
55
- if (empty ($ scadenze_fe )) {
56
- $ this ->registraScadenzeTradizionali ($ is_pagato );
57
+ if (empty ($ scadenze )) {
58
+ $ scadenze = $ this ->registraScadenzeTradizionali ($ is_pagato );
57
59
}
58
60
59
61
// Registrazione scadenza per Ritenuta d'Acconto
@@ -78,8 +80,10 @@ public function registra($is_pagato = false, $ignora_fe = false)
78
80
$ id_banca_controparte = $ this ->fattura ->id_banca_controparte ;
79
81
$ importo = -$ ritenuta_acconto ;
80
82
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 ' );
82
84
}
85
+
86
+ return $ scadenze ;
83
87
}
84
88
85
89
/**
@@ -88,14 +92,15 @@ public function registra($is_pagato = false, $ignora_fe = false)
88
92
public function rimuovi ()
89
93
{
90
94
$ scadenze = $ this ->fattura ->scadenze ;
95
+ $ assicurazioni = [];
91
96
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 );
93
98
if (!empty ($ assicurazione_crediti )) {
94
99
$ assicurazioni [] = $ assicurazione_crediti ;
95
100
}
96
101
}
97
102
98
- database () ->delete ('co_scadenziario ' , ['iddocumento ' => $ this ->fattura ->id ]);
103
+ $ this -> database ->delete ('co_scadenziario ' , ['iddocumento ' => $ this ->fattura ->id ]);
99
104
100
105
foreach ($ assicurazioni as $ assicurazione ) {
101
106
$ assicurazione ->fixTotale ();
@@ -117,18 +122,35 @@ protected function registraScadenza(Fattura $fattura, $importo, $data_scadenza,
117
122
$ descrizione = $ fattura ->tipo ->getTranslation ('title ' ).' numero ' .$ numero ;
118
123
$ idanagrafica = $ fattura ->idanagrafica ;
119
124
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 );
121
126
122
127
$ scadenza ->documento ()->associate ($ fattura );
123
128
$ scadenza ->data_emissione = $ fattura ->data ;
124
129
125
130
$ scadenza ->save ();
126
131
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 );
128
133
if (!empty ($ assicurazione_crediti )) {
129
134
$ assicurazione_crediti ->fixTotale ();
130
135
$ assicurazione_crediti ->save ();
131
136
}
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 );
132
154
}
133
155
134
156
/**
@@ -151,6 +173,7 @@ protected function registraScadenzeFE($is_pagato = false)
151
173
$ pagamenti = isset ($ pagamenti [0 ]) ? $ pagamenti : [$ pagamenti ];
152
174
}
153
175
176
+ $ results = [];
154
177
foreach ($ pagamenti as $ pagamento ) {
155
178
$ rate = $ pagamento ['DettaglioPagamento ' ];
156
179
$ rate = isset ($ rate [0 ]) ? $ rate : [$ rate ];
@@ -162,11 +185,11 @@ protected function registraScadenzeFE($is_pagato = false)
162
185
$ scadenza = !empty ($ rata ['DataScadenzaPagamento ' ]) ? FatturaElettronicaImport::parseDate ($ rata ['DataScadenzaPagamento ' ]) : $ this ->fattura ->data ;
163
186
$ importo = $ this ->fattura ->isNota () ? $ rata ['ImportoPagamento ' ] : -$ rata ['ImportoPagamento ' ];
164
187
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 );
166
189
}
167
190
}
168
191
169
- return ! empty ( $ pagamenti ) ;
192
+ return $ results ;
170
193
}
171
194
172
195
/**
@@ -181,17 +204,20 @@ protected function registraScadenzeTradizionali($is_pagato = false)
181
204
$ netto = $ this ->fattura ->isNota () ? -$ netto : $ netto ;
182
205
183
206
// 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 );
185
208
$ direzione = $ this ->fattura ->tipo ->dir ;
186
209
210
+ $ results = [];
187
211
foreach ($ rate as $ rata ) {
188
212
$ scadenza = $ rata ['scadenza ' ];
189
213
$ importo = $ direzione == 'uscita ' ? -$ rata ['importo ' ] : $ rata ['importo ' ];
190
214
$ id_pagamento = $ this ->fattura ->idpagamento ;
191
215
$ id_banca_azienda = $ this ->fattura ->id_banca_azienda ;
192
216
$ id_banca_controparte = $ this ->fattura ->id_banca_controparte ;
193
217
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 );
195
219
}
220
+
221
+ return $ results ;
196
222
}
197
223
}
0 commit comments