+
{[ "type": "text", "label": "", "name": "codice", "value": "$codice$" ]}
-
+
{[ "type": "select", "label": "", "name": "codice_natura_fe", "value": "$codice_natura_fe$", "values": "query=SELECT codice as id, CONCAT(codice, ' - ', descrizione) AS descrizione FROM fe_natura" ]}
+
+
+ {[ "type": "select", "label": "", "name": "esigibilita", "value": "$esigibilita$", "values": ]}
+
diff --git a/plugins/exportPA/src/FatturaElettronica.php b/plugins/exportPA/src/FatturaElettronica.php
index 96cb398b1..13b95c2f3 100644
--- a/plugins/exportPA/src/FatturaElettronica.php
+++ b/plugins/exportPA/src/FatturaElettronica.php
@@ -488,10 +488,15 @@ class FatturaElettronica
$dettaglio = [
'NumeroLinea' => $numero + 1,
'Descrizione' => $riga['descrizione'],
- 'Quantita' => $riga['qta'],
- 'PrezzoUnitario' => $prezzo_unitario,
+ 'Quantita' => $riga['qta']
];
+ if (!empty($riga['um'])) {
+ $dettaglio['UnitaMisura']= $riga['um'];
+ }
+
+ $dettaglio['PrezzoUnitario']= $prezzo_unitario;
+
// Sconto
$riga['sconto_unitario'] = floatval($riga['sconto_unitario']);
if (!empty($riga['sconto_unitario'])) {
@@ -524,32 +529,40 @@ class FatturaElettronica
];
}
- // Riepiloghi per IVA
- // TODO: risolvere di conseguenza alla Natura IVA
- $riepiloghi_percentuale = $database->fetchArray('SELECT SUM(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`) as totale, SUM(`co_righe_documenti`.`iva`) as iva, `co_iva`.`percentuale` FROM `co_righe_documenti` INNER JOIN `co_iva` ON `co_iva`.`id` = `co_righe_documenti`.`idiva` WHERE `co_righe_documenti`.`iddocumento` = '.prepare($documento['id']).' AND
+ // Riepiloghi per IVA per percentuale
+ $riepiloghi_percentuale = $database->fetchArray('SELECT SUM(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`) as totale, SUM(`co_righe_documenti`.`iva`) as iva, `co_iva`.`percentuale`, `co_iva`.`dicitura` FROM `co_righe_documenti` INNER JOIN `co_iva` ON `co_iva`.`id` = `co_righe_documenti`.`idiva` WHERE `co_righe_documenti`.`iddocumento` = '.prepare($documento['id']).' AND
`co_iva`.`codice_natura_fe` IS NULL GROUP BY `co_iva`.`percentuale`');
foreach ($riepiloghi_percentuale as $riepilogo) {
+ $iva = [
+ 'AliquotaIVA' => $riepilogo['percentuale'],
+ 'ImponibileImporto' => $riepilogo['totale'],
+ 'Imposta' => $riepilogo['iva'],
+ 'EsigibilitaIVA' => $riepilogo['esigibilita'],
+ ];
+
+ if (!empty($riepilogo['dicitura'])) {
+ $iva['RiferimentoNormativo'] = $riepilogo['dicitura'];
+ }
+
$result[] = [
- 'DatiRiepilogo' => [
- 'AliquotaIVA' => $riepilogo['percentuale'],
- 'ImponibileImporto' => $riepilogo['totale'],
- 'Imposta' => $riepilogo['iva'],
- 'EsigibilitaIVA' => 'I',
- ],
+ 'DatiRiepilogo' => $iva
];
}
+ // Riepiloghi per IVA per natura
$riepiloghi_natura = $database->fetchArray('SELECT SUM(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`) as totale, SUM(`co_righe_documenti`.`iva`) as iva, `co_iva`.`codice_natura_fe` FROM `co_righe_documenti` INNER JOIN `co_iva` ON `co_iva`.`id` = `co_righe_documenti`.`idiva` WHERE `co_righe_documenti`.`iddocumento` = '.prepare($documento['id']).' AND
`co_iva`.`codice_natura_fe` IS NOT NULL GROUP BY `co_iva`.`codice_natura_fe`');
foreach ($riepiloghi_natura as $riepilogo) {
+ $iva = [
+ 'AliquotaIVA' => 0,
+ 'Natura' => $riepilogo['codice_natura_fe'],
+ 'ImponibileImporto' => $riepilogo['totale'],
+ 'Imposta' => $riepilogo['iva'],
+ 'EsigibilitaIVA' => $riepilogo['esigibilita'],
+ ];
+
$result[] = [
- 'DatiRiepilogo' => [
- 'AliquotaIVA' => 0,
- 'Natura' => $riepilogo['codice_natura_fe'],
- 'ImponibileImporto' => $riepilogo['totale'],
- 'Imposta' => $riepilogo['iva'],
- 'EsigibilitaIVA' => 'I',
- ],
+ 'DatiRiepilogo' => $iva
];
}
@@ -597,6 +610,10 @@ class FatturaElettronica
{
$documento = $fattura->getDocumento();
+ if (!setting('Aggiungere stampa nella Fattura Elettronica')) {
+ return [];
+ }
+
$id_module = Modules::get('Fatture di vendita')['id'];
$dir = Uploads::getDirectory($id_module, Plugins::get('Fatturazione Elettronica')['id']);
@@ -649,9 +666,13 @@ class FatturaElettronica
'DatiGenerali' => static::getDatiGenerali($fattura),
'DatiBeniServizi' => static::getDatiBeniServizi($fattura),
'DatiPagamento' => static::getDatiPagamento($fattura),
- 'Allegati' => static::getAllegati($fattura),
];
+ $allegati = static::getAllegati($fattura);
+ if (!empty($allegati)) {
+ $result['Allegati'] = $allegati;
+ }
+
return $result;
}
@@ -734,8 +755,8 @@ class FatturaElettronica
return null;
}
- // Localhost: ['curl' => [CURLOPT_SSL_VERIFYPEER => false]]
- $client = new Client();
+ // Localhost:
+ $client = new Client(['curl' => [CURLOPT_SSL_VERIFYPEER => false]]);
$response = $client->request('POST', 'https://www.indicepa.gov.it/public-ws/WS01_SFE_CF.php', [
'form_params' => [
@@ -832,8 +853,7 @@ class FatturaElettronica
$cliente = $this->getCliente();
// Inizializzazione libreria per la generazione della fattura in XML
- //, ['stylesheet' => 'http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2.1/fatturaPA_v1.2.1.xsl']
- $fattura = new FluidXml(null);
+ $fattura = new FluidXml(null, ['stylesheet' => 'http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2.1/fatturaPA_v1.2.1.xsl']);
// Generazione dell'elemento root
$fattura->namespace('p', 'http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2');
diff --git a/update/2_4_2.sql b/update/2_4_2.sql
index 0642272f0..e0287b255 100644
--- a/update/2_4_2.sql
+++ b/update/2_4_2.sql
@@ -29,6 +29,8 @@ UPDATE `zz_modules` `t1` INNER JOIN `zz_modules` `t2` ON (`t1`.`name` = 'Categor
ALTER TABLE `an_nazioni` ADD `name` VARCHAR(255);
ALTER TABLE `co_documenti` ADD `codice_xml` VARCHAR(255);
+INSERT INTO `zz_settings` (`idimpostazione`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Aggiungere stampa nella Fattura Elettronica', '0', 'boolean', 1, 'Generali', 20);
+
CREATE TABLE IF NOT EXISTS `fe_regime_fiscale` (
`codice` varchar(4) NOT NULL,
`descrizione` varchar(255) NOT NULL,
@@ -163,7 +165,7 @@ INSERT INTO `fe_natura` (`codice`, `descrizione`) VALUES
('N6','Inversione contabile (per le operazioni in reverse charge ovvero nei casi di autofatturazione per acquisti extra UE di servizi ovvero per importazioni di beni nei soli casi previsti)'),
('N7','IVA assolta in altro stato UE (vendite a distanza ex art. 40 c. 3 e 4 e art. 41 c. 1 lett. b, DL 331/93; prestazione di servizi di telecomunicazioni, tele-radiodiffusione ed elettronici ex art. 7-sexies lett. f, g, art. 74-sexies DPR 633/72)');
-ALTER TABLE `co_iva` ADD `codice_natura_fe` varchar(4), ADD `deleted_at` timestamp NULL DEFAULT NULL, ADD `codice` int(11), ADD `default` boolean NOT NULL DEFAULT 0, ADD FOREIGN KEY (`codice_natura_fe`) REFERENCES `fe_natura`(`codice`) ON DELETE CASCADE;
+ALTER TABLE `co_iva` ADD `codice_natura_fe` varchar(4), ADD `deleted_at` timestamp NULL DEFAULT NULL, ADD `codice` int(11), ADD `esigibilita` enum('I', 'D', 'S') NOT NULL DEFAULT 'I', ADD `default` boolean NOT NULL DEFAULT 0, ADD FOREIGN KEY (`codice_natura_fe`) REFERENCES `fe_natura`(`codice`) ON DELETE CASCADE;
UPDATE `co_iva` SET `deleted_at` = NOW();
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_iva` WHERE 1=1 AND deleted_at IS NULL HAVING 2=2' WHERE `name` = 'IVA';