From 561045be043ba6e41f1ad53de2000ef704c5006b Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 16 Nov 2018 10:41:21 +0100 Subject: [PATCH] Fix ProgressivoInvio --- plugins/exportPA/actions.php | 6 +- plugins/exportPA/src/FatturaElettronica.php | 67 +++++++++++---------- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/plugins/exportPA/actions.php b/plugins/exportPA/actions.php index 225493142..0412c8652 100644 --- a/plugins/exportPA/actions.php +++ b/plugins/exportPA/actions.php @@ -14,7 +14,11 @@ switch (filter('op')) { flash()->info(tr('Fattura elettronica generata correttamente!')); if (!$fattura_pa->isValid()) { - flash()->warning(tr('La fattura elettronica potrebbe avere delle irregolarità!')); + $errors = $fattura_pa->getErrors(); + + flash()->warning(tr('La fattura elettronica potrebbe avere delle irregolarità!').' '.tr('Controllare i seguenti campi: _LIST_', [ + '_LIST_' => implode(', ', $errors), + ]).'.'); } } else { flash()->error(tr('Impossibile generare la fattura elettronica')); diff --git a/plugins/exportPA/src/FatturaElettronica.php b/plugins/exportPA/src/FatturaElettronica.php index 9a328fb4f..8902d29bc 100644 --- a/plugins/exportPA/src/FatturaElettronica.php +++ b/plugins/exportPA/src/FatturaElettronica.php @@ -34,11 +34,12 @@ class FatturaElettronica /** @var array Righe del documento */ protected $righe = []; - /** @var array Stato di validazione interna dell'XML della fattura */ - protected $is_valid = null; /** @var array XML della fattura */ protected $xml = null; + /** @var array Irregolarità nella fattura XML */ + protected $errors = null; + public function __construct($id_documento) { $database = database(); @@ -148,11 +149,21 @@ class FatturaElettronica */ public function isValid() { - if (empty($this->is_valid)) { + return empty($this->getErrors()); + } + + /** + * Restituisce l'elenco delle irregolarità interne all'XML della fattura. + * + * @return bool + */ + public function getErrors() + { + if (!isset($this->errors)) { $this->toXML(); } - return $this->is_valid; + return $this->errors; } /** @@ -191,7 +202,7 @@ class FatturaElettronica } // Inizializzazione PEC solo se anagrafica azienda e codice destinatario non compilato, per privato e PA la PEC non serve - if (empty($cliente['codice_destinatario']) and $cliente['tipo'] == 'Azienda' ){ + if (empty($cliente['codice_destinatario']) && $cliente['tipo'] == 'Azienda') { $result['PECDestinatario'] = $cliente['pec']; } @@ -431,12 +442,12 @@ class FatturaElettronica $result = []; foreach ($contratti as $contratto) { - if (!empty($contratto['id_documento_fe'])) { - $dati_contratto = [ - 'IdDocumento' => $contratto['id_documento_fe'], - ]; - } + $dati_contratto = [ + 'IdDocumento' => $contratto['id_documento_fe'], + ]; + } + if (!empty($contratto['codice_cig'])) { $dati_contratto['CodiceCIG'] = $contratto['codice_cig']; } @@ -468,13 +479,12 @@ class FatturaElettronica // Controllo le le righe per la fatturazione di contratti $dati_contratti = static::getDatiContratto($fattura); if (!empty($dati_contratti)) { - foreach ($dati_contratti as $dato) { - if (!empty($dato)){ - $result[] = [ - 'DatiContratto' => $dato, - ]; - } + if (!empty($dato)) { + $result[] = [ + 'DatiContratto' => $dato, + ]; + } } } @@ -796,16 +806,11 @@ class FatturaElettronica if (!empty($validator)) { $validation = $validator->validate($output); - $this->is_valid &= $validation; - $errors = array(); - if (!intval($validation)){ - $_SESSION['warnings'][] = $key; - } - // Per debug - //flash()->warning($key.': '.intval($validation)); + // Segnalazione dell'irregolarità + if (!intval($validation)) { + $this->errors[] = $key; + } } - - } return $output; @@ -844,7 +849,7 @@ class FatturaElettronica public function save($directory) { // Generazione nome XML - $filename = $this->getFilename(); + $filename = $this->getFilename(true); // Salvataggio del file $file = rtrim($directory, '/').'/'.$filename; @@ -884,12 +889,12 @@ class FatturaElettronica * * @return string */ - public function getFilename() + public function getFilename($new = false) { $azienda = static::getAzienda(); - $codice = 'IT'.(empty($azienda['piva']) ? $azienda['codice_fiscale'] : $azienda['piva']); + $prefix = 'IT'.(empty($azienda['piva']) ? $azienda['codice_fiscale'] : $azienda['piva']); - if (empty($this->documento['codice_xml'])) { + if (empty($this->documento['codice_xml']) || !empty($new)) { $database = database(); do { @@ -901,7 +906,7 @@ class FatturaElettronica $this->documento['codice_xml'] = $code; } - return $codice.'_'.$this->documento['codice_xml'].'.xml'; + return $prefix.'_'.$this->documento['codice_xml'].'.xml'; } /** @@ -912,7 +917,7 @@ class FatturaElettronica public function toXML() { if (empty($this->xml)) { - $this->is_valid = true; + $this->errors = []; $cliente = $this->getCliente();