diff --git a/modules/fatture/src/Gestori/Scadenze.php b/modules/fatture/src/Gestori/Scadenze.php index 36e1bf0ff..91e6b2122 100644 --- a/modules/fatture/src/Gestori/Scadenze.php +++ b/modules/fatture/src/Gestori/Scadenze.php @@ -21,6 +21,8 @@ namespace Modules\Fatture\Gestori; use Modules\Fatture\Fattura; use Modules\Scadenzario\Scadenza; +use Plugins\ImportFE\FatturaElettronica as FatturaElettronicaImport; +use Util\XML; /** * Classe dedicata alla gestione delle procedure di registrazione delle Scadenze di pagamento per una Fattura, con relativo supporto alla Fatturazione Elettronica per permettere l'importazione delle scadenze eventualmente registrate. @@ -108,14 +110,14 @@ class Scadenze */ protected function registraScadenzeFE($is_pagato = false) { - $xml = \Util\XML::read($this->fattura->getXML()); + $xml = XML::read($this->fattura->getXML()); $pagamenti = $xml['FatturaElettronicaBody']['DatiPagamento']['DettaglioPagamento']; if (!empty($pagamenti)) { $rate = isset($pagamenti[0]) ? $pagamenti : [$pagamenti]; foreach ($rate as $rata) { - $scadenza = $rata['DataScadenzaPagamento'] ?: $this->fattura->data; + $scadenza = !empty($rata['DataScadenzaPagamento']) ? FatturaElettronicaImport::parseDate($rata['DataScadenzaPagamento']) : $this->fattura->data; $importo = ($this->fattura->isNota()) ? $rata['ImportoPagamento'] : -$rata['ImportoPagamento']; self::registraScadenza($this->fattura, $importo, $scadenza, $is_pagato); diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index 7987fe618..bb6386fa7 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -362,6 +362,9 @@ class FatturaElettronica 'xmlns:ds' => 'http://www.w3.org/2000/09/xmldsig#', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation' => 'http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2.1 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2.1/Schema_del_file_xml_FatturaPA_versione_1.2.1.xsd', + + // Attributo SistemaEmittente + 'SistemaEmittente' => 'OpenSTAManager', ]; foreach ($attributes as $key => $value) { $rootNode->setAttribute($key, $value); diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index 23d6b21ea..5c9c13b21 100755 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -18,6 +18,7 @@ */ use Carbon\Carbon; +use Plugins\ImportFE\FatturaElettronica; include_once __DIR__.'/../../core.php'; @@ -170,11 +171,11 @@ if (!empty($pagamenti)) { // Scadenze di pagamento foreach ($metodi as $metodo) { $descrizione = !empty($metodo['ModalitaPagamento']) ? $database->fetchOne('SELECT descrizione FROM fe_modalita_pagamento WHERE codice = '.prepare($metodo['ModalitaPagamento']))['descrizione'] : ''; - $data = !empty($metodo['DataScadenzaPagamento']) ? Translator::dateToLocale($metodo['DataScadenzaPagamento']).' ' : ''; + $data = !empty($metodo['DataScadenzaPagamento']) ? FatturaElettronica::parseDate($metodo['DataScadenzaPagamento']) : ''; echo '
  • - '.$data.' + '.dateFormat($data).' '.moneyFormat($metodo['ImportoPagamento']).' ('.$descrizione.')
  • '; diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php index cd833684e..1b0dc26c1 100755 --- a/plugins/importFE/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -313,12 +313,7 @@ class FatturaElettronica public function saveFattura($id_pagamento, $id_sezionale, $id_tipo, $data_registrazione, $ref_fattura) { $dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']; - $data = $dati_generali['Data']; - - //Se rilevo che la data contine anche l'orario la formatto togliendo l'orario - if(strpos($data, '+')){ - $data = date('Y-m-d', strtotime($data)); - } + $data = self::parseDate($dati_generali['Data']); $fattura = $this->prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura); $this->fattura = $fattura; @@ -381,6 +376,11 @@ class FatturaElettronica return $this->getFattura()->id; } + public static function parseDate($data) + { + return date('Y-m-d', strtotime($data)); + } + protected function prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura) { $anagrafica = $this->saveAnagrafica(); diff --git a/update/2_4_18.sql b/update/2_4_18.sql index 03437f24d..e3501bb49 100644 --- a/update/2_4_18.sql +++ b/update/2_4_18.sql @@ -74,7 +74,7 @@ INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, ` (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Giacenze sedi'), 'Fornitore', '(SELECT `ragione_sociale` FROM `an_anagrafiche` WHERE `idanagrafica` = `id_fornitore`)', '6', '1', '0', '0', NULL, NULL, '1', '0', '1'), (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Giacenze sedi'), 'Prezzo di acquisto', 'prezzo_acquisto', '6', '1', '0', '1', NULL, NULL, '1', '1', '1'), (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Giacenze sedi'), 'Prezzo di vendita', 'prezzo_vendita', '6', '1', '0', '1', NULL, NULL, '1', '1', '1'), - (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Giacenze sedi'), 'Prezzo vendita ivato', 'IF( co_iva.percentuale IS NOT NULL, (mg_articoli.prezzo_vendita + mg_articoli.prezzo_vendita * co_iva.percentuale / 100), mg_articoli.prezzo_vendita + mg_articoli.prezzo_vendita*(SELECT co_iva.percentuale FROM co_iva INNER JOIN zz_settings ON co_iva.id=zz_settings.valore AND nome=\'Iva predefinita\')/100 )', '8', '1', '0', '1', '', '', '0', '0', '1'), + (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Giacenze sedi'), 'Prezzo vendita ivato', 'IF( co_iva.percentuale IS NOT NULL, (mg_articoli.prezzo_vendita + mg_articoli.prezzo_vendita * co_iva.percentuale / 100), mg_articoli.prezzo_vendita + mg_articoli.prezzo_vendita*(SELECT co_iva.percentuale FROM co_iva INNER JOIN zz_settings ON co_iva.id=zz_settings.valore AND nome=''Iva predefinita'')/100 )', '8', '1', '0', '1', '', '', '0', '0', '1'), (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Giacenze sedi'), 'Barcode', 'mg_articoli.barcode', '2', '1', '0', '0', '', '', '1', '0', '1'); -- Aggiunta risorse API dedicate alle task in cron @@ -227,7 +227,7 @@ INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione` ALTER TABLE `or_righe_ordini` ADD `confermato` BOOLEAN NOT NULL AFTER `id_dettaglio_fornitore`; UPDATE `or_righe_ordini` SET `confermato` = 1; -UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `mg_articoli` LEFT JOIN an_anagrafiche ON mg_articoli.id_fornitore=an_anagrafiche.idanagrafica LEFT JOIN co_iva ON mg_articoli.idiva_vendita=co_iva.id LEFT JOIN (SELECT SUM(qta-qta_evasa) AS qta_impegnata, idarticolo FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine=or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine=or_tipiordine.id WHERE idstatoordine IN(SELECT id FROM or_statiordine WHERE completato=0) AND or_tipiordine.dir=\'entrata\' AND or_righe_ordini.confermato = 1 GROUP BY idarticolo) a ON a.idarticolo=mg_articoli.id LEFT JOIN mg_categorie ON mg_articoli.id_categoria=mg_categorie.id LEFT JOIN mg_categorie AS sottocategorie ON mg_articoli.id_sottocategoria=sottocategorie.id WHERE 1=1 AND (`mg_articoli`.`deleted_at`) IS NULL HAVING 2=2 ORDER BY `mg_articoli`.`descrizione`' WHERE `zz_modules`.`name` = 'Articoli'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `mg_articoli` LEFT JOIN an_anagrafiche ON mg_articoli.id_fornitore=an_anagrafiche.idanagrafica LEFT JOIN co_iva ON mg_articoli.idiva_vendita=co_iva.id LEFT JOIN (SELECT SUM(qta-qta_evasa) AS qta_impegnata, idarticolo FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine=or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine=or_tipiordine.id WHERE idstatoordine IN(SELECT id FROM or_statiordine WHERE completato=0) AND or_tipiordine.dir=''entrata'' AND or_righe_ordini.confermato = 1 GROUP BY idarticolo) a ON a.idarticolo=mg_articoli.id LEFT JOIN mg_categorie ON mg_articoli.id_categoria=mg_categorie.id LEFT JOIN mg_categorie AS sottocategorie ON mg_articoli.id_sottocategoria=sottocategorie.id WHERE 1=1 AND (`mg_articoli`.`deleted_at`) IS NULL HAVING 2=2 ORDER BY `mg_articoli`.`descrizione`' WHERE `zz_modules`.`name` = 'Articoli'; -- Aggiunta impostazione per impegnare o meno automaticamente le quantità negli ordini fornitori INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Conferma automaticamente le quantità negli ordini fornitore', '1', 'boolean', '1', 'Ordini', NULL, NULL); @@ -254,16 +254,19 @@ INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('V UPDATE `fe_causali_pagamento_ritenuta` SET `codice` = 'ZO' WHERE `fe_causali_pagamento_ritenuta`.`codice` = 'Z'; -UPDATE `zz_settings` SET `valore` = 'ZO' WHERE `zz_settings`.`nome` = "Causale ritenuta d'acconto" AND `zz_settings`.`valore` = 'Z'; +UPDATE `zz_settings` SET `valore` = 'ZO' WHERE `zz_settings`.`nome` = 'Causale ritenuta d''acconto' AND `zz_settings`.`valore` = 'Z'; + +-- Disattivazione aliquote IVA con NATURA non più supportata dal tracciato 1.2.1 FE +-- andrà doverosamente specificato il sotto codice (esempio N3.1, N3.2 etc) +UPDATE `co_iva` SET `deleted_at` = now() WHERE `co_iva`.`codice_natura_fe` IN ('N2','N3','N6'); -- Introduzione tabella di supporto per nodo tracciato 1.2.1 FE CREATE TABLE IF NOT EXISTS `fe_tipi_ritenuta` ( - `codice` varchar(4) NOT NULL, - `descrizione` varchar(255) NOT NULL, - PRIMARY KEY (`codice`) + `codice` varchar(4) NOT NULL, + `descrizione` varchar(255) NOT NULL, + PRIMARY KEY (`codice`) ) ENGINE=InnoDB; - INSERT INTO `fe_tipi_ritenuta` (`codice`, `descrizione`) VALUES ('RT01', 'Ritenuta persone fisiche'), ('RT02', 'Ritenuta persone giuridiche'),