Merge branch 'miglioramento-warning'

This commit is contained in:
Dasc3er 2020-09-24 11:40:11 +02:00
commit dfc0319304
305 changed files with 2149 additions and 1811 deletions

View File

@ -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');

View File

@ -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)) {

View File

@ -72,7 +72,7 @@ switch (filter('op')) {
break;
case 'checklists':
include DOCROOT.'/plugins/checks.php';
include base_dir().'/plugins/checks.php';
break;

View File

@ -22,11 +22,13 @@ include_once __DIR__.'/core.php';
use Util\Query;
// Informazioni fondamentali
$columns = filter('columns');
$order = filter('order')[0];
$columns = (array) filter('columns');
$order = filter('order') ? filter('order')[0] : [];
$draw_numer = intval(filter('draw'));
$order['column'] = $order['column'] - 1;
if (!empty(filter('order'))) {
$order['column'] = $order['column'] - 1;
}
array_shift($columns);
$total = Util\Query::readQuery($structure);
@ -76,7 +78,7 @@ if (!empty($query)) {
// Allineamento delle righe
$align = [];
$row = $rows[0] ?: [];
$row = isset($rows[0]) ? $rows[0] : [];
foreach ($row as $field => $value) {
$value = trim($value);
@ -164,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_'] : '';
@ -173,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';
}
@ -189,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>');
}

View File

@ -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

View File

@ -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();
}

View File

@ -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",

View File

@ -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' => [],

View File

@ -18,6 +18,7 @@
*/
return [
/*
'modules/aggiornamenti' => 'Modules\Aggiornamenti',
'modules/anagrafiche' => 'Modules\Anagrafiche',
'modules/backups' => 'Modules\Backups',
@ -57,4 +58,5 @@ return [
'plugins/pianificazione_fatturazione' => 'Plugins\PianificazioneFatturazione',
'plugins/statistiche_articoli' => 'Plugins\StatisticheArticoli',
'plugins/dettagli_articolo' => 'Plugins\DettagliArticolo',
*/
];

View File

@ -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>';

View File

@ -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();

View File

@ -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;
}

View File

@ -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');
@ -45,7 +45,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) {
@ -58,7 +58,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>';
@ -142,7 +142,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>
@ -266,7 +266,7 @@ if (empty($record) || !$has_access) {
echo '
<div id="tab_note" class="tab-pane">';
include DOCROOT.'/plugins/notes.php';
include base_dir().'/plugins/notes.php';
echo '
</div>';
@ -276,7 +276,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>';
@ -378,7 +378,7 @@ if (empty($record) || !$has_access) {
$id_plugin = $plugin['id'];
include DOCROOT.'/include/manager.php';
include base_dir().'/include/manager.php';
echo '
</div>';
@ -399,7 +399,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>';
}
@ -477,7 +477,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; ?>
},

View File

@ -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>

View File

@ -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">

View File

@ -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">

View File

@ -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,
},

View File

@ -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');

View File

@ -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,

View File

@ -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) {

View File

@ -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)).'"';

View File

@ -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) {

View File

@ -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>';

View File

@ -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>
@ -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 '

View File

@ -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>

View File

@ -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">

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View 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)) {

View File

@ -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 '

View File

@ -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) {

View File

@ -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,

View File

@ -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);

View File

@ -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;

View File

@ -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';

View File

@ -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>',

View File

@ -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">

View File

@ -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;

View File

@ -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()

View File

@ -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';
/**

View File

@ -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';

View File

@ -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/impianti/'.$componente);
$contenuto = file_get_contents(base_dir().'/files/impianti/'.$componente);
$contenuto_componente = Ini::read($contenuto);
// Lettura dei campi esistenti per preservarne il valore

View File

@ -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'].'"');
}

View File

@ -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';

View File

@ -245,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/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/impianti/');
$cmp = Ini::getList(base_dir().'/files/impianti/');
if (count($cmp) > 0) {
for ($c = 0; $c < count($cmp); ++$c) {

View File

@ -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>';

View File

@ -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;
}

View File

@ -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();

View File

@ -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);

View File

@ -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">

View File

@ -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">

View File

@ -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;

View File

@ -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>

View File

@ -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>

View File

@ -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();

View File

@ -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;

View File

@ -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();

View File

@ -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;

View File

@ -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();

View File

@ -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>

View File

@ -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

View File

@ -20,24 +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;
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;
}
}

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
@ -63,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();
@ -225,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);

View File

@ -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()

View File

@ -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'],

View File

@ -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"';
}

View File

@ -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>

View File

@ -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'];

View File

@ -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>';

View File

@ -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>';

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -27,16 +27,4 @@ class Riga extends Row
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;
}
}

View File

@ -27,16 +27,4 @@ class Sconto extends Discount
use RelationTrait;
protected $table = 'dt_righe_ddt';
/**
* Crea un nuovo sconto collegato ad un ddt.
*
* @return self
*/
public static function build(DDT $ddt)
{
$model = parent::build($ddt);
return $model;
}
}

