diff --git a/CHANGELOG.md b/CHANGELOG.md index 419585211..272d56d9e 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ 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.42 (2023-03-10)](#2442-2023-03-10) - [2.4.41 (2023-02-27)](#2441-2023-02-27) - [2.4.40 (2023-02-17)](#2440-2023-02-17) - [2.4.39 (2023-01-13)](#2439-2023-01-13) @@ -52,6 +53,31 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k - [2.2 (2016-11-10)](#22-2016-11-10) - [2.1 (2015-04-02)](#21-2015-04-02) + +## 2.4.42 (2023-03-10) +### Aggiunto (Added) +- Aggiunta la gestione della provvigione in fase di aggiunta riga +- Aggiunta la selezione del sezionale in ddt trasferimento fra sedi +- Aggiunta impostazione di articolo e conto in fase di import FE +- Aggiunta possibilità di cambiare gruppo agli utenti +- Aggiunto messaggio aggiornamento utente +- Aggiunta possibilità di generare password casuali +- Aggiunta inserimento seriale in fatture di acquisto emesse +- Aggiunta impostazione per forzare la dimensione dei widget in Dashboard +### Modificato (Changed) +- Migliorata la visualizzazione delle attività in Dashboard +- Migliorata la gestione del fattore moltiplicativo +- Migliorati i riferimenti in fase di importazione fatture elettroniche +### Fixed +- Corretto il suggerimento dello sconto articolo +- Corretta la visualizzazione dello sconto per range nei listini +- Corretta l'impostazione della zona in fase di aggiunta sede +- Corretta la duplicazione di un template email +- Corretto l'inserimento di articoli con quantità negativa in ordini clienti e preventivi +- Corretto l'inserimento di apici in select-options +- Corretto l'ordinamento delle checklist +- Corretta la visualizzazione tooltip eventi AllDay +- Corretti i prezzi nei documenti di acquisto ## 2.4.41 (2023-02-27) ### Aggiunto (Added) - Aggiunta la modifica automatica del piano dei conti per clienti e fornitori diff --git a/assets/src/css/style.css b/assets/src/css/style.css index 92556d7a7..1b4aa7b70 100755 --- a/assets/src/css/style.css +++ b/assets/src/css/style.css @@ -157,6 +157,10 @@ a:focus { padding: 0 0px; } +.no-padding-left { + padding-left: 0px !important; +} + .box-center { width: 600px; margin: 7% auto @@ -299,6 +303,10 @@ span.form-control { padding: 5px; } +.input-group .input-group-addon { + background-color: transparent; +} + .input-group-addon { padding: 0px 12px; } @@ -1163,4 +1171,29 @@ div.tip { html body.sidebar-mini.sidebar-mini.sidebar-collapse i.fa.fa-user-circle-o.fa-3x.pull-left { font-size: 2.4em; } +} + +/* +* Colore help icon +*/ +.tip.tooltipstered>.fa-question-circle-o { + color: dodgerblue; +} + +/* +* Colore testo btn-box-tool +*/ +.btn-box-tool { + color: #2e2e2e; + padding-left: 100px; +} + +.btn-box-tool:hover { + color: #000000; +} + +.select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { + height: 23px; + padding: 3px 12px; + margin-top: 4px; } \ No newline at end of file diff --git a/assets/src/js/functions/hooks.js b/assets/src/js/functions/hooks.js index df3fa0902..4930ee2d6 100755 --- a/assets/src/js/functions/hooks.js +++ b/assets/src/js/functions/hooks.js @@ -56,33 +56,41 @@ function startHooks() { * @param hook */ function startHook(hook, init) { - $.ajax({ - url: globals.rootdir + "/ajax.php", - type: "get", - data: { - op: "hook-lock", - id: hook.id, - }, - success: function (data) { - var token = JSON.parse(data); - - if (init) { - hookCount("#hooks-counter"); - - updateHook(hook); - } + if (document.hasFocus()) { + $.ajax({ + url: globals.rootdir + "/ajax.php", + type: "get", + data: { + op: "hook-lock", + id: hook.id, + }, + success: function (data) { + var token = JSON.parse(data); + + if (init) { + hookCount("#hooks-counter"); + + updateHook(hook); + } - if (token) { - executeHook(hook, token); - } else { - var timeout = 10; + if (token) { + executeHook(hook, token); + } else { + var timeout = 30; - setTimeout(function () { - startHook(hook); - }, timeout * 1000); - } - }, - }); + setTimeout(function () { + startHook(hook); + }, timeout * 1000); + } + }, + }); + } else { + var timeout = 30; + + setTimeout(function () { + startHook(hook); + }, timeout * 1000); + } } /** @@ -108,7 +116,7 @@ function executeHook(hook, token) { if (result.execute) { startHook(hook); } else { - timeout = 30; + timeout = 60; setTimeout(function () { startHook(hook); diff --git a/editor.php b/editor.php index 1cf2daadc..ced6d2c67 100755 --- a/editor.php +++ b/editor.php @@ -502,14 +502,14 @@ }); // questo controllo blocca il modulo vendita al banco, dopo la lettura con barcode, appare il messaggio di conferma - window.onbeforeunload = function(e) { + window.addEventListener("beforeunload", function(e) { if(content_was_modified) { var dialogText = "Uscire senza salvare?"; e.returnValue = dialogText; $("#main_loading").fadeOut(); return dialogText; } - }; + }); window.addEventListener("unload", function(e) { $("#main_loading").show(); diff --git a/include/init/init.php b/include/init/init.php index 49d9174fe..6e73d031f 100755 --- a/include/init/init.php +++ b/include/init/init.php @@ -142,15 +142,15 @@
- {[ "type": "text", "label": "'.tr('Username').'", "name": "admin_username", "value": "", "placeholder": "'.tr("Digita l'username dell'amministratore").'", "required": 1 ]} + {[ "type": "text", "label": "'.tr('Username').'", "name": "admin_username", "value": "", "placeholder": "'.tr("Imposta l'username dell'amministratore").'", "required": 1 ]}
- {[ "type": "password", "label": "'.tr('Password').'", "id": "password", "name": "admin_password", "value": "", "placeholder": "'.tr("Digita la password dell'amministratore").'", "required": 1, "strength": "#config" ]} + {[ "type": "password", "label": "'.tr('Password').'", "id": "password", "name": "admin_password", "value": "", "placeholder": "'.tr("Imposta la password dell'amministratore").'", "required": 1, "strength": "#config" ]}
- {[ "type": "email", "label": "'.tr('Email').'", "name": "admin_email", "value": "", "placeholder": "'.tr("Digita l'indirizzo email dell'amministratore").'", "required": 1 ]} + {[ "type": "email", "label": "'.tr('Email').'", "name": "admin_email", "value": "", "placeholder": "'.tr("Imposta l'indirizzo email dell'amministratore").'", "required": 1 ]}
diff --git a/include/init/requirements.php b/include/init/requirements.php index 091b09450..11298f9bb 100755 --- a/include/init/requirements.php +++ b/include/init/requirements.php @@ -296,7 +296,7 @@ // File di servizio $files_to_check = [ - 'manifest.json' => tr('Necessario per l\'aggiunta a schermata home da terminale'), + 'manifest.json' => tr('Necessario per l\'aggiunta a schermata home da terminale (creato al termine della configurazione)'), 'database_5_7.json' => tr('Necessario per il controllo integrità con database MySQL 5.7.x'), 'database.json' => tr('Necessario per il controllo integrità con database MySQL 8.0.x'), 'checksum.json' => tr('Necessario per il controllo integrità dei files del gestionale'), diff --git a/index.php b/index.php index aff8b1979..9f397562e 100755 --- a/index.php +++ b/index.php @@ -158,7 +158,7 @@ function brute() { echo ' required> - {[ "type": "password", "name": "password", "autocomplete": "current-password", "placeholder": "'.tr('Password').'", "icon-before": "" ]} + {[ "type": "password", "name": "password", "autocomplete": "current-password", "placeholder": "'.tr('Password').'", "icon-before": ""]}
'.tr('Password dimenticata?').' diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php index c013cdb96..d4de54213 100755 --- a/modules/ddt/actions.php +++ b/modules/ddt/actions.php @@ -642,7 +642,12 @@ $sconto = $listino['sconto_percentuale_listino']; } } - $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + if ($dir == 'entrata') { + $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + } else { + $prezzo_unitario = $originale->prezzo_acquisto; + } + $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); $articolo->setSconto($sconto, 'PRC'); diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index af67c7d3c..4343fac0f 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -1009,7 +1009,13 @@ $sconto = $listino['sconto_percentuale_listino']; } } - $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + + if ($dir == 'entrata') { + $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + } else { + $prezzo_unitario = $originale->prezzo_acquisto; + } + $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $fattura->idagente])['provvigione_default']; $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index 3508cf5ef..e5fc7aa47 100755 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -674,7 +674,12 @@ $sconto = $listino['sconto_percentuale_listino']; } } - $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + if ($dir == 'entrata') { + $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + } else { + $prezzo_unitario = $originale->prezzo_acquisto; + } + $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default']; $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); diff --git a/modules/stampe/edit.php b/modules/stampe/edit.php index 99c3462d3..dd235e0ae 100755 --- a/modules/stampe/edit.php +++ b/modules/stampe/edit.php @@ -98,6 +98,42 @@ +
+
+

