diff --git a/controller.php b/controller.php index a21e50765..90bcffb45 100644 --- a/controller.php +++ b/controller.php @@ -80,7 +80,7 @@ echo ' '; -redirectOperation($id_module, $id_record); +redirectOperation($id_module, isset($id_parent) ? $id_parent : $id_record); // Widget in basso echo '{( "name": "widgets", "id_module": "'.$id_module.'", "position": "right", "place": "controller" )}'; diff --git a/editor.php b/editor.php index 0f37ed7fa..3bcd8a0d8 100755 --- a/editor.php +++ b/editor.php @@ -224,7 +224,7 @@ if (empty($records)) { '; } -redirectOperation($id_module, $id_record); +redirectOperation($id_module, isset($id_parent) ? $id_parent : $id_record); // Widget in basso echo '{( "name": "widgets", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'", "position": "right", "place": "editor" )}'; diff --git a/include/manager.php b/include/manager.php index 9aa747b73..c96b09fe2 100644 --- a/include/manager.php +++ b/include/manager.php @@ -36,6 +36,12 @@ $total = App::readQuery($element); $module_options = (!empty($element['options2'])) ? $element['options2'] : $element['options']; +// Caricamento helper modulo (verifico se ci sono helper personalizzati) +include_once App::filepath($directory.'|custom|', 'modutil.php'); + +// Lettura risultato query del modulo +include App::filepath($directory.'|custom|', 'init.php'); + // Caricamento file aggiuntivo su elenco record include App::filepath($directory.'|custom|', 'controller_before.php'); diff --git a/lib/util.php b/lib/util.php index 59373016c..86e802190 100644 --- a/lib/util.php +++ b/lib/util.php @@ -192,6 +192,8 @@ if (!function_exists('download')) { */ function download($file, $filename = null) { + ob_end_clean(); + if (!headers_sent()) { $filename = !empty($filename) ? $filename : basename($file); diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index 6073da451..975eaa971 100644 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -11,9 +11,9 @@ $img = null; if (!empty($records[0]['immagine01'])) { $fileinfo = Uploads::fileInfo($records[0]['immagine01']); - $default_img = '/'.Uploads::getUploadDirectory($id_module).'/'.$fileinfo['filename'].'_thumb600.'.$fileinfo['extension']; + $default_img = '/'.Uploads::getDirectory($id_module).'/'.$fileinfo['filename'].'_thumb600.'.$fileinfo['extension']; - $img = file_exists(DOCROOT.$default_img) ? ROOTDIR.$default_img : ROOTDIR.'/'.Uploads::getUploadDirectory($id_module).'/'.$records[0]['immagine01']; + $img = file_exists(DOCROOT.$default_img) ? ROOTDIR.$default_img : ROOTDIR.'/'.Uploads::getDirectory($id_module).'/'.$records[0]['immagine01']; } ?>
diff --git a/modules/contratti/plugins/addpianficazione.php b/modules/contratti/plugins/addpianficazione.php index bcbe827f0..a80f10df5 100644 --- a/modules/contratti/plugins/addpianficazione.php +++ b/modules/contratti/plugins/addpianficazione.php @@ -2,8 +2,6 @@ include_once __DIR__.'/../../../core.php'; -// - //nuovo promemoria $data_richiesta = date('d/m/Y'); $disabled = ''; diff --git a/plugin_editor.php b/plugin_editor.php deleted file mode 100644 index 24da081d5..000000000 --- a/plugin_editor.php +++ /dev/null @@ -1,95 +0,0 @@ -'.tr('Record non trovato').'.

'; - } else { - // Lettura template plugin (verifico se ci sono template personalizzati, altrimenti uso quello base) - if (file_exists($docroot.'/plugins/'.$info['directory'].'/custom/edit.php')) { - include $docroot.'/plugins/'.$info['directory'].'/custom/edit.php'; - } elseif (file_exists($docroot.'/plugins/'.$info['directory'].'/custom/edit.html')) { - include $docroot.'/plugins/'.$info['directory'].'/custom/edit.html'; - } elseif (file_exists($docroot.'/plugins/'.$info['directory'].'/edit.php')) { - include $docroot.'/plugins/'.$info['directory'].'/edit.php'; - } elseif (file_exists($docroot.'/plugins/'.$info['directory'].'/edit.html')) { - include $docroot.'/plugins/'.$info['directory'].'/edit.html'; - } - - // Campi personalizzati - echo ' - -
- {( "name": "custom_fields", "id_plugin": "'.$id_plugin.'", "id_record": "'.$id_record.'", "position": "top" )} -
- -
- {( "name": "custom_fields", "id_plugin": "'.$id_plugin.'", "id_record": "'.$id_record.'" )} -
- - '; - } - - redirectOperation($id_module, $id_parent); - - $module = Modules::get($info['idmodule_to']); - - if ($module['permessi'] != 'rw') { - ?> - - -'; diff --git a/plugins/fatturazione/FatturaElettronica.php b/plugins/fatturazione/FatturaElettronica.php index 7dc0a68ea..0fd3c7957 100644 --- a/plugins/fatturazione/FatturaElettronica.php +++ b/plugins/fatturazione/FatturaElettronica.php @@ -33,13 +33,12 @@ class FatturaElettronica $database = \Database::getConnection(); // Documento - $documento = $database->fetchOne('SELECT *, (SELECT `codice_tipo_documento_fe` FROM `co_tipidocumento` WHERE `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento`) AS `tipo_documento`, (SELECT `descrizione` FROM `co_statidocumento` WHERE `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`) AS `stato` FROM `co_documenti` WHERE `id` = '.prepare($id_documento)); + $this->documento = $database->fetchOne('SELECT *, (SELECT `codice_tipo_documento_fe` FROM `co_tipidocumento` WHERE `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento`) AS `tipo_documento`, (SELECT `descrizione` FROM `co_statidocumento` WHERE `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`) AS `stato` FROM `co_documenti` WHERE `id` = '.prepare($id_documento)); // Controllo sulla possibilità di creare la fattura elettronica - if ($documento['stato'] != 'Emessa') { - throw new UnexpectedValueException(); + if ($this->documento['stato'] != 'Emessa' || $this->getCliente()['tipo'] == 'Privato') { + throw new \UnexpectedValueException(); } - $this->documento = $documento; } /** @@ -497,14 +496,26 @@ class FatturaElettronica */ public function save($directory) { - $documento = $this->getDocumento(); - $filename = $documento['codice_xml']; - - $azienda = self::getAzienda(); - $codice = 'IT'.(empty($azienda['piva']) ? $azienda['codice_fiscale'] : $azienda['piva']); - // Generazione nome XML - if (empty($filename) || !starts_with($filename, $codice)) { + $filename = $this->getFilename(); + + // Salvataggio del file + $result = directory($directory) && file_put_contents(rtrim($directory, '/').'/'.$filename, $this->__toString()); + + return ($result === false) ? null : $filename; + } + + /** + * Restituisce il nome del file XML per la fattura elettronica. + * + * @return string + */ + public function getFilename() + { + if (empty($this->documento['codice_xml'])) { + $azienda = self::getAzienda(); + $codice = 'IT'.(empty($azienda['piva']) ? $azienda['codice_fiscale'] : $azienda['piva']); + $database = \Database::getConnection(); do { @@ -512,15 +523,11 @@ class FatturaElettronica } while ($database->fetchNum('SELECT `id` FROM `co_documenti` WHERE `codice_xml` = '.prepare($filename))); // Registrazione - $database->update('co_documenti', ['codice_xml' => $filename], ['id' => $documento['id']]); + $database->update('co_documenti', ['codice_xml' => $filename], ['id' => $this->getDocumento()['id']]); $this->documento['codice_xml'] = $filename; } - $filename .= '.xml'; - // Salvataggio del file - $result = directory($directory) && file_put_contents(rtrim($directory, '/').'/'.$filename, $this->__toString()); - - return ($result === false) ? null : $filename; + return $this->documento['codice_xml'].'.xml'; } /** diff --git a/plugins/fatturazione/actions.php b/plugins/fatturazione/actions.php new file mode 100644 index 000000000..6214ab6ec --- /dev/null +++ b/plugins/fatturazione/actions.php @@ -0,0 +1,30 @@ +save($upload_dir); + + App::flash()->info(tr('Fattura elettronica generata correttamente!')); + + if ($fattura->isValid()) { + App::flash()->warning(tr('La fattura elettronica potrebbe avere delle irregolarità!')); + } + } catch (UnexpectedValueException $e) { + App::flash()->error(tr('Impossibile generare la fattura elettronica')); + } + + break; + + case 'download': + try { + $fattura = new Plugins\Fatturazione\FatturaElettronica($id_record); + + download($upload_dir.'/'.$fattura->getFilename()); + } catch (UnexpectedValueException $e) { + } + break; +} diff --git a/plugins/fatturazione/edit.php b/plugins/fatturazione/edit.php new file mode 100644 index 000000000..f0066eb8d --- /dev/null +++ b/plugins/fatturazione/edit.php @@ -0,0 +1,33 @@ + +
'; +} + +echo ' + + + + + + + +'; + +if ($download) { + echo ' +
+ +
+ + '.tr('Scarica fattura elettronica').' + +
+'; +} diff --git a/plugins/fatturazione/init.php b/plugins/fatturazione/init.php new file mode 100644 index 000000000..c5e776785 --- /dev/null +++ b/plugins/fatturazione/init.php @@ -0,0 +1,15 @@ +getFilename()); +} catch (UnexpectedValueException $e) { + $disabled = true; + $download = false; +} diff --git a/plugins/referenti/add.php b/plugins/referenti/add.php index 343a7d9d2..e740d4c6c 100644 --- a/plugins/referenti/add.php +++ b/plugins/referenti/add.php @@ -3,7 +3,8 @@ include_once __DIR__.'/../../core.php'; echo ' -
+ + diff --git a/plugins/referenti/edit.php b/plugins/referenti/edit.php index 0bd4940dd..93856b653 100644 --- a/plugins/referenti/edit.php +++ b/plugins/referenti/edit.php @@ -3,7 +3,10 @@ include_once __DIR__.'/../../core.php'; echo ' - + + + + @@ -36,7 +39,7 @@ echo '
- + '.tr('Elimina').' diff --git a/plugins/sedi/add.php b/plugins/sedi/add.php index 5b421704b..0abbe96cf 100644 --- a/plugins/sedi/add.php +++ b/plugins/sedi/add.php @@ -3,7 +3,8 @@ include_once __DIR__.'/../../core.php'; echo ' - + + diff --git a/plugins/sedi/edit.php b/plugins/sedi/edit.php index e9313d4b5..4df2e048d 100644 --- a/plugins/sedi/edit.php +++ b/plugins/sedi/edit.php @@ -12,7 +12,10 @@ if (!empty($google)) { */ echo ' - + + + + @@ -136,7 +139,7 @@ echo '
- + '.tr('Elimina').' diff --git a/src/HTMLBuilder/Manager/FileManager.php b/src/HTMLBuilder/Manager/FileManager.php index fefd98c2e..0a8f79669 100644 --- a/src/HTMLBuilder/Manager/FileManager.php +++ b/src/HTMLBuilder/Manager/FileManager.php @@ -27,7 +27,7 @@ class FileManager implements ManagerInterface $attachment_id = 'attachments_'.$options['id_module'].'-'.$options['id_plugin']; // Cartella delle anteprime - $directory = \Uploads::getUploadDirectory($options['id_module'], $options['id_plugin']); + $directory = \Uploads::getDirectory($options['id_module'], $options['id_plugin']); $dbo = \Database::getConnection(); diff --git a/src/Uploads.php b/src/Uploads.php index fac338c05..43a6cf290 100644 --- a/src/Uploads.php +++ b/src/Uploads.php @@ -120,7 +120,7 @@ class Uploads 'wpd' => 'application/wordperfect', ]; - public static function getUploadDirectory($id_module, $id_plugin = null) + public static function getDirectory($id_module, $id_plugin = null) { if (empty($id_plugin)) { $directory = Modules::get($id_module)['directory']; @@ -155,7 +155,7 @@ class Uploads $extension = strtolower(pathinfo($original)['extension']); $ok = self::isSupportedType($extension); - $directory = DOCROOT.'/'.self::getUploadDirectory($data['id_module'], $data['id_plugin']); + $directory = DOCROOT.'/'.self::getDirectory($data['id_module'], $data['id_plugin']); do { $filename = random_string().'.'.$extension; @@ -236,7 +236,7 @@ class Uploads ])['nome']; $fileinfo = self::fileInfo($filename); - $directory = DOCROOT.'/'.self::getUploadDirectory($data['id_module'], $data['id_plugin']); + $directory = DOCROOT.'/'.self::getDirectory($data['id_module'], $data['id_plugin']); $files = [ $directory.'/'.$fileinfo['basename'], diff --git a/update/2_4_2.sql b/update/2_4_2.sql index 6843902dd..fe9e37717 100644 --- a/update/2_4_2.sql +++ b/update/2_4_2.sql @@ -204,6 +204,8 @@ età svizzere che possiedono i requisiti di cui all''art. 15, c. 2 dell’Accord INSERT INTO `zz_settings` (`idimpostazione`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Causale ritenuta d''acconto', '', 'query=SELECT codice AS id, descrizione FROM fe_causali_pagamento_ritenuta', 1, 'Fatturazione', 0); +INSERT INTO `zz_plugins` (`id`, `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `directory`, `options`) VALUES (NULL, 'Fatturazione Elettronica', 'Fatturazione Elettronica', (SELECT `id` FROM `zz_modules` WHERE `name`='Fatture di vendita'), (SELECT `id` FROM `zz_modules` WHERE `name`='Fatture di vendita'), 'tab', 'fatturazione', 'custom'); + -- Aggiornamento zz_settings ALTER TABLE `zz_settings` CHANGE `idimpostazione` `id` int(11) NOT NULL AUTO_INCREMENT; UPDATE `zz_views` SET `query` = REPLACE(`query`, 'idimpostazione', 'id');