From 6203f594d49256fd26134d2e7c88c3887461c034 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Thu, 10 Jan 2019 18:41:25 +0100 Subject: [PATCH] Bugfix merge --- CHANGELOG.md | 27 +++++++- assets/src/js/custom.js | 7 +++ include/common/articolo.php | 2 +- modules/anagrafiche/edit.php | 22 +++++-- modules/anagrafiche/import.php | 5 +- .../articoli/plugins/articoli.movimenti.php | 4 +- modules/contratti/ajax/select.php | 2 +- modules/ddt/actions.php | 1 - modules/fatture/actions.php | 2 +- modules/fatture/edit.php | 21 +++---- modules/fatture/row-list.php | 54 +++++++++++----- modules/interventi/edit.php | 28 ++++++--- modules/interventi/src/TipoSessione.php | 2 +- modules/my_impianti/actions.php | 3 +- modules/ordini/actions.php | 1 - modules/ordini/buttons.php | 4 +- modules/ordini/src/Components/Articolo.php | 2 +- modules/preventivi/actions.php | 6 +- modules/preventivi/ajax/select.php | 4 +- .../preventivi/src/Components/Articolo.php | 4 +- modules/preventivi/src/Preventivo.php | 6 +- modules/primanota/add.php | 6 +- plugins/exportFE/src/FatturaElettronica.php | 63 ++++++++++++++----- plugins/importFE/actions.php | 2 +- plugins/importFE/edit.php | 2 +- plugins/importFE/rows.php | 51 +++++---------- plugins/importFE/src/FatturaElettronica.php | 31 ++++++--- src/HTMLBuilder/Manager/FileManager.php | 2 +- src/Mail.php | 4 +- src/Util/XML.php | 11 +++- templates/base/settings.php | 2 +- templates/fatture/header.php | 2 +- templates/info.php | 2 +- templates/ordini/body.php | 20 +++--- templates/pdfgen_variables.php | 4 +- .../pdfgen.riepilogo_interventi.php | 2 +- update/2_4_3.sql | 2 +- update/2_4_5.sql | 31 ++++++++- 38 files changed, 290 insertions(+), 154 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 395322bb0..eb1692e6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release. +- [2.4.5 (2019-01-10)](#245-2019-01-10) + - [Aggiunto (Added)](#aggiunto-added) + - [Modificato (Changed)](#modificato-changed) + - [Fixed](#fixed) - [2.4.4 (2018-12-12)](#244-2018-12-12) - [Aggiunto (Added)](#aggiunto-added) - [Fixed](#fixed) @@ -44,12 +48,33 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k - [Fixed](#fixed-7) +## 2.4.5 (2019-01-10) + +### Aggiunto (Added) + + - Introduzione dello split payment + - Introduzione dei campi Nome e Cognome per le anagrafiche + - Introduzione della possibilità di non verificare il certificato SSL per gli account email + - Introduzione calcolo del guadagno in fase di aggiunta righe nei documenti + +### Modificato (Changed) + + - Miglioramento della generazione xml per le Fatture Elettroniche + - Miglioramento procedura importazione xml per le Fatture Elettroniche + - Gestite righe di tipo descrizione nelle Fatture Elettroniche + +### Fixed + + - Fix calcolo codice intervento + - Fix dei filtri per la stampa del riepilogo interventi + - Risolti altri bug minori + ## 2.4.4 (2018-12-12) ### Aggiunto (Added) - Controllo sulla presenza di personalizzazioni nel modulo **Aggiornamenti** - - Stati multipli per la Fatture Elettroniche (per ampliamenti futuri) + - Stati multipli per le Fatture Elettroniche (per ampliamenti futuri) ### Fixed diff --git a/assets/src/js/custom.js b/assets/src/js/custom.js index 3d68bb649..79bd20a51 100644 --- a/assets/src/js/custom.js +++ b/assets/src/js/custom.js @@ -56,4 +56,11 @@ $(document).ready(function () { }, 350); }); + // Forza l'evento "blur" nei campi di testo per formattare i numeri con + // jquery inputmask prima del submit + setTimeout( function(){ + $('form').on('submit', function(){ + $('input').trigger('blur'); + }); + }, 1000 ); }); diff --git a/include/common/articolo.php b/include/common/articolo.php index f5487debc..5c20f830b 100644 --- a/include/common/articolo.php +++ b/include/common/articolo.php @@ -11,7 +11,7 @@ if (!isset($options['edit_articolo']) || !empty($options['edit_articolo'])) { echo '
- {[ "type": "select", "label": "'.tr('Articolo').'", "name": "idarticolo", "required": 1, "value": "'.$result['idarticolo'].'", "ajax-source": "articoli" '.(($options['dir'] == 'uscita') ? ',"icon-after": "add|'.Modules::get('Articoli')['id'].'"' : "").' ]} + {[ "type": "select", "label": "'.tr('Articolo').'", "name": "idarticolo", "required": 1, "value": "'.$result['idarticolo'].'", "ajax-source": "articoli" '.(($options['dir'] == 'uscita') ? ',"icon-after": "add|'.Modules::get('Articoli')['id'].'"' : '').' ]}
'; } else { diff --git a/modules/anagrafiche/edit.php b/modules/anagrafiche/edit.php index bec55752b..b10d21b62 100644 --- a/modules/anagrafiche/edit.php +++ b/modules/anagrafiche/edit.php @@ -39,7 +39,7 @@ if (!$cliente) {
- {[ "type": "text", "label": "", "name": "ragione_sociale", "required": 1, "value": "$ragione_sociale$" ]} + {[ "type": "text", "label": "", "name": "ragione_sociale", "required": 1, "value": "$ragione_sociale$", "extra": "autocomplete=\"off\"" ]}
@@ -54,11 +54,11 @@ if (!$cliente) {
- {[ "type": "text", "label": "", "name": "nome", "required": 0, "value": "$nome$" ]} + {[ "type": "text", "label": "", "name": "nome", "required": 0, "value": "$nome$", "extra": "autocomplete=\"off\"" ]}
- {[ "type": "text", "label": "", "name": "cognome", "required": 0, "value": "$cognome$" ]} + {[ "type": "text", "label": "", "name": "cognome", "required": 0, "value": "$cognome$", "extra": "autocomplete=\"off\"" ]}
@@ -452,7 +452,14 @@ if (!empty($google)) {
+ +
@@ -599,7 +606,7 @@ if (!empty($elementi)) { $modulo = 'Contratti'; } elseif (in_array($elemento['tipo_documento'], ['Ordine cliente', 'Ordine fornitore'])) { $modulo = ($elemento['dir'] == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore'; - } elseif (in_array($elemento['tipo_documento'], ['Ddt di vendita', 'Ddt di acquisto'])) { + } elseif (in_array($elemento['tipo_documento'], ['Ddt in uscita', 'Ddt in entrata'])) { $modulo = ($elemento['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; } else { $modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; @@ -660,23 +667,26 @@ if (empty($record['deleted_at'])) { }); // Abilito solo ragione sociale oppure solo nome-cognome in base a cosa compilo - $('#nome, #cognome').keyup(function(){ + $('#nome, #cognome').bind("keyup change", function(e) { if ($('#nome').val() == '' && $('#cognome').val() == '' ){ $('#nome, #cognome').prop('disabled', true).prop('required', false); $('#ragione_sociale').prop('disabled', false).prop('required', true); + $('#ragione_sociale').focus(); }else{ $('#nome, #cognome').prop('disabled', false).prop('required', true); $('#ragione_sociale').prop('disabled', true).prop('required', false); } }); - $('#ragione_sociale').keyup(function(){ + $('#ragione_sociale').bind("keyup change", function(e) { if ($('#ragione_sociale').val() == '' ){ $('#nome, #cognome').prop('disabled', false).prop('required', true); $('#ragione_sociale').prop('disabled', true).prop('required', false); + $('#nome').focus(); }else{ $('#nome, #cognome').prop('disabled', true).prop('required', false); $('#ragione_sociale').prop('disabled', false).prop('required', true); + $('#ragione_sociale').focus(); } }); diff --git a/modules/anagrafiche/import.php b/modules/anagrafiche/import.php index a82907a3d..cf9e8fd3c 100644 --- a/modules/anagrafiche/import.php +++ b/modules/anagrafiche/import.php @@ -63,7 +63,10 @@ switch (post('op')) { // Ricerca di eventuale anagrafica corrispondente if (!empty($primary_key)) { - $anagrafica = Anagrafica::where($primary_key, '=', $dati_anagrafica[$primary_key])->first(); + //impedisco di aggiornare la mia anagrafica azienda + if ($dati_anagrafica[$primary_key] != setting('Azienda predefinita')) { + $anagrafica = Anagrafica::where($primary_key, '=', $dati_anagrafica[$primary_key])->first(); + } } if (empty($anagrafica)) { diff --git a/modules/articoli/plugins/articoli.movimenti.php b/modules/articoli/plugins/articoli.movimenti.php index 2af81fbb3..2a479330f 100644 --- a/modules/articoli/plugins/articoli.movimenti.php +++ b/modules/articoli/plugins/articoli.movimenti.php @@ -66,8 +66,8 @@ if (!empty($rs2)) { '.$r['movimento'].' '.((!empty($r['idintervento'])) ? Modules::link('Interventi', $r['idintervento']) : '').' '.((!empty($r['idautomezzo'])) ? Modules::link('Automezzi', $r['idautomezzo']) : '').' - '.((!empty($r['idddt'])) ? (Modules::link('DDt di '.$dir, $r['idddt'], null, null, (intval($database->fetchOne('SELECT * FROM `dt_ddt` WHERE `id` ='.prepare($r['idddt'])))) ? '': 'class="disabled"')) : '').' - '.((!empty($r['iddocumento'])) ? (Modules::link('Fatture di '.$dir, $r['iddocumento'], null, null, (intval($database->fetchOne('SELECT * FROM `co_documenti` WHERE `id` ='.prepare($r['iddocumento'])))) ? '': 'class="disabled"')) : '' ).' + '.((!empty($r['idddt'])) ? (Modules::link('DDt di '.$dir, $r['idddt'], null, null, (intval($database->fetchOne('SELECT * FROM `dt_ddt` WHERE `id` ='.prepare($r['idddt'])))) ? '' : 'class="disabled"')) : '').' + '.((!empty($r['iddocumento'])) ? (Modules::link('Fatture di '.$dir, $r['iddocumento'], null, null, (intval($database->fetchOne('SELECT * FROM `co_documenti` WHERE `id` ='.prepare($r['iddocumento'])))) ? '' : 'class="disabled"')) : '').' '; // Data diff --git a/modules/contratti/ajax/select.php b/modules/contratti/ajax/select.php index 8c346d6a1..f2710e169 100644 --- a/modules/contratti/ajax/select.php +++ b/modules/contratti/ajax/select.php @@ -4,7 +4,7 @@ include_once __DIR__.'/../../../core.php'; switch ($resource) { case 'contratti': - $query = 'SELECT co_contratti.id AS id, CONCAT("Contratto ", numero, " del ", DATE_FORMAT(data_bozza, "%d/%m/%Y"), " - ", nome, " [", (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , "]") AS descrizione, (SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS totale, (SELECT SUM(sconto) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS sconto, (SELECT COUNT(id) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS n_righe FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id'; + $query = 'SELECT co_contratti.id AS id, CONCAT("Contratto ", numero, " del ", DATE_FORMAT(data_bozza, "%d/%m/%Y"), " - ", co_contratti.nome, " [", (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , "]") AS descrizione, (SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS totale, (SELECT SUM(sconto) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS sconto, (SELECT COUNT(id) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS n_righe FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id'; foreach ($elements as $element) { $filter[] = 'id='.prepare($element); diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php index 27ca65774..c8fdf9aff 100644 --- a/modules/ddt/actions.php +++ b/modules/ddt/actions.php @@ -3,7 +3,6 @@ include_once __DIR__.'/../../core.php'; use Modules\Anagrafiche\Anagrafica; -use Modules\Articoli\Articolo as ArticoloOriginale; use Modules\DDT\Components\Articolo; use Modules\DDT\Components\Descrizione; use Modules\DDT\Components\Riga; diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 433de0ab6..5a2297369 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -878,7 +878,7 @@ switch (post('op')) { // Inserimento riga normale else { - $dbo->query('INSERT INTO co_righe_documenti(iddocumento, idcontratto, is_descrizione, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, sconto_globale, idiva, desc_iva, iva, iva_indetraibile, um, qta, `order`) values('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($rs_righe[$i]['is_descrizione']).', '.prepare($rs_righe[$i]['descrizione']).', '.prepare($rs_righe[$i]['subtotale']).', '.prepare($rs_righe[$i]['sconto']).', '.prepare($rs_righe[$i]['sconto_unitario']).', '.prepare($rs_righe[$i]['tipo_sconto']).', '.prepare($rs_righe[$i]['sconto_globale']).', '.prepare($rs_righe[$i]['idiva']).', '.prepare($rs_righe[$i]['desc_iva']).', '.prepare($rs_righe[$i]['iva']).', '.prepare($rs_righe[$i]['iva_indetraibile']).', '.prepare($rs_righe[$i]['um']).', '.prepare($rs_righe[$i]['qta']).', '.prepare($rs_righe[$i]['order']).')'); + $dbo->query('INSERT INTO co_righe_documenti(iddocumento, idcontratto, is_descrizione, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, sconto_globale, idiva, desc_iva, iva, iva_indetraibile, um, qta, idconto, `order`) values('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($rs_righe[$i]['is_descrizione']).', '.prepare($rs_righe[$i]['descrizione']).', '.prepare($rs_righe[$i]['subtotale']).', '.prepare($rs_righe[$i]['sconto']).', '.prepare($rs_righe[$i]['sconto_unitario']).', '.prepare($rs_righe[$i]['tipo_sconto']).', '.prepare($rs_righe[$i]['sconto_globale']).', '.prepare($rs_righe[$i]['idiva']).', '.prepare($rs_righe[$i]['desc_iva']).', '.prepare($rs_righe[$i]['iva']).', '.prepare($rs_righe[$i]['iva_indetraibile']).', '.prepare($rs_righe[$i]['um']).', '.prepare($rs_righe[$i]['qta']).', '.prepare($idconto).', '.prepare($rs_righe[$i]['order']).')'); } } diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index a8efef110..9da873c5f 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -35,16 +35,15 @@ if ($dir == 'entrata') { fetchArray('SELECT piva, codice_fiscale, citta, indirizzo, cap, provincia, id_nazione FROM an_anagrafiche WHERE idanagrafica='.prepare($record['idanagrafica'])); + $rs2 = $dbo->fetchArray('SELECT piva, codice_fiscale, citta, indirizzo, cap, provincia, id_nazione, tipo FROM an_anagrafiche WHERE idanagrafica='.prepare($record['idanagrafica'])); $campi_mancanti = []; - if ($rs2[0]['piva'] == '') { + if ($rs2[0]['codice_fiscale'] == '' and ($rs2[0]['tipo'] == 'Privato' or $rs2[0]['tipo'] == 'Ente pubblico')) { + array_push($campi_mancanti, 'Codice fiscale'); + } elseif ($rs2[0]['piva'] == '') { array_push($campi_mancanti, 'Partita IVA'); } - /*if ($rs2[0]['codice_fiscale'] == '') { - array_push($campi_mancanti, 'Codice fiscale'); - } - */ + if ($rs2[0]['citta'] == '') { array_push($campi_mancanti, 'Città'); } @@ -235,16 +234,16 @@ if ($dir == 'uscita') {
+ //TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti) + if ($dir == 'entrata') { + ?>
{[ "type": "checkbox", "label": "", "name": "is_fattura_conto_terzi", "value": "$is_fattura_conto_terzi$", "help": "", "placeholder": "" ]}
+ } + ?>
diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index 9bf4e0937..e52cf7fd5 100644 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -33,25 +33,17 @@ foreach ($righe as $riga) { $riga['sconto'] = abs($riga['sconto']); $riga['iva'] = abs($riga['iva']); + if (empty($riga['is_descrizione'])) { + $riga['descrizione_conto'] = $dbo->fetchOne('SELECT descrizione FROM co_pianodeiconti3 WHERE id = '.prepare($riga['idconto']))['descrizione']; + } + $extra = ''; $ref_modulo = null; $ref_id = null; - // Preventivi - if (!empty($riga['idpreventivo'])) { - $delete = 'unlink_preventivo'; - } - // Contratti - elseif (!empty($riga['idcontratto'])) { - $delete = 'unlink_contratto'; - } - // Intervento - elseif (!empty($riga['idintervento'])) { - $delete = 'unlink_intervento'; - } // Articoli - elseif ($riga instanceof Articolo) { + if ($riga instanceof Articolo) { $ref_modulo = Modules::get('Articoli')['id']; $ref_id = $riga['idarticolo']; @@ -62,6 +54,30 @@ foreach ($righe as $riga) { $extra = ''; $mancanti = 0; } + // Intervento + elseif (!empty($riga['idintervento'])) { + //$ref_modulo = Modules::get('Interventi')['id']; + //$ref_id = $riga['idintervento']; + $delete = 'unlink_intervento'; + } + // Preventivi + elseif (!empty($riga['idpreventivo'])) { + //$ref_modulo = Modules::get('Preventivi')['id']; + //$ref_id = $riga['idpreventivo']; + $delete = 'unlink_preventivo'; + } + // Contratti + elseif (!empty($riga['idcontratto'])) { + //$ref_modulo = Modules::get('Contratti')['id']; + //$ref_id = $riga['idcontratto']; + + $contratto = $dbo->fetchOne('SELECT codice_cig,codice_cup,id_documento_fe FROM co_contratti WHERE id = '.prepare($riga['idcontratto'])); + $riga['codice_cig'] = $contratto['codice_cig']; + $riga['codice_cup'] = $contratto['codice_cup']; + $riga['id_documento_fe'] = $contratto['id_documento_fe']; + + $delete = 'unlink_contratto'; + } // Righe generiche else { $delete = 'unlink_riga'; @@ -79,11 +95,19 @@ foreach ($righe as $riga) { } } + $extra_riga = ''; + $extra_riga = tr('_DESCRIZIONE_CONTO_ _CODICE_CIG_ _CODICE_CUP_ _ID_DOCUMENTO_', [ + '_DESCRIZIONE_CONTO_' => $riga['descrizione_conto'] ?: null, + '_CODICE_CIG_' => $riga['codice_cig'] ? '
CIG: '.$riga['codice_cig'] : null, + '_CODICE_CUP_' => $riga['codice_cup'] ? '
CUP: '.$riga['codice_cup'] : null, + '_ID_DOCUMENTO_' => $riga['id_documento_fe'] ? '
DOC: '.$riga['id_documento_fe'] : null, + ]); + echo ' '.Modules::link($ref_modulo, $ref_id, $riga['descrizione']).' - '.$riga['descrizione_conto'].''; + '.$extra_riga.''; if (!empty($riga['abilita_serial'])) { if (!empty($mancanti)) { @@ -111,7 +135,7 @@ foreach ($righe as $riga) {
'.Modules::link('Fatture di vendita', $record['ref_documento'], $text, $text); } - $ref = doc_references($r, $dir, ['iddocumento']); + $ref = doc_references($riga, $dir, ['iddocumento']); if (!empty($ref)) { echo '
'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']); diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php index d80c5f4ef..9fca11578 100644 --- a/modules/interventi/edit.php +++ b/modules/interventi/edit.php @@ -141,34 +141,44 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
fetchOne('SELECT codice_cig,codice_cup,id_documento_fe FROM co_contratti WHERE id = '.prepare($record['idcontratto'])); + $record['id_documento_fe'] = $contratto['id_documento_fe']; + $record['codice_cup'] = $contratto['codice_cup']; + $record['codice_cig'] = $contratto['codice_cig']; + } + ?>
-

+

+ + +

+
- {[ "type": "text", "label": "", "name": "id_documento_fe", "required": 0, "value": "$id_documento_fe$", "maxlength": 20, "readonly": "" ]} + {[ "type": "", "label": "", "name": "id_documento_fe", "required": 0, "value": "", "maxlength": 20, "readonly": "", "extra": "" ]}
- {[ "type": "text", "label": "", "name": "codice_cig", "required": 0, "value": "$codice_cig$", "maxlength": 15, "readonly": "" ]} + {[ "type": "", "label": "", "name": "codice_cig", "required": 0, "value": "", "maxlength": 15, "readonly": "", "extra": "" ]}
- {[ "type": "text", "label": "", "name": "codice_cup", "required": 0, "value": "$codice_cup$", "maxlength": 15, "readonly": "" ]} + {[ "type": "", "label": "", "name": "codice_cup", "required": 0, "value": "", "maxlength": 15, "readonly": "", "extra": "" ]}
- +
diff --git a/modules/interventi/src/TipoSessione.php b/modules/interventi/src/TipoSessione.php index 279f33338..2ac51db75 100644 --- a/modules/interventi/src/TipoSessione.php +++ b/modules/interventi/src/TipoSessione.php @@ -6,9 +6,9 @@ use Common\Model; class TipoSessione extends Model { + public $incrementing = false; protected $table = 'in_tipiintervento'; protected $primaryKey = 'idtipointervento'; - public $incrementing = false; /** * Restituisce l'identificativo. diff --git a/modules/my_impianti/actions.php b/modules/my_impianti/actions.php index 870271766..6f0ce0c57 100644 --- a/modules/my_impianti/actions.php +++ b/modules/my_impianti/actions.php @@ -77,9 +77,10 @@ switch ($op) { $idanagrafica = post('idanagrafica'); $nome = post('nome'); $idtecnico = post('idtecnico'); + $idsede = post('idsede'); if (!empty($matricola)) { - $dbo->query('INSERT INTO my_impianti(matricola, idanagrafica, nome, data, idtecnico) VALUES ('.prepare($matricola).', '.prepare($idanagrafica).', '.prepare($nome).', NOW(), '.prepare($idtecnico).')'); + $dbo->query('INSERT INTO my_impianti(matricola, idanagrafica, nome, data, idtecnico, idsede) VALUES ('.prepare($matricola).', '.prepare($idanagrafica).', '.prepare($nome).', NOW(), '.prepare($idtecnico).', '.prepare($idsede).')'); $id_record = $dbo->lastInsertedID(); diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index 61e6c0dde..1e37e9f14 100644 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -3,7 +3,6 @@ include_once __DIR__.'/../../core.php'; use Modules\Anagrafiche\Anagrafica; -use Modules\Articoli\Articolo as ArticoloOriginale; use Modules\Ordini\Components\Articolo; use Modules\Ordini\Components\Descrizione; use Modules\Ordini\Components\Riga; diff --git a/modules/ordini/buttons.php b/modules/ordini/buttons.php index 6519ca656..9681ab6fd 100644 --- a/modules/ordini/buttons.php +++ b/modules/ordini/buttons.php @@ -2,7 +2,7 @@ include_once __DIR__.'/../../core.php'; -if (!in_array($record['stato'], ['Evaso', 'Fatturato'])) { +if (!in_array($record['stato'], ['Fatturato'])) { echo '
@@ -338,10 +338,10 @@ include_once __DIR__.'/../../core.php'; $('#bs-popup #modello_primanota').change(function(){ if ($(this).val()!=''){ - $('#btn_crea_modello').text(''); + $('#btn_crea_modello').html(' '+''); $('#bs-popup #idmastrino').val($(this).val()); }else{ - $('#btn_crea_modello').text(''); + $('#btn_crea_modello').html(' '+''); $('#bs-popup #idmastrino').val(0); } diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index b2dd32c0f..1eb85de9a 100644 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -657,7 +657,8 @@ class FatturaElettronica public function getRighe() { 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'])); + //AND is_descrizione = 0 + $this->righe = database()->fetchArray('SELECT * FROM `co_righe_documenti` WHERE `sconto_globale` = 0 AND `iddocumento` = '.prepare($this->getDocumento()['id'])); } return $this->righe; @@ -967,13 +968,23 @@ class FatturaElettronica $result['CodiceFiscale'] = $anagrafica['codice_fiscale']; } - $result['Anagrafica'] = [ - 'Denominazione' => $anagrafica['ragione_sociale'], - // TODO: 'Nome' => $azienda['ragione_sociale'], - // TODO: 'Cognome' => $azienda['ragione_sociale'], - // TODO: 'Titolo' => $azienda['ragione_sociale'], - // TODO: CodEORI - ]; + if (!empty($anagrafica['nome']) or !empty($anagrafica['cognome'])) { + $result['Anagrafica'] = [ + //'Denominazione' => $anagrafica['ragione_sociale'], + 'Nome' => $anagrafica['nome'], + 'Cognome' => $anagrafica['cognome'], + // TODO: 'Titolo' => $anagrafica['ragione_sociale'], + // TODO: CodEORI + ]; + } else { + $result['Anagrafica'] = [ + 'Denominazione' => $anagrafica['ragione_sociale'], + //'Nome' => $anagrafica['nome'], + //'Cognome' => $anagrafica['cognome'], + // TODO: 'Titolo' => $anagrafica['ragione_sociale'], + // TODO: CodEORI + ]; + } // Informazioni specifiche azienda if ($azienda) { @@ -1387,6 +1398,14 @@ class FatturaElettronica $riga['qta'] = abs($riga['qta']); $riga['sconto'] = abs($riga['sconto']); + //Fix per righe di tipo descrizione, copio idiva dalla prima riga del documento che non è di tipo descrizione, riportando di conseguenza eventuali % e/o nature + if (!empty($riga['is_descrizione'])) { + $riga['idiva'] = $database->fetchOne('SELECT `idiva` FROM `co_righe_documenti` WHERE `is_descrizione` = 0 AND `iddocumento` = '.prepare($documento['id']))['idiva']; + } + + //Fix per qta, deve sempre essere impostata almeno a 1 + $riga['qta'] = (!empty($riga['qta'])) ? $riga['qta'] : 1; + $prezzo_unitario = $riga['subtotale'] / $riga['qta']; $prezzo_totale = $riga['subtotale'] - $riga['sconto']; @@ -1462,6 +1481,18 @@ class FatturaElettronica $dettaglio['RiferimentoAmministrazione'] = $riga['riferimento_amministrazione']; } + // AltriDatiGestionali (2.2.1.16) - Ritenuta ENASARCO + $riga['ritenutaenasarco'] = floatval($riga['ritenutaenasarco']); + if (!empty($riga['ritenutaenasarco'])) { + $ritenutaenasarco = [ + 'TipoDato' => 'CASSA-PREV', + 'RiferimentoTesto' => 'ENASARCO - TC07', + 'RiferimentoNumero' => $riga['ritenutaenasarco'], + ]; + + $dettaglio['AltriDatiGestionali'] = $ritenutaenasarco; + } + $result[] = [ 'DettaglioLinee' => $dettaglio, ]; @@ -1473,8 +1504,8 @@ class FatturaElettronica foreach ($riepiloghi_percentuale as $riepilogo) { $iva = [ 'AliquotaIVA' => $riepilogo['percentuale'], - 'ImponibileImporto' => $riepilogo['totale'], - 'Imposta' => $riepilogo['iva'], + 'ImponibileImporto' => abs($riepilogo['totale']), + 'Imposta' => abs($riepilogo['iva']), 'EsigibilitaIVA' => $riepilogo['esigibilita'], ]; @@ -1501,8 +1532,8 @@ class FatturaElettronica $iva = [ 'AliquotaIVA' => 0, 'Natura' => $riepilogo['codice_natura_fe'], - 'ImponibileImporto' => $riepilogo['totale'], - 'Imposta' => $riepilogo['iva'], + 'ImponibileImporto' => abs($riepilogo['totale']), + 'Imposta' => abs($riepilogo['iva']), 'EsigibilitaIVA' => $riepilogo['esigibilita'], ]; @@ -1541,7 +1572,7 @@ class FatturaElettronica $pagamento = [ 'ModalitaPagamento' => $co_pagamenti['codice_modalita_pagamento_fe'], 'DataScadenzaPagamento' => $scadenza['scadenza'], - 'ImportoPagamento' => $scadenza['da_pagare'], + 'ImportoPagamento' => abs($scadenza['da_pagare']), ]; if (!empty($documento['idbanca'])) { @@ -1556,11 +1587,9 @@ class FatturaElettronica $pagamento['BIC'] = $co_banche['bic']; } } - } - $result[] = [ - 'DettaglioPagamento' => $pagamento, - ]; + $result[]['DettaglioPagamento'] = $pagamento; + } return $result; } diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php index e875fb8e6..ae0168cec 100644 --- a/plugins/importFE/actions.php +++ b/plugins/importFE/actions.php @@ -43,7 +43,7 @@ switch (filter('op')) { case 'generate': $fattura_pa = new FatturaElettronica(post('filename')); - $id_record = $fattura_pa->saveFattura(post('pagamento'), post('id_segment')); + $id_record = $fattura_pa->saveFattura(post('pagamento'), post('id_segment'), post('id_tipo')); $fattura_pa->saveRighe(post('articoli'), post('iva'), post('conto')); $fattura_pa->getFattura()->updateSconto(); diff --git a/plugins/importFE/edit.php b/plugins/importFE/edit.php index 93d0e06c0..253d20aee 100644 --- a/plugins/importFE/edit.php +++ b/plugins/importFE/edit.php @@ -74,7 +74,7 @@ echo '
diff --git a/plugins/importFE/rows.php b/plugins/importFE/rows.php index 8dd7a0db0..54b49f487 100644 --- a/plugins/importFE/rows.php +++ b/plugins/importFE/rows.php @@ -27,18 +27,7 @@ $citta = $sede['Comune']; $provincia = $sede['Provincia']; echo ' -
-
-

'. - $ragione_sociale.'
- - '.(!empty($codice_fiscale) ? (tr('Codice Fiscale').': '.$codice_fiscale.'
') : '').' - '.(!empty($partita_iva) ? (tr('Partita IVA').': '.$partita_iva.'
') : '').' - '.$cap.' '.$citta.' ('.$provincia.')
-
-

-
'; -echo ' +

'.$fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['Numero'].'
@@ -50,10 +39,10 @@ echo '

'; -// Pagamenti -$pagamenti = $fattura_pa->getBody()['DatiPagamento']; // Se il blocco DatiPagamento è valorizzato (opzionale) -if (!empty($pagamenti)) { +if (!empty($fattura_pa->getBody()['DatiPagamento'])) { + $pagamenti = $fattura_pa->getBody()['DatiPagamento']; + $metodi = $pagamenti['DettaglioPagamento']; $metodi = isset($metodi[0]) ? $metodi : [$metodi]; $codice_modalita_pagamento = $metodi[0]['ModalitaPagamento']; @@ -63,7 +52,7 @@ if (!empty($pagamenti)) {

'.tr('La fattura importata presenta _NUM_ rat_E_ di pagamento con le seguenti scadenze', [ '_NUM_' => count($metodi), - '_E_' => ((count($metodi)>1) ? 'e': 'a'), + '_E_' => ((count($metodi) > 1) ? 'e' : 'a'), ]).':

    '; @@ -80,7 +69,6 @@ if (!empty($pagamenti)) { echo Translator::numberToLocale($metodo['ImportoPagamento']).' € '; echo '('.((!empty($metodo['ModalitaPagamento'])) ? database()->fetchOne('SELECT descrizione FROM fe_modalita_pagamento WHERE codice = '.prepare($metodo['ModalitaPagamento']))['descrizione'] : '').')'; - echo ' '; } @@ -89,28 +77,19 @@ if (!empty($pagamenti)) {
'; } -$metodi = $pagamenti['DettaglioPagamento']; -$metodi = isset($metodi[0]) ? $metodi : [$metodi]; +// Tipo del documento +$codice_tipo_documento_fe = (intval(database()->fetchNum('SELECT id FROM co_tipidocumento WHERE codice_tipo_documento_fe = '.prepare($fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento']).''))) ? $fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento'] : '%'; +$query = 'SELECT id, CONCAT (descrizione, IF((codice_tipo_documento_fe IS NULL), \'\', CONCAT( \' (\', codice_tipo_documento_fe, \')\' ) )) as descrizione FROM co_tipidocumento WHERE dir = \'uscita\' AND codice_tipo_documento_fe LIKE '.prepare($codice_tipo_documento_fe); + +echo ' + {[ "type": "select", "label": "'.tr('Tipo fattura').'", "name": "id_tipo", "required": 1, "values": "query='.$query.'" ]}'; // prc '.($pagamenti['CondizioniPagamento'] == 'TP01' ? '!' : '').'= 100 AND -$query = 'SELECT id, descrizione FROM co_pagamenti WHERE codice_modalita_pagamento_fe = '.prepare($metodi[0]['ModalitaPagamento']).' GROUP BY descrizione ORDER BY descrizione ASC'; - -echo ' -

'.tr('Pagamento').'

- -

'.tr('La fattura importata presenta _NUM_ rate di pagamento con le seguenti scadenze', [ - '_NUM_' => count($metodi), - ]).':

-
    '; - -// Scadenze di pagamento -foreach ($metodi as $metodo) { - echo ' -
  • '.Translator::dateToLocale($metodo['DataScadenzaPagamento']).'
  • '; +$query = 'SELECT id, CONCAT (descrizione, IF((codice_modalita_pagamento_fe IS NULL), \"\", CONCAT( \" (\", codice_modalita_pagamento_fe, \")\" ) )) as descrizione FROM co_pagamenti'; +if (!empty($codice_modalita_pagamento)) { + $query .= ' WHERE codice_modalita_pagamento_fe = '.prepare($codice_modalita_pagamento); } - -echo ' -
'; +$query .= ' GROUP BY descrizione ORDER BY descrizione ASC'; echo ' {[ "type": "select", "label": "'.tr('Pagamento').'", "name": "pagamento", "required": 1, "values": "query='.$query.'" ]}'; diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php index b6654ae4d..f919ea9b4 100644 --- a/plugins/importFE/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -137,11 +137,10 @@ class FatturaElettronica // Informazioni sull'anagrafica $REA = $xml['IscrizioneREA']; if (!empty($REA)) { - - if (!empty($REA['Ufficio']) and !empty($REA['NumeroREA'])) { - $anagrafica->codicerea = $REA['Ufficio'].'-'.$REA['NumeroREA']; - } - + if (!empty($REA['Ufficio']) and !empty($REA['NumeroREA'])) { + $anagrafica->codicerea = $REA['Ufficio'].'-'.$REA['NumeroREA']; + } + if (!empty($REA['CapitaleSociale'])) { $anagrafica->capitale_sociale = $REA['CapitaleSociale']; } @@ -295,17 +294,25 @@ class FatturaElettronica * * @return int */ - public function saveFattura($id_pagamento, $id_sezionale) + public function saveFattura($id_pagamento, $id_sezionale, $id_tipo) { $anagrafica = static::createAnagrafica($this->getHeader()['CedentePrestatore']); $dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']; $data = $dati_generali['Data']; + + //Fix temporaneo per gestire TD02,TD03,TD06 non ancora previsti in OSM + /*if ($dati_generali['TipoDocumento']=='TD02' OR $dati_generali['TipoDocumento']=='TD03' OR $dati_generali['TipoDocumento']=='TD06'){ + $id_tipo = 'TD01'; + } + + $id_tipo = database()->fetchOne('SELECT id FROM co_tipidocumento WHERE codice_tipo_documento_fe = '.prepare($dati_generali['TipoDocumento']))['id'];*/ + $numero_esterno = $dati_generali['Numero']; $progressivo_invio = $this->getHeader()['DatiTrasmissione']['ProgressivoInvio']; - $descrizione_tipo = empty($this->getBody()['DatiGenerali']['DatiTrasporto']) ? 'Fattura immediata di acquisto' : 'Fattura accompagnatoria di acquisto'; - $tipo = TipoFattura::where('descrizione', $descrizione_tipo)->first(); + //$descrizione_tipo = empty($this->getBody()['DatiGenerali']['DatiTrasporto']) ? 'Fattura immediata di acquisto' : 'Fattura accompagnatoria di acquisto'; + $tipo = TipoFattura::where('id', $id_tipo)->first(); $fattura = Fattura::build($anagrafica, $tipo, $data, $id_sezionale); $this->fattura = $fattura; @@ -338,6 +345,14 @@ class FatturaElettronica // TODO: salvare in fattura } + $causali = $dati_generali['Causale']; + if (count($causali) > 0) { + foreach ($causali as $causale) { + $note .= $causale; + } + $fattura->note = $note; + } + // Bollo $bollo = $dati_generali['DatiBollo']; if (!empty($bollo)) { diff --git a/src/HTMLBuilder/Manager/FileManager.php b/src/HTMLBuilder/Manager/FileManager.php index 2daed0058..68227b6ef 100644 --- a/src/HTMLBuilder/Manager/FileManager.php +++ b/src/HTMLBuilder/Manager/FileManager.php @@ -114,7 +114,7 @@ class FileManager implements ManagerInterface '; } elseif (strtolower($extension) == 'xml') { $result .= ' -
+ '; } else { diff --git a/src/Mail.php b/src/Mail.php index b6e56257e..375a9e3d5 100644 --- a/src/Mail.php +++ b/src/Mail.php @@ -218,9 +218,9 @@ class Mail extends PHPMailer\PHPMailer\PHPMailer /** * Invia l'email impostata. * - * @return bool - * * @throws Exception + * + * @return bool */ public function send() { diff --git a/src/Util/XML.php b/src/Util/XML.php index 0feff8f00..04219e289 100644 --- a/src/Util/XML.php +++ b/src/Util/XML.php @@ -2,6 +2,8 @@ namespace Util; +use UnexpectedValueException; + /** * Classe dedicata all'interpretazione dei file XML. * @@ -19,9 +21,16 @@ class XML public static function read($string) { $content = static::stripP7MData($string); - $content = static::sanitizeXML($content); + + libxml_use_internal_errors(true); $xml = simplexml_load_string($content, 'SimpleXMLElement', LIBXML_NOCDATA); + if ($xml === false) { + $message = libxml_get_last_error()->message; + + throw new UnexpectedValueException($message); + } + $result = json_decode(json_encode($xml), true); return $result; diff --git a/templates/base/settings.php b/templates/base/settings.php index 7260fddc8..86ffeaba0 100644 --- a/templates/base/settings.php +++ b/templates/base/settings.php @@ -12,7 +12,7 @@ $settings = [ ], 'header-height' => 35, 'footer-height' => 5, - 'header-font-size' => 12, + 'header-font-size' => 11, ]; return $settings; diff --git a/templates/fatture/header.php b/templates/fatture/header.php index 874d1b2bb..5172bac00 100644 --- a/templates/fatture/header.php +++ b/templates/fatture/header.php @@ -54,7 +54,7 @@ echo '

'.tr('Banca di appoggio', [], ['upper' => true]).'

-

$appoggiobancario$

+

$appoggiobancario$

diff --git a/templates/info.php b/templates/info.php index b291c17d5..d29838348 100644 --- a/templates/info.php +++ b/templates/info.php @@ -117,7 +117,7 @@ $replaces = array_merge($replaces, [ 'rootdir' => ROOTDIR, 'directory' => Prints::get($id_print)['full_directory'], 'footer' => !empty($footer) ? $footer : '', - 'dicitura_fissa_fattura' => setting('Dicitura fissa fattura'), + 'dicitura_fissa_fattura' => setting('Dicitura fissa fattura').((!empty(setting('OSMCloud Services API Token'))) ? tr(' Documento privo di valenza fiscale dell\'art 21 dpr 633/72.') : ''), ]); unset($replace); diff --git a/templates/ordini/body.php b/templates/ordini/body.php index 24cde7091..97ef904c9 100644 --- a/templates/ordini/body.php +++ b/templates/ordini/body.php @@ -9,9 +9,11 @@ function findKey($array, $keySearch) return true; } elseif (is_array($item) && findKey($item, $keySearch)) { echo $key; + return true; } } + return false; } @@ -27,8 +29,8 @@ $righe = $dbo->fetchArray("SELECT *, FROM `or_righe_ordini` WHERE idordine=".prepare($id_record).' ORDER BY `order`'); //controllo se gli articoli nell'ordine hanno un'immagine -if (findKey($righe, "immagine_articolo")) { - if (!empty($righe[(findKey($righe, "immagine_articolo")-1)]["immagine_articolo"])) { +if (findKey($righe, 'immagine_articolo')) { + if (!empty($righe[(findKey($righe, 'immagine_articolo') - 1)]['immagine_articolo'])) { $has_image = true; } } @@ -38,7 +40,7 @@ $autofill = [ 'words' => 70, // Numero di parolo dopo cui contare una riga nuova 'rows' => 20, // Numero di righe massimo presente nella pagina 'additional' => 15, // Numero di righe massimo da aggiungere - 'columns' => (($has_image) ? 6:5), // Numero di colonne della tabella + 'columns' => (($has_image) ? 6 : 5), // Numero di colonne della tabella ]; $sconto = []; @@ -52,7 +54,7 @@ echo " "; if ($has_image) { - echo " ".tr('Immagine', [], ['upper' => true]).""; + echo " ".tr('Immagine', [], ['upper' => true]).''; } echo " ".tr('Descrizione', [], ['upper' => true])." @@ -206,7 +208,7 @@ if ($options['pricing']) { // Totale imponibile echo ' - + '.tr('Imponibile', [], ['upper' => true]).': @@ -219,7 +221,7 @@ if ($options['pricing']) { if (!empty($sconto)) { echo ' - + '.tr('Sconto', [], ['upper' => true]).': @@ -231,7 +233,7 @@ if ($options['pricing']) { // Imponibile scontato echo ' - + '.tr('Imponibile scontato', [], ['upper' => true]).': @@ -244,7 +246,7 @@ if ($options['pricing']) { // IVA echo ' - + '.tr('Totale IVA', [], ['upper' => true]).': @@ -258,7 +260,7 @@ if ($options['pricing']) { // TOTALE echo ' - + '.tr('Quotazione totale', [], ['upper' => true]).': diff --git a/templates/pdfgen_variables.php b/templates/pdfgen_variables.php index 3b903b982..fc369feaf 100644 --- a/templates/pdfgen_variables.php +++ b/templates/pdfgen_variables.php @@ -29,8 +29,8 @@ foreach ($prefixes as $prefix) { $replaces[$prefix.'cellulare'] = !empty($replaces[$prefix.'cellulare']) ? 'Cell: '.$replaces[$prefix.'cellulare'] : ''; $replaces[$prefix.'email'] = !empty($replaces[$prefix.'email']) ? 'Email: '.$replaces[$prefix.'email'] : ''; $replaces[$prefix.'codiceiban'] = !empty($replaces[$prefix.'codiceiban']) ? 'IBAN: '.$replaces[$prefix.'codiceiban'] : ''; - $replaces[$prefix.'pec'] = !empty($replaces[$prefix.'pec']) ? 'PEC: '.$replaces[$prefix.'pec'] : ''; - + $replaces[$prefix.'pec'] = !empty($replaces[$prefix.'pec']) ? 'PEC: '.$replaces[$prefix.'pec'] : ''; + foreach ($replaces as $key => $value) { if (starts_with($key, $prefix)) { $replaces[$key] = empty($value) ? $value : $value.'
'; diff --git a/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php b/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php index 9c0f283b0..f4f7a0efa 100644 --- a/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php +++ b/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php @@ -18,7 +18,7 @@ if (is_array($_SESSION['module_'.$id_module])) { $field_name = str_replace('search_', '', $field); $field_name = str_replace('__', ' ', $field_name); $field_name = str_replace('-', ' ', $field_name); - array_push($search_filters, '`'.$field_name.'` LIKE "%'.$field_value.'%"'); + array_push($search_filters, '`'.$field_name.'` LIKE "%'.$value.'%"'); } } } diff --git a/update/2_4_3.sql b/update/2_4_3.sql index 0eca9b6bf..d84b1c047 100644 --- a/update/2_4_3.sql +++ b/update/2_4_3.sql @@ -35,7 +35,7 @@ ALTER TABLE `co_righe_documenti` ADD `data_inizio_periodo` date, ADD `data_fine_ ALTER TABLE `co_documenti` ADD `tipo_resa` VARCHAR(3); -- Colonna nome impianto -INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default` ) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'MyImpianti'), 'Nome', 'nome', 2, 1, 0, 0, NULL, NULL, 0, 0, 0); +INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default` ) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'MyImpianti'), 'Nome', 'nome', 2, 1, 0, 0, NULL, NULL, 1, 0, 1); -- Colonna causale predefinita INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default` ) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Causali'), 'Predefinita', 'IF(predefined, ''Sì'', ''No'')', 2, 1, 0, 0, NULL, NULL, 0, 0, 0); diff --git a/update/2_4_5.sql b/update/2_4_5.sql index b6188736c..bbe7c74e8 100644 --- a/update/2_4_5.sql +++ b/update/2_4_5.sql @@ -47,5 +47,34 @@ ALTER TABLE `an_anagrafiche` CHANGE `nome_cognome` `nome` VARCHAR(255) NOT NULL; ALTER TABLE `an_anagrafiche` ADD `cognome` VARCHAR(255) NOT NULL AFTER `nome`; -- Colonna Rif. fattura (Prima nota) -INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default` ) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Prima nota'), 'Rif. fattura', 'IF((iddocumento != ''),(SELECT numero_esterno FROM co_documenti WHERE id = iddocumento), ''-'')', 2, 1, 0, 0, NULL, NULL, 1, 0, 0); +INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default` ) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Prima nota'), 'Rif. fattura', '(SELECT numero_esterno FROM co_documenti WHERE id = iddocumento)', 2, 1, 0, 0, NULL, NULL, 1, 0, 0); +-- Aumento decimali percentuali delle rate pagamenti a 2 +ALTER TABLE `co_pagamenti` CHANGE `prc` `prc` DECIMAL(5,2) NOT NULL; + +-- Ordino gestione documentale per data, nome +UPDATE `zz_modules` SET `options` = '{ "main_query": [ { "type": "table", "fields": "Categoria, Nome, Data", "query": "SELECT id,(SELECT descrizione FROM zz_documenti_categorie WHERE zz_documenti_categorie.id = idcategoria) AS Categoria, zz_documenti.nome AS Nome, DATE_FORMAT( zz_documenti.`data`, ''%d/%m/%Y'' ) AS `Data` FROM zz_documenti WHERE `data` >= ''|period_start|'' AND `data` <= ''|period_end|'' HAVING 1=1 ORDER BY data, nome"} ]}' WHERE `zz_modules`.`name` = 'Gestione documentale'; + +-- Ordino Ddt anche per created_at (nel caso di stessa data e che il cast del numero esterno non sia efficace) +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` WHERE 1=1 AND `dir` = ''entrata'' AND `data` >= ''|period_start|'' AND `data` <= ''|period_end|'' HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC,`dt_ddt`.created_at DESC' WHERE `zz_modules`.`name` = 'Ddt di vendita'; + +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` WHERE 1=1 AND `dir` = ''uscita'' AND `data` >= ''|period_start|'' AND `data` <= ''|period_end|'' HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC, `dt_ddt`.created_at DESC' WHERE `zz_modules`.`id` = 'Ddt di acquisto'; + +-- Aggiunti pagamenti mancanti Assegno circolare,Contanti presso Tesoreria, Vaglia cambiario, Bollettino bancario, RID, RID utenze, RID veloce, MAV, Quietanza erario, Giroconto su conti di contabilità speciale, Domiciliazione bancaria, Domiciliazione postale, Bollettino di c/c postale, SEPA Direct Debit, SEPA Direct Debit CORE, SEPA Direct Debit B2B, Trattenuta su somme già riscosse +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Assegno circolare', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP03'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Contanti presso Tesoreria', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP04'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Vaglia cambiario', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP06'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Bollettino bancario', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP07'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'RID', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP09'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'RID utenze', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP10'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'RID veloce', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP11'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'MAV', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP13'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Quietanza erario', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP14'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Giroconto su conti di contabilità speciale', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP15'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Domiciliazione bancaria', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP16'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Domiciliazione postale', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP17'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Bollettino di c/c postale', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP18'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'SEPA Direct Debit', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP19'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'SEPA Direct Debit CORE', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP20'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'SEPA Direct Debit B2B', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP21'); +INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `updated_at`, `idconto_vendite`, `idconto_acquisti`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Trattenuta su somme già riscosse', '0', '1', '100', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, NULL, 'MP22');