mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-03-09 07:47:46 +01:00
Introduzione Fatturazione Elettronica
This commit is contained in:
parent
7bd7ae6ba1
commit
ff2f233d17
@ -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",
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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>';
|
||||
|
@ -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_');
|
||||
|
||||
|
@ -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']));
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
898
plugins/fatturazione/FatturaElettronica.php
Normal file
898
plugins/fatturazione/FatturaElettronica.php
Normal 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',
|
||||
],
|
||||
];
|
||||
}
|
@ -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';
|
||||
|
||||
|
114
update/2_4_2.php
114
update/2_4_2.php
@ -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 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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
161
update/2_4_2.sql
161
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user