From 083dcaa51816f7d663cdba53ddd747bde23e6b6b Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 9 Nov 2018 12:45:22 +0100 Subject: [PATCH] Codice CUP, CIG e contratto in FE --- modules/contratti/actions.php | 4 +- modules/contratti/edit.php | 41 +++++---- modules/interventi/actions.php | 4 + modules/interventi/edit.php | 32 ++++++- modules/iva/edit.php | 2 +- plugins/exportPA/src/FatturaElettronica.php | 92 ++++++++++++--------- update/2_4_2.sql | 4 +- 7 files changed, 120 insertions(+), 59 deletions(-) diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index f23a87abe..285e21fc7 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -76,11 +76,11 @@ switch (post('op')) { $costo_orario = post('costo_orario'); $costo_km = post('costo_km'); $costo_diritto_chiamata = post('costo_diritto_chiamata'); - + $codice_cig = post('codice_cig'); $codice_cup = post('codice_cup'); - $query = 'UPDATE co_contratti SET idanagrafica='.prepare($idanagrafica).', idsede='.prepare($idsede).', idstato='.prepare($idstato).', nome='.prepare($nome).', idagente='.prepare($idagente).', idpagamento='.prepare($idpagamento).', numero='.prepare($numero).', budget='.prepare($budget).', idreferente='.prepare($idreferente).', validita='.prepare($validita).', data_bozza='.prepare($data_bozza).', data_accettazione='.prepare($data_accettazione).', data_rifiuto='.prepare($data_rifiuto).', data_conclusione='.prepare($data_conclusione).', rinnovabile='.prepare($rinnovabile).', giorni_preavviso_rinnovo='.prepare($giorni_preavviso_rinnovo).', esclusioni='.prepare($esclusioni).', descrizione='.prepare($descrizione).', codice_cig='.prepare($codice_cig).', codice_cup='.prepare($codice_cup).' WHERE id='.prepare($id_record); + $query = 'UPDATE co_contratti SET idanagrafica='.prepare($idanagrafica).', idsede='.prepare($idsede).', idstato='.prepare($idstato).', nome='.prepare($nome).', idagente='.prepare($idagente).', idpagamento='.prepare($idpagamento).', numero='.prepare($numero).', budget='.prepare($budget).', idreferente='.prepare($idreferente).', validita='.prepare($validita).', data_bozza='.prepare($data_bozza).', data_accettazione='.prepare($data_accettazione).', data_rifiuto='.prepare($data_rifiuto).', data_conclusione='.prepare($data_conclusione).', rinnovabile='.prepare($rinnovabile).', giorni_preavviso_rinnovo='.prepare($giorni_preavviso_rinnovo).', esclusioni='.prepare($esclusioni).', descrizione='.prepare($descrizione).', id_documento_fe='.prepare(post('id_documento_fe')).', codice_cig='.prepare($codice_cig).', codice_cup='.prepare($codice_cup).' WHERE id='.prepare($id_record); // costo_diritto_chiamata='.prepare($costo_diritto_chiamata).', ore_lavoro='.prepare($ore_lavoro).', costo_orario='.prepare($costo_orario).', costo_km='.prepare($costo_km).' $dbo->query($query); diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index 794ed12ed..e8cd76fe4 100644 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -65,32 +65,20 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
-
+
{[ "type": "number", "label": "", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "giorni" ]}
-
+
{[ "type": "checkbox", "label": "", "name": "rinnovabile", "help": "", "value": "$rinnovabile$" ]}
-
+
{[ "type": "number", "label": "", "name": "giorni_preavviso_rinnovo", "decimals": "0", "value": "$giorni_preavviso_rinnovo$", "icon-after": "giorni", "disabled": ]}
- -
- {[ "type": "text", "label": "", "name": "codice_cig", "required": 0, "value": "$codice_cig$", "maxlength": 15 ]} -
- -
- {[ "type": "text", "label": "", "name": "codice_cup", "required": 0, "value": "$codice_cup$", "maxlength": 15 ]} -
- -
- -
{[ "type": "date", "label": "", "name": "data_bozza", "value": "$data_bozza$" ]}
@@ -145,6 +133,29 @@ if ($record['stato'] == 'Emessa') {
+ +
+
+

+
+ +
+
+
+ {[ "type": "text", "label": "", "name": "id_documento_fe", "required": 0, "value": "$id_documento_fe$", "maxlength": 20 ]} +
+ +
+ {[ "type": "text", "label": "", "name": "codice_cig", "required": 0, "value": "$codice_cig$", "maxlength": 15 ]} +
+ +
+ {[ "type": "text", "label": "", "name": "codice_cup", "required": 0, "value": "$codice_cup$", "maxlength": 15 ]} +
+
+
+
+
diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index a97c60735..0e360018f 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -77,6 +77,10 @@ switch (post('op')) { 'sconto_globale' => $sconto, 'tipo_sconto_globale' => $tipo_sconto, + + 'id_documento_fe' => post('id_documento_fe'), + 'codice_cup' => post('codice_cup'), + 'codice_cig' => post('codice_cig'), ], ['id' => $id_record]); $stato = $dbo->selectOne('in_statiintervento', '*', ['idstatointervento' => post('idstatointervento')]); diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php index 30c70f829..d68783a85 100644 --- a/modules/interventi/edit.php +++ b/modules/interventi/edit.php @@ -81,8 +81,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
- -
@@ -142,6 +140,36 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
+ + +
+
+

+
+ +
+
+
+ {[ "type": "text", "label": "", "name": "id_documento_fe", "required": 0, "value": "$id_documento_fe$", "maxlength": 20, "readonly": "" ]} +
+ +
+ {[ "type": "text", "label": "", "name": "codice_cig", "required": 0, "value": "$codice_cig$", "maxlength": 15, "readonly": "" ]} +
+ +
+ {[ "type": "text", "label": "", "name": "codice_cup", "required": 0, "value": "$codice_cup$", "maxlength": 15, "readonly": "" ]} +
+
+
+
+ +
diff --git a/modules/iva/edit.php b/modules/iva/edit.php index 7aca0dba7..dab116f48 100644 --- a/modules/iva/edit.php +++ b/modules/iva/edit.php @@ -58,7 +58,7 @@ $esigibilita = [
- {[ "type": "select", "label": "", "name": "esigibilita", "value": "$esigibilita$", "values": , "required": 1 ]} + {[ "type": "select", "label": "", "name": "esigibilita", "value": "$esigibilita$", "values": , "required": 1 ]}
diff --git a/plugins/exportPA/src/FatturaElettronica.php b/plugins/exportPA/src/FatturaElettronica.php index 13b95c2f3..7c83d3872 100644 --- a/plugins/exportPA/src/FatturaElettronica.php +++ b/plugins/exportPA/src/FatturaElettronica.php @@ -29,6 +29,11 @@ class FatturaElettronica /** @var array Informazioni sul documento */ protected $documento = []; + /** @var array Contratti collegati al documento */ + protected $contratti = []; + /** @var array Righe del documento */ + protected $righe = []; + /** @var array Stato di validazione interna dell'XML della fattura */ protected $is_valid = null; /** @var array XML della fattura */ @@ -98,7 +103,32 @@ class FatturaElettronica */ public function getRighe() { - return database()->fetchArray('SELECT * FROM `co_righe_documenti` WHERE `sconto_globale` = 0 AND is_descrizione = 0 AND `iddocumento` = '.prepare($this->getDocumento()['id'])); + if (empty($this->righe)) { + $this->righe = database()->fetchArray('SELECT * FROM `co_righe_documenti` WHERE `sconto_globale` = 0 AND is_descrizione = 0 AND `iddocumento` = '.prepare($this->getDocumento()['id'])); + } + + return $this->righe; + } + + /** + * Restituisce i contratti collegati al documento (contratti e interventi). + * + * @return array + */ + public function getContratti() + { + if (empty($this->contratti)) { + $documento = $this->getDocumento(); + $database = database(); + + $contratti = $database->fetchArray('SELECT `id_documento_fe`, `codice_cig`, `codice_cup` FROM `co_contratti` INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idcontratto` = `co_contratti`.`id` WHERE `co_righe_documenti`.`iddocumento` = '.prepare($documento['id']).' AND `id_documento_fe` IS NOT NULL'); + + $interventi = $database->fetchArray('SELECT `id_documento_fe`, `codice_cig`, `codice_cup` FROM `in_interventi` INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idintervento` = `in_interventi`.`id` WHERE `co_righe_documenti`.`iddocumento` = '.prepare($documento['id']).' AND `id_documento_fe` IS NOT NULL'); + + $this->contratti = array_merge($contratti, $interventi); + } + + return $this->contratti; } /** @@ -199,8 +229,6 @@ class FatturaElettronica // Informazioni specifiche azienda if ($azienda) { - // TODO: AlboProfessionale, ProvinciaAlbo, NumeroIscrizioneAlbo, DataIscrizioneAlbo - $result['RegimeFiscale'] = setting('Regime Fiscale'); } @@ -242,7 +270,6 @@ class FatturaElettronica $result = [ 'DatiAnagrafici' => static::getDatiAnagrafici($azienda, true), 'Sede' => static::getSede($azienda), - // TODO: StabileOrganizzazione, ]; // IscrizioneREA @@ -278,8 +305,6 @@ class FatturaElettronica $result['Contatti']['Email'] = $azienda['email']; } - // TODO: RiferimentoAmministrazione - return $result; } @@ -295,7 +320,6 @@ class FatturaElettronica $result = [ 'DatiAnagrafici' => static::getDatiAnagrafici($cliente), 'Sede' => static::getSede($cliente), - // TODO: StabileOrganizzazione, RappresentanteFiscale ]; return $result; @@ -316,8 +340,7 @@ class FatturaElettronica 'Divisa' => 'EUR', 'Data' => $documento['data'], 'Numero' => $documento['numero_esterno'], - //'Causale' => $documento['causale'], - // TODO: vari + // TODO: 'Causale' => $documento['causale'], ]; // Ritenuta d'Acconto @@ -403,30 +426,23 @@ class FatturaElettronica */ protected static function getDatiContratto($fattura) { - $documento = $fattura->getDocumento(); - $righe_documento = $fattura->getRighe(); - $database = database(); + $contratti = $fattura->getContratti(); $result = []; + foreach ($contratti as $contratto) { + $dati_contratto = [ + 'IdDocumento' => $contratto['id_documento_fe'], + ]; - foreach ($righe_documento as $riga) { - if (!empty($riga['idcontratto'])) { - $numero_contratto = $database->fetchOne('SELECT numero FROM co_contratti WHERE id = '.prepare($riga['idcontratto']))['numero']; - $codice_cig = $database->fetchOne('SELECT codice_cig FROM co_contratti WHERE id = '.prepare($riga['idcontratto']))['codice_cig']; - $codice_cup = $database->fetchOne('SELECT codice_cup FROM co_contratti WHERE id = '.prepare($riga['idcontratto']))['codice_cup']; - - $result[] = [ - 'IdDocumento' => $numero_contratto, - ]; - - if (!empty($codice_cig)) { - $result['CodiceCIG'] = $codice_cig; - } - - if (!empty($codice_cup)) { - $result['CodiceCUP'] = $codice_cup; - } + if (!empty($contratto['codice_cig'])) { + $dati_contratto['CodiceCIG'] = $contratto['codice_cig']; } + + if (!empty($contratto['codice_cup'])) { + $dati_contratto['CodiceCUP'] = $contratto['codice_cup']; + } + + $result[] = $dati_contratto; } return $result; @@ -444,15 +460,15 @@ class FatturaElettronica $result = [ 'DatiGeneraliDocumento' => static::getDatiGeneraliDocumento($fattura), - // TODO: DatiOrdineAcquisto, DatiContratto, DatiConvenzione, DatiRicezione, DatiFattureCollegate, DatiSAL, DatiDDT, FatturaPrincipale ]; - // Aggiungo nodo codice cig, cup solo per enti pubblici - if ($cliente['tipo'] == 'Ente pubblico') { - // Controllo le le righe per la fatturazione di contratti - $dati_contratto = static::getDatiContratto($fattura); - if (!empty($dati_contratto)) { - $result['DatiContratto'] = $dati_contratto; + // Controllo le le righe per la fatturazione di contratti + $dati_contratti = static::getDatiContratto($fattura); + if (!empty($dati_contratti)) { + foreach($dati_contratti as $dato){ + $result[] = [ + 'DatiContratto' => $dato, + ]; } } @@ -540,8 +556,10 @@ class FatturaElettronica 'EsigibilitaIVA' => $riepilogo['esigibilita'], ]; + // TODO: la dicitura può essere diversa tra diverse IVA con stessa percentuale/natura + // nei riepiloghi viene fatto un accorpamento percentuale/natura if (!empty($riepilogo['dicitura'])) { - $iva['RiferimentoNormativo'] = $riepilogo['dicitura']; + //$iva['RiferimentoNormativo'] = $riepilogo['dicitura']; } $result[] = [ diff --git a/update/2_4_2.sql b/update/2_4_2.sql index e0287b255..f8db0846f 100644 --- a/update/2_4_2.sql +++ b/update/2_4_2.sql @@ -600,8 +600,8 @@ UPDATE `zz_plugins` SET `options` = ' { "main_query": [ { "type": "table", "fiel UPDATE `zz_plugins` SET `options` = ' { "main_query": [ { "type": "table", "fields": "Numero, Data, Descrizione, Qtà", "query": "SELECT dt_ddt.id, (SELECT `id` FROM `zz_modules` WHERE `name` = \'Ddt di vendita\') AS _link_module_, dt_ddt.id AS _link_record_, IF(dt_ddt.numero_esterno = \'\', dt_ddt.numero, dt_ddt.numero_esterno) AS Numero, DATE_FORMAT(dt_ddt.data, \'%d/%m/%Y\') AS Data, dt_righe_ddt.descrizione AS `Descrizione`, REPLACE(REPLACE(REPLACE(FORMAT(dt_righe_ddt.qta, 2), \',\', \'#\'), \'.\', \',\'), \'#\', \'.\') AS `Qtà` FROM dt_ddt LEFT JOIN dt_righe_ddt ON dt_ddt.id=dt_righe_ddt.idddt WHERE dt_ddt.idanagrafica=|id_parent| GROUP BY dt_ddt.id HAVING 2=2 ORDER BY dt_ddt.id DESC"} ]}' WHERE `zz_plugins`.`name` = 'Ddt del cliente'; -- Aggiunto codice cig e codice cup per contratti -ALTER TABLE `co_contratti` ADD `codice_cig` VARCHAR(15) NOT NULL AFTER `tipo_sconto_globale`; -ALTER TABLE `co_contratti` ADD `codice_cup` VARCHAR(15) NOT NULL AFTER `codice_cig`; +ALTER TABLE `co_contratti` ADD `codice_cig` VARCHAR(15) AFTER `tipo_sconto_globale`, ADD `codice_cup` VARCHAR(15) AFTER `codice_cig`, ADD `id_documento_fe` VARCHAR(20) AFTER `codice_cup`; +ALTER TABLE `in_interventi` ADD `codice_cig` VARCHAR(15) AFTER `tipo_sconto_globale`, ADD `codice_cup` VARCHAR(15) AFTER `codice_cig`, ADD `id_documento_fe` VARCHAR(20) AFTER `codice_cup`; -- Agiunta data e ora generazione fattura elettronica ALTER TABLE `co_documenti` ADD `xml_generated_at` TIMESTAMP NULL AFTER `codice_xml`;