diff --git a/composer.json b/composer.json
index 98b57fc26..2f204dc03 100644
--- a/composer.json
+++ b/composer.json
@@ -36,6 +36,7 @@
"mpociot/vat-calculator": "^2.3",
"phpmailer/phpmailer": "^6.0",
"respect/validation": "^1.1",
+ "servo/fluidxml": "^1.21",
"spipu/html2pdf": "^5.0",
"symfony/filesystem": "^3.3",
"symfony/finder": "^3.3",
@@ -49,7 +50,9 @@
},
"autoload": {
"psr-4": {
- "": "src/"
+ "": "src/",
+ "Modules\\": "modules/",
+ "Plugins\\": "plugins/"
},
"files": [
"lib/functions.php",
diff --git a/modules/ddt/modutil.php b/modules/ddt/modutil.php
index f2d1503e4..95f9ff85b 100644
--- a/modules/ddt/modutil.php
+++ b/modules/ddt/modutil.php
@@ -263,7 +263,7 @@ function ricalcola_costiagg_ddt($idddt, $idrivalsainps = '', $idritenutaacconto
$marca_da_bollo = 0.00;
}
- // Se l'importo è negativo può essere una nota di accredito, quindi cambio segno alla marca da bollo
+ // Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo
if ($netto_a_pagare < 0) {
$marca_da_bollo *= -1;
}
diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php
index 165864af7..165e41186 100644
--- a/modules/fatture/actions.php
+++ b/modules/fatture/actions.php
@@ -1412,7 +1412,6 @@ switch (post('op')) {
$rs = $dbo->fetchArray($query);
$desc_iva = $rs[0]['descrizione'];
-
$rs = $dbo->fetchArray('SELECT * FROM co_righe_documenti WHERE id='.prepare($idriga));
$idconto = $rs[0]['idconto'];
@@ -1443,8 +1442,8 @@ switch (post('op')) {
break;
- // Nota di accredito
- case 'nota_accredito':
+ // Nota di credito
+ case 'nota_credito':
$id_segment = post('id_segment');
$numero = get_new_numerofattura($records[0]['data']);
@@ -1454,7 +1453,7 @@ switch (post('op')) {
$idconto = $rs[0]['idconto'];
$ref_documento = $id_record;
- $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, ref_documento, idanagrafica, idconto, idtipodocumento, idpagamento, idbanca, data, idstatodocumento, idsede, id_segment) SELECT '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($ref_documento).', idanagrafica, idconto, (SELECT `id` FROM `co_tipidocumento` WHERE `descrizione`=\'Nota di accredito\' AND dir = \'entrata\'), idpagamento, idbanca, data, (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`=\'Bozza\'), idsede, '.prepare($id_segment).' FROM co_documenti AS t WHERE id = '.prepare($id_record));
+ $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, ref_documento, idanagrafica, idconto, idtipodocumento, idpagamento, idbanca, data, idstatodocumento, idsede, id_segment) SELECT '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($ref_documento).', idanagrafica, idconto, (SELECT `id` FROM `co_tipidocumento` WHERE `descrizione`=\'Nota di credito\' AND dir = \'entrata\'), idpagamento, idbanca, data, (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`=\'Bozza\'), idsede, '.prepare($id_segment).' FROM co_documenti AS t WHERE id = '.prepare($id_record));
$id_record = $dbo->lastInsertedID();
// Lettura di tutte le righe della tabella in arrivo
@@ -1523,14 +1522,14 @@ switch (post('op')) {
break;
}
-// Nota di addebito
+// Nota di debito
if (get('op') == 'nota_addebito') {
$id_segment = $records[0]['id_segment'];
$numero = get_new_numerofattura($records[0]['data']);
$numero_esterno = get_new_numerosecondariofattura($records[0]['data']);
- $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, ref_documento, idanagrafica, idconto, idtipodocumento, idpagamento, idbanca, data, idstatodocumento, idsede, id_segment) SELECT '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($id_record).', idanagrafica, idconto, (SELECT `id` FROM `co_tipidocumento` WHERE `descrizione`=\'Nota di addebito\' AND dir = \'entrata\'), idpagamento, idbanca, data, (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`=\'Bozza\'), idsede, id_segment FROM co_documenti AS t WHERE id = '.prepare($id_record));
+ $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, ref_documento, idanagrafica, idconto, idtipodocumento, idpagamento, idbanca, data, idstatodocumento, idsede, id_segment) SELECT '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($id_record).', idanagrafica, idconto, (SELECT `id` FROM `co_tipidocumento` WHERE `descrizione`=\'Nota di debito\' AND dir = \'entrata\'), idpagamento, idbanca, data, (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`=\'Bozza\'), idsede, id_segment FROM co_documenti AS t WHERE id = '.prepare($id_record));
$id_record = $dbo->lastInsertedID();
}
diff --git a/modules/fatture/buttons.php b/modules/fatture/buttons.php
index 41fc9fef7..2537d964d 100644
--- a/modules/fatture/buttons.php
+++ b/modules/fatture/buttons.php
@@ -23,11 +23,11 @@ if ($dir == 'entrata' && empty($records[0]['ref_documento']) && $records[0]['sta
';
diff --git a/modules/fatture/crea_documento.php b/modules/fatture/crea_documento.php
index 864c46873..69f0c0a33 100644
--- a/modules/fatture/crea_documento.php
+++ b/modules/fatture/crea_documento.php
@@ -44,7 +44,7 @@ if ($module['name'] == 'Ordini cliente' || $module['name'] == 'Ordini fornitore'
$dir = ($module['name'] == 'Ddt di vendita') ? 'entrata' : 'uscita';
} else {
$pos = 'fat';
- $op = 'nota_accredito';
+ $op = 'nota_credito';
$head = tr('Fattura numero _NUM_');
diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php
index 8ebaa2c5a..79c5ae80b 100644
--- a/modules/fatture/modutil.php
+++ b/modules/fatture/modutil.php
@@ -625,7 +625,7 @@ function ricalcola_costiagg_fattura($iddocumento, $idrivalsainps = '', $idritenu
$marca_da_bollo = $bolli;
}
- // Se l'importo è negativo può essere una nota di accredito, quindi cambio segno alla marca da bollo
+ // Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo
$marca_da_bollo = abs($marca_da_bollo);
$dbo->query('UPDATE co_documenti SET ritenutaacconto='.prepare($ritenutaacconto).', rivalsainps='.prepare($rivalsainps).', iva_rivalsainps='.prepare($iva_rivalsainps).', bollo='.prepare($marca_da_bollo).' WHERE id='.prepare($iddocumento));
@@ -1066,7 +1066,7 @@ function rimuovi_riga_fattura($id_documento, $id_riga, $dir)
$dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$riga['qta'].' WHERE qta='.prepare($riga['qta']).' AND idarticolo='.prepare($riga['idarticolo']).' AND idordine='.prepare($riga['idordine']));
}
- // Nota di accredito
+ // Nota di credito
if (!empty($riga['ref_riga_documento'])) {
$dbo->query('UPDATE co_righe_documenti SET qta_evasa = qta_evasa+'.$riga['qta'].' WHERE id='.prepare($riga['ref_riga_documento']));
diff --git a/modules/ordini/modutil.php b/modules/ordini/modutil.php
index d646eea65..8adc47c1a 100644
--- a/modules/ordini/modutil.php
+++ b/modules/ordini/modutil.php
@@ -256,7 +256,7 @@ function ricalcola_costiagg_ordine($idordine, $idrivalsainps = '', $idritenutaac
$marca_da_bollo = 0.00;
}
- // Se l'importo è negativo può essere una nota di accredito, quindi cambio segno alla marca da bollo
+ // Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo
if ($netto_a_pagare < 0) {
$marca_da_bollo *= -1;
}
diff --git a/modules/preventivi/modutil.php b/modules/preventivi/modutil.php
index 09b558e22..150e46dc3 100644
--- a/modules/preventivi/modutil.php
+++ b/modules/preventivi/modutil.php
@@ -85,7 +85,7 @@ function ricalcola_costiagg_preventivo($idpreventivo, $idrivalsainps = '', $idri
$marca_da_bollo = 0.00;
}
- // Se l'importo è negativo può essere una nota di accredito, quindi cambio segno alla marca da bollo
+ // Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo
if ($netto_a_pagare < 0) {
$marca_da_bollo *= -1;
}
diff --git a/modules/primanota/add.php b/modules/primanota/add.php
index 3ccf69e73..59cba7593 100644
--- a/modules/primanota/add.php
+++ b/modules/primanota/add.php
@@ -21,10 +21,10 @@ include_once __DIR__.'/../../core.php';
$numero_doc = !empty($rs[0]['numero_esterno']) ? $rs[0]['numero_esterno'] : $rs[0]['numero'];
$tipo_doc = $rs[0]['tdescrizione'];
- $nota_accredito = false;
+ $nota_credito = false;
- if ($tipo_doc == 'Nota di accredito') {
- $nota_accredito = true;
+ if ($tipo_doc == 'Nota di credito') {
+ $nota_credito = true;
}
$descrizione = tr('_DOC_ numero _NUM_ del _DATE_ (_NAME_)', [
@@ -188,8 +188,8 @@ include_once __DIR__.'/../../core.php';
$value_avere = '';
}
- // Se è una nota di accredito, inverto i valori
- if ($nota_accredito) {
+ // Se è una nota di credito, inverto i valori
+ if ($nota_credito) {
$tmp = $value_dare;
$value_dare = $value_avere;
$value_avere = $tmp;
diff --git a/plugins/fatturazione/FatturaElettronica.php b/plugins/fatturazione/FatturaElettronica.php
new file mode 100644
index 000000000..93c519f8c
--- /dev/null
+++ b/plugins/fatturazione/FatturaElettronica.php
@@ -0,0 +1,898 @@
+documento = $database->fetchOne('SELECT *, (SELECT `codice_fe` FROM `co_tipidocumento` WHERE `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento`) AS `tipo_documento` FROM `co_documenti` WHERE `id` = '.prepare($id_documento));
+
+ // Righe del documento
+ $this->righe_documento = $database->select('co_righe_documenti', '*', ['iddocumento' => $id_documento]);
+
+ // Anagrafica azienda
+ $this->azienda = $database->fetchOne('SELECT *, (SELECT `iso2` FROM `an_nazioni` WHERE `an_nazioni`.`id` = `an_anagrafiche`.`id_nazione`) AS nazione FROM `an_anagrafiche` WHERE `idanagrafica` = '.prepare(\Settings::get('Azienda predefinita')));
+
+ // Anagrafica cliente
+ $this->cliente = $database->fetchOne('SELECT *, (SELECT `iso2` FROM `an_nazioni` WHERE `an_nazioni`.`id` = `an_anagrafiche`.`id_nazione`) AS nazione FROM `an_anagrafiche` WHERE `idanagrafica` = '.prepare($this->documento['idanagrafica']));
+ }
+
+ public function getAzienda()
+ {
+ return $this->azienda;
+ }
+
+ public function getCliente()
+ {
+ return $this->cliente;
+ }
+
+ public function getDocumento()
+ {
+ return $this->documento;
+ }
+
+ public function getRigheDocumento()
+ {
+ return $this->righe_documento;
+ }
+
+ /**
+ * Undocumented function.
+ *
+ * @return array
+ */
+ protected static function getDatiTrasmissione($documento, $azienda, $cliente)
+ {
+ // Generazione dell'header
+ $result = [
+ 'IdTrasmittente' => [
+ 'IdPaese' => $azienda['nazione'],
+ 'IdCodice' => $azienda['piva'],
+ ],
+ 'ProgressivoInvio' => $documento['numero_esterno'],
+ 'FormatoTrasmissione' => ($cliente['tipo'] == 'Ente pubblico') ? 'FPA12' : 'FPR12',
+ 'CodiceDestinatario' => !empty($cliente['cod_sogei']) ? $cliente['cod_sogei'] : '0000000',
+ 'ContattiTrasmittente' => [
+ 'Telefono' => $azienda['email'],
+ 'Email' => $azienda['email'],
+ ],
+ ];
+
+ // Inizializzazione PEC solo se necessario
+ if (empty($cliente['cod_sogei'])) {
+ $result['PECDestinatario'] = $cliente['cod_sogei_pec'];
+ }
+
+ return $result;
+ }
+
+ /**
+ * Undocumented function.
+ *
+ * @return array
+ */
+ protected static function getDatiAzienda($azienda)
+ {
+ $result = [
+ 'DatiAnagrafici' => [
+ 'IdFiscaleIVA' => [
+ 'IdPaese' => $azienda['nazione'],
+ 'IdCodice' => $azienda['piva'],
+ ],
+ 'CodiceFiscale' => $azienda['codice_fiscale'],
+ 'Anagrafica' => [
+ 'Denominazione' => $azienda['ragione_sociale'], // Massimo 80 caratteri
+ // TODO: 'Nome' => $azienda['ragione_sociale'], // Massimo 80 caratteri
+ // TODO: 'Cognome' => $azienda['ragione_sociale'], // Massimo 80 caratteri
+ // TODO: 'Titolo' => $azienda['ragione_sociale'], // Massimo 80 caratteri
+ // TODO: CodEORI
+ ],
+ // TODO: AlboProfessionale, ProvinciaAlbo, NumeroIscrizioneAlbo, DataIscrizioneAlbo
+ 'RegimeFiscale' => \Settings::get('Regime Fiscale'), // Da introdurre
+ ],
+ 'Sede' => [
+ 'Indirizzo' => $azienda['indirizzo'], // Massimo 60 caratteri
+ 'CAP' => $azienda['cap'], // Massimo 5 di 10 caratteri
+ 'Comune' => $azienda['citta'], // Massimo 60 caratteri
+ 'Provincia' => $azienda['provincia'], // SOLO SE nazione ITALIA
+ 'Nazione' => $azienda['nazione'],
+ ],
+ // TODO: StabileOrganizzazione, IscrizioneREA, Contatti, RiferimentoAmministrazione
+ ];
+
+ return $result;
+ }
+
+ /**
+ * Undocumented function.
+ *
+ * @return array
+ */
+ protected static function getDatiCliente($cliente)
+ {
+ $result = [
+ 'DatiAnagrafici' => [
+ 'CodiceFiscale' => $cliente['codice_fiscale'], // Oppure PARTITA IVA in alternativa
+ 'Anagrafica' => [
+ 'Denominazione' => $cliente['ragione_sociale'], // Massimo 80 caratteri
+ ],
+ ],
+ 'Sede' => [
+ 'Indirizzo' => $cliente['indirizzo'], // Massimo 60 caratteri
+ 'CAP' => $cliente['cap'], // Massimo 5 di 10 caratteri
+ 'Comune' => $cliente['citta'], // Massimo 60 caratteri
+ 'Provincia' => $cliente['provincia'],
+ 'Nazione' => $cliente['nazione'],
+ ],
+ ];
+
+ return $result;
+ }
+
+ /**
+ * Undocumented function.
+ *
+ * @return array
+ */
+ protected static function getDatiGeneraliDocumento($documento)
+ {
+ $result = [
+ 'TipoDocumento' => $documento['tipo_documento'],
+ 'Divisa' => 'EUR',
+ 'Data' => $documento['data'],
+ 'Numero' => $documento['numero_esterno'],
+ //'Causale' => $documento['causale'],
+ ];
+
+ return $result;
+ }
+
+ /**
+ * Undocumented function.
+ *
+ * @return array
+ */
+ protected static function getDatiDocumento($documento)
+ {
+ $result = [
+ 'DatiGeneraliDocumento' => self::getDatiGeneraliDocumento($documento),
+ ];
+
+ return $result;
+ }
+
+ /**
+ * Undocumented function.
+ *
+ * @return array
+ */
+ protected static function getDatiBeniServizi($documento, $righe_documento)
+ {
+ $database = \Database::getConnection();
+
+ $result = [];
+
+ // Righe del documento
+ foreach ($righe_documento as $numero => $riga) {
+ $prezzo_unitario = $riga['subtotale'] / $riga['qta'];
+ $prezzo_totale = $riga['subtotale'] - $riga['sconto'];
+
+ $iva = $database->fetchArray('SELECT percentuale FROM co_iva WHERE id='.prepare($riga['idiva']));
+ $id_iva = $iva[0]['percentuale'];
+
+ $result[] = [
+ 'DettaglioLinee' => [
+ 'NumeroLinea' => $numero,
+ 'Descrizione' => $riga['descrizione'],
+ 'Quantita' => $riga['qta'],
+ 'PrezzoUnitario' => $prezzo_unitario,
+ 'ScontoMaggiorazione' => [
+ 'Tipo' => 'SC',
+ 'Percentuale' => ($riga['tipo_sconto'] == 'PRC') ? $riga['sconto'] : ($riga['sconto'] * 100) / $riga['subtotale'],
+ ],
+ 'PrezzoTotale' => $prezzo_totale,
+ 'AliquotaIVA' => $id_iva,
+ ],
+ ];
+ }
+
+ // Riepiloghi per IVA
+ $riepiloghi = $database->fetchArray('SELECT SUM(subtotale - sconto) as totale, SUM(iva) as iva, idiva FROM `co_righe_documenti` WHERE iddocumento = '.prepare($id_documento).' GROUP BY idiva');
+ foreach ($riepiloghi as $numero => $riepilogo) {
+ $iva = $database->fetchArray('SELECT percentuale FROM co_iva WHERE id='.prepare($riepilogo['idiva']));
+ $id_iva = $iva[0]['percentuale'];
+
+ $result[] = [
+ 'DatiRiepilogo' => [
+ 'AliquotaIVA' => $id_iva,
+ 'ImponibileImporto' => $riepilogo['tot'],
+ 'Imposta' => $riepilogo['iva'],
+ 'EsigibilitaIVA' => 'I',
+ ],
+ ];
+ }
+
+ return $result;
+ }
+
+ /**
+ * Undocumented function.
+ *
+ * @return array
+ */
+ protected static function getDatiPagamento($documento)
+ {
+ $result = [
+ 'CondizioniPagamento' => '',
+ 'DettaglioPagamento' => [
+ 'ModalitaPagamento' => '',
+ 'DataScadenzaPagamento' => '',
+ 'ImportoPagamento' => '',
+ ],
+ ];
+
+ return $result;
+ }
+
+ protected static function getHeader($documento, $azienda, $cliente)
+ {
+ $result = [
+ 'DatiTrasmissione' => self::getDatiTrasmissione($documento, $azienda, $cliente),
+ 'CedentePrestatore' => self::getDatiAzienda($azienda),
+ 'CessionarioCommittente' => self::getDatiCliente($cliente),
+ ];
+
+ return $result;
+ }
+
+ protected static function getBody($documento, $azienda, $cliente, $righe_documento)
+ {
+ $result = [
+ 'DatiGenerali' => self::getDatiDocumento($documento),
+ 'DatiBeniServizi' => self::getDatiBeniServizi($documento, $righe_documento),
+ 'DatiPagamento' => self::getDatiPagamento($documento),
+ ];
+
+ return $result;
+ }
+
+ protected static function prepareForXML($input, $key = null)
+ {
+ $output = null;
+ if (is_array($input)) {
+ foreach ($input as $key => $value) {
+ $output[$key] = self::prepareForXML($value, $key);
+ }
+ } elseif (!is_null($input)) {
+ $info = self::$validators[$key];
+ $size = isset($info['size']) ? $info['size'] : null;
+ $size = explode('-', $info['size']);
+
+ $output = $input;
+ // Operazioni di normalizzazione
+ if ($info['type'] == 'decimal') {
+ $output = number_format($output, 2, '.', '');
+ } elseif (isset($size[1])) {
+ S::create($output)->substr(2, $size[1]);
+ }
+
+ // Validazione
+ if ($info['type'] == 'string' || $info['type'] == 'normalizedString') {
+ if ($info['type'] == 'string') {
+ $validator = v::alnum();
+ } elseif ('normalizedString') {
+ $validator = v::alnum()->noWhitespace();
+ }
+
+ if (isset($size[1])) {
+ $validator = $validator->length($size[0], $size[1]);
+ }
+ } elseif ($info['type'] == 'decimal') {
+ $validator = v::floatVal();
+ } elseif ($info['type'] == 'date') {
+ $validator = v::date();
+ }
+
+ if (!empty($validator)) {
+ //echo $key.': '.intval($validator->validate($output)).'
';
+ }
+ }
+
+ return $output;
+ }
+
+ public function save($directory)
+ {
+ $documento = $this->getDocumento();
+ $filename = $documento['codice_xml'];
+
+ // Generazione nome XML
+ if (empty($filename)) {
+ $azienda = $this->getAzienda();
+ $codice = empty($azienda['piva']) ? $azienda['codice_fiscale'] : $azienda['piva'];
+
+ $filename = 'IT'.$codice.'_'.date('y').secure_random_string(3);
+
+ // Registrazione
+ $database = \Database::getConnection();
+ $database->update('co_documenti', ['codice_xml' => $filename], ['id' => $documento['id']]);
+ $this->documento['codice_xml'] = $filename;
+ }
+ $filename .= '.xml';
+
+ // Salvataggio del file
+ $result = directory($directory) && file_put_contents(rtrim($directory, '/').'/'.$filename, $this->__toString());
+
+ return ($result === false) ? null : $filename;
+ }
+
+ public function __toString()
+ {
+ $azienda = $this->getAzienda();
+ $documento = $this->getDocumento();
+ $cliente = $this->getCliente();
+ $righe_documento = $this->getRigheDocumento();
+
+ // Inizializzazione libreria per la generazione della fattura in XML
+ $fattura = new FluidXml(null);
+
+ // Generazione dell'elemento root
+ $fattura->namespace('p', 'http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2');
+ $root = $fattura->addChild('p:FatturaElettronica', true); // Our document is with no root node, let's create one.
+ $rootNode = $root[0];
+
+ // Completamento dei tag
+ $attributes = [
+ 'versione' => ($cliente['tipo'] == 'Ente pubblico') ? 'FPA12' : 'FPR12',
+ '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 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd',
+ ];
+ foreach ($attributes as $key => $value) {
+ $rootNode->setAttribute($key, $value);
+ }
+
+ $xml = [
+ 'FatturaElettronicaHeader' => self::getHeader($documento, $azienda, $cliente),
+ 'FatturaElettronicaBody' => self::getBody($documento, $azienda, $cliente, $righe_documento),
+ ];
+ $xml = self::prepareForXML($xml);
+
+ $fattura->add($xml);
+
+ return $fattura->__toString();
+ }
+
+ protected static $validators = [
+ 'IdPaese' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'IdCodice' => [
+ 'type' => 'string',
+ 'size' => '1-28',
+ ],
+ 'ProgressivoInvio' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-10',
+ ],
+ 'FormatoTrasmissione' => [
+ 'type' => 'string',
+ 'size' => 5,
+ ],
+ 'CodiceDestinatario' => [
+ 'type' => 'string',
+ 'size' => '6-7',
+ ],
+ 'Telefono' => [
+ 'type' => 'normalizedString',
+ 'size' => '5-12',
+ ],
+ 'Email' => [
+ 'type' => 'string',
+ 'size' => '7-256',
+ ],
+ 'PECDestinatario' => [
+ 'type' => 'normalizedString',
+ 'size' => '7-256',
+ ],
+ 'CodiceFiscale' => [
+ 'type' => 'string',
+ 'size' => '11-16',
+ ],
+ 'Denominazione' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-80',
+ ],
+ 'Nome' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'Cognome' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'Titolo' => [
+ 'type' => 'normalizedString',
+ 'size' => '2-10',
+ ],
+ 'CodEORI' => [
+ 'type' => 'string',
+ 'size' => '13-17',
+ ],
+ 'AlboProfessionale' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'ProvinciaAlbo' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'NumeroIscrizioneAlbo' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'DataIscrizioneAlbo' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'RegimeFiscale' => [
+ 'type' => 'string',
+ 'size' => 4,
+ ],
+ 'Indirizzo' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'NumeroCivico' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-8',
+ ],
+ 'CAP' => [
+ 'type' => 'string',
+ 'size' => 5,
+ ],
+ 'Comune' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'Provincia' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'Nazione' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'Ufficio' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'NumeroREA' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-20',
+ ],
+ 'CapitaleSociale' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'SocioUnico' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'StatoLiquidazione' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'Fax' => [
+ 'type' => 'normalizedString',
+ 'size' => '5-12',
+ ],
+ 'RiferimentoAmministrazione' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-20',
+ ],
+ 'SoggettoEmittente' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'TipoDocumento' => [
+ 'type' => 'string',
+ 'size' => 4,
+ ],
+ 'Divisa' => [
+ 'type' => 'string',
+ 'size' => 3,
+ ],
+ 'Data' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'Numero' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-20',
+ ],
+ 'TipoRitenuta' => [
+ 'type' => 'string',
+ 'size' => 4,
+ ],
+ 'ImportoRitenuta' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'AliquotaRitenuta' => [
+ 'type' => 'decimal',
+ 'size' => '4-6',
+ ],
+ 'CausalePagamento' => [
+ 'type' => 'string',
+ 'size' => '1-2',
+ ],
+ 'BolloVirtuale' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'ImportoBollo' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'TipoCassa' => [
+ 'type' => 'string',
+ 'size' => 4,
+ ],
+ 'AlCassa' => [
+ 'type' => 'decimal',
+ 'size' => '4-6',
+ ],
+ 'ImportoContributoCassa' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'ImponibileCassa' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'AliquotaIVA' => [
+ 'type' => 'decimal',
+ 'size' => '4-6',
+ ],
+ 'Ritenuta' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'Natura' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'Tipo' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'Percentuale' => [
+ 'type' => 'decimal',
+ 'size' => '4-6',
+ ],
+ 'Importo' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'ImportoTotaleDocumento' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'Arrotondamento' => [
+ 'type' => 'decimal',
+ 'size' => '4-21',
+ ],
+ 'Causale' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-200',
+ ],
+ 'Art73' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'RiferimentoNumeroLinea' => [
+ 'type' => 'integer',
+ 'size' => '1-4',
+ ],
+ 'IdDocumento' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-20',
+ ],
+ 'NumItem' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-20',
+ ],
+ 'CodiceCommessaConvenzione' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-100',
+ ],
+ 'CodiceCUP' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-15',
+ ],
+ 'CodiceCIG' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-15',
+ ],
+ 'RiferimentoFase' => [
+ 'type' => 'integer',
+ 'size' => '1-3',
+ ],
+ 'NumeroDDT' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-20',
+ ],
+ 'DataDDT' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'NumeroLicenzaGuida' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-20',
+ ],
+ 'MezzoTrasporto' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-80',
+ ],
+ 'CausaleTrasporto' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-100',
+ ],
+ 'NumeroColli' => [
+ 'type' => 'integer',
+ 'size' => '1-4',
+ ],
+ 'Descrizione' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-1000',
+ ],
+ 'UnitaMisuraPeso' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-10',
+ ],
+ 'PesoLordo' => [
+ 'type' => 'decimal',
+ 'size' => '4-7',
+ ],
+ 'PesoNetto' => [
+ 'type' => 'decimal',
+ 'size' => '4-7',
+ ],
+ 'DataOraRitiro' => [
+ 'type' => 'date',
+ 'size' => 19,
+ ],
+ 'DataInizioTrasporto' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'TipoResa' => [
+ 'type' => 'string',
+ 'size' => 3,
+ ],
+ 'DataOraConsegna' => [
+ 'type' => 'date',
+ 'size' => 19,
+ ],
+ 'NumeroFatturaPrincipale' => [
+ 'type' => 'string',
+ 'size' => '1-20',
+ ],
+ 'DataFatturaPrincipale' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'NumeroLinea' => [
+ 'type' => 'integer',
+ 'size' => '1-4',
+ ],
+ 'TipoCessionePrestazione' => [
+ 'type' => 'string',
+ 'size' => 2,
+ ],
+ 'CodiceArticolo' => [
+ 'type' => 'normalizedString',
+ ],
+ 'CodiceTipo' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-35',
+ ],
+ 'CodiceValore' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-35',
+ ],
+ 'Quantita' => [
+ 'type' => 'decimal',
+ 'size' => '4-21',
+ ],
+ 'UnitaMisura' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-10',
+ ],
+ 'DataInizioPeriodo' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'DataFinePeriodo' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'PrezzoUnitario' => [
+ 'type' => 'decimal',
+ 'size' => '4-21',
+ ],
+ 'PrezzoTotale' => [
+ 'type' => 'decimal',
+ 'size' => '4-21',
+ ],
+ 'TipoDato' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-10',
+ ],
+ 'RiferimentoTesto' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'RiferimentoNumero' => [
+ 'type' => 'decimal',
+ 'size' => '4-21',
+ ],
+ 'RiferimentoData' => [
+ 'type' => 'normalizedString',
+ 'size' => 10,
+ ],
+ 'SpeseAccessorie' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'ImponibileImporto' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'Imposta' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'EsigibilitaIVA' => [
+ 'type' => 'string',
+ 'size' => 1,
+ ],
+ 'RiferimentoNormativo' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-100',
+ ],
+ 'TotalePercorso' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-15',
+ ],
+ 'CondizioniPagamento' => [
+ 'type' => 'string',
+ 'size' => 4,
+ ],
+ 'Beneficiario' => [
+ 'type' => 'string',
+ 'size' => '1-200',
+ ],
+ 'ModalitaPagamento' => [
+ 'type' => 'string',
+ 'size' => 4,
+ ],
+ 'DataRiferimentoTerminiPagamento' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'GiorniTerminiPagamento' => [
+ 'type' => 'integer',
+ 'size' => '1-3',
+ ],
+ 'DataScadenzaPagamento' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'ImportoPagamento' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'CodUfficioPostale' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-20',
+ ],
+ 'CognomeQuietanzante' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'NomeQuietanzante' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'CFQuietanzante' => [
+ 'type' => 'string',
+ 'size' => 16,
+ ],
+ 'TitoloQuietanzante' => [
+ 'type' => 'normalizedString',
+ 'size' => '2-10',
+ ],
+ 'IstitutoFinanziario' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-80',
+ ],
+ 'IBAN' => [
+ 'type' => 'string',
+ 'size' => '15-34',
+ ],
+ 'ABI' => [
+ 'type' => 'string',
+ 'size' => 5,
+ ],
+ 'CAB' => [
+ 'type' => 'string',
+ 'size' => 5,
+ ],
+ 'BIC' => [
+ 'type' => 'string',
+ 'size' => '8-11',
+ ],
+ 'ScontoPagamentoAnticipato' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'DataLimitePagamentoAnticipato' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'PenalitaPagamentiRitardati' => [
+ 'type' => 'decimal',
+ 'size' => '4-15',
+ ],
+ 'DataDecorrenzaPenale' => [
+ 'type' => 'date',
+ 'size' => 10,
+ ],
+ 'CodicePagamento' => [
+ 'type' => 'string',
+ 'size' => '1-60',
+ ],
+ 'NomeAttachment' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-60',
+ ],
+ 'AlgoritmoCompressione' => [
+ 'type' => 'string',
+ 'size' => '1-10',
+ ],
+ 'FormatoAttachment' => [
+ 'type' => 'string',
+ 'size' => '1-10',
+ ],
+ 'DescrizioneAttachment' => [
+ 'type' => 'normalizedString',
+ 'size' => '1-100',
+ ],
+ 'Attachment' => [
+ 'type' => 'base64Binary',
+ ],
+ ];
+}
diff --git a/update/2_4_1.sql b/update/2_4_1.sql
index c1a2e657f..10a150cbd 100644
--- a/update/2_4_1.sql
+++ b/update/2_4_1.sql
@@ -63,7 +63,6 @@ INSERT INTO `zz_group_view` (`id_gruppo`, `id_vista`) VALUES
(4, (SELECT id FROM `zz_views` WHERE id_module=(SELECT id FROM zz_modules WHERE name='Modelli prima nota') AND name='id' )),
(4, (SELECT id FROM `zz_views` WHERE id_module=(SELECT id FROM zz_modules WHERE name='Modelli prima nota') AND name='Causale predefinita' ));
-
-- Widget per stampa calendario
INSERT INTO `zz_widgets` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`, `help` ) VALUES (NULL, 'Stampa calendario', 'print', '1', 'controller_top', 'col-md-12', NULL, '#4ccc4c', 'fa fa-print', '', './modules/dashboard/widgets/stampa_calendario.dashboard.php', 'popup', '', 'Stampa calendario', '1', '7', NULL);
@@ -73,11 +72,9 @@ INSERT INTO `zz_prints` (`id`, `id_module`, `is_record`, `name`, `title`, `direc
-- Rimosso group by nome banche
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_banche` WHERE 1=1 AND deleted = 0 HAVING 2=2' WHERE `zz_modules`.`name` = 'Banche';
-
-- impianti per pianificazione contratti
ALTER TABLE `co_righe_contratti` ADD `idimpianti` VARCHAR(255) NOT NULL AFTER `idsede`;
-
-- Struttura della tabella `co_righe_contratti_materiali`
CREATE TABLE IF NOT EXISTS `co_righe_contratti_materiali` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -97,7 +94,6 @@ CREATE TABLE IF NOT EXISTS `co_righe_contratti_materiali` (
KEY `id_riga_contratto` (`id_riga_contratto`)
);
-
-- Struttura della tabella `co_righe_contratti_articoli`
CREATE TABLE IF NOT EXISTS `co_righe_contratti_articoli` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -122,7 +118,6 @@ CREATE TABLE IF NOT EXISTS `co_righe_contratti_articoli` (
KEY `idimpianto` (`idimpianto`)
);
-
-- Modifica query wiget per mostrare solo quelli che non sono stati rinnovati
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato, co_contratti.id, DATEDIFF( data_conclusione, NOW() ) AS giorni_rimanenti FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND rinnovabile=1 AND NOW() > DATE_ADD( data_conclusione, INTERVAL - ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970 HAVING ISNULL((SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev=co_contratti.id )) ORDER BY giorni_rimanenti ASC' WHERE `zz_widgets`.`name` = 'Contratti in scadenza';
@@ -141,7 +136,6 @@ UPDATE `in_interventi_tecnici` SET `uid` = NULL WHERE `uid` = '';
UPDATE `in_interventi_tecnici` SET `summary` = NULL WHERE `summary` = '';
ALTER TABLE `in_interventi_tecnici` CHANGE `uid` `uid` int(11);
-
-- Aggiorno campo 'Data' in 'Data movimento'
UPDATE `zz_views` SET `name` = 'Data movimento', `order` = '6' WHERE `zz_views`.`id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Movimenti') AND name = 'Data';
diff --git a/update/2_4_2.php b/update/2_4_2.php
index c35ba1800..fe9e1ce69 100644
--- a/update/2_4_2.php
+++ b/update/2_4_2.php
@@ -1,6 +1,8 @@
'Afghanistan',
@@ -42,7 +44,7 @@ $it = [
'CA' => 'Canada',
'CV' => 'Capo Verde',
'BQ' => 'Caraibi olandesi',
- 'CZ' => 'Cèchia',
+ 'CZ' => 'Repubblica ceca',
'EA' => 'Ceuta e Melilla',
'TD' => 'Ciad',
'CL' => 'Cile',
@@ -144,7 +146,7 @@ $it = [
'LU' => 'Lussemburgo',
'MG' => 'Madagascar',
'MW' => 'Malawi',
- 'MY' => 'Malaysia',
+ 'MY' => 'Malesia',
'MV' => 'Maldive',
'ML' => 'Mali',
'MT' => 'Malta',
@@ -258,6 +260,7 @@ $it = [
'YE' => 'Yemen',
'ZM' => 'Zambia',
'ZW' => 'Zimbabwe',
+ 'AN' => 'Antille olandesi',
];
$en = [
@@ -314,8 +317,8 @@ $en = [
'CC' => 'Cocos (Keeling) Islands',
'CO' => 'Colombia',
'KM' => 'Comoros',
- 'CG' => 'Congo - Brazzaville',
- 'CD' => 'Congo - Kinshasa',
+ 'CG' => 'Repubblica del Congo',
+ 'CD' => 'Repubblica Democratica del Congo',
'CK' => 'Cook Islands',
'CR' => 'Costa Rica',
'CI' => 'Côte d’Ivoire',
@@ -516,11 +519,104 @@ $en = [
'YE' => 'Yemen',
'ZM' => 'Zambia',
'ZW' => 'Zimbabwe',
+ 'AN' => 'Netherlands Antilles',
];
+// Fix dei valori preimpostati
+$database->update('an_nazioni', [
+ 'nome' => 'Antigua e Barbuda',
+], ['nome' => 'ANTIGUA AND BARBUDA']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Azerbaijan',
+], ['nome' => 'AZERBAIJAN REPUBLIC']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Bosnia & Herzegovina',
+], ['nome' => 'BOSNIA AND HERZEGOVINA']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'China',
+], ['nome' => 'CHINA WORLDWIDE']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Repubblica Democratica del Congo',
+], ['nome' => 'DEMOCRATIC REPUBLIC OF THE CONGO']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Micronesia',
+], ['nome' => 'FEDERATED STATES OF MICRONESIA']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Gabon',
+], ['nome' => 'GABON REPUBLIC']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Guinea-Bissau',
+], ['nome' => 'GUINEA BISSAU']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'RAS di Hong Kong',
+], ['nome' => 'HONG KONG']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Paesi Bassi',
+], ['nome' => 'OLANDA']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Norway',
+], ['nome' => 'NORWEGIA']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Saint Vincent e Grenadines',
+], ['nome' => 'SAINT VINCENT AND THE GRENADINES']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'South Africa',
+], ['nome' => 'SUD AFRICA']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Corea del Sud',
+], ['nome' => 'SUD KOREA']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Saint Kitts e Nevis',
+], ['nome' => 'ST. KITTS AND NEVIS']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'St. Pierre & Miquelon',
+], ['nome' => 'ST. PIERRE AND MIQUELON']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Svalbard e Jan Mayen',
+], ['nome' => 'SVALBARD AND JAN MAYEN ISLANDS']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Isole Turks e Caicos',
+], ['nome' => 'TURKS AND CAICOS ISLANDS']);
+
+$database->update('an_nazioni', [
+ 'nome' => 'Wallis & Futuna',
+], ['nome' => 'WALLIS AND FUTUNA ISLANDS']);
+
+// Aggiornamenti e inserimenti
foreach ($it as $key => $value) {
- $database->update('an_nazioni', [
- 'iso2' => $key,
- 'name' => $en[$key],
- ], ['nome' => $value]);
+ $italian = $value;
+ $english = $en[$key];
+
+ if ($database->fetchNum('SELECT id FROM an_nazioni WHERE nome IN('.prepare($italian).', '.prepare($english).')') != 0) {
+ $database->update('an_nazioni', [
+ 'iso2' => $key,
+ 'nome' => $italian,
+ 'name' => $english,
+ ], [
+ 'nome' => [$italian, $english],
+ ]);
+ } else {
+ $database->insert('an_nazioni', [
+ 'iso2' => $key,
+ 'nome' => $italian,
+ 'name' => $english,
+ ]);
+ }
}
diff --git a/update/2_4_2.sql b/update/2_4_2.sql
index ee1e28e8f..bff6d9c96 100644
--- a/update/2_4_2.sql
+++ b/update/2_4_2.sql
@@ -28,3 +28,164 @@ INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `option
-- Fatturazione elettronica
ALTER TABLE `an_nazioni` ADD `name` VARCHAR(255);
+ALTER TABLE `co_documenti` ADD `codice_xml` VARCHAR(255);
+
+CREATE TABLE IF NOT EXISTS `fe_regime_fiscale` (
+ `codice` varchar(4) NOT NULL,
+ `descrizione` varchar(255) NOT NULL,
+ PRIMARY KEY (`codice`)
+) ENGINE=InnoDB;
+
+-- Tabelle per la fatturazione elettronica
+INSERT INTO `fe_regime_fiscale` (`codice`, `descrizione`) VALUES
+('RF01','Ordinario'),
+('RF02','Contribuenti minimi (art.1, c.96-117, L. 244/07)'),
+('RF04','Agricoltura e attività connesse e pesca (artt.34 e 34-bis, DPR 633/72)'),
+('RF05','Vendita sali e tabacchi (art.74, c.1, DPR. 633/72)'),
+('RF06','Commercio fiammiferi (art.74, c.1, DPR 633/72)'),
+('RF07','Editoria (art.74, c.1, DPR 633/72)'),
+('RF08','Gestione servizi telefonia pubblica (art.74, c.1, DPR 633/72)'),
+('RF09','Rivendita documenti di trasporto pubblico e di sosta (art.74, c.1, DPR 633/72)'),
+('RF10','Intrattenimenti, giochi e altre attività di cui alla tariffa allegata al DPR 640/72 (art.74, c.6, DPR 633/72)'),
+('RF11','Agenzie viaggi e turismo (art.74-ter, DPR 633/72)'),
+('RF12','Agriturismo (art.5, c.2, L. 413/91)'),
+('RF13','Vendite a domicilio (art.25-bis, c.6, DPR 600/73)'),
+('RF14','Rivendita beni usati, oggetti d’arte, d’antiquariato o da collezione (art.36, DL 41/95)'),
+('RF15','Agenzie di vendite all’asta di oggetti d’arte, antiquariato o da collezione (art.40-bis, DL 41/95)'),
+('RF16','IVA per cassa P.A. (art.6, c.5, DPR 633/72)'),
+('RF17','IVA per cassa (art. 32-bis, DL 83/2012)'),
+('RF18','Altro'),
+('RF19','Regime forfettario (art.1, c.54-89, L. 190/2014)');
+
+CREATE TABLE IF NOT EXISTS `fe_tipo_cassa` (
+ `codice` varchar(4) NOT NULL,
+ `descrizione` varchar(255) NOT NULL,
+ PRIMARY KEY (`codice`)
+) ENGINE=InnoDB;
+
+INSERT INTO `fe_tipo_cassa` (`codice`, `descrizione`) VALUES
+('TC01','Cassa nazionale previdenza e assistenza avvocati e procuratori legali'),
+('TC02','Cassa previdenza dottori commercialisti'),
+('TC03','Cassa previdenza e assistenza geometri'),
+('TC04','Cassa nazionale previdenza e assistenza ingegneri e architetti liberi professionisti'),
+('TC05','Cassa nazionale del notariato'),
+('TC06','Cassa nazionale previdenza e assistenza ragionieri e periti commerciali'),
+('TC07','Ente nazionale assistenza agenti e rappresentanti di commercio (ENASARCO)'),
+('TC08','Ente nazionale previdenza e assistenza consulenti del lavoro (ENPACL)'),
+('TC09','Ente nazionale previdenza e assistenza medici (ENPAM)'),
+('TC10','Ente nazionale previdenza e assistenza farmacisti (ENPAF)'),
+('TC11','Ente nazionale previdenza e assistenza veterinari (ENPAV)'),
+('TC12','Ente nazionale previdenza e assistenza impiegati dell agricoltura (ENPAIA)'),
+('TC13','Fondo previdenza impiegati imprese di spedizione e agenzie marittime'),
+('TC14','Istituto nazionale previdenza giornalisti italiani (INPGI)'),
+('TC15','Opera nazionale assistenza orfani sanitari italiani (ONAOSI)'),
+('TC16','Cassa autonoma assistenza integrativa giornalisti italiani (CASAGIT)'),
+('TC17','Ente previdenza periti industriali e periti industriali laureati (EPPI)'),
+('TC18','Ente previdenza e assistenza pluricategoriale (EPAP)'),
+('TC19','Ente nazionale previdenza e assistenza biologi (ENPAB)'),
+('TC20','Ente nazionale previdenza e assistenza professione infermieristica (ENPAPI)'),
+('TC21','Ente nazionale previdenza e assistenza psicologi (ENPAP)'),
+('TC22','INPS');
+
+CREATE TABLE IF NOT EXISTS `fe_modalita_pagamento` (
+ `codice` varchar(4) NOT NULL,
+ `descrizione` varchar(255) NOT NULL,
+ PRIMARY KEY (`codice`)
+) ENGINE=InnoDB;
+
+INSERT INTO `fe_modalita_pagamento` (`codice`, `descrizione`) VALUES
+('MP01','Contanti'),
+('MP02','Assegno'),
+('MP03','Assegno circolare'),
+('MP04','Contanti presso Tesoreria'),
+('MP05','Bonifico'),
+('MP06','Vaglia cambiario'),
+('MP07','Bollettino bancario'),
+('MP08','Carta di pagamento'),
+('MP09','RID'),
+('MP10','RID utenze'),
+('MP11','RID veloce'),
+('MP12','RIBA'),
+('MP13','MAV'),
+('MP14','Quietanza erario'),
+('MP15','Giroconto su conti di contabilità speciale'),
+('MP16','Domiciliazione bancaria'),
+('MP17','Domiciliazione postale'),
+('MP18','Bollettino di c/c postale'),
+('MP19','SEPA Direct Debit'),
+('MP20','SEPA Direct Debit CORE'),
+('MP21','SEPA Direct Debit B2B'),
+('MP22','Trattenuta su somme già riscosse');
+
+CREATE TABLE IF NOT EXISTS `fe_tipi_documento` (
+ `codice` varchar(4) NOT NULL,
+ `descrizione` varchar(255) NOT NULL,
+ PRIMARY KEY (`codice`)
+) ENGINE=InnoDB;
+
+INSERT INTO `fe_tipi_documento` (`codice`, `descrizione`) VALUES
+('TD01','Fattura'),
+('TD02','Acconto/anticipo su fattura'),
+('TD03','Acconto/anticipo su parcella'),
+('TD04','Nota di credito'),
+('TD05','Nota di debito'),
+('TD06','Parcella');
+
+ALTER TABLE `co_tipidocumento` ADD `codice_fe` varchar(4) NOT NULL;
+UPDATE `co_tipidocumento` SET `codice_fe` = 'TD01' WHERE `descrizione` IN('Fattura immediata di acquisto', 'Fattura immediata di vendita', 'Fattura differita di acquisto', 'Fattura differita di vendita', 'Fattura accompagnatoria di acquisto', 'Fattura accompagnatoria di vendita');
+UPDATE `co_tipidocumento` SET `codice_fe` = 'TD04', `descrizione` = 'Nota di credito' WHERE `descrizione` = 'Nota di accredito';
+UPDATE `co_tipidocumento` SET `codice_fe` = 'TD05', `descrizione` = 'Nota di debito' WHERE `descrizione` = 'Nota di addebito';
+ALTER TABLE `co_tipidocumento` ADD FOREIGN KEY (`codice_fe`) REFERENCES `fe_tipi_documento`(`codice`) ON DELETE CASCADE;
+
+CREATE TABLE IF NOT EXISTS `fe_natura` (
+ `codice` varchar(2) NOT NULL,
+ `descrizione` text NOT NULL,
+ PRIMARY KEY (`codice`)
+) ENGINE=InnoDB;
+
+INSERT INTO `fe_natura` (`codice`, `descrizione`) VALUES
+('N1','Escluse ex art. 15'),
+('N2','Non soggette'),
+('N3','Non imponibili'),
+('N4','Esenti'),
+('N5','Regime del margine / IVA non esposta in fattura'),
+('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)');
+
+CREATE TABLE IF NOT EXISTS `fe_causali_pagamento_ritenuta` (
+ `codice` varchar(4) NOT NULL,
+ `descrizione` varchar(1000) NOT NULL,
+ PRIMARY KEY (`codice`)
+) ENGINE=InnoDB;
+
+INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES
+('A', 'Prestazioni di lavoro autonomo rientranti nell''esercizio di arte o professione abituale'),
+('B', 'Utilizzazione economica, da parte dell''autore o dell''inventore, di opere dell''ingegno, di brevetti industriali e di processi, formule o informazioni relativi a esperienze acquisite in campo industriale, commerciale o scientifico'),
+('C', 'Utili derivanti da contratti di associazione in partecipazione e da contratti di cointeressenza, quando l''apporto è costituito esclusivamente dalla prestazione di lavoro'),
+('D', 'Utili spettanti ai soci promotori e ai soci fondatori delle società di capitali'),
+('E', 'Levata di protesti cambiari da parte dei segretari comunali'),
+('G', 'Indennità corrisposte per la cessazione di attività sportiva professionale'),
+('H', 'Indennità corrisposte per la cessazione dei rapporti di agenzia delle persone fisiche e delle società di persone, con esclusione delle somme maturate entro il 31.12.2003, già imputate per competenza e tassate come reddito d''impresa'),
+('I', 'Indennità corrisposte per la cessazione da funzioni notarili'),
+('L', 'Utilizzazione economica, da parte di soggetto diverso dall''autore o dall''inventore, di opere dell''ingegno, di brevetti industriali e di processi, formule e informazioni relative a esperienze acquisite in campo industriale, commerciale o scientifico'),
+('M', 'Prestazioni di lavoro autonomo non esercitate abitualmente, obblighi di fare, di non fare o permettere'),
+('N', 'Indennità di trasferta, rimborso forfetario di spese, premi e compensi erogati nell''esercizio diretto di attività sportive dilettantistiche e in relazione a rapporti di collaborazione coordinata e continuativa di carattere amministrativo-gestionale, di natura non profe
+ssionale, resi a favore di società e associazioni sportive dilettantistiche e di cori, bande e filodrammatiche da parte del diretto
+re e dei collaboratori tecnici'),
+('O', 'Prestazioni di lavoro autonomo non esercitate abitualmente, obblighi di fare, di non fare o permettere, per le quali non sussiste l''obbligo di iscrizione alla gestione separata (Circ. Inps 104/2001)'),
+('P', 'Compensi corrisposti a soggetti non residenti privi di stabile organizzazione per l''uso o la concessione in uso di attrezzature industriali, commerciali o scientifiche che si trovano nel territorio dello Stato ovvero a società svizzere o stabili organizzazioni di soci
+età svizzere che possiedono i requisiti di cui all''art. 15, c. 2 dell’Accordo tra la Comunità Europea e la Confederazione svizzera del 26.10
+.2004 (pubblicato in G.U.C.E. 29.12.2004, n. 385/30)'),
+('Q', 'Provvigioni corrisposte ad agente o rappresentante di commercio monomandatario'),
+('R', 'Provvigioni corrisposte ad agente o rappresentante di commercio plurimandatario'),
+('S', 'Provvigioni corrisposte a commissionario'),
+('T', 'Provvigioni corrisposte a mediatore'),
+('U', 'Provvigioni corrisposte a procacciatore di affari'),
+('V', 'Provvigioni corrisposte a incaricato per le vendite a domicilio e provvigioni corrisposte a incaricato per la vendita porta a porta e per la vendita ambulante di giornali quotidiani e periodici (L. 25.02.1987, n. 67)'),
+('W', 'Corrispettivi erogati nel 2013 per prestazioni relative a contratti d''appalto cui si sono resi applicabili le disposizioni contenute nell''art. 25-ter D.P.R. 600/1973'),
+('X', 'Canoni corrisposti nel 2004 da società o enti residenti, ovvero da stabili organizzazioni di società estere di cui all''art. 26-quater, c. 1, lett. a) e b) D.P.R. 600/1973, a società o stabili organizzazioni di società, situate in altro Stato membro dell''Unione Europea in presenza dei relativi requisiti richiesti, per i quali è stato effettuato nel 2006 il rimborso della ritenuta ai sensi dell''art. 4 D. Lgs. 143/2005'),
+('Y', 'Canoni corrisposti dal 1.01.2005 al 26.07.2005 da soggetti di cui al punto precedente'),
+('Z', 'Titolo diverso dai precedenti');
+
+-- Impostazione per Regime Fiscale
+INSERT INTO `zz_settings` (`idimpostazione`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Regime Fiscale', 'RF01', 'query=SELECT codice AS id, descrizione FROM fe_regime_fiscale', 1, 'Generali', 19);