From 448b79ade8f234861466d5faea0e3c84e69a42ee Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Wed, 16 Feb 2022 15:56:36 +0100 Subject: [PATCH] Spostamento generazione xml nella classe Fattura --- modules/fatture/actions.php | 80 +++++++++++++-------------------- modules/fatture/src/Fattura.php | 40 ++++++++++++++++- 2 files changed, 70 insertions(+), 50 deletions(-) diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 36de300cf..2a5fbc054 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -64,8 +64,6 @@ switch (post('op')) { break; case 'update': - $stato_precedente = $fattura->stato; - $stato = Stato::find(post('idstatodocumento')); $fattura->stato()->associate($stato); @@ -145,60 +143,46 @@ switch (post('op')) { $fattura->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale')); - $fattura->save(); + $results = $fattura->save(); + $message = ''; - // Operazioni automatiche per le Fatture Elettroniche - if ($fattura->direzione == 'entrata' && $stato_precedente->descrizione == 'Bozza' && $stato['descrizione'] == 'Emessa') { - $stato_fe = $database->fetchOne('SELECT * FROM fe_stati_documento WHERE codice = '.prepare($fattura->codice_stato_fe)); - $abilita_genera = empty($fattura->codice_stato_fe) || intval($stato_fe['is_generabile']); + foreach ($results as $numero => $result) { + foreach ($result as $title => $links) { + foreach ($links as $link => $errors) { + if (empty($title)) { + flash()->warning(tr('La fattura elettronica num. _NUM_ potrebbe avere delle irregolarità!', [ + '_NUM_' => $numero, + ]).' '.tr('Controllare i seguenti campi: _LIST_', [ + '_LIST_' => implode(', ', $errors), + ]).'.'); + } else { + $message .= ' +

'.$title.' '.$link.'

+ '; } - - flash()->warning($message); } } + if ($message) { + // Messaggi informativi sulle problematiche + $message = tr('La fattura elettronica numero _NUM_ non è stata generata a causa di alcune informazioni mancanti', [ + '_NUM_' => $numero, + ]).':'.$message; + + flash()->warning($message); + } + aggiorna_sedi_movimenti('documenti', $id_record); // Controllo sulla presenza di fattura di acquisto con lo stesso numero secondario nello stesso periodo diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index bf776d600..ff3a95c9c 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -565,7 +565,7 @@ class Fattura extends Document $is_fiscale = $this->isFiscale(); // Salvataggio effettivo - $result = parent::save($options); + parent::save($options); // Fix dei campi statici $this->id_riga_bollo = $this->gestoreBollo->manageRigaMarcaDaBollo(); @@ -581,7 +581,7 @@ class Fattura extends Document } // Salvataggio effettivo - $result = parent::save($options); + parent::save($options); // Operazioni al cambiamento di stato // Bozza o Annullato -> Stato diverso da Bozza o Annullato @@ -621,6 +621,42 @@ class Fattura extends Document } } + // Operazioni automatiche per le Fatture Elettroniche + if ($this->direzione == 'entrata' && $stato_precedente->descrizione == 'Bozza' && $this->stato['descrizione'] == 'Emessa') { + $stato_fe = database()->fetchOne('SELECT * FROM fe_stati_documento WHERE codice = '.prepare($this->codice_stato_fe)); + $abilita_genera = empty($this->codice_stato_fe) || intval($stato_fe['is_generabile']); + + // Generazione automatica della Fattura Elettronica + $checks = FatturaElettronica::controllaFattura($this); + $fattura_elettronica = new FatturaElettronica($this->id); + if ($abilita_genera && empty($checks)) { + $fattura_elettronica->save(base_dir().'/'.FatturaElettronica::getDirectory()); + + if (!$fattura_elettronica->isValid()) { + $errors = $fattura_elettronica->getErrors(); + + $result[$this->numero_esterno][0][0] = $errors; + } + } elseif (!empty($checks)) { + // Rimozione eventuale fattura generata erronamente + // Fix per la modifica di dati interni su fattura già generata + if ($abilita_genera) { + $fattura_elettronica->delete(); + } + foreach ($checks as $check) { + $errors = []; + foreach ($check['errors'] as $error) { + if (!empty($error)) { + $errors = $error; + } + } + if (!empty($errors)) { + $result[$this->numero_esterno][$check['name']][$check['link']] = $check['errors']; + } + } + } + } + return $result; }