From 0d4e088b26ba7dd181fcf0810ee83daf95f643d1 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 6 Jul 2018 18:06:23 +0200 Subject: [PATCH] Miglioramento Fatturazione Elettronica --- plugins/fatturazione/FatturaElettronica.php | 639 +++++++++++++------- update/2_4_2.sql | 31 +- 2 files changed, 435 insertions(+), 235 deletions(-) diff --git a/plugins/fatturazione/FatturaElettronica.php b/plugins/fatturazione/FatturaElettronica.php index 93c519f8c..a4f89b26d 100644 --- a/plugins/fatturazione/FatturaElettronica.php +++ b/plugins/fatturazione/FatturaElettronica.php @@ -13,51 +13,109 @@ use Stringy\Stringy as S; */ class FatturaElettronica { - protected $azienda; - protected $cliente; + /** @var array Informazioni sull'anagrafica Azienda */ + protected static $azienda = []; - protected $documento; - protected $righe_documento; + /** @var array Informazioni sull'anagrafica Cliente del documento */ + protected $cliente = []; + /** @var array Informazioni sul documento */ + protected $documento = []; + /** @var array Informazioni sulle righe del documento */ + protected $righe_documento = []; + + /** @var array Stato di validazione interna dell'XML della fattura */ + protected $is_valid = null; + /** @var array XML della fattura */ + protected $xml = null; 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)); + $documento = $database->fetchOne('SELECT *, (SELECT `codice_tipo_documento_fe` FROM `co_tipidocumento` WHERE `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento`) AS `tipo_documento`, (SELECT `descrizione` FROM `co_statidocumento` WHERE `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`) AS `stato` 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'])); + // Controllo sulla possibilità di creare la fattura elettronica + if ($documento['stato'] != 'Emessa') { + throw new UnexpectedValueException(); + } + $this->documento = $documento; } - public function getAzienda() + /** + * Restituisce le informazioni sull'anagrafica azienda. + * + * @return array + */ + public static function getAzienda() { - return $this->azienda; + if (empty(self::$azienda)) { + $database = \Database::getConnection(); + + self::$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'))); + } + + return self::$azienda; } + /** + * Restituisce le informazioni sull'anagrafica cliente legata al documento. + * + * @return array + */ public function getCliente() { + if (empty($this->cliente)) { + $database = \Database::getConnection(); + + $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->getDocumento()['idanagrafica'])); + } + return $this->cliente; } + /** + * Restituisce le informazioni relative al documento. + * + * @return array + */ public function getDocumento() { return $this->documento; } + /** + * Restituisce le informazioni relative alle righe del documento. + * + * @return array + */ public function getRigheDocumento() { + if (empty($this->righe_documento)) { + $database = \Database::getConnection(); + + $this->righe_documento = $database->select('co_righe_documenti', '*', ['iddocumento' => $this->getDocumento()['idanagrafica']]); + } + return $this->righe_documento; } /** - * Undocumented function. + * Restituisce lo stato di validazione interna dell'XML della fattura. + * + * @return bool + */ + public function isValid() + { + if (empty($this->is_valid)) { + $this->__toString(); + } + + return $this->is_valid; + } + + /** + * Restituisce l'array responsabile per la generazione del tag DatiTrasmission. * * @return array */ @@ -71,86 +129,157 @@ class FatturaElettronica ], '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'], - ], + 'CodiceDestinatario' => !empty($cliente['codice_pa']) ? $cliente['codice_pa'] : '0000000', ]; + // Telefono di contatto + if (!empty($azienda['telefono'])) { + $result['ContattiTrasmittente']['Telefono'] = $azienda['telefono']; + } + + // Email di contatto + if (!empty($azienda['email'])) { + $result['ContattiTrasmittente']['Email'] = $azienda['email']; + } + // Inizializzazione PEC solo se necessario - if (empty($cliente['cod_sogei'])) { - $result['PECDestinatario'] = $cliente['cod_sogei_pec']; + if (empty($cliente['codice_pa'])) { + $result['PECDestinatario'] = $cliente['pec']; } return $result; } /** - * Undocumented function. + * Restituisce l'array responsabile per la generazione dei tag DatiAnagrafici per Azienda e Cliente. * * @return array */ - protected static function getDatiAzienda($azienda) + protected static function getDatiAnagrafici($anagrafica, $azienda = false) + { + $result = []; + + // Partita IVA (obbligatoria se presente) + if (!empty($anagrafica['piva'])) { + $result['IdFiscaleIVA'] = [ + 'IdPaese' => $anagrafica['nazione'], + 'IdCodice' => $anagrafica['piva'], + ]; + } + + // Codice fiscale + if (!empty($anagrafica['codice_fiscale'])) { + $result['CodiceFiscale'] = $anagrafica['codice_fiscale']; + } + + $result['Anagrafica'] = [ + 'Denominazione' => $anagrafica['ragione_sociale'], + // TODO: 'Nome' => $azienda['ragione_sociale'], + // TODO: 'Cognome' => $azienda['ragione_sociale'], + // TODO: 'Titolo' => $azienda['ragione_sociale'], + // TODO: CodEORI + ]; + + // Informazioni specifiche azienda + if ($azienda) { + // AlboProfessionale, ProvinciaAlbo, NumeroIscrizioneAlbo, DataIscrizioneAlbo + + $result['RegimeFiscale'] = \Settings::get('Regime Fiscale'); + } + + return $result; + } + + /** + * Restituisce l'array responsabile per la generazione dei tag Sede per Azienda e Cliente. + * + * @return array + */ + protected static function getSede($anagrafica) { $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 + 'Indirizzo' => $anagrafica['indirizzo'], + 'CAP' => $anagrafica['cap'], + 'Comune' => $anagrafica['citta'], + ]; + + // Provincia se impostata e SOLO SE nazione ITALIA + if (!empty($azienda['provincia']) && $azienda['nazione'] == 'IT') { + $result['Provincia'] = $azienda['provincia']; + } + + $result['Nazione'] = $anagrafica['nazione']; + + return $result; + } + + /** + * Restituisce l'array responsabile per la generazione del tag CedentePrestatore. + * + * @return array + */ + protected static function getCedentePrestatore($azienda) + { + $result = [ + 'DatiAnagrafici' => self::getDatiAnagrafici($azienda, true), + 'Sede' => self::getSede($azienda), + // TODO: StabileOrganizzazione, + ]; + + // IscrizioneREA + if (!empty($azienda['codicerea'])) { + $result['IscrizioneREA'] = [ + 'Ufficio' => strtoupper(substr($azienda['capitale_sociale'], 0, 2)), + 'NumeroREA' => $azienda['codicerea'], + ]; + + if (!empty($azienda['capitale_sociale'])) { + $result['IscrizioneREA']['CapitaleSociale'] = $azienda['capitale_sociale']; + } + + $result['IscrizioneREA']['StatoLiquidazione'] = 'LN'; // Non in liquidazione + } + + // Contatti + + // Telefono + if (!empty($azienda['telefono'])) { + $result['Contatti']['Telefono'] = $azienda['telefono']; + } + + // Fax + if (!empty($azienda['email'])) { + $result['Contatti']['Fax'] = $azienda['fax']; + } + + // Email + if (!empty($azienda['email'])) { + $result['Contatti']['Email'] = $azienda['email']; + } + + // TODO: RiferimentoAmministrazione + + return $result; + } + + /** + * Restituisce l'array responsabile per la generazione del tag CessionarioCommittente. + * + * @return array + */ + protected static function getCessionarioCommittente($cliente) + { + $result = [ + 'DatiAnagrafici' => self::getDatiAnagrafici($cliente), + 'Sede' => self::getSede($cliente), + // TODO: StabileOrganizzazione, RappresentanteFiscale ]; 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. + * Restituisce l'array responsabile per la generazione del tag DatiGeneraliDocumento. * * @return array */ @@ -168,7 +297,7 @@ class FatturaElettronica } /** - * Undocumented function. + * Restituisce l'array responsabile per la generazione del tag DatiDocumento. * * @return array */ @@ -182,7 +311,7 @@ class FatturaElettronica } /** - * Undocumented function. + * Restituisce l'array responsabile per la generazione del tag DatiBeniServizi. * * @return array */ @@ -197,12 +326,12 @@ class FatturaElettronica $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']; + $iva = $database->fetchArray('SELECT `percentuale` FROM `co_iva` WHERE `id` = '.prepare($riga['idiva'])); + $percentuale = $iva[0]['percentuale']; $result[] = [ 'DettaglioLinee' => [ - 'NumeroLinea' => $numero, + 'NumeroLinea' => $numero + 1, 'Descrizione' => $riga['descrizione'], 'Quantita' => $riga['qta'], 'PrezzoUnitario' => $prezzo_unitario, @@ -211,21 +340,21 @@ class FatturaElettronica 'Percentuale' => ($riga['tipo_sconto'] == 'PRC') ? $riga['sconto'] : ($riga['sconto'] * 100) / $riga['subtotale'], ], 'PrezzoTotale' => $prezzo_totale, - 'AliquotaIVA' => $id_iva, + 'AliquotaIVA' => $percentuale, ], ]; } // 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']; + $riepiloghi = $database->fetchArray('SELECT SUM(`subtotale` - `sconto`) as totale, SUM(`iva`) as iva, `idiva` FROM `co_righe_documenti` WHERE `iddocumento` = '.prepare($documento['id']).' GROUP BY `idiva`'); + foreach ($riepiloghi as $riepilogo) { + $iva = $database->fetchArray('SELECT `percentuale` FROM `co_iva` WHERE `id` = '.prepare($riepilogo['idiva'])); + $percentuale = $iva[0]['percentuale']; $result[] = [ 'DatiRiepilogo' => [ - 'AliquotaIVA' => $id_iva, - 'ImponibileImporto' => $riepilogo['tot'], + 'AliquotaIVA' => $percentuale, + 'ImponibileImporto' => $riepilogo['totale'], 'Imposta' => $riepilogo['iva'], 'EsigibilitaIVA' => 'I', ], @@ -236,37 +365,64 @@ class FatturaElettronica } /** - * Undocumented function. + * Restituisce l'array responsabile per la generazione del tag DatiPagamento. * * @return array */ protected static function getDatiPagamento($documento) { + $database = \Database::getConnection(); + + $pagamento = $database->fetchOne('SELECT * FROM `co_pagamenti` WHERE `id` = '.prepare($documento['idpagamento'])); + $result = [ - 'CondizioniPagamento' => '', - 'DettaglioPagamento' => [ - 'ModalitaPagamento' => '', - 'DataScadenzaPagamento' => '', - 'ImportoPagamento' => '', - ], + 'CondizioniPagamento' => ($pagamento['prc'] == 100) ? 'TP02' : 'TP01', ]; + $scadenze = $database->fetchArray('SELECT * FROM `co_scadenziario` WHERE `iddocumento` = '.prepare($documento['id'])); + foreach ($scadenze as $scadenza) { + $result[] = [ + 'DettaglioPagamento' => [ + 'ModalitaPagamento' => $pagamento['codice_modalita_pagemento_fe'], + 'DataScadenzaPagamento' => $scadenza['scadenza'], + 'ImportoPagamento' => $scadenza['da_pagare'], + ], + ]; + } + return $result; } - protected static function getHeader($documento, $azienda, $cliente) + /** + * Restituisce l'array responsabile per la generazione del tag FatturaElettronicaHeader. + * + * @return array + */ + protected static function getHeader($fattura) { + $azienda = self::getAzienda(); + $documento = $fattura->getDocumento(); + $cliente = $fattura->getCliente(); + $result = [ 'DatiTrasmissione' => self::getDatiTrasmissione($documento, $azienda, $cliente), - 'CedentePrestatore' => self::getDatiAzienda($azienda), - 'CessionarioCommittente' => self::getDatiCliente($cliente), + 'CedentePrestatore' => self::getCedentePrestatore($azienda), + 'CessionarioCommittente' => self::getCessionarioCommittente($cliente), ]; return $result; } - protected static function getBody($documento, $azienda, $cliente, $righe_documento) + /** + * Restituisce l'array responsabile per la generazione del tag FatturaElettronicaBody. + * + * @return array + */ + protected static function getBody($fattura) { + $documento = $fattura->getDocumento(); + $righe_documento = $fattura->getRigheDocumento(); + $result = [ 'DatiGenerali' => self::getDatiDocumento($documento), 'DatiBeniServizi' => self::getDatiBeniServizi($documento, $righe_documento), @@ -276,65 +432,86 @@ class FatturaElettronica return $result; } - protected static function prepareForXML($input, $key = null) + /** + * Prepara i contenuti per la generazione dell'XML della fattura. + * Effettua inoltre dei controlli interni di validità sui campi previsti dallo standard. + * + * @param mixed $input + * @param string $key + * + * @return mixed + */ + protected function prepareForXML($input, $key = null) { $output = null; if (is_array($input)) { foreach ($input as $key => $value) { - $output[$key] = self::prepareForXML($value, $key); + $output[$key] = $this->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])) { + } elseif ($info['type'] != 'integer' && isset($size[1])) { + $output = trim($output); 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(); - } + $validator = v::stringType(); if (isset($size[1])) { $validator = $validator->length($size[0], $size[1]); } } elseif ($info['type'] == 'decimal') { $validator = v::floatVal(); + } elseif ($info['type'] == 'integer') { + $validator = v::intVal(); } elseif ($info['type'] == 'date') { $validator = v::date(); } if (!empty($validator)) { - //echo $key.': '.intval($validator->validate($output)).'
'; + $validation = $validator->validate($output); + + $this->is_valid &= $validation; + + //echo $key.': '.intval($validation).'
'; } } return $output; } + /** + * Salva il file XML. + * + * @param string $directory + * + * @return string Nome del file + */ 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']; + $azienda = self::getAzienda(); + $codice = 'IT'.(empty($azienda['piva']) ? $azienda['codice_fiscale'] : $azienda['piva']); - $filename = 'IT'.$codice.'_'.date('y').secure_random_string(3); + // Generazione nome XML + if (empty($filename) || !starts_with($filename, $codice)) { + $database = \Database::getConnection(); + + do { + $filename = $codice.'_'.date('y').secure_random_string(3); + } while ($database->fetchNum('SELECT `id` FROM `co_documenti` WHERE `codice_xml` = '.prepare($filename))); // Registrazione - $database = \Database::getConnection(); $database->update('co_documenti', ['codice_xml' => $filename], ['id' => $documento['id']]); $this->documento['codice_xml'] = $filename; } @@ -346,43 +523,51 @@ class FatturaElettronica return ($result === false) ? null : $filename; } + /** + * Restituisce il codice XML della fattura elettronica. + * + * @return string + */ public function __toString() { - $azienda = $this->getAzienda(); - $documento = $this->getDocumento(); - $cliente = $this->getCliente(); - $righe_documento = $this->getRigheDocumento(); + if (empty($this->xml)) { + $this->is_valid = true; - // Inizializzazione libreria per la generazione della fattura in XML - $fattura = new FluidXml(null); + $cliente = $this->getCliente(); - // 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]; + // Inizializzazione libreria per la generazione della fattura in XML + $fattura = new FluidXml(null); - // 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); + // Generazione dell'elemento root + $fattura->namespace('p', 'http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2'); + $root = $fattura->addChild('p:FatturaElettronica', true); + $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); + } + + // Generazione della fattura elettronica + $xml = self::prepareForXML([ + 'FatturaElettronicaHeader' => self::getHeader($this), + 'FatturaElettronicaBody' => self::getBody($this), + ]); + $fattura->add($xml); + + $this->xml = $fattura->__toString(); } - $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(); + return $this->xml; } + /** @var array Elenco di campi dello standard per la formattazione e la validazione */ protected static $validators = [ 'IdPaese' => [ 'type' => 'string', @@ -390,11 +575,11 @@ class FatturaElettronica ], 'IdCodice' => [ 'type' => 'string', - 'size' => '1-28', + 'size' => [1, 28], ], 'ProgressivoInvio' => [ 'type' => 'normalizedString', - 'size' => '1-10', + 'size' => [1, 10], ], 'FormatoTrasmissione' => [ 'type' => 'string', @@ -402,47 +587,47 @@ class FatturaElettronica ], 'CodiceDestinatario' => [ 'type' => 'string', - 'size' => '6-7', + 'size' => [6, 7], ], 'Telefono' => [ 'type' => 'normalizedString', - 'size' => '5-12', + 'size' => [5, 12], ], 'Email' => [ 'type' => 'string', - 'size' => '7-256', + 'size' => [7, 256], ], 'PECDestinatario' => [ 'type' => 'normalizedString', - 'size' => '7-256', + 'size' => [7, 256], ], 'CodiceFiscale' => [ 'type' => 'string', - 'size' => '11-16', + 'size' => [11, 16], ], 'Denominazione' => [ 'type' => 'normalizedString', - 'size' => '1-80', + 'size' => [1, 80], ], 'Nome' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'Cognome' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'Titolo' => [ 'type' => 'normalizedString', - 'size' => '2-10', + 'size' => [2, 10], ], 'CodEORI' => [ 'type' => 'string', - 'size' => '13-17', + 'size' => [13, 17], ], 'AlboProfessionale' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'ProvinciaAlbo' => [ 'type' => 'string', @@ -450,7 +635,7 @@ class FatturaElettronica ], 'NumeroIscrizioneAlbo' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'DataIscrizioneAlbo' => [ 'type' => 'date', @@ -462,11 +647,11 @@ class FatturaElettronica ], 'Indirizzo' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'NumeroCivico' => [ 'type' => 'normalizedString', - 'size' => '1-8', + 'size' => [1, 8], ], 'CAP' => [ 'type' => 'string', @@ -474,7 +659,7 @@ class FatturaElettronica ], 'Comune' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'Provincia' => [ 'type' => 'string', @@ -490,11 +675,11 @@ class FatturaElettronica ], 'NumeroREA' => [ 'type' => 'normalizedString', - 'size' => '1-20', + 'size' => [1, 20], ], 'CapitaleSociale' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'SocioUnico' => [ 'type' => 'string', @@ -506,11 +691,11 @@ class FatturaElettronica ], 'Fax' => [ 'type' => 'normalizedString', - 'size' => '5-12', + 'size' => [5, 12], ], 'RiferimentoAmministrazione' => [ 'type' => 'normalizedString', - 'size' => '1-20', + 'size' => [1, 20], ], 'SoggettoEmittente' => [ 'type' => 'string', @@ -530,7 +715,7 @@ class FatturaElettronica ], 'Numero' => [ 'type' => 'normalizedString', - 'size' => '1-20', + 'size' => [1, 20], ], 'TipoRitenuta' => [ 'type' => 'string', @@ -538,15 +723,15 @@ class FatturaElettronica ], 'ImportoRitenuta' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'AliquotaRitenuta' => [ 'type' => 'decimal', - 'size' => '4-6', + 'size' => [4, 6], ], 'CausalePagamento' => [ 'type' => 'string', - 'size' => '1-2', + 'size' => [1, 2], ], 'BolloVirtuale' => [ 'type' => 'string', @@ -554,7 +739,7 @@ class FatturaElettronica ], 'ImportoBollo' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'TipoCassa' => [ 'type' => 'string', @@ -562,19 +747,19 @@ class FatturaElettronica ], 'AlCassa' => [ 'type' => 'decimal', - 'size' => '4-6', + 'size' => [4, 6], ], 'ImportoContributoCassa' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'ImponibileCassa' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'AliquotaIVA' => [ 'type' => 'decimal', - 'size' => '4-6', + 'size' => [4, 6], ], 'Ritenuta' => [ 'type' => 'string', @@ -590,23 +775,23 @@ class FatturaElettronica ], 'Percentuale' => [ 'type' => 'decimal', - 'size' => '4-6', + 'size' => [4, 6], ], 'Importo' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'ImportoTotaleDocumento' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'Arrotondamento' => [ 'type' => 'decimal', - 'size' => '4-21', + 'size' => [4, 21], ], 'Causale' => [ 'type' => 'normalizedString', - 'size' => '1-200', + 'size' => [1, 200], ], 'Art73' => [ 'type' => 'string', @@ -614,35 +799,35 @@ class FatturaElettronica ], 'RiferimentoNumeroLinea' => [ 'type' => 'integer', - 'size' => '1-4', + 'size' => [1, 4], ], 'IdDocumento' => [ 'type' => 'normalizedString', - 'size' => '1-20', + 'size' => [1, 20], ], 'NumItem' => [ 'type' => 'normalizedString', - 'size' => '1-20', + 'size' => [1, 20], ], 'CodiceCommessaConvenzione' => [ 'type' => 'normalizedString', - 'size' => '1-100', + 'size' => [1, 100], ], 'CodiceCUP' => [ 'type' => 'normalizedString', - 'size' => '1-15', + 'size' => [1, 15], ], 'CodiceCIG' => [ 'type' => 'normalizedString', - 'size' => '1-15', + 'size' => [1, 15], ], 'RiferimentoFase' => [ 'type' => 'integer', - 'size' => '1-3', + 'size' => [1, 3], ], 'NumeroDDT' => [ 'type' => 'normalizedString', - 'size' => '1-20', + 'size' => [1, 20], ], 'DataDDT' => [ 'type' => 'date', @@ -650,35 +835,35 @@ class FatturaElettronica ], 'NumeroLicenzaGuida' => [ 'type' => 'normalizedString', - 'size' => '1-20', + 'size' => [1, 20], ], 'MezzoTrasporto' => [ 'type' => 'normalizedString', - 'size' => '1-80', + 'size' => [1, 80], ], 'CausaleTrasporto' => [ 'type' => 'normalizedString', - 'size' => '1-100', + 'size' => [1, 100], ], 'NumeroColli' => [ 'type' => 'integer', - 'size' => '1-4', + 'size' => [1, 4], ], 'Descrizione' => [ 'type' => 'normalizedString', - 'size' => '1-1000', + 'size' => [1, 1000], ], 'UnitaMisuraPeso' => [ 'type' => 'normalizedString', - 'size' => '1-10', + 'size' => [1, 10], ], 'PesoLordo' => [ 'type' => 'decimal', - 'size' => '4-7', + 'size' => [4, 7], ], 'PesoNetto' => [ 'type' => 'decimal', - 'size' => '4-7', + 'size' => [4, 7], ], 'DataOraRitiro' => [ 'type' => 'date', @@ -698,7 +883,7 @@ class FatturaElettronica ], 'NumeroFatturaPrincipale' => [ 'type' => 'string', - 'size' => '1-20', + 'size' => [1, 20], ], 'DataFatturaPrincipale' => [ 'type' => 'date', @@ -706,7 +891,7 @@ class FatturaElettronica ], 'NumeroLinea' => [ 'type' => 'integer', - 'size' => '1-4', + 'size' => [1, 4], ], 'TipoCessionePrestazione' => [ 'type' => 'string', @@ -717,19 +902,19 @@ class FatturaElettronica ], 'CodiceTipo' => [ 'type' => 'normalizedString', - 'size' => '1-35', + 'size' => [1, 35], ], 'CodiceValore' => [ 'type' => 'normalizedString', - 'size' => '1-35', + 'size' => [1, 35], ], 'Quantita' => [ 'type' => 'decimal', - 'size' => '4-21', + 'size' => [4, 21], ], 'UnitaMisura' => [ 'type' => 'normalizedString', - 'size' => '1-10', + 'size' => [1, 10], ], 'DataInizioPeriodo' => [ 'type' => 'date', @@ -741,23 +926,23 @@ class FatturaElettronica ], 'PrezzoUnitario' => [ 'type' => 'decimal', - 'size' => '4-21', + 'size' => [4, 21], ], 'PrezzoTotale' => [ 'type' => 'decimal', - 'size' => '4-21', + 'size' => [4, 21], ], 'TipoDato' => [ 'type' => 'normalizedString', - 'size' => '1-10', + 'size' => [1, 10], ], 'RiferimentoTesto' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'RiferimentoNumero' => [ 'type' => 'decimal', - 'size' => '4-21', + 'size' => [4, 21], ], 'RiferimentoData' => [ 'type' => 'normalizedString', @@ -765,15 +950,15 @@ class FatturaElettronica ], 'SpeseAccessorie' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'ImponibileImporto' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'Imposta' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'EsigibilitaIVA' => [ 'type' => 'string', @@ -781,11 +966,11 @@ class FatturaElettronica ], 'RiferimentoNormativo' => [ 'type' => 'normalizedString', - 'size' => '1-100', + 'size' => [1, 100], ], 'TotalePercorso' => [ 'type' => 'normalizedString', - 'size' => '1-15', + 'size' => [1, 15], ], 'CondizioniPagamento' => [ 'type' => 'string', @@ -793,7 +978,7 @@ class FatturaElettronica ], 'Beneficiario' => [ 'type' => 'string', - 'size' => '1-200', + 'size' => [1, 200], ], 'ModalitaPagamento' => [ 'type' => 'string', @@ -805,7 +990,7 @@ class FatturaElettronica ], 'GiorniTerminiPagamento' => [ 'type' => 'integer', - 'size' => '1-3', + 'size' => [1, 3], ], 'DataScadenzaPagamento' => [ 'type' => 'date', @@ -813,19 +998,19 @@ class FatturaElettronica ], 'ImportoPagamento' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'CodUfficioPostale' => [ 'type' => 'normalizedString', - 'size' => '1-20', + 'size' => [1, 20], ], 'CognomeQuietanzante' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'NomeQuietanzante' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'CFQuietanzante' => [ 'type' => 'string', @@ -833,15 +1018,15 @@ class FatturaElettronica ], 'TitoloQuietanzante' => [ 'type' => 'normalizedString', - 'size' => '2-10', + 'size' => [2, 10], ], 'IstitutoFinanziario' => [ 'type' => 'normalizedString', - 'size' => '1-80', + 'size' => [1, 80], ], 'IBAN' => [ 'type' => 'string', - 'size' => '15-34', + 'size' => [15, 34], ], 'ABI' => [ 'type' => 'string', @@ -853,11 +1038,11 @@ class FatturaElettronica ], 'BIC' => [ 'type' => 'string', - 'size' => '8-11', + 'size' => [8, 11], ], 'ScontoPagamentoAnticipato' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'DataLimitePagamentoAnticipato' => [ 'type' => 'date', @@ -865,7 +1050,7 @@ class FatturaElettronica ], 'PenalitaPagamentiRitardati' => [ 'type' => 'decimal', - 'size' => '4-15', + 'size' => [4, 15], ], 'DataDecorrenzaPenale' => [ 'type' => 'date', @@ -873,23 +1058,23 @@ class FatturaElettronica ], 'CodicePagamento' => [ 'type' => 'string', - 'size' => '1-60', + 'size' => [1, 60], ], 'NomeAttachment' => [ 'type' => 'normalizedString', - 'size' => '1-60', + 'size' => [1, 60], ], 'AlgoritmoCompressione' => [ 'type' => 'string', - 'size' => '1-10', + 'size' => [1, 10], ], 'FormatoAttachment' => [ 'type' => 'string', - 'size' => '1-10', + 'size' => [1, 10], ], 'DescrizioneAttachment' => [ 'type' => 'normalizedString', - 'size' => '1-100', + 'size' => [1, 100], ], 'Attachment' => [ 'type' => 'base64Binary', diff --git a/update/2_4_2.sql b/update/2_4_2.sql index bff6d9c96..55e84371a 100644 --- a/update/2_4_2.sql +++ b/update/2_4_2.sql @@ -36,7 +36,6 @@ CREATE TABLE IF NOT EXISTS `fe_regime_fiscale` ( 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)'), @@ -57,6 +56,8 @@ INSERT INTO `fe_regime_fiscale` (`codice`, `descrizione`) VALUES ('RF18','Altro'), ('RF19','Regime forfettario (art.1, c.54-89, L. 190/2014)'); +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); + CREATE TABLE IF NOT EXISTS `fe_tipo_cassa` ( `codice` varchar(4) NOT NULL, `descrizione` varchar(255) NOT NULL, @@ -87,6 +88,8 @@ INSERT INTO `fe_tipo_cassa` (`codice`, `descrizione`) VALUES ('TC21','Ente nazionale previdenza e assistenza psicologi (ENPAP)'), ('TC22','INPS'); +INSERT INTO `zz_settings` (`idimpostazione`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Tipo Cassa', 'TC22', 'query=SELECT codice AS id, descrizione FROM fe_tipo_cassa', 1, 'Fatturazione', 0); + CREATE TABLE IF NOT EXISTS `fe_modalita_pagamento` ( `codice` varchar(4) NOT NULL, `descrizione` varchar(255) NOT NULL, @@ -117,6 +120,15 @@ INSERT INTO `fe_modalita_pagamento` (`codice`, `descrizione`) VALUES ('MP21','SEPA Direct Debit B2B'), ('MP22','Trattenuta su somme già riscosse'); +ALTER TABLE `co_pagamenti` ADD `codice_modalita_pagemento_fe` varchar(4) NOT NULL; +UPDATE `co_pagamenti` SET `codice_modalita_pagemento_fe` = 'MP01' WHERE `descrizione` IN ('Rimessa diretta', 'Rimessa diretta a 30gg', 'Rimessa diretta 30gg fisso al 15', 'Contanti'); +UPDATE `co_pagamenti` SET `codice_modalita_pagemento_fe` = 'MP02' WHERE `descrizione` IN ('Assegno'); +UPDATE `co_pagamenti` SET `codice_modalita_pagemento_fe` = 'MP05' WHERE `descrizione` IN ('Bonifico 30gg d.f.', 'Bonifico 60gg d.f.', 'Bonifico 90gg d.f.', 'Bonifico 120gg d.f.', 'Bonifico 150gg d.f.', 'Bonifico 180gg d.f.', 'Bonifico 30/60gg d.f.', 'Bonifico 30/60gg d.f.', 'Bonifico 30/60/90gg d.f.', 'Bonifico 30/60/90gg d.f.', 'Bonifico 30/60/90gg d.f.', 'Bonifico 30/60/90/120gg d.f.', 'Bonifico 30/60/90/120gg d.f.', 'Bonifico 30/60/90/120gg d.f.', 'Bonifico 30/60/90/120gg d.f.', 'Bonifico 30/60/90/120/150gg d.f.', 'Bonifico 30/60/90/120/150gg d.f.', 'Bonifico 30/60/90/120/150gg d.f.', 'Bonifico 30/60/90/120/150gg d.f.', 'Bonifico 30/60/90/120/150gg d.f.', 'Bonifico 30/60/90/120/150/180gg d.f.', 'Bonifico 30/60/90/120/150/180gg d.f.', 'Bonifico 30/60/90/120/150/180gg d.f.', 'Bonifico 30/60/90/120/150/180gg d.f.', 'Bonifico 30/60/90/120/150/180gg d.f.', 'Bonifico 30/60/90/120/150/180gg d.f.', 'Bonifico 30gg d.f.f.m.', 'Bonifico 60gg d.f.f.m.', 'Bonifico 90gg d.f.f.m.', 'Bonifico 120gg d.f.f.m.', 'Bonifico 150gg d.f.f.m.', 'Bonifico 180gg d.f.f.m.', 'Bonifico 30/60gg d.f.f.m.', 'Bonifico 30/60gg d.f.f.m.', 'Bonifico 30/60/90gg d.f.f.m.', 'Bonifico 30/60/90gg d.f.f.m.', 'Bonifico 30/60/90gg d.f.f.m.', 'Bonifico 30/60/90/120gg d.f.f.m.', 'Bonifico 30/60/90/120gg d.f.f.m.', 'Bonifico 30/60/90/120gg d.f.f.m.', 'Bonifico 30/60/90/120gg d.f.f.m.', 'Bonifico 30/60/90/120/150gg d.f.f.m.', 'Bonifico 30/60/90/120/150gg d.f.f.m.', 'Bonifico 30/60/90/120/150gg d.f.f.m.', 'Bonifico 30/60/90/120/150gg d.f.f.m.', 'Bonifico 30/60/90/120/150gg d.f.f.m.', 'Bonifico 30/60/90/120/150/180gg d.f.f.m.', 'Bonifico 30/60/90/120/150/180gg d.f.f.m.', 'Bonifico 30/60/90/120/150/180gg d.f.f.m.', 'Bonifico 30/60/90/120/150/180gg d.f.f.m.', 'Bonifico 30/60/90/120/150/180gg d.f.f.m.', 'Bonifico 30/60/90/120/150/180gg d.f.f.m.', 'Bonifico bancario'); +UPDATE `co_pagamenti` SET `codice_modalita_pagemento_fe` = 'MP06' WHERE `descrizione` IN ('Cambiale'); +UPDATE `co_pagamenti` SET `codice_modalita_pagemento_fe` = 'MP08' WHERE `descrizione` IN ('Bancomat', 'Visa'); +UPDATE `co_pagamenti` SET `codice_modalita_pagemento_fe` = 'MP12' WHERE `descrizione` IN ('Ri.Ba. 30gg d.f.', 'Ri.Ba. 60gg d.f.', 'Ri.Ba. 90gg d.f.', 'Ri.Ba. 120gg d.f.', 'Ri.Ba. 150gg d.f.', 'Ri.Ba. 180gg d.f.', 'Ri.Ba. 30/60gg d.f.', 'Ri.Ba. 30/60gg d.f.', 'Ri.Ba. 30/60/90gg d.f.', 'Ri.Ba. 30/60/90gg d.f.', 'Ri.Ba. 30/60/90gg d.f.', 'Ri.Ba. 30/60/90/120gg d.f.', 'Ri.Ba. 30/60/90/120gg d.f.', 'Ri.Ba. 30/60/90/120gg d.f.', 'Ri.Ba. 30/60/90/120gg d.f.', 'Ri.Ba. 30/60/90/120/150gg d.f.', 'Ri.Ba. 30/60/90/120/150gg d.f.', 'Ri.Ba. 30/60/90/120/150gg d.f.', 'Ri.Ba. 30/60/90/120/150gg d.f.', 'Ri.Ba. 30/60/90/120/150gg d.f.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.', 'Ri.Ba. 30gg d.f.f.m.', 'Ri.Ba. 60gg d.f.f.m.', 'Ri.Ba. 90gg d.f.f.m.', 'Ri.Ba. 120gg d.f.f.m.', 'Ri.Ba. 150gg d.f.f.m.', 'Ri.Ba. 180gg d.f.f.m.', 'Ri.Ba. 30/60gg d.f.f.m.', 'Ri.Ba. 30/60gg d.f.f.m.', 'Ri.Ba. 30/60/90gg d.f.f.m.', 'Ri.Ba. 30/60/90gg d.f.f.m.', 'Ri.Ba. 30/60/90gg d.f.f.m.', 'Ri.Ba. 30/60/90/120gg d.f.f.m.', 'Ri.Ba. 30/60/90/120gg d.f.f.m.', 'Ri.Ba. 30/60/90/120gg d.f.f.m.', 'Ri.Ba. 30/60/90/120gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.f.m.', 'Ri.Ba. 30/60/90/120/150/180gg d.f.f.m.'); +ALTER TABLE `co_pagamenti` ADD FOREIGN KEY (`codice_modalita_pagemento_fe`) REFERENCES `fe_modalita_pagamento`(`codice`) ON DELETE CASCADE; + CREATE TABLE IF NOT EXISTS `fe_tipi_documento` ( `codice` varchar(4) NOT NULL, `descrizione` varchar(255) NOT NULL, @@ -131,11 +143,11 @@ INSERT INTO `fe_tipi_documento` (`codice`, `descrizione`) VALUES ('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; +ALTER TABLE `co_tipidocumento` ADD `codice_tipo_documento_fe` varchar(4) NOT NULL; +UPDATE `co_tipidocumento` SET `codice_tipo_documento_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_tipo_documento_fe` = 'TD04', `descrizione` = 'Nota di credito' WHERE `descrizione` = 'Nota di accredito'; +UPDATE `co_tipidocumento` SET `codice_tipo_documento_fe` = 'TD05', `descrizione` = 'Nota di debito' WHERE `descrizione` = 'Nota di addebito'; +ALTER TABLE `co_tipidocumento` ADD FOREIGN KEY (`codice_tipo_documento_fe`) REFERENCES `fe_tipi_documento`(`codice`) ON DELETE CASCADE; CREATE TABLE IF NOT EXISTS `fe_natura` ( `codice` varchar(2) NOT NULL, @@ -152,6 +164,10 @@ 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` DROP `esente`, ADD `codice_natura_fe` varchar(4) NOT NULL; +UPDATE `co_iva` SET `codice_natura_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'); +ALTER TABLE `co_iva` ADD FOREIGN KEY (`codice_natura_fe`) REFERENCES `fe_natura`(`codice`) ON DELETE CASCADE; + CREATE TABLE IF NOT EXISTS `fe_causali_pagamento_ritenuta` ( `codice` varchar(4) NOT NULL, `descrizione` varchar(1000) NOT NULL, @@ -187,5 +203,4 @@ età svizzere che possiedono i requisiti di cui all''art. 15, c. 2 dell’Accord ('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); +INSERT INTO `zz_settings` (`idimpostazione`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Causale ritenuta d''acconto', '', 'query=SELECT codice AS id, descrizione FROM fe_causali_pagamento_ritenuta', 1, 'Fatturazione', 0);