Miglioramento FE

This commit is contained in:
Thomas Zilio 2018-11-23 12:43:45 +01:00
parent e821f15fee
commit 6f2786b00e
10 changed files with 245 additions and 47 deletions

View File

@ -26,7 +26,7 @@ echo '
</div>
</div>';
// Costo unitario
// Costo unitario
echo '
<div class="row">
<div class="col-md-6">
@ -39,3 +39,70 @@ echo '
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$result['sconto_unitario'].'", "icon-after": "choice|untprc|'.$result['tipo_sconto'].'" ]}
</div>
</div>';
if ($module['name'] == 'Fatture di vendita') {
$collapsed = empty($result['data_inizio_periodo']) && empty($result['data_fine_periodo']) && empty($result['riferimento_amministrazione']);
echo '
<div class="box box-info '.($collapsed ? 'collapsed-box' : '').'">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Dati Fatturazione Elettronica').'</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-plus"></i>
</button>
</div>
</div>
<div class="box-body">';
$tipi_cessione_prestazione = [
[
'id' => 'SC',
'text' => 'SC - '.tr('Sconto'),
],
[
'id' => 'PR',
'text' => 'PR - '.tr('Premio'),
],
[
'id' => 'AB',
'text' => 'AB - '.tr('Abbuono'),
],
[
'id' => 'AC',
'text' => 'AC - '.tr('Spesa accessoria'),
],
];
// Data inizio periodo
echo '
<div class="row">
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Tipo Cessione Prestazione').'", "name": "tipo_cessione_prestazione", "value": "'.$result['tipo_cessione_prestazione'].'", "values": '.json_encode($tipi_cessione_prestazione).' ]}
</div>';
// Riferimento amministrazione
echo '
<div class="col-md-6">
{[ "type": "text", "label": "'.tr('Riferimento Amministrazione').'", "name": "riferimento_amministrazione", "value": "'.$result['riferimento_amministrazione'].'", "maxlength": 20 ]}
</div>
</div>';
// Data inizio periodo
echo '
<div class="row">
<div class="col-md-6">
{[ "type": "date", "label": "'.tr('Data Inizio Periodo').'", "name": "data_inizio_periodo", "value": "'.$result['data_inizio_periodo'].'" ]}
</div>';
// Data fine periodo
echo '
<div class="col-md-6">
{[ "type": "date", "label": "'.tr('Data Fine Periodo').'", "name": "data_fine_periodo", "value": "'.$result['data_fine_periodo'].'" ]}
</div>
</div>';
echo '
</div>
</div>';
}

View File

