Merge branch 'master' into revisione-banche
This commit is contained in:
commit
481fcb7c8d
|
@ -79,9 +79,9 @@ backup/*
|
|||
custom/
|
||||
files/*
|
||||
!files/.htaccess
|
||||
!files/my_impianti/
|
||||
files/my_impianti/*
|
||||
!files/my_impianti/componente.ini
|
||||
!files/impianti/
|
||||
files/impianti/*
|
||||
!files/impianti/componente.ini
|
||||
tmp/
|
||||
config.inc.php
|
||||
database.sql
|
||||
|
|
61
CHANGELOG.md
61
CHANGELOG.md
|
@ -4,6 +4,8 @@ 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)
|
||||
- [2.4.15 (2020-05-01)](#2415-2020-05-01)
|
||||
|
@ -27,6 +29,63 @@ 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
|
||||
|
||||
### 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
|
||||
- Fix query aggiornamento data movimento per registrazioni in **Prima Nota**
|
||||
- Fix apretura pop-up di inserimento / modifica righe nelle varie schermate
|
||||
- Fix per idconto righe fattura da fatturazione in bulk
|
||||
- Fix calcolo quantità impegnata
|
||||
- Fix nome funzione duplicata durante aggiornamento 2.4.17
|
||||
- Fix Api per recupero delle sessioni di lavoro delle Attività in funzione dei mesi i mesi definiti nello storico
|
||||
- Fix allegati **Impianti** non trovati
|
||||
- Fix creazione / modifica componenti e componenti **Impianti** non trovati
|
||||
- Fix su calcolo movimenti in caso di insoluto
|
||||
- Fix raggruppamento movimenti composti
|
||||
|
||||
## 2.4.17 (2020-08-24)
|
||||
|
||||
### Aggiunto (Added)
|
||||
|
@ -55,7 +114,7 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
|
|||
### Fixed
|
||||
- Fix della duplicazione di Fattura, che in alcuni casi non rimuoveva lo stato FE originale
|
||||
- Fix della procedura di duplicazione di gruppo per le **Attività**
|
||||
- Risoluzione bug nella modifica manuale della **Prima Note** risalente a versioni <= 2.4.11 (#864)
|
||||
- Risoluzione bug nella modifica manuale della **Prima Nota** risalente a versioni <= 2.4.11 (#864)
|
||||
- Fix dell'ordinamento per i conti primari del **Piano dei conti**, con correzione dei totali di riepilogo relativi
|
||||
- Correzione sui tooltip bloccati sui pulsanti disabilitati
|
||||
|
||||
|
|
14
actions.php
14
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');
|
||||
|
|
2
add.php
2
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)) {
|
||||
|
|
2
ajax.php
2
ajax.php
|
@ -72,7 +72,7 @@ switch (filter('op')) {
|
|||
break;
|
||||
|
||||
case 'checklists':
|
||||
include DOCROOT.'/plugins/checks.php';
|
||||
include base_dir().'/plugins/checks.php';
|
||||
|
||||
break;
|
||||
|
||||
|
|
|
@ -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'));
|
||||
|
||||
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'],
|
||||
'<span class="hide" data-id="'.$r['id'].'"></span>', // 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), '<div |attr|>'.$value.'</div>');
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1041,6 +1041,10 @@ div.tip {
|
|||
background: #222222;
|
||||
}
|
||||
|
||||
.decimal-number {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Loading specificato per un div */
|
||||
.local-loader {
|
||||
position: relative;
|
||||
|
|
|
@ -16,12 +16,21 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// 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<unknown>}
|
||||
*/
|
||||
function salvaForm(button, form, data = {}) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
// Caricamento visibile nel pulsante
|
||||
|
|
|
@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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');
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -118,6 +118,7 @@ function selectBackground(data, container) {
|
|||
|
||||
return data.text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reimposta i contenuti di un <select> creato con select2.
|
||||
*/
|
||||
|
@ -206,11 +207,16 @@ jQuery.fn.selectData = function () {
|
|||
let selectData = this.select2('data');
|
||||
|
||||
if (this.prop('multiple')) {
|
||||
return selectData;
|
||||
let results = [];
|
||||
for (const option of selectData) {
|
||||
results.push(option.element.dataset);
|
||||
}
|
||||
|
||||
return results;
|
||||
} else if (selectData.length === 0) {
|
||||
return undefined;
|
||||
} else {
|
||||
return selectData[0];
|
||||
return selectData[0].element.dataset;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
8
bug.php
8
bug.php
|
@ -38,13 +38,13 @@ if (filter('op') == 'send') {
|
|||
$mail->Subject = 'Segnalazione bug OSM '.$version;
|
||||
|
||||
// Aggiunta dei file di log (facoltativo)
|
||||
if (!empty(post('log')) && file_exists($docroot.'/logs/error.log')) {
|
||||
$mail->AddAttachment($docroot.'/logs/error.log');
|
||||
if (!empty(post('log')) && file_exists(base_dir().'/logs/error.log')) {
|
||||
$mail->AddAttachment(base_dir().'/logs/error.log');
|
||||
}
|
||||
|
||||
// Aggiunta della copia del database (facoltativo)
|
||||
if (!empty(post('sql'))) {
|
||||
$backup_file = $docroot.'/Backup OSM '.date('Y-m-d').' '.date('H_i_s').'.sql';
|
||||
$backup_file = base_dir().'/Backup OSM '.date('Y-m-d').' '.date('H_i_s').'.sql';
|
||||
Backup::database($backup_file);
|
||||
|
||||
$mail->AddAttachment($backup_file);
|
||||
|
@ -87,7 +87,7 @@ if (filter('op') == 'send') {
|
|||
delete($backup_file);
|
||||
}
|
||||
|
||||
redirect($rootdir.'/bug.php');
|
||||
redirect(base_path().'/bug.php');
|
||||
exit();
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,46 @@
|
|||
"autoload": {
|
||||
"psr-4": {
|
||||
"": "src/",
|
||||
"Update\\": "update/"
|
||||
"Update\\": "update/",
|
||||
"Modules\\Aggiornamenti\\": ["modules/aggiornamenti/custom/src/", "modules/aggiornamenti/src/"],
|
||||
"Modules\\Anagrafiche\\": ["modules/anagrafiche/custom/src/", "modules/anagrafiche/src/"],
|
||||
"Modules\\Backups\\": ["modules/backups/custom/src/", "modules/backups/src/"],
|
||||
"Modules\\Emails\\": ["modules/emails/custom/src/", "modules/emails/src/"],
|
||||
"Modules\\Articoli\\": ["modules/articoli/custom/src/", "modules/articoli/src/"],
|
||||
"Modules\\Checklists\\": ["modules/checklists/custom/src/", "modules/checklists/src/"],
|
||||
"Modules\\Ritenute\\": ["modules/ritenute/custom/src/", "modules/ritenute/src/"],
|
||||
"Modules\\RitenuteContributi\\": ["modules/ritenute_contributi/custom/src/", "modules/ritenute_contributi/src/"],
|
||||
"Modules\\Rivalse\\": ["modules/rivalse/custom/src/", "modules/rivalse/src/"],
|
||||
"Modules\\Newsletter\\": ["modules/newsletter/custom/src/", "modules/newsletter/src/"],
|
||||
"Modules\\Iva\\": ["modules/iva/custom/src/", "modules/iva/src/"],
|
||||
"Modules\\DDT\\": ["modules/ddt/custom/src/", "modules/ddt/src/"],
|
||||
"Modules\\Fatture\\": ["modules/fatture/custom/src/", "modules/fatture/src/"],
|
||||
"Modules\\Ordini\\": ["modules/ordini/custom/src/", "modules/ordini/src/"],
|
||||
"Modules\\Preventivi\\": ["modules/preventivi/custom/src/", "modules/preventivi/src/"],
|
||||
"Modules\\Contratti\\": ["modules/contratti/custom/src/", "modules/contratti/src/"],
|
||||
"Modules\\Interventi\\": ["modules/interventi/custom/src/", "modules/interventi/src/"],
|
||||
"Modules\\Pagamenti\\": ["modules/pagamenti/custom/src/", "modules/pagamenti/src/"],
|
||||
"Modules\\Statistiche\\": ["modules/statistiche/custom/src/", "modules/statistiche/src/"],
|
||||
"Modules\\Scadenzario\\": ["modules/scadenzario/custom/src/", "modules/scadenzario/src/"],
|
||||
"Modules\\PrimaNota\\": ["modules/primanota/custom/src/", "modules/primanota/src/"],
|
||||
"Modules\\Utenti\\": ["modules/utenti/custom/src/", "modules/utenti/src/"],
|
||||
"Modules\\StatoServizi\\": ["modules/stato_servizi/custom/src/", "modules/stato_servizi/src/"],
|
||||
"Modules\\StatiIntervento\\": ["modules/stati_intervento/custom/src/", "modules/stati_intervento/src/"],
|
||||
"Modules\\StatiPreventivo\\": ["modules/stati_preventivo/custom/src/", "modules/stati_preventivo/src/"],
|
||||
"Modules\\StatiContratto\\": ["modules/stati_contratto/custom/src/", "modules/stati_contratto/src/"],
|
||||
"Modules\\TipiIntervento\\": ["modules/tipi_intervento/custom/src/", "modules/tipi_intervento/src/"],
|
||||
"Modules\\CategorieDocumentali\\": ["modules/categorie_documenti/custom/src/", "modules/categorie_documenti/src/"],
|
||||
"Modules\\Listini\\": ["modules/listini/custom/src/", "modules/listini/src/"],
|
||||
"Modules\\Impianti\\": ["modules/impianti/custom/src/", "modules/impianti/src/"],
|
||||
"Modules\\Impostazioni\\": ["modules/impostazioni/custom/src/", "modules/impostazioni/src/"],
|
||||
"Plugins\\ExportFE\\": ["plugins/exportFE/custom/src/", "plugins/exportFE/src/"],
|
||||
"Plugins\\ImportFE\\": ["plugins/importFE/custom/src/", "plugins/importFE/src/"],
|
||||
"Plugins\\ReceiptFE\\": ["plugins/receiptFE/custom/src/", "plugins/receiptFE/src/"],
|
||||
"Plugins\\DichiarazioniIntento\\": ["plugins/dichiarazioni_intento/custom/src/", "plugins/dichiarazioni_intento/src/"],
|
||||
"Plugins\\PianificazioneInterventi\\": ["plugins/pianificazione_interventi/custom/src/", "plugins/pianificazione_interventi/src/"],
|
||||
"Plugins\\PianificazioneFatturazione\\": ["plugins/pianificazione_fatturazione/custom/src/", "plugins/pianificazione_fatturazione/src/"],
|
||||
"Plugins\\StatisticheArticoli\\": ["plugins/statistiche_articoli/custom/src/", "plugins/statistiche_articoli/src/"],
|
||||
"Plugins\\DettagliArticolo\\": ["plugins/dettagli_articolo/custom/src/", "plugins/dettagli_articolo/src/"]
|
||||
},
|
||||
"files": [
|
||||
"lib/functions.php",
|
||||
|
|
|
@ -21,15 +21,15 @@
|
|||
* Configuration file for CSRF Protector.
|
||||
*/
|
||||
return [
|
||||
'logDirectory' => DOCROOT.'/logs',
|
||||
'logDirectory' => base_dir().'/logs',
|
||||
'failedAuthAction' => [
|
||||
'GET' => 0,
|
||||
'POST' => 0,
|
||||
],
|
||||
'jsUrl' => ROOTDIR.'/assets/dist/js/csrf/csrfprotector.js',
|
||||
'jsUrl' => base_path().'/assets/dist/js/csrf/csrfprotector.js',
|
||||
'tokenLength' => 10,
|
||||
'cookieConfig' => [
|
||||
'path' => ROOTDIR,
|
||||
'path' => base_path(),
|
||||
'secure' => isHTTPS(true),
|
||||
],
|
||||
'verifyGetFor' => [],
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
return [
|
||||
'include' => 'Common',
|
||||
/*
|
||||
'modules/aggiornamenti' => 'Modules\Aggiornamenti',
|
||||
'modules/anagrafiche' => 'Modules\Anagrafiche',
|
||||
'modules/backups' => 'Modules\Backups',
|
||||
|
@ -59,4 +59,5 @@ return [
|
|||
'plugins/pianificazione_fatturazione' => 'Plugins\PianificazioneFatturazione',
|
||||
'plugins/statistiche_articoli' => 'Plugins\StatisticheArticoli',
|
||||
'plugins/dettagli_articolo' => 'Plugins\DettagliArticolo',
|
||||
*/
|
||||
];
|
||||
|
|
|
@ -20,15 +20,15 @@
|
|||
include_once __DIR__.'/core.php';
|
||||
|
||||
if (!empty($id_record) && !empty($id_module)) {
|
||||
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);
|
||||
} elseif (empty($id_module)) {
|
||||
redirect(ROOTDIR.'/index.php');
|
||||
redirect(base_path().'/index.php');
|
||||
}
|
||||
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
// Inclusione gli elementi fondamentali
|
||||
include_once $docroot.'/actions.php';
|
||||
include_once base_dir().'/actions.php';
|
||||
|
||||
// Widget in alto
|
||||
echo '{( "name": "widgets", "id_module": "'.$id_module.'", "position": "top", "place": "controller" )}';
|
||||
|
@ -66,7 +66,7 @@ echo '
|
|||
<div class="tab-content">
|
||||
<div id="tab_0" class="tab-pane active">';
|
||||
|
||||
include $docroot.'/include/manager.php';
|
||||
include base_dir().'/include/manager.php';
|
||||
|
||||
echo '
|
||||
</div>';
|
||||
|
@ -81,7 +81,7 @@ foreach ($plugins as $plugin) {
|
|||
|
||||
$id_plugin = $plugin['id'];
|
||||
|
||||
include $docroot.'/include/manager.php';
|
||||
include base_dir().'/include/manager.php';
|
||||
|
||||
echo '
|
||||
</div>';
|
||||
|
|
41
core.php
41
core.php
|
@ -20,8 +20,6 @@
|
|||
// Rimozione header X-Powered-By
|
||||
header_remove('X-Powered-By');
|
||||
|
||||
ini_set('session.cookie_samesite', 'strict');
|
||||
|
||||
// Impostazioni di configurazione PHP
|
||||
date_default_timezone_set('Europe/Rome');
|
||||
|
||||
|
@ -81,16 +79,16 @@ use Monolog\Handler\StreamHandler;
|
|||
$handlers = [];
|
||||
if (!API\Response::isAPIRequest()) {
|
||||
// File di log di base (logs/error.log, logs/setup.log)
|
||||
$handlers[] = new StreamHandler($docroot.'/logs/error.log', Monolog\Logger::ERROR);
|
||||
$handlers[] = new StreamHandler($docroot.'/logs/setup.log', Monolog\Logger::EMERGENCY);
|
||||
$handlers[] = new StreamHandler(base_dir().'/logs/error.log', Monolog\Logger::ERROR);
|
||||
$handlers[] = new StreamHandler(base_dir().'/logs/setup.log', Monolog\Logger::EMERGENCY);
|
||||
|
||||
// Messaggi grafici per l'utente
|
||||
$handlers[] = new Extensions\MessageHandler(Monolog\Logger::ERROR);
|
||||
|
||||
// File di log ordinati in base alla data
|
||||
if (App::debug()) {
|
||||
$handlers[] = new RotatingFileHandler($docroot.'/logs/error.log', 0, Monolog\Logger::ERROR);
|
||||
$handlers[] = new RotatingFileHandler($docroot.'/logs/setup.log', 0, Monolog\Logger::EMERGENCY);
|
||||
$handlers[] = new RotatingFileHandler(base_dir().'/logs/error.log', 0, Monolog\Logger::ERROR);
|
||||
$handlers[] = new RotatingFileHandler(base_dir().'/logs/setup.log', 0, Monolog\Logger::EMERGENCY);
|
||||
}
|
||||
|
||||
// Inizializzazione Whoops
|
||||
|
@ -118,9 +116,17 @@ if (!API\Response::isAPIRequest()) {
|
|||
]);
|
||||
});
|
||||
} else {
|
||||
$handlers[] = new StreamHandler($docroot.'/logs/api.log', Monolog\Logger::ERROR);
|
||||
$handlers[] = new StreamHandler(base_dir().'/logs/api.log', Monolog\Logger::ERROR);
|
||||
}
|
||||
|
||||
// Sicurezza della sessioni
|
||||
ini_set('session.cookie_samesite', 'strict');
|
||||
ini_set('session.use_trans_sid', '0');
|
||||
ini_set('session.use_only_cookies', '1');
|
||||
|
||||
session_set_cookie_params(0, base_path(), null, isHTTPS(true));
|
||||
session_start();
|
||||
|
||||
// Disabilita i messaggi nativi di PHP
|
||||
ini_set('display_errors', 0);
|
||||
// Ignora gli avvertimenti e le informazioni relative alla deprecazione di componenti
|
||||
|
@ -144,13 +150,6 @@ $dbo = $database = database();
|
|||
|
||||
/* SESSIONE */
|
||||
if (!API\Response::isAPIRequest()) {
|
||||
// Sicurezza della sessioni
|
||||
ini_set('session.use_trans_sid', '0');
|
||||
ini_set('session.use_only_cookies', '1');
|
||||
|
||||
session_set_cookie_params(0, $rootdir, null, isHTTPS(true));
|
||||
session_start();
|
||||
|
||||
// Barra di debug (necessario per loggare tutte le query)
|
||||
if (App::debug()) {
|
||||
$debugbar = new DebugBar\DebugBar();
|
||||
|
@ -168,11 +167,11 @@ if (!API\Response::isAPIRequest()) {
|
|||
|
||||
/* INTERNAZIONALIZZAZIONE */
|
||||
// Istanziamento del gestore delle traduzioni del progetto
|
||||
$lang = !empty($config['lang']) ? $config['lang'] : $_GET['lang'];
|
||||
$lang = !empty($config['lang']) ? $config['lang'] : (isset($_GET['lang']) ? $_GET['lang'] : null);
|
||||
$formatter = !empty($config['formatter']) ? $config['formatter'] : [];
|
||||
$translator = trans();
|
||||
$translator->addLocalePath($docroot.'/locale');
|
||||
$translator->addLocalePath($docroot.'/modules/*/locale');
|
||||
$translator->addLocalePath(base_dir().'/locale');
|
||||
$translator->addLocalePath(base_dir().'/modules/*/locale');
|
||||
$translator->setLocale($lang, $formatter);
|
||||
|
||||
// Individuazione di versione e revisione del progetto
|
||||
|
@ -187,12 +186,12 @@ if (!empty($skip_permissions)) {
|
|||
Permissions::skip();
|
||||
}
|
||||
|
||||
if (!$continue && getURLPath() != slashes(ROOTDIR.'/index.php') && !Permissions::getSkip()) {
|
||||
if (!$continue && getURLPath() != slashes(base_path().'/index.php') && !Permissions::getSkip()) {
|
||||
if (Auth::check()) {
|
||||
Auth::logout();
|
||||
}
|
||||
|
||||
redirect(ROOTDIR.'/index.php');
|
||||
redirect(base_path().'/index.php');
|
||||
exit();
|
||||
}
|
||||
|
||||
|
@ -258,8 +257,8 @@ if (!API\Response::isAPIRequest()) {
|
|||
$plugin = Plugins::getCurrent();
|
||||
$structure = isset($plugin) ? $plugin : $module;
|
||||
|
||||
$id_module = $module['id'];
|
||||
$id_plugin = $plugin['id'];
|
||||
$id_module = $module ? $module['id'] : null;
|
||||
$id_plugin = $plugin ? $plugin['id'] : null;
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
|
|
10
cron.php
10
cron.php
|
@ -56,18 +56,18 @@ $pattern = '[%datetime%] %level_name%: %message% %context%'.PHP_EOL;
|
|||
$formatter = new Monolog\Formatter\LineFormatter($pattern);
|
||||
|
||||
$logger = new Logger('Tasks');
|
||||
$handler = new RotatingFileHandler(DOCROOT.'/logs/cron.log', 7);
|
||||
$handler = new RotatingFileHandler(base_dir().'/logs/cron.log', 7);
|
||||
$handler->setFormatter($formatter);
|
||||
$logger->pushHandler($handler);
|
||||
|
||||
// Lettura della cache
|
||||
$ultima_esecuzione = Cache::get('Ultima esecuzione del cron');
|
||||
$ultima_esecuzione = Cache::pool('Ultima esecuzione del cron');
|
||||
$data = $ultima_esecuzione->content;
|
||||
|
||||
$in_esecuzione = Cache::get('Cron in esecuzione');
|
||||
$cron_id = Cache::get('ID del cron');
|
||||
$in_esecuzione = Cache::pool('Cron in esecuzione');
|
||||
$cron_id = Cache::pool('ID del cron');
|
||||
|
||||
$disattiva = Cache::get('Disabilita cron');
|
||||
$disattiva = Cache::pool('Disabilita cron');
|
||||
if (!empty($disattiva->content)) {
|
||||
return;
|
||||
}
|
||||
|
|
28
editor.php
28
editor.php
|
@ -25,9 +25,9 @@ use Carbon\Carbon;
|
|||
$read_only = $structure->permission == 'r';
|
||||
|
||||
if (empty($id_record) && !empty($id_module) && empty($id_plugin)) {
|
||||
redirect(ROOTDIR.'/controller.php?id_module='.$id_module);
|
||||
redirect(base_path().'/controller.php?id_module='.$id_module);
|
||||
} elseif (empty($id_record) && empty($id_module) && empty($id_plugin)) {
|
||||
redirect(ROOTDIR.'/index.php');
|
||||
redirect(base_path().'/index.php');
|
||||
}
|
||||
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
@ -48,7 +48,7 @@ $has_access = !empty($query) ? $dbo->fetchNum($query) !== 0 : true;
|
|||
|
||||
if ($has_access) {
|
||||
// Inclusione gli elementi fondamentali
|
||||
include_once DOCROOT.'/actions.php';
|
||||
include_once base_dir().'/actions.php';
|
||||
}
|
||||
|
||||
if (empty($record) || !$has_access) {
|
||||
|
@ -61,7 +61,7 @@ if (empty($record) || !$has_access) {
|
|||
</h3>
|
||||
<br>
|
||||
|
||||
<a class="btn btn-default" href="'.ROOTDIR.'/controller.php?id_module='.$id_module.'">
|
||||
<a class="btn btn-default" href="'.base_path().'/controller.php?id_module='.$id_module.'">
|
||||
<i class="fa fa-chevron-left"></i> '.tr('Indietro').'
|
||||
</a>
|
||||
</div>';
|
||||
|
@ -145,7 +145,7 @@ if (empty($record) || !$has_access) {
|
|||
// Pulsanti di default
|
||||
echo '
|
||||
<div id="pulsanti">
|
||||
<a class="btn btn-warning" href="'.ROOTDIR.'/controller.php?id_module='.$id_module.'">
|
||||
<a class="btn btn-warning" href="'.base_path().'/controller.php?id_module='.$id_module.'">
|
||||
<i class="fa fa-chevron-left"></i> '.tr("Torna all'elenco").'
|
||||
</a>
|
||||
|
||||
|
@ -265,11 +265,11 @@ if (empty($record) || !$has_access) {
|
|||
});
|
||||
</script>';
|
||||
|
||||
if ($structure->permission != '-' && $structure->use_notes) {
|
||||
if ($structure->permission != '-' && $structure->use_notes && $user->gruppo != 'Clienti') {
|
||||
echo '
|
||||
<div id="tab_note" class="tab-pane">';
|
||||
|
||||
include DOCROOT.'/plugins/notes.php';
|
||||
include base_dir().'/plugins/notes.php';
|
||||
|
||||
echo '
|
||||
</div>';
|
||||
|
@ -279,7 +279,7 @@ if (empty($record) || !$has_access) {
|
|||
echo '
|
||||
<div id="tab_checks" class="tab-pane">';
|
||||
|
||||
include DOCROOT.'/plugins/checks.php';
|
||||
include base_dir().'/plugins/checks.php';
|
||||
|
||||
echo '
|
||||
</div>';
|
||||
|
@ -381,7 +381,7 @@ if (empty($record) || !$has_access) {
|
|||
|
||||
$id_plugin = $plugin['id'];
|
||||
|
||||
include DOCROOT.'/include/manager.php';
|
||||
include base_dir().'/include/manager.php';
|
||||
|
||||
echo '
|
||||
</div>';
|
||||
|
@ -402,7 +402,7 @@ echo '{( "name": "widgets", "id_module": "'.$id_module.'", "id_record": "'.$id_r
|
|||
if (!empty($record)) {
|
||||
echo '
|
||||
<hr>
|
||||
<a class="btn btn-default" href="'.ROOTDIR.'/controller.php?id_module='.$id_module.'">
|
||||
<a class="btn btn-default" href="'.base_path().'/controller.php?id_module='.$id_module.'">
|
||||
<i class="fa fa-chevron-left"></i> '.tr('Indietro').'
|
||||
</a>';
|
||||
}
|
||||
|
@ -421,6 +421,12 @@ if ($read_only || !empty($block_edit)) {
|
|||
$(".checkbox-buttons label", "section.content")'.$not.'.addClass("disabled");
|
||||
';
|
||||
|
||||
// Nascondo il plugin Note interne ai clienti
|
||||
if ($user->gruppo == 'Clienti') {
|
||||
echo '
|
||||
$("#link-tab_note").hide();';
|
||||
}
|
||||
|
||||
if ($read_only) {
|
||||
echo '
|
||||
$("a.btn, button, input[type=button], input[type=submit]", "section.content").hide();
|
||||
|
@ -474,7 +480,7 @@ if (!empty($advanced_sessions)) {
|
|||
?>
|
||||
|
||||
function getActiveUsers(){
|
||||
$.getJSON('<?php echo ROOTDIR; ?>/ajax.php?op=active_users', {
|
||||
$.getJSON('<?php echo base_path(); ?>/ajax.php?op=active_users', {
|
||||
id_module: <?php echo $id_module; ?>,
|
||||
id_record: <?php echo $id_record; ?>
|
||||
},
|
||||
|
|
|
@ -94,6 +94,7 @@ const JS = gulp.parallel(() => {
|
|||
'datatables.net-scroller/js/dataTables.scroller.js',
|
||||
'datatables.net-select/js/dataTables.select.js',
|
||||
'dropzone/dist/dropzone.js',
|
||||
'autonumeric/dist/autoNumeric.min.js',
|
||||
'eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js',
|
||||
'fullcalendar/dist/fullcalendar.js',
|
||||
'geocomplete/jquery.geocomplete.js',
|
||||
|
|
|
@ -78,21 +78,21 @@ if ($module['name'] != 'Contratti' && $module['name'] != 'Preventivi') {
|
|||
echo '
|
||||
<div class="row '.(!empty($options['nascondi_prezzi']) ? 'hidden' : '').'" id="prezzi_articolo">
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.ROOTDIR."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.base_path()."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
|
||||
<i class="fa fa-search"></i> '.tr('Ultimi prezzi di acquisto').'
|
||||
</button>
|
||||
<div id="prezziacquisto" class="hide"></div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.ROOTDIR."/ajax_complete.php?module=Articoli&op=getprezzi&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.base_path()."/ajax_complete.php?module=Articoli&op=getprezzi&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
|
||||
<i class="fa fa-search"></i> '.tr('Ultimi prezzi al cliente').'
|
||||
</button>
|
||||
<div id="prezzi" class="hide"></div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.ROOTDIR."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.base_path()."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
|
||||
<i class="fa fa-search"></i> '.tr('Ultimi prezzi di vendita').'
|
||||
</button>
|
||||
<div id="prezzivendita" class="hide"></div>
|
||||
|
|
|
@ -21,7 +21,7 @@ $result['id'] = isset($result['id']) ? $result['id'] : null;
|
|||
|
||||
// Form di inserimento riga documento
|
||||
echo '
|
||||
<form action="'.ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
|
||||
<form action="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
|
||||
<input type="hidden" name="id_plugin" value="'.$id_plugin.'">
|
||||
<input type="hidden" name="hash" value="tab_'.$id_plugin.'">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
|
|
@ -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 '
|
||||
<form action="'.$link.'" method="post">
|
||||
|
@ -246,6 +246,7 @@ echo '
|
|||
</div>
|
||||
|
||||
<table class="box-body table table-striped table-hover table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th width="10%">'.tr('Q.tà').'</th>
|
||||
|
@ -258,21 +259,25 @@ if (!empty($options['serials'])) {
|
|||
}
|
||||
|
||||
echo '
|
||||
</tr>';
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="righe_documento_importato">';
|
||||
|
||||
foreach ($righe as $i => $riga) {
|
||||
// Descrizione
|
||||
echo '
|
||||
<tr>
|
||||
<tr data-local_id="'.$i.'">
|
||||
<td>
|
||||
<span class="hidden" id="id_articolo_'.$i.'">'.$riga['idarticolo'].'</span>
|
||||
|
||||
<input type="hidden" id="prezzo_unitario_'.$i.'" name="subtot['.$riga['id'].']" value="'.$riga['prezzo_unitario'].'" />
|
||||
<input type="hidden" id="sconto_unitario_'.$i.'" name="sconto['.$riga['id'].']" value="'.$riga['sconto_unitario'].'" />
|
||||
<input type="hidden" id="iva_unitaria_'.$i.'" name="iva['.$riga['id'].']" value="'.$riga['iva_unitaria'].'" />
|
||||
<input type="hidden" id="qta_max_'.$i.'" value="'.($riga['qta_rimanente']).'" />';
|
||||
<input type="hidden" id="max_qta_'.$i.'" value="'.($riga['qta_rimanente']).'" />';
|
||||
|
||||
// Checkbox - da evadere?
|
||||
echo '
|
||||
<input type="checkbox" checked="checked" id="checked_'.$i.'" name="evadere['.$riga['id'].']" value="on" onclick="ricalcola_subtotale_riga('.$i.');" />';
|
||||
<input type="checkbox" checked="checked" id="checked_'.$i.'" name="evadere['.$riga['id'].']" value="on" onclick="ricalcolaTotaleRiga('.$i.');" />';
|
||||
|
||||
$descrizione = ($riga->isArticolo() ? $riga->articolo->codice.' - ' : '').$riga['descrizione'];
|
||||
|
||||
|
@ -290,7 +295,7 @@ foreach ($righe as $i => $riga) {
|
|||
// Q.tà da evadere
|
||||
echo '
|
||||
<td>
|
||||
{[ "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.');\"" ]}
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
|
@ -336,6 +341,8 @@ foreach ($righe as $i => $riga) {
|
|||
|
||||
// Totale
|
||||
echo '
|
||||
</tbody>
|
||||
|
||||
<tr>
|
||||
<td colspan="'.(!empty($options['serials']) ? 4 : 3).'" class="text-right">
|
||||
<b>'.tr('Totale').':</b>
|
||||
|
@ -347,6 +354,22 @@ echo '
|
|||
</table>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<div class="alert alert-warning hidden" id="articoli_sottoscorta">
|
||||
<table class="table table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>'.tr('Articolo').'</th>
|
||||
<th class="text-center tip" width="150" title="'.tr('Quantità richiesta').'">'.tr('Q.tà').'</th>
|
||||
<th class="text-center tip" width="150" title="'.tr('Quantità disponibile nel magazzino del gestionale').'">'.tr('Q.tà magazzino').'</th>
|
||||
<th class="text-center" width="150">'.tr('Scarto').'</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
|
||||
<!-- PULSANTI -->
|
||||
|
@ -362,73 +385,138 @@ echo '
|
|||
echo '
|
||||
<script>$(document).ready(init)</script>';
|
||||
|
||||
?>
|
||||
|
||||
echo '
|
||||
<script type="text/javascript">
|
||||
function ricalcola_subtotale_riga(r) {
|
||||
var prezzo_unitario = $("#prezzo_unitario_" + r).val();
|
||||
var sconto = $("#sconto_unitario_" + r).val();
|
||||
var iva = $("#iva_unitaria_" + r).val();
|
||||
';
|
||||
|
||||
var qta_max_input = $("#qta_max_" + r);
|
||||
var qta_max = qta_max_input.val() ? qta_max_input.val() : 0;
|
||||
$articoli = $documento->articoli->groupBy('idarticolo');
|
||||
$scorte = [];
|
||||
foreach ($articoli as $elenco) {
|
||||
$qta = $elenco->sum('qta');
|
||||
$articolo = $elenco->first()->articolo;
|
||||
|
||||
$descrizione_riga = $articolo->codice.' - '.$articolo->descrizione;
|
||||
$text = $articolo ? Modules::link('Articoli', $articolo->id, $descrizione_riga) : $descrizione_riga;
|
||||
|
||||
$scorte[$articolo->id] = [
|
||||
'qta' => $articolo->qta,
|
||||
'descrizione' => $text,
|
||||
];
|
||||
}
|
||||
|
||||
echo '
|
||||
var scorte = '.json_encode($scorte).';
|
||||
var abilita_scorte = '.intval(!$documento::$movimenta_magazzino && !empty($options['tipo_documento_finale']) && $options['tipo_documento_finale']::$movimenta_magazzino).';
|
||||
|
||||
function controllaMagazzino() {
|
||||
if(!abilita_scorte) return;
|
||||
|
||||
let righe = $("#righe_documento_importato tr");
|
||||
|
||||
// Lettura delle righe selezionate per l\'improtazione
|
||||
let richieste = {};
|
||||
for(const r of righe) {
|
||||
let riga = $(r);
|
||||
let id = $(riga).data("local_id");
|
||||
let id_articolo = riga.find("[id^=id_articolo_]").text();
|
||||
|
||||
if (!$("#checked_" + id).is(":checked") || !id_articolo) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let qta = parseFloat(riga.find("input[id^=qta_]").val());
|
||||
richieste[id_articolo] = richieste[id_articolo] ? richieste[id_articolo] + qta : qta;
|
||||
}
|
||||
|
||||
let sottoscorta = $("#articoli_sottoscorta");
|
||||
let body = sottoscorta.find("tbody");
|
||||
body.html("");
|
||||
|
||||
for(const id_articolo in richieste) {
|
||||
let qta_scorta = parseFloat(scorte[id_articolo]["qta"]);
|
||||
let qta_richiesta = parseFloat(richieste[id_articolo]);
|
||||
|
||||
if (qta_richiesta > qta_scorta) {
|
||||
body.append(`<tr>
|
||||
<td>` + scorte[id_articolo]["descrizione"] + `</td>
|
||||
<td class="text-right">` + qta_richiesta.toLocale() + `</td>
|
||||
<td class="text-right">` + qta_scorta.toLocale() + `</td>
|
||||
<td class="text-right">` + (qta_richiesta - qta_scorta).toLocale() + `</td>
|
||||
</tr>`);
|
||||
}
|
||||
}
|
||||
|
||||
if (body.html()) {
|
||||
sottoscorta.removeClass("hidden");
|
||||
} else {
|
||||
sottoscorta.addClass("hidden");
|
||||
}
|
||||
}
|
||||
|
||||
function ricalcolaTotaleRiga(r) {
|
||||
let prezzo_unitario = $("#prezzo_unitario_" + r).val();
|
||||
let sconto = $("#sconto_unitario_" + r).val();
|
||||
let iva = $("#iva_unitaria_" + r).val();
|
||||
|
||||
let max_qta_input = $("#max_qta_" + r);
|
||||
let qta_max = max_qta_input.val() ? max_qta_input.val() : 0;
|
||||
|
||||
prezzo_unitario = parseFloat(prezzo_unitario);
|
||||
sconto = parseFloat(sconto);
|
||||
iva = parseFloat(iva);
|
||||
qta_max = parseFloat(qta_max);
|
||||
|
||||
var prezzo_scontato = prezzo_unitario - sconto;
|
||||
let prezzo_scontato = prezzo_unitario - sconto;
|
||||
|
||||
var qta = $("#qta_" + r).val().toEnglish();
|
||||
let qta = $("#qta_" + r).val().toEnglish();
|
||||
|
||||
// Se inserisco una quantità da evadere maggiore di quella rimanente, la imposto al massimo possibile
|
||||
if (qta > qta_max) {
|
||||
qta = qta_max;
|
||||
|
||||
$('#qta_' + r).val(qta);
|
||||
$("#qta_" + r).val(qta);
|
||||
}
|
||||
|
||||
// Se tolgo la spunta della casella dell'evasione devo azzerare i conteggi
|
||||
if (isNaN(qta) || !$('#checked_' + r).is(':checked')) {
|
||||
// Se tolgo la spunta della casella dell\'evasione devo azzerare i conteggi
|
||||
if (isNaN(qta) || !$("#checked_" + r).is(":checked")) {
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
var serial_select = $("#serial_" + r);
|
||||
let serial_select = $("#serial_" + r);
|
||||
serial_select.selectClear();
|
||||
serial_select.select2("destroy");
|
||||
serial_select.data('maximum', qta);
|
||||
serial_select.data("maximum", qta);
|
||||
start_superselect();
|
||||
|
||||
var subtotale = (prezzo_scontato * qta + iva * qta).toLocale();
|
||||
let subtotale = (prezzo_scontato * qta + iva * qta).toLocale();
|
||||
|
||||
$("#subtotale_" + r).html(subtotale + " " + globals.currency);
|
||||
$("#subtotaledettagli_" + r).html((prezzo_scontato * qta).toLocale() + " + " + (iva * qta).toLocale());
|
||||
|
||||
ricalcola_totale();
|
||||
ricalcolaTotale();
|
||||
}
|
||||
|
||||
function ricalcola_totale() {
|
||||
var totale = 0.00;
|
||||
var totale_qta = 0;
|
||||
function ricalcolaTotale() {
|
||||
let totale = 0.00;
|
||||
let totale_qta = 0;
|
||||
|
||||
$('input[id*=qta_]').each(function() {
|
||||
var qta = $(this).val().toEnglish();
|
||||
var r = $(this).attr("id").replace("qta_", "");
|
||||
$("input[id*=qta_]").each(function() {
|
||||
let qta = $(this).val().toEnglish();
|
||||
let r = $(this).attr("id").replace("qta_", "");
|
||||
|
||||
if (!$("#checked_" + r).is(":checked") || isNaN(qta)) {
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
var prezzo_unitario = $("#prezzo_unitario_" + r).val();
|
||||
var sconto = $("#sconto_unitario_" + r).val();
|
||||
var iva = $("#iva_unitaria_" + r).val();
|
||||
let prezzo_unitario = $("#prezzo_unitario_" + r).val();
|
||||
let sconto = $("#sconto_unitario_" + r).val();
|
||||
let iva = $("#iva_unitaria_" + r).val();
|
||||
|
||||
prezzo_unitario = parseFloat(prezzo_unitario);
|
||||
sconto = parseFloat(sconto);
|
||||
iva = parseFloat(iva);
|
||||
|
||||
var prezzo_scontato = prezzo_unitario - sconto;
|
||||
let prezzo_scontato = prezzo_unitario - sconto;
|
||||
|
||||
if(prezzo_scontato) {
|
||||
totale += prezzo_scontato * qta + iva * qta;
|
||||
|
@ -437,20 +525,20 @@ echo '
|
|||
totale_qta += qta;
|
||||
});
|
||||
|
||||
$('#totale').html((totale.toLocale()) + " " + globals.currency);
|
||||
|
||||
<?php
|
||||
$("#totale").html((totale.toLocale()) + " " + globals.currency);';
|
||||
|
||||
if (empty($options['allow-empty'])) {
|
||||
echo '
|
||||
if (totale_qta > 0)
|
||||
if (totale_qta > 0) {
|
||||
$("#submit_btn").show();
|
||||
else
|
||||
$("#submit_btn").hide();';
|
||||
} else {
|
||||
$("#submit_btn").hide();
|
||||
}';
|
||||
}
|
||||
|
||||
?>
|
||||
echo '
|
||||
controllaMagazzino();
|
||||
}
|
||||
|
||||
ricalcola_totale();
|
||||
</script>
|
||||
ricalcolaTotale();
|
||||
</script>';
|
||||
|
|
|
@ -33,7 +33,7 @@ echo '
|
|||
// Quantità
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$result['qta'].'", "decimals": "qta"'.(isset($result['max_qta']) ? ', "icon-after": "<span class=\"tip\" title=\"'.tr("L'elemento è collegato a un documento: la quantità massima ammessa è relativa allo stato di evasione dell'elemento nel documento di origine (quantità dell'elemento / quantità massima ammessa)").'\">/ '.numberFormat($result['max_qta'], 'qta').' <i class=\"fa fa-question-circle-o\"></i></span>"' : '').', "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": "<span class=\"tip\" title=\"'.tr("L'elemento è collegato a un documento: la quantità massima ammessa è relativa allo stato di evasione dell'elemento nel documento di origine (quantità dell'elemento / quantità massima ammessa)").'\">/ '.numberFormat($result['max_qta'], 'qta').' <i class=\"fa fa-question-circle-o\"></i></span>"' : '').', "min-value": "'.$result['qta_evasa'].'" ]}
|
||||
</div>';
|
||||
|
||||
// Unità di misura
|
||||
|
|
|
@ -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) {
|
|||
<p>'.tr('Sembra che non ci siano i permessi di scrittura sul file _FILE_', [
|
||||
'_FILE_' => '<b>config.inc.php</b>',
|
||||
]).'</p>
|
||||
<form action="'.$rootdir.'/index.php?action=updateconfig&firstuse=true" method="post">
|
||||
<form action="'.base_path().'/index.php?action=updateconfig&firstuse=true" method="post">
|
||||
<div class="hide">
|
||||
<input type="hidden" name="db_name" value="'.$db_name.'">
|
||||
<input type="hidden" name="db_password" value="'.$db_password.'">
|
||||
<input type="hidden" name="db_username" value="'.$db_username.'">;
|
||||
<input type="hidden" name="db_host" value="'.$db_host.'">
|
||||
</div>
|
||||
<a class="btn btn-warning" href="'.$rootdir.'/index.php"><i class="fa fa-arrow-left"></i> '.tr('Torna indietro').'</a>
|
||||
<a class="btn btn-warning" href="'.base_path().'/index.php"><i class="fa fa-arrow-left"></i> '.tr('Torna indietro').'</a>
|
||||
<button class="btn btn-info"><i class="fa fa-repeat"></i> '.tr('Riprova').'</button>
|
||||
</form>
|
||||
<hr>
|
||||
|
@ -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()) {
|
|||
<div class="box-body">
|
||||
<p>'.tr("Si è verificato un'errore durante la connessione al database").'.</p>
|
||||
<p>'.tr('Controllare di aver inserito correttamente i dati di accesso, e che il database atto ad ospitare i dati del gestionale sia esistente').'.</p>
|
||||
<a class="btn btn-info" href="'.$rootdir.'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
|
||||
<a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
@ -240,7 +240,7 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
|||
'_FILE_' => '<b>config.inc.php</b>',
|
||||
]).'.</p>
|
||||
<p>'.tr("Nel caso il problema persista, rivolgersi all'assistenza ufficiale").'.</p>
|
||||
<a class="btn btn-info" href="'.$rootdir.'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
|
||||
<a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
@ -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,
|
||||
},
|
||||
|
|
|
@ -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) {
|
|||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "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 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "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" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "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 ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -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('</form>', '', $anagrafica);
|
||||
|
@ -258,7 +258,7 @@ echo '
|
|||
$("button[type=submit]").not("#config").remove();
|
||||
});
|
||||
</script>
|
||||
<script src="'.$rootdir.'/lib/functions.js"></script>
|
||||
<script src="'.base_path().'/lib/functions.js"></script>
|
||||
<script>$(document).ready(init)</script>';
|
||||
|
||||
include_once App::filepath('include|custom|', 'bottom.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,
|
||||
|
|
|
@ -104,7 +104,7 @@ if (filter('action') == 'do_update') {
|
|||
}
|
||||
|
||||
echo '
|
||||
<a class="btn btn-success btn-block" href="'.ROOTDIR.'">
|
||||
<a class="btn btn-success btn-block" href="'.base_path().'">
|
||||
<i class="fa fa-check"></i> '.tr('Continua').'
|
||||
</a>';
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ if (filter('action') == 'do_update') {
|
|||
<div class="box-body">
|
||||
<p>'.tr("E' attualmente in corso la procedura di aggiornamento del software, e pertanto siete pregati di attendere fino alla sua conclusione").'.</p>
|
||||
<p>'.tr("Nel caso il problema persista, rivolgersi all'amministratore o all'assistenza ufficiale").'.</p>
|
||||
<a class="btn btn-info" href="'.$rootdir.'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
|
||||
<a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
|
@ -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) {
|
||||
|
|
|
@ -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)).'"';
|
||||
|
|
|
@ -48,7 +48,7 @@ echo '
|
|||
</div>';
|
||||
|
||||
$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) {
|
||||
|
|
|
@ -55,7 +55,7 @@ if (!$riferimenti->isEmpty()) {
|
|||
'.$riferimento->target->descrizione.'
|
||||
|
||||
<br>
|
||||
<small>'.reference($riferimento->target->parent).'</small>
|
||||
<small>'.reference($riferimento->target->getDocument()).'</small>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace Common\Components;
|
||||
|
||||
use Common\RowReference;
|
||||
|
||||
trait MorphTrait
|
||||
{
|
||||
protected $original_model = null;
|
||||
|
||||
public function hasOriginal()
|
||||
{
|
||||
return !empty($this->original_type) && !empty($this->getOriginal());
|
||||
}
|
||||
|
||||
public function getOriginal()
|
||||
{
|
||||
if (!isset($this->original_model) && !empty($this->original_type)) {
|
||||
$class = $this->original_type;
|
||||
|
||||
$this->original_model = $class::find($this->original_id);
|
||||
}
|
||||
|
||||
return $this->original_model;
|
||||
}
|
||||
|
||||
public function referenceSources()
|
||||
{
|
||||
$class = get_class($this);
|
||||
|
||||
return $this->hasMany(RowReference::class, 'target_id')
|
||||
->where('target_type', $class);
|
||||
}
|
||||
|
||||
public function referenceTargets()
|
||||
{
|
||||
$class = get_class($this);
|
||||
|
||||
return $this->hasMany(RowReference::class, 'source_id')
|
||||
->where('source_type', $class);
|
||||
}
|
||||
}
|
|
@ -38,9 +38,9 @@ echo '<!DOCTYPE html>
|
|||
|
||||
<link href="'.$paths['img'].'/favicon.png" rel="icon" type="image/x-icon" />';
|
||||
|
||||
if (file_exists(DOCROOT.'/manifest.json')) {
|
||||
if (file_exists(base_dir().'/manifest.json')) {
|
||||
echo '
|
||||
<link rel="manifest" href="'.ROOTDIR.'/manifest.json">';
|
||||
<link rel="manifest" href="'.base_path().'/manifest.json">';
|
||||
}
|
||||
|
||||
// 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 '
|
||||
<script>
|
||||
globals = {
|
||||
rootdir: "'.$rootdir.'",
|
||||
rootdir: "'.base_path().'",
|
||||
|
||||
search: {},
|
||||
translations: {
|
||||
|
@ -289,7 +289,8 @@ if (Auth::check()) {
|
|||
}
|
||||
}
|
||||
|
||||
$hide_sidebar = Auth::check() && (setting('Nascondere la barra sinistra di default') or $_SESSION['settings']['sidebar-collapse']);
|
||||
$settings_collapse = session_get('settings.sidebar-collapse') ? 1 : 0;
|
||||
$hide_sidebar = Auth::check() && (setting('Nascondere la barra sinistra di default') || $settings_collapse);
|
||||
echo '
|
||||
|
||||
</head>
|
||||
|
@ -298,7 +299,7 @@ echo '
|
|||
<div class="'.(!Auth::check() ? '' : 'wrapper').'">';
|
||||
|
||||
if (Auth::check()) {
|
||||
$calendar = ($_SESSION['period_start'] != date('Y').'-01-01' || $_SESSION['period_end'] != date('Y').'-12-31') ? 'red' : 'white';
|
||||
$calendar_color_label = ($_SESSION['period_start'] != date('Y').'-01-01' || $_SESSION['period_end'] != date('Y').'-12-31') ? 'danger' : 'default';
|
||||
|
||||
echo '
|
||||
<!-- Loader principale -->
|
||||
|
@ -337,11 +338,11 @@ if (Auth::check()) {
|
|||
<!-- Navbar Left Menu -->
|
||||
<div class="navbar-left hidden-xs">
|
||||
<ul class="nav navbar-nav hidden-xs">
|
||||
<li><a href="#" id="daterange" style="color:'.$calendar.';" role="button" >
|
||||
<li><a href="#" id="daterange" role="button" >
|
||||
<i class="fa fa-calendar" style="color:inherit"></i> <i class="fa fa-caret-down" style="color:inherit"></i>
|
||||
</a></li>
|
||||
|
||||
<li><a style="color:'.$calendar.';background:inherit;cursor:default;">
|
||||
<li><a style="cursor:default;padding:0px;padding-right:5px;padding-left:5px;margin-top:15px;" class="label label-'.$calendar_color_label.'">
|
||||
'.Translator::dateToLocale($_SESSION['period_start']).' - '.Translator::dateToLocale($_SESSION['period_end']).'
|
||||
</a></li>
|
||||
</ul>
|
||||
|
@ -372,19 +373,19 @@ if (Auth::check()) {
|
|||
<i class="fa fa-print"></i>
|
||||
</a></li>
|
||||
|
||||
<li><a href="'.$rootdir.'/bug.php" class="tip nav-button" title="'.tr('Segnalazione bug').'">
|
||||
<li><a href="'.base_path().'/bug.php" class="tip nav-button" title="'.tr('Segnalazione bug').'">
|
||||
<i class="fa fa-bug"></i>
|
||||
</a></li>
|
||||
|
||||
<li><a href="'.$rootdir.'/log.php" class="tip nav-button" title="'.tr('Log accessi').'">
|
||||
<li><a href="'.base_path().'/log.php" class="tip nav-button" title="'.tr('Log accessi').'">
|
||||
<i class="fa fa-book"></i>
|
||||
</a></li>
|
||||
|
||||
<li><a href="'.$rootdir.'/info.php" class="tip nav-button" title="'.tr('Informazioni').'">
|
||||
<li><a href="'.base_path().'/info.php" class="tip nav-button" title="'.tr('Informazioni').'">
|
||||
<i class="fa fa-info"></i>
|
||||
</a></li>
|
||||
|
||||
<li><a href="'.$rootdir.'/index.php?op=logout" onclick="sessionStorage.clear()" class="bg-red tip" title="'.tr('Esci').'">
|
||||
<li><a href="'.base_path().'/index.php?op=logout" onclick="sessionStorage.clear()" class="bg-red tip" title="'.tr('Esci').'">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a></li>
|
||||
</ul>
|
||||
|
@ -399,13 +400,13 @@ if (Auth::check()) {
|
|||
<!-- Sidebar user panel -->
|
||||
<div class="user-panel text-center info" style="height: 60px">
|
||||
<div class="info">
|
||||
<p><a href="'.$rootdir.'/modules/utenti/info.php">
|
||||
<p><a href="'.base_path().'/modules/utenti/info.php">
|
||||
'.$user['username'].'
|
||||
</a></p>
|
||||
<p id="datetime"></p>
|
||||
</div>
|
||||
|
||||
<a class="image" href="'.$rootdir.'/modules/utenti/info.php">';
|
||||
<a class="image" href="'.base_path().'/modules/utenti/info.php">';
|
||||
|
||||
$user_photo = $user->photo;
|
||||
if ($user_photo) {
|
||||
|
@ -520,10 +521,16 @@ if (Auth::check()) {
|
|||
<div class="col-md-12">';
|
||||
|
||||
// Eventuale messaggio personalizzato per l'installazione corrente
|
||||
include_once App::filepath('include/custom/extra', 'extra.php');
|
||||
$extra_file = App::filepath('include/custom/extra', 'extra.php');
|
||||
if ($extra_file) {
|
||||
include_once $extra_file;
|
||||
}
|
||||
} else {
|
||||
// Eventuale messaggio personalizzato per l'installazione corrente
|
||||
include_once App::filepath('include/custom/extra', 'login.php');
|
||||
$extra_file = App::filepath('include/custom/extra', 'login.php');
|
||||
if ($extra_file) {
|
||||
include_once $extra_file;
|
||||
}
|
||||
|
||||
if (!empty($messages['info']) || !empty($messages['warning']) || !empty($messages['error'])) {
|
||||
echo '
|
||||
|
|
16
index.php
16
index.php
|
@ -38,7 +38,7 @@ switch ($op) {
|
|||
|
||||
flash()->error(Auth::getStatus()[$status]['message']);
|
||||
|
||||
redirect(ROOTDIR.'/index.php');
|
||||
redirect(base_path().'/index.php');
|
||||
exit();
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ switch ($op) {
|
|||
case 'logout':
|
||||
Auth::logout();
|
||||
|
||||
redirect(ROOTDIR.'/index.php');
|
||||
redirect(base_path().'/index.php');
|
||||
exit();
|
||||
|
||||
break;
|
||||
|
@ -57,21 +57,21 @@ if (Auth::check() && isset($dbo) && $dbo->isConnected() && $dbo->isInstalled())
|
|||
$module = Auth::firstModule();
|
||||
|
||||
if (!empty($module)) {
|
||||
redirect(ROOTDIR.'/controller.php?id_module='.$module);
|
||||
redirect(base_path().'/controller.php?id_module='.$module);
|
||||
} else {
|
||||
redirect(ROOTDIR.'/index.php?op=logout');
|
||||
redirect(base_path().'/index.php?op=logout');
|
||||
}
|
||||
exit();
|
||||
}
|
||||
|
||||
// Procedura di installazione
|
||||
include_once $docroot.'/include/init/configuration.php';
|
||||
include_once base_dir().'/include/init/configuration.php';
|
||||
|
||||
// Procedura di aggiornamento
|
||||
include_once $docroot.'/include/init/update.php';
|
||||
include_once base_dir().'/include/init/update.php';
|
||||
|
||||
// Procedura di inizializzazione
|
||||
include_once $docroot.'/include/init/init.php';
|
||||
include_once base_dir().'/include/init/init.php';
|
||||
|
||||
$pageTitle = tr('Login');
|
||||
|
||||
|
@ -150,7 +150,7 @@ echo' required>
|
|||
{[ "type": "password", "name": "password", "autocomplete": "current-password", "placeholder": "'.tr('Password').'", "icon-before": "<i class=\"fa fa-lock\"></i>" ]}
|
||||
|
||||
<div class="text-right">
|
||||
<small><a href="'.ROOTDIR.'/reset.php">'.tr('Password dimenticata?').'</a></small>
|
||||
<small><a href="'.base_path().'/reset.php">'.tr('Password dimenticata?').'</a></small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
4
info.php
4
info.php
|
@ -37,8 +37,8 @@ echo '
|
|||
|
||||
<div class="box-body">';
|
||||
|
||||
if (file_exists($docroot.'/assistenza.php')) {
|
||||
include $docroot.'/assistenza.php';
|
||||
if (file_exists(base_dir().'/assistenza.php')) {
|
||||
include base_dir().'/assistenza.php';
|
||||
} else {
|
||||
echo '
|
||||
<div class="row">
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
*
|
||||
* @since 2.4.2
|
||||
*/
|
||||
use Common\Components\Accounting;
|
||||
|
||||
/**
|
||||
* Esegue una somma precisa tra due interi/array.
|
||||
|
@ -113,7 +114,7 @@ function orderValue($table, $field, $id)
|
|||
*
|
||||
* @return string|null
|
||||
*/
|
||||
function discountInfo(\Common\Components\Row $riga, $mostra_maggiorazione = true)
|
||||
function discountInfo(Accounting $riga, $mostra_maggiorazione = true)
|
||||
{
|
||||
if (empty($riga->sconto_unitario) || (!$mostra_maggiorazione && $riga->sconto_unitario < 0)) {
|
||||
return null;
|
||||
|
|
|
@ -17,11 +17,13 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
/*
|
||||
* Funzioni fondamentali per il corretto funzionamento del nucleo del progetto.
|
||||
*
|
||||
* @since 2.3
|
||||
*/
|
||||
|
||||
use HTMLBuilder\HTMLBuilder;
|
||||
use Models\OperationLog;
|
||||
|
||||
/**
|
||||
|
@ -62,7 +64,7 @@ function sanitizeFilename($filename)
|
|||
/**
|
||||
* Elimina i file indicati.
|
||||
*
|
||||
* @param array $files
|
||||
* @param array|string $files
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
@ -213,8 +215,10 @@ function translateTemplate()
|
|||
$id_record = filter('id_record');
|
||||
$id_parent = filter('id_parent');
|
||||
|
||||
$id_module = Modules::getCurrent()['id'];
|
||||
$id_plugin = Plugins::getCurrent()['id'];
|
||||
$module = Modules::getCurrent();
|
||||
$plugin = Plugins::getCurrent();
|
||||
$id_module = $module ? $module['id'] : null;
|
||||
$id_plugin = $plugin ? $plugin['id'] : null;
|
||||
|
||||
$template = ob_get_clean();
|
||||
|
||||
|
@ -225,7 +229,7 @@ function translateTemplate()
|
|||
];
|
||||
|
||||
$template = replace($template, $replaces);
|
||||
$template = \HTMLBuilder\HTMLBuilder::replace($template);
|
||||
$template = HTMLBuilder::replace($template);
|
||||
$template = replace($template, $replaces);
|
||||
|
||||
// Informazioni estese sulle azioni dell'utente
|
||||
|
@ -308,9 +312,9 @@ function redirectOperation($id_module, $id_record)
|
|||
$hash = $hash == '#tab_0' ? '' : $hash;
|
||||
|
||||
if ($backto == 'record-edit') {
|
||||
redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.$hash);
|
||||
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.$hash);
|
||||
} elseif ($backto == 'record-list') {
|
||||
redirect(ROOTDIR.'/controller.php?id_module='.$id_module.$hash);
|
||||
redirect(base_path().'/controller.php?id_module='.$id_module.$hash);
|
||||
}
|
||||
|
||||
exit();
|
||||
|
@ -358,7 +362,7 @@ function getURLPath()
|
|||
if (substr($path, 0, strlen($prefix)) == $prefix) {
|
||||
$path = substr($path, strlen($prefix));
|
||||
} else {
|
||||
$path = str_replace(DOCROOT, ROOTDIR, $path);
|
||||
$path = str_replace(base_dir(), base_path(), $path);
|
||||
}
|
||||
|
||||
return slashes($path);
|
||||
|
@ -406,3 +410,86 @@ function check_query($query)
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il valore corrente di un parametro della sessione.
|
||||
*
|
||||
* @param string $name Nome del parametro in dot-notation
|
||||
* @param mixed|null $default
|
||||
*
|
||||
* @return array|mixed|null
|
||||
*/
|
||||
function session_get($name, $default = null)
|
||||
{
|
||||
$session = &$_SESSION;
|
||||
if (empty($name)) {
|
||||
return $default;
|
||||
}
|
||||
|
||||
$pieces = explode('.', $name);
|
||||
foreach ($pieces as $piece) {
|
||||
if (!isset($session[$piece])) {
|
||||
return $default;
|
||||
}
|
||||
|
||||
$session = &$session[$piece];
|
||||
}
|
||||
|
||||
return isset($session) ? $session : $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Imposta un parametro nella sessione secondo un nome indicato.
|
||||
*
|
||||
* @param string $name Nome del parametro in dot-notation
|
||||
* @param mixed $value Valore da impostare
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function session_set($name, $value)
|
||||
{
|
||||
$session = &$_SESSION;
|
||||
|
||||
if (!empty($name)) {
|
||||
$pieces = explode('.', $name);
|
||||
foreach ($pieces as $piece) {
|
||||
if (!isset($session[$piece])) {
|
||||
$session[$piece] = [];
|
||||
}
|
||||
|
||||
$session = &$session[$piece];
|
||||
}
|
||||
}
|
||||
|
||||
$session = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce l'URL completo per il gestionale.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function base_url()
|
||||
{
|
||||
return App::$baseurl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce l'URL parziale per il gestionale.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function base_path()
|
||||
{
|
||||
return App::$rootdir;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il percorso per la cartella principale del gestionale.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function base_dir()
|
||||
{
|
||||
return App::$docroot;
|
||||
}
|
||||
|
|
1154
locale/catalog.pot
1154
locale/catalog.pot
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -33,14 +33,14 @@ switch (filter('op')) {
|
|||
}
|
||||
|
||||
// Salvataggio della versione nella cache
|
||||
Cache::get('Ultima versione di OpenSTAManager disponibile')->set($versione);
|
||||
Cache::pool('Ultima versione di OpenSTAManager disponibile')->set($versione);
|
||||
|
||||
echo $versione;
|
||||
|
||||
break;
|
||||
|
||||
case 'upload':
|
||||
include DOCROOT.'/modules/aggiornamenti/upload_modules.php';
|
||||
include base_dir().'/modules/aggiornamenti/upload_modules.php';
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ $(document).ready(function () {
|
|||
return;
|
||||
}
|
||||
|
||||
$contents = file_get_contents(DOCROOT.'/checksum.json');
|
||||
$contents = file_get_contents(base_dir().'/checksum.json');
|
||||
$checksum = json_decode($contents);
|
||||
|
||||
if (empty($checksum)) {
|
||||
|
@ -66,7 +66,7 @@ if (empty($checksum)) {
|
|||
// Controllo degli errori
|
||||
$errors = [];
|
||||
foreach ($checksum as $file => $md5) {
|
||||
$verifica = md5_file(DOCROOT.'/'.$file);
|
||||
$verifica = md5_file(base_dir().'/'.$file);
|
||||
if ($verifica != $md5) {
|
||||
$errors[] = $file;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ $(document).ready(function () {
|
|||
return;
|
||||
}
|
||||
|
||||
$contents = file_get_contents(DOCROOT.'/database.json');
|
||||
$contents = file_get_contents(base_dir().'/database.json');
|
||||
$data = json_decode($contents, true);
|
||||
|
||||
if (empty($data)) {
|
||||
|
|
|
@ -174,7 +174,7 @@ function search(button) {
|
|||
</h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<form action="'.ROOTDIR.'/controller.php?id_module='.$id_module.'" method="post" enctype="multipart/form-data" id="update">
|
||||
<form action="'.base_path().'/controller.php?id_module='.$id_module.'" method="post" enctype="multipart/form-data" id="update">
|
||||
<input type="hidden" name="op" value="upload">
|
||||
|
||||
{[ "type": "file", "name": "blob", "required": 1, "accept": ".zip" ]}
|
||||
|
@ -236,7 +236,7 @@ echo '
|
|||
<div>
|
||||
<h3>'.tr('Requisiti').'</h3>';
|
||||
|
||||
include DOCROOT.'/include/init/requirements.php';
|
||||
include base_dir().'/include/init/requirements.php';
|
||||
|
||||
echo '
|
||||
|
||||
|
|
|
@ -34,9 +34,9 @@ function customStructure()
|
|||
|
||||
// Controlli di personalizzazione fisica
|
||||
foreach ($dirs as $dir) {
|
||||
$files = glob(DOCROOT.'/'.$dir.'/*/custom/*.{php,html}', GLOB_BRACE);
|
||||
$files = glob(base_dir().'/'.$dir.'/*/custom/*.{php,html}', GLOB_BRACE);
|
||||
foreach ($files as $file) {
|
||||
$file = str_replace(DOCROOT.'/', '', $file);
|
||||
$file = str_replace(base_dir().'/', '', $file);
|
||||
$result = explode('/custom/', $file)[0];
|
||||
|
||||
if (!in_array($result, $results)) {
|
||||
|
@ -44,9 +44,9 @@ function customStructure()
|
|||
}
|
||||
}
|
||||
|
||||
$files = glob(DOCROOT.'/'.$dir.'/*/custom/src/*.{php,html}', GLOB_BRACE);
|
||||
$files = glob(base_dir().'/'.$dir.'/*/custom/src/*.{php,html}', GLOB_BRACE);
|
||||
foreach ($files as $file) {
|
||||
$file = str_replace(DOCROOT.'/', '', $file);
|
||||
$file = str_replace(base_dir().'/', '', $file);
|
||||
$result = explode('/custom/', $file)[0];
|
||||
|
||||
if (!in_array($result, $results)) {
|
||||
|
@ -54,9 +54,9 @@ function customStructure()
|
|||
}
|
||||
}
|
||||
|
||||
$files = glob(DOCROOT.'/'.$dir.'/*/custom/src/Components/*.{php,html}', GLOB_BRACE);
|
||||
$files = glob(base_dir().'/'.$dir.'/*/custom/src/Components/*.{php,html}', GLOB_BRACE);
|
||||
foreach ($files as $file) {
|
||||
$file = str_replace(DOCROOT.'/', '', $file);
|
||||
$file = str_replace(base_dir().'/', '', $file);
|
||||
$result = explode('/custom/', $file)[0];
|
||||
|
||||
if (!in_array($result, $results)) {
|
||||
|
@ -64,9 +64,9 @@ function customStructure()
|
|||
}
|
||||
}
|
||||
|
||||
$files = glob(DOCROOT.'/'.$dir.'/*/custom/src/API/*.{php,html}', GLOB_BRACE);
|
||||
$files = glob(base_dir().'/'.$dir.'/*/custom/src/API/*.{php,html}', GLOB_BRACE);
|
||||
foreach ($files as $file) {
|
||||
$file = str_replace(DOCROOT.'/', '', $file);
|
||||
$file = str_replace(base_dir().'/', '', $file);
|
||||
$result = explode('/custom/', $file)[0];
|
||||
|
||||
if (!in_array($result, $results)) {
|
||||
|
@ -74,9 +74,9 @@ function customStructure()
|
|||
}
|
||||
}
|
||||
|
||||
$files = glob(DOCROOT.'/'.$dir.'/*/custom/ajax/*.{php,html}', GLOB_BRACE);
|
||||
$files = glob(base_dir().'/'.$dir.'/*/custom/ajax/*.{php,html}', GLOB_BRACE);
|
||||
foreach ($files as $file) {
|
||||
$file = str_replace(DOCROOT.'/', '', $file);
|
||||
$file = str_replace(base_dir().'/', '', $file);
|
||||
$result = explode('/custom/', $file)[0];
|
||||
|
||||
if (!in_array($result, $results)) {
|
||||
|
@ -84,9 +84,9 @@ function customStructure()
|
|||
}
|
||||
}
|
||||
|
||||
$files = glob(DOCROOT.'/'.$dir.'/*/custom/widgets/*.{php,html}', GLOB_BRACE);
|
||||
$files = glob(base_dir().'/'.$dir.'/*/custom/widgets/*.{php,html}', GLOB_BRACE);
|
||||
foreach ($files as $file) {
|
||||
$file = str_replace(DOCROOT.'/', '', $file);
|
||||
$file = str_replace(base_dir().'/', '', $file);
|
||||
$result = explode('/custom/', $file)[0];
|
||||
|
||||
if (!in_array($result, $results)) {
|
||||
|
@ -105,7 +105,7 @@ function customStructure()
|
|||
*/
|
||||
function customTables()
|
||||
{
|
||||
$tables = include DOCROOT.'/update/tables.php';
|
||||
$tables = include base_dir().'/update/tables.php';
|
||||
|
||||
$names = [];
|
||||
foreach ($tables as $table) {
|
||||
|
|
|
@ -49,7 +49,7 @@ class UpdateHook extends CachedManager
|
|||
}
|
||||
|
||||
$module = Modules::get('Aggiornamenti');
|
||||
$link = ROOTDIR.'/controller.php?id_module='.$module->id;
|
||||
$link = base_path().'/controller.php?id_module='.$module->id;
|
||||
|
||||
$message = tr("E' disponibile la versione _VERSION_ del gestionale", [
|
||||
'_VERSION_' => $update,
|
||||
|
|
|
@ -38,13 +38,13 @@ $extraction_dir = Zip::extract($_FILES['blob']['tmp_name']);
|
|||
// Aggiornamento del progetto
|
||||
if (file_exists($extraction_dir.'/VERSION')) {
|
||||
// Salva il file di configurazione
|
||||
$config = file_get_contents($docroot.'/config.inc.php');
|
||||
$config = file_get_contents(base_dir().'/config.inc.php');
|
||||
|
||||
// Copia i file dalla cartella temporanea alla root
|
||||
copyr($extraction_dir, $docroot);
|
||||
copyr($extraction_dir, base_dir());
|
||||
|
||||
// Ripristina il file di configurazione dell'installazione
|
||||
file_put_contents($docroot.'/config.inc.php', $config);
|
||||
file_put_contents(base_dir().'/config.inc.php', $config);
|
||||
} else {
|
||||
$finder = Symfony\Component\Finder\Finder::create()
|
||||
->files()
|
||||
|
@ -83,7 +83,7 @@ if (file_exists($extraction_dir.'/VERSION')) {
|
|||
}
|
||||
|
||||
// Copia dei file nella cartella relativa
|
||||
copyr(dirname($file->getRealPath()), $docroot.'/'.$directory.'/'.$info['directory']);
|
||||
copyr(dirname($file->getRealPath()), base_dir().'/'.$directory.'/'.$info['directory']);
|
||||
|
||||
// Eventuale registrazione nel database
|
||||
if (empty($installed)) {
|
||||
|
@ -110,4 +110,4 @@ if (file_exists($extraction_dir.'/VERSION')) {
|
|||
delete($extraction_dir);
|
||||
|
||||
// Redirect
|
||||
redirect(ROOTDIR.'/editor.php?id_module='.$id_module);
|
||||
redirect(base_path().'/editor.php?id_module='.$id_module);
|
||||
|
|
|
@ -196,7 +196,7 @@ switch (post('op')) {
|
|||
// Se ad aggiungere un cliente è un agente, lo imposto come agente di quel cliente
|
||||
// Lettura tipologia dell'utente loggato
|
||||
$agente_is_logged = false;
|
||||
|
||||
if (!empty($user['idanagrafica'])) {
|
||||
$rs = $dbo->fetchArray('SELECT descrizione FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica = an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica = '.prepare($user['idanagrafica']));
|
||||
|
||||
for ($i = 0; $i < count($rs); ++$i) {
|
||||
|
@ -205,6 +205,7 @@ switch (post('op')) {
|
|||
$i = count($rs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$idagente = ($agente_is_logged && in_array($id_cliente, $idtipoanagrafica)) ? $user['idanagrafica'] : 0;
|
||||
|
||||
|
|
|
@ -67,7 +67,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['ragione_sociale'];
|
||||
$result['title'] .= !empty($r['deleted_at']) ? ' <small class="text-danger"><em>('.tr('eliminata').')</em></small>' : '';
|
||||
$result['category'] = 'Anagrafiche';
|
||||
|
@ -114,7 +114,7 @@ $plugin = $dbo->fetchArray("SELECT id FROM zz_plugins WHERE name='Referenti'");
|
|||
foreach ($rs as $r) {
|
||||
$result = [];
|
||||
|
||||
$result['link'] = ROOTDIR.'/editor.php?id_module='.$link_id.'&id_record='.$r['id'].'#tab_'.$plugin[0]['id'];
|
||||
$result['link'] = base_path().'/editor.php?id_module='.$link_id.'&id_record='.$r['id'].'#tab_'.$plugin[0]['id'];
|
||||
$result['title'] = $r['nome'];
|
||||
$result['category'] = 'Referenti';
|
||||
|
||||
|
|
|
@ -65,6 +65,8 @@ switch (post('op')) {
|
|||
break;
|
||||
}
|
||||
|
||||
$operations = [];
|
||||
|
||||
if (App::debug()) {
|
||||
$operations['delete-bulk'] = [
|
||||
'text' => '<span><i class="fa fa-trash"></i> '.tr('Elimina selezionati').'</span>',
|
||||
|
|
|
@ -47,6 +47,7 @@ if (!$is_cliente) {
|
|||
}
|
||||
}
|
||||
|
||||
$nazione_anagrafica = $anagrafica->sedeLegale->nazione;
|
||||
?>
|
||||
|
||||
<form action="" method="post" id="edit-form" autocomplete="<?php echo setting('Autocompletamento form'); ?>" >
|
||||
|
@ -129,7 +130,7 @@ if (!$is_cliente) {
|
|||
$help_codice_destinatario .= ' <b>'.tr("Non è necessario comunicare il proprio codice destinatario ai fornitori in quanto è sufficiente che questo sia registrato nel portale del Sistema Di Interscambio dell'Agenzia Entrate (SDI)").'.</b>';
|
||||
}
|
||||
?>
|
||||
{[ "type": "text", "label": "<?php echo ($record['tipo'] == 'Ente pubblico') ? tr('Codice unico ufficio') : tr('Codice destinatario'); ?>", "name": "codice_destinatario", "required": 0, "class": "text-center text-uppercase alphanumeric-mask", "value": "$codice_destinatario$", "maxlength": <?php echo ($record['tipo'] == 'Ente pubblico') ? '6' : '7'; ?>, "help": "<?php echo tr($help_codice_destinatario); ?>", "readonly": "<?php echo intval($anagrafica->sedeLegale->nazione->iso2 != 'IT'); ?>" ]}
|
||||
{[ "type": "text", "label": "<?php echo ($record['tipo'] == 'Ente pubblico') ? tr('Codice unico ufficio') : tr('Codice destinatario'); ?>", "name": "codice_destinatario", "required": 0, "class": "text-center text-uppercase alphanumeric-mask", "value": "$codice_destinatario$", "maxlength": <?php echo ($record['tipo'] == 'Ente pubblico') ? '6' : '7'; ?>, "help": "<?php echo tr($help_codice_destinatario); ?>", "readonly": "<?php echo intval($nazione_anagrafica ? $nazione_anagrafica->iso2 != 'IT' : 0); ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
|
|
|
@ -19,7 +19,8 @@
|
|||
|
||||
namespace Modules\Anagrafiche;
|
||||
|
||||
use Common\Model;
|
||||
use Common\SimpleModelTrait;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Modules\Contratti\Contratto;
|
||||
use Modules\DDT\DDT;
|
||||
|
@ -34,6 +35,7 @@ use Util\Generator;
|
|||
|
||||
class Anagrafica extends Model
|
||||
{
|
||||
use SimpleModelTrait;
|
||||
use RecordTrait;
|
||||
use SoftDeletes;
|
||||
|
||||
|
@ -62,7 +64,7 @@ class Anagrafica extends Model
|
|||
*/
|
||||
public static function build($ragione_sociale, $nome = '', $cognome = '', array $tipologie = [])
|
||||
{
|
||||
$model = parent::build();
|
||||
$model = new static();
|
||||
|
||||
$model->ragione_sociale = $ragione_sociale;
|
||||
|
||||
|
|
|
@ -19,10 +19,13 @@
|
|||
|
||||
namespace Modules\Anagrafiche;
|
||||
|
||||
use Common\Model;
|
||||
use Common\SimpleModelTrait;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Nazione extends Model
|
||||
{
|
||||
use SimpleModelTrait;
|
||||
|
||||
protected $table = 'an_nazioni';
|
||||
|
||||
public function anagrafiche()
|
||||
|
|
|
@ -19,10 +19,13 @@
|
|||
|
||||
namespace Modules\Anagrafiche;
|
||||
|
||||
use Common\Model;
|
||||
use Common\SimpleModelTrait;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Sede extends Model
|
||||
{
|
||||
use SimpleModelTrait;
|
||||
|
||||
protected $table = 'an_sedi';
|
||||
|
||||
/**
|
||||
|
|
|
@ -19,10 +19,13 @@
|
|||
|
||||
namespace Modules\Anagrafiche;
|
||||
|
||||
use Common\Model;
|
||||
use Common\SimpleModelTrait;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Tipo extends Model
|
||||
{
|
||||
use SimpleModelTrait;
|
||||
|
||||
protected $table = 'an_tipianagrafiche';
|
||||
protected $primaryKey = 'idtipoanagrafica';
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ switch (post('op')) {
|
|||
// Salvataggio info componente (campo `contenuto`)
|
||||
if (!empty($componente)) {
|
||||
$contenuto_precedente_esistente = !empty($articolo->contenuto);
|
||||
$contenuto = file_get_contents(DOCROOT.'/files/my_impianti/'.$componente);
|
||||
$contenuto = file_get_contents(base_dir().'/files/impianti/'.$componente);
|
||||
$contenuto_componente = Ini::read($contenuto);
|
||||
|
||||
// Lettura dei campi esistenti per preservarne il valore
|
||||
|
|
|
@ -43,7 +43,7 @@ switch ($resource) {
|
|||
($documenti[$i]['n2_documento'] != '') ? $n_documento = $documenti[$i]['n2_documento'] : $n_documento = $documenti[$i]['n_documento'];
|
||||
|
||||
$link_id = Modules::get($documenti[$i]['modulo'])['id'];
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$link_id.'&id_record='.$documenti[$i]['id']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">".$documenti[$i]['tipo'].'. n. '.$n_documento.' del '.Translator::dateToLocale($documenti[$i]['data_documento'])." </a></td>\n";
|
||||
echo "<tr><td class='first_cell text-left'><a href='".base_path().'/editor.php?id_module='.$link_id.'&id_record='.$documenti[$i]['id']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">".$documenti[$i]['tipo'].'. n. '.$n_documento.' del '.Translator::dateToLocale($documenti[$i]['data_documento'])." </a></td>\n";
|
||||
echo "<td class='table_cell text-right'>".moneyFormat($documenti[$i]['costo_unitario'])."</td></tr>\n";
|
||||
array_push($ids, '"'.$documenti[$i]['id'].'"');
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ switch ($resource) {
|
|||
($documenti[$i]['n2_documento'] != '') ? $n_documento = $documenti[$i]['n2_documento'] : $n_documento = $documenti[$i]['n_documento'];
|
||||
|
||||
$link_id = Modules::get($documenti[$i]['modulo'])['id'];
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$link_id.'&id_record='.$documenti[$i]['id']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">".$documenti[$i]['tipo'].'. n. '.$n_documento.' del '.Translator::dateToLocale($documenti[$i]['data_documento'])." </a></td>\n";
|
||||
echo "<tr><td class='first_cell text-left'><a href='".base_path().'/editor.php?id_module='.$link_id.'&id_record='.$documenti[$i]['id']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">".$documenti[$i]['tipo'].'. n. '.$n_documento.' del '.Translator::dateToLocale($documenti[$i]['data_documento'])." </a></td>\n";
|
||||
echo "<td class='table_cell text-right'>".moneyFormat($documenti[$i]['costo_unitario'])."</td></tr>\n";
|
||||
array_push($ids, '"'.$documenti[$i]['id'].'"');
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ switch ($resource) {
|
|||
($documenti[$i]['n2_documento'] != '') ? $n_documento = $documenti[$i]['n2_documento'] : $n_documento = $documenti[$i]['n_documento'];
|
||||
|
||||
$link_id = Modules::get($documenti[$i]['modulo'])['id'];
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$link_id.'&id_record='.$documenti[$i]['id']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">".$documenti[$i]['tipo'].'. n. '.$n_documento.' del '.Translator::dateToLocale($documenti[$i]['data_documento'])." </a></td>\n";
|
||||
echo "<tr><td class='first_cell text-left'><a href='".base_path().'/editor.php?id_module='.$link_id.'&id_record='.$documenti[$i]['id']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">".$documenti[$i]['tipo'].'. n. '.$n_documento.' del '.Translator::dateToLocale($documenti[$i]['data_documento'])." </a></td>\n";
|
||||
echo "<td class='table_cell text-right'>".moneyFormat($documenti[$i]['costo_unitario'])."</td></tr>\n";
|
||||
array_push($ids, '"'.$documenti[$i]['id'].'"');
|
||||
}
|
||||
|
|
|
@ -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['codice'].' - '.$r['descrizione'];
|
||||
$result['category'] = 'Articoli';
|
||||
|
||||
|
|
|
@ -184,7 +184,9 @@ include_once __DIR__.'/../../core.php';
|
|||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
if (empty($prezzi_ivati)) {
|
||||
echo '
|
||||
<button type="button" class="btn btn-info btn-xs pull-right tip pull-right" title="'.tr('Scorpora iva dal prezzo di vendita.').'" id="scorpora_iva"><i class="fa fa-calculator" aria-hidden="true"></i></button>';
|
||||
<button type="button" class="btn btn-info btn-xs pull-right tip pull-right" title="'.tr('Scorpora iva dal prezzo di vendita.').'" id="scorporaIva">
|
||||
<i class="fa fa-calculator"></i>
|
||||
</button>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -243,11 +245,11 @@ echo '
|
|||
<div class="form-group">
|
||||
<label for="componente_filename">'.tr('Seleziona un componente').':</label>';
|
||||
echo "
|
||||
<select class=\"form-control superselect\" id=\"componente_filename\" name=\"componente_filename\" onchange=\"$.post('".$rootdir."/modules/my_impianti/actions.php', {op: 'load_componente', idarticolo: '".$id_record."', filename: $(this).find('option:selected').val() }, function(response){ $('#info_componente').html( response ); start_superselect(); $('.datepicker').datetimepicker({ locale: globals.locale, format: 'L' } ); } );\">\n";
|
||||
<select class=\"form-control superselect\" id=\"componente_filename\" name=\"componente_filename\" onchange=\"$.post('".base_path()."/modules/impianti/actions.php', {op: 'load_componente', idarticolo: '".$id_record."', filename: $(this).find('option:selected').val() }, function(response){ $('#info_componente').html( response ); start_superselect(); $('.datepicker').datetimepicker({ locale: globals.locale, format: 'L' } ); } );\">\n";
|
||||
echo '
|
||||
<option value="0">'.tr('Nessuno').'</option>';
|
||||
|
||||
$cmp = Ini::getList($docroot.'/files/my_impianti/');
|
||||
$cmp = Ini::getList(base_dir().'/files/impianti/');
|
||||
|
||||
if (count($cmp) > 0) {
|
||||
for ($c = 0; $c < count($cmp); ++$c) {
|
||||
|
@ -331,15 +333,17 @@ $("#categoria").change(function() {
|
|||
$("#subcategoria").val(null).trigger("change");
|
||||
});
|
||||
|
||||
function scorpora_iva() {
|
||||
if ($("#idiva_vendita").val()!=''){
|
||||
var percentuale = parseFloat($("#idiva_vendita").selectData().percentuale);
|
||||
function scorporaIva() {
|
||||
let iva_vendita = $("#idiva_vendita");
|
||||
|
||||
if (iva_vendita.val()) {
|
||||
let percentuale = parseFloat(iva_vendita.selectData().percentuale);
|
||||
if(!percentuale) return;
|
||||
|
||||
var input = $("#prezzo_vendita");
|
||||
var prezzo = input.val().toEnglish();
|
||||
let input = $("#prezzo_vendita");
|
||||
let prezzo = input.val().toEnglish();
|
||||
|
||||
var scorporato = prezzo * 100 / (100 + percentuale);
|
||||
let scorporato = prezzo * 100 / (100 + percentuale);
|
||||
|
||||
input.val(scorporato);
|
||||
}else{
|
||||
|
@ -347,8 +351,8 @@ function scorpora_iva() {
|
|||
}
|
||||
}
|
||||
|
||||
$("#scorpora_iva").click( function() {
|
||||
scorpora_iva();
|
||||
$("#scorporaIva").click( function() {
|
||||
scorporaIva();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
|
@ -27,20 +27,20 @@ echo '
|
|||
<div class="pull-right">';
|
||||
if (empty($_GET['movimentazione_completa'])) {
|
||||
echo '
|
||||
<a class="btn btn-info btn-xs" href="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&movimentazione_completa=1#tab_'.$id_plugin.'">
|
||||
<a class="btn btn-info btn-xs" href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&movimentazione_completa=1#tab_'.$id_plugin.'">
|
||||
<i class="fa fa-eye"></i>
|
||||
'.tr('Mostra tutti i movimenti').'
|
||||
</a>';
|
||||
} else {
|
||||
echo '
|
||||
<a class="btn btn-info btn-xs" href="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&movimentazione_completa=0#tab_'.$id_plugin.'">
|
||||
<a class="btn btn-info btn-xs" href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&movimentazione_completa=0#tab_'.$id_plugin.'">
|
||||
<i class="fa fa-eye-slash"></i>
|
||||
'.tr('Mostra gli ultimi 20 movimenti').'
|
||||
</a>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<a class="btn btn-warning btn-xs" href="'.$rootdir.'/controller.php?id_module='.Modules::get('Movimenti')->id.'&search_Articolo='.($articolo->codice.' - '.$articolo->descrizione).'">
|
||||
<a class="btn btn-warning btn-xs" href="'.base_path().'/controller.php?id_module='.Modules::get('Movimenti')->id.'&search_Articolo='.($articolo->codice.' - '.$articolo->descrizione).'">
|
||||
<i class="fa fa-external-link"></i>
|
||||
'.tr('Visualizza dettagli').'
|
||||
</a>';
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 '
|
||||
<form action="'.$rootdir.'/pdfgen.php?id_print='.$id_print.'" method="post" target="_blank">
|
||||
<form action="'.base_path().'/pdfgen.php?id_print='.$id_print.'" method="post" target="_blank">
|
||||
|
||||
<div class="row">
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ if (!is_writable($backup_dir) || !is_readable($backup_dir)) {
|
|||
|
||||
echo '<p>'.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').'.</p>';
|
||||
|
||||
if (starts_with($backup_dir, DOCROOT)) {
|
||||
if (starts_with($backup_dir, base_dir())) {
|
||||
echo '
|
||||
<div class="alert alert-warning">
|
||||
<i class="fa fa-warning"></i> '.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.'");
|
||||
</script>
|
||||
|
||||
<a class="btn btn-primary" href="'.$rootdir.'/modules/backups/actions.php?op=getfile&number='.$id.'" target="_blank"><i class="fa fa-download"></i> '.tr('Scarica').'</a>
|
||||
<a class="btn btn-primary" href="'.base_path().'/modules/backups/actions.php?op=getfile&number='.$id.'" target="_blank"><i class="fa fa-download"></i> '.tr('Scarica').'</a>
|
||||
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-warning ask" data-backto="record-edit" data-method="post" data-op="restore" data-number="'.$id.'" data-msg="'.tr('Vuoi ripristinare questo backup?').'" data-button="Ripristina" data-class="btn btn-lg btn-warning">
|
||||
|
|
|
@ -27,7 +27,7 @@ if (isset($id_record)) {
|
|||
|
||||
?><form action="<?php
|
||||
if (isset($id_original)) {
|
||||
echo ROOTDIR.'/controller.php?id_module='.$id_module;
|
||||
echo base_path().'/controller.php?id_module='.$id_module;
|
||||
|
||||
if (isset($id_record)) {
|
||||
echo '&id_record='.$id_record;
|
||||
|
|
|
@ -57,7 +57,7 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
<div class="panel-body">
|
||||
<div class="pull-left">
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/add.php?id_module=<?php echo $id_module; ?>&id_original=<?php echo $id_record; ?>" data-toggle="modal" data-title="<?php echo tr('Aggiungi riga'); ?>"><i class="fa fa-plus"></i> <?php echo tr('Sottocategoria'); ?></a><br>
|
||||
<a class="btn btn-primary" data-href="<?php echo base_path(); ?>/add.php?id_module=<?php echo $id_module; ?>&id_original=<?php echo $id_record; ?>" data-toggle="modal" data-title="<?php echo tr('Aggiungi riga'); ?>"><i class="fa fa-plus"></i> <?php echo tr('Sottocategoria'); ?></a><br>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<hr>
|
||||
|
@ -72,7 +72,7 @@ include_once __DIR__.'/../../core.php';
|
|||
<th width="20%"><?php echo tr('Opzioni'); ?></th>
|
||||
</tr>
|
||||
|
||||
<?php include $docroot.'/modules/'.Modules::get($id_module)['directory'].'/row-list.php'; ?>
|
||||
<?php include base_dir().'/modules/'.Modules::get($id_module)['directory'].'/row-list.php'; ?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -29,7 +29,7 @@ foreach ($subcategorie as $sub) {
|
|||
<td>'.$sub['colore'].'</td>
|
||||
<td>'.$sub['nota'].'</td>
|
||||
<td>
|
||||
<a class="btn btn-warning btn-sm" title="Modifica riga" onclick="launch_modal(\''.tr('Modifica sottocategoria').'\', \''.$rootdir.'/add.php?id_module='.$id_module.'&id_record='.$sub['id'].'&id_original='.$id_record.'\');"><i class="fa fa-edit"></i></a>
|
||||
<a class="btn btn-warning btn-sm" title="Modifica riga" onclick="launch_modal(\''.tr('Modifica sottocategoria').'\', \''.base_path().'/add.php?id_module='.$id_module.'&id_record='.$sub['id'].'&id_original='.$id_record.'\');"><i class="fa fa-edit"></i></a>
|
||||
<a class="btn btn-sm btn-danger ask '.(($n_articoli > 0) ? 'disabled tip' : '').'" data-backto="record-edit" data-id="'.$sub['id'].'" title="'.(($n_articoli > 0) ? 'Sottocategoria collegata a '.$n_articoli.' articoli' : '').'">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -92,6 +92,8 @@ switch (post('op')) {
|
|||
$qta = $riga->qta_rimanente;
|
||||
|
||||
if ($qta > 0) {
|
||||
//Fix per idconto righe fattura
|
||||
$riga->idconto = $fattura->idconto;
|
||||
$copia = $riga->copiaIn($fattura, $qta);
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -237,7 +237,7 @@ if (!empty($rs)) {
|
|||
</td>
|
||||
|
||||
<td>
|
||||
<button type="button" class="btn btn-warning" data-toggle="tooltip" title="Importa valori da tariffe standard" onclick="if( confirm(\'Importare i valori dalle tariffe standard?\') ){ $.post( \''.$rootdir.'/modules/contratti/actions.php\', { op: \'import\', idcontratto: \''.$id_record.'\', idtipointervento: \''.$rs[$i]['idtipointervento'].'\' }, function(data){ location.href=\''.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'\'; } ); }">
|
||||
<button type="button" class="btn btn-warning" data-toggle="tooltip" title="Importa valori da tariffe standard" onclick="if( confirm(\'Importare i valori dalle tariffe standard?\') ){ $.post( \''.base_path().'/modules/contratti/actions.php\', { op: \'import\', idcontratto: \''.$id_record.'\', idtipointervento: \''.$rs[$i]['idtipointervento'].'\' }, function(data){ location.href=\''.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'\'; } ); }">
|
||||
<i class="fa fa-download"></i>
|
||||
</button>
|
||||
</td>
|
||||
|
@ -289,7 +289,7 @@ if (!empty($rs)) {
|
|||
</td>
|
||||
|
||||
<td>
|
||||
<button type="button" class="btn btn-warning" data-toggle="tooltip" title="Importa valori da tariffe standard" onclick="if( confirm(\'Importare i valori dalle tariffe standard?\') ){ $.post( \''.$rootdir.'/modules/contratti/actions.php\', { op: \'import\', idcontratto: \''.$id_record.'\', idtipointervento: \''.$rs[$i]['idtipointervento'].'\' }, function(data){ location.href=\''.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'\'; } ); }">
|
||||
<button type="button" class="btn btn-warning" data-toggle="tooltip" title="Importa valori da tariffe standard" onclick="if( confirm(\'Importare i valori dalle tariffe standard?\') ){ $.post( \''.base_path().'/modules/contratti/actions.php\', { op: \'import\', idcontratto: \''.$id_record.'\', idtipointervento: \''.$rs[$i]['idtipointervento'].'\' }, function(data){ location.href=\''.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'\'; } ); }">
|
||||
<i class="fa fa-download"></i>
|
||||
</button>
|
||||
</td>
|
||||
|
|
|
@ -51,9 +51,9 @@ foreach ($righe as $riga) {
|
|||
<td>';
|
||||
|
||||
// Aggiunta dei riferimenti ai documenti
|
||||
if ($riga->hasOriginal()) {
|
||||
if ($riga->hasOriginalComponent()) {
|
||||
echo '
|
||||
<small class="pull-right text-right text-muted">'.reference($riga->getOriginal()->parent, tr('Origine')).'</small>';
|
||||
<small class="pull-right text-right text-muted">'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine')).'</small>';
|
||||
}
|
||||
|
||||
// Descrizione
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -74,7 +74,7 @@ switch (filter('op')) {
|
|||
'title' => '<b>Int. '.$sessione['codice'].'</b> '.$sessione['cliente'].'<br><b>'.tr('Tecnici').':</b> '.$sessione['nome_tecnico'].' '.(($sessione['have_attachments']) ? '<i class="fa fa-paperclip" aria-hidden="true"></i>' : ''),
|
||||
'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'],
|
||||
|
|
|
@ -31,10 +31,11 @@ echo '
|
|||
<ul class="dropdown-menu" role="menu">';
|
||||
|
||||
// Stati intervento
|
||||
$stati_sessione = session_get('dashboard.idstatiintervento', []);
|
||||
$stati_intervento = $dbo->fetchArray('SELECT idstatointervento AS id, descrizione, colore FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione ASC');
|
||||
foreach ($stati_intervento as $stato) {
|
||||
$attr = '';
|
||||
if (in_array("'".$stato['id']."'", $_SESSION['dashboard']['idstatiintervento'])) {
|
||||
if (in_array("'".$stato['id']."'", $stati_sessione)) {
|
||||
$attr = 'checked="checked"';
|
||||
}
|
||||
|
||||
|
@ -68,10 +69,11 @@ echo '
|
|||
<ul class="dropdown-menu" role="menu">';
|
||||
|
||||
// Tipi intervento
|
||||
$tipi_sessione = session_get('dashboard.idtipiintervento', []);
|
||||
$tipi_intervento = $dbo->fetchArray('SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC');
|
||||
foreach ($tipi_intervento as $tipo) {
|
||||
$attr = '';
|
||||
if (in_array("'".$tipo['id']."'", $_SESSION['dashboard']['idtipiintervento'])) {
|
||||
if (in_array("'".$tipo['id']."'", $tipi_sessione)) {
|
||||
$attr = 'checked="checked"';
|
||||
}
|
||||
|
||||
|
@ -104,12 +106,13 @@ echo '
|
|||
</button>
|
||||
<ul class="dropdown-menu" role="menu">';
|
||||
|
||||
$tecnici_sessione = session_get('dashboard.idtecnici', []);
|
||||
$tecnici_disponibili = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale, colore FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica
|
||||
LEFT OUTER JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id
|
||||
WHERE an_anagrafiche.deleted_at IS NULL AND an_tipianagrafiche.descrizione='Tecnico' ".Modules::getAdditionalsQuery('Interventi').' GROUP BY an_anagrafiche.idanagrafica ORDER BY ragione_sociale ASC');
|
||||
foreach ($tecnici_disponibili as $tecnico) {
|
||||
$attr = '';
|
||||
if (in_array("'".$tecnico['id']."'", $_SESSION['dashboard']['idtecnici'])) {
|
||||
if (in_array("'".$tecnico['id']."'", $tecnici_sessione)) {
|
||||
$attr = 'checked="checked"';
|
||||
}
|
||||
|
||||
|
@ -143,10 +146,11 @@ echo '
|
|||
<ul class="dropdown-menu" role="menu">';
|
||||
|
||||
// Zone
|
||||
$zone_sessione = session_get('dashboard.idzone', []);
|
||||
$zone = $dbo->fetchArray('(SELECT 0 AS ordine, \'0\' AS id, \'Nessuna zona\' AS descrizione) UNION (SELECT 1 AS ordine, id, descrizione FROM an_zone) ORDER BY ordine, descrizione ASC');
|
||||
foreach ($zone as $zona) {
|
||||
$attr = '';
|
||||
if (in_array("'".$zona['id']."'", $_SESSION['dashboard']['idzone'])) {
|
||||
if (in_array("'".$zona['id']."'", $zone_sessione)) {
|
||||
$attr = 'checked="checked"';
|
||||
}
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ if (empty($notes)) {
|
|||
|
||||
$moduli = $notes->groupBy('id_module')->sortBy('notification_date');
|
||||
foreach ($moduli as $module_id => $note) {
|
||||
$modulo = Module::get($module_id);
|
||||
$modulo = Module::pool($module_id);
|
||||
|
||||
echo '
|
||||
<h4>'.$modulo->title.'</h4>
|
||||
|
|
|
@ -35,6 +35,7 @@ if (!empty($id_documento)) {
|
|||
'serials' => true,
|
||||
'documento' => $documento,
|
||||
'documento_finale' => $documento_finale,
|
||||
'tipo_documento_finale' => DDT::class,
|
||||
];
|
||||
|
||||
echo App::load('importa.php', [], $options, true);
|
||||
|
|
|
@ -51,7 +51,7 @@ foreach ($rs as $r) {
|
|||
|
||||
$numero = empty($r['numero_esterno']) ? $r['numero'] : $r['numero_esterno'];
|
||||
|
||||
$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['tipologia'].' num. '.$numero.' del '.Translator::dateToLocale($r['data']);
|
||||
$result['category'] = $r['tipologia'];
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Modules\DDT\DDT;
|
||||
use Modules\Fatture\Fattura;
|
||||
|
||||
$documento = DDT::find($id_record);
|
||||
|
||||
|
@ -27,6 +28,7 @@ $module = Modules::get($id_module);
|
|||
|
||||
$final_module = $module['name'] == 'Ddt di vendita' ? 'Fatture di vendita' : 'Fatture di acquisto';
|
||||
$dir = $module['name'] == 'Ddt di vendita' ? 'entrata' : 'uscita';
|
||||
$tipo_documento_finale = Fattura::class;
|
||||
|
||||
$options = [
|
||||
'op' => 'add_documento',
|
||||
|
@ -37,6 +39,7 @@ $options = [
|
|||
'dir' => $dir,
|
||||
'create_document' => true,
|
||||
'documento' => $documento,
|
||||
'tipo_documento_finale' => $tipo_documento_finale,
|
||||
];
|
||||
|
||||
echo App::load('importa.php', [], $options, true);
|
||||
|
|
|
@ -324,7 +324,7 @@ if (!$block_edit) {
|
|||
$ordini = $dbo->fetchArray($ordini_query)[0]['tot'];
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/ddt/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ordine">
|
||||
<a class="btn btn-sm btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.base_path().'/modules/ddt/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ordine">
|
||||
<i class="fa fa-plus"></i> '.tr('Ordine').'
|
||||
</a>';
|
||||
|
||||
|
|
|
@ -76,9 +76,9 @@ foreach ($righe as $riga) {
|
|||
</button>';
|
||||
|
||||
// Aggiunta dei riferimenti ai documenti
|
||||
if ($riga->hasOriginal()) {
|
||||
if ($riga->hasOriginalComponent()) {
|
||||
echo '
|
||||
<br>'.reference($riga->getOriginal()->parent, tr('Origine'));
|
||||
<br>'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine'));
|
||||
}
|
||||
echo '
|
||||
</small>';
|
||||
|
|
|
@ -29,16 +29,4 @@ class Articolo extends Article
|
|||
|
||||
protected $table = 'dt_righe_ddt';
|
||||
protected $serialRowID = 'ddt';
|
||||
|
||||
/**
|
||||
* Crea un nuovo articolo collegato ad una ddt.
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(DDT $ddt, Original $articolo)
|
||||
{
|
||||
$model = parent::build($ddt, $articolo);
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,16 +27,4 @@ class Descrizione extends Description
|
|||
use RelationTrait;
|
||||
|
||||
protected $table = 'dt_righe_ddt';
|
||||
|
||||
/**
|
||||
* Crea una nuova riga collegata ad una ddt.
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(DDT $ddt)
|
||||
{
|
||||
$model = parent::build($ddt);
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,18 +23,18 @@ use Modules\DDT\DDT;
|
|||
|
||||
trait RelationTrait
|
||||
{
|
||||
public function getParentID()
|
||||
public function getDocumentID()
|
||||
{
|
||||
return 'idddt';
|
||||
}
|
||||
|
||||
public function parent()
|
||||
public function document()
|
||||
{
|
||||
return $this->belongsTo(DDT::class, $this->getParentID());
|
||||
return $this->belongsTo(DDT::class, $this->getDocumentID());
|
||||
}
|
||||
|
||||
public function ddt()
|
||||
{
|
||||
return $this->parent();
|
||||
return $this->document();
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue