Skip to content

Commit d06a277

Browse files
committed
fix: chiusura scadenze
1 parent e3f1164 commit d06a277

4 files changed

Lines changed: 71 additions & 40 deletions

File tree

modules/primanota/actions.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
$id_anagrafica = post('id_anagrafica');
3434
$chiudi_scadenza = post('chiudi_scadenza_add');
3535
$mastrino = Mastrino::build($descrizione, $data, $is_insoluto, true, $id_anagrafica);
36+
$singola = post('singola');
3637

3738
$conti = post('idconto_add');
3839
$scadenze = [];
@@ -60,7 +61,7 @@
6061
}
6162
}
6263

63-
$mastrino->aggiornaScadenzario();
64+
$mastrino->aggiornaScadenzario(null, $scadenza, $singola);
6465

6566
if ($chiudi_scadenza) {
6667
foreach ($scadenze as $id_scadenza) {

modules/primanota/add.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
// ID predefiniti
5959
$singola_scadenza = get('single') != null;
6060
$is_insoluto = get('is_insoluto') != null;
61+
$singola = get('singola') != null;
6162

6263
$id_documenti = $id_documenti ?: get('id_documenti');
6364
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
@@ -277,7 +278,8 @@
277278
<input type="hidden" name="crea_modello" id="crea_modello" value="0">
278279
<input type="hidden" name="idmastrino" id="idmastrino" value="0">
279280
<input type="hidden" name="is_insoluto" value="'.$is_insoluto.'">
280-
<input type="hidden" name="id_anagrafica" id="id_anagrafica" value="'.$id_anagrafica.'">';
281+
<input type="hidden" name="id_anagrafica" id="id_anagrafica" value="'.$id_anagrafica.'">
282+
<input type="hidden" name="singola" id="singola" value="'.$singola.'">';
281283

282284
if ($permetti_modelli) {
283285
echo '

modules/primanota/src/Mastrino.php

Lines changed: 64 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

modules/scadenzario/edit.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@
260260
</td>
261261
262262
<td>
263-
<a onclick="launch_modal(\''.tr('Registra contabile pagamento').'\', \''.base_path().'/add.php?id_module='.$id_modulo_prima_nota.'&id_scadenze='.$scadenza['id'].'\');" class="btn btn-sm btn-primary">
263+
<a onclick="launch_modal(\''.tr('Registra contabile pagamento').'\', \''.base_path().'/add.php?id_module='.$id_modulo_prima_nota.'&id_scadenze='.$scadenza['id'].'&singola=1\');" class="btn btn-sm btn-primary">
264264
<i class="fa fa-euro"></i> '.($dir == 'entrata' ? tr('Incassa') : tr('Paga')).'
265265
</a>
266266
</td>
@@ -353,7 +353,7 @@
353353
</td>
354354
355355
<td>
356-
<a onclick="launch_modal(\''.tr('Registra contabile pagamento').'\', \''.base_path().'/add.php?id_module='.$id_modulo_prima_nota.'&id_scadenze=-id-\');" class="btn btn-sm btn-primary">
356+
<a onclick="launch_modal(\''.tr('Registra contabile pagamento').'\', \''.base_path().'/add.php?id_module='.$id_modulo_prima_nota.'&id_scadenze=-id-&singola=1\');" class="btn btn-sm btn-primary">
357357
<i class="fa fa-euro"></i> '.($dir == 'entrata' ? tr('Incassa') : tr('Paga')).'
358358
</a>
359359
</td>

0 commit comments

Comments
 (0)