@ -32,7 +32,7 @@ echo '
</button>
</div>
</div>
<div class="box-body collapse">
<div class="box-body">
<div class="row">
<div class="col-md-4">
{[ "type": "text", "label": "'.tr('Partita IVA').'", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask" ]}

View File

@ -574,6 +574,12 @@ switch (post('op')) {
flash()->error(tr('Alcuni serial number sono già stati utilizzati!'));
}
// Informazioni aggiuntive FE
$articolo->data_inizio_periodo = post('data_inizio_periodo') ?: null;
$articolo->data_fine_periodo = post('data_fine_periodo') ?: null;
$articolo->riferimento_amministrazione = post('riferimento_amministrazione');
$articolo->tipo_cessione_prestazione = post('tipo_cessione_prestazione');
$articolo->save();
flash()->info(tr('Articolo aggiunto!'));
@ -618,6 +624,12 @@ switch (post('op')) {
$riga->sconto_unitario = post('sconto');
$riga->tipo_sconto = post('tipo_sconto');
// Informazioni aggiuntive FE
$riga->data_inizio_periodo = post('data_inizio_periodo') ?: null;
$riga->data_fine_periodo = post('data_fine_periodo') ?: null;
$riga->riferimento_amministrazione = post('riferimento_amministrazione');
$riga->tipo_cessione_prestazione = post('tipo_cessione_prestazione');
$riga->save();
if (post('idriga') != null) {

View File

@ -34,11 +34,11 @@ $result['prezzo'] = $riga['subtotale'] / $riga['qta'];
$file = 'riga';
if (!empty($result['is_descrizione'])) {
$file = 'descrizione';
$options['op'] = 'manage_descrizione';
} elseif (!empty($result['idarticolo'])) {
$file = 'articolo';
$options['op'] = 'manage_articolo';
}

View File

@ -54,18 +54,10 @@ switch (post('op')) {
break;
case 'update':
$numero_esterno = post('numero_esterno');
$numero = post('numero');
$data = post('data');
$idanagrafica = post('idanagrafica');
$note = post('note');
$note_aggiuntive = post('note_aggiuntive');
$idstatoordine = post('idstatoordine');
$idpagamento = post('idpagamento');
$idsede = post('idsede');
$idconto = post('idconto');
$idagente = post('idagente');
$totale_imponibile = get_imponibile_ordine($id_record);
$totale_ordine = get_totale_ordine($id_record);
@ -88,22 +80,33 @@ switch (post('op')) {
$pagamento = $rs[0]['descrizione'];
// Query di aggiornamento
$query = 'UPDATE or_ordini SET idanagrafica='.prepare($idanagrafica).','.
' numero='.prepare($numero).','.
' data='.prepare($data).','.
' idagente='.prepare($idagente).','.
' idstatoordine='.prepare($idstatoordine).','.
' idpagamento='.prepare($idpagamento).','.
' idsede='.prepare($idsede).','.
' numero_esterno='.prepare($numero_esterno).','.
' note='.prepare($note).','.
' note_aggiuntive='.prepare($note_aggiuntive).','.
' idconto='.prepare($idconto).','.
' idrivalsainps='.prepare($idrivalsainps).','.
' idritenutaacconto='.prepare($idritenutaacconto).','.
' tipo_sconto_globale='.prepare($tipo_sconto).','.
' sconto_globale='.prepare($sconto).','.
' bollo=0, rivalsainps=0, ritenutaacconto=0 WHERE id='.prepare($id_record);
$dbo->update('or_ordini', [
'idanagrafica' => post('idanagrafica'),
'data' => post('data'),
'numero' => post('numero'),
'numero_esterno' => post('numero_esterno'),
'note' => post('note'),
'note_aggiuntive' => post('note_aggiuntive'),
'idagente' => post('idagente'),
'idstatoordine' => $idstatoordine,
'idpagamento' => $idpagamento,
'idsede' => $idsede,
'idconto' => post('idconto'),
'idrivalsainps' => $idrivalsainps,
'idritenutaacconto' => $idritenutaacconto,
'sconto_globale' => $sconto,
'tipo_sconto_globale' => $tipo_sconto,
'bollo' => 0,
'rivalsainps' => 0,
'ritenutaacconto' => 0,
'id_documento_fe' => post('id_documento_fe'),
'codice_cup' => post('codice_cup'),
'codice_cig' => post('codice_cig'),
], ['id' => $id_record]);
if ($dbo->query($query)) {
aggiorna_sconto([
@ -350,10 +353,10 @@ switch (post('op')) {
break;
case 'update_position':
$orders = explode( ",", $_POST['order'] );
$orders = explode(",", $_POST['order']);
$order = 0;
foreach( $orders as $idriga ){
foreach ($orders as $idriga) {
$dbo->query('UPDATE `or_righe_ordini` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$order++;
}

View File

@ -93,15 +93,36 @@ if ($module['name'] == 'Ordini cliente') {
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note aggiuntive'); ?>", "name": "note_aggiuntive", "help": "<?php echo tr('Note interne.'); ?>", "value": "$note_aggiuntive$" ]}
{[ "type": "textarea", "label": "<?php echo tr('Note aggiuntive'); ?>", "name": "note_aggiuntive", "help": "<?php echo tr('Note interne'); ?>", "value": "$note_aggiuntive$" ]}
</div>
</div>
</div>
</div>
<!-- Fatturazione Elettronica PA-->
<div class="panel panel-primary <?php echo ($dir == 'entrata' && $record['tipo_anagrafica'] == 'Ente pubblico') ? 'show' : 'hide'; ?>" >
<div class="panel-heading">
<h3 class="panel-title"><?php echo tr('Dati appalto'); ?></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>
</form>
<!-- RIGHE -->
<div class="panel panel-primary">
<div class="panel-heading">

View File

@ -8,5 +8,16 @@ if (isset($id_record)) {
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($id_record).'") WHERE id='.prepare($id_record));
}
$record = $dbo->fetchOne('SELECT *, or_ordini.note, or_ordini.idpagamento, or_ordini.id AS idordine, or_statiordine.descrizione AS `stato`, or_tipiordine.descrizione AS `descrizione_tipodoc`, (SELECT completato FROM or_statiordine WHERE or_statiordine.id=or_ordini.idstatoordine) AS flag_completato FROM ((or_ordini LEFT OUTER JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id) INNER JOIN an_anagrafiche ON or_ordini.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN or_tipiordine ON or_ordini.idtipoordine=or_tipiordine.id WHERE or_ordini.id='.prepare($id_record));
$record = $dbo->fetchOne('SELECT *,
or_ordini.note,
or_ordini.idpagamento,
or_ordini.id AS idordine,
or_statiordine.descrizione AS `stato`,
or_tipiordine.descrizione AS `descrizione_tipodoc`,
(SELECT tipo FROM an_anagrafiche WHERE idanagrafica = or_ordini.idanagrafica) AS tipo_anagrafica,
(SELECT completato FROM or_statiordine WHERE or_statiordine.id=or_ordini.idstatoordine) AS flag_completato
FROM or_ordini LEFT OUTER JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id
INNER JOIN an_anagrafiche ON or_ordini.idanagrafica=an_anagrafiche.idanagrafica
INNER JOIN or_tipiordine ON or_ordini.idtipoordine=or_tipiordine.id
WHERE or_ordini.id='.prepare($id_record));
}

View File

@ -31,6 +31,8 @@ class FatturaElettronica
/** @var array Contratti collegati al documento */
protected $contratti = [];
/** @var array Ordini di acquisto collegati al documento */
protected $ordini = [];
/** @var array Righe del documento */
protected $righe = [];
@ -132,6 +134,25 @@ class FatturaElettronica
return $this->contratti;
}
/**
* Restituisce gli ordini di acquisto collegati al documento.
*
* @return array
*/
public function getOrdiniAcquisto()
{
if (empty($this->ordini)) {
$documento = $this->getDocumento();
$database = database();
$ordini = $database->fetchArray('SELECT `id_documento_fe`, `codice_cig`, `codice_cup` FROM `or_ordini` INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idordine` = `or_ordini`.`id` WHERE `co_righe_documenti`.`iddocumento` = '.prepare($documento['id']).' AND `id_documento_fe` IS NOT NULL');
$this->ordini = $ordini;
}
return $this->ordini;
}
/**
* Restituisce le informazioni relative al documento.
*
@ -430,6 +451,36 @@ class FatturaElettronica
return $result;
}
/**
* Restituisce l'array responsabile per la generazione del tag DatiOrdineAcquisto.
*
* @return array
*/
protected static function getDatiOrdineAcquisto($fattura)
{
$ordini = $fattura->getOrdiniAcquisto();
$result = [];
foreach ($ordini as $element) {
if (!empty($element['id_documento_fe'])) {
$dati_contratto = [
'IdDocumento' => $element['id_documento_fe'],
];
}
if (!empty($element['codice_cig'])) {
$dati_contratto['CodiceCIG'] = $element['codice_cig'];
}
if (!empty($element['codice_cup'])) {
$dati_contratto['CodiceCUP'] = $element['codice_cup'];
}
$result[] = $dati_contratto;
}
return $result;
}
/**
* Restituisce l'array responsabile per la generazione del tag DatiContratto.
@ -441,19 +492,19 @@ class FatturaElettronica
$contratti = $fattura->getContratti();
$result = [];
foreach ($contratti as $contratto) {
if (!empty($contratto['id_documento_fe'])) {
foreach ($contratti as $element) {
if (!empty($element['id_documento_fe'])) {
$dati_contratto = [
'IdDocumento' => $contratto['id_documento_fe'],
'IdDocumento' => $element['id_documento_fe'],
];
}
if (!empty($contratto['codice_cig'])) {
$dati_contratto['CodiceCIG'] = $contratto['codice_cig'];
if (!empty($element['codice_cig'])) {
$dati_contratto['CodiceCIG'] = $element['codice_cig'];
}
if (!empty($contratto['codice_cup'])) {
$dati_contratto['CodiceCUP'] = $contratto['codice_cup'];
if (!empty($element['codice_cup'])) {
$dati_contratto['CodiceCUP'] = $element['codice_cup'];
}
$result[] = $dati_contratto;
@ -476,6 +527,18 @@ class FatturaElettronica
'DatiGeneraliDocumento' => static::getDatiGeneraliDocumento($fattura),
];
// Controllo le le righe per la fatturazione di ordini
$dati_ordini = static::getDatiOrdineAcquisto($fattura);
if (!empty($dati_ordini)) {
foreach ($dati_ordini as $dato) {
if (!empty($dato)) {
$result[] = [
'DatiOrdineAcquisto' => $dato,
];
}
}
}
// Controllo le le righe per la fatturazione di contratti
$dati_contratti = static::getDatiContratto($fattura);
if (!empty($dati_contratti)) {
@ -519,12 +582,24 @@ class FatturaElettronica
$dettaglio = [
'NumeroLinea' => $numero + 1,
'Descrizione' => $riga['descrizione'],
'Quantita' => $riga['qta']
];
if (!empty($riga['tipo_cessione_prestazione'])) {
$dettaglio['TipoCessionePrestazione'] = $riga['tipo_cessione_prestazione'];
}
$dettaglio['Descrizione'] = $riga['descrizione'];
$dettaglio['Quantita'] = $riga['qta'];
if (!empty($riga['um'])) {
$dettaglio['UnitaMisura']= $riga['um'];
$dettaglio['UnitaMisura'] = $riga['um'];
}
if (!empty($riga['data_inizio_periodo'])) {
$dettaglio['DataInizioPeriodo'] = $riga['data_inizio_periodo'];
}
if (!empty($riga['data_fine_periodo'])) {
$dettaglio['DataFinePeriodo'] = $riga['data_fine_periodo'];
}
$dettaglio['PrezzoUnitario']= $prezzo_unitario;
@ -556,6 +631,10 @@ class FatturaElettronica
$dettaglio['Natura'] = $iva['codice_natura_fe'];
}
if (!empty($riga['riferimento_amministrazione'])) {
$dettaglio['RiferimentoAmministrazione'] = $riga['riferimento_amministrazione'];
}
$result[] = [
'DettaglioLinee' => $dettaglio,
];
@ -703,10 +782,11 @@ class FatturaElettronica
$rapportino_nome = sanitizeFilename($documento['numero'].'.pdf');
$filename = slashes(DOCROOT.'/'.$dir.'/'.$rapportino_nome);
Uploads::delete($rapportino_nome, $data);
$print = Prints::getModulePredefinedPrint($id_module);
Prints::render($print['id'], $documento['id'], $filename);
Uploads::delete($rapportino_nome, $data);
Uploads::register(array_merge([
'name' => 'Stampa allegata',
'original' => $rapportino_nome,

View File

@ -603,7 +603,7 @@ UPDATE `zz_plugins` SET `options` = ' { "main_query": [ { "type": "table", "fiel
-- Fix plugin "Ddt del cliente"
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
-- Aggiunto codice cig e codice cup per contratti e interventi
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`;

View File

@ -27,3 +27,7 @@ UPDATE `zz_widgets` SET `more_link` = 'reset(\'Tipo\');' WHERE `zz_widgets`.`nam
-- Fix del campo codice_xml
ALTER TABLE `co_documenti` CHANGE `codice_xml` `progressivo_invio` VARCHAR(255);
-- Aggiunto codice cig e codice cup per fatture e ordini
ALTER TABLE `or_ordini` 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 `co_righe_documenti` ADD `data_inizio_periodo` date, ADD `data_fine_periodo` date, ADD `riferimento_amministrazione` VARCHAR(20), ADD `tipo_cessione_prestazione` enum('SC', 'PR', 'AB', 'AC') DEFAULT NULL;