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;
}