Spostamento generazione xml nella classe Fattura

This commit is contained in:
MatteoPistorello 2022-02-16 15:56:36 +01:00
parent 619e4f6c57
commit 448b79ade8
2 changed files with 70 additions and 50 deletions

View File

@ -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 .= '
<p><b>'.$title.' '.$link.'</b></p>
<ul>';
// Generazione automatica della Fattura Elettronica
$checks = FatturaElettronica::controllaFattura($fattura);
$fattura_elettronica = new FatturaElettronica($id_record);
if ($abilita_genera && empty($checks)) {
$file = $fattura_elettronica->save(base_dir().'/'.FatturaElettronica::getDirectory());
flash()->info(tr('Fattura elettronica generata correttamente!'));
if (!$fattura_elettronica->isValid()) {
$errors = $fattura_elettronica->getErrors();
flash()->warning(tr('La fattura elettronica potrebbe avere delle irregolarità!').' '.tr('Controllare i seguenti campi: _LIST_', [
'_LIST_' => implode(', ', $errors),
]).'.');
}
}
// Visualizzazione degli errori
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();
}
// Messaggi informativi sulle problematiche
$message = tr('La fattura elettronica non è stata generata a causa di alcune informazioni mancanti').':';
foreach ($checks as $check) {
$message .= '
<p><b>'.$check['name'].' '.$check['link'].'</b></p>
<ul>';
foreach ($check['errors'] as $error) {
if (!empty($error)) {
$message .= '
<li>'.$error.'</li>';
foreach ($errors as $error) {
if (!empty($error)) {
$message .= '
<li>'.$error.'</li>';
}
}
$message .= '
</ul>';
}
$message .= '
</ul>';
}
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

View File

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