View File

@ -20,7 +20,7 @@
namespace Modules\DDT;
use Auth;
use Common\Components\Description;
use Common\Components\Component;
use Common\Document;
use Modules\Anagrafiche\Anagrafica;
use Traits\RecordTrait;
@ -53,7 +53,7 @@ class DDT extends Document
*/
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data)
{
$model = parent::build();
$model = new static();
$user = Auth::user();
@ -204,7 +204,7 @@ class DDT 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);

View File

@ -19,10 +19,13 @@
namespace Modules\DDT;
use Common\Model;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
class Stato extends Model
{
use SimpleModelTrait;
protected $table = 'dt_statiddt';
public function ddt()

View File

@ -19,10 +19,13 @@
namespace Modules\DDT;
use Common\Model;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
class Tipo extends Model
{
use SimpleModelTrait;
protected $table = 'dt_tipiddt';
public function ddt()

View File

@ -20,14 +20,16 @@
namespace Modules\Emails;
use Carbon\Carbon;
use Common\Model;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Notifications\EmailNotification;
use Traits\StoreTrait;
use Traits\LocalPoolTrait;
class Account extends Model
{
use StoreTrait;
use SimpleModelTrait;
use LocalPoolTrait;
use SoftDeletes;
protected $table = 'em_accounts';

View File

@ -19,7 +19,8 @@
namespace Modules\Emails;
use Common\Model;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
use Models\PrintTemplate;
use Models\Upload;
use Models\User;
@ -27,13 +28,15 @@ use Modules\Newsletter\Newsletter;
class Mail extends Model
{
use SimpleModelTrait;
protected $table = 'em_emails';
protected $options = null;
public static function build(User $user, $template = null, $id_record = null, $account = null)
{
$model = parent::build();
$model = new static();
$model->created_by = $user->id;

View File

@ -19,17 +19,20 @@
namespace Modules\Emails;
use Common\Model;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
class Receiver extends Model
{
use SimpleModelTrait;
protected $table = 'em_email_receiver';
/* Relazioni Eloquent */
public static function build(Mail $mail, $address, $type = null)
{
$model = parent::build();
$model = new static();
$model->email()->associate($mail);

View File

@ -19,15 +19,17 @@
namespace Modules\Emails;
use Common\Model;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Models\Module;
use Models\PrintTemplate;
use Traits\StoreTrait;
use Traits\LocalPoolTrait;
class Template extends Model
{
use StoreTrait;
use SimpleModelTrait;
use LocalPoolTrait;
use SoftDeletes;
protected $table = 'em_templates';

View File

@ -143,7 +143,7 @@ switch (post('op')) {
if ($stato_fe && empty($checks)) {
try {
$fattura_pa = new FatturaElettronica($id_record);
$file = $fattura_pa->save(DOCROOT.'/'.FatturaElettronica::getDirectory());
$file = $fattura_pa->save(base_dir().'/'.FatturaElettronica::getDirectory());
flash()->info(tr('Fattura elettronica generata correttamente!'));
@ -304,7 +304,7 @@ switch (post('op')) {
$righe = $fattura->getRighe();
foreach ($righe as $riga) {
$new_riga = $riga->replicate();
$new_riga->setParent($new);
$new_riga->setDocument($new);
// Rimozione riferimenti (deorecati)
$new_riga->idpreventivo = 0;

View File

@ -44,7 +44,7 @@ echo '
'_NUM_' => $numero,
]).'</p>
<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="op" value="add_intervento">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="dir" value="'.$dir.'">';

View File

@ -75,7 +75,7 @@ $rs = $dbo->fetchArray('SELECT mg_articoli.id AS idarticolo, mg_articoli.codice,
echo '
<p>'.tr('Articolo').': '.$rs[0]['codice'].' - '.$rs[0]['descrizione'].'</p>
<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="op" value="add_serial">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="idriga" value="'.$idriga.'">

View File

@ -53,7 +53,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'];

View File

@ -27,7 +27,7 @@ use Util\Zip;
switch (post('op')) {
case 'export-bulk':
$dir = DOCROOT.'/files/export_fatture/';
$dir = base_dir().'/files/export_fatture/';
directory($dir.'tmp/');
$dir = slashes($dir);
@ -113,7 +113,7 @@ switch (post('op')) {
break;
case 'export-xml-bulk':
$dir = DOCROOT.'/files/export_fatture/';
$dir = base_dir().'/files/export_fatture/';
directory($dir.'tmp/');
$dir = slashes($dir);
@ -240,7 +240,7 @@ switch (post('op')) {
$righe = $fattura->getRighe();
foreach ($righe as $riga) {
$new_riga = $riga->replicate();
$new_riga->setParent($new);
$new_riga->setDocument($new);
if (!post('riferimenti')) {
$new_riga->idpreventivo = 0;
@ -301,7 +301,7 @@ $operations['registrazione-contabile'] = [
'title' => tr('Registrazione contabile'),
'type' => 'modal',
'origine' => 'fatture',
'url' => $rootdir.'/add.php?id_module='.Modules::get('Prima nota')['id'],
'url' => base_path().'/add.php?id_module='.Modules::get('Prima nota')['id'],
],
];

View File

@ -42,11 +42,11 @@ if ($dir == 'entrata') {
</button>
<ul class="dropdown-menu dropdown-menu-right">
<li><a href="'.ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&op=nota_addebito&backto=record-edit">
<li><a href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&op=nota_addebito&backto=record-edit">
'.tr('Nota di debito').'
</a></li>
<li><a data-href="'.ROOTDIR.'/modules/fatture/crea_documento.php?id_module='.$id_module.'&id_record='.$id_record.'&iddocumento='.$id_record.'" data-title="Aggiungi nota di credito">
<li><a data-href="'.base_path().'/modules/fatture/crea_documento.php?id_module='.$id_module.'&id_record='.$id_record.'&iddocumento='.$id_record.'" data-title="Aggiungi nota di credito">
'.tr('Nota di credito').'
</a></li>
</ul>
@ -72,7 +72,7 @@ if (!empty($record['is_fiscale'])) {
}
echo '
<a class="btn btn-primary '.(!empty($modulo_prima_nota) && empty($registrazione_insoluto) ? '' : 'disabled').'" data-href="'.ROOTDIR.'/add.php?id_module='.$modulo_prima_nota['id'].'&id_documenti='.$id_record.'&single=1&is_insoluto=1" data-title="'.tr('Registra insoluto').'">
<a class="btn btn-primary '.(!empty($modulo_prima_nota) && empty($registrazione_insoluto) ? '' : 'disabled').'" data-href="'.base_path().'/add.php?id_module='.$modulo_prima_nota['id'].'&id_documenti='.$id_record.'&single=1&is_insoluto=1" data-title="'.tr('Registra insoluto').'">
<i class="fa fa-ban fa-inverse"></i> '.tr('Registra insoluto').'
</a>';
@ -87,7 +87,7 @@ if (!empty($record['is_fiscale'])) {
}
echo '
<a class="btn btn-primary '.(!empty($modulo_prima_nota) && empty($registrazione_contabile) ? '' : 'disabled').'" data-href="'.ROOTDIR.'/add.php?id_module='.$modulo_prima_nota['id'].'&id_documenti='.$id_record.'&single=1" data-title="'.tr('Registra contabile').'">
<a class="btn btn-primary '.(!empty($modulo_prima_nota) && empty($registrazione_contabile) ? '' : 'disabled').'" data-href="'.base_path().'/add.php?id_module='.$modulo_prima_nota['id'].'&id_documenti='.$id_record.'&single=1" data-title="'.tr('Registra contabile').'">
<i class="fa fa-euro"></i> '.tr('Registra contabile').'
</a>';

View File

@ -597,7 +597,7 @@ if (!$block_edit) {
echo '
<div class="tip" data-toggle="tooltip" title="'.tr('Attività completate non collegate a preventivi o contratti e che non siano già state fatturate.').'">
<a class="btn btn-sm btn-primary '.(!empty($interventi) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_intervento.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="Aggiungi attività">
<a class="btn btn-sm btn-primary '.(!empty($interventi) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_intervento.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="Aggiungi attività">
<i class="fa fa-plus"></i> Attività
</a>
</div>';
@ -607,7 +607,7 @@ if (!$block_edit) {
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
echo '
<div class="tip">
<a class="btn btn-sm btn-primary '.(!empty($preventivi) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_preventivo.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="Aggiungi preventivo" data-toggle="tooltip">
<a class="btn btn-sm btn-primary '.(!empty($preventivi) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_preventivo.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="Aggiungi preventivo" data-toggle="tooltip">
<i class="fa fa-plus"></i> Preventivo
</a>
</div>';
@ -617,7 +617,7 @@ if (!$block_edit) {
$contratti = $dbo->fetchArray($contr_query)[0]['tot'];
echo '
<div class="tip">
<a class="btn btn-sm btn-primary '.(!empty($contratti) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_contratto.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="Aggiungi contratto" data-toggle="tooltip">
<a class="btn btn-sm btn-primary '.(!empty($contratti) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_contratto.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="Aggiungi contratto" data-toggle="tooltip">
<i class="fa fa-plus"></i> Contratto
</a>
</div>';
@ -635,7 +635,7 @@ if (!$block_edit) {
AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="Aggiungi ddt">
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="Aggiungi ddt">
<i class="fa fa-plus"></i> Ddt
</a>';
@ -643,7 +643,7 @@ if (!$block_edit) {
$ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)';
$ordini = $dbo->fetchArray($ordini_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="Aggiungi ordine">
<a class="btn btn-sm btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="Aggiungi ordine">
<i class="fa fa-plus"></i> Ordine
</a>';
}

View File

@ -65,8 +65,8 @@ foreach ($righe as $riga) {
$extra_riga = '';
if (!$riga->isDescrizione()) {
// Informazioni su CIG, CUP, ...
if ($riga->hasOriginal()) {
$documento_originale = $riga->getOriginal()->parent;
if ($riga->hasOriginalComponent()) {
$documento_originale = $riga->getOriginalComponent()->getDocument();
$num_item = $documento_originale['num_item'];
$codice_cig = $documento_originale['codice_cig'];
@ -102,9 +102,9 @@ foreach ($righe as $riga) {
'.$extra_riga;
// Aggiunta dei riferimenti ai documenti
if ($riga->hasOriginal()) {
if ($riga->hasOriginalComponent()) {
echo '
<br>'.reference($riga->getOriginal()->parent, tr('Origine'));
<br>'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine'));
}
echo '

View File

@ -20,9 +20,10 @@
namespace Modules\Fatture\Components;
use Common\Components\Article;
use Modules\Articoli\Articolo as Original;
use Modules\Fatture\Fattura;
/**
* @extends Article<\Modules\Fatture\Fattura>
*/
class Articolo extends Article
{
use RelationTrait;
@ -30,18 +31,6 @@ class Articolo extends Article
protected $table = 'co_righe_documenti';
protected $serialRowID = 'documento';
/**
* Crea un nuovo articolo collegato ad una fattura.
*
* @return self
*/
public static function build(Fattura $fattura, Original $articolo)
{
$model = parent::build($fattura, $articolo);
return $model;
}
public function movimenta($qta)
{
if (!$this->parent->movimenta_magazzino) {
@ -52,9 +41,9 @@ class Articolo extends Article
// Movimenta il magazzino solo se l'articolo non è già stato movimentato da un documento precedente
// Movimentazione forzata per Note di credito/debito
if ($this->hasOriginal() && !$this->parent->isNota()) {
$original = $this->getOriginal();
$movimenta = !$original->parent->movimenta_magazzino;
if ($this->hasOriginalComponent() && !$this->getDocument()->isNota()) {
$original = $this->getOriginalComponent();
$movimenta = !$original->getDocument()->movimenta_magazzino;
}
if ($movimenta) {

View File

@ -20,23 +20,13 @@
namespace Modules\Fatture\Components;
use Common\Components\Description;
use Modules\Fatture\Fattura;
/**
* @extends Description<\Modules\Fatture\Fattura>
*/
class Descrizione extends Description
{
use RelationTrait;
protected $table = 'co_righe_documenti';
/**
* Crea una nuova riga collegata ad una fattura.
*
* @return self
*/
public static function build(Fattura $fattura)
{
$model = parent::build($fattura);
return $model;
}
}

View File

@ -26,26 +26,26 @@ use Modules\Rivalse\RivalsaINPS;
trait RelationTrait
{
public function getParentID()
public function getDocumentID()
{
return 'iddocumento';
}
public function parent()
public function document()
{
return $this->belongsTo(Fattura::class, $this->getParentID());
return $this->belongsTo(Fattura::class, $this->getDocumentID());
}
public function fattura()
{
return $this->parent();
return $this->document();
}
public function getNettoAttribute()
{
$result = $this->totale - $this->ritenuta_acconto - $this->ritenuta_contributi;
if ($this->parent->split_payment) {
if ($this->getDocument()->split_payment) {
$result = $result - $this->iva;
}
@ -113,7 +113,7 @@ trait RelationTrait
{
if ($this->attributes['ritenuta_contributi']) {
$result = $this->totale_imponibile;
$ritenuta = $this->parent->ritenutaContributi;
$ritenuta = $this->getDocument()->ritenutaContributi;
$result = $result * $ritenuta->percentuale_imponibile / 100;

View File

@ -20,23 +20,13 @@
namespace Modules\Fatture\Components;
use Common\Components\Row;
use Modules\Fatture\Fattura;
/**
* @extends Row<\Modules\Fatture\Fattura>
*/
class Riga extends Row
{
use RelationTrait;
protected $table = 'co_righe_documenti';
/**
* Crea una nuova riga collegata ad una fattura.
*
* @return self
*/
public static function build(Fattura $fattura)
{
$model = parent::build($fattura);
return $model;
}
}

Some files were not shown because too many files have changed in this diff Show More