diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e1b4c326..da6946f3a 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.18 ()](#2418-) - [2.4.17.1 (2020-09-18)](#24171-2020-09-18) - [2.4.17 (2020-08-24)](#2417-2020-08-24) - [2.4.16 (2020-07-28)](#2416-2020-07-28) @@ -28,6 +29,50 @@ 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.18 () + +### Aggiunto (Added) + - Sidebar per la gestione grafica dei Plugin all'interno dei record per i Moduli + - Sistema di cron di base per la gestione di operazioni ricorrenti (`cron.php`) + - Avviso su conflitti di occupazione per i Tecnici in **Attività** + - Plugin *Dettagli* per il modulo **Articoli**, finalizzato alla gestione dei prezzi di acquisto e vendita per *Anagrafica* e *Quantità* del Documento + - Modulo **Giacenze sedi** per visualizzare le giacenze in specifiche *Sedi* dell'*Anagrafica* Azienda + - Sistema di controllo sull'integrità strutturale del database, per utilizzo da parte di tecnici dedicati + - Numerazione righe nella stampa **Ordini** + - Azione di gruppo sul modulo **Anagrafiche** per calcolare la posizione geografica sulla base della Sede legale (richiede Google Maps abilitato) + - *Copyright notice* su tutti i file del progetto + - Possibilità di indicare lo stato alla creazione dei Documenti nella procedura di importazione + - Traduzione di base per il Tedesco (Germania) + - Supporto interno all'importazione verso **Preventivi** e **Contratti** + +### Modificato (Changed) + - Integrazione completa del nuovo sistema per la gestione delle impostazioni dei select (`select-options`) + - Miglioramento della grafica di integrazione con Google Maps per **Attività** e **Anagrafiche** + - Miglioramento del sistema di importazione FE in relazione alla gestione dei riferimenti a **Ordini** e **DDT**, con introduzione di una ricerca di base per l'autocompletamento + - Caricamento AJAX delle righe dei Documenti + - Introduzione numero rata in Rate contrattuali + - Visualizzazione completa delle date di lavorazione nella stampa delle **Attività** (#828) + - Modifica sovrapposizione eventi in **Dashboard** + - Modifica della gestione JS dei campi numerici, ora basata sulla libreria [AutoNumeric](http://autonumeric.org/) + - Modifica del sistema di riferimenti tra Documenti per includere il codice relativo nella Descrizione delle righe relative (con deprecazione dell'Impostazione "Riferimento dei documenti nelle stampe") { + - Modifica del sistema di riferimenti tra Documenti per includere il codice relativo nella *Descrizione* delle righe relative (con deprecazione dell'*Impostazione* "Riferimento dei documenti nelle stampe") + - Miglioramento elenco *Promemoria* in **Dashboard**, per visualizzare il *Tecnico* relativo + - Corretta l'impostazione degli Sconti generici nei Documenti per l'utilizzo dell'importo ivato nel caso dell'impostazione "Utilizza prezzi di vendita comprensivi di IVA" + +### Fixed + - Correzione del numero delle righe sui Documenti a seguito di un riordinamento + - Fix segno marca da bollo su *Nota di credito* + - Fix selezione data sbagliata per vista mensile in Dashboard + - Fix per aggiornamento indicato negli Hook anche a seguito del completamento + - Correzione per l'eliminazione delle *Sedi* + - Fix problema delle statistiche in **Stato dei servizi** + - Fix visualizzazione sconto ivato sulla base dell'utilizzo dei Prezzi ivati + - Fix visibilità per i checkbox standard del browser + - Fix creazione di articoli duplicati da importazione FE (#870) + - Correzioni per l'impostazione di *Categoria* e *Sottocategoria* dalla procedura di importazione CSV **Articoli** + - Fix link interno al plugin *Impianti del cliente* + - Correzioni sulla procedura di duplicazione **Attività** + ## 2.4.17.1 (2020-09-18) ### Fixed @@ -42,7 +87,6 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k - Fix su calcolo movimenti in caso di insoluto - Fix raggruppamento movimenti composti - ## 2.4.17 (2020-08-24) ### Aggiunto (Added) diff --git a/actions.php b/actions.php index b69535026..97534a6e2 100755 --- a/actions.php +++ b/actions.php @@ -30,7 +30,7 @@ if (empty($structure) || empty($structure['enabled'])) { die(tr('Accesso negato')); } -$upload_dir = DOCROOT.'/'.Uploads::getDirectory($id_module, $id_plugin); +$upload_dir = base_dir().'/'.Uploads::getDirectory($id_module, $id_plugin); $database->beginTransaction(); @@ -87,7 +87,7 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') { } } - redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.((!empty($options['id_plugin'])) ? '#tab_'.$options['id_plugin'] : '')); + redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.((!empty($options['id_plugin'])) ? '#tab_'.$options['id_plugin'] : '')); } } @@ -273,13 +273,13 @@ elseif (post('op') == 'send-email') { flash()->error(tr('Errore durante l\'invio email! Verifica i parametri dell\'account SMTP utilizzato.')); } } elseif (filter('op') == 'aggiorna_colonne') { - include_once DOCROOT.'/include/colonne.php'; + include_once base_dir().'/include/colonne.php'; } elseif (filter('op') == 'visualizza_riferimenti') { - include_once DOCROOT.'/include/riferimenti/riferimenti.php'; + include_once base_dir().'/include/riferimenti/riferimenti.php'; } elseif (filter('op') == 'visualizza_righe_riferimenti') { - include_once DOCROOT.'/include/riferimenti/righe_riferimenti.php'; + include_once base_dir().'/include/riferimenti/righe_riferimenti.php'; } elseif (filter('op') == 'visualizza_righe_documento') { - include_once DOCROOT.'/include/riferimenti/righe_documento.php'; + include_once base_dir().'/include/riferimenti/righe_documento.php'; } elseif (filter('op') == 'salva_riferimento_riga') { $database->insert('co_riferimenti_righe', [ 'source_type' => filter('source_type'), @@ -336,7 +336,7 @@ if ($structure->permission == 'rw') { $bulk = empty($bulk) ? [] : $bulk; if (in_array(post('op'), array_keys($bulk))) { - redirect(ROOTDIR.'/controller.php?id_module='.$id_module, 'js'); + redirect(base_path().'/controller.php?id_module='.$id_module, 'js'); } else { // Esecuzione delle operazioni del modulo include $structure->filepath('actions.php'); diff --git a/add.php b/add.php index 7535b9eb6..f634ba663 100755 --- a/add.php +++ b/add.php @@ -20,7 +20,7 @@ include_once __DIR__.'/core.php'; // Inclusione elementi fondamentali del modulo -include $docroot.'/actions.php'; +include base_dir().'/actions.php'; // Controllo dei permessi if (empty($id_plugin)) { diff --git a/ajax.php b/ajax.php index 02aeac754..c1384ccb4 100755 --- a/ajax.php +++ b/ajax.php @@ -72,7 +72,7 @@ switch (filter('op')) { break; case 'checklists': - include DOCROOT.'/plugins/checks.php'; + include base_dir().'/plugins/checks.php'; break; diff --git a/ajax_dataload.php b/ajax_dataload.php index 3d8a45e04..3753e2a00 100755 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -22,11 +22,13 @@ include_once __DIR__.'/core.php'; use Util\Query; // Informazioni fondamentali -$columns = filter('columns'); -$order = filter('order')[0]; +$columns = (array) filter('columns'); +$order = filter('order') ? filter('order')[0] : []; $draw_numer = intval(filter('draw')); -$order['column'] = $order['column'] - 1; +if (!empty(filter('order'))) { + $order['column'] = $order['column'] - 1; +} array_shift($columns); $total = Util\Query::readQuery($structure); @@ -76,7 +78,7 @@ if (!empty($query)) { // Allineamento delle righe $align = []; - $row = $rows[0] ?: []; + $row = isset($rows[0]) ? $rows[0] : []; foreach ($row as $field => $value) { $value = trim($value); @@ -93,6 +95,13 @@ if (!empty($query)) { // Creazione della tabella foreach ($rows as $i => $r) { + // Evitare risultati con ID a null + // Codice non applicabile in ogni caso: sulla base dei permessi, ID può non essere impostato + /* + if (empty($r['id'])) { + continue; + }*/ + $result = [ 'id' => $r['id'], '', // Colonna ID @@ -157,7 +166,7 @@ if (!empty($query)) { $id_record = $r['id']; $hash = ''; - $id_module = $r['_link_module_'] ?: $id_module; + $id_module = !empty($r['_link_module_']) ? $r['_link_module_'] : $id_module; if (!empty($r['_link_record_'])) { $id_record = $r['_link_record_']; $hash = !empty($r['_link_hash_']) ? '#'.$r['_link_hash_'] : ''; @@ -166,11 +175,11 @@ if (!empty($query)) { // Link per i moduli if (empty($id_plugin)) { - $column['data-link'] = $rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.$hash; + $column['data-link'] = base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.$hash; } // Link per i plugin else { - $column['data-link'] = $rootdir.'/add.php?id_module='.$id_module.'&id_record='.$id_record.'&id_plugin='.$id_plugin.'&id_parent='.$id_parent.'&edit=1'.$hash; + $column['data-link'] = base_path().'/add.php?id_module='.$id_module.'&id_record='.$id_record.'&id_plugin='.$id_plugin.'&id_parent='.$id_parent.'&edit=1'.$hash; $column['data-type'] = 'dialog'; } @@ -182,8 +191,8 @@ if (!empty($query)) { $attributes[] = $key.'="'.$val.'"'; } - // Replace rootdir per le query - $value = str_replace('ROOTDIR', ROOTDIR, $value); + // Replace base_link() per le query + $value = str_replace('base_link()', base_path(), $value); $result[] = str_replace('|attr|', implode(' ', $attributes), '
'.$value.'
'); } diff --git a/ajax_select.php b/ajax_select.php index 166fc9e29..ea0f20a45 100755 --- a/ajax_select.php +++ b/ajax_select.php @@ -27,7 +27,7 @@ if (!isset($resource)) { // Opzioni di selezione sugli elementi $options = filter('options') ?: []; - $options_compatibility = $_SESSION['superselect'] ?: []; + $options_compatibility = session_get('superselect', []); $options = array_merge($options_compatibility, $options); // Preselezione su $elements dichiarato da file precedente diff --git a/assets/src/css/style.css b/assets/src/css/style.css index 58d55b08c..095e7f9e5 100755 --- a/assets/src/css/style.css +++ b/assets/src/css/style.css @@ -1041,6 +1041,10 @@ div.tip { background: #222222; } +.decimal-number { + text-align: right; +} + /* Loading specificato per un div */ .local-loader { position: relative; diff --git a/assets/src/js/functions/functions.js b/assets/src/js/functions/functions.js index b401d10c1..69178d27d 100755 --- a/assets/src/js/functions/functions.js +++ b/assets/src/js/functions/functions.js @@ -16,12 +16,21 @@ * along with this program. If not, see . */ -// Modal +/** + * Modal gestito da versioni precedenti. + * @param title + * @param href + * @param init_modal + */ function launch_modal(title, href, init_modal) { openModal(title, href); } -// Modal +/** + * Modal. + * @param title + * @param href + */ function openModal(title, href) { // Fix - Select2 does not function properly when I use it inside a Bootstrap modal. $.fn.modal.Constructor.prototype.enforceFocus = function () { @@ -73,6 +82,11 @@ function openModal(title, href) { } } +/** + * + * @param event + * @param link + */ function openLink(event, link) { if (event.ctrlKey) { window.open(link); @@ -103,7 +117,9 @@ function getUrlVars() { }); } -// Data e ora (orologio) +/** + * Data e ora (orologio) + */ function clock() { $('#datetime').html(moment().formatPHP(globals.timestamp_format)); setTimeout('clock()', 1000); @@ -143,33 +159,6 @@ function session_keep_alive() { $.get(globals.rootdir + '/core.php'); } -/** - * Funzione per gestire i contatori testuali nel formato x/total. - * Viene dato un id del campo da verificare come input, viene letto il testo nella forma [0-9]/[0-9] e viene fatto - * il replate del primo numero in base a quanti elementi sono stati trovati (valore passato per parametro) - */ -function update_counter(id, new_value) { - new_text = $('#' + id).html(); - - // Estraggo parte numerica (formato x/total) - pattern = /([^0-9]+)([0-9]+)\/([0-9]+)([^0-9]+)/; - new_text = new_text.replace(pattern, "$1" + new_value + "/$3$4"); - - // Estraggo totale (parte numerica dopo lo slash /) - matches = pattern.exec(new_text); - total = matches[3]; - - $('#' + id).html(new_text); - - if (new_value == total) { - $('#' + id).removeClass('btn-warning').removeClass('btn-danger').addClass('btn-success'); - } else if (new_value == 0) { - $('#' + id).removeClass('btn-warning').removeClass('btn-success').addClass('btn-danger'); - } else { - $('#' + id).removeClass('btn-success').removeClass('btn-danger').addClass('btn-warning'); - } -} - function setContrast(backgroundcolor) { var rgb = []; var bg = String(backgroundcolor); @@ -237,9 +226,7 @@ function message(element) { confirmButtonText: button, confirmButtonClass: btn_class, onOpen: function () { - start_superselect(); - start_inputmask(); - start_datepickers(); + restart_inputs(); }, preConfirm: function () { $form = $('#swal-form'); @@ -468,8 +455,10 @@ function prepareForm(form) { } } +/** + * Visualizzazione dei messaggi attivi tramite toastr. + */ function renderMessages() { - // Visualizzazione messaggi $.ajax({ url: globals.rootdir + '/ajax.php', type: 'get', @@ -522,14 +511,17 @@ function restart_inputs() { start_datepickers(); start_inputmask(); + initNumbers(); start_superselect(); // Autosize per le textarea autosize($('.autosize')); } +/** + * Messaggio di avviso salvataggio a comparsa sulla destra solo nella versione a desktop intero + */ function alertPush() { - // Messaggio di avviso salvataggio a comparsa sulla destra solo nella versione a desktop intero if ($(window).width() > 1023) { var i = 0; @@ -559,6 +551,13 @@ function alertPush() { }); } +/** + * + * @param button + * @param form + * @param data + * @returns {Promise} + */ function salvaForm(button, form, data = {}) { return new Promise(function (resolve, reject) { // Caricamento visibile nel pulsante diff --git a/assets/src/js/functions/numbers.js b/assets/src/js/functions/numbers.js new file mode 100644 index 000000000..2b0d3371b --- /dev/null +++ b/assets/src/js/functions/numbers.js @@ -0,0 +1,59 @@ +/* + * OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione + * Copyright (C) DevCode s.n.c. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * Funzione per inizializzare i campi di input numerici per la gestione integrata del formato impostato per il gestionale. + */ +function initNumbers() { + let inputs = $('.decimal-number').not('.bound'); + + for (const input of inputs) { + let $input = $(input); + + if (AutoNumeric.isManagedByAutoNumeric(input)) { + continue; + } + + let min = $input.attr('min-value') && $input.attr('min-value') !== "undefined" ? $input.attr('min-value') : null; + let max = $input.attr('max-value') && $input.attr('max-value') !== "undefined" ? $input.attr('max-value') : null; + + let decimals = $input.attr('decimals') ? $input.attr('decimals') : globals.cifre_decimali; + + let autonumeric = new AutoNumeric(input, { + caretPositionOnFocus: "decimalLeft", + allowDecimalPadding: true, + currencySymbolPlacement: "s", + negativePositiveSignPlacement: "p", + decimalCharacter: globals.decimals, + decimalCharacterAlternative: ".", + digitGroupSeparator: globals.thousands, + emptyInputBehavior: min ? min : "zero", + overrideMinMaxLimits: "ignore", + modifyValueOnWheel: false, + outputFormat: "string", + unformatOnSubmit: true, + watchExternalChanges: true, + minimumValue: min ? min : "-10000000000000", + maximumValue: max ? max : "10000000000000", + decimalPlaces: decimals, + }); + + $input.data("autonumeric", autonumeric) + .addClass('bound'); + } +} diff --git a/assets/src/js/functions/prototypes.js b/assets/src/js/functions/prototypes.js index 85390394f..1e91e7c97 100755 --- a/assets/src/js/functions/prototypes.js +++ b/assets/src/js/functions/prototypes.js @@ -39,6 +39,6 @@ Number.prototype.toLocale = function () { jQuery.fn.scrollTo = function (elem, speed) { $(this).animate({ scrollTop: $(this).scrollTop() - $(this).offset().top + $(elem).offset().top - }, speed == undefined ? 1000 : speed); + }, speed === undefined ? 1000 : speed); return this; }; diff --git a/assets/src/js/functions/select.js b/assets/src/js/functions/select.js index 7be6e6ae0..fde237def 100755 --- a/assets/src/js/functions/select.js +++ b/assets/src/js/functions/select.js @@ -118,6 +118,7 @@ function selectBackground(data, container) { return data.text; } + /** * Reimposta i contenuti di un diff --git a/include/common/importa.php b/include/common/importa.php index 4b848b476..2816900d4 100755 --- a/include/common/importa.php +++ b/include/common/importa.php @@ -42,7 +42,7 @@ if (empty($righe)) { return; } -$link = !empty($documento_finale) ? ROOTDIR.'/editor.php?id_module='.$final_module['id'].'&id_record='.$documento_finale->id : ROOTDIR.'/controller.php?id_module='.$final_module['id']; +$link = !empty($documento_finale) ? base_path().'/editor.php?id_module='.$final_module['id'].'&id_record='.$documento_finale->id : base_path().'/controller.php?id_module='.$final_module['id']; echo '
@@ -246,64 +246,69 @@ echo ' - - - - - '; + + + + + + '; if (!empty($options['serials'])) { echo ' - '; + '; } echo ' - '; + + + '; foreach ($righe as $i => $riga) { // Descrizione echo ' - - + '; + '; // Q.tà rimanente echo ' - '; + '; // Q.tà da evadere echo ' - '; + '; echo ' - '; + '.numberFormat($riga->totale_imponibile).' + '.numberFormat($riga->iva).' + '; // Seriali if (!empty($options['serials'])) { echo ' - '; + '; } echo ' - '; + '; } // Totale echo ' + +
'.tr('Descrizione').''.tr('Q.tà').''.tr('Q.tà da evadere').''.tr('Subtot.').'
'.tr('Descrizione').''.tr('Q.tà').''.tr('Q.tà da evadere').''.tr('Subtot.').''.tr('Seriali').''.tr('Seriali').'
- - - - '; +
+ + + + + + '; // Checkbox - da evadere? echo ' - '; + '; $descrizione = ($riga->isArticolo() ? $riga->articolo->codice.' - ' : '').$riga['descrizione']; echo ' '.nl2br($descrizione); echo ' - - '.numberFormat($riga['qta_rimanente']).' - + '.numberFormat($riga['qta_rimanente']).' + - {[ "type": "number", "name": "qta_da_evadere['.$riga['id'].']", "id": "qta_'.$i.'", "required": 1, "value": "'.$riga['qta_rimanente'].'", "decimals": "qta", "min-value": "0", "extra": "'.(($riga['is_descrizione']) ? 'readonly' : '').' onkeyup=\"ricalcola_subtotale_riga('.$i.');\"" ]} - + {[ "type": "number", "name": "qta_da_evadere['.$riga['id'].']", "id": "qta_'.$i.'", "required": 1, "value": "'.$riga['qta_rimanente'].'", "decimals": "qta", "min-value": "0", "extra": "'.(($riga['is_descrizione']) ? 'readonly' : '').' onkeyup=\"ricalcolaTotaleRiga('.$i.');\"" ]} + - '.moneyFormat($riga->totale).'
+
+ '.moneyFormat($riga->totale).'
- '.numberFormat($riga->totale_imponibile).' + '.numberFormat($riga->iva).' -
'; + '; if (!empty($riga['abilita_serial'])) { $serials = $riga->serials; @@ -318,7 +323,7 @@ foreach ($righe as $i => $riga) { if (!empty($serials)) { echo ' - {[ "type": "select", "name": "serial['.$riga['id'].'][]", "id": "serial_'.$i.'", "multiple": 1, "values": '.json_encode($list).', "value": "'.implode(',', $serials).'", "extra": "data-maximum=\"'.intval($riga['qta_rimanente']).'\"" ]}'; + {[ "type": "select", "name": "serial['.$riga['id'].'][]", "id": "serial_'.$i.'", "multiple": 1, "values": '.json_encode($list).', "value": "'.implode(',', $serials).'", "extra": "data-maximum=\"'.intval($riga['qta_rimanente']).'\"" ]}'; } } @@ -327,15 +332,17 @@ foreach ($righe as $i => $riga) { } echo ' -
'.tr('Totale').': @@ -347,6 +354,22 @@ echo '
'; +echo ' +'; + echo ' @@ -362,95 +385,160 @@ echo ' echo ' '; -?> - +echo ' +ricalcolaTotale(); +'; diff --git a/include/common/riga.php b/include/common/riga.php index 607b0cef4..786019cb3 100755 --- a/include/common/riga.php +++ b/include/common/riga.php @@ -33,7 +33,7 @@ echo ' // Quantità echo '
- {[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$result['qta'].'", "decimals": "qta"'.(isset($result['max_qta']) ? ', "icon-after": "/ '.numberFormat($result['max_qta'], 'qta').' "' : '').', "min-value": "'.Translator::numberToLocale($result['qta_evasa']).'" ]} + {[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$result['qta'].'", "decimals": "qta"'.(isset($result['max_qta']) ? ', "icon-after": "/ '.numberFormat($result['max_qta'], 'qta').' "' : '').', "min-value": "'.$result['qta_evasa'].'" ]}
'; // Unità di misura diff --git a/include/common/sconto.php b/include/common/sconto.php index a546f0b1b..fdef0ab6f 100755 --- a/include/common/sconto.php +++ b/include/common/sconto.php @@ -23,65 +23,68 @@ echo App::internalLoad('descrizione.php', $result, $options); // Conti, rivalsa INPS e ritenuta d'acconto echo App::internalLoad('conti.php', $result, $options); +$incorpora_iva = $options['dir'] == 'entrata' && setting('Utilizza prezzi di vendita comprensivi di IVA'); + // Sconto percentuale echo ' -
'; +
'; if ($options['action'] == 'add') { echo ' -
- {[ "type": "number", "label": "'.tr('Sconto/maggiorazione percentuale').'", "name": "sconto_percentuale", "icon-after": "%", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]} -
'; +
+ {[ "type": "number", "label": "'.tr('Sconto/maggiorazione percentuale').'", "name": "sconto_percentuale", "icon-after": "%", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]} +
'; } // Sconto unitario echo ' -
- {[ "type": "number", "label": "'.tr('Sconto/maggiorazione unitario').'", "name": "sconto_unitario", "value": "'.$result['sconto_unitario'].'", "icon-after": "'.currency().'", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]} -
'; +
+ {[ "type": "number", "label": "'.tr('Sconto/maggiorazione unitario').'", "name": "sconto_unitario", "value": "'.$result['sconto_unitario_corrente'].'", "icon-after": "'.currency().'", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]} +
'; // Iva echo ' -
- {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$result['idiva'].'", "ajax-source": "iva" ]} -
-
'; +
+ {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$result['idiva'].'", "ajax-source": "iva" ]} +
+
'; -// Funzione per l'aggiornamento in tempo reale del guadagno +// Funzione per l'aggiornamento in tempo reale dello sconto +$totale_documento = $incorpora_iva ? $options['totale_documento'] : $options['totale_imponibile_documento']; echo ' - '; + sconto_percentuale.keyup(aggiorna_sconto_percentuale); + sconto_unitario.keyup(aggiorna_sconto_unitario); +'; diff --git a/include/init/configuration.php b/include/init/configuration.php index 094384845..2abbd4d6c 100755 --- a/include/init/configuration.php +++ b/include/init/configuration.php @@ -115,7 +115,7 @@ if (post('db_host') !== null) { // Creazione della configurazione if ($dbo->isConnected()) { - $new_config = file_get_contents(DOCROOT.'/config.example.php'); + $new_config = file_get_contents(base_dir().'/config.example.php'); $decimals = post('decimal_separator'); $thousands = post('thousand_separator'); @@ -149,14 +149,14 @@ if (post('db_host') !== null) {

'.tr('Sembra che non ci siano i permessi di scrittura sul file _FILE_', [ '_FILE_' => 'config.inc.php', ]).'

- +
;
- '.tr('Torna indietro').' + '.tr('Torna indietro').'

@@ -184,9 +184,9 @@ if (post('db_host') !== null) { "dir" : "ltr", "lang" : "it-IT", "name" : "OpenSTAManager", - "scope" : "'.ROOTDIR.'", + "scope" : "'.base_path().'", "display" : "fullscreen", - "start_url" : "'.ROOTDIR.'", + "start_url" : "'.base_path().'", "short_name" : "OSM", "theme_color" : "transparent", "description" : "OpenSTAManager", @@ -203,7 +203,7 @@ if (post('db_host') !== null) { }'; file_put_contents('manifest.json', $manifest); - redirect(ROOTDIR.'/index.php'); + redirect(base_path().'/index.php'); exit(); } } @@ -219,7 +219,7 @@ if ((file_exists('config.inc.php') || $valid_config) && !$dbo->isConnected()) {

'.tr("Si è verificato un'errore durante la connessione al database").'.

'.tr('Controllare di aver inserito correttamente i dati di accesso, e che il database atto ad ospitare i dati del gestionale sia esistente').'.

- '.tr('Riprova').' + '.tr('Riprova').'
'; } @@ -240,7 +240,7 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) { '_FILE_' => 'config.inc.php', ]).'.

'.tr("Nel caso il problema persista, rivolgersi all'assistenza ufficiale").'.

- '.tr('Riprova').' + '.tr('Riprova').' '; } @@ -295,7 +295,7 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) { $("#test").prop("disabled", true); $("#install").prop("disabled", true); $(this).closest("form").ajaxSubmit({ - url: "'.$rootdir.'/index.php", + url: "'.base_path().'/index.php", data: { test: 1, }, diff --git a/include/init/init.php b/include/init/init.php index 6eb2937a8..e1226ca73 100755 --- a/include/init/init.php +++ b/include/init/init.php @@ -66,7 +66,7 @@ if (post('action') == 'init') { if (!$has_azienda) { Filter::set('post', 'op', 'add'); $id_module = Modules::get('Anagrafiche')['id']; - include DOCROOT.'/modules/anagrafiche/actions.php'; + include base_dir().'/modules/anagrafiche/actions.php'; // Logo stampe if (!empty($_FILES) && !empty($_FILES['blob']['name'])) { @@ -114,7 +114,7 @@ if (post('action') == 'init') { } } - redirect(ROOTDIR, 'js'); + redirect(base_path(), 'js'); exit(); } @@ -143,15 +143,15 @@ if (!$has_user) {
- {[ "type": "text", "label": "'.tr('Username').'", "name": "admin_username", "value": "'.$osm_password.'", "placeholder": "'.tr("Digita l'username dell'amministratore").'", "required": 1 ]} + {[ "type": "text", "label": "'.tr('Username').'", "name": "admin_username", "value": "", "placeholder": "'.tr("Digita l'username dell'amministratore").'", "required": 1 ]}
- {[ "type": "password", "label": "'.tr('Password').'", "id": "password", "name": "admin_password", "value": "'.$osm_password.'", "placeholder": "'.tr("Digita la password dell'amministratore").'", "required": 1, "strength": "#config" ]} + {[ "type": "password", "label": "'.tr('Password').'", "id": "password", "name": "admin_password", "value": "", "placeholder": "'.tr("Digita la password dell'amministratore").'", "required": 1, "strength": "#config" ]}
- {[ "type": "email", "label": "'.tr('Email').'", "name": "admin_email", "value": "'.$osm_email.'", "placeholder": "'.tr("Digita l'indirizzo email dell'amministratore").'", "required": 1 ]} + {[ "type": "email", "label": "'.tr('Email').'", "name": "admin_email", "value": "", "placeholder": "'.tr("Digita l'indirizzo email dell'amministratore").'", "required": 1 ]}
@@ -172,7 +172,7 @@ if (!$has_azienda) { $readonly_tipo = true; ob_start(); - include DOCROOT.'/modules/anagrafiche/add.php'; + include base_dir().'/modules/anagrafiche/add.php'; $anagrafica = ob_get_clean(); echo str_replace('', '', $anagrafica); @@ -258,7 +258,7 @@ echo ' $("button[type=submit]").not("#config").remove(); }); - + '; include_once App::filepath('include|custom|', 'bottom.php'); diff --git a/include/init/requirements.php b/include/init/requirements.php index 8498da7ec..b1ed7dff2 100755 --- a/include/init/requirements.php +++ b/include/init/requirements.php @@ -145,7 +145,7 @@ $dirs = [ $directories = []; foreach ($dirs as $name => $description) { - $status = is_writable($docroot.DIRECTORY_SEPARATOR.$name); + $status = is_writable(base_dir().DIRECTORY_SEPARATOR.$name); $directories[] = [ 'name' => $name, diff --git a/include/init/update.php b/include/init/update.php index 37e9ebd5e..8462feda0 100755 --- a/include/init/update.php +++ b/include/init/update.php @@ -104,7 +104,7 @@ if (filter('action') == 'do_update') { } echo ' - + '.tr('Continua').' '; } @@ -125,7 +125,7 @@ if (filter('action') == 'do_update') {

'.tr("E' attualmente in corso la procedura di aggiornamento del software, e pertanto siete pregati di attendere fino alla sua conclusione").'.

'.tr("Nel caso il problema persista, rivolgersi all'amministratore o all'assistenza ufficiale").'.

- '.tr('Riprova').' + '.tr('Riprova').'
'; @@ -202,7 +202,7 @@ if (filter('action') == 'do_update') { foreach ($updates as $update) { if ($update['sql'] && (!empty($update['done']) || is_null($update['done']))) { - $queries = readSQLFile(DOCROOT.$update['directory'].$update['filename'].'.sql', ';'); + $queries = readSQLFile(base_dir().$update['directory'].$update['filename'].'.sql', ';'); $total += count($queries); if (intval($update['done']) > 1) { diff --git a/include/manager.php b/include/manager.php index d5075fdce..038bd776b 100755 --- a/include/manager.php +++ b/include/manager.php @@ -176,7 +176,7 @@ if (!empty($type) && $type != 'menu' && $type != 'custom') { foreach ($bulk as $key => $value) { $text = is_array($value) ? $value['text'] : $value; - $data = is_array($value) ? $value['data'] : []; + $data = is_array($value['data']) ? $value['data'] : []; $extra = []; foreach ($data as $k => $v) { $extra[] = 'data-'.$k.'="'.prepareToField(\HTMLBuilder\HTMLBuilder::replace($v)).'"'; diff --git a/include/riferimenti/riferimenti.php b/include/riferimenti/riferimenti.php index 24077c153..d0150ce5d 100644 --- a/include/riferimenti/riferimenti.php +++ b/include/riferimenti/riferimenti.php @@ -48,7 +48,7 @@ echo ' '; $documenti_disponibili = collect(); -$direzione_richiesta = $source->parent->direzione == 'entrata' ? 'uscita' : 'entrata'; +$direzione_richiesta = $source->getDocument()->direzione == 'entrata' ? 'uscita' : 'entrata'; // Individuazione DDT disponibili $ddt = DDT::whereHas('stato', function ($query) { diff --git a/include/riferimenti/righe_riferimenti.php b/include/riferimenti/righe_riferimenti.php index 35cd9bd63..6ba5ea477 100644 --- a/include/riferimenti/righe_riferimenti.php +++ b/include/riferimenti/righe_riferimenti.php @@ -55,7 +55,7 @@ if (!$riferimenti->isEmpty()) { '.$riferimento->target->descrizione.'
- '.reference($riferimento->target->parent).' + '.reference($riferimento->target->getDocument()).' '; diff --git a/include/top.php b/include/top.php index c072e5b0c..6a15baa6e 100755 --- a/include/top.php +++ b/include/top.php @@ -38,9 +38,9 @@ echo ' '; -if (file_exists(DOCROOT.'/manifest.json')) { +if (file_exists(base_dir().'/manifest.json')) { echo ' - '; + '; } // CSS @@ -166,7 +166,7 @@ if (Auth::check()) { }, }; globals = { - rootdir: "'.$rootdir.'", + rootdir: "'.base_path().'", js: "'.$paths['js'].'", css: "'.$paths['css'].'", img: "'.$paths['img'].'", @@ -209,7 +209,7 @@ if (Auth::check()) { echo ' diff --git a/modules/articoli/plugins/articoli.movimenti.php b/modules/articoli/plugins/articoli.movimenti.php index c810c32a0..cfaeaffe5 100755 --- a/modules/articoli/plugins/articoli.movimenti.php +++ b/modules/articoli/plugins/articoli.movimenti.php @@ -27,20 +27,20 @@ echo '
'; if (empty($_GET['movimentazione_completa'])) { echo ' - + '.tr('Mostra tutti i movimenti').' '; } else { echo ' - + '.tr('Mostra gli ultimi 20 movimenti').' '; } echo ' - + '.tr('Visualizza dettagli').' '; diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index a073f0e3b..0ff907f31 100755 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -19,7 +19,8 @@ namespace Modules\Articoli; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Modules; use Modules\Interventi\Components\Articolo as ArticoloIntervento; @@ -30,6 +31,7 @@ use Uploads; class Articolo extends Model { + use SimpleModelTrait; use SoftDeletes; use RecordTrait; @@ -41,7 +43,7 @@ class Articolo extends Model public static function build($codice, $nome, Categoria $categoria = null, Categoria $sottocategoria = null) { - $model = parent::build(); + $model = new static(); $model->codice = $codice; $model->descrizione = $nome; @@ -160,7 +162,7 @@ class Articolo extends Model $image = $directory.$this->immagine; $image_thumbnail = $directory.$fileinfo['filename'].'_thumb600.'.$fileinfo['extension']; - $url = file_exists(DOCROOT.$image_thumbnail) ? ROOTDIR.$image_thumbnail : ROOTDIR.$image; + $url = file_exists(base_dir().$image_thumbnail) ? base_path().$image_thumbnail : base_path().$image; return $url; } diff --git a/modules/articoli/src/Categoria.php b/modules/articoli/src/Categoria.php index acb5cb735..c3c82b430 100755 --- a/modules/articoli/src/Categoria.php +++ b/modules/articoli/src/Categoria.php @@ -19,11 +19,13 @@ namespace Modules\Articoli; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Traits\HierarchyTrait; class Categoria extends Model { + use SimpleModelTrait; use HierarchyTrait; protected $table = 'mg_categorie'; @@ -31,7 +33,7 @@ class Categoria extends Model public static function build($nome) { - $model = parent::build(); + $model = new static(); $model->nome = $nome; $model->save(); diff --git a/modules/articoli/src/Movimento.php b/modules/articoli/src/Movimento.php index 184c9b1bb..0c8ecdc9a 100755 --- a/modules/articoli/src/Movimento.php +++ b/modules/articoli/src/Movimento.php @@ -19,9 +19,10 @@ namespace Modules\Articoli; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; -/** +/* * Classe dedicata alla gestione dei movimenti di magazzino degli articoli. * * Alcuni appunti sull'utilizzo dei campi *idsede_azienda* e *idsede_controparte* @@ -32,12 +33,14 @@ use Common\Model; */ class Movimento extends Model { + use SimpleModelTrait; + protected $document; protected $table = 'mg_movimenti'; public static function build(Articolo $articolo, $qta, $descrizone, $data, $document = null) { - $model = parent::build(); + $model = new static(); $model->articolo()->associate($articolo); diff --git a/modules/articoli/widgets/stampa_inventario.php b/modules/articoli/widgets/stampa_inventario.php index b67187cc6..4be08cef1 100755 --- a/modules/articoli/widgets/stampa_inventario.php +++ b/modules/articoli/widgets/stampa_inventario.php @@ -23,7 +23,7 @@ include_once __DIR__.'/../../../core.php'; $id_print = $dbo->fetchOne('SELECT zz_prints.id FROM zz_prints INNER JOIN zz_modules ON zz_prints.id_module=zz_modules.id WHERE zz_modules.name="Articoli" AND zz_prints.name="Inventario magazzino"')['id']; echo ' -
+
diff --git a/modules/backups/edit.php b/modules/backups/edit.php index 82159d35f..ad21f1787 100755 --- a/modules/backups/edit.php +++ b/modules/backups/edit.php @@ -50,7 +50,7 @@ if (!is_writable($backup_dir) || !is_readable($backup_dir)) { echo '

'.tr('Il backup è molto importante perché permette di creare una copia della propria installazione e relativi dati per poterla poi ripristinare in seguito a errori, cancellazioni accidentali o guasti hardware').'.

'; -if (starts_with($backup_dir, DOCROOT)) { +if (starts_with($backup_dir, base_dir())) { echo '
'.tr('Per motivi di sicurezza si consiglia di modificare il percorso della cartella di backup al di fuori della cartella di OSM, possibilmente in una unità esterna').'. @@ -212,7 +212,7 @@ if (file_exists($backup_dir)) { loadSize("'.$id.'", "c-'.$id.'"); - '.tr('Scarica').' + '.tr('Scarica').'
diff --git a/modules/banche/actions.php b/modules/banche/actions.php index 0b5b4c39d..db8c19f65 100755 --- a/modules/banche/actions.php +++ b/modules/banche/actions.php @@ -17,59 +17,58 @@ * along with this program. If not, see . */ +use Modules\Anagrafiche\Anagrafica; +use Modules\Banche\Banca; + include_once __DIR__.'/../../core.php'; switch (filter('op')) { - case 'update': + case 'add': + $id_anagrafica = filter('id_anagrafica'); + $anagrafica = Anagrafica::find($id_anagrafica); + $nome = filter('nome'); + $iban = filter('iban'); + $bic = filter('bic'); - if (isset($nome)) { - $array = [ - 'nome' => $nome, - 'filiale' => post('filiale'), - 'iban' => post('iban'), - 'bic' => post('bic'), - 'id_pianodeiconti3' => post('id_pianodeiconti3'), - 'note' => post('note'), - ]; + $banca = Banca::build($anagrafica, $nome, $iban, $bic); + $id_record = $banca->id; - if (!empty($id_record)) { - $dbo->update('co_banche', $array, ['id' => $id_record]); - } - - flash()->info(tr('Salvataggio completato.')); - } else { - flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio!')); + if (isAjaxRequest()) { + echo json_encode([ + 'id' => $id_record, + 'text' => $nome, + ]); } + flash()->info(tr('Aggiunta nuova _TYPE_', [ + '_TYPE_' => 'banca', + ])); + break; - case 'add': + case 'update': $nome = filter('nome'); - $bic = filter('bic'); - $iban = filter('iban'); - if (isset($nome)) { - $dbo->query('INSERT INTO `co_banche` (`nome`, `bic`, `iban`) VALUES ('.prepare($nome).', '.prepare($bic).', '.prepare($iban).')'); - $id_record = $dbo->lastInsertedID(); + $banca->nome = post('nome'); + $banca->iban = post('iban'); + $banca->bic = post('bic'); - if (isAjaxRequest()) { - echo json_encode(['id' => $id_record, 'text' => $nome]); - } + $banca->note = post('note'); + $banca->id_pianodeiconti3 = post('id_pianodeiconti3'); + $banca->filiale = post('filiale'); + $banca->creditor_id = post('creditor_id'); - flash()->info(tr('Aggiunta nuova _TYPE_', [ - '_TYPE_' => 'banca', - ])); - } else { - flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio!')); - } + $banca->predefined = post('predefined'); + + $banca->save(); + + flash()->info(tr('Salvataggio completato')); break; case 'delete': - $dbo->update('co_banche', [ - 'deleted_at' => date('Y-m-d H:i:s'), - ], ['id' => $id_record]); + $banca->delete(); flash()->info(tr('_TYPE_ eliminata con successo!', [ '_TYPE_' => 'Banca', diff --git a/modules/banche/add.php b/modules/banche/add.php index bba54d91a..c2486ab31 100755 --- a/modules/banche/add.php +++ b/modules/banche/add.php @@ -19,29 +19,38 @@ include_once __DIR__.'/../../core.php'; -?> +$id_anagrafica = filter('id_anagrafica'); + +echo ' +
-
- {[ "type": "text", "label": "", "name": "nome", "required": "1" ]} +
+ {[ "type": "select", "label": "'.tr('Anagrafica').'", "name": "id_anagrafica", "required": "1", "value": "$id_anagrafica$", "ajax-source": "anagrafiche", "value": "'.$id_anagrafica.'", "disabled": "'.intval(!empty($id_anagrafica)).'" ]} +
+ +
+ {[ "type": "text", "label": "'.tr('Nome').'", "name": "nome", "required": "1" ]}
- {[ "type": "text", "label": "", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]} + {[ "type": "text", "label": "'.tr('IBAN').'", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
- {[ "type": "text", "label": "", "name": "bic", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]} + {[ "type": "text", "label": "'.tr('BIC').'", "name": "bic", "required": "1", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]}
- +
- +'; diff --git a/modules/banche/ajax/select.php b/modules/banche/ajax/select.php new file mode 100644 index 000000000..162bf5582 --- /dev/null +++ b/modules/banche/ajax/select.php @@ -0,0 +1,47 @@ +. + */ + +include_once __DIR__.'/../../../core.php'; + +switch ($resource) { + /* + * Opzioni utilizzate: + * - id_anagrafica + */ + case 'banche': + $query = "SELECT id, CONCAT (nome, ' - ' , iban) AS descrizione FROM co_banche |where| ORDER BY nome"; + + foreach ($elements as $element) { + $filter[] = 'id = '.prepare($element); + } + + if (empty($filter)) { + $where[] = 'deleted_at IS NULL'; + } + + $where[] = 'id_anagrafica='.prepare($superselect['id_anagrafica']); + + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'filiale LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'iban LIKE '.prepare('%'.$search.'%'); + } + + break; +} diff --git a/modules/banche/edit.php b/modules/banche/edit.php index 817b26bd1..3dd00ba0d 100755 --- a/modules/banche/edit.php +++ b/modules/banche/edit.php @@ -20,7 +20,6 @@ include_once __DIR__.'/../../core.php'; ?>
- @@ -32,24 +31,43 @@ include_once __DIR__.'/../../core.php';
-
- {[ "type": "text", "label": "", "name": "nome", "required": "1", "value": "$nome$" ]} +
+ {[ "type": "select", "label": "", "name": "id_anagrafica", "required": "1", "value": "$id_anagrafica$", "ajax-source": "anagrafiche", "disabled": 1 ]}
-
+ +
+ {[ "type": "checkbox", "label": "", "name": "predefined", "value": "$predefined$", "disabled": "" ]} +
+ +
+ {[ "type": "text", "label": "", "name": "nome", "required": "1", "value": "$nome$" ]} +
+
+ +
+
{[ "type": "text", "label": "", "name": "filiale", "value": "$filiale$" ]}
-
+ +
{[ "type": "select", "label": "", "name": "id_pianodeiconti3", "value": "$id_pianodeiconti3$", "values": "query=SELECT id, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2 = 1" ]}
+
{[ "type": "text", "label": "", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
+
- {[ "type": "text", "label": "", "name": "bic", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]} + {[ "type": "text", "label": "", "name": "bic", "required": "1", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]} +
+ +
+ {[ "type": "text", "label": "", "name": "creditor_id", "class": "alphanumeric-mask", "value": "$creditor_id$", "help": "" ]}
+
{[ "type": "textarea", "label": "", "name": "note", "value": "$note$" ]} @@ -62,15 +80,15 @@ include_once __DIR__.'/../../core.php'; fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).' +$numero_documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).' UNION SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_acquisti='.prepare($id_record).' -UNION SELECT idanagrafica FROM co_documenti WHERE idbanca='.prepare($id_record)); +UNION SELECT idanagrafica FROM co_documenti WHERE id_banca_azienda = '.prepare($id_record).' OR id_banca_controparte = '.prepare($id_record)); -if (!empty($documenti)) { +if (!empty($numero_documenti)) { echo '
'.tr('Ci sono _NUM_ documenti collegati', [ - '_NUM_' => count($documenti), + '_NUM_' => $numero_documenti, ]).'.
'; } diff --git a/modules/banche/init.php b/modules/banche/init.php index 4ce12505a..7a09fa655 100755 --- a/modules/banche/init.php +++ b/modules/banche/init.php @@ -17,8 +17,14 @@ * along with this program. If not, see . */ +use Modules\Banche\Banca; + include_once __DIR__.'/../../core.php'; if (isset($id_record)) { - $record = $dbo->fetchOne('SELECT * FROM `co_banche` WHERE id='.prepare($id_record)); + $banca = Banca::find($id_record); + + if (!empty($banca)) { + $record = $banca->toArray(); + } } diff --git a/modules/banche/src/Banca.php b/modules/banche/src/Banca.php new file mode 100644 index 000000000..ce5bf8d51 --- /dev/null +++ b/modules/banche/src/Banca.php @@ -0,0 +1,93 @@ +. + */ + +namespace Modules\Banche; + +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; +use Modules\Anagrafiche\Anagrafica; + +class Banca extends Model +{ + use SimpleModelTrait; + use SoftDeletes; + + protected $table = 'co_banche'; + + /** + * Crea una nuovo banca. + * + * @param string $nome + * @param string $iban + * @param string $bic + * + * @return self + */ + public static function build(Anagrafica $anagrafica, $nome, $iban, $bic) + { + $model = new static(); + + // Informazioni di base + $model->anagrafica()->associate($anagrafica); + $model->nome = $nome; + $model->iban = $iban; + $model->bic = $bic; + + // Salvataggio delle informazioni + $model->save(); + + return $model; + } + + public function anagrafica() + { + return $this->belongsTo(Anagrafica::class, 'id_anagrafica'); + } + + public function save(array $options = []) + { + $this->fixPredefined(); + + return parent::save($options); + } + + protected function fixPredefined() + { + $predefined = isset($this->predefined) ? $this->predefined : false; + + // Selezione automatica per primo record + $count = self::where('id_anagrafica', $this->id_anagrafica) + ->where('id', '!=', $this->id) + ->count(); + if (empty($predefined) && empty($count)) { + $predefined = true; + } + + if (!empty($predefined)) { + self::where('id_anagrafica', $this->id_anagrafica) + ->where('id', '!=', $this->id) + ->update([ + 'predefined' => 0, + ]); + + $this->attributes['predefined'] = $predefined; + } + } +} diff --git a/modules/beni/edit.php b/modules/beni/edit.php index 091c38949..10b4112a6 100755 --- a/modules/beni/edit.php +++ b/modules/beni/edit.php @@ -43,15 +43,15 @@ include_once __DIR__.'/../../core.php'; fetchNum('SELECT id FROM dt_ddt WHERE idaspettobeni='.prepare($id_record).' +$numero_documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idaspettobeni='.prepare($id_record).' UNION SELECT id FROM co_documenti WHERE idaspettobeni='.prepare($id_record)); -if (!empty($documenti)) { +if (!empty($numero_documenti)) { echo '
'.tr('Ci sono _NUM_ documenti collegati', [ - '_NUM_' => count($documenti), + '_NUM_' => $numero_documenti, ]).'.
'; } diff --git a/modules/categorie_articoli/add.php b/modules/categorie_articoli/add.php index baa56e1ea..621ce50e7 100755 --- a/modules/categorie_articoli/add.php +++ b/modules/categorie_articoli/add.php @@ -27,7 +27,7 @@ if (isset($id_record)) { ?>

@@ -72,7 +72,7 @@ include_once __DIR__.'/../../core.php'; - +
diff --git a/modules/categorie_articoli/row-list.php b/modules/categorie_articoli/row-list.php index 3d67c8ca8..473c79e20 100755 --- a/modules/categorie_articoli/row-list.php +++ b/modules/categorie_articoli/row-list.php @@ -29,7 +29,7 @@ foreach ($subcategorie as $sub) { '.$sub['colore'].' '.$sub['nota'].' - + diff --git a/modules/categorie_documenti/src/Categoria.php b/modules/categorie_documenti/src/Categoria.php index f3e8182ee..db9c55f27 100755 --- a/modules/categorie_documenti/src/Categoria.php +++ b/modules/categorie_documenti/src/Categoria.php @@ -19,18 +19,20 @@ namespace Modules\CategorieDocumentali; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Categoria extends Model { + use SimpleModelTrait; use SoftDeletes; protected $table = 'do_categorie'; public static function build($descrizione) { - $model = parent::build(); + $model = new static(); $model->descrizione = $descrizione; $model->save(); diff --git a/modules/causali/edit.php b/modules/causali/edit.php index 9bdb8cb1e..a4929d068 100755 --- a/modules/causali/edit.php +++ b/modules/causali/edit.php @@ -54,14 +54,14 @@ include_once __DIR__.'/../../core.php'; fetchNum('SELECT id FROM dt_ddt WHERE idcausalet='.prepare($id_record).' +$numero_documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idcausalet='.prepare($id_record).' UNION SELECT id FROM co_documenti WHERE idcausalet='.prepare($id_record)); -if (!empty($documenti)) { +if (!empty($numero_documenti)) { echo '
'.tr('Ci sono _NUM_ documenti collegati', [ - '_NUM_' => count($documenti), + '_NUM_' => $numero_documenti, ]).'.
'; } diff --git a/modules/checklists/src/Check.php b/modules/checklists/src/Check.php index 48d28b878..53468d796 100755 --- a/modules/checklists/src/Check.php +++ b/modules/checklists/src/Check.php @@ -19,7 +19,8 @@ namespace Modules\Checklists; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Models\Group; use Models\Module; use Models\Plugin; @@ -29,6 +30,7 @@ use Traits\HierarchyTrait; class Check extends Model { + use SimpleModelTrait; use HierarchyTrait; protected static $parent_identifier = 'id_parent'; @@ -46,7 +48,7 @@ class Check extends Model */ public static function build(User $user, $structure, $id_record, $content, $parent_id = null) { - $model = parent::build(); + $model = new static(); $model->user()->associate($user); $model->id_parent = $parent_id; diff --git a/modules/checklists/src/Checklist.php b/modules/checklists/src/Checklist.php index 6195322d7..98522aa3d 100755 --- a/modules/checklists/src/Checklist.php +++ b/modules/checklists/src/Checklist.php @@ -19,13 +19,16 @@ namespace Modules\Checklists; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Models\Module; use Models\Plugin; use Models\User; class Checklist extends Model { + use SimpleModelTrait; + protected $table = 'zz_checklists'; /** @@ -37,7 +40,7 @@ class Checklist extends Model */ public static function build($nome) { - $model = parent::build(); + $model = new static(); $model->name = $nome; $model->save(); diff --git a/modules/checklists/src/ChecklistItem.php b/modules/checklists/src/ChecklistItem.php index f7bbc910d..9089c11e4 100755 --- a/modules/checklists/src/ChecklistItem.php +++ b/modules/checklists/src/ChecklistItem.php @@ -19,11 +19,13 @@ namespace Modules\Checklists; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Traits\HierarchyTrait; class ChecklistItem extends Model { + use SimpleModelTrait; use HierarchyTrait; protected static $parent_identifier = 'id_parent'; @@ -39,7 +41,7 @@ class ChecklistItem extends Model */ public static function build(Checklist $checklist, $contenuto, $id_parent = null) { - $model = parent::build(); + $model = new static(); $model->checklist()->associate($checklist); $model->id_parent = $id_parent; diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index 10a87b48a..9769a1f0c 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -121,7 +121,7 @@ switch (post('op')) { $righe = $contratto->getRighe(); foreach ($righe as $riga) { $new_riga = $riga->replicate(); - $new_riga->setParent($new); + $new_riga->setDocument($new); $new_riga->qta_evasa = 0; $new_riga->save(); @@ -205,10 +205,7 @@ switch (post('op')) { } $sconto->descrizione = post('descrizione'); - $sconto->id_iva = post('idiva'); - - $sconto->sconto_unitario = post('sconto_unitario'); - $sconto->tipo_sconto = 'UNT'; + $sconto->setScontoUnitario(post('sconto_unitario'), post('idiva')); $sconto->save(); diff --git a/modules/contratti/add_preventivo.php b/modules/contratti/add_preventivo.php index 179cc70cf..6ab4bdcb5 100644 --- a/modules/contratti/add_preventivo.php +++ b/modules/contratti/add_preventivo.php @@ -34,6 +34,7 @@ if (!empty($id_documento)) { 'button' => tr('Aggiungi'), 'documento' => $documento, 'documento_finale' => $documento_finale, + 'tipo_documento_finale' => Contratto::class, ]; echo App::load('importa.php', [], $options, true); diff --git a/modules/contratti/crea_documento.php b/modules/contratti/crea_documento.php index a6376a11e..578c7c5c1 100644 --- a/modules/contratti/crea_documento.php +++ b/modules/contratti/crea_documento.php @@ -20,8 +20,10 @@ include_once __DIR__.'/../../core.php'; use Modules\Contratti\Contratto; +use Modules\Fatture\Fattura; $documento = Contratto::find($id_record); +$tipo_documento_finale = Fattura::class; $options = [ 'op' => 'add_documento', @@ -30,6 +32,7 @@ $options = [ 'button' => tr('Aggiungi'), 'create_document' => true, 'documento' => $documento, + 'tipo_documento_finale' => $tipo_documento_finale, ]; echo App::load('importa.php', [], $options, true); diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index ad4af3fdc..b54e61c18 100755 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -237,7 +237,7 @@ if (!empty($rs)) { - @@ -289,7 +289,7 @@ if (!empty($rs)) { - diff --git a/modules/contratti/row-add.php b/modules/contratti/row-add.php index b10ca796d..1a99ac941 100755 --- a/modules/contratti/row-add.php +++ b/modules/contratti/row-add.php @@ -30,7 +30,8 @@ $options = [ 'action' => 'add', 'dir' => $documento->direzione, 'idanagrafica' => $documento['idanagrafica'], - 'totale_imponibile' => $documento->totale_imponibile, + 'totale_imponibile_documento' => $documento->totale_imponibile, + 'totale_documento' => $documento->totale, 'select-options' => [ 'articoli' => [ 'idanagrafica' => $documento->idanagrafica, diff --git a/modules/contratti/row-edit.php b/modules/contratti/row-edit.php index 74bb513ee..c4255e51e 100755 --- a/modules/contratti/row-edit.php +++ b/modules/contratti/row-edit.php @@ -30,7 +30,8 @@ $options = [ 'action' => 'edit', 'dir' => $documento->direzione, 'idanagrafica' => $documento['idanagrafica'], - 'totale_imponibile' => $documento->totale_imponibile, + 'totale_imponibile_documento' => $documento->totale_imponibile, + 'totale_documento' => $documento->totale, 'select-options' => [ 'articoli' => [ 'idanagrafica' => $documento->idanagrafica, diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php index c333f3bbd..6319d51d2 100755 --- a/modules/contratti/row-list.php +++ b/modules/contratti/row-list.php @@ -51,9 +51,9 @@ foreach ($righe as $riga) { '; // Aggiunta dei riferimenti ai documenti - if ($riga->hasOriginal()) { + if ($riga->hasOriginalComponent()) { echo ' - '.reference($riga->getOriginal()->parent, tr('Origine')).''; + '.reference($riga->getOriginalComponent()->getDocument(), tr('Origine')).''; } // Descrizione diff --git a/modules/contratti/src/Components/Articolo.php b/modules/contratti/src/Components/Articolo.php index f94871339..35a7b28cd 100755 --- a/modules/contratti/src/Components/Articolo.php +++ b/modules/contratti/src/Components/Articolo.php @@ -20,26 +20,10 @@ namespace Modules\Contratti\Components; use Common\Components\Article; -use Modules\Articoli\Articolo as Original; -use Modules\Contratti\Contratto; class Articolo extends Article { use RelationTrait; - public $movimenta_magazzino = false; - protected $table = 'co_righe_contratti'; - - /** - * Crea un nuovo articolo collegato ad un contratto. - * - * @return self - */ - public static function build(Contratto $contratto, Original $articolo) - { - $model = parent::build($contratto, $articolo); - - return $model; - } } diff --git a/modules/contratti/src/Components/Descrizione.php b/modules/contratti/src/Components/Descrizione.php index 70da05f11..4e4614f75 100755 --- a/modules/contratti/src/Components/Descrizione.php +++ b/modules/contratti/src/Components/Descrizione.php @@ -20,23 +20,10 @@ namespace Modules\Contratti\Components; use Common\Components\Description; -use Modules\Contratti\Contratto; class Descrizione extends Description { use RelationTrait; protected $table = 'co_righe_contratti'; - - /** - * Crea una nuova riga collegata ad un contratto. - * - * @return self - */ - public static function build(Contratto $contratto) - { - $model = parent::build($contratto); - - return $model; - } } diff --git a/modules/contratti/src/Components/RelationTrait.php b/modules/contratti/src/Components/RelationTrait.php index d9f44166d..a14497eae 100755 --- a/modules/contratti/src/Components/RelationTrait.php +++ b/modules/contratti/src/Components/RelationTrait.php @@ -23,18 +23,18 @@ use Modules\Contratti\Contratto; trait RelationTrait { - public function getParentID() + public function getDocumentID() { return 'idcontratto'; } - public function parent() + public function document() { - return $this->belongsTo(Contratto::class, $this->getParentID()); + return $this->belongsTo(Contratto::class, $this->getDocumentID()); } public function contratto() { - return $this->parent(); + return $this->document(); } } diff --git a/modules/contratti/src/Components/Riga.php b/modules/contratti/src/Components/Riga.php index 9734b254d..3553883ad 100755 --- a/modules/contratti/src/Components/Riga.php +++ b/modules/contratti/src/Components/Riga.php @@ -20,23 +20,10 @@ namespace Modules\Contratti\Components; use Common\Components\Row; -use Modules\Contratti\Contratto; class Riga extends Row { use RelationTrait; protected $table = 'co_righe_contratti'; - - /** - * Crea una nuova riga collegata ad un contratto. - * - * @return self - */ - public static function build(Contratto $contratto) - { - $model = parent::build($contratto); - - return $model; - } } diff --git a/modules/contratti/src/Components/Sconto.php b/modules/contratti/src/Components/Sconto.php index a40efa1c0..3b112031e 100755 --- a/modules/contratti/src/Components/Sconto.php +++ b/modules/contratti/src/Components/Sconto.php @@ -20,23 +20,10 @@ namespace Modules\Contratti\Components; use Common\Components\Discount; -use Modules\Contratti\Contratto; class Sconto extends Discount { use RelationTrait; protected $table = 'co_righe_contratti'; - - /** - * Crea un nuovo sconto collegato ad un contratto. - * - * @return self - */ - public static function build(Contratto $contratto) - { - $model = parent::build($contratto); - - return $model; - } } diff --git a/modules/contratti/src/Contratto.php b/modules/contratti/src/Contratto.php index 231967e0d..a97d36a53 100755 --- a/modules/contratti/src/Contratto.php +++ b/modules/contratti/src/Contratto.php @@ -21,7 +21,7 @@ namespace Modules\Contratti; use Carbon\Carbon; use Carbon\CarbonInterval; -use Common\Components\Description; +use Common\Components\Component; use Common\Document; use Modules\Anagrafiche\Anagrafica; use Modules\Interventi\Intervento; @@ -37,6 +37,11 @@ class Contratto extends Document use ReferenceTrait; use RecordTrait; + /** + * @var bool Disabilita movimentazione automatica + */ + public static $movimenta_magazzino = false; + protected $table = 'co_contratti'; /** @@ -58,7 +63,7 @@ class Contratto extends Document */ public static function build(Anagrafica $anagrafica, $nome) { - $model = parent::build(); + $model = new static(); $stato_documento = Stato::where('descrizione', 'Bozza')->first(); @@ -220,7 +225,7 @@ class Contratto extends Document * Effettua un controllo sui campi del documento. * Viene richiamato dalle modifiche alle righe del documento. */ - public function triggerEvasione(Description $trigger) + public function triggerEvasione(Component $trigger) { parent::triggerEvasione($trigger); diff --git a/modules/contratti/src/Stato.php b/modules/contratti/src/Stato.php index dcea1da30..8256cd693 100755 --- a/modules/contratti/src/Stato.php +++ b/modules/contratti/src/Stato.php @@ -19,10 +19,13 @@ namespace Modules\Contratti; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; class Stato extends Model { + use SimpleModelTrait; + protected $table = 'co_staticontratti'; public function preventivi() diff --git a/modules/dashboard/actions.php b/modules/dashboard/actions.php index 99049b018..abbf88edb 100755 --- a/modules/dashboard/actions.php +++ b/modules/dashboard/actions.php @@ -74,7 +74,7 @@ switch (filter('op')) { 'title' => 'Int. '.$sessione['codice'].' '.$sessione['cliente'].'
'.tr('Tecnici').': '.$sessione['nome_tecnico'].' '.(($sessione['have_attachments']) ? '' : ''), 'start' => $sessione['orario_inizio'], 'end' => $sessione['orario_fine'], - 'url' => ROOTDIR.'/editor.php?id_module='.$modulo_interventi->id.'&id_record='.$sessione['idintervento'], + 'url' => base_path().'/editor.php?id_module='.$modulo_interventi->id.'&id_record='.$sessione['idintervento'], 'backgroundColor' => $sessione['colore'], 'textColor' => color_inverse($sessione['colore']), 'borderColor' => ($sessione['colore_tecnico'] == '#FFFFFF') ? color_darken($sessione['colore_tecnico'], 100) : $sessione['colore_tecnico'], diff --git a/modules/dashboard/edit.php b/modules/dashboard/edit.php index 9b2d54a2a..5b8f8a547 100755 --- a/modules/dashboard/edit.php +++ b/modules/dashboard/edit.php @@ -31,10 +31,11 @@ echo '
- - @@ -265,11 +266,11 @@ elseif ($record['stato'] == 'Bozza') {
- {[ "type": "select", "label": "", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "extra": "onchange=\"$('#idbanca').val($(this).selectData().id_banca_).change(); \" " ]} + {[ "type": "select", "label": "", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "extra": "onchange=\"$('#id_banca_azienda').val($(this).selectData().id_banca_).change(); \" " ]}
- {[ "type": "select", "label": "", "name": "idbanca", "values": "query=SELECT id, CONCAT (nome, ' - ' , iban) AS descrizione FROM co_banche WHERE deleted_at IS NULL ORDER BY nome ASC", "value": "$idbanca$", "icon-after": "add|||", "extra": " " ]} + {[ "type": "select", "label": "", "name": "id_banca_azienda", "ajax-source": "banche", "select-options": $anagrafica_azienda->id]); ?>, "value": "$id_banca_azienda$", "icon-after": "add|||", "extra": " " ]}
@@ -599,8 +600,8 @@ if (!$block_edit) { echo ' '; @@ -609,8 +610,8 @@ if (!$block_edit) { $preventivi = $dbo->fetchArray($prev_query)[0]['tot']; echo ' '; @@ -619,8 +620,8 @@ if (!$block_edit) { $contratti = $dbo->fetchArray($contr_query)[0]['tot']; echo ' '; } @@ -637,16 +638,16 @@ if (!$block_edit) { AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)'; $ddt = $dbo->fetchArray($ddt_query)[0]['tot']; echo ' - - Ddt + + '.tr('Ddt').' '; // Lettura ordini (cliente o fornitore) $ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)'; $ordini = $dbo->fetchArray($ordini_query)[0]['tot']; echo ' - - Ordine + + '.tr('Ordine').' '; } diff --git a/modules/fatture/row-add.php b/modules/fatture/row-add.php index 5cd0d7a08..e2d42f589 100755 --- a/modules/fatture/row-add.php +++ b/modules/fatture/row-add.php @@ -32,7 +32,8 @@ $options = [ 'conti' => $documento->direzione == 'entrata' ? 'conti-vendite' : 'conti-acquisti', 'idanagrafica' => $documento['idanagrafica'], 'show-ritenuta-contributi' => !empty($documento['id_ritenuta_contributi']), - 'totale_imponibile' => $documento->totale_imponibile, + 'totale_imponibile_documento' => $documento->totale_imponibile, + 'totale_documento' => $documento->totale, 'select-options' => [ 'articoli' => [ 'idanagrafica' => $documento->idanagrafica, diff --git a/modules/fatture/row-edit.php b/modules/fatture/row-edit.php index 450c81fb8..456a31ebf 100755 --- a/modules/fatture/row-edit.php +++ b/modules/fatture/row-edit.php @@ -31,7 +31,8 @@ $options = [ 'conti' => $documento->direzione == 'entrata' ? 'conti-vendite' : 'conti-acquisti', 'idanagrafica' => $documento['idanagrafica'], 'show-ritenuta-contributi' => !empty($documento['id_ritenuta_contributi']), - 'totale_imponibile' => $documento->totale_imponibile, + 'totale_imponibile_documento' => $documento->totale_imponibile, + 'totale_documento' => $documento->totale, 'select-options' => [ 'articoli' => [ 'idanagrafica' => $documento->idanagrafica, diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index c57100b0a..e7b5e7b53 100755 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -65,8 +65,8 @@ foreach ($righe as $riga) { $extra_riga = ''; if (!$riga->isDescrizione()) { // Informazioni su CIG, CUP, ... - if ($riga->hasOriginal()) { - $documento_originale = $riga->getOriginal()->parent; + if ($riga->hasOriginalComponent()) { + $documento_originale = $riga->getOriginalComponent()->getDocument(); $num_item = $documento_originale['num_item']; $codice_cig = $documento_originale['codice_cig']; @@ -102,9 +102,9 @@ foreach ($righe as $riga) { '.$extra_riga; // Aggiunta dei riferimenti ai documenti - if ($riga->hasOriginal()) { + if ($riga->hasOriginalComponent()) { echo ' -
'.reference($riga->getOriginal()->parent, tr('Origine')); +
'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine')); } echo ' diff --git a/modules/fatture/src/Components/Articolo.php b/modules/fatture/src/Components/Articolo.php index 8e1ede3ce..4b798b100 100755 --- a/modules/fatture/src/Components/Articolo.php +++ b/modules/fatture/src/Components/Articolo.php @@ -20,9 +20,10 @@ namespace Modules\Fatture\Components; use Common\Components\Article; -use Modules\Articoli\Articolo as Original; -use Modules\Fatture\Fattura; +/** + * @extends Article<\Modules\Fatture\Fattura> + */ class Articolo extends Article { use RelationTrait; @@ -30,21 +31,9 @@ class Articolo extends Article protected $table = 'co_righe_documenti'; protected $serialRowID = 'documento'; - /** - * Crea un nuovo articolo collegato ad una fattura. - * - * @return self - */ - public static function build(Fattura $fattura, Original $articolo) - { - $model = parent::build($fattura, $articolo); - - return $model; - } - public function movimenta($qta) { - if (!$this->movimenta_magazzino) { + if (!$this->parent->movimenta_magazzino) { return; } @@ -52,9 +41,9 @@ class Articolo extends Article // Movimenta il magazzino solo se l'articolo non è già stato movimentato da un documento precedente // Movimentazione forzata per Note di credito/debito - if ($this->hasOriginal() && !$this->parent->isNota()) { - $original = $this->getOriginal(); - $movimenta = !$original->movimenta_magazzino; + if ($this->hasOriginalComponent() && !$this->getDocument()->isNota()) { + $original = $this->getOriginalComponent(); + $movimenta = !$original->getDocument()->movimenta_magazzino; } if ($movimenta) { diff --git a/modules/fatture/src/Components/Descrizione.php b/modules/fatture/src/Components/Descrizione.php index 5e5ce32f9..7e8e9c80a 100755 --- a/modules/fatture/src/Components/Descrizione.php +++ b/modules/fatture/src/Components/Descrizione.php @@ -20,23 +20,13 @@ namespace Modules\Fatture\Components; use Common\Components\Description; -use Modules\Fatture\Fattura; +/** + * @extends Description<\Modules\Fatture\Fattura> + */ class Descrizione extends Description { use RelationTrait; protected $table = 'co_righe_documenti'; - - /** - * Crea una nuova riga collegata ad una fattura. - * - * @return self - */ - public static function build(Fattura $fattura) - { - $model = parent::build($fattura); - - return $model; - } } diff --git a/modules/fatture/src/Components/RelationTrait.php b/modules/fatture/src/Components/RelationTrait.php index 3225afbfa..3c6309980 100755 --- a/modules/fatture/src/Components/RelationTrait.php +++ b/modules/fatture/src/Components/RelationTrait.php @@ -26,26 +26,26 @@ use Modules\Rivalse\RivalsaINPS; trait RelationTrait { - public function getParentID() + public function getDocumentID() { return 'iddocumento'; } - public function parent() + public function document() { - return $this->belongsTo(Fattura::class, $this->getParentID()); + return $this->belongsTo(Fattura::class, $this->getDocumentID()); } public function fattura() { - return $this->parent(); + return $this->document(); } public function getNettoAttribute() { $result = $this->totale - $this->ritenuta_acconto - $this->ritenuta_contributi; - if ($this->parent->split_payment) { + if ($this->getDocument()->split_payment) { $result = $result - $this->iva; } @@ -113,7 +113,7 @@ trait RelationTrait { if ($this->attributes['ritenuta_contributi']) { $result = $this->totale_imponibile; - $ritenuta = $this->parent->ritenutaContributi; + $ritenuta = $this->getDocument()->ritenutaContributi; $result = $result * $ritenuta->percentuale_imponibile / 100; diff --git a/modules/fatture/src/Components/Riga.php b/modules/fatture/src/Components/Riga.php index ba4259f1e..863fe70b5 100755 --- a/modules/fatture/src/Components/Riga.php +++ b/modules/fatture/src/Components/Riga.php @@ -20,23 +20,13 @@ namespace Modules\Fatture\Components; use Common\Components\Row; -use Modules\Fatture\Fattura; +/** + * @extends Row<\Modules\Fatture\Fattura> + */ class Riga extends Row { use RelationTrait; protected $table = 'co_righe_documenti'; - - /** - * Crea una nuova riga collegata ad una fattura. - * - * @return self - */ - public static function build(Fattura $fattura) - { - $model = parent::build($fattura); - - return $model; - } } diff --git a/modules/fatture/src/Components/Sconto.php b/modules/fatture/src/Components/Sconto.php index f0448cbd0..521a5a6be 100755 --- a/modules/fatture/src/Components/Sconto.php +++ b/modules/fatture/src/Components/Sconto.php @@ -20,23 +20,13 @@ namespace Modules\Fatture\Components; use Common\Components\Discount; -use Modules\Fatture\Fattura; +/** + * @extends Discount<\Modules\Fatture\Fattura> + */ class Sconto extends Discount { use RelationTrait; protected $table = 'co_righe_documenti'; - - /** - * Crea un nuovo sconto collegato ad una fattura. - * - * @return self - */ - public static function build(Fattura $fattura) - { - $model = parent::build($fattura); - - return $model; - } } diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index b2b2f64a2..d5a3d73bd 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -21,10 +21,11 @@ namespace Modules\Fatture; use Auth; use Carbon\Carbon; -use Common\Components\Description; +use Common\Components\Component; use Common\Document; use Illuminate\Database\Eloquent\Builder; use Modules\Anagrafiche\Anagrafica; +use Modules\Banche\Banca; use Modules\Fatture\Gestori\Bollo as GestoreBollo; use Modules\Fatture\Gestori\Movimenti as GestoreMovimenti; use Modules\Fatture\Gestori\Scadenze as GestoreScadenze; @@ -86,15 +87,16 @@ class Fattura extends Document */ public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data, $id_segment, $numero_esterno = null) { - $model = parent::build(); + $model = new static(); $user = Auth::user(); + $database = database(); + // Individuazione dello stato predefinito per il documento $stato_documento = Stato::where('descrizione', 'Bozza')->first(); $direzione = $tipo_documento->dir; - $database = database(); - + // Conto predefinito sulla base del flusso di denaro if ($direzione == 'entrata') { $id_conto = setting('Conto predefinito fatture di vendita'); $conto = 'vendite'; @@ -103,6 +105,7 @@ class Fattura extends Document $conto = 'acquisti'; } + // Informazioni di base $model->anagrafica()->associate($anagrafica); $model->tipo()->associate($tipo_documento); $model->stato()->associate($stato_documento); @@ -114,55 +117,65 @@ class Fattura extends Document $model->data_registrazione = $data; $model->data_competenza = $data; $model->id_segment = $id_segment; + $model->idconto = $id_conto; if ($numero_esterno) { $model->numero_esterno = $numero_esterno; } - $model->idconto = $id_conto; - - // Imposto, come sede aziendale, la prima sede disponibile come utente + // Sede aziendale scelta tra le sedi disponibili per l'utente + $id_sede = $user->sedi[0]; if ($direzione == 'entrata') { - $model->idsede_destinazione = $user->sedi[0]; + $model->idsede_destinazione = $id_sede; } else { - $model->idsede_partenza = $user->sedi[0]; + $model->idsede_partenza = $id_sede; } + + // Gestione della marca da bollo predefinita $model->addebita_bollo = setting('Addebita marca da bollo al cliente'); + // Ritenuta contributi predefinita $id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta contributi') : null; $model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null; - // Tipo di pagamento e banca predefinite dall'anagrafica - $id_pagamento = $database->fetchOne('SELECT id FROM co_pagamenti WHERE id = :id_pagamento', [ - ':id_pagamento' => $anagrafica['idpagamento_'.$conto], - ])['id']; - $id_banca = $anagrafica['idbanca_'.$conto]; + // Banca predefinita per l'anagrafica controparte + //$model->id_banca_controparte = ; - // Se la fattura è di vendita e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni + // Tipo di pagamento dall'anagrafica controparte + $id_pagamento = $database->fetchOne('SELECT id FROM co_pagamenti WHERE id = :id_pagamento', [ + ':id_pagamento' => $anagrafica->{'idpagamento_'.$conto}, + ])['id']; + + // Per Fatture di Vendita senza pagamento predefinito per il Cliente, si utilizza il pagamento predefinito dalle Impostazioni if ($direzione == 'entrata' && empty($id_pagamento)) { $id_pagamento = setting('Tipo di pagamento predefinito'); } - // Se non è impostata la banca dell'anagrafica, uso quella del pagamento. - if (empty($id_banca)) { - $id_banca = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento)', [ - ':id_pagamento' => $id_pagamento, - ])['id']; - } - + // Salvataggio del pagamento if (!empty($id_pagamento)) { $model->idpagamento = $id_pagamento; } - if (!empty($id_banca)) { - $model->idbanca = $id_banca; + + // Banca predefinita per l'azienda, con ricerca della banca impostata per il pagamento + $id_banca_azienda = $anagrafica->{'idbanca_'.$conto}; + if (empty($id_banca_azienda)) { + $azienda = Anagrafica::find(setting('Azienda predefinita')); + $id_banca_azienda = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento) AND id_anagrafica = :id_anagrafica', [ + ':id_pagamento' => $id_pagamento, + ':id_anagrafica' => $azienda->id, + ])['id']; + if (empty($id_banca_azienda)) { + $id_banca_azienda = $azienda->{'idbanca_'.$conto}; + } + $model->id_banca_azienda = $id_banca_azienda; } - // Split Payment + // Gestione dello Split Payment sulla base dell'anagrafica Controparte $split_payment = $anagrafica->split_payment; if (!empty($split_payment)) { $model->split_payment = $split_payment; } - // Dichiarazione d'Intento + // Gestione della Dichiarazione d'Intento associata all'anargafica Controparte $now = new Carbon(); $dichiarazione = $anagrafica->dichiarazioni() ->where('massimale', '>', 'totale') @@ -172,6 +185,7 @@ class Fattura extends Document if (!empty($dichiarazione)) { $model->dichiarazione()->associate($dichiarazione); + // Registrazione dell'operazione nelle note $model->note = tr("Operazione non imponibile come da vostra dichiarazione d'intento nr _PROT_ del _PROT_DATE_ emessa in data _RELEASE_DATE_, da noi registrata al nr _ID_ del _DATE_", [ '_PROT_' => $dichiarazione->numero_protocollo, '_PROT_DATE_' => $dichiarazione->data_protocollo, @@ -416,7 +430,7 @@ class Fattura extends Document // Metodi generali - public function triggerComponent(Description $trigger) + public function triggerComponent(Component $trigger) { parent::triggerComponent($trigger); @@ -641,12 +655,14 @@ class Fattura extends Document $riba = database()->fetchOne('SELECT riba FROM co_pagamenti WHERE id ='.prepare($this->idpagamento)); if ($riba['riba'] == 1) { - $result = database()->fetchOne('SELECT codiceiban, appoggiobancario, bic FROM an_anagrafiche WHERE idanagrafica ='.prepare($this->idanagrafica)); + $banca = Banca::where('id_anagrafica', $this->idanagrafica) + ->where('predefined', 1) + ->first(); } else { - $result = database()->fetchOne('SELECT iban AS codiceiban, nome AS appoggiobancario, bic FROM co_banche WHERE id='.prepare($this->idbanca)); + $banca = Banca::find($this->id_banca_azienda); } - return $result; + return $banca; } // Metodi statici diff --git a/modules/fatture/src/Stato.php b/modules/fatture/src/Stato.php index 66628d0de..d60d282a7 100755 --- a/modules/fatture/src/Stato.php +++ b/modules/fatture/src/Stato.php @@ -19,10 +19,13 @@ namespace Modules\Fatture; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; class Stato extends Model { + use SimpleModelTrait; + protected $table = 'co_statidocumento'; public function fatture() diff --git a/modules/fatture/src/StatoFE.php b/modules/fatture/src/StatoFE.php index 704ea1b90..0576b7a78 100755 --- a/modules/fatture/src/StatoFE.php +++ b/modules/fatture/src/StatoFE.php @@ -19,10 +19,13 @@ namespace Modules\Fatture; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; class StatoFE extends Model { + use SimpleModelTrait; + public $incrementing = false; protected $table = 'fe_stati_documento'; protected $primaryKey = 'codice'; diff --git a/modules/fatture/src/Tipo.php b/modules/fatture/src/Tipo.php index d9481658e..5bca15f29 100755 --- a/modules/fatture/src/Tipo.php +++ b/modules/fatture/src/Tipo.php @@ -19,10 +19,13 @@ namespace Modules\Fatture; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; class Tipo extends Model { + use SimpleModelTrait; + protected $table = 'co_tipidocumento'; public function fatture() diff --git a/modules/fatture/variables.php b/modules/fatture/variables.php index f074222ba..89c5b1c99 100755 --- a/modules/fatture/variables.php +++ b/modules/fatture/variables.php @@ -31,9 +31,9 @@ FROM co_documenti WHERE co_documenti.id='.prepare($id_record)); if (!empty(setting('Logo stampe'))) { - $logo_azienda = BASEURL.'/'.Models\Upload::where('filename', setting('Logo stampe'))->first()->fileurl; + $logo_azienda = base_url().'/'.Models\Upload::where('filename', setting('Logo stampe'))->first()->fileurl; } else { - $logo_azienda = str_replace(DOCROOT, BASEURL, App::filepath('templates/base|custom|/logo_azienda.jpg')); + $logo_azienda = str_replace(base_dir(), base_url(), App::filepath('templates/base|custom|/logo_azienda.jpg')); $logo_azienda = str_replace('\\', '/', $logo_azienda); } diff --git a/modules/gestione_componenti/actions.php b/modules/gestione_componenti/actions.php index 9f5446db4..516651ba1 100755 --- a/modules/gestione_componenti/actions.php +++ b/modules/gestione_componenti/actions.php @@ -19,7 +19,7 @@ include_once __DIR__.'/../../core.php'; -$path = $docroot.'/files/impianti/'; +$path = base_dir().'/files/impianti/'; switch (post('op')) { case 'update': diff --git a/modules/gestione_componenti/edit.php b/modules/gestione_componenti/edit.php index 066217461..bab36c413 100755 --- a/modules/gestione_componenti/edit.php +++ b/modules/gestione_componenti/edit.php @@ -32,7 +32,7 @@ if (empty($id_record)) { for ($c = 1; $c <= count($cmp); ++$c) { echo ' - + '.$c.' '.$cmp[$c - 1][0].' '; diff --git a/modules/gestione_componenti/init.php b/modules/gestione_componenti/init.php index 1711abcc7..b53dc2ef8 100755 --- a/modules/gestione_componenti/init.php +++ b/modules/gestione_componenti/init.php @@ -19,9 +19,9 @@ include_once __DIR__.'/../../core.php'; -$cmp = \Util\Ini::getList($docroot.'/files/impianti/'); +$cmp = \Util\Ini::getList(base_dir().'/files/impianti/'); if (!empty($id_record) && isset($cmp[$id_record - 1])) { $record['nomefile'] = $cmp[$id_record - 1][0]; - $record['contenuto'] = file_get_contents($docroot.'/files/impianti/'.$record['nomefile']); + $record['contenuto'] = file_get_contents(base_dir().'/files/impianti/'.$record['nomefile']); } diff --git a/modules/giacenze_sedi/init.php b/modules/giacenze_sedi/init.php index 4e6f556ea..e32d32d2f 100644 --- a/modules/giacenze_sedi/init.php +++ b/modules/giacenze_sedi/init.php @@ -21,5 +21,5 @@ include_once __DIR__.'/../../core.php'; if (isset($id_record)) { $id_module = Modules::get('Articoli')['id']; - redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record); + redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record); } diff --git a/modules/impianti/actions.php b/modules/impianti/actions.php index 8af12487c..bf41a243a 100644 --- a/modules/impianti/actions.php +++ b/modules/impianti/actions.php @@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php'; $op = post('op'); -$upload_dir = $docroot.'/files/'.Modules::get('Impianti')['directory']; +$upload_dir = base_dir().'/files/'.Modules::get('Impianti')['directory']; switch ($op) { // Aggiorno informazioni di base impianto @@ -124,8 +124,8 @@ switch ($op) { } // ...altrimenti carico dal file .ini - elseif (file_exists($docroot.'/files/impianti/'.$filename)) { - $contenuto = file_get_contents($docroot.'/files/impianti/'.$filename); + elseif (file_exists(base_dir().'/files/impianti/'.$filename)) { + $contenuto = file_get_contents(base_dir().'/files/impianti/'.$filename); } crea_form_componente($contenuto); diff --git a/modules/impianti/ajax/search.php b/modules/impianti/ajax/search.php index 9988b77d2..9bf16226c 100644 --- a/modules/impianti/ajax/search.php +++ b/modules/impianti/ajax/search.php @@ -49,7 +49,7 @@ $rs = $dbo->fetchArray($query); foreach ($rs as $r) { $result = []; - $result['link'] = ROOTDIR.'/editor.php?id_module='.$link_id.'&id_record='.$r['id']; + $result['link'] = base_path().'/editor.php?id_module='.$link_id.'&id_record='.$r['id']; $result['title'] = $r['matricola'].' - '.$r['nome']; $result['category'] = 'Impianti'; diff --git a/modules/impianti/edit.php b/modules/impianti/edit.php index 982bb0030..7178fdfce 100644 --- a/modules/impianti/edit.php +++ b/modules/impianti/edit.php @@ -25,7 +25,7 @@ if (!empty($record['immagine'])) { $default_img = '/'.Uploads::getDirectory($id_module).'/'.$fileinfo['filename'].'_thumb600.'.$fileinfo['extension']; - $img = file_exists(DOCROOT.$default_img) ? ROOTDIR.$default_img : ROOTDIR.'/'.Uploads::getDirectory($id_module).'/'.$record['immagine']; + $img = file_exists(base_dir().$default_img) ? base_path().$default_img : base_path().'/'.Uploads::getDirectory($id_module).'/'.$record['immagine']; } ?> diff --git a/modules/impianti/modutil.php b/modules/impianti/modutil.php index 5fc48ec37..508fead68 100755 --- a/modules/impianti/modutil.php +++ b/modules/impianti/modutil.php @@ -30,8 +30,9 @@ function crea_form_componente($contenuto) $fields[$key] = '
'.$value.'
'; } - echo $title; - echo '
'; - echo PHP_EOL.implode(PHP_EOL, $fields).PHP_EOL.''; - echo '
'; + echo $title.' +
+ '.implode(PHP_EOL, $fields).' + +
'; } diff --git a/modules/impianti/plugins/my_impianti.componenti.php b/modules/impianti/plugins/my_impianti.componenti.php index 2ecae780a..7a0285d13 100755 --- a/modules/impianti/plugins/my_impianti.componenti.php +++ b/modules/impianti/plugins/my_impianti.componenti.php @@ -46,8 +46,8 @@ switch (filter('op')) { $filename = get('filename'); if (!empty($filename)) { - $contenuto = file_get_contents(DOCROOT.'/files/impianti/'.$filename); - $nome = Ini::getValue(Ini::readFile(DOCROOT.'/files/impianti/'.$filename), 'Nome'); + $contenuto = file_get_contents(base_dir().'/files/impianti/'.$filename); + $nome = Ini::getValue(Ini::readFile(base_dir().'/files/impianti/'.$filename), 'Nome'); $query = 'INSERT INTO my_impianto_componenti(filename, idimpianto, contenuto, nome, data) VALUES('.prepare($filename).', '.prepare($id_record).', '.prepare($contenuto).', '.prepare($nome).', NOW())'; $dbo->query($query); @@ -63,8 +63,8 @@ switch (filter('op')) { $filename = get('filename'); $id = get('id'); - $nome = Ini::getValue(Ini::readFile(DOCROOT.'/files/impianti/'.$filename), 'Nome'); - $contenuto = file_get_contents(DOCROOT.'/files/impianti/'.$filename); + $nome = Ini::getValue(Ini::readFile(base_dir().'/files/impianti/'.$filename), 'Nome'); + $contenuto = file_get_contents(base_dir().'/files/impianti/'.$filename); // Verifico che questo componente non sia già stato sostituito $query = 'SELECT * FROM my_impianto_componenti WHERE idsostituto = '.prepare($id); @@ -111,7 +111,7 @@ echo '
'; // Elenca i componenti disponibili -$componenti_disponibili = Ini::getList(DOCROOT.'/files/my_impianti/', $id_list); +$componenti_disponibili = Ini::getList(base_dir().'/files/my_impianti/', $id_list); echo '
@@ -203,7 +203,7 @@ if (!empty($componenti_installati)) { echo '
- + '; // Nome @@ -324,7 +324,7 @@ echo ' + +'; diff --git a/modules/interventi/ajax/search.php b/modules/interventi/ajax/search.php index db31459c8..f26ab96fd 100755 --- a/modules/interventi/ajax/search.php +++ b/modules/interventi/ajax/search.php @@ -53,7 +53,7 @@ $rs = $dbo->fetchArray($query); foreach ($rs as $r) { $result = []; - $result['link'] = ROOTDIR.'/editor.php?id_module='.$link_id.'&id_record='.$r['id']; + $result['link'] = base_path().'/editor.php?id_module='.$link_id.'&id_record='.$r['id']; $result['title'] = 'Intervento '.$r['codice'].' del '.Translator::dateToLocale($r['data']); $result['category'] = 'Interventi'; diff --git a/modules/interventi/ajax_tecnici.php b/modules/interventi/ajax_tecnici.php index e7069ef30..de734fe0a 100755 --- a/modules/interventi/ajax_tecnici.php +++ b/modules/interventi/ajax_tecnici.php @@ -241,7 +241,7 @@ if (!$is_completato) { } echo ' - + '; +'; $start = $_SESSION['period_start']; $end = $_SESSION['period_end']; diff --git a/modules/stato_email/edit.php b/modules/stato_email/edit.php index 155ba9ea5..10bd6bd16 100755 --- a/modules/stato_email/edit.php +++ b/modules/stato_email/edit.php @@ -145,7 +145,7 @@ foreach ($uploads as $upload) { echo ' - '.$upload->name.' + '.$upload->name.' '.$upload->pivot->name.' '; diff --git a/modules/stato_servizi/actions.php b/modules/stato_servizi/actions.php index c3c8c81e0..f261adbcc 100755 --- a/modules/stato_servizi/actions.php +++ b/modules/stato_servizi/actions.php @@ -35,13 +35,13 @@ switch (filter('op')) { // Elimino il modulo dal menu $dbo->query('DELETE FROM zz_modules WHERE id='.prepare($id).' OR parent='.prepare($id)); - $uninstall_script = DOCROOT.'/modules/'.$module_dir.'/update/uninstall.php'; + $uninstall_script = base_dir().'/modules/'.$module_dir.'/update/uninstall.php'; if (file_exists($uninstall_script)) { include_once $uninstall_script; } - delete(DOCROOT.'/modules/'.$module_dir.'/'); + delete(base_dir().'/modules/'.$module_dir.'/'); flash()->info(tr('Modulo "_MODULE_" disinstallato!', [ '_MODULE_' => $modulo, @@ -160,8 +160,8 @@ switch (filter('op')) { $dirs = [ $backup_dir => tr('Backup'), - DOCROOT.'/files' => tr('Allegati'), - DOCROOT.'/logs' => tr('Logs'), + base_dir().'/files' => tr('Allegati'), + base_dir().'/logs' => tr('Logs'), ]; foreach ($dirs as $dir => $description) { diff --git a/modules/stato_servizi/edit.php b/modules/stato_servizi/edit.php index 398a5b3ff..9dbcfadf1 100755 --- a/modules/stato_servizi/edit.php +++ b/modules/stato_servizi/edit.php @@ -77,9 +77,9 @@ foreach ($widgets as $widget) { // Possibilità di disabilitare o abilitare i moduli tranne quello degli aggiornamenti if ($widget['enabled']) { - $stato = "".$stato."\n"; + $stato = "".$stato."\n"; } else { - $stato = "".$stato."\n"; + $stato = "".$stato."\n"; } // POSIZIONE @@ -91,10 +91,10 @@ foreach ($widgets as $widget) { if ($widget['location'] == 'controller_right') { $posizione = " "; - $posizione = "".$posizione."\n"; + $posizione = "".$posizione."\n"; } elseif ($widget['location'] == 'controller_top') { $posizione = " '; - $posizione = "".$posizione."\n"; + $posizione = "".$posizione."\n"; } echo ' diff --git a/modules/stato_servizi/modutil.php b/modules/stato_servizi/modutil.php index 0c445ea1d..d4a252819 100755 --- a/modules/stato_servizi/modutil.php +++ b/modules/stato_servizi/modutil.php @@ -41,9 +41,9 @@ function submodules($list, $depth = 0) // Possibilità di disabilitare o abilitare i moduli tranne quello degli aggiornamenti if (!$locked) { if ($sub['enabled']) { - $stato = "".$stato."\n"; + $stato = "".$stato."\n"; } else { - $stato = "".$stato."\n"; + $stato = "".$stato."\n"; } } @@ -77,7 +77,7 @@ function submodules($list, $depth = 0) // Possibilità di disinstallare solo se il modulo non è tra quelli predefiniti if (empty($sub['default'])) { $result .= ' - + "; } else { diff --git a/modules/stato_servizi/src/API/v1/FolderSize.php b/modules/stato_servizi/src/API/v1/FolderSize.php index c17e6f57c..423dd2f71 100755 --- a/modules/stato_servizi/src/API/v1/FolderSize.php +++ b/modules/stato_servizi/src/API/v1/FolderSize.php @@ -35,14 +35,14 @@ class FolderSize extends Resource implements RetrieveInterface $dirs = [ $backup_dir => tr('Backup'), - DOCROOT.'/files' => tr('Allegati'), - DOCROOT.'/logs' => tr('Logs'), + base_dir().'/files' => tr('Allegati'), + base_dir().'/logs' => tr('Logs'), ]; } else { $array = explode(',', $dirs); foreach ($array as $key => $value) { $dirs = [ - DOCROOT.'/'.$value => $key, + base_dir().'/'.$value => $key, ]; } } diff --git a/modules/stato_servizi/widgets/spazio_utilizzato.php b/modules/stato_servizi/widgets/spazio_utilizzato.php index 32f7c3972..ddb677378 100755 --- a/modules/stato_servizi/widgets/spazio_utilizzato.php +++ b/modules/stato_servizi/widgets/spazio_utilizzato.php @@ -22,7 +22,7 @@ include_once __DIR__.'/../../../core.php'; $module = Modules::get('Stato dei servizi'); echo ' -'; +'; // Operazioni JavaScript echo ' diff --git a/modules/tipi_intervento/src/Tipo.php b/modules/tipi_intervento/src/Tipo.php index e264fe885..31f7a46f4 100755 --- a/modules/tipi_intervento/src/Tipo.php +++ b/modules/tipi_intervento/src/Tipo.php @@ -19,11 +19,14 @@ namespace Modules\TipiIntervento; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Modules\Anagrafiche\Anagrafica; class Tipo extends Model { + use SimpleModelTrait; + protected $table = 'in_tipiintervento'; protected $primaryKey = 'idtipointervento'; @@ -38,7 +41,7 @@ class Tipo extends Model */ public static function build($codice, $descrizione) { - $model = parent::build(); + $model = new static(); $model->codice = $codice; $model->descrizione = $descrizione; diff --git a/modules/utenti/actions.php b/modules/utenti/actions.php index 532f60c02..c13e39743 100755 --- a/modules/utenti/actions.php +++ b/modules/utenti/actions.php @@ -116,7 +116,7 @@ switch (filter('op')) { $utente->save(); - redirect(ROOTDIR.'/modules/utenti/info.php'); + redirect(base_path().'/modules/utenti/info.php'); break; diff --git a/modules/utenti/info.php b/modules/utenti/info.php index fa7314817..33fb02c51 100755 --- a/modules/utenti/info.php +++ b/modules/utenti/info.php @@ -37,7 +37,7 @@ if (!empty($rs)) { $anagrafica = $rs[0]; } -$api = BASEURL.'/api/?token='.$token; +$api = base_url().'/api/?token='.$token; $module = Modules::get('Utenti e permessi'); echo ' diff --git a/modules/utenti/user.php b/modules/utenti/user.php index bee45d8e7..2858378d9 100755 --- a/modules/utenti/user.php +++ b/modules/utenti/user.php @@ -46,7 +46,7 @@ if (!empty($user)) { } echo ' - + diff --git a/modules/utenti/variables.php b/modules/utenti/variables.php index af0550ec7..c4c234d13 100755 --- a/modules/utenti/variables.php +++ b/modules/utenti/variables.php @@ -24,5 +24,5 @@ $reset_token = $record->reset_token; return [ 'username' => $record->username, 'reset_token' => $reset_token, - 'reset_link' => BASEURL.'/reset.php?reset_token='.$reset_token, + 'reset_link' => base_url().'/reset.php?reset_token='.$reset_token, ]; diff --git a/modules/viste/edit.php b/modules/viste/edit.php index 90d4c15bc..2c179e2e3 100755 --- a/modules/viste/edit.php +++ b/modules/viste/edit.php @@ -132,7 +132,7 @@ function testQuery(){ $("#main_loading").fadeIn(); $.ajax({ - url: "'.ROOTDIR.'/actions.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&op=test", + url: "'.base_path().'/actions.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&op=test", cache: false, type: "post", processData: false, diff --git a/package.json b/package.json index 2df9dca89..d38707385 100755 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "main": "gulpfile.js", "dependencies": { "admin-lte": "^2.4.0", + "autonumeric": "^4.6.0", "autosize": "^3.0.21", "bootstrap": "^3.3.7", "bootstrap-colorpicker": "2.5.1", diff --git a/pdfgen.php b/pdfgen.php index 755823113..e4a814a63 100755 --- a/pdfgen.php +++ b/pdfgen.php @@ -43,7 +43,7 @@ if (empty($result)) {
- + '.tr('Indietro').'
'; diff --git a/plugins/dettagli_articolo/src/DettaglioFornitore.php b/plugins/dettagli_articolo/src/DettaglioFornitore.php index 207f6181f..3cfc301cb 100644 --- a/plugins/dettagli_articolo/src/DettaglioFornitore.php +++ b/plugins/dettagli_articolo/src/DettaglioFornitore.php @@ -19,18 +19,20 @@ namespace Plugins\DettagliArticolo; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Modules\Anagrafiche\Anagrafica; use Modules\Articoli\Articolo; -/** +/* * Classe per la gestione delle relazioni tra articolo e fornitore. * * @since 2.4.15 */ class DettaglioFornitore extends Model { + use SimpleModelTrait; use SoftDeletes; protected $table = 'mg_fornitore_articolo'; @@ -42,7 +44,7 @@ class DettaglioFornitore extends Model */ public static function build(Anagrafica $fornitore, Articolo $articolo) { - $model = parent::build(); + $model = new static(); $model->anagrafica()->associate($fornitore); $model->articolo()->associate($articolo); diff --git a/plugins/dettagli_articolo/src/DettaglioPrezzo.php b/plugins/dettagli_articolo/src/DettaglioPrezzo.php index dc8733b43..e17abf646 100644 --- a/plugins/dettagli_articolo/src/DettaglioPrezzo.php +++ b/plugins/dettagli_articolo/src/DettaglioPrezzo.php @@ -19,18 +19,21 @@ namespace Plugins\DettagliArticolo; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Modules\Anagrafiche\Anagrafica; use Modules\Articoli\Articolo; use Modules\Iva\Aliquota; -/** +/* * Classe per la gestione delle relazioni articolo-prezzo sulla base di un range di quantità e di una specifica anagrafica. * * @since 2.4.18 */ class DettaglioPrezzo extends Model { + use SimpleModelTrait; + protected $table = 'mg_prezzi_articoli'; /** @@ -40,7 +43,7 @@ class DettaglioPrezzo extends Model */ public static function build(Articolo $articolo, Anagrafica $anagrafica, $direzione = 'uscita') { - $model = parent::build(); + $model = new static(); $model->anagrafica()->associate($anagrafica); $model->articolo()->associate($articolo); diff --git a/plugins/dichiarazioni_intento/src/Dichiarazione.php b/plugins/dichiarazioni_intento/src/Dichiarazione.php index ec319b0bb..dd9803216 100755 --- a/plugins/dichiarazioni_intento/src/Dichiarazione.php +++ b/plugins/dichiarazioni_intento/src/Dichiarazione.php @@ -19,18 +19,20 @@ namespace Plugins\DichiarazioniIntento; -use Common\Model; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Modules\Anagrafiche\Anagrafica; use Modules\Fatture\Fattura; -/** +/* * Classe per la gestione delle dichiarazione d'intento. * * @since 2.4.11 */ class Dichiarazione extends Model { + use SimpleModelTrait; use SoftDeletes; protected $table = 'co_dichiarazioni_intento'; @@ -48,7 +50,7 @@ class Dichiarazione extends Model */ public static function build(Anagrafica $anagrafica, $data, $numero_protocollo, $numero_progressivo, $data_inizio, $data_fine) { - $model = parent::build(); + $model = new static(); $model->anagrafica()->associate($anagrafica); diff --git a/plugins/exportFE/edit.php b/plugins/exportFE/edit.php index f324874a4..5f28a2f8c 100755 --- a/plugins/exportFE/edit.php +++ b/plugins/exportFE/edit.php @@ -86,7 +86,7 @@ echo ' - + '.tr('Visualizza').' '; @@ -143,7 +143,7 @@ if (!empty($record['codice_stato_fe'])) { if (!empty($ultima_ricevuta)) { echo ' - + '.tr('Visualizza ricevuta').' '; } diff --git a/plugins/exportFE/init.php b/plugins/exportFE/init.php index 26a965d8d..9bb387c53 100755 --- a/plugins/exportFE/init.php +++ b/plugins/exportFE/init.php @@ -26,4 +26,4 @@ try { } catch (UnexpectedValueException $e) { } -$upload_dir = DOCROOT.'/'.FatturaElettronica::getDirectory(); +$upload_dir = base_dir().'/'.FatturaElettronica::getDirectory(); diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index 86de15ae5..a8e537081 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -85,7 +85,7 @@ class FatturaElettronica { $documento = $this->getDocumento(); - return !empty($documento['progressivo_invio']) && file_exists(DOCROOT.'/'.static::getDirectory().'/'.$this->getFilename()); + return !empty($documento['progressivo_invio']) && file_exists(base_dir().'/'.static::getDirectory().'/'.$this->getFilename()); } /** @@ -1185,8 +1185,8 @@ class FatturaElettronica $descrizione = str_replace('’', ' ', $descrizione); // Aggiunta dei riferimenti ai documenti - if (setting('Riferimento dei documenti in Fattura Elettronica') && $riga->hasOriginal()) { - $descrizione .= "\n".$riga->getOriginal()->parent->getReference(); + if (setting('Riferimento dei documenti in Fattura Elettronica') && $riga->hasOriginalComponent()) { + $descrizione .= "\n".$riga->getOriginalComponent()->getDocument()->getReference(); } $dettaglio['Descrizione'] = $descrizione; @@ -1414,14 +1414,14 @@ class FatturaElettronica 'ImportoPagamento' => abs($scadenza['da_pagare']), ]; - if (!empty($banca['appoggiobancario'])) { - $pagamento['IstitutoFinanziario'] = $banca['appoggiobancario']; + if (!empty($banca->nome)) { + $pagamento['IstitutoFinanziario'] = $banca->nome; } - if (!empty($banca['codiceiban'])) { - $pagamento['IBAN'] = clean($banca['codiceiban']); + if (!empty($banca->iban)) { + $pagamento['IBAN'] = clean($banca->iban); } - if (!empty($banca['bic'])) { - $pagamento['BIC'] = $banca['bic']; + if (!empty($banca->bic)) { + $pagamento['BIC'] = $banca->bic; } $result[]['DettaglioPagamento'] = $pagamento; @@ -1454,7 +1454,7 @@ class FatturaElettronica // Inclusione foreach ($allegati as $allegato) { if ($allegato['category'] == 'Allegati Fattura Elettronica') { - $file = DOCROOT.'/'.$directory.'/'.$allegato['filename']; + $file = base_dir().'/'.$directory.'/'.$allegato['filename']; $attachments[] = [ 'NomeAttachment' => $allegato['name'], @@ -1482,7 +1482,7 @@ class FatturaElettronica $dir = static::getDirectory(); $print = Prints::getModulePredefinedPrint($id_module); - $info = Prints::render($print['id'], $documento['id'], DOCROOT.'/'.$dir); + $info = Prints::render($print['id'], $documento['id'], base_dir().'/'.$dir); $name = 'Stampa allegata'; $is_presente = database()->fetchNum('SELECT id FROM zz_files WHERE id_module = '.prepare($id_module).' AND id_record = '.prepare($documento['id']).' AND name = '.prepare($name)); diff --git a/plugins/exportFE/src/Interaction.php b/plugins/exportFE/src/Interaction.php index 2bc6d9bb3..79d8d0e07 100755 --- a/plugins/exportFE/src/Interaction.php +++ b/plugins/exportFE/src/Interaction.php @@ -33,7 +33,7 @@ class Interaction extends Services { try { $fattura = new FatturaElettronica($id_record); - $file = DOCROOT.'/'.FatturaElettronica::getDirectory().'/'.$fattura->getFilename(); + $file = base_dir().'/'.FatturaElettronica::getDirectory().'/'.$fattura->getFilename(); $response = static::request('POST', 'invio_fattura_xml', [ 'xml' => file_get_contents($file), diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php index 3121efbab..9b4960216 100755 --- a/plugins/importFE/actions.php +++ b/plugins/importFE/actions.php @@ -156,7 +156,7 @@ switch (filter('op')) { $process_result = Interaction::processInvoice($filename); if ($process_result != '') { flash()->error($process_result); - redirect(ROOTDIR.'/controller.php?id_module='.$id_module); + redirect(base_path().'/controller.php?id_module='.$id_module); return; } @@ -166,12 +166,12 @@ switch (filter('op')) { $file = $files[$id_record - 1]; if (get('sequence') == null) { - redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_fattura); + redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_fattura); } elseif (!empty($file)) { - redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_record='.$id_record.'&sequence=1'); + redirect(base_path().'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_record='.$id_record.'&sequence=1'); } else { flash()->info(tr('Tutte le fatture salvate sono state importate!')); - redirect(ROOTDIR.'/controller.php?id_module='.$id_module); + redirect(base_path().'/controller.php?id_module='.$id_module); } break; @@ -362,7 +362,7 @@ switch (filter('op')) { // Ricerca della riga $riga = $documento->getRiga($namespace.$type, $collegamento['id']); - $riga_origine = $riga->getOriginal(); + $riga_origine = $riga->getOriginalComponent(); // Compilazione dei dati $results[$key] = [ diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index ed73a39e8..23d6b21ea 100755 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -28,7 +28,7 @@ $(document).ready(function() { }); '; -$skip_link = $has_next ? ROOTDIR.'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_record='.($id_record + 1).'&sequence='.get('sequence') : ROOTDIR.'/editor.php?id_module='.$id_module; +$skip_link = $has_next ? base_path().'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_record='.($id_record + 1).'&sequence='.get('sequence') : base_path().'/editor.php?id_module='.$id_module; if (empty($fattura_pa)) { if (!empty($error)) { diff --git a/plugins/importFE/init.php b/plugins/importFE/init.php index 27b0abe4b..3c2b1890d 100755 --- a/plugins/importFE/init.php +++ b/plugins/importFE/init.php @@ -43,6 +43,6 @@ if (isset($id_record)) { if (empty($record)) { flash()->warning(tr('Nessuna fattura da importare!')); - redirect(ROOTDIR.'/controller.php?id_module='.$id_module); + redirect(base_path().'/controller.php?id_module='.$id_module); } } diff --git a/plugins/importFE/riferimento.php b/plugins/importFE/riferimento.php index ad4cca9b0..95e2b6706 100755 --- a/plugins/importFE/riferimento.php +++ b/plugins/importFE/riferimento.php @@ -54,7 +54,7 @@ $id_riferimento = get('id_riferimento'); $righe = $documento->getRighe(); foreach ($righe as $riga) { $qta_rimanente = $riga->qta_rimanente - $righe_utilizzate[$riga->id]; - $riga_origine = $riga->getOriginal(); + $riga_origine = $riga->getOriginalComponent(); $dettagli = [ 'tipo' => get_class($riga), diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php index 61f150592..8efad4761 100755 --- a/plugins/importFE/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -92,7 +92,7 @@ class FatturaElettronica return $value->name == 'Fatturazione Elettronica'; }); - self::$directory = DOCROOT.'/'.$plugin->upload_directory; + self::$directory = base_dir().'/'.$plugin->upload_directory; } } diff --git a/plugins/importFE/src/Interaction.php b/plugins/importFE/src/Interaction.php index 10af3bb35..4df35bd4d 100755 --- a/plugins/importFE/src/Interaction.php +++ b/plugins/importFE/src/Interaction.php @@ -37,13 +37,15 @@ class Interaction extends Services $result = self::getFileList($list); // Aggiornamento cache hook - Cache::get('Fatture Elettroniche')->set($result); + Cache::pool('Fatture Elettroniche')->set($result); return $result; } public static function getRemoteList() { + $list = []; + // Ricerca da remoto if (self::isEnabled()) { $response = static::request('POST', 'fatture_da_importare'); @@ -54,7 +56,7 @@ class Interaction extends Services } } - return $list ?: []; + return $list; } public static function getFileList($list = []) diff --git a/plugins/importFE/src/InvoiceHook.php b/plugins/importFE/src/InvoiceHook.php index 90c7155ad..5f7d0a20d 100755 --- a/plugins/importFE/src/InvoiceHook.php +++ b/plugins/importFE/src/InvoiceHook.php @@ -36,7 +36,7 @@ class InvoiceHook extends CachedManager public function response() { - $results = $this->getCache()->content; + $results = (array) $this->getCache()->content; $count = count($results); $notify = false; @@ -51,7 +51,7 @@ class InvoiceHook extends CachedManager return $value->name == 'Fatturazione Elettronica'; }); - $link = ROOTDIR.'/controller.php?id_module='.$module->id.'#tab_'.$plugin->id; + $link = base_path().'/controller.php?id_module='.$module->id.'#tab_'.$plugin->id; } $message = tr('Ci sono _NUM_ fatture passive da importare', [ diff --git a/plugins/importFE/view.php b/plugins/importFE/view.php index ca01b1c8e..902b6bbbe 100755 --- a/plugins/importFE/view.php +++ b/plugins/importFE/view.php @@ -30,7 +30,7 @@ $xml->loadXML($content); // XSL $xsl = new DOMDocument(); -$xsl->load(DOCROOT.'/plugins/xml/asso-invoice.xsl'); +$xsl->load(base_dir().'/plugins/xml/asso-invoice.xsl'); // XSLT $xslt = new XSLTProcessor(); diff --git a/plugins/pianificazione_fatturazione/edit.php b/plugins/pianificazione_fatturazione/edit.php index 041ce4d04..2bbc1b4ea 100755 --- a/plugins/pianificazione_fatturazione/edit.php +++ b/plugins/pianificazione_fatturazione/edit.php @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -include_once __DIR__.'/../../../core.php'; +include_once __DIR__.'/../../core.php'; use Modules\Contratti\Contratto; use Modules\Contratti\Stato; diff --git a/plugins/pianificazione_fatturazione/src/Pianificazione.php b/plugins/pianificazione_fatturazione/src/Pianificazione.php index 7d1089677..d10474f14 100755 --- a/plugins/pianificazione_fatturazione/src/Pianificazione.php +++ b/plugins/pianificazione_fatturazione/src/Pianificazione.php @@ -45,7 +45,7 @@ class Pianificazione extends Document */ public static function build(Contratto $contratto, $data_scadenza) { - $model = parent::build(); + $model = new static(); $model->contratto()->associate($contratto); diff --git a/plugins/pianificazione_interventi/actions.php b/plugins/pianificazione_interventi/actions.php index 3461d7f1d..04983eb16 100755 --- a/plugins/pianificazione_interventi/actions.php +++ b/plugins/pianificazione_interventi/actions.php @@ -127,7 +127,7 @@ switch ($operazione) { $righe = $promemoria_originale->getRighe(); foreach ($righe as $riga) { $copia = $riga->replicate(); - $copia->setParent($promemoria_corrente); + $copia->setDocument($promemoria_corrente); $copia->save(); } diff --git a/plugins/pianificazione_interventi/edit.php b/plugins/pianificazione_interventi/edit.php index f699d396b..5a5f247cd 100755 --- a/plugins/pianificazione_interventi/edit.php +++ b/plugins/pianificazione_interventi/edit.php @@ -158,7 +158,7 @@ if (!$elenco_promemoria->isEmpty()) { - diff --git a/plugins/pianificazione_interventi/pianificazione.php b/plugins/pianificazione_interventi/pianificazione.php index f938bedf3..5d96915ac 100755 --- a/plugins/pianificazione_interventi/pianificazione.php +++ b/plugins/pianificazione_interventi/pianificazione.php @@ -110,7 +110,7 @@ echo '
- {[ "type": "select", "multiple": "1", "label": "'.tr('Impianti a contratto').'", "name": "idimpianti[]", "help": "'.tr('Impianti sede selezionata').'", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_parent.' ORDER BY descrizione", "value": "'.implode(',', $id_impianti).'", "readonly": '.intval($block_edit).' ]} + {[ "type": "select", "multiple": "1", "label": "'.tr('Impianti a contratto').'", "name": "idimpianti[]", "help": "'.tr('Impianti della sede selezionata per il Contratto').'", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_parent.' ORDER BY descrizione", "value": "'.implode(',', $id_impianti).'", "readonly": '.intval($block_edit).' ]}
@@ -144,11 +144,15 @@ echo ' '.tr('Riga').' '; } + echo '
-
'; +
+
+ +
'; include $structure->filepath('row-list.php'); @@ -304,7 +308,7 @@ echo ' }); - function refreshRighe(id){ - $("#righe").load("'.$plugin->fileurl('row-list.php').'?id_plugin='.$id_plugin.'&id_record=" + id + "&add='.$block_edit.'"); + function refreshRighe(id) { + $("#righe_promemoria").load("'.$plugin->fileurl('row-list.php').'?id_plugin='.$id_plugin.'&id_record=" + id + "&add='.$block_edit.'"); } '; diff --git a/plugins/pianificazione_interventi/row-add.php b/plugins/pianificazione_interventi/row-add.php index f628602af..f7c94004e 100755 --- a/plugins/pianificazione_interventi/row-add.php +++ b/plugins/pianificazione_interventi/row-add.php @@ -29,7 +29,8 @@ $options = [ 'action' => 'add', 'dir' => $documento->direzione, 'idanagrafica' => $documento['idanagrafica'], - 'totale_imponibile' => $documento->totale_imponibile, + 'totale_imponibile_documento' => $documento->totale_imponibile, + 'totale_documento' => $documento->totale, 'id_plugin' => $id_plugin, // Modificato ]; diff --git a/plugins/pianificazione_interventi/row-edit.php b/plugins/pianificazione_interventi/row-edit.php index 478235da2..b4243e5dc 100755 --- a/plugins/pianificazione_interventi/row-edit.php +++ b/plugins/pianificazione_interventi/row-edit.php @@ -29,7 +29,8 @@ $options = [ 'action' => 'edit', 'dir' => $documento->direzione, 'idanagrafica' => $documento['idanagrafica'], - 'totale_imponibile' => $documento->totale_imponibile, + 'totale_imponibile_documento' => $documento->totale_imponibile, + 'totale_documento' => $documento->totale, 'id_plugin' => $id_plugin, // Modificato ]; diff --git a/plugins/pianificazione_interventi/row-list.php b/plugins/pianificazione_interventi/row-list.php index f01536f3a..658764121 100755 --- a/plugins/pianificazione_interventi/row-list.php +++ b/plugins/pianificazione_interventi/row-list.php @@ -54,8 +54,6 @@ if (!$righe->isEmpty()) { '; foreach ($righe as $riga) { - $r = $riga->toArray(); - $extra = ''; $mancanti = $riga->isArticolo() ? $riga->missing_serials_number : 0; if ($mancanti > 0) { @@ -88,45 +86,43 @@ if (!$righe->isEmpty()) { // Quantità echo ' - - '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' - '; - - //Costo unitario - echo ' - - '.moneyFormat($riga->costo_unitario).' - '; + + '.Translator::numberToLocale($riga->qta, 'qta').' '.$riga->um.' + '; if ($show_prezzi) { + // Costo unitario + echo ' + + '.moneyFormat($riga->costo_unitario).' + '; + // Prezzo unitario echo ' - - '.moneyFormat($riga->prezzo_unitario); + + '.moneyFormat($riga->prezzo_unitario); - if (abs($r['sconto_unitario']) > 0) { - $text = $r['sconto_unitario'] > 0 ? tr('sconto _TOT_ _TYPE_') : tr('maggiorazione _TOT_ _TYPE_'); + if (abs($riga->sconto_unitario) > 0) { + $text = discountInfo($riga); echo ' -
'.replace($text, [ - '_TOT_' => Translator::numberToLocale(abs($r['sconto_unitario'])), - '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), - ]).''; +
'.$text.''; } echo ' - '; + '; echo ' - - '.moneyFormat($r['iva']).' - '; + + '.moneyFormat($riga->iva_unitaria).' +
'.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).' + '; // Prezzo di vendita echo ' - - '.moneyFormat($riga->imponibile).' - '; + + '.moneyFormat($riga->importo).' + '; } // Pulsante per riportare nel magazzino centrale. @@ -135,15 +131,15 @@ if (!$righe->isEmpty()) { echo ' '; - if ($r['abilita_serial']) { + if ($riga->abilita_serial) { echo ' - '; } echo ' - diff --git a/plugins/pianificazione_interventi/src/Components/Articolo.php b/plugins/pianificazione_interventi/src/Components/Articolo.php index 17cb794ce..1b17c4dfe 100755 --- a/plugins/pianificazione_interventi/src/Components/Articolo.php +++ b/plugins/pianificazione_interventi/src/Components/Articolo.php @@ -28,8 +28,6 @@ class Articolo extends Article { use RelationTrait; - public $movimenta_magazzino = false; - protected $table = 'co_righe_promemoria'; /** diff --git a/plugins/pianificazione_interventi/src/Components/RelationTrait.php b/plugins/pianificazione_interventi/src/Components/RelationTrait.php index e8a954f83..e37652e14 100755 --- a/plugins/pianificazione_interventi/src/Components/RelationTrait.php +++ b/plugins/pianificazione_interventi/src/Components/RelationTrait.php @@ -25,19 +25,19 @@ trait RelationTrait { protected $disableOrder = true; - public function getParentID() + public function getDocumentID() { return 'id_promemoria'; } - public function parent() + public function document() { - return $this->belongsTo(Promemoria::class, $this->getParentID()); + return $this->belongsTo(Promemoria::class, $this->getDocumentID()); } public function contratto() { - return $this->parent(); + return $this->document(); } public function fixIvaIndetraibile() diff --git a/plugins/pianificazione_interventi/src/Promemoria.php b/plugins/pianificazione_interventi/src/Promemoria.php index 7d91b2d44..451a91035 100755 --- a/plugins/pianificazione_interventi/src/Promemoria.php +++ b/plugins/pianificazione_interventi/src/Promemoria.php @@ -29,6 +29,11 @@ class Promemoria extends Document { use RecordTrait; + /** + * @var bool Disabilita movimentazione automatica + */ + public static $movimenta_magazzino = false; + protected $table = 'co_promemoria'; /** @@ -49,7 +54,7 @@ class Promemoria extends Document */ public static function build(Contratto $contratto, TipoSessione $tipo, $data_richiesta) { - $model = parent::build(); + $model = new static(); $model->contratto()->associate($contratto); $model->tipo()->associate($tipo); @@ -73,7 +78,7 @@ class Promemoria extends Document return 'entrata'; } - public function pianifica(Intervento $intervento) + public function pianifica(Intervento $intervento, $copia_impianti = true) { $this->intervento()->associate($intervento); // Collego l'intervento ai promemoria $this->save(); @@ -95,10 +100,14 @@ class Promemoria extends Document // Collego gli impianti del promemoria all'intervento $database = database(); - if (!empty($this->idimpianti)) { + if ($copia_impianti && !empty($this->idimpianti)) { $impianti = explode(',', $this->idimpianti); + $impianti = array_unique($impianti); foreach ($impianti as $impianto) { - $database->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.prepare($intervento->id).', '.prepare($impianto).' )'); + $database->insert('my_impianti_interventi', [ + 'idintervento' => $intervento->id, + 'idimpianto' => $impianto, + ]); } } } diff --git a/plugins/pianificazione_interventi/widgets/promemoria_da_pianificare.php b/plugins/pianificazione_interventi/widgets/promemoria_da_pianificare.php index 6acfa66f7..67d56c7af 100644 --- a/plugins/pianificazione_interventi/widgets/promemoria_da_pianificare.php +++ b/plugins/pianificazione_interventi/widgets/promemoria_da_pianificare.php @@ -108,7 +108,7 @@ foreach ($raggruppamenti as $mese => $raggruppamento) { // Pulsanti echo ' - diff --git a/plugins/receiptFE/src/Interaction.php b/plugins/receiptFE/src/Interaction.php index 77c258ff3..5cfa51f75 100755 --- a/plugins/receiptFE/src/Interaction.php +++ b/plugins/receiptFE/src/Interaction.php @@ -37,7 +37,7 @@ class Interaction extends Services $result = self::getFileList($list); // Aggiornamento cache hook - Cache::get('Ricevute Elettroniche')->set($result); + Cache::pool('Ricevute Elettroniche')->set($result); return $list; } diff --git a/plugins/receiptFE/src/ReceiptHook.php b/plugins/receiptFE/src/ReceiptHook.php index 47f56f883..1b059624b 100755 --- a/plugins/receiptFE/src/ReceiptHook.php +++ b/plugins/receiptFE/src/ReceiptHook.php @@ -32,7 +32,7 @@ class ReceiptHook extends Manager public function needsExecution() { // Lettura cache - $todo_cache = Cache::get('Ricevute Elettroniche'); + $todo_cache = Cache::pool('Ricevute Elettroniche'); return !$todo_cache->isValid() || !empty($todo_cache->content); } @@ -40,8 +40,8 @@ class ReceiptHook extends Manager public function execute() { // Lettura cache - $todo_cache = Cache::get('Ricevute Elettroniche'); - $completed_cache = Cache::get('Ricevute Elettroniche importate'); + $todo_cache = Cache::pool('Ricevute Elettroniche'); + $completed_cache = Cache::pool('Ricevute Elettroniche importate'); // Refresh cache if (!$todo_cache->isValid()) { @@ -92,8 +92,8 @@ class ReceiptHook extends Manager public function response() { // Lettura cache - $todo_cache = Cache::get('Ricevute Elettroniche'); - $completed_cache = Cache::get('Ricevute Elettroniche importate'); + $todo_cache = Cache::pool('Ricevute Elettroniche'); + $completed_cache = Cache::pool('Ricevute Elettroniche importate'); $completed_number = count($completed_cache->content); $total_number = $completed_number + count($todo_cache->content); diff --git a/plugins/receiptFE/src/Ricevuta.php b/plugins/receiptFE/src/Ricevuta.php index 48638debd..240337e96 100755 --- a/plugins/receiptFE/src/Ricevuta.php +++ b/plugins/receiptFE/src/Ricevuta.php @@ -95,7 +95,7 @@ class Ricevuta if (!isset(self::$directory)) { $plugin = Plugins::get('Ricevute FE'); - self::$directory = DOCROOT.'/'.$plugin->upload_directory; + self::$directory = base_dir().'/'.$plugin->upload_directory; } return self::$directory; diff --git a/plugins/revisioni/edit.php b/plugins/revisioni/edit.php index 4266c46d4..dbccc1694 100755 --- a/plugins/revisioni/edit.php +++ b/plugins/revisioni/edit.php @@ -17,14 +17,14 @@ * along with this program. If not, see . */ -include_once __DIR__.'/../../../core.php'; +include_once __DIR__.'/../../core.php'; $revisione_principale = $dbo->fetchOne('SELECT master_revision FROM co_preventivi WHERE id = '.prepare($id_record)); $revisioni = $dbo->fetchArray('SELECT * FROM co_preventivi WHERE master_revision = '.prepare($revisione_principale['master_revision']).' OR id = '.prepare($revisione_principale['master_revision']).' ORDER BY created_at'); echo " - + @@ -89,7 +89,7 @@ echo " '; echo " -
+ diff --git a/plugins/sedi/edit.php b/plugins/sedi/edit.php index 5f5c5f701..b99bba664 100755 --- a/plugins/sedi/edit.php +++ b/plugins/sedi/edit.php @@ -151,6 +151,8 @@ if (!empty($google)) { $elementi = $dbo->fetchArray('SELECT `zz_user_sedi`.`id_user` AS `id` FROM `zz_user_sedi` WHERE `zz_user_sedi`.`idsede` = '.prepare($id_record).' UNION SELECT `an_referenti`.`id` AS `id` FROM `an_referenti` WHERE `an_referenti`.`idsede` = '.prepare($id_record).' +UNION +SELECT `co_documenti`.`id` AS `id` FROM `co_documenti` WHERE `co_documenti`.`idsede_destinazione` = '.prepare($id_record).' ORDER BY `id`'); if (!empty($elementi)) { @@ -180,12 +182,12 @@ echo ' echo ' + + @@ -241,10 +240,10 @@ $(document).ready(function() { addRemoveLinks: false, autoProcessQueue: true, autoQueue: true, - url: "'.ROOTDIR.'/actions.php?op=link_file&id_module='.$options['id_module'].'&id_record='.$options['id_record'].'&id_plugin='.$options['id_plugin'].'", + url: "'.base_path().'/actions.php?op=link_file&id_module='.$options['id_module'].'&id_record='.$options['id_record'].'&id_plugin='.$options['id_plugin'].'", init: function (file, xhr, formData) { this.on("sending", function(file, xhr, formData) { - formData.append("categoria", $("#categoria").val()); + formData.append("categoria", $("#categoria_allegato").val()); formData.append("nome_allegato", $("#nome_allegato").val()); }); @@ -323,7 +322,7 @@ $(document).ready(function() { }); // Autocompletamento categoria - $("#'.$attachment_id.' #categoria").autocomplete({ + $("#'.$attachment_id.' #categoria_allegato").autocomplete({ source: '.json_encode($source).', minLength: 0 }).focus(function() { diff --git a/src/HTMLBuilder/Manager/WidgetManager.php b/src/HTMLBuilder/Manager/WidgetManager.php index 812f7b230..6a0965c17 100755 --- a/src/HTMLBuilder/Manager/WidgetManager.php +++ b/src/HTMLBuilder/Manager/WidgetManager.php @@ -120,7 +120,7 @@ class WidgetManager implements ManagerInterface $is_title_request = true; ob_start(); - include DOCROOT.'/'.$widget['php_include']; + include base_dir().'/'.$widget['php_include']; $content = ob_get_clean(); } @@ -133,7 +133,7 @@ class WidgetManager implements ManagerInterface if (!empty($widget['php_include'])) { $is_number_request = true; ob_start(); - include DOCROOT.'/'.$widget['php_include']; + include base_dir().'/'.$widget['php_include']; $content = ob_get_clean(); } @@ -143,7 +143,7 @@ class WidgetManager implements ManagerInterface protected function render($widget, $title, $number = null) { $result = ' - '; diff --git a/src/HTMLBuilder/Wrapper/HTMLWrapper.php b/src/HTMLBuilder/Wrapper/HTMLWrapper.php index 9a839f3dc..af70a2bc9 100755 --- a/src/HTMLBuilder/Wrapper/HTMLWrapper.php +++ b/src/HTMLBuilder/Wrapper/HTMLWrapper.php @@ -106,8 +106,8 @@ class HTMLWrapper implements WrapperInterface $value = explode('|', $values['validation']); $name = $value[0]; - $id_module = $value[1] ?: '$id_module$'; - $id_record = $value[2] ?: '$id_record$'; + $id_module = isset($value[1]) ? $value[1] : '$id_module$'; + $id_record = isset($value[2]) ? $value[2] : '$id_record$'; $result .= '