diff --git a/ajax_dataload.php b/ajax_dataload.php index 9eb8fe4ff..6a11c81a7 100755 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -20,8 +20,8 @@ include_once __DIR__.'/core.php'; -use Util\Query; use Models\Module; +use Util\Query; // Informazioni fondamentali $columns = (array) filter('columns', null, true); @@ -185,15 +185,15 @@ if (!empty($query)) { // Immagine elseif ($field == '_img_') { $module = Module::where('id', $id_module)->first(); - if( !empty($r['_img_']) ){ - $fileinfo = \Uploads::fileInfo($r['_img_']); - + if (!empty($r['_img_'])) { + $fileinfo = Uploads::fileInfo($r['_img_']); + $directory = '/'.$module->upload_directory.'/'; $image = $directory.$r['_img_']; $image_thumbnail = $directory.$fileinfo['filename'].'_thumb600.'.$fileinfo['extension']; - + $url = file_exists(base_dir().$image_thumbnail) ? base_path().$image_thumbnail : base_path().$image; - + $value = ''; } } diff --git a/core.php b/core.php index 312253641..a0b5263de 100755 --- a/core.php +++ b/core.php @@ -151,9 +151,9 @@ foreach ($handlers as $handler) { $handler = new Monolog\ErrorHandler($logger); if (!API\Response::isAPIRequest()) { $handler->registerErrorHandler([]); - //$handler->registerExceptionHandler(); // Handled by Whoops above + // $handler->registerExceptionHandler(); // Handled by Whoops above } -$handler->registerFatalHandler(\Psr\Log\LogLevel::ERROR); +$handler->registerFatalHandler(Psr\Log\LogLevel::ERROR); // Database $dbo = $database = database(); diff --git a/editor.php b/editor.php index 7aefec55b..8ae90d89a 100755 --- a/editor.php +++ b/editor.php @@ -192,10 +192,8 @@ if (empty($record) || !$has_access) { // Successivo $next = $posizioni[$key + 1]['id']; - echo ''; - echo ' @@ -205,10 +203,8 @@ if (empty($record) || !$has_access) { '; - echo '
'; - // Pulsanti personalizzati $buttons = $structure->filepath('buttons.php'); diff --git a/include/common/descrizione.php b/include/common/descrizione.php index 1611da8da..28d68269a 100755 --- a/include/common/descrizione.php +++ b/include/common/descrizione.php @@ -57,4 +57,4 @@ echo ' input("descrizione").set(value); } }); -'; \ No newline at end of file +'; diff --git a/include/init/configuration.php b/include/init/configuration.php index 56cb88ca7..1391505f5 100755 --- a/include/init/configuration.php +++ b/include/init/configuration.php @@ -215,8 +215,8 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {

'.tr('Configurazione incompleta').'

-

'.tr("Mancano alcuni parametri necessari nella configurazione").'.

-

'.tr("Verifica che il file _FILE_ contenga tutti i parametri di connessione al database", [ +

'.tr('Mancano alcuni parametri necessari nella configurazione').'.

+

'.tr('Verifica che il file _FILE_ contenga tutti i parametri di connessione al database', [ '_FILE_' => 'config.inc.php', ]).'.

'.tr("Se il problema persiste, contatta l'assistenza").'.

@@ -454,12 +454,12 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) { echo '

'.tr('Benvenuto in _NAME_!', [ - '_NAME_' => 'OpenSTAManager', - ]).'

+ '_NAME_' => 'OpenSTAManager', + ]).'

'.tr("Prima di procedere con l'installazione, verifica che il sistema soddisfi i seguenti requisiti").'.

'.tr('Le impostazioni PHP possono essere modificate nel file _FILE_', [ - '_FILE_' => 'php.ini', - ]).'

+ '_FILE_' => 'php.ini', + ]).'

'; // REQUISITI PER IL CORRETTO FUNZIONAMENTO @@ -474,8 +474,8 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {

'.tr('Licenza del software').'

'.tr('OpenSTAManager è tutelato dalla licenza _LICENSE_', [ - '_LICENSE_' => 'GPL 3.0', - ]).':

+ '_LICENSE_' => 'GPL 3.0', + ]).':

