From b9941211a49e31b50ce7bc09fe8a695b840d4c9d Mon Sep 17 00:00:00 2001 From: Pek5892 Date: Tue, 28 May 2024 13:03:11 +0200 Subject: [PATCH] Fix minore --- modules/primanota/src/Mastrino.php | 84 ++++++++++++++++-------------- update/2_5_2.php | 2 +- 2 files changed, 46 insertions(+), 40 deletions(-) diff --git a/modules/primanota/src/Mastrino.php b/modules/primanota/src/Mastrino.php index 7285f95a7..9554dc87e 100755 --- a/modules/primanota/src/Mastrino.php +++ b/modules/primanota/src/Mastrino.php @@ -23,13 +23,14 @@ use Common\SimpleModelTrait; use Illuminate\Database\Eloquent\Model; use Modules\Fatture\Fattura; use Modules\Fatture\Stato; +use Modules\Scadenzario\Scadenza; + /* * Struttura ausiliaria dedicata alla raggruppamento e alla gestione di un insieme di Movimenti, unificati attraverso il numero di mastrino. * * Questa classe non è utilizzabile come normale modello Eloquent poichè non prevede operazioni di modifica a livello di database. * La creazione di un record può essere utilizzata per la gestione di un insieme di Movimenti, mentre l'eliminazione provoca la rimozione in cascata dei Movimenti associati al Mastrino. */ -use Modules\Scadenzario\Scadenza; class Mastrino extends Model { @@ -203,54 +204,59 @@ class Mastrino extends Model { $is_nota = false; $documento = Fattura::find($id_documento); - - if ($scadenze) { + $totale_da_distribuire = 0; + + if (!empty($scadenze)) { if (empty($documento)) { $dir = $movimento->totale < 0 ? 'uscita' : 'entrata'; } else { $dir = $documento->direzione; } - $totale_da_distribuire = 0; foreach ($scadenze as $scadenza) { - $totale_da_distribuire += $movimento['totale']; - } - } - - $totale_da_distribuire = abs($totale_da_distribuire); - - // Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato - // Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive - - foreach ($scadenze as $scadenza) { - $scadenza = Scadenza::find($scadenza); - $scadenza_da_pagare = abs($scadenza->da_pagare); - - // Nel caso in cui il totale da distribuire sia stato esaurito, imposta il pagato a zero - if ($totale_da_distribuire <= 0) { - $pagato = 0; + $totale_da_distribuire += ($movimento['totale'] != 0 ? Movimento::where('id_scadenza', '=', $scadenza->id) + ->where('totale', '>', 0) + ->sum('totale') : 0); } - // Se il totale da distribuire è superiore al valore da pagare della scadenza, completa il pagamento - elseif ($totale_da_distribuire >= $scadenza_da_pagare) { - $pagato = $scadenza_da_pagare; - $totale_da_distribuire -= $scadenza_da_pagare; + $totale_da_distribuire = abs($totale_da_distribuire); + + // Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato + // Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive + foreach ($scadenze as $scadenza) { + $scadenza = Scadenza::find($scadenza); + + if (empty($scadenza)) { + continue; + } + $scadenza_da_pagare = abs($scadenza->da_pagare); + + // Nel caso in cui il totale da distribuire sia stato esaurito, imposta il pagato a zero + if ($totale_da_distribuire <= 0) { + $pagato = 0; + } + + // Se il totale da distribuire è superiore al valore da pagare della scadenza, completa il pagamento + elseif ($totale_da_distribuire >= $scadenza_da_pagare) { + $pagato = $scadenza_da_pagare; + $totale_da_distribuire -= $scadenza_da_pagare; + } + + // In caso alternativo, assegno il rimanente da distribuire interamente alla scadenza + else { + $pagato = $totale_da_distribuire; + $totale_da_distribuire = 0; + } + + // Inversione di segno per la direzione del movimento contabile + $pagato = ($dir == 'uscita' ? -$pagato : $pagato); + $pagato = $is_nota ? -$pagato : $pagato; // Inversione di segno per le note + + // Salvataggio delle informazioni + $scadenza->pagato = $pagato; + $scadenza->data_pagamento = $pagato ? $this->data : null; + $scadenza->save(); } - - // In caso alternativo, assegno il rimanente da distribuire interamente alla scadenza - else { - $pagato = $totale_da_distribuire; - $totale_da_distribuire = 0; - } - - // Inversione di segno per la direzione del movimento contabile - $pagato = ($dir == 'uscita' ? -$pagato : $pagato); - $pagato = $is_nota ? -$pagato : $pagato; // Inversione di segno per le note - - // Salvataggio delle informazioni - $scadenza->pagato = $pagato; - $scadenza->data_pagamento = $pagato ? $this->data : null; - $scadenza->save(); } } } diff --git a/update/2_5_2.php b/update/2_5_2.php index f9ee5d5d6..fe83cb620 100644 --- a/update/2_5_2.php +++ b/update/2_5_2.php @@ -4,7 +4,7 @@ include_once __DIR__.'/core.php'; use Modules\PrimaNota\Mastrino; -$mastrini = Mastrino::where('primanota', 1)->where('id_scadenza','!=', null)->groupBy('idmastrino')->get(); +$mastrini = Mastrino::where('primanota', 1)->where('id_scadenza','!=', null)->where('iddocumento','!=', null)->groupBy('idmastrino')->get(); foreach ($mastrini as $mastrino) { $mastrino->aggiornaScadenzario(); }