From 66c038036d9fb3b15ed00d657888c8816e548960 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 8 Nov 2019 15:50:07 +0100 Subject: [PATCH] Correzione ricalcolo scadenze --- modules/fatture/actions.php | 44 --------------------------------- modules/fatture/src/Fattura.php | 44 ++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 45 deletions(-) diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 5b0ff18cf..40d841962 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -105,51 +105,7 @@ switch (post('op')) { $fattura->save(); - // Operazioni sulla dichiarazione d'intento - if (!empty($dichiarazione_precedente) && $dichiarazione_precedente->id != $fattura->id_dichiarazione_intento) { - // Correzione dichiarazione precedente - $dichiarazione_precedente->fixTotale(); - $dichiarazione_precedente->save(); - - // Correzione nuova dichiarazione - $dichiarazione = $fattura->dichiarazione; - if (!empty($dichiarazione)) { - $dichiarazione->fixTotale(); - $dichiarazione->save(); - } - } - - // Ricalcolo inps, ritenuta e bollo (se la fattura non è stata pagata) - ricalcola_costiagg_fattura($id_record); - - // Elimino la scadenza e tutti i movimenti, poi se la fattura è emessa le ricalcolo - if ($stato['descrizione'] == 'Bozza' or $stato['descrizione'] == 'Annullata') { - elimina_scadenze($id_record); - //elimina_movimenti($id_record, 0); - //elimino movimento anche prima nota (se pagata o parzialmente pagata) - elimina_movimenti($id_record, 1); - } elseif ($stato['descrizione'] == 'Emessa') { - elimina_scadenze($id_record); - elimina_movimenti($id_record, 0); - } elseif (($stato['descrizione'] == 'Pagato' or $stato['descrizione'] == 'Parzialmente pagato') and ($dbo->fetchNum('SELECT id FROM co_scadenziario WHERE iddocumento = '.prepare($id_record)) == 0)) { - // aggiungo la scadenza come già pagata - aggiungi_scadenza($id_record, null, 1); - aggiungi_movimento($id_record, $dir); - } - - // Se la fattura è in stato "Emessa" posso inserirla in scadenzario e aprire il mastrino cliente - if ($stato['descrizione'] == 'Emessa') { - aggiungi_scadenza($id_record); - aggiungi_movimento($id_record, $dir); - } - if ($stato_precedente->descrizione == 'Bozza' && $stato['descrizione'] == 'Emessa') { - // Generazione numero fattura se non presente - if (empty($fattura->numero_esterno)) { - $fattura->numero_esterno = Fattura::getNextNumeroSecondario($fattura->data, $fattura->direzione, $fattura->id_segment); - $fattura->save(); - } - // Generazione automatica della Fattura Elettronica $stato_fe = empty($fattura->codice_stato_fe) || in_array($fattura->codice_stato_fe, ['GEN', 'NS', 'EC02']); $checks = FatturaElettronica::controllaFattura($fattura); diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 36fe493c2..84b903ca8 100644 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -496,7 +496,49 @@ class Fattura extends Document $this->attributes['rivalsainps'] = $this->rivalsa_inps; $this->attributes['ritenutaacconto'] = $this->ritenuta_acconto; - return parent::save($options); + // Informazioni sul cambio dei valori + $stato_precedente = Stato::find($this->original['idstatodocumento']); + $dichiarazione_precedente = Dichiarazione::find($this->original['id_dichiarazione_intento']); + + // Generazione numero fattura se non presente + if ($stato_precedente->descrizione == 'Bozza' && $this->stato['descrizione'] == 'Emessa' && empty($this->numero_esterno)) { + $this->numero_esterno = self::getNextNumeroSecondario($this->data, $this->direzione, $this->id_segment); + } + + // Salvataggio effettivo + $result = parent::save($options); + + // Operazioni al cambiamento di stato + if ( + in_array($stato_precedente->descrizione, ['Bozza', 'Annullata']) + && !in_array($this->stato['descrizione'], ['Bozza', 'Annullata']) + ) { + // Registrazione scadenze + $this->registraScadenze($this->stato['descrizione'] == 'Pagato'); + + // Registrazione movimenti + aggiungi_movimento($this->id, $this->direzione); + } elseif (in_array($this->stato['descrizione'], ['Bozza', 'Annullata'])) { + $this->rimuoviScadenze(); + + elimina_movimenti($this->id, 1); + } + + // Operazioni sulla dichiarazione d'intento + if (!empty($dichiarazione_precedente) && $dichiarazione_precedente->id != $this->id_dichiarazione_intento) { + // Correzione dichiarazione precedente + $dichiarazione_precedente->fixTotale(); + $dichiarazione_precedente->save(); + + // Correzione nuova dichiarazione + $dichiarazione = Dichiarazione::find($this->id_dichiarazione_intento); + if (!empty($dichiarazione)) { + $dichiarazione->fixTotale(); + $dichiarazione->save(); + } + } + + return $result; } public function delete()