diff --git a/include/init/update.php b/include/init/update.php index 06c96ff9e..8a2bbcdd5 100755 --- a/include/init/update.php +++ b/include/init/update.php @@ -47,7 +47,7 @@ if (filter('action') == 'do_update') { '; - } else if (!empty($update['sql'])) { + } elseif (!empty($update['sql'])) { echo ' '; } - if ($dbo->isInstalled() && $dbo->isConnected() && !Update::isUpdateAvailable()) { echo '
@@ -191,11 +189,11 @@ if ($dbo->isInstalled() && $dbo->isConnected() && !Update::isUpdateAvailable())
+ echo ' required>
@@ -216,8 +214,8 @@ echo ' required> '.tr('Password dimenticata?').'
'; -if ($microsoft) { - echo ' + if ($microsoft) { + echo ' '; -} -echo ' + } + echo '
diff --git a/lib/common.php b/lib/common.php index 43ca49170..b80525933 100755 --- a/lib/common.php +++ b/lib/common.php @@ -24,12 +24,12 @@ * @since 2.4.2 */ use Common\Components\Accounting; +use Intervention\Image\ImageManager; use Modules\Contratti\Contratto; use Modules\DDT\DDT; use Modules\Fatture\Fattura; use Modules\Interventi\Intervento; use Modules\Ordini\Ordine; -use Intervention\Image\ImageManager; /** * Esegue una somma precisa tra due interi/array. @@ -429,6 +429,7 @@ function hasArticoliFiglio($id_articolo) * * @return ImageManager */ -function getImageManager() { +function getImageManager() +{ return extension_loaded('gd') ? ImageManager::gd() : ImageManager::imagick(); -} \ No newline at end of file +} diff --git a/lib/helpers.php b/lib/helpers.php index afbcde84e..cb2f5cdc0 100755 --- a/lib/helpers.php +++ b/lib/helpers.php @@ -111,7 +111,7 @@ function setting($name, $again = false) $user = Auth::user(); if ($user) { - $user_options = json_decode($user->options ?: '', true) ?: []; + $user_options = json_decode((string) $user->options ?: '', true) ?: []; } if ($user_options['settings'][$setting->id] !== null) { diff --git a/modules/adattatori_archiviazione/src/OSMFilesystem.php b/modules/adattatori_archiviazione/src/OSMFilesystem.php index 76395217d..57b1a52e8 100644 --- a/modules/adattatori_archiviazione/src/OSMFilesystem.php +++ b/modules/adattatori_archiviazione/src/OSMFilesystem.php @@ -29,7 +29,6 @@ class OSMFilesystem extends Filesystem 'php' => 'application/php', 'php5' => 'application/php', 'phtml' => 'application/php', - ]; public function upload($directory, $filename, $contents) diff --git a/modules/aggiornamenti/actions.php b/modules/aggiornamenti/actions.php index fa9d4d869..95e069417 100755 --- a/modules/aggiornamenti/actions.php +++ b/modules/aggiornamenti/actions.php @@ -70,9 +70,9 @@ switch (filter('op')) { foreach ($queries as $query) { try { $dbo->query($query); - $executed++; + ++$executed; } catch (Exception $e) { - $errors[] = $query . ' - ' . $e->getMessage(); + $errors[] = $query.' - '.$e->getMessage(); } } $dbo->query('SET FOREIGN_KEY_CHECKS=1'); @@ -86,7 +86,7 @@ switch (filter('op')) { echo json_encode([ 'success' => true, - 'message' => $success_message . '

' . tr('Query eseguite:') . '
' . $debug_queries, + 'message' => $success_message.'

'.tr('Query eseguite:').'
'.$debug_queries, 'flash_message' => true, ]); } else { @@ -99,7 +99,7 @@ switch (filter('op')) { echo json_encode([ 'success' => false, - 'message' => $error_message . '
' . implode('
', $errors) . '

' . tr('Query da eseguire:') . '
' . $debug_queries, + 'message' => $error_message.'
'.implode('
', $errors).'

'.tr('Query da eseguire:').'
'.$debug_queries, 'flash_message' => true, ]); } diff --git a/modules/aggiornamenti/database.php b/modules/aggiornamenti/database.php index 65f0370c6..faa16f6b9 100644 --- a/modules/aggiornamenti/database.php +++ b/modules/aggiornamenti/database.php @@ -25,7 +25,8 @@ echo '
'; $query_conflitti = []; -function saveQueriesToSession($queries) { +function saveQueriesToSession($queries) +{ $_SESSION['query_conflitti'] = $queries; } @@ -148,7 +149,6 @@ $results_settings = settings_diff($data_settings, $settings); $results_settings_added = settings_diff($settings, $data_settings); if (!empty($results) || !empty($results_added) || !empty($results_settings) || !empty($results_settings_added)) { - if ($results) { echo '
@@ -164,10 +164,10 @@ if (!empty($results) || !empty($results_added) || !empty($results_settings) || !
'.tr('Attenzione: questa funzionalità può presentare dei risultati falsamente positivi, sulla base del contenuto del file _FILE_ e la versione _MYSQL_VERSION_ di _DBMS_TYPE_ rilevata a sistema', [ - '_FILE_' => ''.$file_to_check_database.'', - '_MYSQL_VERSION_' => ''.$database->getMySQLVersion().'', - '_DBMS_TYPE_' => ''.$database->getType().'', - ]).'. + '_FILE_' => ''.$file_to_check_database.'', + '_MYSQL_VERSION_' => ''.$database->getMySQLVersion().'', + '_DBMS_TYPE_' => ''.$database->getType().'', + ]).'.
'; @@ -296,13 +296,10 @@ if (!empty($results) || !empty($results_added) || !empty($results_settings) || ! if ($results_added) { foreach ($results_added as $table => $errors) { if (($results[$table] && array_keys($results[$table]) != array_keys($errors)) || (empty($results[$table]) && !empty($errors))) { - $has_content = false; - $table_not_expected = array_key_exists('current', $errors) && $errors['current'] == null; - $has_keys = false; foreach ($errors as $name => $diff) { if ($name != 'foreign_keys' && !isset($results[$table][$name]) && isset($diff['key'])) { @@ -311,10 +308,8 @@ if (!empty($results) || !empty($results_added) || !empty($results_settings) || ! } } - $foreign_keys = $errors['foreign_keys'] ?: []; - if ($table_not_expected || $has_keys || !empty($foreign_keys)) { echo '
'.$table.'
'; @@ -381,14 +376,11 @@ if (!empty($results) || !empty($results_added) || !empty($results_settings) || ! '; foreach ($foreign_keys as $name => $diff) { - $query = 'ALTER TABLE `'.$table.'` ADD FOREIGN KEY (`'.$name.'`) REFERENCES '; - if (isset($diff['referenced_table']) && isset($diff['referenced_column'])) { $query .= '`'.$diff['referenced_table']['current'].'`(`'.$diff['referenced_column']['current'].'`)'; } else { - $query .= 'altra_tabella(id)'; } $query .= ' ON DELETE CASCADE ON UPDATE CASCADE'; @@ -423,7 +415,7 @@ if (!empty($results) || !empty($results_added) || !empty($results_settings) || ! $campi_non_previsti[] = [ 'tabella' => $table, 'campo' => $name, - 'valore' => isset($diff['expected']) ? $diff['expected'] : '' + 'valore' => $diff['expected'] ?? '', ]; } } @@ -452,7 +444,7 @@ if (!empty($results) || !empty($results_added) || !empty($results_settings) || ! } else { $class = 'warning'; - $query = "UPDATE `zz_settings` SET `tipo` = ".prepare($setting['expected'])." WHERE `nome` = ".prepare($key); + $query = 'UPDATE `zz_settings` SET `tipo` = '.prepare($setting['expected']).' WHERE `nome` = '.prepare($key); $query_conflitti[] = $query.';'; } @@ -500,7 +492,6 @@ if (!empty($results) || !empty($results_added) || !empty($results_settings) || ! '; } - if (!empty($campi_non_previsti)) { echo '

Campi non previsti

@@ -534,7 +525,6 @@ if (!empty($results) || !empty($results_added) || !empty($results_settings) || !
'; } - if (!empty($query_conflitti)) { echo ' '; - - } // Visualizzo, in base alle impostazioni scelte, se il magazzino verrà movimentato diff --git a/modules/articoli/src/Import/CSV.php b/modules/articoli/src/Import/CSV.php index e5d97938d..48f41df2e 100644 --- a/modules/articoli/src/Import/CSV.php +++ b/modules/articoli/src/Import/CSV.php @@ -278,7 +278,7 @@ class CSV extends CSVImporter } // Crea una chiave univoca per evitare duplicati - $key = $record[$primary_key] . '|' . $record['anagrafica_listino']; + $key = $record[$primary_key].'|'.$record['anagrafica_listino']; if (isset($processed_records[$key])) { continue; // Evita di elaborare lo stesso record più volte } @@ -319,171 +319,13 @@ class CSV extends CSVImporter } } - /** - * Processa la categoria dell'articolo. - * - * @param array $record Record da processare - * @return Categoria|null Categoria processata - */ - protected function processaCategoria($record) - { - if (empty($record['categoria'])) { - return null; - } - - $categoria = Categoria::where('id', '=', (new Categoria())->getByField('title', strtolower((string) $record['categoria'])))->where('is_articolo', '=', 0)->first(); - - if (empty($categoria)) { - $categoria = Categoria::build(); - $categoria->setTranslation('title', $record['categoria']); - $categoria->is_articolo = 1; - $categoria->save(); - } - - return $categoria; - } - - /** - * Processa la sottocategoria dell'articolo. - * - * @param array $record Record da processare - * @param Categoria|null $categoria Categoria padre - * @return Categoria|null Sottocategoria processata - */ - protected function processaSottocategoria($record, $categoria) - { - if (empty($record['sottocategoria']) || empty($categoria)) { - return null; - } - - $sottocategoria = Categoria::where('id', '=', (new Categoria())->getByField('title', strtolower((string) $record['sottocategoria'])))->first(); - - if (empty($sottocategoria)) { - $sottocategoria = Categoria::build(); - $sottocategoria->setTranslation('title', $record['sottocategoria']); - $sottocategoria->parent()->associate($categoria); - $sottocategoria->save(); - } - - return $sottocategoria; - } - - /** - * Processa la marca dell'articolo. - * - * @param array $record Record da processare - * @return Marca|null Marca processata - */ - protected function processaMarca($record) - { - if (empty($record['marca'])) { - return null; - } - - $marca = Marca::where('name', $record['marca'])->first(); - - if (empty($marca)) { - $marca = Marca::build($record['marca']); - $marca->save(); - } - - return $marca; - } - - /** - * Processa l'unità di misura dell'articolo. - * - * @param array $record Record da processare - * @return void - */ - protected function processaUnitaMisura($record) - { - if (empty($record['um'])) { - return; - } - - $database = database(); - $um = $database->fetchOne('SELECT id FROM `mg_unitamisura` WHERE `valore`='.prepare($record['um'])); - if (empty($um)) { - $database->query('INSERT INTO `mg_unitamisura` (`valore`) VALUES ('.prepare($record['um']).')'); - } - } - - /** - * Processa l'immagine dell'articolo. - * - * @param Articolo $articolo Articolo da aggiornare - * @param string $url URL dell'immagine - * @param array $record Record da processare - * @return void - */ - protected function processaImmagine($articolo, $url, $record) - { - if (empty($url) || empty($record['import_immagine'])) { - return; - } - - try { - $file_content = @file_get_contents($url); - - if (empty($file_content)) { - return; - } - - $database = database(); - - /** - * Import immagine options: - * - * - 1: Permette di importare l'immagine come principale dell'articolo mantenendo gli altri allegati già presenti. - * - 2: Permette di importare l'immagine come principale dell'articolo rimuovendo tutti gli allegati presenti. - * - 3: Permette di importare l'immagine come allegato dell'articolo. - * - 4: Permette di importare l'immagine come allegato dell'articolo rimuovendo tutti gli allegati presenti. - */ - if ($record['import_immagine'] == 2 || $record['import_immagine'] == 4) { - \Uploads::deleteLinked([ - 'id_module' => Module::where('name', 'Articoli')->first()->id, - 'id_record' => $articolo->id, - ]); - - $database->update('mg_articoli', [ - 'immagine' => '', - ], [ - 'id' => $articolo->id, - ]); - } - - $name = 'immagine_'.$articolo->id.'.'.Upload::getExtensionFromMimeType($file_content); - - $upload = \Uploads::upload($file_content, [ - 'name' => 'Immagine', - 'category' => 'Immagini', - 'original_name' => $name, - 'id_module' => Module::where('name', 'Articoli')->first()->id, - 'id_record' => $articolo->id, - ], [ - 'thumbnails' => true, - ]); - - if ($upload && !empty($upload->filename) && ($record['import_immagine'] == 1 || $record['import_immagine'] == 2)) { - $database->update('mg_articoli', [ - 'immagine' => $upload->filename, - ], [ - 'id' => $articolo->id, - ]); - } - } catch (\Exception $e) { - // Registra l'errore ma continua con l'importazione - error_log('Errore durante l\'importazione dell\'immagine: ' . $e->getMessage()); - } - } - /** * Importa un record nel database. * - * @param array $record Record da importare - * @param bool $update_record Se true, aggiorna i record esistenti - * @param bool $add_record Se true, aggiunge nuovi record + * @param array $record Record da importare + * @param bool $update_record Se true, aggiorna i record esistenti + * @param bool $add_record Se true, aggiunge nuovi record + * * @return bool|null True se l'importazione è riuscita, false altrimenti, null se l'operazione è stata saltata */ public function import($record, $update_record = true, $add_record = true) @@ -557,7 +399,7 @@ class CSV extends CSVImporter $nome_sede = $record['nome_sede'] ?? ''; // Aggiornamento dettaglio prezzi - $dettagli['anagrafica_listino'] = $dettagli['anagrafica_listino'] ?? $record['anagrafica_listino']; + $dettagli['anagrafica_listino'] ??= $record['anagrafica_listino']; $dettagli['partita_iva'] = $record['p_iva'] ?? ''; $dettagli['qta_minima'] = $record['qta_minima'] ?? ''; $dettagli['qta_massima'] = $record['qta_massima'] ?? ''; @@ -575,9 +417,9 @@ class CSV extends CSVImporter // Rimuovi i campi già elaborati unset($record['anagrafica_listino'], $record['p_iva'], $record['qta_minima'], - $record['qta_massima'], $record['prezzo_listino'], $record['sconto_listino'], - $record['dir'], $record['codice_fornitore'], $record['barcode_fornitore'], - $record['descrizione_fornitore'], $record['id_fornitore']); + $record['qta_massima'], $record['prezzo_listino'], $record['sconto_listino'], + $record['dir'], $record['codice_fornitore'], $record['barcode_fornitore'], + $record['descrizione_fornitore'], $record['id_fornitore']); // Gestione immagine $this->processaImmagine($articolo, $url, $record); @@ -617,18 +459,192 @@ class CSV extends CSVImporter return true; } catch (\Exception $e) { // Registra l'errore in un log - error_log('Errore durante l\'importazione dell\'articolo: ' . $e->getMessage()); + error_log('Errore durante l\'importazione dell\'articolo: '.$e->getMessage()); + return false; } } + public static function getExample() + { + return [ + ['Codice', 'Immagine', 'Import immagine', 'Descrizione', 'Quantità', 'Data inventario', 'Unità misura', 'Prezzo acquisto', 'Prezzo vendita', 'Peso', 'Volume', 'Categoria', 'Sottocategoria', 'marca', 'Modello', 'Barcode', 'Fornitore predefinito', 'Partita IVA', 'Codice IVA vendita', 'Ubicazione', 'Note', 'Anagrafica listino', 'Codice fornitore', 'Barcode fornitore', 'Descrizione fornitore', 'Qta minima', 'Qta massima', 'Prezzo listino', 'Sconto listino', 'Cliente/Fornitore listino', 'Sede'], + ['OSM-BUDGET', 'https://openstamanager.com/moduli/budget/budget.webp', '2', 'Modulo Budget per OpenSTAManager', '1', '28/11/2023', 'PZ', '90.00', '180.00', '', '', 'Software gestionali', 'Moduli aggiuntivi', 'DevCode', 'Budget', '4006381333931', 'DevCode s.r.l.', '05024030289', '', '', 'Nota ad uso interno', 'DevCode s.r.l.', 'DEV-BUDGET', '0123456789012', 'Strumento gestionale utilizzato per pianificare e monitorare le entrate e uscite aziendali', '1', '10', '180.00', '20', 'Fornitore', 'Sede'], + ]; + } + + /** + * Processa la categoria dell'articolo. + * + * @param array $record Record da processare + * + * @return Categoria|null Categoria processata + */ + protected function processaCategoria($record) + { + if (empty($record['categoria'])) { + return null; + } + + $categoria = Categoria::where('id', '=', (new Categoria())->getByField('title', strtolower((string) $record['categoria'])))->where('is_articolo', '=', 0)->first(); + + if (empty($categoria)) { + $categoria = Categoria::build(); + $categoria->setTranslation('title', $record['categoria']); + $categoria->is_articolo = 1; + $categoria->save(); + } + + return $categoria; + } + + /** + * Processa la sottocategoria dell'articolo. + * + * @param array $record Record da processare + * @param Categoria|null $categoria Categoria padre + * + * @return Categoria|null Sottocategoria processata + */ + protected function processaSottocategoria($record, $categoria) + { + if (empty($record['sottocategoria']) || empty($categoria)) { + return null; + } + + $sottocategoria = Categoria::where('id', '=', (new Categoria())->getByField('title', strtolower((string) $record['sottocategoria'])))->first(); + + if (empty($sottocategoria)) { + $sottocategoria = Categoria::build(); + $sottocategoria->setTranslation('title', $record['sottocategoria']); + $sottocategoria->parent()->associate($categoria); + $sottocategoria->save(); + } + + return $sottocategoria; + } + + /** + * Processa la marca dell'articolo. + * + * @param array $record Record da processare + * + * @return Marca|null Marca processata + */ + protected function processaMarca($record) + { + if (empty($record['marca'])) { + return null; + } + + $marca = Marca::where('name', $record['marca'])->first(); + + if (empty($marca)) { + $marca = Marca::build($record['marca']); + $marca->save(); + } + + return $marca; + } + + /** + * Processa l'unità di misura dell'articolo. + * + * @param array $record Record da processare + * + * @return void + */ + protected function processaUnitaMisura($record) + { + if (empty($record['um'])) { + return; + } + + $database = database(); + $um = $database->fetchOne('SELECT id FROM `mg_unitamisura` WHERE `valore`='.prepare($record['um'])); + if (empty($um)) { + $database->query('INSERT INTO `mg_unitamisura` (`valore`) VALUES ('.prepare($record['um']).')'); + } + } + + /** + * Processa l'immagine dell'articolo. + * + * @param Articolo $articolo Articolo da aggiornare + * @param string $url URL dell'immagine + * @param array $record Record da processare + * + * @return void + */ + protected function processaImmagine($articolo, $url, $record) + { + if (empty($url) || empty($record['import_immagine'])) { + return; + } + + try { + $file_content = @file_get_contents($url); + + if (empty($file_content)) { + return; + } + + $database = database(); + + /* + * Import immagine options: + * + * - 1: Permette di importare l'immagine come principale dell'articolo mantenendo gli altri allegati già presenti. + * - 2: Permette di importare l'immagine come principale dell'articolo rimuovendo tutti gli allegati presenti. + * - 3: Permette di importare l'immagine come allegato dell'articolo. + * - 4: Permette di importare l'immagine come allegato dell'articolo rimuovendo tutti gli allegati presenti. + */ + if ($record['import_immagine'] == 2 || $record['import_immagine'] == 4) { + \Uploads::deleteLinked([ + 'id_module' => Module::where('name', 'Articoli')->first()->id, + 'id_record' => $articolo->id, + ]); + + $database->update('mg_articoli', [ + 'immagine' => '', + ], [ + 'id' => $articolo->id, + ]); + } + + $name = 'immagine_'.$articolo->id.'.'.Upload::getExtensionFromMimeType($file_content); + + $upload = \Uploads::upload($file_content, [ + 'name' => 'Immagine', + 'category' => 'Immagini', + 'original_name' => $name, + 'id_module' => Module::where('name', 'Articoli')->first()->id, + 'id_record' => $articolo->id, + ], [ + 'thumbnails' => true, + ]); + + if ($upload && !empty($upload->filename) && ($record['import_immagine'] == 1 || $record['import_immagine'] == 2)) { + $database->update('mg_articoli', [ + 'immagine' => $upload->filename, + ], [ + 'id' => $articolo->id, + ]); + } + } catch (\Exception $e) { + // Registra l'errore ma continua con l'importazione + error_log('Errore durante l\'importazione dell\'immagine: '.$e->getMessage()); + } + } + /** * Aggiorna la giacenza dell'articolo. * - * @param Articolo $articolo Articolo da aggiornare - * @param float $nuova_qta Nuova quantità - * @param string $nome_sede Nome della sede - * @param array $record Record da processare + * @param Articolo $articolo Articolo da aggiornare + * @param float $nuova_qta Nuova quantità + * @param string $nome_sede Nome della sede + * @param array $record Record da processare + * * @return void */ protected function aggiornaGiacenza($articolo, $nuova_qta, $nome_sede, $record) @@ -659,18 +675,10 @@ class CSV extends CSVImporter } } catch (\Exception $e) { // Registra l'errore ma continua con l'importazione - error_log('Errore durante l\'aggiornamento della giacenza: ' . $e->getMessage()); + error_log('Errore durante l\'aggiornamento della giacenza: '.$e->getMessage()); } } - public static function getExample() - { - return [ - ['Codice', 'Immagine', 'Import immagine', 'Descrizione', 'Quantità', 'Data inventario', 'Unità misura', 'Prezzo acquisto', 'Prezzo vendita', 'Peso', 'Volume', 'Categoria', 'Sottocategoria', 'marca', 'Modello', 'Barcode', 'Fornitore predefinito', 'Partita IVA', 'Codice IVA vendita', 'Ubicazione', 'Note', 'Anagrafica listino', 'Codice fornitore', 'Barcode fornitore', 'Descrizione fornitore', 'Qta minima', 'Qta massima', 'Prezzo listino', 'Sconto listino', 'Cliente/Fornitore listino', 'Sede'], - ['OSM-BUDGET', 'https://openstamanager.com/moduli/budget/budget.webp', '2', 'Modulo Budget per OpenSTAManager', '1', '28/11/2023', 'PZ', '90.00', '180.00', '', '', 'Software gestionali', 'Moduli aggiuntivi', 'DevCode', 'Budget', '4006381333931', 'DevCode s.r.l.', '05024030289', '', '', 'Nota ad uso interno', 'DevCode s.r.l.', 'DEV-BUDGET', '0123456789012', 'Strumento gestionale utilizzato per pianificare e monitorare le entrate e uscite aziendali', '1', '10', '180.00', '20', 'Fornitore', 'Sede'], - ]; - } - protected function aggiornaDettaglioPrezzi(Articolo $articolo, $dettagli) { // Listini @@ -699,17 +707,11 @@ class CSV extends CSVImporter } $dettagli['dir'] = strtolower((string) $dettagli['dir']); - switch ($dettagli['dir']) { - case 'fornitore': - $dettagli['dir'] = 'uscita'; - break; - case 'cliente': - $dettagli['dir'] = 'entrata'; - break; - default: - $dettagli['dir'] = null; - break; - } + $dettagli['dir'] = match ($dettagli['dir']) { + 'fornitore' => 'uscita', + 'cliente' => 'entrata', + default => null, + }; // Aggiungo Listino if (!empty($anagrafica) && !empty($dettagli['dir']) && $dettagli['prezzo_listino']) { @@ -744,4 +746,4 @@ class CSV extends CSVImporter $articolo->save(); } } -} \ No newline at end of file +} diff --git a/modules/backups/edit.php b/modules/backups/edit.php index 858fa5f54..4f2379213 100755 --- a/modules/backups/edit.php +++ b/modules/backups/edit.php @@ -188,7 +188,7 @@ if (string_starts_with($backup_dir, base_dir())) { echo '
'.tr('Per motivi di sicurezza si consiglia di modificare il percorso della cartella di backup al di fuori della cartella di OSM, possibilmente in una unità esterna.').' -

'.tr('Puoi modificare il percorso di backup da:').' '.tr('Menu StrumentiImpostazioni → sezione Backup → impostazione Adattatore archiviazione backup').' +

'.tr('Puoi modificare il percorso di backup da:').' '.tr('Menu StrumentiImpostazioni → sezione Backup → impostazione Adattatore archiviazione backup').'

'; } @@ -300,11 +300,11 @@ if (file_exists($backup_dir)) {
'.tr('Backup del _DATE_', [ - '_DATE_' => Translator::dateToLocale($data), - ]).' + '_DATE_' => Translator::dateToLocale($data), + ]).' '.tr('alle _TIME_', [ - '_TIME_' => Translator::timeToLocale($ora), - ]).' + '_TIME_' => Translator::timeToLocale($ora), + ]).'
@@ -379,11 +379,11 @@ if (file_exists($backup_dir)) {
'.tr('Backup del _DATE_', [ - '_DATE_' => Translator::dateToLocale($data), - ]).' + '_DATE_' => Translator::dateToLocale($data), + ]).' '.tr('alle _TIME_', [ - '_TIME_' => Translator::timeToLocale($ora), - ]).' + '_TIME_' => Translator::timeToLocale($ora), + ]).'
@@ -449,11 +449,11 @@ if (file_exists($backup_dir)) {
'.tr('La cartella di backup non esiste!').' '.tr('Non è possibile eseguire i backup!').'
'; } -echo' +echo ' '; \ No newline at end of file +
'; diff --git a/modules/banche/actions.php b/modules/banche/actions.php index a6bdcfb3c..f9a67dc82 100755 --- a/modules/banche/actions.php +++ b/modules/banche/actions.php @@ -18,11 +18,11 @@ * along with this program. If not, see . */ +use GuzzleHttp\Client; use Modules\Anagrafiche\Anagrafica; use Modules\Anagrafiche\Nazione; use Modules\Banche\Banca; use Modules\Banche\IBAN; -use GuzzleHttp\Client; include_once __DIR__.'/../../core.php'; @@ -118,7 +118,7 @@ switch (filter('op')) { case 'check_balance': $api_key = filter('api_key'); - + // Verifica il credito residuo su ibanapi.com try { $client = new Client(); @@ -126,20 +126,20 @@ switch (filter('op')) { 'query' => ['api_key' => $api_key], 'http_errors' => false, ]); - + echo $response->getBody()->getContents(); - } catch (\Exception $e) { + } catch (Exception $e) { http_response_code(500); echo json_encode(['error' => 'Errore durante la connessione a ibanapi.com: '.$e->getMessage()]); exit; } break; - + case 'verify_iban': $iban = filter('iban'); $type = filter('type'); $api_key = filter('api_key'); - + // Verifica l'IBAN tramite ibanapi.com try { $client = new Client(); @@ -147,16 +147,16 @@ switch (filter('op')) { $response = $client->request('POST', $endpoint, [ 'form_params' => [ 'iban' => $iban, - 'api_key' => $api_key + 'api_key' => $api_key, ], 'headers' => [ - 'Accept' => 'application/json' + 'Accept' => 'application/json', ], 'http_errors' => false, ]); - + echo $response->getBody()->getContents(); - } catch (\Exception $e) { + } catch (Exception $e) { http_response_code(500); echo json_encode(['error' => 'Errore durante la connessione a ibanapi.com: '.$e->getMessage()]); exit; diff --git a/modules/banche/add.php b/modules/banche/add.php index af510119e..c4663a940 100755 --- a/modules/banche/add.php +++ b/modules/banche/add.php @@ -40,7 +40,7 @@ echo '
- {[ "type": "text", "label": "'.tr('IBAN').'", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$", "icon-after": "'.(!empty($ibanapi_key) && !empty($endpoint)?'':'').'" ]} + {[ "type": "text", "label": "'.tr('IBAN').'", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$", "icon-after": "'.(!empty($ibanapi_key) && !empty($endpoint) ? '' : '').'" ]}
@@ -290,7 +290,7 @@ echo ' + "
" + "
" + "" + label + "" - + "" + (status ? '' : '') + "" + + "" + (status ? '' : '') + "" + "
"; } diff --git a/modules/banche/edit.php b/modules/banche/edit.php index 9bf3f58ab..e8f94ea0d 100644 --- a/modules/banche/edit.php +++ b/modules/banche/edit.php @@ -60,7 +60,7 @@ $endpoint = setting('Endpoint ibanapi.com');
- {[ "type": "text", "label": "", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$", "icon-after": "':'')?>" ]} + {[ "type": "text", "label": "", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$", "icon-after": "' : ''; ?>" ]}
@@ -365,7 +365,7 @@ if (!empty($numero_documenti)) { + "
" + "
" + "" + label + "" - + "" + (status ? '' : '') + "" + + "" + (status ? '' : '') + "" + "
"; } diff --git a/modules/categorie/actions.php b/modules/categorie/actions.php index cd00081dc..29d04daf6 100644 --- a/modules/categorie/actions.php +++ b/modules/categorie/actions.php @@ -27,8 +27,8 @@ switch (filter('op')) { $nota = filter('nota'); $colore = filter('colore'); $id_original = filter('id_original') ?: null; - $is_articolo = filter('is_articolo_add') ?: filter('is_articolo') ?: 0; - $is_impianto = filter('is_impianto_add') ?: filter('is_impianto') ?: 0; + $is_articolo = (filter('is_articolo_add') ?: filter('is_articolo')) ?: 0; + $is_impianto = (filter('is_impianto_add') ?: filter('is_impianto')) ?: 0; // Verifica che almeno uno dei due flag sia selezionato if ($is_articolo == 0 && $is_impianto == 0) { @@ -92,8 +92,8 @@ switch (filter('op')) { $nota = filter('nota'); $colore = filter('colore'); $id_original = filter('id_original') ?: null; - $is_articolo = filter('is_articolo_add') ?: filter('is_articolo') ?: 0; - $is_impianto = filter('is_impianto_add') ?: filter('is_impianto') ?: 0; + $is_articolo = (filter('is_articolo_add') ?: filter('is_articolo')) ?: 0; + $is_impianto = (filter('is_impianto_add') ?: filter('is_impianto')) ?: 0; // Verifica che almeno uno dei due flag sia selezionato if ($is_articolo == 0 && $is_impianto == 0) { diff --git a/modules/categorie/add.php b/modules/categorie/add.php index 23e62234c..5320856cc 100644 --- a/modules/categorie/add.php +++ b/modules/categorie/add.php @@ -38,10 +38,10 @@ if (isset($id_original)) { - + - +
diff --git a/modules/categorie/row-list.php b/modules/categorie/row-list.php index d1f020f96..61bb4f774 100644 --- a/modules/categorie/row-list.php +++ b/modules/categorie/row-list.php @@ -18,7 +18,6 @@ * along with this program. If not, see . */ -use Models\Module; use Modules\Articoli\Articolo; use Modules\Articoli\Categoria; @@ -41,7 +40,7 @@ foreach ($subcategorie as $sub) { '.($sub->is_impianto ? '' : '').' -'.nl2br(htmlentities(substr($sub->getTranslation('note'), 0, 100))).(strlen($sub->getTranslation('note')) > 100 ? '...' : '').' +'.nl2br(htmlentities(substr((string) $sub->getTranslation('note'), 0, 100))).(strlen((string) $sub->getTranslation('note')) > 100 ? '...' : '').'
diff --git a/modules/categorie_files/actions.php b/modules/categorie_files/actions.php index 36557ac3e..4b7e917b7 100644 --- a/modules/categorie_files/actions.php +++ b/modules/categorie_files/actions.php @@ -25,7 +25,7 @@ use Modules\CategorieFiles\Categoria; switch (post('op')) { case 'update': $name = post('name'); - $categoria_new = Categoria::where('name', '=', $name)->where('deleted_at', '=', null)->where('id','!=', $id_record)->first(); + $categoria_new = Categoria::where('name', '=', $name)->where('deleted_at', '=', null)->where('id', '!=', $id_record)->first(); if (!empty($categoria_new)) { flash()->error(tr('Categoria _NAME_ già esistente!', [ diff --git a/modules/checklists/components/edit-check.php b/modules/checklists/components/edit-check.php index 5e854925e..621f73d15 100644 --- a/modules/checklists/components/edit-check.php +++ b/modules/checklists/components/edit-check.php @@ -40,7 +40,7 @@ if ($main_check) { 'label' => tr('Descrizione'), 'name' => 'content_edit', 'required' => 1, - 'value' => htmlentities($record->content), + 'value' => htmlentities((string) $record->content), ]); ?>
diff --git a/modules/checklists/modutil.php b/modules/checklists/modutil.php index d45d9de42..ea1a0840b 100644 --- a/modules/checklists/modutil.php +++ b/modules/checklists/modutil.php @@ -54,22 +54,22 @@ if (!function_exists('renderChecklist')) { '.(!empty($check->checked_at) ? tr('Verificato da _NAME_ _DATE_', [ - '_NAME_' => $check->checkUser->username.'
', - '_DATE_' => timestampFormat($check->checked_at), - ]) : '').' + '_NAME_' => $check->checkUser->username.'
', + '_DATE_' => timestampFormat($check->checked_at), + ]) : '').'
'; $result .= ' '.input([ - 'type' => 'textarea', - 'name' => 'note_checklist', - 'id' => 'note_'.$check->id, - 'class' => 'unblockable', - 'placeholder' => tr('Note').'...', - 'value' => $check->note, - ]).' + 'type' => 'textarea', + 'name' => 'note_checklist', + 'id' => 'note_'.$check->id, + 'class' => 'unblockable', + 'placeholder' => tr('Note').'...', + 'value' => $check->note, + ]).' '; $result .= ' diff --git a/modules/contratti/bulk.php b/modules/contratti/bulk.php index c749104ba..1459be2ce 100755 --- a/modules/contratti/bulk.php +++ b/modules/contratti/bulk.php @@ -148,7 +148,7 @@ switch (post('op')) { // Lettura righe selezionate foreach ($id_records as $id) { $contratto = Contratto::find($id); - $rinnova = !empty($contratto->data_accettazione) && !empty($contratto->data_conclusione) && $contratto->data_accettazione != '0000-00-00' && $contratto->data_conclusione != '0000-00-00' && $contratto->stato->is_bloccato& $contratto->rinnovabile; + $rinnova = !empty($contratto->data_accettazione) && !empty($contratto->data_conclusione) && $contratto->data_accettazione != '0000-00-00' && $contratto->data_conclusione != '0000-00-00' && $contratto->stato->is_bloccato & $contratto->rinnovabile; if ($rinnova) { $diff = $contratto->data_conclusione->diffAsCarbonInterval($contratto->data_accettazione); diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index 4d12d2553..9458cee18 100755 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -141,7 +141,7 @@ echo '
- {[ "type": "select", "multiple": "1", "label": "", "name": "matricolaimpianto[]", "ajax-source": "impianti-cliente", "select-options": {"idanagrafica": , "idsede_destinazione": "", "idcontratto": ""}, "value": "$idimpianti$", "icon-after": "add|first()->id; ?>|||" ]} + {[ "type": "select", "multiple": "1", "label": "", "name": "matricolaimpianto[]", "ajax-source": "impianti-cliente", "select-options": {"idanagrafica": , "idsede_destinazione": "", "idcontratto": ""}, "value": "$idimpianti$", "icon-after": "add|first()->id; ?>|||" ]}
@@ -637,7 +637,7 @@ if (!empty($elementi)) { '_DOC_' => $elemento['tipo_documento'], '_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'], '_DATE_' => Translator::dateToLocale($elemento['data']), - '_STATO_' => (!empty($elemento['stato_documento']) ? "(".$elemento['stato_documento'].")" : ''), + '_STATO_' => (!empty($elemento['stato_documento']) ? '('.$elemento['stato_documento'].')' : ''), ]); echo ' diff --git a/modules/contratti/modals/modifica_iva.php b/modules/contratti/modals/modifica_iva.php index f95194cf3..7e38aebdc 100644 --- a/modules/contratti/modals/modifica_iva.php +++ b/modules/contratti/modals/modifica_iva.php @@ -38,7 +38,7 @@ if (!empty($riga_id)) { // Caso singola riga $riga = Riga::find($riga_id) ?: Articolo::find($riga_id); $riga = $riga ?: Sconto::find($riga_id); - $righe_totali++; + ++$righe_totali; if (!empty($riga) && !empty($riga->idiva) && !empty($riga->aliquota)) { $aliquote_iva[$riga->idiva] = [ @@ -46,19 +46,19 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 1 + 'count' => 1, ]; } else { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } elseif (!empty($righe_ids)) { // Caso multiple righe - $righe_array = explode(',', $righe_ids); + $righe_array = explode(',', (string) $righe_ids); $righe_totali = count($righe_array); foreach ($righe_array as $id_riga) { @@ -72,16 +72,16 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 0 + 'count' => 0, ]; } - $aliquote_iva[$riga->idiva]['count']++; + ++$aliquote_iva[$riga->idiva]['count']; } elseif (!empty($riga)) { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } @@ -92,20 +92,20 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty( ?> - 0): ?> + 0) { ?>
-

+

    - +
  • - - (%) - 1): ?> - - + - (%) + 1) { ?> + +
  • - +
@@ -117,38 +117,38 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- 0): ?> + 0) { ?>
    - +
  • - - (%) - + - (%) +
  • - +
- + - 0): ?> -

:

- + 0) { ?> +

:

+ -

:

+

:

@@ -159,31 +159,31 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- +
@@ -216,7 +216,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } else { @@ -237,7 +237,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php index 66d5335b6..6c485d1e1 100755 --- a/modules/contratti/row-list.php +++ b/modules/contratti/row-list.php @@ -95,7 +95,7 @@ foreach ($righe as $riga) { '; // Descrizione - $descrizione = nl2br($riga->descrizione); + $descrizione = nl2br((string) $riga->descrizione); if ($riga->isArticolo()) { $descrizione = Modules::link('Articoli', $riga->idarticolo, $riga->codice.' - '.$descrizione); } @@ -123,7 +123,7 @@ foreach ($righe as $riga) { if (!empty($riga->note)) { echo ' -
'.nl2br($riga->note).''; +
'.nl2br((string) $riga->note).''; } echo ' diff --git a/modules/dashboard/ajax.php b/modules/dashboard/ajax.php index 4b0545d1e..ba78af435 100644 --- a/modules/dashboard/ajax.php +++ b/modules/dashboard/ajax.php @@ -101,7 +101,7 @@ switch (filter('op')) { if (setting('Visualizzazione colori sessioni') == 'Sfondo colore stato - bordo colore tecnico') { $backgroundcolor = strtoupper((string) $sessione['colore']); $bordercolor = strtoupper((string) $sessione['colore_tecnico']); - } else if (setting('Visualizzazione colori sessioni') == 'Sfondo colore tecnico - bordo colore stato') { + } elseif (setting('Visualizzazione colori sessioni') == 'Sfondo colore tecnico - bordo colore stato') { $backgroundcolor = strtoupper((string) $sessione['colore_tecnico']); $bordercolor = strtoupper((string) $sessione['colore']); } @@ -434,7 +434,7 @@ switch (filter('op')) { if (fullEl.is(":visible")) { fullEl.hide(); textEl.show(); - $(this).text("' . tr('Mostra tutto') . '"); + $(this).text("'.tr('Mostra tutto').'"); // Forza il ridimensionamento del tooltip alla dimensione originale var instance = $(".tooltipstered").tooltipster("instance"); @@ -445,7 +445,7 @@ switch (filter('op')) { } else { textEl.hide(); fullEl.show(); - $(this).text("' . tr('Comprimi') . '"); + $(this).text("'.tr('Comprimi').'"); // Forza il ridimensionamento del tooltip solo verticalmente var instance = $(".tooltipstered").tooltipster("instance"); @@ -583,7 +583,7 @@ switch (filter('op')) {
'.($sessione['ref'] == 'intervento' ? Modules::link($modulo_riferimento, $id_riferimento, '', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-'.$class.' btn-xs pull-right"') : Modules::link($modulo_riferimento, $id_riferimento, '', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-'.$class.' btn-xs pull-right"')).' '.$sessione['ragione_sociale'].'
'.dateFormat($sessione['data_richiesta']).' ('.$sessione['tipo_intervento'].') - '.(!empty($sessione['richiesta']) ? '
' . (strlen(strip_tags((string) $sessione['richiesta'])) > 200 ? substr(strip_tags((string) $sessione['richiesta']), 0, 200).'...' : strip_tags((string) $sessione['richiesta'])) . '' . strip_tags((string) $sessione['richiesta']) . '' . tr('Mostra tutto') . '
' : '').' + '.(!empty($sessione['richiesta']) ? '
'.(strlen(strip_tags((string) $sessione['richiesta'])) > 200 ? substr(strip_tags((string) $sessione['richiesta']), 0, 200).'...' : strip_tags((string) $sessione['richiesta'])).''.strip_tags((string) $sessione['richiesta']).''.tr('Mostra tutto').'
' : '').' '.(!empty($sessione['numero_contratto']) ? ''.tr('Contratto numero: ').$sessione['numero_contratto'].tr(' del ').dateFormat($sessione['data_contratto']).'' : '').' '.(!empty($sessione['data_scadenza'] && $sessione['data_scadenza'] != '0000-00-00 00:00:00') ? ''.tr('Entro il: ').dateFormat($sessione['data_scadenza']).'' : '').' '.(!empty($sessione['id_tecnico']) ? ''.tr('Tecnico').': '.$sessione['ragione_sociale_tecnico'].'' : '').'
'; } @@ -601,13 +601,13 @@ switch (filter('op')) { if (fullEl.is(":visible")) { fullEl.hide(); textEl.show(); - $(this).text("' . tr('Mostra tutto') . '"); + $(this).text("'.tr('Mostra tutto').'"); // Gli stili sono ora definiti nel CSS } else { textEl.hide(); fullEl.show(); - $(this).text("' . tr('Comprimi') . '"); + $(this).text("'.tr('Comprimi').'"); // Forza il ridimensionamento del tooltip solo verticalmente var instance = $(".tooltipstered").tooltipster("instance"); diff --git a/modules/dashboard/widgets/notifiche.php b/modules/dashboard/widgets/notifiche.php index c73110680..4609b8040 100755 --- a/modules/dashboard/widgets/notifiche.php +++ b/modules/dashboard/widgets/notifiche.php @@ -66,7 +66,7 @@ foreach ($moduli as $module_id => $note) { '; foreach ($note as $nota) { - $class = (strtotime($nota->notification_date) < strtotime(date('Y-m-d')) && !empty($nota->notification_date)) ? 'danger' : ''; + $class = (strtotime((string) $nota->notification_date) < strtotime(date('Y-m-d')) && !empty($nota->notification_date)) ? 'danger' : ''; $documento = ''; if ($modulo->getTranslation('title') == 'Attività') { diff --git a/modules/ddt/bulk.php b/modules/ddt/bulk.php index 0398ab026..820f66e8a 100755 --- a/modules/ddt/bulk.php +++ b/modules/ddt/bulk.php @@ -179,7 +179,6 @@ switch (post('op')) { break; } - $operations['change_status'] = [ 'text' => ' '.tr('Cambia stato'), 'data' => [ @@ -201,7 +200,6 @@ $operations['delete_bulk'] = [ ], ]; - $operations['create_invoice'] = [ 'text' => ' '.tr('Fattura _TYPE_', ['_TYPE_' => strtolower((string) $module->getTranslation('title'))]), 'data' => [ @@ -216,5 +214,4 @@ $operations['create_invoice'] = [ ], ]; - return $operations; diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index 4bef61d3e..d08c51212 100755 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -681,7 +681,7 @@ if (!empty($elementi)) { '_DOC_' => $elemento['tipo_documento'], '_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'], '_DATE_' => Translator::dateToLocale($elemento['data']), - '_STATO_' => (!empty($elemento['stato_documento']) ? "(".$elemento['stato_documento'].")" : ''), + '_STATO_' => (!empty($elemento['stato_documento']) ? '('.$elemento['stato_documento'].')' : ''), ]); echo ' diff --git a/modules/ddt/modals/modifica_iva.php b/modules/ddt/modals/modifica_iva.php index 20599ff22..1b2bbf52f 100644 --- a/modules/ddt/modals/modifica_iva.php +++ b/modules/ddt/modals/modifica_iva.php @@ -38,7 +38,7 @@ if (!empty($riga_id)) { // Caso singola riga $riga = Riga::find($riga_id) ?: Articolo::find($riga_id); $riga = $riga ?: Sconto::find($riga_id); - $righe_totali++; + ++$righe_totali; if (!empty($riga) && !empty($riga->idiva) && !empty($riga->aliquota)) { $aliquote_iva[$riga->idiva] = [ @@ -46,19 +46,19 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 1 + 'count' => 1, ]; } else { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } elseif (!empty($righe_ids)) { // Caso multiple righe - $righe_array = explode(',', $righe_ids); + $righe_array = explode(',', (string) $righe_ids); $righe_totali = count($righe_array); foreach ($righe_array as $id_riga) { @@ -72,16 +72,16 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 0 + 'count' => 0, ]; } - $aliquote_iva[$riga->idiva]['count']++; + ++$aliquote_iva[$riga->idiva]['count']; } elseif (!empty($riga)) { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } @@ -92,20 +92,20 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty( ?> - 0): ?> + 0) { ?>
-

+

    - +
  • - - (%) - 1): ?> - - + - (%) + 1) { ?> + +
  • - +
@@ -117,38 +117,38 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- 0): ?> + 0) { ?>
    - +
  • - - (%) - + - (%) +
  • - +
- + - 0): ?> -

:

- + 0) { ?> +

:

+ -

:

+

:

@@ -159,31 +159,31 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- +
@@ -216,7 +216,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } else { @@ -237,7 +237,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php index ec98e2596..6fe87e1fe 100755 --- a/modules/ddt/row-list.php +++ b/modules/ddt/row-list.php @@ -105,7 +105,7 @@ foreach ($righe as $riga) { if ($riga->isArticolo()) { echo Modules::link('Articoli', $riga->idarticolo, $riga->codice.' - '.$riga->descrizione); } else { - echo nl2br($riga->descrizione); + echo nl2br((string) $riga->descrizione); } if ($riga->isArticolo() && !empty($riga->abilita_serial)) { @@ -128,7 +128,7 @@ foreach ($righe as $riga) { if (!empty($riga->note)) { echo ' -
'.nl2br($riga->note).''; +
'.nl2br((string) $riga->note).''; } echo ' '; diff --git a/modules/descrizioni_predefinite/actions.php b/modules/descrizioni_predefinite/actions.php index be98e5052..e91db64cb 100644 --- a/modules/descrizioni_predefinite/actions.php +++ b/modules/descrizioni_predefinite/actions.php @@ -19,26 +19,25 @@ */ include_once __DIR__.'/../../core.php'; -use Modules\DDT\Causale; switch (filter('op')) { case 'update': $dbo->update('zz_default_description', [ 'name' => filter('name'), 'descrizione' => filter('descrizione'), - 'note' => filter('note') + 'note' => filter('note'), ], [ - 'id' => $id_record + 'id' => $id_record, ]); $dbo->delete('zz_default_description_module', [ - 'id_description' => $id_record + 'id_description' => $id_record, ]); $id_moduli = (array) post('id_moduli'); foreach ($id_moduli as $id_modulo) { $dbo->insert('zz_default_description_module', [ 'id_description' => $id_record, - 'id_module' => $id_modulo + 'id_module' => $id_modulo, ]); } @@ -50,7 +49,7 @@ switch (filter('op')) { $dbo->insert('zz_default_description', [ 'name' => filter('name'), 'descrizione' => filter('descrizione'), - 'note' => filter('note') + 'note' => filter('note'), ]); $id_record = $dbo->lastInsertedId(); @@ -58,7 +57,7 @@ switch (filter('op')) { foreach ($id_moduli as $id_modulo) { $dbo->insert('zz_default_description_module', [ 'id_description' => $id_record, - 'id_module' => $id_modulo + 'id_module' => $id_modulo, ]); } @@ -68,7 +67,7 @@ switch (filter('op')) { case 'delete': $dbo->delete('zz_default_description', [ - 'id' => $id_record + 'id' => $id_record, ]); flash()->info(tr('Risposta predefinita eliminata!')); diff --git a/modules/descrizioni_predefinite/init.php b/modules/descrizioni_predefinite/init.php index 4e390a97d..52b0bc8f8 100644 --- a/modules/descrizioni_predefinite/init.php +++ b/modules/descrizioni_predefinite/init.php @@ -18,12 +18,10 @@ * along with this program. If not, see . */ -use Modules\DDT\Causale; - include_once __DIR__.'/../../core.php'; if (!empty($id_record)) { $record = $dbo->fetchOne('SELECT * FROM `zz_default_description` WHERE `zz_default_description`.`id`='.prepare($id_record)); $id_moduli = $dbo->select('zz_default_description_module', '*', [], ['id_description' => $id_record]); - $id_moduli = implode(',' ,array_column($id_moduli, 'id_module')); + $id_moduli = implode(',', array_column($id_moduli, 'id_module')); } diff --git a/modules/emails/edit.php b/modules/emails/edit.php index 37fa71611..70930bcaf 100755 --- a/modules/emails/edit.php +++ b/modules/emails/edit.php @@ -120,7 +120,7 @@ echo '
'; - echo ' +echo '
{[ "type": "select", "multiple": "1", "label": "'.tr('Mansioni').'", "name": "idmansioni[]", "value": "'.implode(',', $selected_mansioni).'", "ajax-source": "mansioni" ]} diff --git a/modules/emails/src/Template.php b/modules/emails/src/Template.php index 6f7cc1aa1..b6c9e2cad 100755 --- a/modules/emails/src/Template.php +++ b/modules/emails/src/Template.php @@ -82,7 +82,7 @@ class Template extends Model return $this->belongsToMany(PrintTemplate::class, 'em_print_template', 'id_template', 'id_print'); } - public function categories() + public function categories() { return $this->belongsToMany(Categoria::class, 'em_files_categories_template', 'id_template', 'id_category'); } diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 7f9ba5fab..4c539b48b 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -924,7 +924,7 @@ switch ($op) { ->join('co_iva', 'co_iva.id', '=', 'co_righe_documenti.idiva') ->where('co_righe_documenti.iddocumento', $fattura->id) ->whereIn('co_iva.codice_natura_fe', ['N2', 'N2.1', 'N2.2', 'N3', 'N3.1', 'N3.2', 'N3.3', 'N3.4', 'N3.5', 'N3.6', 'N6', 'N6.1', 'N6.2', 'N6.3', 'N6.4', 'N6.5', 'N6.6', 'N6.7', 'N6.8', 'N6.9']) - ->sum('subtotale'); + ->sum('subtotale'); $sconto = $database->table('co_righe_documenti') ->join('co_iva', 'co_iva.id', '=', 'co_righe_documenti.idiva') @@ -943,7 +943,7 @@ switch ($op) { ->where('co_righe_documenti.iddocumento', $fattura->id) ->where('co_iva.indetraibile', 100) ->sum('sconto'); - + $iva_indetraibile = $database->table('co_righe_documenti') ->join('co_iva', 'co_iva.id', '=', 'co_righe_documenti.idiva') ->where('co_righe_documenti.iddocumento', $fattura->id) @@ -953,8 +953,8 @@ switch ($op) { if ($imponibile) { $totale_imponibile = setting('Utilizza prezzi di vendita comprensivi di IVA') ? ($imponibile - $sconto) + (($imponibile - $sconto) * $iva->percentuale / 100) : ($imponibile - $sconto); $totale_imponibile = $fattura->tipo->reversed == 1 ? -$totale_imponibile : $totale_imponibile; - } else if ($imponibile_indetraibile) { - $totale_imponibile = setting('Utilizza prezzi di vendita comprensivi di IVA') ? ($imponibile_indetraibile - $sconto_indetraibile) + (($imponibile_indetraibile - $sconto_indetraibile) * $iva_indetraibile->percentuale / 100) : ($imponibile_indetraibile - $sconto_indetraibile); + } elseif ($imponibile_indetraibile) { + $totale_imponibile = setting('Utilizza prezzi di vendita comprensivi di IVA') ? ($imponibile_indetraibile - $sconto_indetraibile) + (($imponibile_indetraibile - $sconto_indetraibile) * $iva_indetraibile->percentuale / 100) : ($imponibile_indetraibile - $sconto_indetraibile); $totale_imponibile = $fattura->tipo->reversed == 1 ? -$totale_imponibile : $totale_imponibile; } @@ -967,9 +967,9 @@ switch ($op) { $riga = Riga::build($autofattura); $riga->descrizione = $tipo->getTranslation('title'); - $riga->id_iva = $imponibile ? $iva->id: $iva_indetraibile->id; + $riga->id_iva = $imponibile ? $iva->id : $iva_indetraibile->id; $riga->idconto = setting('Conto per autofattura') ?: setting('Conto predefinito fatture di vendita'); - $riga->setPrezzoUnitario($totale_imponibile, $imponibile ? $iva->id: $iva_indetraibile->id); + $riga->setPrezzoUnitario($totale_imponibile, $imponibile ? $iva->id : $iva_indetraibile->id); $riga->qta = 1; $riga->save(); diff --git a/modules/fatture/bulk.php b/modules/fatture/bulk.php index 7ddd7ea6d..4d1464286 100755 --- a/modules/fatture/bulk.php +++ b/modules/fatture/bulk.php @@ -22,17 +22,17 @@ include_once __DIR__.'/../../core.php'; use Carbon\Carbon; use Models\Module; +use Models\OperationLog; use Modules\Aggiornamenti\Controlli\DatiFattureElettroniche; use Modules\Anagrafiche\Anagrafica; +use Modules\Emails\Template; use Modules\Fatture\Export\CSV; use Modules\Fatture\Fattura; use Modules\Fatture\Stato; +use Notifications\EmailNotification; use Plugins\ExportFE\FatturaElettronica; use Plugins\ExportFE\Interaction; use Plugins\ReceiptFE\Ricevuta; -use Modules\Emails\Template; -use Notifications\EmailNotification; -use Models\OperationLog; use Util\Zip; $anagrafica_azienda = Anagrafica::find(setting('Azienda predefinita')); @@ -216,8 +216,8 @@ switch (post('op')) { $dst = $fe->getFilename(); $src = $dbo->selectOne('zz_files', 'filename', ['original' => $dst])['filename']; } else { - $src = basename($fattura->uploads()->where('name', 'Fattura Elettronica')->first()->filename); - $dst = basename($fattura->uploads()->where('name', 'Fattura Elettronica')->first()->original_name); + $src = basename((string) $fattura->uploads()->where('name', 'Fattura Elettronica')->first()->filename); + $dst = basename((string) $fattura->uploads()->where('name', 'Fattura Elettronica')->first()->original_name); } $file = slashes('files/'.$module->attachments_directory.'/'.$src); @@ -275,8 +275,8 @@ switch (post('op')) { foreach ($fatture as $r) { $fattura = Fattura::find($r['id']); $zz_file = $dbo->table('zz_files')->where('id_module', '=', $id_module)->where('id_record', '=', $fattura->id)->where('name', 'like', 'Ricevuta%')->first(); - $src = basename($fattura->uploads()->where('id', $zz_file->id)->first()->filename); - $dst = basename($fattura->uploads()->where('id', $zz_file->id)->first()->original_name); + $src = basename((string) $fattura->uploads()->where('id', $zz_file->id)->first()->filename); + $dst = basename((string) $fattura->uploads()->where('id', $zz_file->id)->first()->original_name); $file = slashes($module->upload_directory.'/'.$src); $dest = slashes($dir.'tmp/'.$dst); @@ -320,22 +320,22 @@ switch (post('op')) { // + 1 giorno if (post('skip_time') == 'Giorno') { - $data = date('Y-m-d', strtotime('+1 day', strtotime($fattura->data))); + $data = date('Y-m-d', strtotime('+1 day', strtotime((string) $fattura->data))); } // + 1 settimana if (post('skip_time') == 'Settimana') { - $data = date('Y-m-d', strtotime('+1 week', strtotime($fattura->data))); + $data = date('Y-m-d', strtotime('+1 week', strtotime((string) $fattura->data))); } // + 1 mese if (post('skip_time') == 'Mese') { - $data = date('Y-m-d', strtotime('+1 month', strtotime($fattura->data))); + $data = date('Y-m-d', strtotime('+1 month', strtotime((string) $fattura->data))); } // + 1 anno if (post('skip_time') == 'Anno') { - $data = date('Y-m-d', strtotime('+1 year', strtotime($fattura->data))); + $data = date('Y-m-d', strtotime('+1 year', strtotime((string) $fattura->data))); } $new = $fattura->replicate(); @@ -628,7 +628,7 @@ switch (post('op')) { // Se non ci sono destinatari, salta questa fattura if (empty($emails)) { - $failed_count++; + ++$failed_count; $failed_emails[] = $fattura->numero_esterno; continue; } @@ -669,10 +669,10 @@ switch (post('op')) { if ($email_success) { OperationLog::setInfo('id_email', $mail->id); $list[] = $fattura->numero_esterno; - $success_count++; + ++$success_count; } else { $mail->delete(); - $failed_count++; + ++$failed_count; $failed_emails[] = $fattura->numero_esterno; } } @@ -800,14 +800,10 @@ $operations['copy_bulk'] = [ ], ]; - - $operations['delete_bulk'] = [ 'text' => ' '.tr('Elimina').'', ]; - - if ($dir == 'entrata') { $operations['change_status'] = [ 'text' => ' '.tr('Emetti fatture').'', @@ -875,7 +871,6 @@ $operations['export_xml_bulk'] = [ ], ]; - if ($module->name == 'Fatture di vendita') { $operations['generate_xml'] = [ 'text' => ' '.tr('Genera fatture elettroniche').'', @@ -899,7 +894,6 @@ $operations['send-invoices'] = [ ], ]; - $operations['registrazione_contabile'] = [ 'text' => ' '.tr('Registrazione contabile').'', 'data' => [ @@ -923,7 +917,4 @@ if (Interaction::isEnabled()) { ]; } - - - return $operations; diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index e31ebd146..7d7369cbc 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -195,7 +195,7 @@ if ($dir == 'entrata') { $carbonDate = Carbon::createFromFormat($dateFormat, setting('Data inizio verifica contatore fattura di vendita')); $data_inizio_verifica_contatore = (($carbonDate !== false) ? strtotime($carbonDate->format('Y-m-d')) : null); } - $data = ($fattura->data ? strtotime($fattura->data) : ''); + $data = ($fattura->data ? strtotime((string) $fattura->data) : ''); if ($data >= $data_inizio_verifica_contatore || empty($data_inizio_verifica_contatore)) { $numero_previsto = verifica_numero_fattura($fattura); } @@ -503,8 +503,6 @@ if ($fattura->stato->id != $id_stato_bozza && $fattura->stato->id != $id_stato_a
'; - - foreach ($scadenze as $scadenza) { $pagamento_iniziato = !empty(floatval($scadenza->pagato)) || $scadenza->da_pagare == 0; diff --git a/modules/fatture/modals/modifica_iva.php b/modules/fatture/modals/modifica_iva.php index 2460ab90d..d4bab456f 100644 --- a/modules/fatture/modals/modifica_iva.php +++ b/modules/fatture/modals/modifica_iva.php @@ -38,7 +38,7 @@ if (!empty($riga_id)) { // Caso singola riga $riga = Riga::find($riga_id) ?: Articolo::find($riga_id); $riga = $riga ?: Sconto::find($riga_id); - $righe_totali++; + ++$righe_totali; if (!empty($riga) && !empty($riga->idiva) && !empty($riga->aliquota)) { $aliquote_iva[$riga->idiva] = [ @@ -46,19 +46,19 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 1 + 'count' => 1, ]; } else { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } elseif (!empty($righe_ids)) { // Caso multiple righe - $righe_array = explode(',', $righe_ids); + $righe_array = explode(',', (string) $righe_ids); $righe_totali = count($righe_array); foreach ($righe_array as $id_riga) { @@ -72,16 +72,16 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 0 + 'count' => 0, ]; } - $aliquote_iva[$riga->idiva]['count']++; + ++$aliquote_iva[$riga->idiva]['count']; } elseif (!empty($riga)) { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } @@ -92,20 +92,20 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty( ?> - 0): ?> + 0) { ?>
-

+

    - +
  • - - (%) - 1): ?> - - + - (%) + 1) { ?> + +
  • - +
@@ -117,38 +117,38 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- 0): ?> + 0) { ?>
    - +
  • - - (%) - + - (%) +
  • - +
- + - 0): ?> -

:

- + 0) { ?> +

:

+ -

:

+

:

@@ -159,31 +159,31 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- +
@@ -216,7 +216,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } else { @@ -237,7 +237,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index 0be4f4d2f..54558f3c1 100755 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -152,7 +152,7 @@ foreach ($righe as $riga) { if ($riga->isArticolo()) { echo Modules::link('Articoli', $riga->idarticolo, $riga->codice.' - '.$riga->descrizione); } else { - echo nl2br($riga->descrizione); + echo nl2br((string) $riga->descrizione); } if ($riga->isArticolo() && !empty($riga->articolo->deleted_at)) { @@ -186,9 +186,9 @@ foreach ($righe as $riga) { } if (!empty($riga->note)) { - if (strlen($riga->note) > 50) { - $prima_parte = substr($riga->note, 0, (strpos($riga->note, ' ', 50) < 60) && (!str_starts_with($riga->note, ' ')) ? strpos($riga->note, ' ', 50) : 50); - $seconda_parte = substr($riga->note, (strpos($riga->note, ' ', 50) < 60) && (!str_starts_with($riga->note, ' ')) ? strpos($riga->note, ' ', 50) : 50); + if (strlen((string) $riga->note) > 50) { + $prima_parte = substr((string) $riga->note, 0, (strpos((string) $riga->note, ' ', 50) < 60) && (!str_starts_with((string) $riga->note, ' ')) ? strpos((string) $riga->note, ' ', 50) : 50); + $seconda_parte = substr((string) $riga->note, (strpos((string) $riga->note, ' ', 50) < 60) && (!str_starts_with((string) $riga->note, ' ')) ? strpos((string) $riga->note, ' ', 50) : 50); $stringa_modificata = ''.$prima_parte.' '.$seconda_parte.'...'; } else { diff --git a/modules/fatture/src/Gestori/Movimenti.php b/modules/fatture/src/Gestori/Movimenti.php index f91a6381a..7d36f8a4e 100644 --- a/modules/fatture/src/Gestori/Movimenti.php +++ b/modules/fatture/src/Gestori/Movimenti.php @@ -170,7 +170,7 @@ class Movimenti } } // Caso 2: Fattura senza split payment - IVA normale (acquisti o vendite) - else if (empty($split_payment)) { + elseif (empty($split_payment)) { $id_conto = $is_acquisto ? setting('Conto per Iva su acquisti') : setting('Conto per Iva su vendite'); $movimenti[] = [ 'id_conto' => $id_conto, diff --git a/modules/gestione_task/edit.php b/modules/gestione_task/edit.php index 770cb6c6a..a53c0f2be 100644 --- a/modules/gestione_task/edit.php +++ b/modules/gestione_task/edit.php @@ -33,7 +33,7 @@ if (!empty($record['last_executed_at'])) { $status_class = 'success'; $status_text = tr('Eseguito recentemente'); $status_icon = 'fa-check-circle'; - } else if ($diff->days < 7) { + } elseif ($diff->days < 7) { $status_class = 'info'; $status_text = tr('Eseguito da %d giorni', [$diff->days]); $status_icon = 'fa-clock-o'; diff --git a/modules/impianti/ajax/select.php b/modules/impianti/ajax/select.php index b62ed7183..c3869ffb4 100755 --- a/modules/impianti/ajax/select.php +++ b/modules/impianti/ajax/select.php @@ -54,7 +54,7 @@ switch ($resource) { $where[] = 'my_impianti.idanagrafica='.prepare($superselect['idanagrafica']); } - if (isset($superselect['idsede_destinazione']) && $superselect['idsede_destinazione'] != "") { + if (isset($superselect['idsede_destinazione']) && $superselect['idsede_destinazione'] != '') { $where[] = 'my_impianti.idsede='.prepare($superselect['idsede_destinazione'] ?: 0); } diff --git a/modules/impianti/bulk.php b/modules/impianti/bulk.php index 2aa88ef83..a476ac02a 100644 --- a/modules/impianti/bulk.php +++ b/modules/impianti/bulk.php @@ -38,7 +38,7 @@ switch (post('op')) { break; - // Rimuovo impianto e scollego tutti i suoi componenti + // Rimuovo impianto e scollego tutti i suoi componenti case 'delete_bulk': $n_impianti = 0; @@ -105,6 +105,4 @@ $operations['export_csv'] = [ ], ]; - - return $operations; diff --git a/modules/impianti/edit.php b/modules/impianti/edit.php index 3d776d55e..752567d97 100644 --- a/modules/impianti/edit.php +++ b/modules/impianti/edit.php @@ -170,7 +170,7 @@ if (!empty($elementi)) { '_DOC_' => $elemento['tipo_documento'], '_NUM_' => $elemento['numero'], '_DATE_' => Translator::dateToLocale($elemento['data']), - '_STATO_' => (!empty($elemento['stato_documento']) ? "(".$elemento['stato_documento'].")" : ''), + '_STATO_' => (!empty($elemento['stato_documento']) ? '('.$elemento['stato_documento'].')' : ''), ]); if ($elemento['tipo_documento'] == 'Attività') { diff --git a/modules/impianti/src/Impianto.php b/modules/impianti/src/Impianto.php index 406935ee5..15c0b95b1 100644 --- a/modules/impianti/src/Impianto.php +++ b/modules/impianti/src/Impianto.php @@ -37,7 +37,7 @@ class Impianto extends Model return $this->belongsTo(Anagrafica::class, 'idanagrafica'); } - public static function build($matricola = null, $nome = null, ?\Modules\Articoli\Categoria $categoria = null, $anagrafica = null) + public static function build($matricola = null, $nome = null, ?Categoria $categoria = null, $anagrafica = null) { $model = new static(); $model->is_impianto = 1; @@ -53,6 +53,6 @@ class Impianto extends Model public function categoria() { - return $this->belongsTo(\Modules\Articoli\Categoria::class, 'id_categoria'); + return $this->belongsTo(Categoria::class, 'id_categoria'); } } diff --git a/modules/impianti/src/Import/CSV.php b/modules/impianti/src/Import/CSV.php index 232487365..b8a506027 100644 --- a/modules/impianti/src/Import/CSV.php +++ b/modules/impianti/src/Import/CSV.php @@ -110,9 +110,10 @@ class CSV extends CSVImporter /** * Importa un record nel database. * - * @param array $record Record da importare - * @param bool $update_record Se true, aggiorna i record esistenti - * @param bool $add_record Se true, aggiunge nuovi record + * @param array $record Record da importare + * @param bool $update_record Se true, aggiorna i record esistenti + * @param bool $add_record Se true, aggiunge nuovi record + * * @return bool|null True se l'importazione è riuscita, false altrimenti, null se l'operazione è stata saltata */ public function import($record, $update_record = true, $add_record = true) @@ -179,15 +180,34 @@ class CSV extends CSVImporter return true; } catch (\Exception $e) { // Registra l'errore in un log - error_log('Errore durante l\'importazione dell\'impianto: ' . $e->getMessage()); + error_log('Errore durante l\'importazione dell\'impianto: '.$e->getMessage()); + return false; } } + /** + * Restituisce un esempio di file CSV per l'importazione. + * + * @return array + */ + public static function getExample() + { + return [ + ['Matricola', 'Immagine', 'Import immagine', 'Nome', 'Partita IVA Cliente', 'Codice Fiscale Cliente', 'Categoria', 'Sottocategoria', 'Sede', 'Descrizione', 'Data installazione', 'Marca', 'Modello'], + ['00001', 'https://openstamanager.com/moduli/budget/budget.webp', '2', 'Lavatrice Samsung', '12345678901', '', 'Elettrodomestici', 'Lavatrici', 'Sede Principale', 'Lavatrice a carica frontale 8kg', '2023-01-01', 'Samsung', 'WW80TA046AX'], + ['00002', 'https://openstamanager.com/moduli/3cx/3cx.webp', '2', 'Caldaia Ariston', '', 'RSSMRA80A01H501U', 'Riscaldamento', 'Caldaie', 'Sede Secondaria', 'Caldaia a condensazione 24kW', '2023-03-06', 'Ariston', 'Genus One Net'], + ['00003', 'https://openstamanager.com/moduli/disponibilita-tecnici/tecnici.webp', '2', 'Forno Electrolux', '98765432109', '', 'Elettrodomestici', 'Forni', 'Sede Principale', 'Forno elettrico multifunzione', '2023-04-01', 'Electrolux', 'EOC6P77WX'], + ['00004', 'https://openstamanager.com/moduli/distinta-base/distinta.webp', '2', 'Lavastoviglie Bosch', '12345678901', '', 'Elettrodomestici', 'Lavastoviglie', 'Sede Principale', 'Lavastoviglie da incasso 60cm', '2023-08-06', 'Bosch', 'SMV4HCX48E'], + ['00005', '', '', 'Condizionatore Daikin', '', 'VRDLGI75M15F205Z', 'Climatizzazione', 'Split', 'Sede Principale', 'Condizionatore inverter 12000 BTU', '2023-05-15', 'Daikin', 'FTXM35R'], + ]; + } + /** * Trova l'anagrafica cliente in base alla partita IVA o al codice fiscale. * * @param array $record Record da importare + * * @return Anagrafica|null */ protected function trovaAnagrafica($record) @@ -208,8 +228,9 @@ class CSV extends CSVImporter /** * Trova l'impianto esistente in base alla chiave primaria. * - * @param array $record Record da importare + * @param array $record Record da importare * @param string $primary_key Chiave primaria + * * @return Impianto|null */ protected function trovaImpianto($record, $primary_key) @@ -225,6 +246,7 @@ class CSV extends CSVImporter * Processa la categoria dell'impianto. * * @param array $record Record da importare + * * @return Categoria|null */ protected function processaCategoria($record) @@ -247,8 +269,9 @@ class CSV extends CSVImporter /** * Processa la sottocategoria dell'impianto. * - * @param array $record Record da importare + * @param array $record Record da importare * @param Categoria|null $categoria Categoria padre + * * @return Categoria|null */ protected function processaSottocategoria($record, $categoria) @@ -272,8 +295,9 @@ class CSV extends CSVImporter /** * Processa la marca dell'impianto. * - * @param array $record Record da importare + * @param array $record Record da importare * @param object $database Connessione al database + * * @return int|null */ protected function processaMarca($record, $database) @@ -297,10 +321,10 @@ class CSV extends CSVImporter /** * Aggiorna i campi dell'impianto. * - * @param Impianto $impianto Impianto da aggiornare - * @param array $record Record da importare + * @param Impianto $impianto Impianto da aggiornare + * @param array $record Record da importare * @param Anagrafica $anagrafica Anagrafica cliente - * @param int|null $id_marca ID della marca + * @param int|null $id_marca ID della marca */ protected function aggiornaImpianto($impianto, $record, $anagrafica, $id_marca) { @@ -324,8 +348,8 @@ class CSV extends CSVImporter /** * Collega la sede all'impianto. * - * @param Impianto $impianto Impianto da aggiornare - * @param array $record Record da importare + * @param Impianto $impianto Impianto da aggiornare + * @param array $record Record da importare * @param Anagrafica $anagrafica Anagrafica cliente */ protected function collegaSede($impianto, $record, $anagrafica) @@ -347,9 +371,9 @@ class CSV extends CSVImporter * Processa l'immagine dell'impianto. * * @param Impianto $impianto Impianto da aggiornare - * @param string $url URL dell'immagine - * @param array $record Record da importare - * @param object $database Connessione al database + * @param string $url URL dell'immagine + * @param array $record Record da importare + * @param object $database Connessione al database */ protected function processaImmagine($impianto, $url, $record, $database) { @@ -398,24 +422,7 @@ class CSV extends CSVImporter } } catch (\Exception $e) { // Registra l'errore ma continua con l'importazione - error_log('Errore durante l\'importazione dell\'immagine: ' . $e->getMessage()); + error_log('Errore durante l\'importazione dell\'immagine: '.$e->getMessage()); } } - - /** - * Restituisce un esempio di file CSV per l'importazione. - * - * @return array - */ - public static function getExample() - { - return [ - ['Matricola', 'Immagine', 'Import immagine', 'Nome', 'Partita IVA Cliente', 'Codice Fiscale Cliente', 'Categoria', 'Sottocategoria', 'Sede', 'Descrizione', 'Data installazione', 'Marca', 'Modello'], - ['00001', 'https://openstamanager.com/moduli/budget/budget.webp', '2', 'Lavatrice Samsung', '12345678901', '', 'Elettrodomestici', 'Lavatrici', 'Sede Principale', 'Lavatrice a carica frontale 8kg', '2023-01-01', 'Samsung', 'WW80TA046AX'], - ['00002', 'https://openstamanager.com/moduli/3cx/3cx.webp', '2', 'Caldaia Ariston', '', 'RSSMRA80A01H501U', 'Riscaldamento', 'Caldaie', 'Sede Secondaria', 'Caldaia a condensazione 24kW', '2023-03-06', 'Ariston', 'Genus One Net'], - ['00003', 'https://openstamanager.com/moduli/disponibilita-tecnici/tecnici.webp', '2', 'Forno Electrolux', '98765432109', '', 'Elettrodomestici', 'Forni', 'Sede Principale', 'Forno elettrico multifunzione', '2023-04-01', 'Electrolux', 'EOC6P77WX'], - ['00004', 'https://openstamanager.com/moduli/distinta-base/distinta.webp', '2', 'Lavastoviglie Bosch', '12345678901', '', 'Elettrodomestici', 'Lavastoviglie', 'Sede Principale', 'Lavastoviglie da incasso 60cm', '2023-08-06', 'Bosch', 'SMV4HCX48E'], - ['00005', '', '', 'Condizionatore Daikin', '', 'VRDLGI75M15F205Z', 'Climatizzazione', 'Split', 'Sede Principale', 'Condizionatore inverter 12000 BTU', '2023-05-15', 'Daikin', 'FTXM35R'], - ]; - } } diff --git a/modules/import/actions.php b/modules/import/actions.php index 96d843c6f..87290e7e4 100755 --- a/modules/import/actions.php +++ b/modules/import/actions.php @@ -63,9 +63,9 @@ switch (filter('op')) { VALUES ("example-'.strtolower((string) $import->getTranslation('title')).'", "example-'.strtolower((string) $import->getTranslation('title')).'.csv", '.$id_module.', NULL, '.$id_import.', '.filesize($filepath).', 1, "'.basename($filepath).'", '.Auth::user()->id.', NOW())'); echo base_path().'/'.$file; - } catch (\Exception $e) { + } catch (Exception $e) { // Log dell'errore - error_log('Errore durante la generazione del file di esempio: ' . $e->getMessage()); + error_log('Errore durante la generazione del file di esempio: '.$e->getMessage()); // Risposta di errore echo json_encode([ @@ -112,7 +112,7 @@ switch (filter('op')) { if (!isset($page) || empty($page)) { if (!$csv->areRequiredFieldsMapped()) { // Verifica se è il caso speciale delle anagrafiche (telefono o partita IVA) - $is_anagrafica_import = strpos(get_class($csv), 'Anagrafiche') !== false; + $is_anagrafica_import = str_contains($csv::class, 'Anagrafiche'); $error_message = $is_anagrafica_import ? tr('Alcuni campi obbligatori non sono stati mappati. La ragione sociale è obbligatoria e almeno uno tra telefono e partita IVA deve essere mappato.') : tr('Alcuni campi obbligatori non sono stati mappati'); diff --git a/modules/import/edit.php b/modules/import/edit.php index 48ef34b6c..f0fe3bede 100755 --- a/modules/import/edit.php +++ b/modules/import/edit.php @@ -69,9 +69,8 @@ if (empty($id_record)) { // Caso speciale per anagrafiche: telefono e partita IVA (almeno uno dei due è obbligatorio) foreach ($fields as $key => $value) { - if (($value['field'] === 'telefono' || $value['field'] === 'piva') && - isset($value['required']) && $value['required'] === false) { - + if (($value['field'] === 'telefono' || $value['field'] === 'piva') + && isset($value['required']) && $value['required'] === false) { // Sposta questi campi tra quelli obbligatori foreach ($campi_opzionali as $index => $campo) { if ($campo['id'] === $key + 1) { @@ -86,9 +85,7 @@ if (empty($id_record)) { } // Ordina i campi opzionali in ordine alfabetico - usort($campi_opzionali, function($a, $b) { - return strcmp($a['text'], $b['text']); - }); + usort($campi_opzionali, fn ($a, $b) => strcmp((string) $a['text'], (string) $b['text'])); // Unisci i campi, prima gli obbligatori e poi gli opzionali ordinati alfabeticamente $campi_disponibili = array_merge($campi_obbligatori, array_values($campi_opzionali)); @@ -102,41 +99,40 @@ if (empty($id_record)) { '.tr('Informazioni importanti:').'
'.tr('I campi con * sono obbligatori e devono essere mappati nel file CSV.').'
'; - if ($import_selezionato === 'Modules\Anagrafiche\Import\CSV') { - echo '
'.tr('Requisiti:').' '.tr('Mappare almeno uno tra Telefono e Partita IVA.').'
+ if ($import_selezionato === Modules\Anagrafiche\Import\CSV::class) { + echo '
'.tr('Requisiti:').' '.tr('Mappare almeno uno tra Telefono e Partita IVA.').'
'.tr('Automatismi:').' '.tr('I campi Tipo anagrafica e Settore merceologico vengono generati automaticamente se mappati.').'
'; - } + } - if ($import_selezionato === 'Modules\Articoli\Import\CSV') { - echo '
'.tr('Formato numeri:').' '.tr('Gli importi inseriti devono avere come separatore il punto e presentare due decimali.').'
+ if ($import_selezionato === Modules\Articoli\Import\CSV::class) { + echo '
'.tr('Formato numeri:').' '.tr('Gli importi inseriti devono avere come separatore il punto e presentare due decimali.').'
'.tr('Associazione anagrafiche:').' '.tr('L\'importazione dell\'anagrafica collegata all\'articolo avviene utilizzando come chiave primaria la Partita IVA, e in seguito la ragione sociale se non viene trovata corrispondenza. È opportuno pertanto indicare nel file CSV di importazione la partita IVA dell\'anagrafica per associare correttamente l\'anagrafica cliente/fornitore del listino.').'
'; - } + } - if ($import_selezionato === 'Modules\Interventi\Import\CSV') { - echo '
+ if ($import_selezionato === Modules\Interventi\Import\CSV::class) { + echo '
'.tr('Anagrafiche:').' '.tr('La ricerca dell\'anagrafica da collegare all\'attività avviene sulla base della partita IVA o del codice fiscale mappato. Per procedere all\'importazione dell\'attività è pertanto necessario che almeno uno dei due valori siano censiti in anagrafica.').'
'.tr('Impianti:').' '.tr('Per procedere all\'importazione di attività collegate ad impianti è necessario che la matricola indicata sia già censita in impianti. Procedere quindi prima all\'importazione degli impianti e successivamente delle attività.').'
'.tr('Automatismi:').' '.tr('È presente in fase di importazione un automatismo che genera automaticamente i valori dei seguenti campi se mappati: la sessione del tecnico se mappato l\'orario di inizio attività, lo stato attività se non è già presente a gestionale.').'
'; - } + } - if ($import_selezionato === 'Modules\Impianti\Import\CSV') { - echo '
+ if ($import_selezionato === Modules\Impianti\Import\CSV::class) { + echo '
'.tr('Anagrafiche:').' '.tr('La ricerca dell\'anagrafica da collegare all\'impianto avviene sulla base della partita IVA o del codice fiscale mappato. Per procedere all\'importazione dell\'impianto è pertanto necessario che almeno uno dei due valori siano censiti in anagrafica.').'
'.tr('Requisiti:').' '.tr('I campi Matricola e Nome sono obbligatori. Inoltre, è necessario mappare almeno uno tra Partita IVA cliente e Codice Fiscale cliente.').'
'.tr('Automatismi:').' '.tr('Le categorie e sottocategorie vengono create automaticamente se non esistenti. Le marche vengono create automaticamente se non esistenti.').'
'; - } + } - if ($import_selezionato === 'Modules\ListiniCliente\Import\CSV') { - echo '
+ if ($import_selezionato === Modules\ListiniCliente\Import\CSV::class) { + echo '
'.tr('Requisiti:').' '.tr('I campi Nome listino, Codice articolo e Prezzo unitario sono obbligatori.').'
'.tr('Automatismi:').' '.tr('Se il listino o l\'articolo non esistono, l\'importazione verrà saltata.').'
'; - } - + } - echo '
+ echo '
'.tr('ATTENZIONE:').'
'.tr('Per record esistenti, tutti i campi mappati sovrascriveranno i dati attuali, anche se vuoti nel CSV. Non mappare le colonne che non si desidera modificare.').'
'; diff --git a/modules/impostazioni/actions.php b/modules/impostazioni/actions.php index 5d0a9a743..0fab6503f 100755 --- a/modules/impostazioni/actions.php +++ b/modules/impostazioni/actions.php @@ -66,7 +66,7 @@ switch (filter('op')) { } $results[$setting->sezione][] = [ 'id' => $setting->id, - 'nome' => $setting->nome + 'nome' => $setting->nome, ]; } diff --git a/modules/impostazioni/edit.php b/modules/impostazioni/edit.php index 4c0835919..cf029f930 100755 --- a/modules/impostazioni/edit.php +++ b/modules/impostazioni/edit.php @@ -69,8 +69,8 @@ foreach ($gruppi as $key => $gruppo) {
'.tr('_SEZIONE_', [ - '_SEZIONE_' => $gruppo->nome, - ]).' + '_SEZIONE_' => $gruppo->nome, + ]).'
'.$gruppo->numero.'
diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index a50da0d47..02971a44e 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -41,8 +41,6 @@ use Modules\TipiIntervento\Tipo as TipoSessione; use Plugins\ComponentiImpianti\Componente; use Plugins\ListinoClienti\DettaglioPrezzo; use Plugins\PianificazioneInterventi\Promemoria; -use Intervention\Image\ImageManager; -use Intervention\Image\Drivers\Imagick\Driver; $id_modulo_impianti = Module::where('name', 'Impianti')->first()->id; $plugin_impianti = Plugin::where('name', 'Impianti')->first()->id; @@ -405,13 +403,13 @@ switch (post('op')) { foreach ($sessioni as $sessione) { // Se è la prima sessione che copio importo la data con quella della richiesta if ($numero_sessione == 0) { - $orario_inizio = date('Y-m-d', strtotime((string) $data_ricorrenza)).' '.date('H:i:s', strtotime($sessione->orario_inizio)); + $orario_inizio = date('Y-m-d', strtotime((string) $data_ricorrenza)).' '.date('H:i:s', strtotime((string) $sessione->orario_inizio)); } else { - $diff = strtotime($sessione->orario_inizio) - strtotime((string) $inizio_old); - $orario_inizio = date('Y-m-d H:i:s', strtotime($new_sessione->orario_inizio) + $diff); + $diff = strtotime((string) $sessione->orario_inizio) - strtotime((string) $inizio_old); + $orario_inizio = date('Y-m-d H:i:s', strtotime((string) $new_sessione->orario_inizio) + $diff); } - $diff_fine = strtotime($sessione->orario_fine) - strtotime($sessione->orario_inizio); + $diff_fine = strtotime((string) $sessione->orario_fine) - strtotime((string) $sessione->orario_inizio); $orario_fine = date('Y-m-d H:i:s', strtotime($orario_inizio) + $diff_fine); $new_sessione = $sessione->replicate(); @@ -753,8 +751,8 @@ switch (post('op')) { }); if (setting('Sistema di firma') == 'Tavoletta Wacom') { - $img->brightness((float)setting('Luminosità firma Wacom')); - $img->contrast((float)setting('Contrasto firma Wacom')); + $img->brightness((float) setting('Luminosità firma Wacom')); + $img->contrast((float) setting('Contrasto firma Wacom')); } if (!$img->save(base_dir().'/files/interventi/'.$firma_file)) { @@ -1110,13 +1108,13 @@ switch (post('op')) { foreach ($sessioni as $sessione) { // Se è la prima sessione che copio importo la data con quella della richiesta if ($numero_sessione == 0) { - $orario_inizio = date('Y-m-d', strtotime($data_richiesta)).' '.date('H:i:s', strtotime($sessione->orario_inizio)); + $orario_inizio = date('Y-m-d', strtotime($data_richiesta)).' '.date('H:i:s', strtotime((string) $sessione->orario_inizio)); } else { - $diff = strtotime($sessione->orario_inizio) - strtotime((string) $inizio_old); - $orario_inizio = date('Y-m-d H:i:s', strtotime($new_sessione->orario_inizio) + $diff); + $diff = strtotime((string) $sessione->orario_inizio) - strtotime((string) $inizio_old); + $orario_inizio = date('Y-m-d H:i:s', strtotime((string) $new_sessione->orario_inizio) + $diff); } - $diff_fine = strtotime($sessione->orario_fine) - strtotime($sessione->orario_inizio); + $diff_fine = strtotime((string) $sessione->orario_fine) - strtotime((string) $sessione->orario_inizio); $orario_fine = date('Y-m-d H:i:s', strtotime($orario_inizio) + $diff_fine); $new_sessione = $sessione->replicate(); diff --git a/modules/interventi/add.php b/modules/interventi/add.php index f2ac308f9..028977c30 100755 --- a/modules/interventi/add.php +++ b/modules/interventi/add.php @@ -66,7 +66,6 @@ $anagrafica = $dbo->fetchOne('SELECT idtipointervento_default, idzona FROM an_an $id_tipo = $anagrafica['idtipointervento_default']; $id_zona = $anagrafica['idzona']; - // Trasformazione di un Promemoria dei Contratti in Intervento if (!empty($id_contratto) && !empty($id_promemoria_contratto)) { $contratto = $dbo->fetchOne('SELECT *, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica = co_contratti.idanagrafica) AS idzona FROM co_contratti WHERE id = '.prepare($id_contratto)); diff --git a/modules/interventi/ajax_costi.php b/modules/interventi/ajax_costi.php index 64589d7a3..1815f5ac6 100755 --- a/modules/interventi/ajax_costi.php +++ b/modules/interventi/ajax_costi.php @@ -80,14 +80,14 @@ if ($show_prezzi) { '; - // Calcoli - $imponibile = abs($intervento->imponibile); - $sconto = -$intervento->sconto; - $totale_imponibile = abs($intervento->totale_imponibile); - $iva = abs($intervento->iva); - $totale = abs($intervento->totale); + // Calcoli + $imponibile = abs($intervento->imponibile); + $sconto = -$intervento->sconto; + $totale_imponibile = abs($intervento->totale_imponibile); + $iva = abs($intervento->iva); + $totale = abs($intervento->totale); - echo ' + echo ' '.tr('Imponibile', [], ['upper' => true]).': @@ -97,9 +97,9 @@ if ($show_prezzi) { '; - // Totale sconto - if (!empty($sconto)) { - echo ' + // Totale sconto + if (!empty($sconto)) { + echo ' '.tr('Sconto/maggiorazione', [], ['upper' => true]).': @@ -109,8 +109,8 @@ if ($show_prezzi) { '; - // Totale imponibile - echo ' + // Totale imponibile + echo ' '.tr('Totale imponibile', [], ['upper' => true]).': @@ -119,10 +119,10 @@ if ($show_prezzi) { '.moneyFormat($totale_imponibile, 2).' '; - } + } - // Totale iva - echo ' + // Totale iva + echo ' '.tr('IVA', [], ['upper' => true]).': @@ -132,8 +132,8 @@ if ($show_prezzi) { '; - // Totale attività - echo ' + // Totale attività + echo ' '.tr('Totale documento', [], ['upper' => true]).': @@ -143,7 +143,7 @@ if ($show_prezzi) { '; - echo ' + echo '
'; } diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php index 760d6bc03..76f4b497f 100755 --- a/modules/interventi/bulk.php +++ b/modules/interventi/bulk.php @@ -265,13 +265,13 @@ switch (post('op')) { foreach ($sessioni as $sessione) { // Se è la prima sessione che copio importo la data con quella della richiesta if ($numero_sessione == 0) { - $orario_inizio = date('Y-m-d', strtotime($data_richiesta)).' '.date('H:i:s', strtotime($sessione->orario_inizio)); + $orario_inizio = date('Y-m-d', strtotime($data_richiesta)).' '.date('H:i:s', strtotime((string) $sessione->orario_inizio)); } else { - $diff = strtotime($sessione->orario_inizio) - strtotime((string) $inizio_old); - $orario_inizio = date('Y-m-d H:i:s', strtotime($new_sessione->orario_inizio) + $diff); + $diff = strtotime((string) $sessione->orario_inizio) - strtotime((string) $inizio_old); + $orario_inizio = date('Y-m-d H:i:s', strtotime((string) $new_sessione->orario_inizio) + $diff); } - $diff_fine = strtotime($sessione->orario_fine) - strtotime($sessione->orario_inizio); + $diff_fine = strtotime((string) $sessione->orario_fine) - strtotime((string) $sessione->orario_inizio); $orario_fine = date('Y-m-d H:i:s', strtotime($orario_inizio) + $diff_fine); $new_sessione = $sessione->replicate(); @@ -531,6 +531,4 @@ $operations['print_summary'] = [ ], ]; - - return $operations; diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php index d0270ea65..183ec3275 100755 --- a/modules/interventi/edit.php +++ b/modules/interventi/edit.php @@ -779,7 +779,7 @@ if (!empty($elementi)) { '_DOC_' => $fattura['tipo_documento'], '_NUM_' => !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'], '_DATE_' => Translator::dateToLocale($fattura['data']), - '_STATO_' => (!empty($elemento['stato_documento']) ? "(".$elemento['stato_documento'].")" : ''), + '_STATO_' => (!empty($elemento['stato_documento']) ? '('.$elemento['stato_documento'].')' : ''), ]); $modulo = ($fattura['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; diff --git a/modules/interventi/header.php b/modules/interventi/header.php index 78ce62bef..29bfa50f4 100644 --- a/modules/interventi/header.php +++ b/modules/interventi/header.php @@ -196,7 +196,7 @@ echo '
- + '.(count($interventi_programmati) == 0 ? tr('Non sono presenti altre attività programmate') : tr('Attività aperte')).'
'; if (count($interventi_programmati) != 0) { diff --git a/modules/interventi/modals/modifica_iva.php b/modules/interventi/modals/modifica_iva.php index 5b1cc1c00..9cfab0808 100644 --- a/modules/interventi/modals/modifica_iva.php +++ b/modules/interventi/modals/modifica_iva.php @@ -38,7 +38,7 @@ if (!empty($riga_id)) { // Caso singola riga $riga = Riga::find($riga_id) ?: Articolo::find($riga_id); $riga = $riga ?: Sconto::find($riga_id); - $righe_totali++; + ++$righe_totali; if (!empty($riga) && !empty($riga->idiva) && !empty($riga->aliquota)) { $aliquote_iva[$riga->idiva] = [ @@ -46,19 +46,19 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 1 + 'count' => 1, ]; } else { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } elseif (!empty($righe_ids)) { // Caso multiple righe - $righe_array = explode(',', $righe_ids); + $righe_array = explode(',', (string) $righe_ids); $righe_totali = count($righe_array); foreach ($righe_array as $id_riga) { @@ -72,16 +72,16 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 0 + 'count' => 0, ]; } - $aliquote_iva[$riga->idiva]['count']++; + ++$aliquote_iva[$riga->idiva]['count']; } elseif (!empty($riga)) { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } @@ -92,20 +92,20 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty( ?> - 0): ?> + 0) { ?>
-

+

    - +
  • - - (%) - 1): ?> - - + - (%) + 1) { ?> + +
  • - +
@@ -117,38 +117,38 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- 0): ?> + 0) { ?>
    - +
  • - - (%) - + - (%) +
  • - +
- + - 0): ?> -

:

- + 0) { ?> +

:

+ -

:

+

:

@@ -159,31 +159,31 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- +
@@ -216,7 +216,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } else { @@ -237,7 +237,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php index 7973e2473..4828ddf4e 100755 --- a/modules/interventi/modutil.php +++ b/modules/interventi/modutil.php @@ -243,7 +243,7 @@ if (!function_exists('aggiungi_sessioni_in_fattura')) { $riga = Riga::build($fattura); foreach ($gruppo as $sessione) { - $dateValue = date('d/m/Y', strtotime($sessione->orario_fine)); + $dateValue = date('d/m/Y', strtotime((string) $sessione->orario_fine)); if (!in_array($dateValue, $date)) { $date[] = $dateValue; } @@ -293,7 +293,7 @@ if (!function_exists('aggiungi_sessioni_in_fattura')) { $riga = Riga::build($fattura); foreach ($gruppo as $sessione) { - $dateValue = date('d/m/Y', strtotime($sessione->orario_fine)); + $dateValue = date('d/m/Y', strtotime((string) $sessione->orario_fine)); if (!in_array($dateValue, $date)) { $date[] = $dateValue; } @@ -334,7 +334,7 @@ if (!function_exists('aggiungi_sessioni_in_fattura')) { } foreach ($gruppo as $sessione) { - $dateValue = date('d/m/Y', strtotime($sessione->orario_fine)); + $dateValue = date('d/m/Y', strtotime((string) $sessione->orario_fine)); if (!in_array($dateValue, $date)) { $date[] = $dateValue; } diff --git a/modules/interventi/row-list.php b/modules/interventi/row-list.php index aaee0c6da..414896e00 100755 --- a/modules/interventi/row-list.php +++ b/modules/interventi/row-list.php @@ -106,7 +106,7 @@ foreach ($righe as $riga) { if (!empty($riga->note)) { echo ' -
'.nl2br($riga->note).''; +
'.nl2br((string) $riga->note).''; } echo ' diff --git a/modules/interventi/src/Import/CSV.php b/modules/interventi/src/Import/CSV.php index ec5136509..c7ba821bd 100644 --- a/modules/interventi/src/Import/CSV.php +++ b/modules/interventi/src/Import/CSV.php @@ -127,9 +127,10 @@ class CSV extends CSVImporter /** * Importa un record nel database. * - * @param array $record Record da importare - * @param bool $update_record Se true, aggiorna i record esistenti - * @param bool $add_record Se true, aggiunge nuovi record + * @param array $record Record da importare + * @param bool $update_record Se true, aggiorna i record esistenti + * @param bool $add_record Se true, aggiunge nuovi record + * * @return bool|null True se l'importazione è riuscita, false altrimenti, null se l'operazione è stata saltata */ public function import($record, $update_record = true, $add_record = true) @@ -139,8 +140,8 @@ class CSV extends CSVImporter $primary_key = $this->getPrimaryKey(); // Validazione dei campi obbligatori - if (empty($record['codice']) || empty($record['data']) || empty($record['data_richiesta']) || - empty($record['ora_inizio']) || empty($record['tecnico']) || empty($record['richiesta'])) { + if (empty($record['codice']) || empty($record['data']) || empty($record['data_richiesta']) + || empty($record['ora_inizio']) || empty($record['tecnico']) || empty($record['richiesta'])) { return false; } @@ -205,15 +206,31 @@ class CSV extends CSVImporter return true; } catch (\Exception $e) { // Registra l'errore in un log - error_log('Errore durante l\'importazione dell\'intervento: ' . $e->getMessage()); + error_log('Errore durante l\'importazione dell\'intervento: '.$e->getMessage()); + return false; } } + /** + * Restituisce un esempio di file CSV per l'importazione. + * + * @return array + */ + public static function getExample() + { + return [ + ['Codice', 'Partita IVA Cliente', 'Codice Fiscale Cliente', 'Data', 'Data richiesta', 'Ora inizio', 'Ora fine', 'Tecnico', 'Tipo', 'Note', 'Impianto', 'Richiesta', 'Descrizione', 'Stato'], + ['00001/2024', '123456789', '123456789', '07/11/2024', '03/11/2025', '8:30', '9:30', 'Stefano Bianchi', '', '', '12345-85A22', 'Manutenzione ordinaria', 'eseguito intervento di manutenzione', 'Da programmare'], + ['0002/2024', '123456789', '123456789', '08/11/2024', '04/11/2025', '11:20', '', 'Stefano Bianchi', '', '', '12345-85B23', 'Manutenzione ordinaria', 'eseguito intervento di manutenzione', ''], + ]; + } + /** * Trova l'anagrafica cliente in base alla partita IVA o al codice fiscale. * * @param array $record Record da processare + * * @return Anagrafica|null Anagrafica trovata o null se non trovata */ protected function trovaAnagrafica($record) @@ -235,6 +252,7 @@ class CSV extends CSVImporter * Trova l'impianto in base alla matricola. * * @param string $matricola Matricola dell'impianto + * * @return Impianto|null Impianto trovato o null se non trovato */ protected function trovaImpianto($matricola) @@ -250,6 +268,7 @@ class CSV extends CSVImporter * Trova o crea il tipo di intervento. * * @param array $record Record da processare + * * @return TipoIntervento Tipo di intervento */ protected function trovaTipoIntervento($record) @@ -265,6 +284,7 @@ class CSV extends CSVImporter * Trova o crea lo stato dell'intervento. * * @param array $record Record da processare + * * @return Stato Stato dell'intervento */ protected function trovaStatoIntervento($record) @@ -280,7 +300,8 @@ class CSV extends CSVImporter * Aggiorna i campi dell'intervento. * * @param Intervento $intervento Intervento da aggiornare - * @param array $record Record da processare + * @param array $record Record da processare + * * @return void */ protected function aggiornaIntervento($intervento, $record) @@ -304,7 +325,8 @@ class CSV extends CSVImporter * Collega un impianto all'intervento. * * @param Intervento $intervento Intervento da collegare - * @param Impianto $impianto Impianto da collegare + * @param Impianto $impianto Impianto da collegare + * * @return void */ protected function collegaImpianto($intervento, $impianto) @@ -327,7 +349,8 @@ class CSV extends CSVImporter * Crea una sessione di lavoro per l'intervento. * * @param Intervento $intervento Intervento associato - * @param array $record Record da processare + * @param array $record Record da processare + * * @return Sessione|null Sessione creata o null se non creata */ protected function creaSessione($intervento, $record) @@ -364,22 +387,9 @@ class CSV extends CSVImporter return $sessione; } catch (\Exception $e) { // Registra l'errore ma continua con l'importazione - error_log('Errore durante la creazione della sessione: ' . $e->getMessage()); + error_log('Errore durante la creazione della sessione: '.$e->getMessage()); + return null; } } - - /** - * Restituisce un esempio di file CSV per l'importazione. - * - * @return array - */ - public static function getExample() - { - return [ - ['Codice', 'Partita IVA Cliente', 'Codice Fiscale Cliente', 'Data', 'Data richiesta', 'Ora inizio', 'Ora fine', 'Tecnico', 'Tipo', 'Note', 'Impianto', 'Richiesta', 'Descrizione', 'Stato'], - ['00001/2024', '123456789', '123456789', '07/11/2024', '03/11/2025', '8:30', '9:30', 'Stefano Bianchi', '', '', '12345-85A22', 'Manutenzione ordinaria', 'eseguito intervento di manutenzione', 'Da programmare'], - ['0002/2024', '123456789', '123456789', '08/11/2024', '04/11/2025', '11:20', '', 'Stefano Bianchi', '', '', '12345-85B23', 'Manutenzione ordinaria', 'eseguito intervento di manutenzione', ''], - ]; - } } diff --git a/modules/liste_newsletter/bulk.php b/modules/liste_newsletter/bulk.php index a9a641729..97b859361 100755 --- a/modules/liste_newsletter/bulk.php +++ b/modules/liste_newsletter/bulk.php @@ -29,7 +29,7 @@ switch (post('op')) { $query = $lista->query; if (check_query($query)) { - $lista->query = html_entity_decode($query); + $lista->query = html_entity_decode((string) $query); } $lista->save(); diff --git a/modules/listini_cliente/src/Import/CSV.php b/modules/listini_cliente/src/Import/CSV.php index 312a4a45a..cec3a09bd 100644 --- a/modules/listini_cliente/src/Import/CSV.php +++ b/modules/listini_cliente/src/Import/CSV.php @@ -69,9 +69,10 @@ class CSV extends CSVImporter /** * Importa un record nel database. * - * @param array $record Record da importare - * @param bool $update_record Se true, aggiorna i record esistenti - * @param bool $add_record Se true, aggiunge nuovi record + * @param array $record Record da importare + * @param bool $update_record Se true, aggiorna i record esistenti + * @param bool $add_record Se true, aggiunge nuovi record + * * @return bool|null True se l'importazione è riuscita, false altrimenti, null se l'operazione è stata saltata */ public function import($record, $update_record = true, $add_record = true) @@ -109,81 +110,12 @@ class CSV extends CSVImporter return true; } catch (\Exception $e) { // Registra l'errore in un log - error_log('Errore durante l\'importazione dell\'articolo nel listino: ' . $e->getMessage()); + error_log('Errore durante l\'importazione dell\'articolo nel listino: '.$e->getMessage()); + return false; } } - /** - * Trova il listino in base al nome. - * - * @param array $record Record da importare - * @param object $database Connessione al database - * @return array|null - */ - protected function trovaListino($record, $database) - { - if (empty($record['nome_listino'])) { - return null; - } - - $result = $database->fetchOne('SELECT id FROM mg_listini WHERE nome = '.prepare($record['nome_listino'])); - return !empty($result) ? $result : null; - } - - /** - * Trova l'articolo in base al codice. - * - * @param array $record Record da importare - * @param object $database Connessione al database - * @return array|null - */ - protected function trovaArticolo($record, $database) - { - if (empty($record['codice'])) { - return null; - } - - $result = $database->fetchOne('SELECT `id` FROM `mg_articoli` WHERE `codice` = '.prepare($record['codice'])); - return !empty($result) ? $result : null; - } - - /** - * Trova l'articolo nel listino. - * - * @param int $id_articolo ID dell'articolo - * @param int $id_listino ID del listino - * @return Articolo|null - */ - protected function trovaArticoloListino($id_articolo, $id_listino) - { - return Articolo::where('id_articolo', $id_articolo)->where('id_listino', $id_listino)->first(); - } - - /** - * Salva l'articolo nel listino. - * - * @param Articolo|null $articolo_listino Articolo nel listino esistente - * @param array $articolo_originale Articolo originale - * @param int $id_listino ID del listino - * @param array $record Record da importare - */ - protected function salvaArticoloListino($articolo_listino, $articolo_originale, $id_listino, $record) - { - $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); - $articolo_obj = ArticoloOriginale::find($articolo_originale['id']); - $prezzo_unitario = $prezzi_ivati ? $articolo_obj->prezzo_vendita_ivato : $articolo_obj->prezzo_vendita; - - if (!$articolo_listino) { - $articolo_listino = Articolo::build($articolo_obj, $id_listino); - } - - $articolo_listino->data_scadenza = $record['data_scadenza'] ?: null; - $articolo_listino->setPrezzoUnitario($record['prezzo_unitario'] ?: $prezzo_unitario); - $articolo_listino->sconto_percentuale = $record['sconto_percentuale'] ?: 0; - $articolo_listino->save(); - } - /** * Restituisce un esempio di file CSV per l'importazione. * @@ -198,4 +130,79 @@ class CSV extends CSVImporter ['Listino 1', '9101', '2024-07-31', '100', ''], ]; } + + /** + * Trova il listino in base al nome. + * + * @param array $record Record da importare + * @param object $database Connessione al database + * + * @return array|null + */ + protected function trovaListino($record, $database) + { + if (empty($record['nome_listino'])) { + return null; + } + + $result = $database->fetchOne('SELECT id FROM mg_listini WHERE nome = '.prepare($record['nome_listino'])); + + return !empty($result) ? $result : null; + } + + /** + * Trova l'articolo in base al codice. + * + * @param array $record Record da importare + * @param object $database Connessione al database + * + * @return array|null + */ + protected function trovaArticolo($record, $database) + { + if (empty($record['codice'])) { + return null; + } + + $result = $database->fetchOne('SELECT `id` FROM `mg_articoli` WHERE `codice` = '.prepare($record['codice'])); + + return !empty($result) ? $result : null; + } + + /** + * Trova l'articolo nel listino. + * + * @param int $id_articolo ID dell'articolo + * @param int $id_listino ID del listino + * + * @return Articolo|null + */ + protected function trovaArticoloListino($id_articolo, $id_listino) + { + return Articolo::where('id_articolo', $id_articolo)->where('id_listino', $id_listino)->first(); + } + + /** + * Salva l'articolo nel listino. + * + * @param Articolo|null $articolo_listino Articolo nel listino esistente + * @param array $articolo_originale Articolo originale + * @param int $id_listino ID del listino + * @param array $record Record da importare + */ + protected function salvaArticoloListino($articolo_listino, $articolo_originale, $id_listino, $record) + { + $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); + $articolo_obj = ArticoloOriginale::find($articolo_originale['id']); + $prezzo_unitario = $prezzi_ivati ? $articolo_obj->prezzo_vendita_ivato : $articolo_obj->prezzo_vendita; + + if (!$articolo_listino) { + $articolo_listino = Articolo::build($articolo_obj, $id_listino); + } + + $articolo_listino->data_scadenza = $record['data_scadenza'] ?: null; + $articolo_listino->setPrezzoUnitario($record['prezzo_unitario'] ?: $prezzo_unitario); + $articolo_listino->sconto_percentuale = $record['sconto_percentuale'] ?: 0; + $articolo_listino->save(); + } } diff --git a/modules/mappa/edit.php b/modules/mappa/edit.php index fccb5d41a..7fbe3ebe2 100644 --- a/modules/mappa/edit.php +++ b/modules/mappa/edit.php @@ -93,8 +93,8 @@ include_once __DIR__.'/../../core.php'; fetchArray('SELECT * FROM `in_statiintervento`LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')'); - foreach ($rs_stati as $stato) { - ?> +foreach ($rs_stati as $stato) { + ?>
+} +?>
diff --git a/modules/marche/actions.php b/modules/marche/actions.php index 9860721c7..e7d7fa246 100644 --- a/modules/marche/actions.php +++ b/modules/marche/actions.php @@ -28,9 +28,8 @@ switch (post('op')) { $nome = filter('name'); $link = filter('link'); $id_original = filter('id_original') ?: null; - $is_articolo = filter('is_articolo_add') ?: filter('is_articolo') ?: 0; - $is_impianto = filter('is_impianto_add') ?: filter('is_impianto') ?: 0; - + $is_articolo = (filter('is_articolo_add') ?: filter('is_articolo')) ?: 0; + $is_impianto = (filter('is_impianto_add') ?: filter('is_impianto')) ?: 0; // Verifica che almeno uno dei due flag sia selezionato if ($is_articolo == 0 && $is_impianto == 0) { @@ -60,7 +59,6 @@ switch (post('op')) { $marca->save(); } - // Aggiorna i flag delle sottocategorie se è un parent $modello = Marca::where('parent', '=', $id_record)->get(); if (!empty($modello)) { @@ -129,8 +127,8 @@ switch (post('op')) { $nome = filter('name'); $link = filter('link'); $id_original = filter('id_original') ?: null; - $is_articolo = filter('is_articolo_add') ?: filter('is_articolo') ?: 0; - $is_impianto = filter('is_impianto_add') ?: filter('is_impianto') ?: 0; + $is_articolo = (filter('is_articolo_add') ?: filter('is_articolo')) ?: 0; + $is_impianto = (filter('is_impianto_add') ?: filter('is_impianto')) ?: 0; // Verifica che almeno uno dei due flag sia selezionato if ($is_articolo == 0 && $is_impianto == 0) { diff --git a/modules/marche/add.php b/modules/marche/add.php index c67fcfaa3..2211f724f 100644 --- a/modules/marche/add.php +++ b/modules/marche/add.php @@ -37,10 +37,10 @@ if (!empty($id_record)) { - + - +
diff --git a/modules/marche/ajax/select.php b/modules/marche/ajax/select.php index 86ff94725..c56238d4c 100644 --- a/modules/marche/ajax/select.php +++ b/modules/marche/ajax/select.php @@ -19,10 +19,10 @@ switch ($resource) { break; - /* - * Opzioni utilizzate: - * - id_marca - */ + /* + * Opzioni utilizzate: + * - id_marca + */ case 'modelli': if (isset($superselect['id_marca'])) { $query = 'SELECT `id`, `name` AS descrizione FROM `zz_marche` |where| ORDER BY `name` ASC'; diff --git a/modules/marche/row-list.php b/modules/marche/row-list.php index 83022f129..d55e4321d 100644 --- a/modules/marche/row-list.php +++ b/modules/marche/row-list.php @@ -1,4 +1,5 @@ query; if (check_query($query)) { - $lista->query = html_entity_decode($query); + $lista->query = html_entity_decode((string) $query); } $lista->save(); diff --git a/modules/ordini/bulk.php b/modules/ordini/bulk.php index e494cd8bb..8729b1dc3 100644 --- a/modules/ordini/bulk.php +++ b/modules/ordini/bulk.php @@ -257,5 +257,4 @@ if ($module->name == 'Ordini cliente') { } } - return $operations; diff --git a/modules/ordini/edit.php b/modules/ordini/edit.php index 1e3f4512e..6d0b118fa 100755 --- a/modules/ordini/edit.php +++ b/modules/ordini/edit.php @@ -594,7 +594,7 @@ if (!empty($elementi)) { '_DOC_' => $elemento['tipo_documento'], '_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'], '_DATE_' => Translator::dateToLocale($elemento['data']), - '_STATO_' => (!empty($elemento['stato_documento']) ? "(".$elemento['stato_documento'].")" : ''), + '_STATO_' => (!empty($elemento['stato_documento']) ? '('.$elemento['stato_documento'].')' : ''), ]); echo ' diff --git a/modules/ordini/modals/modifica_iva.php b/modules/ordini/modals/modifica_iva.php index f686f2ad1..c08ad9f22 100644 --- a/modules/ordini/modals/modifica_iva.php +++ b/modules/ordini/modals/modifica_iva.php @@ -38,7 +38,7 @@ if (!empty($riga_id)) { // Caso singola riga $riga = Riga::find($riga_id) ?: Articolo::find($riga_id); $riga = $riga ?: Sconto::find($riga_id); - $righe_totali++; + ++$righe_totali; if (!empty($riga) && !empty($riga->idiva) && !empty($riga->aliquota)) { $aliquote_iva[$riga->idiva] = [ @@ -46,19 +46,19 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 1 + 'count' => 1, ]; } else { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } elseif (!empty($righe_ids)) { // Caso multiple righe - $righe_array = explode(',', $righe_ids); + $righe_array = explode(',', (string) $righe_ids); $righe_totali = count($righe_array); foreach ($righe_array as $id_riga) { @@ -72,16 +72,16 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 0 + 'count' => 0, ]; } - $aliquote_iva[$riga->idiva]['count']++; + ++$aliquote_iva[$riga->idiva]['count']; } elseif (!empty($riga)) { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } @@ -92,20 +92,20 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty( ?> - 0): ?> + 0) { ?>
-

+

    - +
  • - - (%) - 1): ?> - - + - (%) + 1) { ?> + +
  • - +
@@ -117,38 +117,38 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- 0): ?> + 0) { ?>
    - +
  • - - (%) - + - (%) +
  • - +
- + - 0): ?> -

:

- + 0) { ?> +

:

+ -

:

+

:

@@ -159,31 +159,31 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

- {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id) ?>) ORDER BY `title` ASC" ]} - - + {[ "type": "select", "label": "", "name": "iva_id", "required": 1, "values": "query=SELECT `co_iva`.`id`, IF(`deleted_at` IS NOT NULL, CONCAT(`codice`, ' - ', `title`, ' ()'), CONCAT(`codice`, ' - ', `title`)) AS `descrizione` FROM `co_iva` LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = id); ?>) ORDER BY `title` ASC" ]} + +
- +
-

+

- +
@@ -216,7 +216,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } else { @@ -237,7 +237,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php index c9c305afb..a59661176 100755 --- a/modules/ordini/row-list.php +++ b/modules/ordini/row-list.php @@ -128,7 +128,7 @@ foreach ($righe as $riga) { } } } else { - echo nl2br($riga->descrizione); + echo nl2br((string) $riga->descrizione); } if ($riga->isArticolo() && !empty($riga->abilita_serial)) { @@ -151,7 +151,7 @@ foreach ($righe as $riga) { if (!empty($riga->note)) { echo ' -
'.nl2br($riga->note).''; +
'.nl2br((string) $riga->note).''; } echo ' '; diff --git a/modules/partitario/edit_conto.php b/modules/partitario/edit_conto.php index 7229b5d41..45077fcbf 100755 --- a/modules/partitario/edit_conto.php +++ b/modules/partitario/edit_conto.php @@ -40,7 +40,7 @@ $conto_bloccato = [ 'Iva su vendite', 'Iva su acquisti', 'Iva indetraibile', - 'Compensazione per autofattura' + 'Compensazione per autofattura', ]; $conto_bloccato = in_array($info['descrizione'], $conto_bloccato); @@ -71,12 +71,12 @@ if (!$conto_bloccato && $lvl == 3) {
- + {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": , "readonly": 1, "help": "" ]} - + {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": ]} - +
diff --git a/modules/partitario/src/Import/CSV.php b/modules/partitario/src/Import/CSV.php index dd58c4fd6..2d1cd12ee 100755 --- a/modules/partitario/src/Import/CSV.php +++ b/modules/partitario/src/Import/CSV.php @@ -68,9 +68,10 @@ class CSV extends CSVImporter /** * Importa un record nel database. * - * @param array $record Record da importare - * @param bool $update_record Se true, aggiorna i record esistenti - * @param bool $add_record Se true, aggiunge nuovi record + * @param array $record Record da importare + * @param bool $update_record Se true, aggiorna i record esistenti + * @param bool $add_record Se true, aggiunge nuovi record + * * @return bool|null True se l'importazione è riuscita, false altrimenti, null se l'operazione è stata saltata */ public function import($record, $update_record = true, $add_record = true) @@ -110,20 +111,36 @@ class CSV extends CSVImporter return true; } catch (\Exception $e) { // Registra l'errore in un log - error_log('Errore durante l\'importazione del piano dei conti: ' . $e->getMessage()); + error_log('Errore durante l\'importazione del piano dei conti: '.$e->getMessage()); + return false; } } + /** + * Restituisce un esempio di file CSV per l'importazione. + * + * @return array + */ + public static function getExample() + { + return [ + ['Sezione', 'Conto', 'Descrizione', 'Direzione'], + ['Economico', '600.000010', 'Costi merci c/acquisto di rivendita', 'uscita'], + ['Patrimoniale', '110.000010', 'Riepilogativo clienti', ''], + ]; + } + /** * Analizza il numero di conto e lo divide in parti. * * @param array $record Record da importare + * * @return array|null Array con le parti del conto o null se il formato non è valido */ protected function parseNumeroConto($record) { - if (empty($record['numero']) || strpos($record['numero'], '.') === false) { + if (empty($record['numero']) || !str_contains((string) $record['numero'], '.')) { return null; } @@ -141,8 +158,9 @@ class CSV extends CSVImporter /** * Trova il conto di primo livello (sezione) in base alla descrizione. * - * @param array $record Record da importare + * @param array $record Record da importare * @param object $database Connessione al database + * * @return array|null */ protected function trovaConto1($record, $database) @@ -152,6 +170,7 @@ class CSV extends CSVImporter } $result = $database->fetchOne('SELECT id FROM co_pianodeiconti1 WHERE LOWER(descrizione)=LOWER('.prepare($record['idpianodeiconti1']).')'); + return !empty($result) ? $result : null; } @@ -159,7 +178,8 @@ class CSV extends CSVImporter * Trova il conto di secondo livello in base al numero. * * @param string $codice_conto2 Codice del conto di secondo livello - * @param object $database Connessione al database + * @param object $database Connessione al database + * * @return array|null */ protected function trovaConto2($codice_conto2, $database) @@ -169,15 +189,17 @@ class CSV extends CSVImporter } $result = $database->fetchOne('SELECT id FROM co_pianodeiconti2 WHERE numero='.prepare($codice_conto2)); + return !empty($result) ? $result : null; } /** * Trova il conto di terzo livello in base al numero e al conto2. * - * @param string $codice_conto3 Codice del conto di terzo livello - * @param int $idpianodeiconti2 ID del conto di secondo livello - * @param object $database Connessione al database + * @param string $codice_conto3 Codice del conto di terzo livello + * @param int $idpianodeiconti2 ID del conto di secondo livello + * @param object $database Connessione al database + * * @return array|null */ protected function trovaConto3($codice_conto3, $idpianodeiconti2, $database) @@ -187,17 +209,18 @@ class CSV extends CSVImporter } $result = $database->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE numero='.prepare($codice_conto3).' AND idpianodeiconti2='.prepare($idpianodeiconti2)); + return !empty($result) ? $result : null; } /** * Aggiunge un nuovo record al piano dei conti. * - * @param array $conto1 Conto di primo livello - * @param array|null $conto2 Conto di secondo livello - * @param array $parti_conto Parti del numero di conto - * @param array $record Record da importare - * @param object $database Connessione al database + * @param array $conto1 Conto di primo livello + * @param array|null $conto2 Conto di secondo livello + * @param array $parti_conto Parti del numero di conto + * @param array $record Record da importare + * @param object $database Connessione al database */ protected function aggiungiRecord($conto1, $conto2, $parti_conto, $record, $database) { @@ -228,10 +251,10 @@ class CSV extends CSVImporter /** * Aggiorna un record esistente nel piano dei conti. * - * @param array|null $conto2 Conto di secondo livello - * @param array $parti_conto Parti del numero di conto - * @param array $record Record da importare - * @param object $database Connessione al database + * @param array|null $conto2 Conto di secondo livello + * @param array $parti_conto Parti del numero di conto + * @param array $record Record da importare + * @param object $database Connessione al database */ protected function aggiornaRecord($conto2, $parti_conto, $record, $database) { @@ -256,18 +279,4 @@ class CSV extends CSVImporter } } } - - /** - * Restituisce un esempio di file CSV per l'importazione. - * - * @return array - */ - public static function getExample() - { - return [ - ['Sezione', 'Conto', 'Descrizione', 'Direzione'], - ['Economico', '600.000010', 'Costi merci c/acquisto di rivendita', 'uscita'], - ['Patrimoniale', '110.000010', 'Riepilogativo clienti', ''], - ]; - } } diff --git a/modules/preventivi/bulk.php b/modules/preventivi/bulk.php index ef75348c7..d31026a1e 100755 --- a/modules/preventivi/bulk.php +++ b/modules/preventivi/bulk.php @@ -165,7 +165,6 @@ switch (post('op')) { break; } - $operations['change_status'] = [ 'text' => ' '.tr('Cambia stato'), 'data' => [ @@ -190,5 +189,4 @@ $operations['create_invoice'] = [ ], ]; - return $operations; diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php index b2d1bd9ca..7c9ff2408 100755 --- a/modules/preventivi/edit.php +++ b/modules/preventivi/edit.php @@ -484,7 +484,7 @@ if (!empty($elementi)) { '_DOC_' => $elemento['tipo_documento'], '_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'], '_DATE_' => Translator::dateToLocale($elemento['data']), - '_STATO_' => (!empty($elemento['stato_documento']) ? "(".$elemento['stato_documento'].")" : ''), + '_STATO_' => (!empty($elemento['stato_documento']) ? '('.$elemento['stato_documento'].')' : ''), ]); echo ' diff --git a/modules/preventivi/modals/modifica_iva.php b/modules/preventivi/modals/modifica_iva.php index b7ad7f25b..1c71db9bb 100644 --- a/modules/preventivi/modals/modifica_iva.php +++ b/modules/preventivi/modals/modifica_iva.php @@ -38,7 +38,7 @@ if (!empty($riga_id)) { // Caso singola riga $riga = Riga::find($riga_id) ?: Articolo::find($riga_id); $riga = $riga ?: Sconto::find($riga_id); - $righe_totali++; + ++$righe_totali; if (!empty($riga) && !empty($riga->idiva) && !empty($riga->aliquota)) { $aliquote_iva[$riga->idiva] = [ @@ -46,19 +46,19 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 1 + 'count' => 1, ]; } else { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } elseif (!empty($righe_ids)) { // Caso multiple righe - $righe_array = explode(',', $righe_ids); + $righe_array = explode(',', (string) $righe_ids); $righe_totali = count($righe_array); foreach ($righe_array as $id_riga) { @@ -72,16 +72,16 @@ if (!empty($riga_id)) { 'codice' => $riga->aliquota->codice, 'descrizione' => $riga->aliquota->getTranslation('title'), 'percentuale' => $riga->aliquota->percentuale, - 'count' => 0 + 'count' => 0, ]; } - $aliquote_iva[$riga->idiva]['count']++; + ++$aliquote_iva[$riga->idiva]['count']; } elseif (!empty($riga)) { // Riga senza aliquota IVA o con aliquota non valida $righe_senza_iva[] = [ 'id' => $riga->id, 'descrizione' => $riga->descrizione, - 'idiva' => $riga->idiva ?: 'N/D' + 'idiva' => $riga->idiva ?: 'N/D', ]; } } @@ -92,20 +92,20 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty( ?> - 0): ?> + 0) { ?>
-

+

    - +
  • - - (%) - 1): ?> - - + - (%) + 1) { ?> + +
  • - +
@@ -117,38 +117,38 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

{[ "type": "select", "label": "", "name": "iva_id", "required": 1, "ajax-source": "iva" ]} - - + +
- +
-

+

- 0): ?> + 0) { ?>
    - +
  • - - (%) - + - (%) +
  • - +
- + - 0): ?> -

:

- + 0) { ?> +

:

+ -

:

+

:

@@ -159,31 +159,31 @@ $show_form = count($aliquote_iva) > 0 || count($righe_senza_iva) > 0 || (!empty(
-

+

{[ "type": "select", "label": "", "name": "iva_id", "required": 1, "ajax-source": "iva" ]} - - + +
- +
-

+

- +
@@ -216,7 +216,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } else { @@ -237,7 +237,7 @@ function salvaIva() { renderMessages(); }, error: function() { - alert(); + alert(); } }); } diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php index 478b9c98f..9cd05b256 100755 --- a/modules/preventivi/row-list.php +++ b/modules/preventivi/row-list.php @@ -105,7 +105,7 @@ foreach ($righe as $key => $riga) { '; // Descrizione - $descrizione = nl2br($riga->descrizione); + $descrizione = nl2br((string) $riga->descrizione); if ($riga->isArticolo()) { $descrizione = Modules::link('Articoli', $riga->idarticolo, $riga->codice.' - '.$descrizione); } @@ -119,7 +119,7 @@ foreach ($righe as $key => $riga) { if (!empty($riga->note)) { echo ' -
'.nl2br($riga->note).''; +
'.nl2br((string) $riga->note).''; } echo ' diff --git a/modules/preventivi/src/Import/CSV.php b/modules/preventivi/src/Import/CSV.php index 3fd52d4e0..b7a77b457 100644 --- a/modules/preventivi/src/Import/CSV.php +++ b/modules/preventivi/src/Import/CSV.php @@ -99,9 +99,10 @@ class CSV extends CSVImporter /** * Importa un record nel database. * - * @param array $record Record da importare - * @param bool $update_record Se true, aggiorna i record esistenti - * @param bool $add_record Se true, aggiunge nuovi record + * @param array $record Record da importare + * @param bool $update_record Se true, aggiorna i record esistenti + * @param bool $add_record Se true, aggiunge nuovi record + * * @return bool|null True se l'importazione è riuscita, false altrimenti, null se l'operazione è stata saltata */ public function import($record, $update_record = true, $add_record = true) @@ -110,9 +111,9 @@ class CSV extends CSVImporter $database = database(); // Validazione dei campi obbligatori - if (empty($record['numero']) || empty($record['nome']) || empty($record['ragione_sociale']) || - empty($record['data_bozza']) || empty($record['codice']) || empty($record['qta']) || - empty($record['prezzo_unitario'])) { + if (empty($record['numero']) || empty($record['nome']) || empty($record['ragione_sociale']) + || empty($record['data_bozza']) || empty($record['codice']) || empty($record['qta']) + || empty($record['prezzo_unitario'])) { return false; } @@ -138,16 +139,32 @@ class CSV extends CSVImporter return true; } catch (\Exception $e) { // Registra l'errore in un log - error_log('Errore durante l\'importazione del preventivo: ' . $e->getMessage()); + error_log('Errore durante l\'importazione del preventivo: '.$e->getMessage()); + return false; } } + /** + * Restituisce un esempio di file CSV per l'importazione. + * + * @return array + */ + public static function getExample() + { + return [ + ['Numero', 'Nome Preventivo', 'Descrizione Preventivo', 'Cliente', 'Tipo Attività', 'Data', 'Codice Articolo', 'Quantità riga', 'Data prevista evasione riga', 'Prezzo unitario riga'], + ['15', 'Preventivo Materiali', 'Preventivo iniziale', 'Rossi', 'Generico', '27/04/2024', '001', '2', '30/04/2024', '50'], + ['15', 'Preventivo Materiali', 'Preventivo iniziale', 'Rossi', 'Generico', '27/04/2024', '043', '1', '10/05/2024', '100'], + ]; + } + /** * Trova il preventivo esistente in base al numero. * - * @param array $record Record da importare + * @param array $record Record da importare * @param object $database Connessione al database + * * @return Preventivo|null */ protected function trovaPreventivo($record, $database) @@ -157,6 +174,7 @@ class CSV extends CSVImporter } $id_preventivo = $database->fetchOne('SELECT id FROM `co_preventivi` WHERE `numero`='.prepare($record['numero'])); + return !empty($id_preventivo) ? Preventivo::find($id_preventivo['id']) : null; } @@ -164,6 +182,7 @@ class CSV extends CSVImporter * Crea un nuovo preventivo. * * @param array $record Record da importare + * * @return Preventivo|null */ protected function creaPreventivo($record) @@ -187,7 +206,8 @@ class CSV extends CSVImporter return $preventivo; } catch (\Exception $e) { - error_log('Errore durante la creazione del preventivo: ' . $e->getMessage()); + error_log('Errore durante la creazione del preventivo: '.$e->getMessage()); + return null; } } @@ -196,6 +216,7 @@ class CSV extends CSVImporter * Trova o crea l'anagrafica cliente. * * @param array $record Record da importare + * * @return Anagrafica|null */ protected function trovaOCreaAnagrafica($record) @@ -220,6 +241,7 @@ class CSV extends CSVImporter * Trova il tipo di intervento. * * @param array $record Record da importare + * * @return TipoSessione */ protected function trovaTipoIntervento($record) @@ -231,7 +253,8 @@ class CSV extends CSVImporter * Aggiunge un articolo al preventivo. * * @param Preventivo $preventivo Preventivo - * @param array $record Record da importare + * @param array $record Record da importare + * * @return bool */ protected function aggiungiArticoloAlPreventivo($preventivo, $record) @@ -260,9 +283,11 @@ class CSV extends CSVImporter $riga_articolo->qta = $record['qta']; $riga_articolo->save(); + return true; } catch (\Exception $e) { - error_log('Errore durante l\'aggiunta dell\'articolo al preventivo: ' . $e->getMessage()); + error_log('Errore durante l\'aggiunta dell\'articolo al preventivo: '.$e->getMessage()); + return false; } } @@ -271,6 +296,7 @@ class CSV extends CSVImporter * Converte una stringa data in un oggetto Carbon. * * @param string $data_string Stringa data + * * @return Carbon */ protected function parseData($data_string) @@ -284,22 +310,9 @@ class CSV extends CSVImporter } // Fallback alla data corrente - error_log('Errore nel parsing della data: ' . $e->getMessage()); + error_log('Errore nel parsing della data: '.$e->getMessage()); + return Carbon::now(); } } - - /** - * Restituisce un esempio di file CSV per l'importazione. - * - * @return array - */ - public static function getExample() - { - return [ - ['Numero', 'Nome Preventivo', 'Descrizione Preventivo', 'Cliente', 'Tipo Attività', 'Data', 'Codice Articolo', 'Quantità riga', 'Data prevista evasione riga', 'Prezzo unitario riga'], - ['15', 'Preventivo Materiali', 'Preventivo iniziale', 'Rossi', 'Generico', '27/04/2024', '001', '2', '30/04/2024', '50'], - ['15', 'Preventivo Materiali', 'Preventivo iniziale', 'Rossi', 'Generico', '27/04/2024', '043', '1', '10/05/2024', '100'], - ]; - } } diff --git a/modules/preventivi/widgets/preventivi.dashboard.php b/modules/preventivi/widgets/preventivi.dashboard.php index ac3c38174..abbff6aed 100755 --- a/modules/preventivi/widgets/preventivi.dashboard.php +++ b/modules/preventivi/widgets/preventivi.dashboard.php @@ -40,7 +40,7 @@ if (!empty($rs)) { $data_accettazione = ($preventivo->data_accettazione != '0000-00-00') ? Translator::dateToLocale($preventivo->data_accettazione) : ''; $data_conclusione = ($preventivo->data_conclusione != '0000-00-00') ? Translator::dateToLocale($preventivo->data_conclusione) : ''; - if ($data_conclusione != '' && strtotime($preventivo->data_conclusione) < strtotime(date('Y-m-d'))) { + if ($data_conclusione != '' && strtotime((string) $preventivo->data_conclusione) < strtotime(date('Y-m-d'))) { $attr = ' class="danger"'; } else { $attr = ''; diff --git a/modules/preventivi/widgets/preventivi.fatturare.dashboard.php b/modules/preventivi/widgets/preventivi.fatturare.dashboard.php index 8eb72a710..1bedf34dc 100644 --- a/modules/preventivi/widgets/preventivi.fatturare.dashboard.php +++ b/modules/preventivi/widgets/preventivi.fatturare.dashboard.php @@ -43,7 +43,7 @@ if (!empty($rs)) { $data_conclusione = ($preventivo->data_conclusione != '0000-00-00') ? Translator::dateToLocale($preventivo->data_conclusione) : ''; $stato_preventivo = Stato::find($preventivo->idstato)->getTranslation('title'); - if (strtotime($preventivo->data_conclusione) < strtotime(date('Y-m-d')) && $data_conclusione != '') { + if (strtotime((string) $preventivo->data_conclusione) < strtotime(date('Y-m-d')) && $data_conclusione != '') { $attr = ' class="danger"'; } else { $attr = ''; diff --git a/modules/primanota/actions.php b/modules/primanota/actions.php index 294299b7e..fc9287bbf 100755 --- a/modules/primanota/actions.php +++ b/modules/primanota/actions.php @@ -41,7 +41,7 @@ switch (post('op')) { $id_documento = post('id_documento')[$i]; $dare = post('dare')[$i]; $avere = post('avere')[$i]; - + if (empty($dare) && empty($avere)) { continue; } diff --git a/modules/primanota/src/Mastrino.php b/modules/primanota/src/Mastrino.php index 6032d463b..a71a6581d 100755 --- a/modules/primanota/src/Mastrino.php +++ b/modules/primanota/src/Mastrino.php @@ -263,8 +263,8 @@ class Mastrino extends Model $scadenze[$documento] = []; $scadenze_documento = database()->fetchArray('SELECT id FROM co_scadenziario WHERE iddocumento='.prepare($documento)); foreach ($scadenze_documento as $scadenza_row) { - $id_scadenza = $scadenza_row['id']; - $scadenze[$documento][$id_scadenza] = $id_scadenza; + $id_scadenza = $scadenza_row['id']; + $scadenze[$documento][$id_scadenza] = $id_scadenza; } } diff --git a/modules/scadenzario/bulk.php b/modules/scadenzario/bulk.php index 4f70f52e5..dc38ddb44 100755 --- a/modules/scadenzario/bulk.php +++ b/modules/scadenzario/bulk.php @@ -194,7 +194,6 @@ $operations['change-bank'] = [ ], ]; - $operations['change_distinta'] = [ 'text' => ' '.tr('Info distinta'), 'data' => [ @@ -207,7 +206,6 @@ $operations['change_distinta'] = [ ], ]; - $operations['send_reminder'] = [ 'text' => ' '.tr('Invia mail sollecito').'', 'data' => [ diff --git a/modules/segmenti/bulk.php b/modules/segmenti/bulk.php index b18ee7f42..744425148 100644 --- a/modules/segmenti/bulk.php +++ b/modules/segmenti/bulk.php @@ -38,28 +38,28 @@ switch (post('op')) { $records = array_filter((array) $id_records); // Default query for when there are no valid records -$query = "SELECT DISTINCT `zz_groups`.`id`, `title` AS descrizione FROM `zz_groups` +$query = 'SELECT DISTINCT `zz_groups`.`id`, `title` AS descrizione FROM `zz_groups` LEFT JOIN `zz_groups_lang` ON (`zz_groups`.`id` = `zz_groups_lang`.`id_record` - AND `zz_groups_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).") + AND `zz_groups_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `zz_groups`.`id` = 1 - ORDER BY `zz_groups`.`id` ASC"; + ORDER BY `zz_groups`.`id` ASC'; // If we have valid records, use the full query with IN clause if (!empty($records)) { $records_list = implode(',', $records); - $query = "SELECT DISTINCT `zz_groups`.`id`, `title` AS descrizione FROM `zz_groups` + $query = 'SELECT DISTINCT `zz_groups`.`id`, `title` AS descrizione FROM `zz_groups` LEFT JOIN `zz_groups_lang` ON (`zz_groups`.`id` = `zz_groups_lang`.`id_record` - AND `zz_groups_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).") + AND `zz_groups_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).") WHERE `zz_groups`.`id` = 1 OR `zz_groups`.`id` IN ( SELECT DISTINCT `idgruppo` FROM `zz_permissions` WHERE `permessi` IN ('r', 'rw') AND `idmodule` IN ( SELECT DISTINCT `id_module` FROM `zz_segments` - WHERE `id` IN (".$records_list.") + WHERE `id` IN (".$records_list.') ) ) - ORDER BY `zz_groups`.`id` ASC"; + ORDER BY `zz_groups`.`id` ASC'; } $msg = '{[ "type": "select", "multiple":"1", "label": "'.tr('Seleziona i gruppi che avranno accesso ai segmenti selezionati:').'", "values": "query='.$query.'", "name": "gruppi[]" ]}'; diff --git a/modules/stampe/edit.php b/modules/stampe/edit.php index 2b7ca17f0..77252a386 100755 --- a/modules/stampe/edit.php +++ b/modules/stampe/edit.php @@ -120,28 +120,28 @@ echo '
'; - $available_options = json_decode((string) $record['available_options'], true) ?? []; +$available_options = json_decode((string) $record['available_options'], true) ?? []; - // Add the additional options - $additional_options = [ - "font-size" => "Dimensione del font", - "header-font-size" => "Dimensione del font dell'intestazione", - "orientation" => "Orientamento pagina", - "format" => "Formato pagina" - ]; +// Add the additional options +$additional_options = [ + 'font-size' => 'Dimensione del font', + 'header-font-size' => "Dimensione del font dell'intestazione", + 'orientation' => 'Orientamento pagina', + 'format' => 'Formato pagina', +]; - $available_options = array_merge($available_options, $additional_options); +$available_options = array_merge($available_options, $additional_options); - echo ' +echo '

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

    '; - foreach ($available_options as $option => $value) { - echo ' -
  • '.$option.''.((!empty($value)) ? ' '.$value.'' : '').'
  • '; - } - +foreach ($available_options as $option => $value) { echo ' +
  • '.$option.''.((!empty($value)) ? ' '.$value.'' : '').'
  • '; +} + +echo '
'; echo ' diff --git a/modules/stampe_contabili/stampe_contabili.php b/modules/stampe_contabili/stampe_contabili.php index fdbc41a3d..5d22b8075 100644 --- a/modules/stampe_contabili/stampe_contabili.php +++ b/modules/stampe_contabili/stampe_contabili.php @@ -152,11 +152,11 @@ echo '

'.tr('Stampe definitive _NOME_ _DIR_ dal _START_ al _END_', [ - '_NOME_' => $nome_stampa, - '_DIR_' => ($dir ? ($dir == 'entrata' ? 'vendite' : 'acquisti') : ''), - '_START_' => dateFormat($_SESSION['period_start']), - '_END_' => dateFormat($_SESSION['period_end']), - ]).' + '_NOME_' => $nome_stampa, + '_DIR_' => ($dir ? ($dir == 'entrata' ? 'vendite' : 'acquisti') : ''), + '_START_' => dateFormat($_SESSION['period_start']), + '_END_' => dateFormat($_SESSION['period_end']), +]).'

@@ -183,7 +183,7 @@ if (!empty($elementi)) { $file = $dbo->selectOne('zz_files', '*', [ 'id_module' => $id_module, - 'id_record' => $elemento['id'] + 'id_record' => $elemento['id'], ]); echo ' diff --git a/modules/stato_servizi/actions.php b/modules/stato_servizi/actions.php index 564ad2c55..1787c78ee 100755 --- a/modules/stato_servizi/actions.php +++ b/modules/stato_servizi/actions.php @@ -250,7 +250,7 @@ switch (filter('op')) { } // Individuazione dello spostamento da effettuare - $pieces = explode('_', $widget->location); + $pieces = explode('_', (string) $widget->location); $location = $pieces[0].'_'.($pieces[1] == 'right' ? 'top' : 'right'); // Abilitazione del widget indicato diff --git a/modules/tipi_intervento/src/Tipo.php b/modules/tipi_intervento/src/Tipo.php index 6603f70b1..764519f44 100755 --- a/modules/tipi_intervento/src/Tipo.php +++ b/modules/tipi_intervento/src/Tipo.php @@ -23,8 +23,8 @@ namespace Modules\TipiIntervento; use Common\SimpleModelTrait; use Illuminate\Database\Eloquent\Model; use Modules\Anagrafiche\Anagrafica; -use Modules\Preventivi\Preventivo; use Modules\Interventi\Intervento; +use Modules\Preventivi\Preventivo; use Traits\RecordTrait; class Tipo extends Model @@ -89,7 +89,6 @@ class Tipo extends Model $this->fixTecnici(); } - public function preventivi() { return $this->hasMany(Preventivo::class, 'idtipointervento'); diff --git a/modules/utenti/actions.php b/modules/utenti/actions.php index 36b8600aa..17a46e405 100755 --- a/modules/utenti/actions.php +++ b/modules/utenti/actions.php @@ -317,7 +317,7 @@ switch (filter('op')) { $id = filter('id'); $valore = filter('valore', null, 1); - $user_options = json_decode($user->options, true) ?: []; + $user_options = json_decode((string) $user->options, true) ?: []; $user_options['settings'][$id] = $valore; $user->options = json_encode($user_options); diff --git a/modules/utenti/edit.php b/modules/utenti/edit.php index 1443d67f8..29b7bb226 100755 --- a/modules/utenti/edit.php +++ b/modules/utenti/edit.php @@ -21,8 +21,6 @@ include_once __DIR__.'/../../core.php'; use Models\Group; -use Models\Module; -use Models\User; $group = Group::find($id_record); $record = $group->toArray(); @@ -213,8 +211,8 @@ echo '

'.tr('Permessi del gruppo: _GROUP_', [ - '_GROUP_' => ''.$record['nome'].'', - ]).'

'.((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? ' + '_GROUP_' => ''.$record['nome'].'', +]).''.((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? '
'.tr('Reimposta permessi').'
' : '').' diff --git a/modules/utenti/sezione.php b/modules/utenti/sezione.php index 1e8319009..6acafd210 100644 --- a/modules/utenti/sezione.php +++ b/modules/utenti/sezione.php @@ -26,7 +26,7 @@ include_once __DIR__.'/../../core.php'; $sezione = filter('sezione'); $impostazioni = Setting::where('sezione', $sezione)->where('is_user_setting', 1) ->get(); -$user_options = json_decode($user->options, true) ?: []; +$user_options = json_decode((string) $user->options, true) ?: []; foreach ($impostazioni as $impostazione) { echo ' diff --git a/modules/utenti/user.php b/modules/utenti/user.php index 844ac7b01..6418ac048 100755 --- a/modules/utenti/user.php +++ b/modules/utenti/user.php @@ -20,9 +20,9 @@ include_once __DIR__.'/../../core.php'; -use Models\User; -use Models\Upload; use Models\Module; +use Models\Upload; +use Models\User; Permissions::check('rw'); diff --git a/modules/viste/actions.php b/modules/viste/actions.php index b0ea68c0a..9f5e0b515 100755 --- a/modules/viste/actions.php +++ b/modules/viste/actions.php @@ -145,7 +145,7 @@ switch (filter('op')) { } // Prepara il nome del file - $filename = 'module_' . strtolower(str_replace(' ', '_', $module->name)) . '.json'; + $filename = 'module_'.strtolower(str_replace(' ', '_', $module->name)).'.json'; // Restituisci i dati in formato JSON echo json_encode([ diff --git a/modules/viste/edit.php b/modules/viste/edit.php index 03ce2dcec..5b98a104f 100755 --- a/modules/viste/edit.php +++ b/modules/viste/edit.php @@ -18,10 +18,10 @@ * along with this program. If not, see . */ +use Doctrine\SqlFormatter\SqlFormatter; use Models\Clause; use Models\Module; use Models\View; -use Doctrine\SqlFormatter\SqlFormatter; include_once __DIR__.'/../../core.php'; @@ -179,4 +179,4 @@ echo ' -'; \ No newline at end of file +'; diff --git a/modules/viste/fields.php b/modules/viste/fields.php index 3882dc248..053442bd6 100755 --- a/modules/viste/fields.php +++ b/modules/viste/fields.php @@ -71,15 +71,15 @@ foreach ($fields as $key => $field) { '.tr('Query prevista').' '.input([ - 'type' => 'textarea', - 'name' => 'query['.$key.']', - 'required' => 1, - 'readonly' => ''.(!$editable).'', - 'value' => $field->query, - 'style' => 'height: 80px;', - 'show-label' => '0', - 'help' => tr('Nome effettivo del campo sulla tabella oppure subquery che permette di ottenere il valore del campo.').'
'.tr('ATTENZIONE: utilizza sempre i caratteri < o > seguiti da spazio!'), - ]).' + 'type' => 'textarea', + 'name' => 'query['.$key.']', + 'required' => 1, + 'readonly' => ''.(!$editable).'', + 'value' => $field->query, + 'style' => 'height: 80px;', + 'show-label' => '0', + 'help' => tr('Nome effettivo del campo sulla tabella oppure subquery che permette di ottenere il valore del campo.').'
'.tr('ATTENZIONE: utilizza sempre i caratteri < o > seguiti da spazio!'), + ]).'
@@ -245,19 +245,19 @@ echo '
{[ "type": "select", "label": "'.tr('Gruppi con accesso').'", "name": "gruppi[-id-][]", "multiple": "1", "values": "query=SELECT DISTINCT `zz_groups`.`id`, `title` AS descrizione FROM `zz_groups` LEFT JOIN `zz_groups_lang` ON (`zz_groups`.`id` = `zz_groups_lang`.`id_record` AND `zz_groups_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `zz_groups`.`id` IN (SELECT `idgruppo` FROM `zz_permissions` WHERE `idmodule` = '.prepare($record->id).' AND `permessi` IN (\'r\', \'rw\')) OR `zz_groups`.`id` = 1 ORDER BY `zz_groups`.`id` ASC", "value": "'; - // Ottieni tutti gli ID dei gruppi che hanno accesso al modulo - $groups_with_access = $dbo->fetchArray('SELECT DISTINCT `idgruppo` FROM `zz_permissions` WHERE `idmodule` = '.prepare($record->id).' AND `permessi` IN (\'r\', \'rw\')'); - $group_ids = array_column($groups_with_access, 'idgruppo'); +// Ottieni tutti gli ID dei gruppi che hanno accesso al modulo +$groups_with_access = $dbo->fetchArray('SELECT DISTINCT `idgruppo` FROM `zz_permissions` WHERE `idmodule` = '.prepare($record->id).' AND `permessi` IN (\'r\', \'rw\')'); +$group_ids = array_column($groups_with_access, 'idgruppo'); - // Assicurati che il gruppo Amministratori (ID 1) sia incluso - $id_gruppo_admin = 1; // ID del gruppo Amministratori - if (!in_array($id_gruppo_admin, $group_ids)) { - $group_ids[] = $id_gruppo_admin; - } +// Assicurati che il gruppo Amministratori (ID 1) sia incluso +$id_gruppo_admin = 1; // ID del gruppo Amministratori +if (!in_array($id_gruppo_admin, $group_ids)) { + $group_ids[] = $id_gruppo_admin; +} - echo implode(',', $group_ids); +echo implode(',', $group_ids); - echo '" ]} +echo '" ]}
diff --git a/plugins/consuntivo/edit.php b/plugins/consuntivo/edit.php index 6b2e2ebc6..ef153e8ff 100644 --- a/plugins/consuntivo/edit.php +++ b/plugins/consuntivo/edit.php @@ -1,4 +1,5 @@ . */ -include_once __DIR__ . '/../../../core.php'; +include_once __DIR__.'/../../../core.php'; use Models\Module; use Modules\Contratti\Contratto; @@ -53,11 +54,11 @@ if (!empty($interventi)) { echo ' - - - - - + + + + + '; // Tabella con i dati @@ -65,34 +66,34 @@ if (!empty($interventi)) { $totale_ore_completate += !empty($intervento->stato->is_bloccato) ? $intervento->ore_totali : 0; // Riga per il singolo intervento echo ' - + '; // Riga con dettagli echo ' - +
' . tr('Attività') . '' . tr('Ore') . '' . tr('Km') . '' . tr('Costo') . '' . tr('Tot. scontato') . ''.tr('Attività').''.tr('Ore').''.tr('Km').''.tr('Costo').''.tr('Tot. scontato').'
- - ' . Modules::link('Interventi', $intervento->id, tr('Intervento num. _NUM_ del _DATE_', [ - '_NUM_' => $intervento->codice, - '_DATE_' => Translator::dateToLocale($intervento->inizio), - ])) . ' + + '.Modules::link('Interventi', $intervento->id, tr('Intervento num. _NUM_ del _DATE_', [ + '_NUM_' => $intervento->codice, + '_DATE_' => Translator::dateToLocale($intervento->inizio), + ])).' - ' . ($intervento->ore_totali <= 0 ? ' ' : '') . numberFormat($intervento->ore_totali) . ' + '.($intervento->ore_totali <= 0 ? ' ' : '').numberFormat($intervento->ore_totali).' - ' . numberFormat($intervento->km_totali) . ' + '.numberFormat($intervento->km_totali).' - ' . moneyFormat($intervento->spesa) . ' + '.moneyFormat($intervento->spesa).' - ' . moneyFormat($intervento->totale_imponibile) . ' + '.moneyFormat($intervento->totale_imponibile).'
'; // Lettura sessioni di lavoro $sessioni = $intervento->sessioni()->leftJoin('in_tipiintervento', 'in_interventi_tecnici.idtipointervento', 'in_tipiintervento.id')->where('non_conteggiare', 0)->get(); @@ -100,33 +101,33 @@ if (!empty($interventi)) { echo ' - - - - - - - - - - + + + + + + + + + + '; foreach ($sessioni as $sessione) { // Visualizzo lo sconto su ore o km se c'è - $sconto_ore = !empty($sessione->sconto_totale_manodopera) ? '
' . moneyFormat(-$sessione->sconto_totale_manodopera) . '' : ''; - $sconto_km = !empty($sessione->sconto_totale_viaggio) ? '
' . moneyFormat(-$sessione->sconto_totale_viaggio) . '' : ''; + $sconto_ore = !empty($sessione->sconto_totale_manodopera) ? '
'.moneyFormat(-$sessione->sconto_totale_manodopera).'' : ''; + $sconto_km = !empty($sessione->sconto_totale_viaggio) ? '
'.moneyFormat(-$sessione->sconto_totale_viaggio).'' : ''; echo ' - - - - - - - - - - + + + + + + + + + + '; // Raggruppamento per tipologia descrizione $tipologie[$sessione->tipo->getTranslation('title')]['ore'] += $sessione->ore; @@ -152,26 +153,26 @@ if (!empty($interventi)) { echo '
' . tr('Tecnico') . '' . tr('Tipo attività') . '' . tr('Ore') . '' . tr('Km') . '' . tr('Costo ore') . '' . tr('Costo km') . '' . tr('Diritto ch.') . '' . tr('Prezzo ore') . '' . tr('Prezzo km') . '' . tr('Diritto ch.') . ''.tr('Tecnico').''.tr('Tipo attività').''.tr('Ore').''.tr('Km').''.tr('Costo ore').''.tr('Costo km').''.tr('Diritto ch.').''.tr('Prezzo ore').''.tr('Prezzo km').''.tr('Diritto ch.').'
' . $sessione->anagrafica->ragione_sociale . '' . $sessione->tipo->getTranslation('title') . '' . numberFormat($sessione->ore) . '' . numberFormat($sessione->km) . '' . moneyFormat($sessione->costo_manodopera) . '' . moneyFormat($sessione->costo_viaggio) . '' . moneyFormat($sessione->costo_diritto_chiamata) . '' . moneyFormat($sessione->prezzo_manodopera) . $sconto_ore . '' . moneyFormat($sessione->prezzo_viaggio) . $sconto_km . '' . moneyFormat($sessione->prezzo_diritto_chiamata) . ''.$sessione->anagrafica->ragione_sociale.''.$sessione->tipo->getTranslation('title').''.numberFormat($sessione->ore).''.numberFormat($sessione->km).''.moneyFormat($sessione->costo_manodopera).''.moneyFormat($sessione->costo_viaggio).''.moneyFormat($sessione->costo_diritto_chiamata).''.moneyFormat($sessione->prezzo_manodopera).$sconto_ore.''.moneyFormat($sessione->prezzo_viaggio).$sconto_km.''.moneyFormat($sessione->prezzo_diritto_chiamata).'
- - - - + + + + '; foreach ($articoli as $articolo) { - $sconto = !empty($articolo->sconto) ? '
' . moneyFormat(-$articolo->sconto) . '' : ''; + $sconto = !empty($articolo->sconto) ? '
'.moneyFormat(-$articolo->sconto).'' : ''; echo ' - - - + + + '; // Raggruppamento per articolo con lo stesso prezzo $ricavo = (string) (($articolo->imponibile - $articolo->sconto) / ($articolo->qta > 0 ? $articolo->qta : 1)); $costo = (string) ($articolo->spesa / ($articolo->qta > 0 ? $articolo->qta : 1)); - $descrizione = $articolo->articolo->codice . ' - ' . $articolo->descrizione; + $descrizione = $articolo->articolo->codice.' - '.$articolo->descrizione; $materiali_art[$descrizione][$ricavo][$costo]['id'] = $articolo->id; $materiali_art[$descrizione][$ricavo][$costo]['qta'] += $articolo->qta; $materiali_art[$descrizione][$ricavo][$costo]['costo'] += $articolo->spesa; @@ -186,21 +187,21 @@ if (!empty($interventi)) { echo '
' . tr('Materiale') . '' . tr('Q.tà') . '' . tr('Prezzo di acquisto') . '' . tr('Prezzo di vendita') . ''.tr('Materiale').''.tr('Q.tà').''.tr('Prezzo di acquisto').''.tr('Prezzo di vendita').'
- ' . Modules::link('Articoli', $articolo->idarticolo, $articolo->descrizione) . ' + '.Modules::link('Articoli', $articolo->idarticolo, $articolo->descrizione).' ' . numberFormat($articolo->qta, 'qta') . '' . moneyFormat($articolo->spesa) . '' . moneyFormat($articolo->imponibile) . $sconto . ''.numberFormat($articolo->qta, 'qta').''.moneyFormat($articolo->spesa).''.moneyFormat($articolo->imponibile).$sconto.'
- - - - + + + + '; foreach ($righe as $riga) { - $sconto = !empty($riga->sconto) ? '
' . moneyFormat(-$riga->sconto) . '' : ''; + $sconto = !empty($riga->sconto) ? '
'.moneyFormat(-$riga->sconto).'' : ''; echo ' - - - + + + '; // Raggruppamento per riga $materiali_righe[$riga->descrizione]['qta'] += $riga->qta; @@ -224,23 +225,23 @@ if (!empty($interventi)) { echo ' '; echo ' '; echo ' '; echo ' '; echo '
' . tr('Altre spese') . '' . tr('Q.tà') . '' . tr('Prezzo di acquisto') . '' . tr('Prezzo di vendita') . ''.tr('Altre spese').''.tr('Q.tà').''.tr('Prezzo di acquisto').''.tr('Prezzo di vendita').'
- ' . $riga->descrizione . ' + '.$riga->descrizione.' ' . numberFormat($riga->qta, 'qta') . '' . moneyFormat($riga->spesa) . '' . moneyFormat($riga->imponibile) . $sconto . ''.numberFormat($riga->qta, 'qta').''.moneyFormat($riga->spesa).''.moneyFormat($riga->imponibile).$sconto.'
- ' . tr('Totale') . ' + '.tr('Totale').' - ' . numberFormat($totale_ore) . ' + '.numberFormat($totale_ore).' - ' . numberFormat($totale_km) . ' + '.numberFormat($totale_km).' - ' . moneyFormat($totale_costo) . ' + '.moneyFormat($totale_costo).' - ' . moneyFormat($totale) . ' + '.moneyFormat($totale).'
'; @@ -258,17 +259,17 @@ foreach ($righe as $riga) { $diff = sum($budget, -$totale) - $documento->provvigione; if ($diff > 0) { - $bilancio = '+ ' . moneyFormat($diff) . ''; + $bilancio = '+ '.moneyFormat($diff).''; } elseif ($diff < 0) { - $bilancio = '' . moneyFormat($diff) . ''; + $bilancio = ''.moneyFormat($diff).''; } else { - $bilancio = '' . moneyFormat($diff) . ''; + $bilancio = ''.moneyFormat($diff).''; } echo '

- ' . tr('Rapporto budget/spesa') . ':
- ' . $bilancio . ' + '.tr('Rapporto budget/spesa').':
+ '.$bilancio.'



'; @@ -279,44 +280,44 @@ if (!empty($totale_ore_contratto)) {
- - + + - - + + - - + + - - + + - - + +
' . tr('Ore a contratto') . ':' . Translator::numberToLocale($totale_ore_contratto) . ''.tr('Ore a contratto').':'.Translator::numberToLocale($totale_ore_contratto).'
' . tr('Ore erogate totali') . ':' . Translator::numberToLocale($totale_ore) . ''.tr('Ore erogate totali').':'.Translator::numberToLocale($totale_ore).'
' . tr('Ore residue totali') . ':' . Translator::numberToLocale(floatval($totale_ore_contratto) - floatval($totale_ore)) . ''.tr('Ore residue totali').':'.Translator::numberToLocale(floatval($totale_ore_contratto) - floatval($totale_ore)).'
' . tr('Ore erogate concluse') . ':' . Translator::numberToLocale($totale_ore_completate) . ''.tr('Ore erogate concluse').':'.Translator::numberToLocale($totale_ore_completate).'
' . tr('Ore residue concluse') . ':' . Translator::numberToLocale(floatval($totale_ore_contratto) - floatval($totale_ore_completate)) . ''.tr('Ore residue concluse').':'.Translator::numberToLocale(floatval($totale_ore_contratto) - floatval($totale_ore_completate)).'
'; } -echo' +echo '
-

' . tr('Per monitorare il consumo ore, inserisci almeno una riga con unità di misura "ore"') . '.

+

'.tr('Per monitorare il consumo ore, inserisci almeno una riga con unità di misura "ore"').'.

- - - - - - + + + + + + '; ksort($tipologie); foreach ($tipologie as $key => $tipologia) { @@ -327,12 +328,12 @@ foreach ($tipologie as $key => $tipologia) { } echo ' - - - - - - + + + + + + '; } echo ' @@ -341,13 +342,13 @@ echo '
' . tr('Tipologia') . '' . tr('Ore') . '' . tr('Costo') . '' . tr('Ricavo') . '' . tr('Margine') . '' . tr('Ricarico') . ''.tr('Tipologia').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').''.tr('Ricarico').'
' . $key . '' . Translator::numberToLocale($tipologia['ore']) . '' . Translator::numberToLocale($tipologia['costo']) . ' €' . Translator::numberToLocale($tipologia['ricavo']) . ' €' . Translator::numberToLocale($margine) . ' € (' . $margine_prc . '%)' . Translator::numberToLocale($margine) . ' € (' . $ricarico_prc . '%)'.$key.''.Translator::numberToLocale($tipologia['ore']).''.Translator::numberToLocale($tipologia['costo']).' €'.Translator::numberToLocale($tipologia['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)'.Translator::numberToLocale($margine).' € ('.$ricarico_prc.'%)
- - - - - - - + + + + + + + '; ksort($tecnici); foreach ($tecnici as $key => $tecnico) { @@ -358,13 +359,13 @@ foreach ($tecnici as $key => $tecnico) { } echo ' - - - - - - - + + + + + + + '; } echo ' @@ -375,12 +376,12 @@ echo '
' . tr('Tecnici') . '' . tr('km') . '' . tr('Ore') . '' . tr('Costo') . '' . tr('Ricavo') . '' . tr('Margine') . '' . tr('Ricarico') . ''.tr('Tecnici').''.tr('km').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').''.tr('Ricarico').'
' . $key . '' . (int) $tecnico['km'] . '' . Translator::numberToLocale($tecnico['ore']) . '' . Translator::numberToLocale($tecnico['costo']) . ' €' . Translator::numberToLocale($tecnico['ricavo']) . ' €' . Translator::numberToLocale($margine) . ' € (' . $margine_prc . '%)' . Translator::numberToLocale($margine) . ' € (' . $ricarico_prc . '%)'.$key.''.(int) $tecnico['km'].''.Translator::numberToLocale($tecnico['ore']).''.Translator::numberToLocale($tecnico['costo']).' €'.Translator::numberToLocale($tecnico['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)'.Translator::numberToLocale($margine).' € ('.$ricarico_prc.'%)
- - - - - - + + + + + + '; ksort($stati_intervento); foreach ($stati_intervento as $key => $stato) { @@ -391,12 +392,12 @@ foreach ($stati_intervento as $key => $stato) { } echo ' - - - - - - + + + + + + '; } echo ' @@ -405,12 +406,12 @@ echo '
' . tr('Stato') . '' . tr('Ore') . '' . tr('Costo') . '' . tr('Ricavo') . '' . tr('Margine') . '' . tr('Ricarico') . ''.tr('Stato').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').''.tr('Ricarico').'
' . $key . '
' . Translator::numberToLocale($stato['ore']) . '' . Translator::numberToLocale($stato['costo']) . ' €' . Translator::numberToLocale($stato['ricavo']) . ' €' . Translator::numberToLocale($margine) . ' € (' . $margine_prc . '%)' . Translator::numberToLocale($margine) . ' € (' . $ricarico_prc . '%)
'.$key.'
'.Translator::numberToLocale($stato['ore']).''.Translator::numberToLocale($stato['costo']).' €'.Translator::numberToLocale($stato['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)'.Translator::numberToLocale($margine).' € ('.$ricarico_prc.'%)
- - - - - - + + + + + + '; ksort($materiali_art); foreach ($materiali_art as $key => $materiali_array1) { @@ -421,12 +422,12 @@ foreach ($materiali_art as $key => $materiali_array1) { $ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int) ((($materiale['ricavo'] / ($materiale['costo'] > 0 ? $materiale['costo'] : 1)) - 1) * 100) : 100; echo ' - - - - - - + + + + + + '; } } @@ -438,12 +439,12 @@ foreach ($materiali_righe as $key => $materiale) { $ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int) ((($materiale['ricavo'] / ($materiale['costo'] > 0 ? $materiale['costo'] : 1)) - 1) * 100) : 100; echo ' - - - - - - + + + + + + '; } echo ' @@ -451,17 +452,17 @@ echo ' '; -//Tabella totale delle ore,km,costi e totale scontato suddivisi per i mesi in cui sono stati effettuati gli interventi +// Tabella totale delle ore,km,costi e totale scontato suddivisi per i mesi in cui sono stati effettuati gli interventi echo '
' . tr('Materiale') . '' . tr('Qtà') . '' . tr('Costo') . '' . tr('Ricavo') . '' . tr('Margine') . '' . tr('Ricarico') . ''.tr('Materiale').''.tr('Qtà').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').''.tr('Ricarico').'
' . Modules::link('Articoli', $materiale['id'], $key) . '' . $materiale['qta'] . '' . Translator::numberToLocale($materiale['costo']) . ' €' . Translator::numberToLocale($materiale['ricavo']) . ' €' . Translator::numberToLocale($margine) . ' € (' . $margine_prc . '%)' . Translator::numberToLocale($margine) . ' € (' . $ricarico_prc . '%)'.Modules::link('Articoli', $materiale['id'], $key).''.$materiale['qta'].''.Translator::numberToLocale($materiale['costo']).' €'.Translator::numberToLocale($materiale['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)'.Translator::numberToLocale($margine).' € ('.$ricarico_prc.'%)
' . $key . '' . $materiale['qta'] . '' . Translator::numberToLocale($materiale['costo']) . ' €' . Translator::numberToLocale($materiale['ricavo']) . ' €' . Translator::numberToLocale($margine) . ' € (' . $margine_prc . '%)' . Translator::numberToLocale($margine) . ' € (' . $ricarico_prc . '%)'.$key.''.$materiale['qta'].''.Translator::numberToLocale($materiale['costo']).' €'.Translator::numberToLocale($materiale['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)'.Translator::numberToLocale($margine).' € ('.$ricarico_prc.'%)
- - - - - + + + + + '; $interventi_per_mese = []; $totals = ['ore' => 0, 'km' => 0, 'costo' => 0, 'totale' => 0]; @@ -474,7 +475,7 @@ foreach ($interventi as $intervento) { ->get(); foreach ($sessioni as $sessione) { - $mese = date('Y-m', strtotime($sessione->orario_inizio)); + $mese = date('Y-m', strtotime((string) $sessione->orario_inizio)); if (!isset($interventi_per_mese[$mese])) { $interventi_per_mese[$mese] = [ 'ore' => 0, @@ -486,15 +487,15 @@ foreach ($interventi as $intervento) { $interventi_per_mese[$mese]['ore'] += $sessione->ore; $interventi_per_mese[$mese]['km'] += $sessione->km; $interventi_per_mese[$mese]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; - $interventi_per_mese[$mese]['totale'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + - $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + + $interventi_per_mese[$mese]['totale'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; - + $totals['ore'] += $sessione->ore; $totals['km'] += $sessione->km; $totals['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; - $totals['totale'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + - $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + + $totals['totale'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; } } @@ -503,21 +504,21 @@ ksort($interventi_per_mese); foreach ($interventi_per_mese as $mese => $dati) { echo ' - - - - - + + + + + '; } echo ' - - - - - + + + + + '; echo '
' . tr('Mese') . '' . tr('Ore') . '' . tr('Km') . '' . tr('Costo') . '' . tr('Totale scontato') . ''.tr('Mese').''.tr('Ore').''.tr('Km').''.tr('Costo').''.tr('Totale scontato').'
' . ucfirst(Carbon\Carbon::createFromFormat('Y-m', $mese)->translatedFormat('F Y')) . '' . Translator::numberToLocale($dati['ore']) . '' . Translator::numberToLocale($dati['km']) . '' . Translator::numberToLocale($dati['costo']) . ' €' . Translator::numberToLocale($dati['totale']) . ' €'.ucfirst(Carbon\Carbon::createFromFormat('Y-m', $mese)->translatedFormat('F Y')).''.Translator::numberToLocale($dati['ore']).''.Translator::numberToLocale($dati['km']).''.Translator::numberToLocale($dati['costo']).' €'.Translator::numberToLocale($dati['totale']).' €
' . tr('Totali') . '' . Translator::numberToLocale($totals['ore']) . '' . Translator::numberToLocale($totals['km']) . '' . Translator::numberToLocale($totals['costo']) . ' €' . Translator::numberToLocale($totals['totale']) . ' €'.tr('Totali').''.Translator::numberToLocale($totals['ore']).''.Translator::numberToLocale($totals['km']).''.Translator::numberToLocale($totals['costo']).' €'.Translator::numberToLocale($totals['totale']).' €
@@ -529,11 +530,11 @@ echo ' */ echo '
- ' . Prints::getLink('Consuntivo ' . $text, $id_record, 'btn-primary', tr('Stampa consuntivo')) . ' + '.Prints::getLink('Consuntivo '.$text, $id_record, 'btn-primary', tr('Stampa consuntivo')).'
'; // Aggiunta interventi se il documento é aperto o in attesa o pagato (non si possono inserire interventi collegati ad altri preventivi) -$query = 'SELECT id, CONCAT(\'Intervento \', codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta), \'%d/%m/%Y\')) AS descrizione FROM in_interventi WHERE id_preventivo IS NULL AND id_contratto IS NULL AND id_ordine IS NULL AND id NOT IN( SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN( SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL) AND idanagrafica=' . prepare($record['idanagrafica']); +$query = 'SELECT id, CONCAT(\'Intervento \', codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta), \'%d/%m/%Y\')) AS descrizione FROM in_interventi WHERE id_preventivo IS NULL AND id_contratto IS NULL AND id_ordine IS NULL AND id NOT IN( SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN( SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL) AND idanagrafica='.prepare($record['idanagrafica']); $count = $dbo->fetchNum($query); @@ -544,14 +545,14 @@ echo '
- {[ "type": "select", "label": "' . tr('Aggiungi un intervento a questo documento') . ' (' . $count . ')", "name": "idintervento", "values": "query=' . $query . '", "required":"1" ]} + {[ "type": "select", "label": "'.tr('Aggiungi un intervento a questo documento').' ('.$count.')", "name": "idintervento", "values": "query='.$query.'", "required":"1" ]}

 

-
diff --git a/plugins/exportFE/edit.php b/plugins/exportFE/edit.php index 93ada7946..f357574b7 100755 --- a/plugins/exportFE/edit.php +++ b/plugins/exportFE/edit.php @@ -66,8 +66,8 @@ if ($fattura !== null) { echo '
'.tr("Per effettuare la generazione dell'XML della fattura elettronica clicca sul pulsante _BTN_", [ - '_BTN_' => 'Genera', - ]).'. '.tr('Successivamente sarà possibile procedere alla visualizzazione e al download della fattura generata attraverso i pulsanti dedicati').' + '_BTN_' => 'Genera', + ]).'. '.tr('Successivamente sarà possibile procedere alla visualizzazione e al download della fattura generata attraverso i pulsanti dedicati').'
diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index cbb6c9952..51fe966a3 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -712,7 +712,7 @@ class FatturaElettronica implements \Stringable // $result['CodiceFiscale'] = str_replace($anagrafica->nazione->iso2, '', $result['CodiceFiscale']); // Rimuovo eventuali idicazioni relative all'iso2 della nazione, solo se la stringa inizia con quest'ultima. - $result['CodiceFiscale'] = preg_replace('/^'.preg_quote($anagrafica->nazione->iso2, '/').'/', '', (string) $anagrafica['codice_fiscale']); + $result['CodiceFiscale'] = preg_replace('/^'.preg_quote((string) $anagrafica->nazione->iso2, '/').'/', '', (string) $anagrafica['codice_fiscale']); } // Partita IVA: se privato estero non va considerato il codice fiscale ma la partita iva con 9 zeri @@ -1690,7 +1690,7 @@ class FatturaElettronica implements \Stringable // BIC senza parte per filiale (causa errori di validazione) if (!empty($banca->bic)) { - $pagamento['BIC'] = substr($banca->bic, 0, 8); + $pagamento['BIC'] = substr((string) $banca->bic, 0, 8); } $result[]['DettaglioPagamento'] = $pagamento; diff --git a/plugins/importFE/edit.php b/plugins/importFE/edit.php index 607df84e5..e68f32686 100755 --- a/plugins/importFE/edit.php +++ b/plugins/importFE/edit.php @@ -142,8 +142,8 @@ if (Interaction::isEnabled()) { echo '
'.tr('Per vedere le fatture da importare utilizza il pulsante _BUTTON_', [ - '_BUTTON_' => '"'.tr('Ricerca fatture').'"', - ]).' + '_BUTTON_' => '"'.tr('Ricerca fatture').'"', + ]).'
'; } else { include $structure->filepath('list.php'); diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index 84c17afff..1e2ae14c4 100755 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -19,7 +19,6 @@ */ use Carbon\Carbon; -use Models\Module; use Modules\Fatture\Fattura; use Modules\Pagamenti\Pagamento; use Plugins\ImportFE\FatturaElettronica; @@ -314,8 +313,6 @@ if (!empty($pagamenti)) { echo '
'; - - // Tipo del documento $query = "SELECT `co_tipidocumento`.`id`, CONCAT('(', `codice_tipo_documento_fe`, ') ', `title`) AS descrizione FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento_lang`.`id_record` = `co_tipidocumento`.`id` AND `co_tipidocumento_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).") WHERE `dir` = 'uscita'"; $query_tipo = $query.' AND `codice_tipo_documento_fe` = '.prepare($dati_generali['TipoDocumento']); @@ -563,7 +560,6 @@ if (!empty($righe)) { } $idconto_acquisto = $database->fetchOne('SELECT `idconto_acquisto` FROM `mg_articoli` WHERE `id` = '.prepare($id_articolo))['idconto_acquisto']; - } $idconto_acquisto = $is_autofattura ? setting('Conto per autofattura') : $idconto_acquisto; @@ -772,10 +768,10 @@ if (!empty($righe)) { FROM `or_ordini` INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id` WHERE - `or_ordini`.`idanagrafica` = ".prepare($anagrafica->id)." AND - `or_ordini`.`numero` = ".prepare($riferimento['numero'])." AND - DATE_FORMAT(`or_ordini`.`data`, '%d/%m/%Y') = ".prepare($riferimento['data'])." - GROUP BY `or_ordini`.`id`"; + `or_ordini`.`idanagrafica` = ".prepare($anagrafica->id).' AND + `or_ordini`.`numero` = '.prepare($riferimento['numero'])." AND + DATE_FORMAT(`or_ordini`.`data`, '%d/%m/%Y') = ".prepare($riferimento['data']).' + GROUP BY `or_ordini`.`id`'; $ordini = $database->fetchArray($query); diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php index e9b82bc3f..251dcd2a4 100755 --- a/plugins/importFE/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -179,11 +179,11 @@ class FatturaElettronica if (!empty($allegato['FormatoAttachment'])) { $extension = '.'.strtolower((string) $allegato['FormatoAttachment']); } - + if (strtolower($extension) == '.html' || strtolower($extension) == '.htm') { $extension = '.pdf'; } - + if (preg_match('/\./', (string) $allegato['NomeAttachment'])) { $original = $allegato['NomeAttachment']; } else { @@ -200,19 +200,19 @@ class FatturaElettronica // Registrazione XML come allegato $file_content = file_get_contents($this->file); - + $original_name = basename($this->file); if (empty(pathinfo($original_name, PATHINFO_EXTENSION))) { $original_name .= '.xml'; } - + try { \Uploads::upload($file_content, array_merge($info, [ 'name' => tr('Fattura Elettronica'), 'original_name' => $original_name, ])); } catch (\UnexpectedValueException $e) { - error_log('Errore durante il caricamento del file XML: ' . $e->getMessage()); + error_log('Errore durante il caricamento del file XML: '.$e->getMessage()); } } @@ -406,7 +406,7 @@ class FatturaElettronica $this->saveRighe($info['articoli'], $info['iva'], $info['conto'], $info['movimentazione'], $info['crea_articoli'], $info['tipo_riga_riferimento'], $info['id_riga_riferimento'], $info['tipo_riga_riferimento_vendita'], $info['id_riga_riferimento_vendita'], $info['update_info'], $info['serial']); - $this->saveAllegati($tipo == 'Cliente' ? 'Fatture di vendita': null); + $this->saveAllegati($tipo == 'Cliente' ? 'Fatture di vendita' : null); $this->getFattura()->save(['forza_emissione']); diff --git a/plugins/importFE_ZIP/edit.php b/plugins/importFE_ZIP/edit.php index 87b0c5a6f..a51c6f41e 100644 --- a/plugins/importFE_ZIP/edit.php +++ b/plugins/importFE_ZIP/edit.php @@ -205,8 +205,8 @@ if (Interaction::isEnabled()) { echo '
'.tr('Per vedere le fatture da importare utilizza il pulsante _BUTTON_', [ - '_BUTTON_' => tr('Ricerca fatture'), - ]).' + '_BUTTON_' => tr('Ricerca fatture'), + ]).'
'; } else { include $structure->filepath('list.php'); diff --git a/plugins/importFE_ZIP/generate.php b/plugins/importFE_ZIP/generate.php index 296119042..03544e46d 100644 --- a/plugins/importFE_ZIP/generate.php +++ b/plugins/importFE_ZIP/generate.php @@ -19,13 +19,12 @@ */ use Carbon\Carbon; -use Models\Module; use Modules\Fatture\Fattura; use Modules\Pagamenti\Pagamento; use Plugins\ImportFE\FatturaElettronica; use Util\XML; -include_once __DIR__ . '/../../core.php'; +include_once __DIR__.'/../../core.php'; echo '