Codice CUP, CIG e contratto in FE

This commit is contained in:
Thomas Zilio 2018-11-09 12:45:22 +01:00
parent e3e7387b22
commit 083dcaa518
7 changed files with 120 additions and 59 deletions

View File

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

View File

@ -65,32 +65,20 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
<div class="row">
<div class="col-md-2">
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Validità'); ?>", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "giorni" ]}
</div>
<div class="col-md-2">
<div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Rinnovabile'); ?>", "name": "rinnovabile", "help": "<?php echo tr('Il contratto è rinnovabile?'); ?>", "value": "$rinnovabile$" ]}
</div>
<div class="col-md-2">
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Preavviso per rinnovo'); ?>", "name": "giorni_preavviso_rinnovo", "decimals": "0", "value": "$giorni_preavviso_rinnovo$", "icon-after": "giorni", "disabled": <?php echo $record['rinnovabile'] ? 0 : 1; ?> ]}
</div>
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Codice CIG'); ?>", "name": "codice_cig", "required": 0, "value": "$codice_cig$", "maxlength": 15 ]}
</div>
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Codice CUP'); ?>", "name": "codice_cup", "required": 0, "value": "$codice_cup$", "maxlength": 15 ]}
</div>
</div>
<div class="row">
<div class="col-md-3">
{[ "type": "date", "label": "<?php echo tr('Data bozza'); ?>", "name": "data_bozza", "value": "$data_bozza$" ]}
</div>
@ -145,6 +133,29 @@ if ($record['stato'] == 'Emessa') {
</div>
</div>
<!-- Fatturazione Elettronica -->
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><?php echo tr('Dati Fatturazione Elettronica'); ?></h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Identificatore Documento'); ?>", "name": "id_documento_fe", "required": 0, "value": "$id_documento_fe$", "maxlength": 20 ]}
</div>
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Codice CIG'); ?>", "name": "codice_cig", "required": 0, "value": "$codice_cig$", "maxlength": 15 ]}
</div>
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Codice CUP'); ?>", "name": "codice_cup", "required": 0, "value": "$codice_cup$", "maxlength": 15 ]}
</div>
</div>
</div>
</div>
<!-- COSTI -->
<div class="panel panel-primary">
<div class="panel-heading">

View File

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

View File

@ -81,8 +81,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
</div>
</div>
<!-- DATI INTERVENTO -->
<div class="panel panel-primary">
<div class="panel-heading">
@ -142,6 +140,36 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
</div>
</div>
<?php
if (empty($record['idcontratto'])) {
?>
<!-- Fatturazione Elettronica -->
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><?php echo tr('Dati Fatturazione Elettronica'); ?></h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Identificatore Documento'); ?>", "name": "id_documento_fe", "required": 0, "value": "$id_documento_fe$", "maxlength": 20, "readonly": "<?php echo $record['flag_completato']; ?>" ]}
</div>
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Codice CIG'); ?>", "name": "codice_cig", "required": 0, "value": "$codice_cig$", "maxlength": 15, "readonly": "<?php echo $record['flag_completato']; ?>" ]}
</div>
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Codice CUP'); ?>", "name": "codice_cup", "required": 0, "value": "$codice_cup$", "maxlength": 15, "readonly": "<?php echo $record['flag_completato']; ?>" ]}
</div>
</div>
</div>
</div>
<?php
}
?>
<!-- ORE LAVORO -->
<div class="panel panel-primary">
<div class="panel-heading">

View File

@ -58,7 +58,7 @@ $esigibilita = [
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Esigibilità'); ?>", "name": "esigibilita", "value": "$esigibilita$", "values": <?php echo json_encode($esigibilita); ?>, "required": 1 ]}
{[ "type": "select", "label": "<?php echo tr('Esigibilità (Fatturazione Elettronica)'); ?>", "name": "esigibilita", "value": "$esigibilita$", "values": <?php echo json_encode($esigibilita); ?>, "required": 1 ]}
</div>
</div>

View File

@ -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[] = [

View File

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