This commit is contained in:
Beppe 2024-04-17 11:30:19 +02:00
commit 9df84eb7fb
299 changed files with 1247 additions and 796 deletions

View File

@ -4,6 +4,7 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
- [2.5.1 (2024-04-12)](#251-2024-04-12)
- [2.5 (2024-03-28)](#25-2024-03-28)
- [2.4.54 (2024-02-02)](#2454-2024-02-02)
- [2.4.53 (2024-01-05)](#2453-2024-01-05)
@ -66,6 +67,29 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
- [2.2 (2016-11-10)](#22-2016-11-10)
- [2.1 (2015-04-02)](#21-2015-04-02)
## 2.5.1 (2024-04-12)
### Aggiunto (Added)
- Aggiunto user-agent nei log di accesso
- Aggiunta la visualizzazione delle checklist impianti in stampa Attività
### Modificato (Changed)
- Ottimizzato il codice per renderlo compatibile con php8.1
- Migliorata la procedura di aggiornamento
- Rinominato il plugin **Sedi** in **Sedi aggiuntive**
### Fixed
- Corretto il salvataggio nome in **Viste**
- Ripristinata la verifica query in **Viste**
- Corretta la gestione degli allegati
- Corretta l'azione di gruppo per il download degli allegati
- Corretta la selezione anagrafiche clienti-fornitori
- Corrette le stampe contabili
- Corretti gli upload di moduli, plugins e template
- Corretta l'aggiunta attività
- Corretta la gestione degli automezzi per tecnico
- Corretto il caricamento dei promemoria da pianificare in dashboard
- Corretta l'emissione di fatture
## 2.5 (2024-03-28)
### Aggiunto (Added)
- Aggiunte le tabelle '_lang' per la gestione delle traduzioni dei dati presenti a database

View File

@ -63,7 +63,7 @@ L'installazione del gestionale richiede la presenza di un server web con abilita
| PHP | EOL | Supportato |
|-----|-----|:----------:|
| 8.1 | 25/11/2024 | |
| 8.1 | 25/11/2024 | ✔️ |
| 8.0 | 26/11/2023 | ✔️ |
| 7.4 | 28/11/2022 | ✔️ |
| 7.3 | 06/12/2021 | ✔️ |
@ -74,7 +74,10 @@ L'installazione del gestionale richiede la presenza di un server web con abilita
| MYSQL | EOL | Supportato |
|-----|-----|:----------:|
| 8.0 | 01/04/2026 | ✔️ |
| 8.3 | 30/04/2024 | ✔️ |
| 8.2 | 31/01/2024 | ✔️ |
| 8.1 | 25/10/2023 | ✔️ |
| 8.0 | 30/04/2026 | ✔️ |
| 5.7 | 21/10/2023 | ✔️ |
| 5.6 | 05/02/2021 | ❌ |

View File

@ -197,10 +197,10 @@ elseif (filter('op') == 'download-zip-allegati') {
$src = basename($allegato->filepath);
$dst = basename($allegato->original_name);
$file = slashes($module->upload_directory.'/'.$src);
$dest = slashes($dir.'tmp/'.$dst);
$file_content = $allegato->get_contents();
$result = copy($file, $dest);
$dest = slashes($dir.'tmp/'.$dst);
file_put_contents($dest, $file_content);
}
// Creazione zip

View File

@ -78,7 +78,7 @@ switch (filter('op')) {
case 'active_users':
$posizione = get('id_module');
if (isset($id_record)) {
if (!empty($id_record)) {
$posizione .= ', '.get('id_record');
}

View File

@ -15,7 +15,7 @@
}],
"type": "project",
"require": {
"php": "^7.4|^8.0",
"php": "^7.4|^8.1",
"ext-curl": "*",
"ext-dom": "*",
"ext-fileinfo": "*",
@ -52,7 +52,7 @@
"owasp/csrf-protector-php": "^1.0",
"phpmailer/phpmailer": "^6.0",
"respect/validation": "^2.0",
"servo/fluidxml": "^1.21",
"servo/fluidxml": "^2.0",
"slim/flash": "^0.4.0",
"spipu/html2pdf": "^5.0.0",
"symfony/filesystem": "^5.0",
@ -67,7 +67,8 @@
"willdurand/geocoder": "^4.2"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.10.0"
"friendsofphp/php-cs-fixer": "^3.53",
"rector/rector": "^1.0"
},
"autoload": {
"psr-4": {
@ -147,7 +148,7 @@
"prefer-stable": true,
"platform-check": false,
"platform": {
"php": "8.0.29"
"php": "8.1.27"
},
"allow-plugins": {
"kylekatarnls/update-helper": true

View File

@ -17,6 +17,8 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
use Models\Plugin;
include_once __DIR__.'/core.php';
if (!empty($id_record) && !empty($id_module)) {
@ -51,13 +53,13 @@ echo '
</a>
</li>';
$plugins = $dbo->fetchArray('SELECT `zz_plugins`.`id`,`title` FROM `zz_plugins` LEFT JOIN `zz_plugins_lang` ON (`zz_plugins`.`id` = `zz_plugins_lang`.`id_record` AND `zz_plugins_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `idmodule_to`='.prepare($id_module)." AND `position`='tab_main' AND `enabled` = 1");
$plugins = Plugin::where('idmodule_to', $id_module)->where('position', 'tab_main')->where('enabled', 1)->get();
// Tab dei plugin
foreach ($plugins as $plugin) {
echo '
<li>
<a data-toggle="tab" href="#tab_'.$plugin['id'].'" id="link-tab_'.$plugin['id'].'">'.$plugin['title'].'</a>
<a data-toggle="tab" href="#tab_'.$plugin->id.'" id="link-tab_'.$plugin->id.'">'.$plugin->title.'</a>
</li>';
}
@ -77,9 +79,9 @@ foreach ($plugins as $plugin) {
$record = $module_record;
echo '
<div id="tab_'.$plugin['id'].'" class="tab-pane">';
<div id="tab_'.$plugin->id.'" class="tab-pane">';
$id_plugin = $plugin['id'];
$id_plugin = $plugin->id;
include base_dir().'/include/manager.php';
@ -93,7 +95,7 @@ echo '
</div>
</div>';
redirectOperation($id_module, isset($id_parent) ? $id_parent : $id_record);
redirectOperation($id_module, !empty($id_parent) ? $id_parent : $id_record);
// Interfaccia per la modifica dell'ordine e della visibilità delle colonne (Amministratore)
if ($user->is_admin && string_contains($module['option'], '|select|')) {

View File

@ -248,8 +248,8 @@ if (!API\Response::isAPIRequest()) {
$plugin = Plugins::getCurrent();
$structure = isset($plugin) ? $plugin : $module;
$id_module = $module ? $module['id'] : null;
$id_plugin = $plugin ? $plugin['id'] : null;
$id_module = $module ? $module->id : null;
$id_plugin = $plugin ? $plugin->id : null;
$user = Auth::user();

View File

@ -438,7 +438,7 @@ if (empty($record) || !$has_access) {
</div>';
}
redirectOperation($id_module, isset($id_parent) ? $id_parent : $id_record);
redirectOperation($id_module, !empty($id_parent) ? $id_parent : $id_record);
// Widget in basso
echo '{( "name": "widgets", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'", "position": "right", "place": "editor" )}';

View File

@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
$result['idarticolo'] = isset($result['idarticolo']) ? $result['idarticolo'] : null;
$result['idarticolo'] ??= null;
$qta_minima = 0;
$id_listino = $dbo->selectOne('an_anagrafiche', 'id_listino', ['idanagrafica' => $options['idanagrafica']])['id_listino'];

View File

@ -17,8 +17,6 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
$result['id'] = isset($result['id']) ? $result['id'] : null;
// Form di inserimento riga documento
echo '
<form action="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post" id="submit-form">

View File

@ -31,7 +31,7 @@ $pageTitle = tr('Configurazione');
include_once App::filepath('include|custom|', 'top.php');
// Controllo sull'esistenza di nuovi parametri di configurazione
if (post('db_host') !== null) {
if (!empty(post('db_host'))) {
$db_host = $_POST['db_host']; // Fix per evitare la conversione in numero
$db_name = post('db_name');
$db_username = post('db_username');
@ -51,7 +51,7 @@ if (post('db_host') !== null) {
}
// Test della configurazione
if (post('test') !== null) {
if (!empty(post('test'))) {
ob_end_clean();
if ($dbo->isConnected()) {

View File

@ -99,7 +99,7 @@ if (post('action') == 'init') {
'password' => Auth::hashPassword(post('admin_password')),
'email' => post('admin_email'),
'idgruppo' => $admin['id'],
'idanagrafica' => isset($id_record) ? $id_record : 0,
'idanagrafica' => $id_record ?? 0,
'enabled' => 1,
]);

View File

@ -84,7 +84,7 @@ foreach ($modules as $name => $values) {
$status = isset($available_modules) ? in_array($name, $available_modules) : $_SERVER[$values['server']] == 'On';
if ($name == 'mod_mime' && $php_interface != 'apache') {
$headers = get_headers((!empty($config['redirectHTTPS']) && !isHTTPS(true)) ? 'https://' : 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], 1);
$headers = get_headers((!empty($config['redirectHTTPS']) && !isHTTPS(true)) ? 'https://' : 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true);
if (isset($headers['Content-Type'])) {
$status = 1;
} else {
@ -106,7 +106,7 @@ $settings = [
'type' => 'version',
'description' => '7.3.x - 8.0.x, consigliato almeno 7.4.x',
'minimum' => '7.3.0',
'maximum' => '8.0.99',
'maximum' => '8.1.99',
],
'zip' => [
@ -251,7 +251,7 @@ if ($database->isInstalled()) {
'warning' => $database->isMySQL() ? false : true,
'description' => $database->isMySQL() ? '5.7.x - 8.0.x' : '10.x',
'minimum' => $database->isMySQL() ? '5.7.0' : '10.1.0',
'maximum' => $database->isMySQL() ? '8.0.99' : '10.6.99',
'maximum' => $database->isMySQL() ? '8.3.99' : '10.6.99',
],
'sort_buffer_size' => [
@ -431,11 +431,11 @@ foreach ($config_to_check as $name => $values) {
if ($type == 'value') {
$description = tr('Valore consigliato: _SUGGESTED_ (Valore attuale: _ACTUAL_)', [
'_SUGGESTED_' => $values['suggested_value'],
'_ACTUAL_' => (!empty($values['section']) ? ${$values['section']}[$name] : $$name),
'_ACTUAL_' => (!empty($values['section']) ? ${$values['section']}[$name] : ${$name}),
]);
}
$status = ($values['operator'](!empty($values['section']) ? ${$values['section']}[$name] : $$name, $values['value_to_check']) ? 1 : 0);
$status = ($values['operator'](!empty($values['section']) ? ${$values['section']}[$name] : ${$name}, $values['value_to_check']) ? 1 : 0);
$config[] = [
'name' => $name,

View File

@ -99,7 +99,7 @@ if (!empty($type) && $type != 'menu' && $type != 'custom') {
$_SESSION['module_'.$id_module]['selected'] = [];
$selezione = array_keys($_SESSION['module_'.$id_module]['selected']);
$table_id = 'main_'.rand(0, 99);
$table_id = 'main_'.random_int(0, 99);
echo '
<table data-idmodule="'.$id_module.'" data-idplugin="'.$id_plugin.'" data-idparent="'.$id_record.'" data-selected="'.implode(';', $selezione).'" id="'.$table_id.'" width="100%" class="main-records'.(!empty($id_plugin) ? '-plugins' : '').' table table-condensed table-bordered">
<thead>

View File

@ -33,7 +33,7 @@ if (sizeof($id_allegati) == 1) {
$allegato = Upload::find($id_allegati[0]);
echo '
<div class="col-md-6">
{[ "type": "text", "label": "'.tr('Nome').'", "name": "nome_allegato", "value": "'.$allegato->getTranslation('name').'" ]}
{[ "type": "text", "label": "'.tr('Nome').'", "name": "nome_allegato", "value": "'.$allegato->name.'" ]}
</div>
<div class="col-md-6">
{[ "type": "text", "label": "'.tr('Categoria').'", "name": "categoria_allegato", "value": "'.$allegato->category.'", "disabled": "'.intval(in_array($allegato->category, ['Fattura Elettronica'])).'" ]}

View File

@ -47,7 +47,7 @@ echo '<!DOCTYPE html>
if (file_exists(base_dir().'/manifest.json')) {
echo '
<link rel="manifest" href="'.base_path().'/manifest.json?r='.rand().'">';
<link rel="manifest" href="'.base_path().'/manifest.json?r='.random_int(0, mt_getrandmax()).'">';
}
// CSS

View File

@ -236,7 +236,7 @@ function translateTemplate()
];
$template = replace($template, $replaces);
$template = HTMLBuilder::replace($template);
$template = $template ? HTMLBuilder::replace($template) : $template;
$template = replace($template, $replaces);
// Informazioni estese sulle azioni dell'utente
@ -297,7 +297,7 @@ function slashes($string)
*/
function isAjaxRequest()
{
return Whoops\Util\Misc::isAjaxRequest() && filter('ajax') !== null;
return Whoops\Util\Misc::isAjaxRequest() && filter('ajax') !== null && filter('ajax') !== '';
}
/**
@ -339,7 +339,7 @@ function redirectOperation($id_module, $id_record)
*/
function prepareToField($string)
{
return str_replace('"', '&quot;', $string);
return $string ? str_replace('"', '&quot;', $string) : $string;
}
/**
@ -442,7 +442,7 @@ function session_get($name, $default = null)
$session = &$session[$piece];
}
return isset($session) ? $session : $default;
return $session ?? $default;
}
/**

View File

@ -38,9 +38,7 @@ if (!function_exists('array_column')) {
*/
function array_column($array, $key)
{
return array_map(function ($v) use ($key) {
return is_object($v) ? $v->$key : $v[$key];
}, $array);
return array_map(fn ($v) => is_object($v) ? $v->$key : $v[$key], $array);
}
}
@ -55,9 +53,7 @@ if (!function_exists('array_clean')) {
function array_clean($array)
{
if (!empty($array)) {
return array_unique(array_values(array_filter($array, function ($value) {
return !empty($value);
})));
return array_unique(array_values(array_filter($array, fn ($value) => !empty($value))));
}
}
}
@ -448,8 +444,8 @@ if (!function_exists('color_inverse')) {
$R2 = 255;
$G2 = 255;
$B2 = 255;
$L1 = 0.2126 * pow($R1 / 255, 2.2) + 0.7152 * pow($G1 / 255, 2.2) + 0.0722 * pow($B1 / 255, 2.2);
$L2 = 0.2126 * pow($R2 / 255, 2.2) + 0.7152 * pow($G2 / 255, 2.2) + 0.0722 * pow($B2 / 255, 2.2);
$L1 = 0.2126 * ($R1 / 255) ** 2.2 + 0.7152 * ($G1 / 255) ** 2.2 + 0.0722 * ($B1 / 255) ** 2.2;
$L2 = 0.2126 * ($R2 / 255) ** 2.2 + 0.7152 * ($G2 / 255) ** 2.2 + 0.0722 * ($B2 / 255) ** 2.2;
if ($L1 > $L2) {
$lum = ($L1 + 0.05) / ($L2 + 0.05);
} else {
@ -602,6 +598,6 @@ if (!function_exists('adjustBrightness')) {
$color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
}
return '#'.implode($hexCode);
return '#'.implode('', $hexCode);
}
}

View File

@ -25,7 +25,7 @@ switch (filter('op')) {
case 'add':
$adapter = new FileAdapter();
$adapter->setTranslation('name', post('name'));
$adapter->name = post('name');
$adapter->class = '\\Modules\\FileAdapters\\Adapters\\'.post('class');
$adapter->save();
@ -37,10 +37,14 @@ switch (filter('op')) {
break;
case 'update':
$adapter->setTranslation('name', post('name'));
$adapter->name = post('name');
$adapter->class = '\\Modules\\FileAdapters\\Adapters\\'.post('class');
$adapter->options = post('options');
$adapter->is_default = post('is_default');
if (post('is_default') == 1) {
$dbo->query('UPDATE `zz_storage_adapters` SET `is_default` = 0');
$adapter->is_default = post('is_default');
}
$adapter->save();

View File

@ -34,7 +34,7 @@ include_once __DIR__.'/../../core.php';
</div>
<div class="col-md-2">
{[ "type": "checkbox", "label": "<?php echo tr('Predefinito'); ?>", "name": "is_default", "value": "$is_default$" ]}
{[ "type": "checkbox", "label": "<?php echo tr('Predefinito'); ?>", "name": "is_default", "value": "$is_default$", "extra": "<?php echo $record['is_default'] == 1 ? 'readonly' : ''; ?>" ]}
</div>
</div>

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
use Modules\FileAdapters\FileAdapter;
if (isset($id_record)) {
if (!empty($id_record)) {
$adapter = FileAdapter::find($id_record);
$record = $dbo->fetchOne('SELECT * FROM `zz_storage_adapters` WHERE `id`='.prepare($id_record));

View File

@ -260,7 +260,7 @@ if (!empty($results) || !empty($results_settings) || !empty($results_settings_ad
'.$key.'
</td>
<td>
'.($setting['current'] ? $setting['current'] : '⚠️ Impostazione mancante').'
'.($setting['current'] ?: '⚠️ Impostazione mancante').'
</td>
<td>
'.$setting['expected'].'

View File

@ -156,7 +156,7 @@ function database(button) {
}
function controlli(button) {
openModal("'.tr('Controlli del gestionale').'", "'.$module->fileurl('controlli.php').'?id_module='.$id_module.'");
openModal("'.tr('Controlli del gestionale').'", "'.$module->fileurl('controlli.php').'?id_module='.$id_module. '");
}
function search(button) {
@ -171,9 +171,9 @@ function search(button) {
},
success: function(data){
if (data === "none" || !data) {
$("#update-search").html("'.tr('Nessun aggiornamento disponibile').'.");
$("#update-search").html("<i class=\"fa fa-check-circle text-success\" aria-hidden=\"true\"></i> '.tr('Nessun aggiornamento disponibile'). '.");
} else {
let beta_warning = data.includes("beta") ? "<br><b>'.tr('Attenzione: la versione individuata è in fase sperimentale, e pertanto può presentare diversi bug e malfunzionamenti').'.</b>" : "";
let beta_warning = data.includes("beta") ? "<br><i class=\"fa-exclamation-triangle text-danger\" aria-hidden=\"true\"></i> <b class=\"text-danger\">'.tr('Attenzione: la versione individuata è in fase sperimentale e potrebbe pertanto presentare diversi malfunzionamenti. Se ne sconsiglia l\'aggiornamento in installazioni di produzione').'.</b>" : "";
$("#update-search").html("'.tr("E' stato individuato un nuovo aggiornamento").': " + data + "." + beta_warning + "<br>'.tr('Scaricalo ora: _LINK_', [
'_LINK_' => "<a target='_blank' href='https://github.com/devcode-it/openstamanager/releases'>https://github.com/devcode-it/openstamanager/releases</a>",
]).'");

View File

@ -54,7 +54,7 @@ if (file_exists($extraction_dir.'/VERSION')) {
->ignoreVCS(true)
->in($extraction_dir);
$files_module = $finder->getTranslation('name')('MODULE');
$files_module = $finder->name('MODULE');
foreach ($files_module as $file) {
// Informazioni dal file di configurazione
@ -69,8 +69,6 @@ if (file_exists($extraction_dir.'/VERSION')) {
$table = 'zz_modules';
$installed = Module::find((new Module())->getByField('name', $info['name']));
$insert['parent'] = (new Module())->getByField('name', $info['parent']);
$insert['icon'] = $info['icon'];
}
// Copia dei file nella cartella relativa
@ -86,6 +84,8 @@ if (file_exists($extraction_dir.'/VERSION')) {
'order' => 100,
'default' => 0,
'enabled' => 1,
'icon' => $info['icon'],
'parent' => (new Module())->getByField('name', $info['parent']),
]));
$id_record = $dbo->lastInsertedID();
$dbo->insert($table.'_lang', array_merge($insert, [
@ -107,7 +107,7 @@ if (file_exists($extraction_dir.'/VERSION')) {
->ignoreVCS(true)
->in($extraction_dir);
$files_plugin_template = $finder->getTranslation('name')('PLUGIN')->getTranslation('name')('TEMPLATES');
$files_plugin_template = $finder->name('PLUGIN')->name('TEMPLATES');
foreach ($files_plugin_template as $file) {
// Informazioni dal file di configurazione
@ -115,6 +115,7 @@ if (file_exists($extraction_dir.'/VERSION')) {
// Informazioni aggiuntive per il database
$insert = [];
$insert_lang = [];
// Plugin
if (basename($file->getRealPath()) == 'PLUGIN') {
@ -135,7 +136,7 @@ if (file_exists($extraction_dir.'/VERSION')) {
$installed = Prints::getPrints()[$info['name']];
$insert['id_module'] = (new Module())->getByField('name', $info['module']);
$insert['is_record'] = $info['is_record'];
$insert['filename'] = $info['filename'];
$insert_lang['filename'] = $info['filename'];
$insert['icon'] = $info['icon'];
}
@ -154,7 +155,7 @@ if (file_exists($extraction_dir.'/VERSION')) {
'enabled' => 1,
]));
$id_record = $dbo->lastInsertedID();
$dbo->insert($table.'_lang', array_merge($insert, [
$dbo->insert($table.'_lang', array_merge($insert_lang, [
'name' => $info['name'],
'title' => !empty($info['title']) ? $info['title'] : $info['name'],
'id_record' => $id_record,

View File

@ -242,9 +242,13 @@ switch (post('op')) {
echo json_encode(['id' => $id_record, 'text' => $anagrafica->ragione_sociale]);
}
$descrizioni_tipi = $anagrafica->tipi()->get()->pluck('name')->toArray();
$descrizioni_tipi = $anagrafica->tipi()->get();
foreach ($descrizioni_tipi as $tipo) {
$tipi[] = $tipo->getTranslation('name');
}
flash()->info(tr('Aggiunta nuova anagrafica di tipo _TYPE_', [
'_TYPE_' => '"'.implode(', ', $descrizioni_tipi).'"',
'_TYPE_' => '"'.implode(', ', $tipi).'"',
]));
// Controllo che il Codice Fiscale non sia già presente
@ -348,7 +352,7 @@ switch (post('op')) {
// Operazioni aggiuntive per il logo e filigrana stampe
if (filter('op') == 'aggiungi-allegato' || filter('op') == 'modifica-allegato') {
$nome = $upload->getTranslation('name');
$nome = $upload->name;
$logo_stampe = ['logo stampe', 'logo_stampe', 'logo stampe.jpg', 'logo stampe.png'];
if (in_array(strtolower($nome), $logo_stampe)) {

View File

@ -43,7 +43,7 @@ echo '
</div>
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Tipo di anagrafica').'", "name": "idtipoanagrafica[]", "id": "idtipoanagrafica_add", "multiple": "1", "required": 1, "values": "query=SELECT `an_tipianagrafiche`.`id`, `name` as descrizione FROM `an_tipianagrafiche` LEFT JOIN `an_tipianagrafiche_lang` ON (`an_tipianagrafiche`.`id` = `an_tipianagrafiche_lang`.`id_record` AND `an_tipianagrafiche_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `an_tipianagrafiche`.`id` NOT IN (SELECT DISTINCT(`x`.`idtipoanagrafica`) FROM `an_tipianagrafiche_anagrafiche` x INNER JOIN `an_tipianagrafiche` t ON `x`.`idtipoanagrafica` = `t`.`id` LEFT JOIN `an_tipianagrafiche_lang` ON (`t`.`id` = `an_tipianagrafiche_lang`.`id_record` AND `an_tipianagrafiche_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') INNER JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `x`.`idanagrafica` WHERE `an_tipianagrafiche`.`id` = '.prepare($id_tipo_azienda).' AND `deleted_at` IS NULL) ORDER BY `name`", "value": "'.(isset($idtipoanagrafica) ? $idtipoanagrafica : null).'", "readonly": '.(!empty(get('readonly_tipo')) ? 1 : 0).' ]}
{[ "type": "select", "label": "'.tr('Tipo di anagrafica').'", "name": "idtipoanagrafica[]", "id": "idtipoanagrafica_add", "multiple": "1", "required": 1, "values": "query=SELECT `an_tipianagrafiche`.`id`, `name` as descrizione FROM `an_tipianagrafiche` LEFT JOIN `an_tipianagrafiche_lang` ON (`an_tipianagrafiche`.`id` = `an_tipianagrafiche_lang`.`id_record` AND `an_tipianagrafiche_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `an_tipianagrafiche`.`id` NOT IN (SELECT DISTINCT(`x`.`idtipoanagrafica`) FROM `an_tipianagrafiche_anagrafiche` x INNER JOIN `an_tipianagrafiche` t ON `x`.`idtipoanagrafica` = `t`.`id` LEFT JOIN `an_tipianagrafiche_lang` ON (`t`.`id` = `an_tipianagrafiche_lang`.`id_record` AND `an_tipianagrafiche_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') INNER JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `x`.`idanagrafica` WHERE `an_tipianagrafiche`.`id` = '.prepare($id_tipo_azienda).' AND `deleted_at` IS NULL) ORDER BY `name`", "value": "'.($idtipoanagrafica ?? null).'", "readonly": '.(!empty(get('readonly_tipo')) ? 1 : 0).' ]}
</div>
</div>

View File

@ -252,7 +252,7 @@ switch ($resource) {
case 'clienti_fornitori':
$id_cliente = Tipo::find((new Tipo())->getByField('name', 'Cliente', Models\Locale::getPredefined()->id))->id;
$id_fornitore = Tipo::find((new Tipo())->getByField('name', 'Fornitore', Models\Locale::getPredefined()->id))->id;
$id_azienda = Tipo::find((new Tipo())->getByField('name', 'Fornitore', Models\Locale::getPredefined()->id))->id;
$id_azienda = Tipo::find((new Tipo())->getByField('name', 'Azienda', Models\Locale::getPredefined()->id))->id;
$query = "SELECT `an_anagrafiche`.`idanagrafica` AS id, CONCAT_WS('', `ragione_sociale`, IF(`citta` !='' OR `provincia` != '', CONCAT(' (', `citta`, IF(`provincia`!='', CONCAT(' ', `provincia`), ''), ')'), ''), IF(`an_anagrafiche`.`deleted_at` IS NULL, '', ' (".tr('eliminata').")'),' - ', `an_anagrafiche`.`codice`) AS descrizione, `an_tipianagrafiche_lang`.`name` AS optgroup, `idtipointervento_default`, `an_tipianagrafiche`.`id` as id_tipo FROM `an_tipianagrafiche` LEFT JOIN `an_tipianagrafiche_lang` ON (`an_tipianagrafiche`.`id` = `an_tipianagrafiche_lang`.`id_record` AND `an_tipianagrafiche_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).') INNER JOIN `an_tipianagrafiche_anagrafiche` ON `an_tipianagrafiche`.`id`=`an_tipianagrafiche_anagrafiche`.`idtipoanagrafica` INNER JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica`=`an_tipianagrafiche_anagrafiche`.`idanagrafica` |where| ORDER BY `optgroup` ASC, `ragione_sociale` ASC';
@ -360,9 +360,9 @@ switch ($resource) {
*
FROM
(SELECT '0' AS id, (SELECT `lat` FROM `an_anagrafiche` |where|) AS lat, (SELECT `lng` FROM `an_anagrafiche` |where|) AS lng, (SELECT `idzona` FROM `an_anagrafiche` |where|) AS idzona, CONCAT_WS(' - ', \"".tr('Sede legale')."\" , (SELECT CONCAT (`citta`, IF(`indirizzo`!='',CONCAT(' (', `indirizzo`, ')'), ''), ' (',`ragione_sociale`,')') FROM `an_anagrafiche` |where|)) AS descrizione
UNION
SELECT
`id`,
`lat`,

View File

@ -473,9 +473,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
</div>';
$banche = Banca::where('id_anagrafica', $anagrafica->id)->get();
$banca_predefinita = $banche->first(function ($item) {
return !empty($item['predefined']);
});
$banca_predefinita = $banche->first(fn ($item) => !empty($item['predefined']));
$modulo_banche = (new Module())->getByField('name', 'Banche', Models\Locale::getPredefined()->id);
if (!$banche->isEmpty()) {
echo '

View File

@ -192,9 +192,7 @@ class Anagrafica extends Model
*/
public function isTipo($type)
{
return $this->tipi()->get()->search(function ($item, $key) use ($type) {
return TipoAnagrafica::find($item->id)->getTranslation('name', \Models\Locale::getPredefined()->id) == $type;
}) !== false;
return $this->tipi()->get()->search(fn ($item, $key) => TipoAnagrafica::find($item->id)->getTranslation('name', \Models\Locale::getPredefined()->id) == $type) !== false;
}
public function delete()

View File

@ -272,7 +272,7 @@ switch ($resource) {
}
// Ultimo prezzo al cliente
$ultimo_prezzo = $dbo->fetchArray('SELECT '.($prezzi_ivati ? '(`prezzo_unitario_ivato`-`sconto_unitario_ivato`)' : '(`prezzo_unitario`-`sconto_unitario`)').' AS prezzo_ultimo FROM `co_righe_documenti` INNER JOIN `co_documenti` ON `co_documenti`.`id`=`co_righe_documenti`.`iddocumento` INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id`=`co_documenti`.`idtipodocumento` WHERE `idarticolo`='.prepare($id_articolo).' AND `idanagrafica`='.prepare($id_anagrafica).' AND `co_tipidocumento`.`dir`='.prepare($direzione).') ORDER BY `data` DESC LIMIT 0,1');
$ultimo_prezzo = $dbo->fetchArray('SELECT '.($prezzi_ivati ? '(`prezzo_unitario_ivato`-`sconto_unitario_ivato`)' : '(`prezzo_unitario`-`sconto_unitario`)').' AS prezzo_ultimo FROM `co_righe_documenti` INNER JOIN `co_documenti` ON `co_documenti`.`id`=`co_righe_documenti`.`iddocumento` INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id`=`co_documenti`.`idtipodocumento` WHERE `idarticolo`='.prepare($id_articolo).' AND `idanagrafica`='.prepare($id_anagrafica).' AND `co_tipidocumento`.`dir`='.prepare($direzione).' ORDER BY `data` DESC LIMIT 0,1');
$results = array_merge($prezzi, $listino, $listini_sempre_visibili, $prezzo_articolo, $ultimo_prezzo);

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
use Modules\Articoli\Articolo;
if (isset($id_record)) {
if (!empty($id_record)) {
$articolo = Articolo::withTrashed()->find($id_record);
$record = $dbo->fetchOne('SELECT *, `mg_articoli_lang`.`name` as descrizione, (SELECT COUNT(id) FROM `mg_prodotti` WHERE `id_articolo` = `mg_articoli`.`id`) AS serial FROM `mg_articoli` LEFT JOIN `mg_articoli_lang` ON (`mg_articoli_lang`.`id_record` = `mg_articoli`.`id` AND `mg_articoli_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `mg_articoli`.`id`='.prepare($id_record));

View File

@ -32,19 +32,19 @@ if (!function_exists('aggiorna_sedi_movimenti')) {
$idsede = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza'];
$dbo->query('UPDATE `mg_movimenti` SET `idsede`='.prepare($idsede).' WHERE `reference_type`='.prepare('Modules\DDT\DDT').' AND `reference_id`='.prepare($id));
$dbo->query('UPDATE `mg_movimenti` SET `idsede`='.prepare($idsede).' WHERE `reference_type`='.prepare(Modules\DDT\DDT::class).' AND `reference_id`='.prepare($id));
} elseif ($module == 'documenti') {
$rs = $dbo->fetchArray('SELECT `idsede_partenza`, `idsede_destinazione`, `dir` FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id`='.prepare($id));
$idsede = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza'];
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare('Modules\Fatture\Fattura').' AND reference_id='.prepare($id));
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare(Modules\Fatture\Fattura::class).' AND reference_id='.prepare($id));
} elseif ($module == 'interventi') {
$rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione FROM in_interventi WHERE in_interventi.id='.prepare($id));
$idsede = $rs[0]['idsede_partenza'];
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare('Modules\Interventi\Intervento').' AND reference_id='.prepare($id));
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare(Modules\Interventi\Intervento::class).' AND reference_id='.prepare($id));
}
}
}

View File

@ -149,7 +149,7 @@ if (!empty($movimenti)) {
// Data
$utente = $dbo->table('zz_users')->where('id', $movimento->idutente)->first();
$data = ($movimento->data ? $movimento->data : $movimento->data_movimento);
$data = ($movimento->data ?: $movimento->data_movimento);
echo '
<td class="text-center">'.dateFormat($data).' <span class="tip" title="'.tr('Creazione movimento: _DATE_ <br>Creatore movimento: _USER_', [
'_DATE_' => timestampFormat($movimento->data_movimento),

View File

@ -82,7 +82,7 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C
$data = $request['data'];
// Gestione categoria
list($categoria, $sottocategoria) = $this->gestioneCategorie($data['categoria'], $data['sottocategoria']);
[$categoria, $sottocategoria] = $this->gestioneCategorie($data['categoria'], $data['sottocategoria']);
$articolo = Articolo::build($data['codice'], $categoria, $sottocategoria);
$articolo->setPrezzoVendita($data['prezzo_vendita'], $articolo->idiva_vendita);
@ -99,7 +99,7 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C
$data = $request['data'];
$articolo = Articolo::find($request['id']);
list($categoria, $sottocategoria) = $this->gestioneCategorie($data['categoria'], $data['sottocategoria']);
[$categoria, $sottocategoria] = $this->gestioneCategorie($data['categoria'], $data['sottocategoria']);
// Gestione categoria
if (!empty($categoria)) {

View File

@ -296,9 +296,7 @@ class Articolo extends Model
}
$movimenti = $movimenti->get()
->mapToGroups(function ($item, $key) {
return [$item->idsede => (float) $item->attributes['qta']];
})
->mapToGroups(fn ($item, $key) => [$item->idsede => (float) $item->attributes['qta']])
->toArray();
return $movimenti;

View File

@ -85,11 +85,7 @@ class Movimento extends Model
public function getQtaAttribute()
{
if (isset($this->qta_documento)) {
return $this->qta_documento;
}
return $this->qta;
return $this->qta_documento ?? $this->qta;
}
public function articolo()

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
use Modules\AttributiCombinazioni\Attributo;
if (isset($id_record)) {
if (!empty($id_record)) {
$attributo = Attributo::find($id_record);
$record = $attributo->toArray();

View File

@ -48,15 +48,15 @@ switch (post('op')) {
case 'addtech':
$idtecnico = post('idtecnico');
$data_inizio = post('data_inizio');
$data_fine = null;
$data_fine = post('data_fine');
// Controllo sull'effettivo inserimento di una data di fine successiva a quella di inizio
if (!empty(post('data_fine'))) {
if (!empty($data_fine)) {
if (new DateTime(post('data_fine')) >= new DateTime($data_inizio)) {
$data_fine = post('data_fine');
}
}
$data_fine = isset($data_fine) ? $data_fine : '0000-00-00';
$data_fine ??= '0000-00-00';
// Inserisco il tecnico
$dbo->insert('an_sedi_tecnici', [
@ -74,17 +74,17 @@ switch (post('op')) {
$errors = 0;
foreach (post('data_inizio') as $idautomezzotecnico => $data) {
$idautomezzotecnico = $idautomezzotecnico;
$idtecnico = post('idtecnico')[$idautomezzotecnico];
$data_inizio = post('data_inizio')[$idautomezzotecnico];
$data_fine = null;
$data_fine = post('data_fine')[$idautomezzotecnico];
// Controllo sull'effettivo inserimento di una data di fine successiva a quella di inizio
if (!empty(post('data_fine')[$idautomezzotecnico])) {
if (new DateTime(post('data_fine')[$idautomezzotecnico]) >= new DateTime($data_inizio)) {
$data_fine = post('data_fine')[$idautomezzotecnico];
if (!empty($data_fine)) {
if (new DateTime($data_fine) < new DateTime($data_inizio)) {
$data_fine = null;
}
}
$data_fine = isset($data_fine) ? $data_fine : '0000-00-00';
$data_fine ??= '0000-00-00';
$dbo->update('an_sedi_tecnici', [
'idtecnico' => $idtecnico,

View File

@ -2,6 +2,6 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM an_sedi WHERE an_sedi.id='.prepare($id_record));
}

View File

@ -24,7 +24,7 @@ if (!empty($rs_art)) {
echo '
<tr>
<td>
<input type="hidden" name="idautomezzotecnico[]" value="'.$r['id'].'">
<input type="hidden" name="idtecnico['.$r['id'].']" value="'.$r['idtecnico'].'">
'.$r['ragione_sociale'].'
</td>';
@ -37,7 +37,7 @@ if (!empty($rs_art)) {
// Data di fine
echo '
<td>
{[ "type": "date", "name": "data_fine['.$r['id'].']", "required": 1, "value": "'.$r['data_fine'].'", "min-date": "'.$r['data_inizio'].'" ]}
{[ "type": "date", "name": "data_fine['.$r['id'].']", "value": "'.$r['data_fine'].'", "min-date": "'.$r['data_inizio'].'" ]}
</td>';
// Pulsanti per aggiornamento date tecnici

View File

@ -98,10 +98,11 @@ if (filter('op') == 'restore') {
return;
}
if (filter('number') == null) {
$number = filter('number');
if ($number === null) {
$path = $_FILES['blob']['tmp_name'];
} else {
$number = filter('number');
$number != '' ? $number : 0;
$number = intval($number);
$backups = Backup::getList();

View File

@ -21,7 +21,7 @@ use Modules\Banche\Banca;
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$banca = Banca::find($id_record);
if (!empty($banca)) {

View File

@ -82,7 +82,7 @@ class Banca extends Model
protected function fixPredefined()
{
$predefined = isset($this->predefined) ? $this->predefined : false;
$predefined = $this->predefined ?? false;
// Selezione automatica per primo record
$count = self::where('id_anagrafica', $this->id_anagrafica)

View File

@ -23,7 +23,7 @@ switch (post('op')) {
case 'update':
$descrizione = post('descrizione');
if ($dbo->fetchNum('SELECT * FROM `dt_aspettobeni` LEFT JOIN `dt_aspettobeni_lang` ON (`dt_aspettobeni`.`id`=`dt_aspettobeni_lang`.`id_record` AND `dt_aspettobeni_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `name`='.prepare($descrizione).' AND `dt_aspettobeni`.`id`!='.prepare($id_record)) == 0) {
if (empty($dbo->fetchArray('SELECT * FROM `dt_aspettobeni` LEFT JOIN `dt_aspettobeni_lang` ON (`dt_aspettobeni`.`id`=`dt_aspettobeni_lang`.`id_record` AND `dt_aspettobeni_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `name`='.prepare($descrizione).' AND `dt_aspettobeni`.`id`!='.prepare($id_record)))) {
$dbo->query('UPDATE `dt_aspettobeni_lang` SET `name`='.prepare($descrizione).' WHERE `id_record`='.prepare($id_record)).' AND `id_lang`='.prepare(Models\Locale::getDefault()->id);
flash()->info(tr('Salvataggio completato.'));
} else {
@ -34,7 +34,7 @@ switch (post('op')) {
case 'add':
$descrizione = post('descrizione');
if ($dbo->fetchNum('SELECT * FROM `dt_aspettobeni_lang` WHERE `name`='.prepare($descrizione)) == 0) {
if (empty($dbo->fetchArray('SELECT * FROM `dt_aspettobeni` LEFT JOIN `dt_aspettobeni_lang` ON (`dt_aspettobeni`.`id`=`dt_aspettobeni_lang`.`id_record` AND `dt_aspettobeni_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `name`='.prepare($descrizione)))) {
$dbo->query('INSERT INTO `dt_aspettobeni` (`created_at`) VALUES (NOW())');
$id_record = $dbo->lastInsertedID();
@ -54,7 +54,7 @@ switch (post('op')) {
case 'delete':
$documenti = $dbo->fetchNum('SELECT `id` FROM `dt_ddt` WHERE `idaspettobeni`='.prepare($id_record).' UNION SELECT `id` FROM `co_documenti` WHERE `idaspettobeni`='.prepare($id_record));
if (isset($id_record) && empty($documenti)) {
if ((!empty($id_record)) && empty($documenti)) {
$dbo->query('DELETE FROM `dt_aspettobeni` WHERE `id`='.prepare($id_record));
flash()->info(tr('Aspetto beni eliminato con successo.'));
} else {

View File

@ -19,6 +19,6 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `dt_aspettobeni` LEFT JOIN `dt_aspettobeni_lang` ON (`dt_aspettobeni`.`id`=`dt_aspettobeni_lang`.`id_record` AND `dt_aspettobeni_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `dt_aspettobeni`.`id`='.prepare($id_record));
}

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
$id_original = filter('id_original');
if (isset($id_record)) {
if (!empty($id_record)) {
include __DIR__.'/init.php';
}
@ -29,7 +29,7 @@ if (isset($id_record)) {
if (isset($id_original)) {
echo base_path().'/controller.php?id_module='.$id_module;
if (isset($id_record)) {
if (!empty($id_record)) {
echo '&id_record='.$id_record;
}
}
@ -58,7 +58,7 @@ if (isset($id_original)) {
<div class="row">
<div class="col-md-12 text-right">
<?php
if (isset($id_record)) {
if (!empty($id_record)) {
?>
<button type="submit" class="btn btn-success"><i class="fa fa-save"></i> <?php echo tr('Salva'); ?></button>
<?php

View File

@ -20,7 +20,7 @@
include_once __DIR__.'/../../core.php';
use Modules\Articoli\Categoria;
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `mg_categorie` LEFT JOIN `mg_categorie_lang` ON (`mg_categorie`.`id`=`mg_categorie_lang`.`id_record` AND `mg_categorie_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `mg_categorie`.`id`='.prepare($id_record));
$categoria = Categoria::find($id_record);

View File

@ -37,7 +37,7 @@ if ($record['doc_associati'] > 0) {
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Gruppi abilitati'); ?>", "name": "permessi[]", "value": "$permessi$", "values": "query=SELECT `zz_groups`.`id`, `zz_groups_lang`.`name` AS text FROM `zz_groups`", "multiple": 1 ]}
{[ "type": "select", "label": "<?php echo tr('Gruppi abilitati'); ?>", "name": "permessi[]", "value": "$permessi$", "values": "query=SELECT `zz_groups`.`id`, `zz_groups_lang`.`name` AS text FROM `zz_groups` LEFT JOIN `zz_groups_lang` ON (`zz_groups`.`id` = `zz_groups_lang`.`id_record` AND `zz_groups_lang`.`id_lang` = <?php echo prepare(Models\Locale::getDefault()->id); ?>)", "multiple": 1 ]}
</div>
</div>
</form>

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
use Modules\CategorieDocumentali\Categoria;
if (isset($id_record)) {
if (!empty($id_record)) {
$categoria = Categoria::find($id_record);
$record = $dbo->fetchOne('SELECT *,

View File

@ -99,7 +99,7 @@ switch (filter('op')) {
$id = $id_record;
}
if ($dbo->fetchNum('SELECT * FROM `my_impianti` WHERE (`id_categoria`='.prepare($id).' OR `id_sottocategoria`='.prepare($id).' OR `id_sottocategoria` IN (SELECT `id` FROM `my_impianti_categorie` WHERE `parent`='.prepare($id).')) AND `deleted_at` IS NULL') == 0) {
if (empty($dbo->fetchArray('SELECT * FROM `my_impianti` WHERE (`id_categoria`='.prepare($id).' OR `id_sottocategoria`='.prepare($id).' OR `id_sottocategoria` IN (SELECT `id` FROM `my_impianti_categorie` WHERE `parent`='.prepare($id).'))'))) {
$dbo->query('DELETE FROM `my_impianti_categorie` WHERE `id`='.prepare($id));
flash()->info(tr('_TYPE_ eliminata con successo!', [

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
$id_original = filter('id_original');
if (isset($id_record)) {
if (!empty($id_record)) {
include __DIR__.'/init.php';
}
@ -29,7 +29,7 @@ if (isset($id_record)) {
if (isset($id_original)) {
echo base_path().'/controller.php?id_module='.$id_module;
if (isset($id_record)) {
if (!empty($id_record)) {
echo '&id_record='.$id_record;
}
}
@ -58,7 +58,7 @@ if (isset($id_original)) {
<div class="row">
<div class="col-md-12 text-right">
<?php
if (isset($id_record)) {
if (!empty($id_record)) {
?>
<button type="submit" class="btn btn-success"><i class="fa fa-save"></i> <?php echo tr('Salva'); ?></button>
<?php

View File

@ -20,7 +20,7 @@
include_once __DIR__.'/../../core.php';
use Modules\Impianti\Categoria;
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `my_impianti_categorie` LEFT JOIN `my_impianti_categorie_lang` ON (`my_impianti_categorie`.`id`=`my_impianti_categorie_lang`.`id_record` AND `my_impianti_categorie_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `my_impianti_categorie`.`id`='.prepare($id_record));
$categoria = Categoria::find($id_record);

View File

@ -25,7 +25,7 @@ switch (filter('op')) {
$predefined = post('predefined');
if (isset($descrizione)) {
if ($dbo->fetchNum('SELECT * FROM `dt_causalet` LEFT JOIN `dt_causalet_lang` ON (`dt_causalet`.`id` = `dt_causalet_lang`.`id_record` AND `dt_causalet_lang`.`id_lang` ='.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `name`='.prepare($descrizione).' AND `dt_causalet`.`id`!='.prepare($id_record)) == 0) {
if (empty($dbo->fetchArray('SELECT * FROM `dt_causalet` LEFT JOIN `dt_causalet_lang` ON (`dt_causalet`.`id` = `dt_causalet_lang`.`id_record` AND `dt_causalet_lang`.`id_lang` ='.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `name`='.prepare($descrizione).' AND `dt_causalet`.`id`!='.prepare($id_record)))) {
if (!empty($predefined)) {
$dbo->query('UPDATE dt_causalet SET predefined = 0');
}
@ -55,7 +55,7 @@ switch (filter('op')) {
$descrizione = filter('descrizione');
if (isset($descrizione)) {
if ($dbo->fetchNum('SELECT * FROM `dt_causalet` LEFT JOIN `dt_causalet_lang` ON (`dt_causalet`.`id` = `dt_causalet_lang`.`id_record` AND `dt_causalet_lang`.`id_lang` ='.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `name`='.prepare($descrizione)) == 0) {
if (empty($dbo->fetchArray('SELECT * FROM `dt_causalet` LEFT JOIN `dt_causalet_lang` ON (`dt_causalet`.`id` = `dt_causalet_lang`.`id_record` AND `dt_causalet_lang`.`id_lang` ='.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `name`='.prepare($descrizione)))) {
$dbo->insert('dt_causalet', [
'is_importabile' => 1,
]);
@ -83,7 +83,7 @@ switch (filter('op')) {
case 'delete':
$documenti = $dbo->fetchNum('SELECT `id` FROM `dt_ddt` WHERE `idcausalet`='.prepare($id_record).' UNION SELECT `id` FROM `co_documenti` WHERE `idcausalet`='.prepare($id_record));
if (isset($id_record) && empty($documenti)) {
if ((!empty($id_record)) && empty($documenti)) {
$dbo->query('DELETE FROM `dt_causalet` WHERE `id`='.prepare($id_record));
} else {
$dbo->update('dt_causalet', [

View File

@ -19,6 +19,6 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `dt_causalet` LEFT JOIN `dt_causalet_lang` ON (`dt_causalet`.`id` = `dt_causalet_lang`.`id_record` AND `dt_causalet_lang`.`id_lang` ='.prepare(Models\Locale::getDefault()->id).') WHERE `dt_causalet`.`id`='.prepare($id_record));
}

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
switch (filter('op')) {
case 'update':
if (isset($id_record)) {
if (!empty($id_record)) {
$database->update('mg_causali_movimenti', [
'tipo_movimento' => post('tipo_movimento'),
], ['id' => $id_record]);
@ -49,7 +49,7 @@ switch (filter('op')) {
break;
case 'delete':
if (isset($id_record)) {
if (!empty($id_record)) {
$dbo->query('DELETE FROM `mg_causali_movimenti` WHERE `id`='.prepare($id_record));
flash()->info(tr('Tipologia di _TYPE_ eliminata con successo!', [

View File

@ -19,6 +19,6 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `mg_causali_movimenti` LEFT JOIN `mg_causali_movimenti_lang` ON (`mg_causali_movimenti`.`id` = `mg_causali_movimenti_lang`.`id_record` AND `mg_causali_movimenti_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `mg_causali_movimenti`.`id`='.prepare($id_record));
}

View File

@ -64,6 +64,7 @@ if ($main_check) {
$.post('<?php echo $rootdir; ?>/modules/checklists/ajax.php', {
op: "edit_check",
id_module: globals.id_module,
id_record: "<?php echo $id_record; ?>",
content: input('content_edit').get(),
is_titolo: input('is_titolo').get(),

View File

@ -41,7 +41,7 @@ echo '
</div>
<div class="col-md-3">
{[ "type": "select", "label": "'.tr('Plugin del template').'", "name": "plugin", "values": "query=SELECT `zz_plugins`.`id`, `zz_plugins_lang`.`title` AS descrizione, `zz_modules_lang`.`name` AS optgroup FROM zz_plugins INNER JOIN `zz_modules` ON `zz_plugins`.`id_module_to` = `zz_modules`.`id` LEFT JOIN `zz_modules_lang` ON (`zz_modules`.`id` = `zz_modules_lang`.`id_record` AND `zz_modules_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN `zz_plugins_lang` ON (`zz_plugins`.`id` = `zz_plugins_lang`.`id_record` AND `zz_plugins_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `enabled` = 1", "value": "'.$record->id_plugin.'", "disabled": "'.!empty($record->id_module).'" ]}
{[ "type": "select", "label": "'.tr('Plugin del template').'", "name": "plugin", "values": "query=SELECT `zz_plugins`.`id`, `zz_plugins_lang`.`title` AS descrizione, `zz_modules_lang`.`name` AS optgroup FROM zz_plugins INNER JOIN `zz_modules` ON `zz_plugins`.`idmodule_to` = `zz_modules`.`id` LEFT JOIN `zz_modules_lang` ON (`zz_modules`.`id` = `zz_modules_lang`.`id_record` AND `zz_modules_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN `zz_plugins_lang` ON (`zz_plugins`.`id` = `zz_plugins_lang`.`id_record` AND `zz_plugins_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `zz_plugins`.`enabled` = 1", "value": "'.$record->id_plugin.'", "disabled": "'.!empty($record->id_module).'" ]}
</div>
</div>
</div>
@ -211,6 +211,8 @@ function delete_check(id){
op: "delete_check",
id: id,
main_check: 1,
id_module: globals.id_module,
id_record: id,
}, function(){
location.reload();
});

View File

@ -24,6 +24,6 @@ use Modules\Checklists\Checklist;
$checklist_module = Module::find((new Module())->getByField('name', 'Checklists', Models\Locale::getPredefined()->id));
if (isset($id_record)) {
if (!empty($id_record)) {
$record = Checklist::find($id_record);
}

View File

@ -21,8 +21,8 @@ switch (filter('op')) {
}
$combinazione->setTranslation('name', $nome);
$combinazione->codice = post('codice');
$combinazione->id_categoria = post('id_categoria');
$combinazione->id_sottocategoria = post('id_sottocategoria');
$combinazione->id_categoria = post('id_categoria')?: null;
$combinazione->id_sottocategoria = post('id_sottocategoria')?: null;
$combinazione->save();
$id_record = $combinazione->id;

View File

@ -73,9 +73,7 @@ class Combinazione extends Model
$result = parent::save($options);
// Sincronizzazione dei campi condivisi con la Combinazione
$sincro = collect($this->toArray())->filter(function ($value, $key) {
return in_array($key, self::$campi_combinazione);
});
$sincro = collect($this->toArray())->filter(fn ($value, $key) => in_array($key, self::$campi_combinazione));
$this->sincronizzaCampi($sincro->toArray());
return $result;
@ -178,9 +176,7 @@ class Combinazione extends Model
return;
}
$sincro = collect($articolo->toArray())->filter(function ($value, $key) {
return in_array($key, self::$campi_varianti);
});
$sincro = collect($articolo->toArray())->filter(fn ($value, $key) => in_array($key, self::$campi_varianti));
$combinazione->sincronizzaCampi($sincro->toArray());
}
@ -219,9 +215,7 @@ class Combinazione extends Model
->update($values);
// Filtro campi combinazioni
$combo = collect($values)->filter(function ($value, $key) {
return in_array($key, self::$campi_combinazione);
});
$combo = collect($values)->filter(fn ($value, $key) => in_array($key, self::$campi_combinazione));
// Aggiornamento dati combinazioni
database()->table('mg_combinazioni')

View File

@ -110,8 +110,11 @@ switch (post('op')) {
$contratto->save();
$dbo->query('DELETE FROM my_impianti_contratti WHERE idcontratto='.prepare($id_record));
foreach ((array) post('matricolaimpianto') as $matricolaimpianto) {
$dbo->query('INSERT INTO my_impianti_contratti(idcontratto,idimpianto) VALUES('.prepare($id_record).', '.prepare($matricolaimpianto).')');
$matricola = post('matricolaimpianto');
if ($matricola) {
foreach ([$matricola] as $matricolaimpianto) {
$dbo->query('INSERT INTO my_impianti_contratti(idcontratto,idimpianto) VALUES('.prepare($id_record).', '.prepare($matricolaimpianto).')');
}
}
// Salvataggio costi attività unitari del contratto
@ -317,7 +320,7 @@ switch (post('op')) {
// Scollegamento intervento da contratto
case 'unlink':
if (get('idcontratto') !== null && get('idintervento') !== null) {
if (!empty(get('idcontratto')) && !empty(get('idintervento'))) {
$idcontratto = get('idcontratto');
$idintervento = get('idintervento');

View File

@ -33,7 +33,7 @@ echo '
<input type="hidden" name="backto" value="record-edit">
<!-- Fix creazione da Anagrafica -->
<input type="hidden" name="id_record" value="">
<input type="hidden" name="id_record" value="0">
<div class="row">
<div class="col-md-6">

View File

@ -34,7 +34,7 @@ use Plugins\PianificazioneInterventi\Promemoria;
$id_fatture = (new Module())->getByField('name', 'Fatture di vendita', Models\Locale::getPredefined()->id);
if (!isset($_SESSION['module_'.$id_fatture]['id_segment'])) {
$segments = Modules::getSegments($id_fatture);
$_SESSION['module_'.$id_fatture]['id_segment'] = isset($segments[0]['id']) ? $segments[0]['id'] : null;
$_SESSION['module_'.$id_fatture]['id_segment'] = $segments[0]['id'] ?? null;
}
$id_segment = $_SESSION['module_'.$id_fatture]['id_segment'];
$idconto = setting('Conto predefinito fatture di vendita');
@ -77,13 +77,9 @@ switch (post('op')) {
// Ricerca fattura per anagrafica tra le registrate
$id_sede = $raggruppamento == 'sede' ? $documento_import->idsede : 0;
if ($raggruppamento == 'sede') {
$fattura = $documenti->first(function ($item, $key) use ($id_anagrafica, $id_sede) {
return $item->anagrafica->id == $id_anagrafica && $item->idsede_destinazione == $id_sede;
});
$fattura = $documenti->first(fn ($item, $key) => $item->anagrafica->id == $id_anagrafica && $item->idsede_destinazione == $id_sede);
} else {
$fattura = $documenti->first(function ($item, $key) use ($id_anagrafica) {
return $item->anagrafica->id == $id_anagrafica;
});
$fattura = $documenti->first(fn ($item, $key) => $item->anagrafica->id == $id_anagrafica);
}
// Ricerca fattura per anagrafica se l'impostazione di accodamento è selezionata
@ -123,7 +119,7 @@ switch (post('op')) {
// Fix per idconto righe fattura
$articolo = ArticoloOriginale::find($copia->idarticolo);
$copia->id_conto = ($articolo->idconto_vendita ? $articolo->idconto_vendita : $idconto);
$copia->id_conto = ($articolo->idconto_vendita ?: $idconto);
// Aggiornamento seriali dalla riga dell'ordine
if ($copia->isArticolo()) {
@ -271,7 +267,7 @@ $operations['crea_fattura'] = [
'title' => tr('Fatturare i _TYPE_ selezionati?', ['_TYPE_' => strtolower($module->getTranslation('name'))]),
'msg' => '{[ "type": "checkbox", "label": "<small>'.tr('Aggiungere alle fatture di vendita non ancora emesse?').'</small>", "placeholder": "'.tr('Aggiungere alle fatture esistenti non ancora emesse?').'", "name": "accodare" ]}<br>
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_fatture, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]}<br>
{[ "type": "select", "label": "'.tr('Tipo documento').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT `co_tipidocumento`.`id`, CONCAT(`codice_tipo_documento_fe`, \' - \', `name`) AS descrizione FROM `co_tipidocumento` LEFT JOIN ` co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `enabled` = 1 AND `dir` =\'entrata\' ORDER BY `codice_tipo_documento_fe`", "value": "'.$idtipodocumento.'" ]}<br>
{[ "type": "select", "label": "'.tr('Tipo documento').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT `co_tipidocumento`.`id`, CONCAT(`codice_tipo_documento_fe`, \' - \', `name`) AS descrizione FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `enabled` = 1 AND `dir` =\'entrata\' ORDER BY `codice_tipo_documento_fe`", "value": "'.$idtipodocumento.'" ]}<br>
{[ "type": "select", "label": "'.tr('Raggruppa per').'", "name": "raggruppamento", "required": 1, "values": "list=\"cliente\":\"Cliente\",\"sede\":\"Sede\"" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
@ -294,7 +290,7 @@ $operations['cambia_stato'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Cambia stato'),
'data' => [
'title' => tr('Vuoi davvero aggiornare lo stato di questi contratti?'),
'msg' => '<br>{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `co_staticontratti`.`id`, `name` AS descrizione, `colore` as _bgcolor_ FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') ORDER BY `name`" ]}',
'msg' => '<br>{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `co_staticontratti`.`id`, `name` AS descrizione, `colore` as _bgcolor_ FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') ORDER BY `name`" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,

View File

@ -21,8 +21,10 @@ include_once __DIR__.'/../../core.php';
use Models\Module;
$block_edit = $record['is_completato'];
$data_accettazione = $record['data_accettazione'] ? strtotime($record['data_accettazione']) : '';
$data_conclusione = $record['data_conclusione'] ? strtotime($record['data_conclusione']) : '';
if (strtotime($record['data_conclusione']) < strtotime($record['data_accettazione']) && !empty(strtotime($record['data_accettazione'])) && !empty(strtotime($record['data_conclusione']))) {
if ($data_conclusione < $data_accettazione && !empty($data_accettazione) && !empty($data_conclusione)) {
echo '
<div class="alert alert-warning"><a class="clickable" onclick="$(\'.alert\').hide();"><i class="fa fa-times"></i></a> '.tr('Attenzione! La data di accettazione supera la data di conclusione del contratto. Verificare le informazioni inserite.').'</div>';
}
@ -54,7 +56,7 @@ if (strtotime($record['data_conclusione']) < strtotime($record['data_accettazion
</div>
<div class="col-md-2">
{[ "type": "date", "label": "<?php echo tr('Data conclusione'); ?>", "name": "data_conclusione", "value": "$data_conclusione$", "disabled": "<?php echo $contratto->isDataConclusioneAutomatica() ? '1", "help": "'.tr('La Data di conclusione è calcolata in automatico in base al valore del campo Validità contratto, se definita') : '0'; ?>" ]}
{[ "type": "date", "label": "<?php echo tr('Data conclusione'); ?>", "name": "data_conclusione", "value": "$data_conclusione$", "disabled": "<?php echo $contratto ? ($contratto->isDataConclusioneAutomatica() ? '1", "help": "'.tr('La Data di conclusione è calcolata in automatico in base al valore del campo Validità contratto, se definita') : '0') : ''; ?>" ]}
</div>
<div class="col-md-2">
@ -403,11 +405,11 @@ echo '
<script type="text/javascript">
function gestioneSconto(button) {
gestioneRiga(button, "is_sconto");
gestioneRiga(button, "is_sconto=1");
}
function gestioneDescrizione(button) {
gestioneRiga(button, "is_descrizione");
gestioneRiga(button, "is_descrizione=1");
}
async function gestioneRiga(button, options) {
@ -418,7 +420,7 @@ async function gestioneRiga(button, options) {
let title = $(button).attr("data-title");
// Apertura modal
options = options ? options : "is_riga";
options = options ? options : "is_riga=1";
openModal(title, "'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&" + options);
}
@ -581,7 +583,7 @@ $elementi = $dbo->fetchArray('
\'Interventi\'
FROM `in_interventi`
JOIN `in_righe_interventi` ON `in_righe_interventi`.`idintervento` = `in_interventi`.`id`
WHERE (`in_righe_interventi`.`original_document_id` = '.prepare($contratto->id).' AND `in_righe_interventi`.`original_document_type` = '.prepare(get_class($contratto)).')
WHERE (`in_righe_interventi`.`original_document_id` = '.prepare($contratto->id).' '.($contratto ? 'AND `in_righe_interventi`.`original_document_type` = '.prepare(get_class($contratto)) : '').')
OR `in_interventi`.`id_contratto` = '.prepare($id_record).'
ORDER BY `data`');

View File

@ -21,12 +21,11 @@ include_once __DIR__.'/../../core.php';
use Modules\Contratti\Contratto;
if (isset($id_record)) {
if (!empty($id_record)) {
$contratto = Contratto::find($id_record);
$record = $dbo->fetchOne('SELECT
*,
`co_contratti`.`nome` AS nome,
`co_contratti`.*,
`an_anagrafiche`.`tipo` AS tipo_anagrafica,
`co_staticontratti`.`is_fatturabile` AS is_fatturabile,
`co_staticontratti`.`is_pianificabile` AS is_pianificabile,

View File

@ -64,11 +64,11 @@ $result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Importazione della gestione dedicata
$file = 'riga';
if (get('is_descrizione') !== null) {
if (!empty(get('is_descrizione'))) {
$file = 'descrizione';
$options['op'] = 'manage_descrizione';
} elseif (get('is_sconto') !== null) {
} elseif (!empty(get('is_sconto'))) {
$file = 'sconto';
$options['op'] = 'manage_sconto';

View File

@ -19,7 +19,7 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$records = $dbo->fetchArray('SELECT * FROM `zz_fields` WHERE `id`='.prepare($id_record));
}

View File

@ -424,7 +424,7 @@ switch (filter('op')) {
`co_contratti`.`data_bozza` AS data_contratto,
DATE_FORMAT( `data_richiesta`, '%m%Y') AS mese,
`data_richiesta` AS data_richiesta,
`data_scadenza` AS data_scadenza,
IF(`co_promemoria`.`data_scadenza` IS NULL, '', `co_promemoria`.`data_scadenza`) AS data_scadenza,
`an_anagrafiche`.`ragione_sociale` AS ragione_sociale,
'promemoria' AS ref,
`in_tipiintervento_lang`.`name` AS tipo_intervento,
@ -437,7 +437,7 @@ switch (filter('op')) {
INNER JOIN `co_staticontratti` ON `co_contratti`.`idstato` = `co_staticontratti`.`id`
INNER JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
INNER JOIN `in_tipiintervento` ON `co_promemoria`.`idtipointervento` = `in_tipiintervento`.`id`
LEFT JOIN `in_tipiintervento_lang` ON `in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = ".prepare($lingua)."
LEFT JOIN `in_tipiintervento_lang` ON `in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id)."
WHERE
`idintervento` IS NULL AND `co_staticontratti`.`is_pianificabile` = 1)
UNION
@ -450,7 +450,7 @@ switch (filter('op')) {
'' AS data_contratto,
DATE_FORMAT(IF(`in_interventi`.`data_scadenza` IS NULL, `in_interventi`.`data_richiesta`, `in_interventi`.`data_scadenza`), '%m%Y') AS mese,
`in_interventi`.`data_richiesta` AS data_richiesta,
`in_interventi`.`data_scadenza` AS data_scadenza,
IF(`in_interventi`.`data_scadenza` IS NULL, '', `in_interventi`.`data_scadenza`) AS data_scadenza,
`an_anagrafiche`.`ragione_sociale` AS ragione_sociale,
'intervento' AS ref,
`in_tipiintervento_lang`.`name` AS tipo_intervento,
@ -460,7 +460,7 @@ switch (filter('op')) {
FROM
`in_interventi`
INNER JOIN `in_tipiintervento` ON `in_interventi`.`idtipointervento` = `in_tipiintervento`.`id`
LEFT JOIN `in_tipiintervento_lang` ON `in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = ".prepare($lingua).'
LEFT JOIN `in_tipiintervento_lang` ON (`in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).')
INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`';
// Visualizzo solo promemoria del tecnico loggato

View File

@ -346,7 +346,7 @@ if (!empty($risultati_da_programmare)) {
foreach ($mesi as $mese) {
$data = Carbon::parse($mese['data']);
$chiave = $data->format('mY');
$testo = $data->formatLocalized('%B %Y');
$testo = $data->isoFormat('MMMM YYYY');
if (checkdate($data->format('m'), $data->format('d'), $data->format('Y'))) {
echo '

View File

@ -64,7 +64,7 @@ switch (filter('op')) {
break;
case 'update':
if (isset($id_record)) {
if (!empty($id_record)) {
$idstatoddt = post('idstatoddt');
$idpagamento = post('idpagamento');
$numero_esterno = post('numero_esterno');
@ -586,7 +586,7 @@ switch (filter('op')) {
}
$id_iva = ($ddt->anagrafica->idiva_vendite && (!$originale->idiva_vendita || $aliquota_articolo != 0) ? $ddt->anagrafica->idiva_vendite : $originale->idiva_vendita) ?: setting('Iva predefinita');
} else {
$id_iva = ($ddt->anagrafica->idiva_acquisti ? $ddt->anagrafica->idiva_acquisti : ($originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita')));
$id_iva = ($ddt->anagrafica->idiva_acquisti ?: ($originale->idiva_vendita ?: setting('Iva predefinita')));
}
$id_anagrafica = $ddt->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');

View File

@ -48,7 +48,7 @@ $id_anagrafica = !empty(get('idanagrafica')) ? get('idanagrafica') : '';
<input type="hidden" name="dir" value="<?php echo $dir; ?>">
<!-- Fix creazione da Anagrafica -->
<input type="hidden" name="id_record" value="">
<input type="hidden" name="id_record" value="0">
<div class="row">
<div class="col-md-6">

View File

@ -38,7 +38,7 @@ if ($module->getTranslation('name') == 'Ddt di vendita') {
$id_fatture = (new Module())->getByField('name', $module_fatture, Models\Locale::getPredefined()->id);
if (!isset($_SESSION['module_'.$id_fatture]['id_segment'])) {
$segments = Modules::getSegments($id_fatture);
$_SESSION['module_'.$id_fatture]['id_segment'] = isset($segments[0]['id']) ? $segments[0]['id'] : null;
$_SESSION['module_'.$id_fatture]['id_segment'] = $segments[0]['id'] ?? null;
}
$id_segment = $_SESSION['module_'.$id_fatture]['id_segment'];
$idconto = $module_fatture == 'Fatture di vendita' ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto');
@ -77,13 +77,9 @@ switch (post('op')) {
// Ricerca fattura per anagrafica tra le registrate
$id_sede = $raggruppamento == 'sede' ? $documento_import->idsede_destinazione : 0;
if ($raggruppamento == 'sede') {
$fattura = $documenti->first(function ($item, $key) use ($id_anagrafica, $id_sede) {
return $item->anagrafica->id == $id_anagrafica && $item->idsede_destinazione == $id_sede;
});
$fattura = $documenti->first(fn ($item, $key) => $item->anagrafica->id == $id_anagrafica && $item->idsede_destinazione == $id_sede);
} else {
$fattura = $documenti->first(function ($item, $key) use ($id_anagrafica) {
return $item->anagrafica->id == $id_anagrafica;
});
$fattura = $documenti->first(fn ($item, $key) => $item->anagrafica->id == $id_anagrafica);
}
// Ricerca fattura per anagrafica se l'impostazione di accodamento è selezionata
@ -123,7 +119,7 @@ switch (post('op')) {
// Fix per idconto righe fattura
$articolo = ArticoloOriginale::find($copia->idarticolo);
$copia->id_conto = ($articolo->idconto_vendita ? $articolo->idconto_vendita : $idconto);
$copia->id_conto = ($articolo->idconto_vendita ?: $idconto);
// Aggiornamento seriali dalla riga dell'ordine
if ($copia->isArticolo()) {

View File

@ -28,7 +28,7 @@ include_once __DIR__.'/../../core.php';
$block_edit = $record['flag_completato'];
if ($dir == 'entrata') {
$numero_previsto = verifica_numero_ddt($ddt);
$numero_previsto = verifica_numero_ddt($ddt, $id_segment);
if (!empty($numero_previsto)) {
echo '
<div class="alert alert-warning">
@ -648,11 +648,11 @@ async function saveForm() {
}
function gestioneSconto(button) {
gestioneRiga(button, "is_sconto");
gestioneRiga(button, "is_sconto=1");
}
function gestioneDescrizione(button) {
gestioneRiga(button, "is_descrizione");
gestioneRiga(button, "is_descrizione=1");
}
async function gestioneRiga(button, options) {
@ -663,7 +663,7 @@ async function gestioneRiga(button, options) {
let title = $(button).attr("data-title");
// Apertura modal
options = options ? options : "is_riga";
options = options ? options : "is_riga=1";
openModal(title, "'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&" + options);
}

View File

@ -32,7 +32,7 @@ if ($module_name == 'Ddt di acquisto') {
$dir = 'entrata';
}
if (isset($id_record)) {
if (!empty($id_record)) {
$ddt = DDT::with('tipo', 'stato')->find($id_record);
$record = $dbo->fetchOne('SELECT

View File

@ -165,10 +165,7 @@ if (!function_exists('ricalcola_costiagg_ddt')) {
// Leggo l'iva predefinita per calcolare l'iva aggiuntiva sulla rivalsa inps
$qi = Aliquota::find(setting('Iva predefinita'))->percentuale;
if ($qi) {
$rsi = $dbo->fetchArray($qi);
}
$iva_rivalsainps = $rivalsainps / 100 * $rsi[0]['percentuale'];
$iva_rivalsainps = $rivalsainps / 100 * $qi;
// Aggiorno la rivalsa inps
$dbo->query("UPDATE dt_ddt SET rivalsainps='$rivalsainps', iva_rivalsainps='$iva_rivalsainps' WHERE id='$idddt'");
@ -237,7 +234,7 @@ if (!function_exists('get_stato_ddt')) {
}
if (!function_exists('verifica_numero_ddt')) {
function verifica_numero_ddt(DDT $ddt)
function verifica_numero_ddt(DDT $ddt, $id_segment)
{
global $dbo;
@ -256,7 +253,7 @@ if (!function_exists('verifica_numero_ddt')) {
->get();
// Recupero maschera per questo segmento
$maschera = setting('Formato numero secondario ddt');
$maschera = Generator::getMaschera($id_segment);
$ultimo = Generator::getPreviousFrom($maschera, 'dt_ddt', $campo, [
'data < '.prepare(date('Y-m-d', strtotime($data))),
@ -267,9 +264,7 @@ if (!function_exists('verifica_numero_ddt')) {
do {
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
$filtered = $documenti->reject(function ($item, $key) use ($numero) {
return $item->numero_esterno == $numero;
});
$filtered = $documenti->reject(fn ($item, $key) => $item->numero_esterno == $numero);
if ($documenti->count() == $filtered->count()) {
return $numero;

View File

@ -67,11 +67,11 @@ $result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Importazione della gestione dedicata
$file = 'riga';
if (get('is_descrizione') !== null) {
if (!empty(get('is_descrizione'))) {
$file = 'descrizione';
$options['op'] = 'manage_descrizione';
} elseif (get('is_sconto') !== null) {
} elseif (!empty(get('is_sconto'))) {
$file = 'sconto';
$options['op'] = 'manage_sconto';

View File

@ -153,9 +153,7 @@ class DDT extends Document
{
$righe = $this->getRighe();
$peso_lordo = $righe->sum(function ($item) {
return $item->isArticolo() ? $item->articolo->peso_lordo * $item->qta : 0;
});
$peso_lordo = $righe->sum(fn ($item) => $item->isArticolo() ? $item->articolo->peso_lordo * $item->qta : 0);
return $peso_lordo;
}
@ -169,9 +167,7 @@ class DDT extends Document
{
$righe = $this->getRighe();
$volume = $righe->sum(function ($item) {
return $item->isArticolo() ? $item->articolo->volume * $item->qta : 0;
});
$volume = $righe->sum(fn ($item) => $item->isArticolo() ? $item->articolo->volume * $item->qta : 0);
return $volume;
}

View File

@ -52,9 +52,21 @@ switch (post('op')) {
$template->setTranslation('body', post('body'));
$template->save();
$dbo->sync('em_print_template', ['id_template' => $id_record], ['id_print' => (array) post('prints')]);
$dbo->sync('em_mansioni_template', ['id_template' => $id_record], ['idmansione' => (array) post('idmansioni')]);
$prints[] = post('prints');
foreach ($prints as $print) {
if (!empty($print)) {
$dbo->sync('em_print_template', ['id_template' => $id_record], ['id_print' => $print]);
}
}
$mansioni[] = post('idmansioni');
foreach ($mansioni as $mansione) {
if (!empty($mansione)) {
$dbo->sync('em_mansioni_template', ['id_template' => $id_record], ['idmansione' => $mansione]);
}
}
flash()->info(tr('Informazioni salvate correttamente!'));
break;

View File

@ -22,8 +22,8 @@ use Modules\Newsletter\Newsletter;
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM em_templates LEFT JOIN `em_templates_lang` ON (`em_templates`.`id` = `em_templates_lang`.`id_record` AND `em_templates_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `em_templates`.`id`='.prepare($id_record).' AND `deleted_at` IS NULL');
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT `em_templates`.*, `em_templates_lang`.`name` FROM `em_templates` LEFT JOIN `em_templates_lang` ON (`em_templates`.`id` = `em_templates_lang`.`id_record` AND `em_templates_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `em_templates`.`id`='.prepare($id_record).' AND `deleted_at` IS NULL');
$template = Template::find($id_record);

View File

@ -19,6 +19,6 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `zz_events` WHERE id='.prepare($id_record));
}

View File

@ -28,7 +28,7 @@ switch (post('op')) {
$include_bank_holidays = post('include_bank_holidays');
$is_predefined = post('is_predefined');
if ($dbo->fetchNum('SELECT * FROM `in_fasceorarie` LEFT JOIN `in_fasceorarie_lang` ON (`in_fasceorarie_lang`.`id_record` = `in_fasceorarie`.`id` AND `in_fasceorarie_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `name`='.prepare($nome).' AND `in_fasceorarie`.`id`!='.prepare($id_record)) == 0) {
if (empty($dbo->fetchArray('SELECT `in_fasceorarie`.`id` FROM `in_fasceorarie` LEFT JOIN `in_fasceorarie_lang` ON (`in_fasceorarie_lang`.`id_record` = `in_fasceorarie`.`id` AND `in_fasceorarie_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `name`='.prepare($nome).' AND `in_fasceorarie`.`id`!='.prepare($id_record)))) {
if (!empty($is_predefined)) {
$dbo->query('UPDATE `in_fasceorarie` SET `is_predefined` = 0');
}
@ -59,7 +59,7 @@ switch (post('op')) {
$ora_inizio = post('ora_inizio');
$ora_fine = post('ora_fine');
if ($dbo->fetchNum('SELECT * FROM `in_fasceorarie` LEFT JOIN `in_fasceorarie_lang` ON (`in_fasceorarie_lang`.`id_record` = `in_fasceorarie`.`id` AND `in_fasceorarie_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `name`='.prepare($nome)) == 0) {
if (empty($dbo->fetchArray('SELECT `in_fasceorarie`.`id` FROM `in_fasceorarie` LEFT JOIN `in_fasceorarie_lang` ON (`in_fasceorarie_lang`.`id_record` = `in_fasceorarie`.`id` AND `in_fasceorarie_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `name`='.prepare($nome)))) {
$dbo->insert('in_fasceorarie', [
'ora_inizio' => $ora_inizio,
'ora_fine' => $ora_fine,

View File

@ -83,7 +83,7 @@ foreach ($results as $result) {
}
?>
</div>
<div class="pull-right">
<button type="button" class="btn btn-info" onclick="aggiungiData()">
@ -140,7 +140,7 @@ function aggiungiData() {
<?php
$elementi = $dbo->fetchArray('SELECT `in_tipiintervento`.`codice`, `in_tipiintervento`.`descrizione`, `in_tipiintervento`.`id` FROM `in_tipiintervento` LEFT JOIN `in_fasceorarie_tipiintervento` ON `in_tipiintervento`.`id`=`in_fasceorarie_tipiintervento`.`idtipointervento` WHERE `in_fasceorarie_tipiintervento`.`idfasciaoraria`='.prepare($id_record));
$elementi = $dbo->fetchArray('SELECT `in_tipiintervento`.`codice`, `in_tipiintervento_lang`.`name`, `in_tipiintervento`.`id` FROM `in_tipiintervento` LEFT JOIN `in_tipiintervento_lang` ON (`in_tipiintervento`.`id` = `in_tipiintervento_lang`.`id_record` AND `in_tipiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN `in_fasceorarie_tipiintervento` ON `in_tipiintervento`.`id`=`in_fasceorarie_tipiintervento`.`idtipointervento` WHERE `in_fasceorarie_tipiintervento`.`idfasciaoraria`='.prepare($id_record));
if (!empty($elementi)) {
echo '

View File

@ -19,6 +19,6 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `in_fasceorarie` LEFT JOIN `in_fasceorarie_lang` ON (`in_fasceorarie_lang`.`id_record` = `in_fasceorarie`.`id` AND `in_fasceorarie_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `in_fasceorarie`.`id`='.prepare($id_record));
}

View File

@ -48,7 +48,6 @@ if ($fattura) {
$stato_fe = $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
}
$ops = ['update', 'add_intervento', 'manage_documento_fe', 'manage_riga_fe', 'manage_articolo', 'manage_sconto', 'manage_riga', 'manage_descrizione', 'unlink_intervento', 'delete_riga', 'copy_riga', 'add_serial', 'add_articolo', 'edit-price'];
if ($dir === 'entrata' && in_array($stato_fe['codice_stato_fe'], ['WAIT', 'RC', 'MC', 'QUEUE', 'DT', 'EC01', 'NE']) && Interaction::isEnabled() && in_array($op, $ops)) {
@ -302,7 +301,7 @@ switch ($op) {
}
$totale_documento = abs($totale_documento);
$totale_documento = $dati_generali['ImportoTotaleDocumento'] ? $dati_generali['ImportoTotaleDocumento'] : $totale_documento;
$totale_documento = $dati_generali['ImportoTotaleDocumento'] ?: $totale_documento;
} catch (Exception $e) {
}
@ -760,7 +759,7 @@ switch ($op) {
$fattura->idpagamento = setting('Tipo di pagamento predefinito');
}
$idsede = ($documento->idsede_destinazione ? $documento->idsede_destinazione : $documento->idsede);
$idsede = ($documento->idsede_destinazione ?: $documento->idsede);
$fattura->idsede_destinazione = $idsede;
$fattura->id_ritenuta_contributi = post('id_ritenuta_contributi') ?: null;
@ -1000,7 +999,7 @@ switch ($op) {
}
$id_iva = ($fattura->anagrafica->idiva_vendite && (!$originale->idiva_vendita || $aliquota_articolo != 0) ? $fattura->anagrafica->idiva_vendite : $originale->idiva_vendita) ?: setting('Iva predefinita');
} else {
$id_iva = ($fattura->anagrafica->idiva_acquisti ? $fattura->anagrafica->idiva_acquisti : ($originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita')));
$id_iva = ($fattura->anagrafica->idiva_acquisti ?: ($originale->idiva_vendita ?: setting('Iva predefinita')));
}
$id_anagrafica = $fattura->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');

View File

@ -42,7 +42,7 @@ $idtipodocumento = Tipo::where('predefined', 1)->where('dir', $dir)->first()->id
<input type="hidden" name="dir" value="<?php echo $dir; ?>">
<!-- Fix creazione da Anagrafica -->
<input type="hidden" name="id_record" value="">
<input type="hidden" name="id_record" value="0">
<div class="row">

View File

@ -125,7 +125,7 @@ switch (post('op')) {
$fattura_elettronica = new FatturaElettronica($id);
if (!empty($fattura_elettronica) && !$fattura_elettronica->isGenerated()) {
$file = $fattura_elettronica->save($upload_dir);
$file = $fattura_elettronica->save();
$added[] = $fattura->numero_esterno;
}
} catch (UnexpectedValueException $e) {
@ -311,7 +311,7 @@ switch (post('op')) {
foreach ($id_records as $id) {
$fattura = Fattura::find($id);
$id_segment = (post('id_segment') ? post('id_segment') : $fattura->id_segment);
$id_segment = (post('id_segment') ?: $fattura->id_segment);
$dir = $dbo->fetchOne('SELECT `dir` FROM `co_tipidocumento` WHERE `id`='.prepare($fattura->idtipodocumento))['dir'];
// + 1 giorno

View File

@ -77,7 +77,7 @@ if (!empty($record['is_fiscale'])) {
$registrazione_insoluto = 0;
$pagamento = $fattura->pagamento;
if (!empty($pagamento)) {
if ($pagamento->isRiBa() && $dir == 'entrata' && in_array($record['stato'], ['Emessa', 'Parzialmente pagato', 'Pagato']) && $differenza == 0) {
if ($pagamento->isRiBa() && $dir == 'entrata' && in_array($record['stato'], ['Emessa', 'Parzialmente pagato', 'Pagato']) && $differenza != 0) {
$registrazione_insoluto = 1;
}
}

View File

@ -179,9 +179,10 @@ if ($dir == 'entrata') {
if (!empty(setting('Data inizio verifica contatore fattura di vendita'))) {
$dateFormat = 'd/m/Y';
$carbonDate = Carbon::createFromFormat($dateFormat, setting('Data inizio verifica contatore fattura di vendita'));
$data_inizio_verifica_contatore = (($carbonDate !== false) ? $carbonDate->format('Y-m-d') : null);
$data_inizio_verifica_contatore = (($carbonDate !== false) ? strtotime($carbonDate->format('Y-m-d')) : null);
}
if (strtotime($fattura->data) >= strtotime($data_inizio_verifica_contatore) || empty($data_inizio_verifica_contatore)) {
$data = ($fattura->data ? strtotime($fattura->data) : '');
if ($data >= $data_inizio_verifica_contatore || empty($data_inizio_verifica_contatore)) {
$numero_previsto = verifica_numero_fattura($fattura);
}
@ -1084,11 +1085,11 @@ async function saveForm() {
}
function gestioneSconto(button) {
gestioneRiga(button, "is_sconto");
gestioneRiga(button, "is_sconto=1");
}
function gestioneDescrizione(button) {
gestioneRiga(button, "is_descrizione");
gestioneRiga(button, "is_descrizione=1");
}
async function gestioneRiga(button, options) {
@ -1099,7 +1100,7 @@ async function gestioneRiga(button, options) {
let title = $(button).attr("data-title");
// Apertura modal
options = options ? options : "is_riga";
options = options ? options : "is_riga=1";
openModal(title, "'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&" + options);
}

View File

@ -28,7 +28,7 @@ if ($module->getTranslation('name') == 'Fatture di vendita') {
$dir = 'uscita';
}
if (isset($id_record)) {
if (!empty($id_record)) {
$fattura = Fattura::with('tipo', 'stato')->find($id_record);
$dir = $fattura->direzione;
@ -71,7 +71,7 @@ if (isset($id_record)) {
$note_accredito = $dbo->fetchArray("SELECT `co_documenti`.`id`, IF(`numero_esterno` != '', `numero_esterno`, `numero`) AS numero, data FROM `co_documenti` JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` WHERE `reversed` = 1 AND `ref_documento`=".prepare($id_record));
// Blocco gestito dallo stato della Fattura Elettronica
$stato_fe = StatoFE::find($fattura->codice_stato_fe)->id_record;
$stato_fe = StatoFE::find($fattura->codice_stato_fe);
$abilita_genera = empty($fattura->codice_stato_fe) || intval($stato_fe['is_generabile']);
// Controllo autofattura e gestione avvisi
@ -81,9 +81,7 @@ if (isset($id_record)) {
$fattura_acquisto_originale = null;
if (!empty($fattura)) {
$reverse_charge = $fattura->getRighe()->first(function ($item, $key) {
return $item->aliquota != null && substr($item->aliquota->codice_natura_fe, 0, 2) == 'N6';
})->id;
$reverse_charge = $fattura->getRighe()->first(fn($item, $key) => $item->aliquota != null && $item->aliquota->codice_natura_fe !== null && substr($item->aliquota->codice_natura_fe, 0, 2) == 'N6')->id;
$autofattura_vendita = Fattura::find($fattura->id_autofattura);
$abilita_autofattura = (($fattura->anagrafica->nazione->iso2 != 'IT' && !empty($fattura->anagrafica->nazione->iso2)) || $reverse_charge) && $dir == 'uscita' && $fattura->id_autofattura == null;

View File

@ -449,9 +449,7 @@ if (!function_exists('verifica_numero_fattura')) {
do {
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
$filtered = $documenti->reject(function ($item, $key) use ($numero) {
return $item->numero_esterno == $numero;
});
$filtered = $documenti->reject(fn ($item, $key) => $item->numero_esterno == $numero);
if ($documenti->count() == $filtered->count()) {
return $numero;
@ -471,9 +469,7 @@ if (!function_exists('verifica_numero_fattura')) {
$righe = [];
// Righe documento
$righe_documento = $documento->getRighe()->where('idintervento', '!=', null)->groupBy(function ($item, $key) {
return $item['prezzo_unitario'].'|'.$item['idiva'].'|'.$item['sconto_unitario'];
});
$righe_documento = $documento->getRighe()->where('idintervento', '!=', null)->groupBy(fn ($item, $key) => $item['prezzo_unitario'].'|'.$item['idiva'].'|'.$item['sconto_unitario']);
if (setting('Raggruppa attività per tipologia in fattura') && !$righe_documento->isEmpty()) {
$articoli = [];

View File

@ -93,11 +93,11 @@ $options['id_ritenuta_acconto_predefined'] = $id_ritenuta_acconto;
// Importazione della gestione dedicata
$file = 'riga';
if (get('is_descrizione') !== null) {
if (!empty(get('is_descrizione'))) {
$file = 'descrizione';
$options['op'] = 'manage_descrizione';
} elseif (get('is_articolo') !== null) {
} elseif (!empty(get('is_articolo'))) {
$file = 'articolo';
// Aggiunta sconto di default da listino per le vendite
@ -110,7 +110,7 @@ if (get('is_descrizione') !== null) {
}
$options['op'] = 'manage_articolo';
} elseif (get('is_sconto') !== null) {
} elseif (!empty(get('is_sconto'))) {
$file = 'sconto';
$options['op'] = 'manage_sconto';

View File

@ -48,7 +48,7 @@ trait RelationTrait
*/
public function getDatiAggiuntiviFEAttribute()
{
$result = json_decode($this->attributes['dati_aggiuntivi_fe'], true);
$result = $this->attributes['dati_aggiuntivi_fe'] ? json_decode($this->attributes['dati_aggiuntivi_fe'], true) : '';
return (array) $result;
}
@ -188,7 +188,7 @@ trait RelationTrait
*/
public function setQtaAttribute($value)
{
list($qta, $diff) = $this->parseQta($value);
[$qta, $diff] = $this->parseQta($value);
parent::setQtaAttribute($value);
// Individuazione fattura corrente (fix in caso di creazione diretta)

View File

@ -113,8 +113,6 @@ class Fattura extends Document
$model->tipo()->associate($tipo_documento);
$model->stato()->associate($id_stato_attuale_documento);
$model->save();
// Salvataggio delle informazioni
$model->data = $data;
$model->data_registrazione = $data_registrazione ?: $data;
@ -250,7 +248,7 @@ class Fattura extends Document
$this->numero = static::getNextNumero($data, $direzione, $value);
if ($this->stato->getTranslation('name') == 'Bozza') {
$this->numero_esterno = null;
$this->numero_esterno = '';
} elseif (!empty($previous)) {
$this->numero_esterno = static::getNextNumeroSecondario($data, $direzione, $value);
}
@ -281,9 +279,7 @@ class Fattura extends Document
{
$righe = $this->getRighe();
$peso_lordo = $righe->sum(function ($item) {
return $item->isArticolo() ? $item->articolo->peso_lordo * $item->qta : 0;
});
$peso_lordo = $righe->sum(fn ($item) => $item->isArticolo() ? $item->articolo->peso_lordo * $item->qta : 0);
return $peso_lordo;
}
@ -297,9 +293,7 @@ class Fattura extends Document
{
$righe = $this->getRighe();
$volume = $righe->sum(function ($item) {
return $item->isArticolo() ? $item->articolo->volume * $item->qta : 0;
});
$volume = $righe->sum(fn ($item) => $item->isArticolo() ? $item->articolo->volume * $item->qta : 0);
return $volume;
}
@ -368,7 +362,7 @@ class Fattura extends Document
*/
public function getDatiAggiuntiviFEAttribute()
{
$result = json_decode($this->attributes['dati_aggiuntivi_fe'], true);
$result = ($this->attributes['dati_aggiuntivi_fe'] ? json_decode($this->attributes['dati_aggiuntivi_fe'], true) : '');
return (array) $result;
}
@ -500,9 +494,7 @@ class Fattura extends Document
{
$nome = 'Ricevuta';
return $this->uploads()->filter(function ($item) use ($nome) {
return false !== strstr($item->getTranslation('name'), $nome);
})->sortBy('created_at');
return $this->uploads()->filter(fn ($item) => false !== strstr($item->getTranslation('name'), $nome))->sortBy('created_at');
}
/**
@ -543,7 +535,7 @@ class Fattura extends Document
{
$file = $this->getFatturaElettronica();
return !empty($this->progressivo_invio) and file_exists($file->filepath);
return !empty($this->progressivo_invio) && $file->filepath && file_exists($file->filepath);
}
/**
@ -585,9 +577,6 @@ class Fattura extends Document
$dichiarazione_precedente = Dichiarazione::find($this->original['id_dichiarazione_intento']);
$is_fiscale = $this->isFiscale();
// Salvataggio effettivo
parent::save($options);
$this->attributes['ritenutaacconto'] = $this->ritenuta_acconto;
$this->attributes['iva_rivalsainps'] = $this->iva_rivalsa_inps;
$this->attributes['rivalsainps'] = $this->rivalsa_inps;
@ -659,7 +648,7 @@ class Fattura extends Document
$checks = FatturaElettronica::controllaFattura($this);
$fattura_elettronica = new FatturaElettronica($this->id);
if ($abilita_genera && empty($checks)) {
$fattura_elettronica->save(base_dir().'/'.FatturaElettronica::getDirectory());
$fattura_elettronica->save();
if (!$fattura_elettronica->isValid()) {
$errors = $fattura_elettronica->getErrors();

View File

@ -47,16 +47,14 @@ class Bollo
return $this->fattura->bollo;
}
$righe_bollo = $this->fattura->getRighe()->filter(function ($item, $key) {
return $item->aliquota != null && in_array($item->aliquota->codice_natura_fe, ['N2.1', 'N2.2', 'N3.5', 'N3.6', 'N4']);
});
$righe_bollo = $this->fattura->getRighe()->filter(fn ($item, $key) => $item->aliquota != null && in_array($item->aliquota->codice_natura_fe, ['N2.1', 'N2.2', 'N3.5', 'N3.6', 'N4']));
$importo_righe_bollo = $righe_bollo->sum('subtotale');
// Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
$bollo = ($this->fattura->direzione == 'uscita') ? $this->fattura->bollo : setting('Importo marca da bollo');
$marca_da_bollo = 0;
if (abs($bollo) > 0 && abs($importo_righe_bollo) > setting("Soglia minima per l'applicazione della marca da bollo")) {
if ($bollo && abs($bollo) > 0 && abs($importo_righe_bollo) > setting("Soglia minima per l'applicazione della marca da bollo")) {
$marca_da_bollo = $bollo;
}
@ -72,9 +70,7 @@ class Bollo
public function manageRigaMarcaDaBollo()
{
$riga = $this->fattura->rigaBollo;
$righe_bollo = $this->fattura->getRighe()->filter(function ($item, $key) {
return $item->aliquota != null && in_array($item->aliquota->codice_natura_fe, ['N2.1', 'N2.2', 'N3.5', 'N3.6', 'N4']);
})->first();
$righe_bollo = $this->fattura->getRighe()->filter(fn ($item, $key) => $item->aliquota != null && in_array($item->aliquota->codice_natura_fe, ['N2.1', 'N2.2', 'N3.5', 'N3.6', 'N4']))->first();
$addebita_bollo = $this->fattura->addebita_bollo;
$marca_da_bollo = $this->getBollo();
@ -83,7 +79,7 @@ class Bollo
if (setting('Cassa previdenziale predefinita')) {
$cassa_pred = database()->fetchOne('SELECT percentuale FROM co_rivalse WHERE id='.setting('Cassa previdenziale predefinita'));
}
// Verifico se la fattura ha righe con rivalsa applicata, esclusa la marca da bollo
$rivalsa = ($this->fattura->rivalsainps > 0 && $this->fattura->rivalsainps != (setting('Importo marca da bollo') * $cassa_pred['percentuale'] / 100)) ? 1 : 0;

View File

@ -217,8 +217,8 @@ class Movimenti
$mastrino = $this->generateMastrino();
foreach ($movimenti as $element) {
$dare = round($element['dare'], 8);
$avere = round($element['avere'], 8);
$dare = $element['dare'] ? round($element['dare'], 8) : 0;
$avere = $element['avere'] ? round($element['avere'], 8) : 0;
$totale_dare += $dare;
$totale_avere += $avere;

View File

@ -19,6 +19,6 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT *, do_documenti.`id`as id, do_documenti.nome AS nome, do_documenti.`data` AS `data` FROM do_documenti WHERE do_documenti.id = '.prepare($id_record));
}

View File

@ -20,7 +20,7 @@
include_once __DIR__.'/../../core.php';
use Tasks\Task;
if (isset($id_record)) {
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `zz_tasks` LEFT JOIN `zz_tasks_lang` ON (`zz_tasks`.`id`=`zz_tasks_lang`.`id_record` AND `zz_tasks_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `zz_tasks`.`id`='.prepare($id_record));
$task = Task::find($id_record);

View File

@ -19,7 +19,7 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
if (!empty($id_record)) {
$id_module = (new Module())->getByField('name', 'Articoli', Models\Locale::getPredefined()->id);
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record);
}

View File

@ -37,6 +37,8 @@ switch ($op) {
'idanagrafica' => post('idanagrafica'),
'nome' => post('nome'),
'matricola' => $matricola,
'id_marca' => post('id_marca'),
'modello' => post('modello'),
'id_categoria' => post('id_categoria') ?: null,
'id_sottocategoria' => post('id_sottocategoria') ?: null,
'descrizione' => post('descrizione'),

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