Introduzione Fatturazione Elettronica

This commit is contained in:
Thomas Zilio 2018-07-05 17:56:38 +02:00
parent 7bd7ae6ba1
commit ff2f233d17
13 changed files with 1187 additions and 36 deletions

View File

@ -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",

View File

@ -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;
}

View File

@ -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();
}

View File

@ -23,11 +23,11 @@ if ($dir == 'entrata' && empty($records[0]['ref_documento']) && $records[0]['sta
<ul class="dropdown-menu dropdown-menu-right">
<li><a href="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&op=nota_addebito&backto=record-edit">
'.tr('Nota di addebito').'
'.tr('Nota di debito').'
</a></li>
<li><a data-href="'.$rootdir.'/modules/fatture/crea_documento.php?id_module='.$id_module.'&id_record='.$id_record.'&iddocumento='.$id_record.'" data-title="Aggiungi nota di accredito" data-target="#bs-popup">
'.tr('Nota di accredito').'
<li><a data-href="'.$rootdir.'/modules/fatture/crea_documento.php?id_module='.$id_module.'&id_record='.$id_record.'&iddocumento='.$id_record.'" data-title="Aggiungi nota di credito" data-target="#bs-popup">
'.tr('Nota di credito').'
</a></li>
</ul>
</div>';

View File

@ -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_');

View File

@ -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']));

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -0,0 +1,898 @@
<?php
namespace Plugins\Fatturazione;
use FluidXml\FluidXml;
use Respect\Validation\Validator as v;
use Stringy\Stringy as S;
/**
* Classe per la gestione della fatturazione elettronica in XML.
*
* @since 2.4.2
*/
class FatturaElettronica
{
protected $azienda;
protected $cliente;
protected $documento;
protected $righe_documento;
public function __construct($id_documento)
{
$database = \Database::getConnection();
// Documento
$this->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)).'<br>';
}
}
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',
],
];
}

View File

@ -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';

View File

@ -1,6 +1,8 @@
<?php
// Aggiornamento nazioni con codice ISO 3166-1 alpha-2 e nome in inglese
/*
* Aggiornamento nazioni con codice ISO 3166-1 alpha-2 e nome in inglese
*/
$it = [
'AF' => '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 dIvoire',
@ -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,
]);
}
}

View File

@ -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 darte, dantiquariato o da collezione (art.36, DL 41/95)'),
('RF15','Agenzie di vendite allasta di oggetti darte, 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 dellAccordo 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);