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'),