'.tr('Opzioni').'

+
+ +
'; + +if (!empty($record['available_options'])) { + $available_options = json_decode($record['available_options']); + echo ' +

'.tr('Puoi utilizzare le seguenti opzioni per generare la stampa').':

+
    '; + + foreach ($available_options as $option => $value) { + echo ' +
  • '.$option.''.((!empty($value)) ? ' '.$value.'' : '').'
  • '; + } + + echo ' +
'; +} else { + echo ' +

'.tr('Non sono state definite opzioni da utilizzare per la stampa').'.

'; +} + +echo ' +
+
'; + + // Variabili utilizzabili $module = Modules::get($record['id_module']); $variables = $module->getPlaceholders($id_record); diff --git a/modules/stato_servizi/actions.php b/modules/stato_servizi/actions.php index c5f233652..286085006 100755 --- a/modules/stato_servizi/actions.php +++ b/modules/stato_servizi/actions.php @@ -29,6 +29,26 @@ $id = post('id'); switch (filter('op')) { + + case 'cambia-dimensione': + $result = $dbo->update('zz_widgets', [ + 'class' => post('valore') + ], [ + 'id' => post('id') + ]); + + echo json_encode([ + 'result' => $result, + ]); + + if ($result) { + flash()->info('Impostazione modificata con successo!'); + } else { + flash()->error('Errore durante il salvataggio!'); + } + + break; + case 'rimuovi-modulo': $id = filter('id'); $is_plugin = filter('tipo') == 'plugin'; diff --git a/modules/stato_servizi/elenco-widget.php b/modules/stato_servizi/elenco-widget.php index 8a4b499e3..efa1f91fa 100644 --- a/modules/stato_servizi/elenco-widget.php +++ b/modules/stato_servizi/elenco-widget.php @@ -24,6 +24,7 @@ '.tr('Nome').' + '.tr('Dimensione').' '.tr('Ubicazione').' '.tr('Stato').' '.tr('Posizione').' @@ -56,6 +57,9 @@ '.$widget['name'].(!empty($widget['help']) ? ' ' : '').' + + {[ "type": "select", "name": "dimensione[]", "class": "widgets", "value": "'.$widget['class'].'", "values": "list=\"0\": \"'.tr('Da impostazioni').'\", \"col-md-3\": \"'.tr('Piccolo').'\", \"col-md-4\": \"'.tr('Medio').'\", \"col-md-6\": \"'.tr('Grande').'\", \"col-md-12\": \"'.tr('Molto grande').'\"", "extra": "data-id=\"'.$widget['id'].'\"" ]} + '.( string_starts_with($widget['location'], 'controller') ? tr('Schermata modulo') : @@ -250,4 +254,26 @@ function spostaWidget(button) { } }); } + +$(".widgets").on("change", function() { + $.ajax({ + url: globals.rootdir + "/actions.php", + cache: false, + type: "POST", + dataType: "JSON", + data: { + op: "cambia-dimensione", + id_module: globals.id_module, + id: $(this).data("id"), + valore: $(this).val() + }, + success: function(data) { + renderMessages(); + }, + error: function(data) { + swal("'.tr('Errore').'", "'.tr('Errore durante il salvataggio dei dati').'", "error"); + } + }); +}); + '; diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php index b475d58b1..a0fbf9c11 100755 --- a/plugins/importFE/actions.php +++ b/plugins/importFE/actions.php @@ -375,6 +375,11 @@ // Iterazione sulle singole righe $righe = $fattura_pa->getRighe(); foreach ($righe as $key => $riga) { + // Se la riga è descrittiva non la collego a documenti + if ($riga['PrezzoTotale'] == 0) { + continue; + } + $collegamento = null; $match_documento_da_fe = true; @@ -421,6 +426,8 @@ AND dt_ddt.idanagrafica = ".prepare($anagrafica->id)." AND + dt_righe_ddt.qta > dt_righe_ddt.qta_evasa + AND |where|"; // Ricerca di righe DDT con stesso Articolo @@ -457,6 +464,8 @@ AND or_ordini.idanagrafica = ".prepare($anagrafica->id)." AND + or_righe_ordini.qta > or_righe_ordini.qta_evasa + AND |where|"; // Ricerca di righe Ordine con stesso Articolo @@ -490,13 +499,13 @@ CONCAT('DDT num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS opzione FROM dt_righe_ddt INNER JOIN dt_ddt ON dt_ddt.id = dt_righe_ddt.idddt - WHERE dt_ddt.idanagrafica = ".prepare($anagrafica->id)." AND |where_ddt| + WHERE dt_ddt.idanagrafica = ".prepare($anagrafica->id)." AND |where_ddt| AND dt_righe_ddt.qta > dt_righe_ddt.qta_evasa UNION SELECT or_righe_ordini.id, or_righe_ordini.idordine AS id_documento, or_righe_ordini.is_descrizione, or_righe_ordini.idarticolo, or_righe_ordini.is_sconto, 'ordine' AS ref, CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS opzione FROM or_righe_ordini INNER JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine - WHERE or_ordini.idanagrafica = ".prepare($anagrafica->id).' AND |where_ordini|'; + WHERE or_ordini.idanagrafica = ".prepare($anagrafica->id).' AND |where_ordini| AND or_righe_ordini.qta > or_righe_ordini.qta_evasa'; // Ricerca di righe DDT/Ordine con stesso Articolo if (!empty($id_articolo)) { diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index 2cdadc708..f97824647 100755 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -566,7 +566,7 @@ function cleanup(){

