From 9df7ed0ae476ea765d2633815b540c0a3fed7b66 Mon Sep 17 00:00:00 2001 From: Dasc3er Date: Wed, 31 Mar 2021 22:03:55 +0200 Subject: [PATCH] Correzioni Fattura elettronica Fix importazione righe in Fattura da altri documenti. --- assets/src/js/functions/input.js | 2 +- modules/articoli/bulk.php | 7 +++---- modules/ddt/edit.php | 2 +- modules/fatture/actions.php | 2 +- .../fatture/src/Components/RelationTrait.php | 4 +++- modules/fatture/src/Fattura.php | 16 ++++++++++++++-- modules/interventi/bulk.php | 2 +- plugins/exportFE/actions.php | 2 +- plugins/exportFE/download.php | 3 ++- plugins/exportFE/edit.php | 4 +--- plugins/exportFE/init.php | 4 ++-- plugins/exportFE/src/FatturaElettronica.php | 19 +++++++++++-------- plugins/exportFE/src/Interaction.php | 14 ++++++++------ 13 files changed, 49 insertions(+), 32 deletions(-) diff --git a/assets/src/js/functions/input.js b/assets/src/js/functions/input.js index f63f0c743..e54444529 100644 --- a/assets/src/js/functions/input.js +++ b/assets/src/js/functions/input.js @@ -103,7 +103,7 @@ Input.prototype.init = function () { } // Inizializzazione per textarea - else if (this.element.hasClass('autosize') || htmlElement.hasAttribute('maxlength')) { + else if (this.element.hasClass('autosize') || this.element.attr('maxlength')) { if (this.element.hasClass('autosize')) initCompleted = initTextareaInput(htmlElement); diff --git a/modules/articoli/bulk.php b/modules/articoli/bulk.php index 3a3c0164e..a39f620d2 100644 --- a/modules/articoli/bulk.php +++ b/modules/articoli/bulk.php @@ -24,8 +24,8 @@ use Modules\Articoli\Articolo; use Modules\Preventivi\Components\Articolo as ArticoloPreventivo; use Modules\Preventivi\Preventivo; use Modules\TipiIntervento\Tipo as TipoSessione; -use Prints; use Plugins\DettagliArticolo\DettaglioPrezzo; +use Prints; switch (post('op')) { case 'change-acquisto': @@ -37,7 +37,7 @@ switch (post('op')) { $articolo->prezzo_acquisto = $new_prezzo_acquisto; $articolo->save(); - if(!empty($articolo->id_fornitore)){ + if (!empty($articolo->id_fornitore)) { $prezzo_predefinito = DettaglioPrezzo::dettaglioPredefinito($articolo->id, $articolo->id_fornitore, 'uscita')->first(); $prezzo_predefinito->setPrezzoUnitario($new_prezzo_acquisto); $prezzo_predefinito->save(); @@ -47,7 +47,7 @@ switch (post('op')) { flash()->info(tr('Prezzi di acquisto aggiornati!')); break; - + case 'change-vendita': foreach ($id_records as $id) { $articolo = Articolo::find($id); @@ -62,7 +62,6 @@ switch (post('op')) { break; - case 'delete-bulk': foreach ($id_records as $id) { $elementi = $dbo->fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, `co_documenti`.`numero`, `co_documenti`.`numero_esterno`, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idarticolo` = '.prepare($id).') diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index d54c3823b..694b8ecdd 100755 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -192,7 +192,7 @@ if ($module['name'] == 'Ddt di vendita') { 'id' => $record['idspedizione'], ])['esterno']; ?> - {[ "type": "select", "label": "", "name": "idvettore", "ajax-source": "vettori", "value": "$idvettore$", "disabled": , "required": , "icon-after": "add||tipoanagrafica=Vettore&readonly_tipo=1|btn_idvettore|" ]} + {[ "type": "select", "label": "", "name": "idvettore", "ajax-source": "vettori", "value": "$idvettore$", "disabled": , "required": , "icon-after": "add||tipoanagrafica=Vettore&readonly_tipo=1|btn_idvettore|" ]}
diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 5428139e9..40702f382 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -718,7 +718,7 @@ switch (post('op')) { $copia = $riga->copiaIn($fattura, $qta); - $copia->id_conto = ($documento->direzione=='entrata' ? ($articolo->idconto_vendita ?: $id_conto) : ($articolo->idconto_acquisto ?: $id_conto)); + $copia->id_conto = ($documento->direzione == 'entrata' ? ($articolo->idconto_vendita ?: $id_conto) : ($articolo->idconto_acquisto ?: $id_conto)); $copia->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto; $copia->id_ritenuta_acconto = $id_ritenuta_acconto; $copia->id_rivalsa_inps = $id_rivalsa_inps; diff --git a/modules/fatture/src/Components/RelationTrait.php b/modules/fatture/src/Components/RelationTrait.php index 831450773..c4545aa5c 100755 --- a/modules/fatture/src/Components/RelationTrait.php +++ b/modules/fatture/src/Components/RelationTrait.php @@ -202,7 +202,9 @@ trait RelationTrait list($qta, $diff) = $this->parseQta($value); parent::setQtaAttribute($value); - if ($this->fattura->isNota() && $this->hasOriginalComponent()) { + // Individuazione fattura corrente (fix in caso di creazione diretta) + $fattura = $this->fattura; + if (isset($fattura) && $fattura->isNota() && $this->hasOriginalComponent()) { $source = $this->getOriginalComponent(); // Aggiornamento della quantità evasa di origine diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 4832b877f..332df547a 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -499,7 +499,7 @@ class Fattura extends Document return $fe->toXML(); } - $file = $this->uploads()->where('name', 'Fattura Elettronica')->first(); + $file = $this->uploads()->where('name', '=', 'Fattura Elettronica')->first(); return $file->getContent(); } @@ -535,6 +535,18 @@ class Fattura extends Document ->first(); } + /** + * Restituisce la fattura elettronica registrata come allegato. + * + * @return Upload|null + */ + public function getFatturaElettronica() + { + return $this->uploads() + ->where('name', '=', 'Fattura Elettronica') + ->first(); + } + /** * Controlla se la fattura di acquisto è elettronica. * @@ -542,7 +554,7 @@ class Fattura extends Document */ public function isFE() { - $file = $this->uploads()->where('name', 'Fattura Elettronica')->first(); + $file = $this->getFatturaElettronica(); return !empty($this->progressivo_invio) and file_exists($file->filepath); } diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php index e3cbac264..86cab6784 100755 --- a/modules/interventi/bulk.php +++ b/modules/interventi/bulk.php @@ -128,7 +128,7 @@ switch (post('op')) { ])); } - if(!empty(array_diff($id_records, $interventi))){ + if (!empty(array_diff($id_records, $interventi))) { flash()->warning(tr('_NUM_ interventi non sono stati fatturati.', [ '_NUM_' => sizeof(array_diff($id_records, $interventi)), ])); diff --git a/plugins/exportFE/actions.php b/plugins/exportFE/actions.php index c5b2e3e30..d72859d86 100755 --- a/plugins/exportFE/actions.php +++ b/plugins/exportFE/actions.php @@ -25,7 +25,7 @@ use Plugins\ReceiptFE\Ricevuta; switch (filter('op')) { case 'generate': if (!empty($fattura_pa)) { - $file = $fattura_pa->save($upload_dir); + $file = $fattura_pa->save(); flash()->info(tr('Fattura elettronica generata correttamente!')); diff --git a/plugins/exportFE/download.php b/plugins/exportFE/download.php index 9bad5b965..d46057841 100755 --- a/plugins/exportFE/download.php +++ b/plugins/exportFE/download.php @@ -19,4 +19,5 @@ include_once __DIR__.'/init.php'; -download($upload_dir.'/'.$fattura_pa->getFilename()); +$file = $fattura->getFatturaElettronica(); +download(base_dir().'/'.$file->filepath, $file->original_name); diff --git a/plugins/exportFE/edit.php b/plugins/exportFE/edit.php index adb999f1a..305fec92d 100755 --- a/plugins/exportFE/edit.php +++ b/plugins/exportFE/edit.php @@ -82,9 +82,7 @@ echo ' '; - $file = $generata ? Upload::where('original', $fattura_pa->getFilename()) - ->where('id_record', $id_record) - ->first() : null; + $file = $generata ? $fattura->getFatturaElettronica() : null; echo ' diff --git a/plugins/exportFE/init.php b/plugins/exportFE/init.php index d78dfe2a6..4dca2ff76 100755 --- a/plugins/exportFE/init.php +++ b/plugins/exportFE/init.php @@ -19,11 +19,11 @@ include_once __DIR__.'/../../core.php'; +use Modules\Fatture\Fattura; use Plugins\ExportFE\FatturaElettronica; try { + $fattura = Fattura::find($id_record); $fattura_pa = new FatturaElettronica($id_record); } catch (UnexpectedValueException $e) { } - -$upload_dir = base_dir().'/'.FatturaElettronica::getDirectory(); diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index f968a3690..8b2842d62 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -78,15 +78,14 @@ class FatturaElettronica } /** - * Restituisce le informazioni sull'anagrafica azienda. - * * @return bool */ public function isGenerated() { $documento = $this->getDocumento(); + $file = $documento->getFatturaElettronica(); - return !empty($documento['progressivo_invio']) && file_exists(base_dir().'/'.static::getDirectory().'/'.$this->getFilename()); + return !empty($documento['progressivo_invio']) && file_exists(base_dir().'/'.$file->filepath); } /** @@ -293,22 +292,26 @@ class FatturaElettronica /** * Salva il file XML. * - * @param string $directory - * * @return string Nome del file */ - public function save($directory) + public function save() { $this->delete(); $name = 'Fattura Elettronica'; - $info = $this->getUploadData(); + $data = $this->getUploadData(); // Generazione nome XML $filename = $this->getFilename(true); + // Rimozione allegato precedente + $precedente = $this->getDocumento()->getFatturaElettronica(); + if (!empty($precedente)){ + $precedente->delete(); + } + // Registrazione come allegato - Uploads::upload($this->toXML(), array_merge($info, [ + Uploads::upload($this->toXML(), array_merge($data, [ 'name' => $name, 'original_name' => $filename, ])); diff --git a/plugins/exportFE/src/Interaction.php b/plugins/exportFE/src/Interaction.php index 2a282d4d3..8c5b0ca16 100755 --- a/plugins/exportFE/src/Interaction.php +++ b/plugins/exportFE/src/Interaction.php @@ -20,6 +20,7 @@ namespace Plugins\ExportFE; use API\Services; +use Modules\Fatture\Fattura; use UnexpectedValueException; /** @@ -32,12 +33,13 @@ class Interaction extends Services public static function sendInvoice($id_record) { try { - $fattura = new FatturaElettronica($id_record); - $file = base_dir().'/'.FatturaElettronica::getDirectory().'/'.$fattura->getFilename(); + $fattura_elettronica = new FatturaElettronica($id_record); + $fattura = Fattura::find($id_record); + $file = $fattura->getFatturaElettronica(); $response = static::request('POST', 'invio_fattura_xml', [ - 'xml' => file_get_contents($file), - 'filename' => $fattura->getFilename(), + 'xml' => $file->getContent(), + 'filename' => $fattura_elettronica->getFilename(), ]); $body = static::responseBody($response); @@ -70,8 +72,8 @@ class Interaction extends Services public static function getInvoiceRecepits($id_record) { try { - $fattura = new FatturaElettronica($id_record); - $filename = $fattura->getFilename(); + $fattura_elettronica = new FatturaElettronica($id_record); + $filename = $fattura_elettronica->getFilename(); $response = static::request('POST', 'notifiche_fattura', [ 'name' => $filename,