@@ -112,7 +112,7 @@ public function getTotaleAttribute()
112112
113113 // Metodi generali
114114
115- public function aggiornaScadenzario ($ movimenti = null )
115+ public function aggiornaScadenzario ($ movimenti = null , $ scadenza = null , $ singola = false )
116116 {
117117 // Aggiornamento dello scadenzario disponibile solo da Mastrino di PrimaNota
118118 if (empty ($ this ->primanota )) {
@@ -124,6 +124,10 @@ public function aggiornaScadenzario($movimenti = null)
124124 $ documenti = $ this ->getUniqueDocumenti ($ movimenti );
125125 $ scadenze = $ this ->getScadenzePerDocumenti ($ documenti );
126126
127+ if (!empty ($ scadenza ) && $ singola ) {
128+ $ scadenze = [$ scadenza ->iddocumento => [$ scadenza ->id ]];
129+ }
130+
127131 foreach ($ movimenti as $ movimento ) {
128132 $ this ->correggiScadenza ($ movimento , $ scadenze [$ movimento ->iddocumento ], $ movimento ->iddocumento );
129133 }
@@ -197,49 +201,73 @@ protected function correggiScadenza(Movimento $movimento, $scadenze = null, $id_
197201 $ dir = $ documento ->direzione ;
198202 }
199203
200- foreach ($ scadenze as $ scadenza ) {
201- $ totale_movimenti += Movimento::where ('id_scadenza ' , '= ' , $ scadenza )
202- ->where ('totale ' , '> ' , 0 )
203- ->sum ('totale ' );
204- }
204+ // Se il movimento ha una scadenza specifica, aggiorna solo quella
205+ if (count ($ scadenze ) == 1 ) {
206+ $ scadenza = Scadenza::find ($ movimento ->id_scadenza );
207+ if (!empty ($ scadenza )) {
208+ // Calcola il totale dei movimenti per questa specifica scadenza
209+ $ totale_movimenti_scadenza = $ movimento ->totale ;
205210
206- $ totale_da_distribuire = abs ($ totale_movimenti );
211+ $ scadenza_da_pagare = abs ($ scadenza ->da_pagare );
212+ $ pagato_assoluto = abs ($ totale_movimenti_scadenza );
207213
208- // Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato
209- // Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
210- foreach ($ scadenze as $ scadenza ) {
211- $ scadenza = Scadenza::find ($ scadenza );
214+ // Limita il pagato all'importo da pagare della scadenza
215+ $ pagato_assoluto = min ($ pagato_assoluto , $ scadenza_da_pagare );
212216
213- if (empty ($ scadenza )) {
214- continue ;
215- }
216- $ scadenza_da_pagare = abs ($ scadenza ->da_pagare );
217+ // Applica il segno corretto in base alla direzione
218+ $ pagato = ($ dir == 'uscita ' ? -$ pagato_assoluto : $ pagato_assoluto );
219+ $ pagato = $ is_nota ? -$ pagato : $ pagato ;
217220
218- // Nel caso in cui il totale da distribuire sia stato esaurito, imposta il pagato a zero
219- if ($ totale_da_distribuire <= 0 ) {
220- $ pagato = 0 ;
221+ // Salvataggio delle informazioni
222+ $ scadenza ->pagato = $ pagato ;
223+ $ scadenza ->data_pagamento = $ pagato ? $ this ->data : null ;
224+ $ scadenza ->save ();
221225 }
222-
223- // Se il totale da distribuire è superiore al valore da pagare della scadenza, completa il pagamento
224- elseif ( $ totale_da_distribuire >= $ scadenza_da_pagare ) {
225- $ pagato = $ scadenza_da_pagare ;
226- $ totale_da_distribuire -= $ scadenza_da_pagare ;
226+ } else {
227+ foreach ( $ scadenze as $ scadenza) {
228+ $ totale_movimenti += Movimento:: where ( ' id_scadenza ' , ' = ' , $ scadenza )
229+ -> where ( ' totale ' , ' > ' , 0 )
230+ -> sum ( ' totale ' ) ;
227231 }
228232
229- // In caso alternativo, assegno il rimanente da distribuire interamente alla scadenza
230- else {
231- $ pagato = $ totale_da_distribuire ;
232- $ totale_da_distribuire = 0 ;
233+ $ totale_da_distribuire = abs ($ totale_movimenti );
234+
235+ // Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato
236+ // Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
237+ foreach ($ scadenze as $ scadenza ) {
238+ $ scadenza = Scadenza::find ($ scadenza );
239+
240+ if (empty ($ scadenza )) {
241+ continue ;
242+ }
243+ $ scadenza_da_pagare = abs ($ scadenza ->da_pagare );
244+
245+ // Nel caso in cui il totale da distribuire sia stato esaurito, imposta il pagato a zero
246+ if ($ totale_da_distribuire <= 0 ) {
247+ $ pagato = 0 ;
248+ }
249+
250+ // Se il totale da distribuire è superiore al valore da pagare della scadenza, completa il pagamento
251+ elseif ($ totale_da_distribuire >= $ scadenza_da_pagare ) {
252+ $ pagato = $ scadenza_da_pagare ;
253+ $ totale_da_distribuire -= $ scadenza_da_pagare ;
254+ }
255+
256+ // In caso alternativo, assegno il rimanente da distribuire interamente alla scadenza
257+ else {
258+ $ pagato = $ totale_da_distribuire ;
259+ $ totale_da_distribuire = 0 ;
260+ }
261+
262+ // Inversione di segno per la direzione del movimento contabile
263+ $ pagato = ($ dir == 'uscita ' ? -$ pagato : $ pagato );
264+ $ pagato = $ is_nota ? -$ pagato : $ pagato ; // Inversione di segno per le note
265+
266+ // Salvataggio delle informazioni
267+ $ scadenza ->pagato = $ pagato ;
268+ $ scadenza ->data_pagamento = $ pagato ? $ this ->data : null ;
269+ $ scadenza ->save ();
233270 }
234-
235- // Inversione di segno per la direzione del movimento contabile
236- $ pagato = ($ dir == 'uscita ' ? -$ pagato : $ pagato );
237- $ pagato = $ is_nota ? -$ pagato : $ pagato ; // Inversione di segno per le note
238-
239- // Salvataggio delle informazioni
240- $ scadenza ->pagato = $ pagato ;
241- $ scadenza ->data_pagamento = $ pagato ? $ this ->data : null ;
242- $ scadenza ->save ();
243271 }
244272 }
245273 }
0 commit comments