-
@@ -575,11 +575,11 @@ function cleanup(){
- {[ "type": "select", "name": "selezione_riferimento['.$key.']", "ajax-source": "riferimenti-fe", "select-options": '.json_encode(['id_anagrafica' => $anagrafica ? $anagrafica->id : '']).', "label": "'.tr('Riferimento acquisto').'", "icon-after": '.json_encode('').', "help": "'.tr('Articoli contenuti in Ordini o DDT del Fornitore').'" ]} + {[ "type": "select", "name": "selezione_riferimento['.$key.']", "ajax-source": "riferimenti-fe", "select-options": '.json_encode(['id_anagrafica' => $anagrafica ? $anagrafica->id : '']).', "label": "'.tr('Riferimento acquisto').'", "icon-after": '.json_encode('').', "help": "'.tr('Articoli contenuti in Ordini o DDT del Fornitore').'" ]}
- {[ "type": "select", "name": "selezione_riferimento_vendita['.$key.']", "ajax-source": "riferimenti-vendita-fe", "select-options": '.json_encode(['id_articolo' => $id_articolo]).', "label": "'.tr('Riferimento vendita').'", "icon-after": '.json_encode('').', "help": "'.tr('Articoli contenuti in Ordini Cliente').'" ]} + {[ "type": "select", "name": "selezione_riferimento_vendita['.$key.']", "ajax-source": "riferimenti-vendita-fe", "select-options": '.json_encode(['id_articolo' => $id_articolo]).', "label": "'.tr('Riferimento vendita').'", "icon-after": '.json_encode('').', "help": "'.tr('Articoli contenuti in Ordini Cliente').'" ]}
diff --git a/src/API/App/v1/Revisione.php b/src/API/App/v1/Revisione.php index 170103bd4..4bb8cfe09 100644 --- a/src/API/App/v1/Revisione.php +++ b/src/API/App/v1/Revisione.php @@ -24,7 +24,7 @@ class Revisione extends Resource implements RetrieveInterface { - const REVISION = '5'; + const REVISION = '6'; public function retrieve($request) { diff --git a/src/HTMLBuilder/HTMLBuilder.php b/src/HTMLBuilder/HTMLBuilder.php index b21566e01..47fa3fa79 100755 --- a/src/HTMLBuilder/HTMLBuilder.php +++ b/src/HTMLBuilder/HTMLBuilder.php @@ -85,7 +85,7 @@ class HTMLBuilder /** @var array Generatore del contenitore per i campi HTML */ protected static $wrapper = [ 'class' => Wrapper\HTMLWrapper::class, - 'istance' => null, + 'instance' => null, ]; /** @var array Elenco dei gestori delle strutture HTML */ @@ -201,7 +201,7 @@ public static function parse(array $json) } /** - * Restituisce il nome della classe resposabile per la gestione di una determinata tipologia di tag di input. + * Restituisce il nome della classe responsabile per la gestione di una determinata tipologia di tag di input. * * @param string $input * @@ -215,7 +215,7 @@ public static function getHandlerName($input) } /** - * Restituisce l'istanza della classe resposabile per la gestione di una determinata tipologia di tag di input. + * Restituisce l'istanza della classe responsabile per la gestione di una determinata tipologia di tag di input. * * @param string $input * @@ -232,7 +232,7 @@ public static function getHandler($input) } /** - * Imposta una determinata classe come resposabile per la gestione di una determinata tipologia di tag di input. + * Imposta una determinata classe come responsabile per la gestione di una determinata tipologia di tag di input. * * @param string $input * @param string|mixed $class @@ -457,7 +457,7 @@ protected static function elaborate($json) // Gestione grafica dell'attributo required if (in_array('required', $extras)) { if (!empty($values['label'])) { - $values['label'] .= '*'; + $values['label'] .= '*'; } elseif (!empty($values['placeholder'])) { $values['placeholder'] .= '*'; } diff --git a/src/HTMLBuilder/Handler/DefaultHandler.php b/src/HTMLBuilder/Handler/DefaultHandler.php index 5e1f26e71..9a4faa23f 100755 --- a/src/HTMLBuilder/Handler/DefaultHandler.php +++ b/src/HTMLBuilder/Handler/DefaultHandler.php @@ -101,7 +101,8 @@ protected function file(&$values, &$extras) */ protected function password(&$values, &$extras) { - $values['icon-after'] = ' | '; + + $values['icon-after'] = ''; $result = ' '; if (!empty($values['strength'])) { + + + $values['icon-after'] .= ' | '; + + $result .= '
diff --git a/src/HTMLBuilder/Manager/WidgetManager.php b/src/HTMLBuilder/Manager/WidgetManager.php index 3b6a4534c..5ce60966a 100755 --- a/src/HTMLBuilder/Manager/WidgetManager.php +++ b/src/HTMLBuilder/Manager/WidgetManager.php @@ -214,7 +214,7 @@ protected function render($widget, $title, $number = null) protected function group($options) { - $query = 'SELECT id, id_module FROM zz_widgets WHERE id_module = '.prepare($options['id_module']).' AND (|position|) AND enabled = 1 ORDER BY `order` ASC'; + $query = 'SELECT id, id_module, class FROM zz_widgets WHERE id_module = '.prepare($options['id_module']).' AND (|position|) AND enabled = 1 ORDER BY `order` ASC'; // Mobile (tutti i widget a destra) if (isMobile()) { @@ -245,24 +245,17 @@ protected function group($options) // Generazione del codice HTML if (!empty($widgets)) { - $row_max = setting('Numero massimo Widget per riga'); - if ($row_max > 6) { - $row_max = 6; - } elseif ($row_max < 1) { - $row_max = 1; - } - $result = '
    '; // Aggiungo ad uno ad uno tutti i widget foreach ($widgets as $widget) { - if ($widgets[0]['id_module'] == $database->fetchOne('SELECT id FROM zz_modules WHERE title = "Stato dei servizi"')['id']) { - $result .= ' -
  • '; + if ($widget['id_module'] == $database->fetchOne('SELECT id FROM zz_modules WHERE title = "Stato dei servizi"')['id']) { + $result .= ' +
  • '; } else { - $result .= ' -
  • '; + $result .= ' +
  • '; } $info = array_merge($options, [ 'id' => $widget['id'], diff --git a/templates/ordini/body.php b/templates/ordini/body.php index 701f726e3..0aacf9fc4 100755 --- a/templates/ordini/body.php +++ b/templates/ordini/body.php @@ -128,7 +128,7 @@ '.nl2br($r['descrizione']); if ($riga->isArticolo()) { - if ($documento->direzione == 'entrata' && !$options['hide_codice']) { + if ($documento->direzione == 'entrata' && !$options['hide-item-number']) { // Codice articolo $text = tr('COD. _COD_', [ '_COD_' => $riga->codice, diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php index 2ad6bf6de..66214fee9 100755 --- a/templates/preventivi/body.php +++ b/templates/preventivi/body.php @@ -171,7 +171,7 @@ if ($options['pricing']) { echo " ".tr('Prezzo unitario', [], ['upper' => true])." - ".( $options['hide_total'] ? tr('Importo ivato', [], ['upper' => true ]) : tr( 'Importo', [], ['upper' => true]) )." + ".( $options['hide-total'] ? tr('Importo ivato', [], ['upper' => true ]) : tr( 'Importo', [], ['upper' => true]) )." ".tr('IVA', [], ['upper' => true]).' (%)'; } @@ -213,10 +213,16 @@ '.nl2br($r['descrizione']); if ($riga->isArticolo()) { - // Codice articolo - $text = tr('COD. _COD_', [ - '_COD_' => $riga->codice, - ]); + + if($options['hide-item-number']){ + $text = ''; + }else{ + // Codice articolo + $text = tr('COD. _COD_', [ + '_COD_' => $riga->codice, + ]); + } + echo '
    '.$text.''; @@ -253,7 +259,7 @@ // Imponibile echo ' - '.( ($options['hide_total'] || $prezzi_ivati) ? moneyFormat($riga->totale) : moneyFormat($riga->totale_imponibile) ).' + '.( ($options['hide-total'] || $prezzi_ivati) ? moneyFormat($riga->totale) : moneyFormat($riga->totale_imponibile) ).' '; // Iva @@ -296,15 +302,15 @@ $show_sconto = $sconto > 0; // TOTALE COSTI FINALI -if (($options['pricing'] && !isset($options['hide_total'])) || $options['show_only_total']) { +if (($options['pricing'] && !isset($options['hide-total'])) || $options['show-only-total']) { // Totale imponibile echo ' - + '.tr('Imponibile', [], ['upper' => true]).': - + '.moneyFormat($show_sconto ? $imponibile : $totale_imponibile, 2).' '; @@ -313,11 +319,11 @@ if ($show_sconto) { echo ' - + '.tr('Sconto', [], ['upper' => true]).': - + '.moneyFormat($sconto, 2).' '; @@ -325,11 +331,11 @@ // Totale imponibile echo ' - + '.tr('Totale imponibile', [], ['upper' => true]).': - + '.moneyFormat($totale_imponibile, 2).' '; @@ -338,11 +344,11 @@ // IVA echo ' - + '.tr('Totale IVA', [], ['upper' => true]).': - + '.moneyFormat($totale_iva, 2).' '; @@ -350,10 +356,10 @@ // TOTALE echo ' - + '.tr('Totale documento', [], ['upper' => true]).': - + '.moneyFormat($totale, 2).' '; @@ -362,10 +368,10 @@ // SCONTO IN FATTURA echo ' - + '.tr('Sconto in fattura', [], ['upper' => true]).': - + '.moneyFormat($sconto_finale, 2).' '; @@ -373,10 +379,10 @@ // NETTO A PAGARE echo ' - + '.tr('Netto a pagare', [], ['upper' => true]).': - + '.moneyFormat($netto_a_pagare, 2).' '; diff --git a/update/2_4_42.sql b/update/2_4_42.sql index 90357ec6c..fab02e6ac 100644 --- a/update/2_4_42.sql +++ b/update/2_4_42.sql @@ -1,2 +1,38 @@ -- Ampliamento decimali fattore moltiplicativo per unità di misura secondaria -ALTER TABLE `mg_articoli` CHANGE `fattore_um_secondaria` `fattore_um_secondaria` DECIMAL(19,10) NULL DEFAULT NULL; \ No newline at end of file +ALTER TABLE `mg_articoli` CHANGE `fattore_um_secondaria` `fattore_um_secondaria` DECIMAL(19,10) NULL DEFAULT NULL; + +-- Fix query vista ordini fornitore +UPDATE `zz_modules` SET `options` = "SELECT + |select| +FROM + `or_ordini` + LEFT JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` + LEFT JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + LEFT JOIN (SELECT `idordine`, SUM(`qta` - `qta_evasa`) AS `qta_da_evadere`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `or_righe_ordini` GROUP BY `idordine`) AS righe ON `or_ordini`.`id` = `righe`.`idordine` + LEFT JOIN (SELECT `idordine`, MIN(`data_evasione`) AS `data_evasione` FROM `or_righe_ordini` WHERE (`qta` - `qta_evasa`)>0 GROUP BY `idordine`) AS `righe_da_evadere` ON `righe`.`idordine`=`righe_da_evadere`.`idordine` + LEFT JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine` + LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT co_documenti.numero_esterno SEPARATOR ', ') AS info, co_righe_documenti.original_document_id AS idordine FROM co_documenti INNER JOIN co_righe_documenti ON co_documenti.id = co_righe_documenti.iddocumento WHERE original_document_type='Modules\\\\Ordini\\\\Ordine' GROUP BY idordine, original_document_id) AS fattura ON fattura.idordine = or_ordini.id + LEFT JOIN (SELECT `zz_operations`.`id_email`, `zz_operations`.`id_record` FROM `zz_operations` INNER JOIN `em_emails` ON `zz_operations`.`id_email` = `em_emails`.`id` INNER JOIN `em_templates` ON `em_emails`.`id_template` = `em_templates`.`id` INNER JOIN `zz_modules` ON `zz_operations`.`id_module` = `zz_modules`.`id` WHERE `zz_modules`.`name` = 'Ordini fornitore' AND `zz_operations`.`op` = 'send-email' GROUP BY `zz_operations`.`id_record`) AS `email` ON `email`.`id_record` = `or_ordini`.`id` +WHERE + 1=1 |segment(`or_ordini`.`id_segment`)| AND `dir` = 'uscita' |date_period(`or_ordini`.`data`)| +HAVING + 2=2 +ORDER BY + `data` DESC, + CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini fornitore'; + +-- Correzione dimensione widget +UPDATE `zz_settings` SET `valore` = 'col-md-3', `tipo` = 'list[col-md-1,col-md-2,col-md-3,col-md-4,col-md-6]', `nome` = 'Dimensione widget predefinita' WHERE `nome` = 'Numero massimo Widget per riga'; + +-- Reset class widget +UPDATE `zz_widgets` SET `class` = NULL; + +-- Aggiunto available_options per zz_prints +ALTER TABLE `zz_prints` ADD `available_options` TEXT NULL AFTER `enabled`; + +UPDATE `zz_prints` SET `available_options` = '{\"pricing\":\"Visualizzare i prezzi\", \"hide-total\": \"Nascondere i totali delle righe\", \"show-only-total\": \"Visualizzare solo i totali del documento\", \"hide-header\": \"Nascondere intestazione\", \"hide-footer\": \"Nascondere footer\", \"last-page-footer\": \"Visualizzare footer solo su ultima pagina\", \"hide-item-number\": \"Nascondere i codici degli articoli\"}' WHERE `zz_prints`.`name` = 'Preventivo'; + +UPDATE `zz_prints` SET `options` = '{\"pricing\": true, \"last-page-footer\": true, \"hide-item-number\": true}' WHERE `zz_prints`.`name` = 'Ordine cliente (senza codici)'; + +UPDATE `zz_prints` SET `options` = '{\"pricing\":true, \"hide-total\":true}' WHERE `zz_prints`.`name` = 'Preventivo (senza totali)'; +UPDATE `zz_prints` SET `options` = '{\"pricing\":false, \"show-only-total\":true}' WHERE `zz_prints`.`name` = 'Preventivo (solo totale)'; \ No newline at end of file