From 6510807bdd192b4b1c18e4e56404baf0571aa09b Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Thu, 14 Sep 2017 10:27:49 +0200 Subject: [PATCH] Miglioramenti vari Miglioramento della presentazione del progetto e delle informazioni relative. Aggiunti messaggi per segnalare il collegamento dei documenti tra di loro ed evitare cancellazioni involontarie. Unificato il sistema di identificazione dei numeri (ora abbreviati in "num."). --- README.md | 74 +++++++++-------- ajax_autocomplete.php | 14 ++-- docs/Installazione.md | 36 +++++---- modules/anagrafiche/edit.php | 10 +-- modules/articoli/edit.php | 2 +- modules/articoli/plugins/articoli.lotti.php | 6 +- modules/contratti/edit.php | 40 ++++++++- .../contratti.fatturaordiniservizio.php | 2 +- .../plugins/contratti.ordiniservizio.php | 2 +- modules/ddt/edit.php | 35 +++++++- modules/fatture/add_serial.php | 2 +- modules/fatture/edit.php | 2 +- modules/fatture/row-list.php | 2 +- modules/ordini/edit.php | 81 ++++++++++++++----- modules/preventivi/edit.php | 31 +++++++ src/Modules.php | 7 +- templates/contratti/body.php | 2 +- templates/ddt/body.php | 2 +- templates/ddt/footer.php | 2 +- .../pdfgen.fatture_accompagnatorie.php | 6 +- templates/interventi/body.php | 4 +- .../pdfgen.interventi_ordiniservizio.php | 4 +- templates/preventivi/body.php | 2 +- 23 files changed, 259 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index fba7bfc57..2c129867d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,19 @@ -# OpenSTAManager +

+ + + + +

+ Il gestionale open source per l'assistenza tecnica e la fatturazione. +
+
+ Documentazione tecnica + · + Sito ufficiale +

+

+ +
Il gestionale OpenSTAManager è un software open-source e web based, sviluppato dall'azienda informatica DevCode di Este per gestire ed archiviare il servizio di assistenza tecnica e la relativa fatturazione. Il nome del progetto deriva dalla parziale traduzione in inglese degli elementi principali che lo compongono: la natura open source e il suo obiettivo quale Gestore del Servizio Tecnico di Assistenza. @@ -13,7 +28,7 @@ Un software gestionale, identificato nell'insieme degli applicativi che automati Secondo questa definizione, OpenSTAManager riesce a generalizzare al proprio interno le funzionalità caratteristiche della contabilità e della gestione del magazzino, presentando inoltre moduli piuttosto avanzati e destinati a complementare l'attività aziendale in relazione agli interventi di assistenza della realtà lavorativa in oggetto. -La documentazione ufficiale risulta disponibile all'indirizzo . +La documentazione ufficiale è disponibile all'indirizzo . @@ -22,7 +37,6 @@ La documentazione ufficiale risulta disponibile all'indirizzo = 5.4 (si consiglia la versione 5.6 per poter usufruire di tutte le funzionalità del progetto) +- PHP >= 5.4 - MySQL >= 5.0 Per ulteriori informazioni sui pacchetti che forniscono questi elementi di default, visitare la sezione [Installazione](https://devcode-it.github.io/openstamanager/installazione.html) della documentazione. @@ -45,26 +57,32 @@ Per ulteriori informazioni sui pacchetti che forniscono questi elementi di defau Per procedere all'installazione è necessario seguire i seguenti punti: -1. Creare una cartella (ad esempio `openstamanager`) nella root del sever web installato ed estrarvi il contenuto della release scaricata. Il percorso della cartella root del server varia in base al software in utilizzo: +1. [Scaricare una release ufficiale del progetto](https://github.com/devcode-it/openstamanager/releases). +2. Creare una cartella (ad esempio `openstamanager`) nella root del sever web installato ed estrarvi il contenuto della release scaricata. Il percorso della cartella root del server varia in base al software in utilizzo: - - LAMP (`/var/www/html`); - - XAMPP (`C:/xampp/htdocs` per Windows, `/opt/lampp/htdocs/` per Linux, `/Applications/XAMPP/htdocs/` per MAC); - - WAMP (`C:\wamp\www`); - - MAMP (`C:\MAMP\htdocs` per Windows, `/Applications/MAMP/htdocs` per MAC). + - LAMP (`/var/www/html`) + - XAMPP (`C:/xampp/htdocs` per Windows, `/opt/lampp/htdocs/` per Linux, `/Applications/XAMPP/htdocs/` per MAC) + - WAMP (`C:\wamp\www`) + - MAMP (`C:\MAMP\htdocs` per Windows, `/Applications/MAMP/htdocs` per MAC) -2. Creare un database vuoto (tramite [PHPMyAdmin](http://localhost/phpmyadmin/) o riga di comando). -3. Accedere a dal vostro browser. -4. Inserire i dati per collegarsi al database e cliccare su **Installa** per completare l'installazione. +3. Creare un database vuoto (tramite [PHPMyAdmin](http://localhost/phpmyadmin/) o riga di comando). +4. Accedere a dal vostro browser. +5. Inserire i dati di configurazione per collegarsi al database. +6. Procedere all'installazione del software, cliccando sul pulsante **Installa**. **Attenzione**: è possibile che l'installazione richieda del tempo. Si consiglia pertanto di attendere almeno qualche minuto senza alcun cambiamento nella pagina di installazione (in particolare, della progress bar presente) prima di cercare una possibile soluzione nelle discussioni del forum o nella sezione dedicata. ### Versioni -Per mantenere un elevato grado di trasparenza riguardo al ciclo delle release, seguiamo le linee guida [Semantic Versioning (SemVer)](http://semver.org/) per definire le versioni del progetto. Per vedere tutte le versioni disponibili al download, visitare la [pagina relativa](https://github.com/devcode-it/openstamanager/releases) su Github (per versioni precedenti alla 2.3, visitare [SourceForge](https://sourceforge.net/projects/openstamanager/files/)). +Per mantenere un elevato grado di trasparenza riguardo al ciclo delle release, seguiamo le linee guida [Semantic Versioning (SemVer)](http://semver.org/) per definire le versioni del progetto. +Per vedere tutte le versioni disponibili al download, visitare la [pagina relativa](https://github.com/devcode-it/openstamanager/releases) su Github (per versioni precedenti alla 2.3, visitare [SourceForge](https://sourceforge.net/projects/openstamanager/files)). + +Nel caso utilizziate il programma per uso commerciale, si consiglia di scaricare le release disponibili nel sito ufficiale del progetto (), evitando di utilizzare direttamente il codice della repository. +Se siete inoltre interessati a supporto e assistenza professionali, li potete richiedere nella [sezione dedicata](http://www.openstamanager.com/per-le-aziende/). ### Github -Nel caso si stia utilizzando la versione direttamente ottenuta dalla repository di Github, è necessario eseguire i seguenti comandi da linea di comando per completare le dipendenze PHP (tramite [Composer](https://getcomposer.org/)) e gli asssets (tramite [Yarn](https://yarnpkg.com/)) del progetto. +Nel caso si stia utilizzando la versione direttamente ottenuta dalla repository di Github, è necessario eseguire i seguenti comandi da linea di comando per completare le dipendenze PHP (tramite [Composer](https://getcomposer.org)) e gli asssets (tramite [Yarn](https://yarnpkg.com)) del progetto. ```bash php composer.phar install @@ -87,19 +105,6 @@ Il progetto è un software open source perché permette agli utilizzatori di stu In questo modo è possibile ottenere un'ulteriore garanzia sul funzionamento del software, poiché chiunque ne abbia le capacità può verificarlo, escludendo mancanze in relazione alla sicurezza e alla privacy dei dati (caratteristica che il software proprietario non può offrire). -Nel caso utilizziate il programma per uso commerciale, si consiglia di non utilizzare le versioni ottenibili direttamente dalla repository su Github ma di scaricare le release ufficiali disponibili nel nostro sito ufficiale ; se siete inoltre interessati a supporto e assistenza professionali, li potete richiedere nella [sezione dedicata](http://www.openstamanager.com/per-le-aziende/). - -## Componenti esterni - -OpenSTAManager è stato progettato utilizzando altro software open source, tra cui principalmente: - -- [PHP](https://secure.php.net/) - A popular general-purpose scripting language especially suited to web development -- [MySQL](https://www.mysql.com/) - The world's most popular open source database -- [JQuery](https://jquery.com/) - New Wave JavaScript -- [Bootstrap](http://getbootstrap.com/) - The world's most popular mobile-first and responsive front-end framework -- [FontAwesome](http://fontawesome.io/) - The iconic font and CSS toolkit -- [HTML2PDF](http://html2pdf.fr/en/default) - HTML to PDF converter written in PHP - ## Community La community è una componente importante in un progetto open source, perché mette in contatto utenti e programmatori tra di loro e permette pertanto l'individuazione di soluzioni innovative e migliori. @@ -116,7 +121,10 @@ Siamo presenti su [Facebook](https://www.facebook.com/openstamanager), e il nost ## Contribuire -Per poter contribuire, si consiglia di seguire le indicazioni descritte all'interno della [documentazione ufficiale](https://devcode-it.github.io/openstamanager/contribuire.html); in particolare, prestare attenzione al codice di condotta e allo stile del codice. +Per poter contribuire, si consiglia di seguire le indicazioni descritte all'interno della [documentazione ufficiale](https://devcode-it.github.io/openstamanager/contribuire.html). + +Le impostazione di base per il codice sono disponibili attraverso [editor config](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig) per l'utilizzo semplificato negli editor più comuni. +Maggiori informazioni sulla configurazione e sul plugin sono disponibili nel sito . ## Sviluppatori @@ -126,8 +134,6 @@ Per poter contribuire, si consiglia di seguire le indicazioni descritte all'inte - **Matteo Baccarin** - **Thomas Zilio** ([Dasc3er](https://github.com/Dasc3er)) -Per la lista completa delle persone che hanno partecipato al progetto, consultare la [pagina principale della documentazione](https://devcode-it.github.io/openstamanager/index.html) su Github. - ## Licenza -Questo progetto è tutelato dalla licenza **GPL 3** (si veda [LICENSE](https://github.com/devcode-it/openstamanager/blob/master/LICENSE) per ulteriori dettagli). +Questo progetto è tutelato dalla licenza [**GPL 3**](https://github.com/devcode-it/openstamanager/blob/master/LICENSE). diff --git a/ajax_autocomplete.php b/ajax_autocomplete.php index 4a85419e4..97f9502ec 100644 --- a/ajax_autocomplete.php +++ b/ajax_autocomplete.php @@ -346,7 +346,7 @@ switch ($module_name) { ($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura']; $id_module = Modules::getModule('Fatture di vendita')['id']; - echo "Fattura no ".$n_fattura."\n"; + echo "Fattura num. ".$n_fattura."\n"; echo "".Translator::dateToLocale($fatture[$i]['data_fattura'])."\n"; echo "".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €\n"; @@ -378,7 +378,7 @@ switch ($module_name) { ($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura']; $id_module = Modules::getModule('Fatture di vendita')['id']; - echo "Fattura no ".$n_fattura."\n"; + echo "Fattura num. ".$n_fattura."\n"; echo "".Translator::dateToLocale($fatture[$i]['data_fattura'])."\n"; echo "".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €\n"; @@ -409,7 +409,7 @@ switch ($module_name) { ($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura']; $id_module = Modules::getModule('Fatture di vendita')['id']; - echo "Fattura no ".$n_fattura."\n"; + echo "Fattura num. ".$n_fattura."\n"; echo "".Translator::dateToLocale($fatture[$i]['data_fattura'])."\n"; echo "".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €\n"; @@ -813,7 +813,7 @@ if ($op == 'supersearch') { } $result[$r + $i]['link'] = $rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['iddocumento']; - $result[$r + $i]['title'] = $rs[$r]['descrizione'].' no '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']); + $result[$r + $i]['title'] = $rs[$r]['descrizione'].' num. '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']); $result[$r + $i]['category'] = $rs[$r]['descrizione']; $result[$r + $i]['labels'] = []; @@ -877,7 +877,7 @@ if ($op == 'supersearch') { } $result[$r + $i]['link'] = $rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['iddocumento']; - $result[$r + $i]['title'] = $rs[$r]['tipodoc'].' no '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']); + $result[$r + $i]['title'] = $rs[$r]['tipodoc'].' num. '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']); $result[$r + $i]['category'] = $rs[$r]['tipodoc']; $result[$r + $i]['labels'] = []; @@ -1035,7 +1035,7 @@ if ($op == 'supersearch') { } $result[$r + $i]['link'] = $rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['idddt']; - $result[$r + $i]['title'] = $rs[$r]['descrizione'].' no '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']); + $result[$r + $i]['title'] = $rs[$r]['descrizione'].' num. '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']); $result[$r + $i]['category'] = $rs[$r]['descrizione']; $result[$r + $i]['labels'] = []; @@ -1100,7 +1100,7 @@ if ($op == 'supersearch') { $result[$r + $i]['link'] = $rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['idddt']; // $result[$r+$i]['link'] = $rootdir."/modules/magazzino/ddt/ddt.php?idddt=".$rs[$r]['iddocumento']."&dir=".$rs[$r]['dir']; - $result[$r + $i]['title'] = $rs[$r]['tipodoc'].' no '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']); + $result[$r + $i]['title'] = $rs[$r]['tipodoc'].' num. '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']); $result[$r + $i]['category'] = $rs[$r]['tipodoc']; $result[$r + $i]['labels'] = []; diff --git a/docs/Installazione.md b/docs/Installazione.md index c565232d9..a1a488b51 100644 --- a/docs/Installazione.md +++ b/docs/Installazione.md @@ -6,7 +6,6 @@ currentMenu: installazione -- [Tabella dei contenuti](#tabella-dei-contenuti) - [Requisiti](#requisiti) - [Installazione](#installazione) - [Versioni](#versioni) @@ -23,41 +22,46 @@ currentMenu: installazione ## Requisiti -Prima di iniziare l'installazione, è necessario procedere al download di una versione del progetto da [Github](https://github.com/devcode-it/openstamanager). Si consiglia inoltre di controllare che i prerequisiti del software, elencati di seguito, siano soddisfatti. +L'installazione del gestionale richiede la presenza di un server web con abilitato il [DBMS MySQL](https://www.mysql.com) e il linguaggio di programmazione [PHP](http://php.net). -L'installazione del gestionale richiede la presenza di un server web con abilitato il [DBMS (Database Management System)](https://it.wikipedia.org/wiki/Database_management_system) MySQL e il linguaggio di programmazione [PHP](http://php.net/). - -- PHP >= 5.4 (si consiglia come minimo la versione 5.6 per poter usufruire di tutte le funzionalità del progetto) +- PHP >= 5.4 - MySQL >= 5.0 +Per ulteriori informazioni sui pacchetti che forniscono questi elementi di default, visitare la sezione [Installazione](https://devcode-it.github.io/openstamanager/installazione.html) della documentazione. + ## Installazione Per procedere all'installazione è necessario seguire i seguenti punti: -1. Creare una cartella (ad esempio `openstamanager`) nella root del sever web installato ed estrarvi il contenuto della release scaricata. Il percorso della cartella root del server varia in base al software in utilizzo: +1. [Scaricare una release ufficiale del progetto](https://github.com/devcode-it/openstamanager/releases). +2. Creare una cartella (ad esempio `openstamanager`) nella root del sever web installato ed estrarvi il contenuto della release scaricata. Il percorso della cartella root del server varia in base al software in utilizzo: - - LAMP (`/var/www/html`); - - XAMPP (`C:/xampp/htdocs` per Windows, `/opt/lampp/htdocs/` per Linux, `/Applications/XAMPP/htdocs/` per MAC); - - WAMP (`C:\wamp\www`); - - MAMP (`C:\MAMP\htdocs` per Windows, `/Applications/MAMP/htdocs` per MAC). + - LAMP (`/var/www/html`) + - XAMPP (`C:/xampp/htdocs` per Windows, `/opt/lampp/htdocs/` per Linux, `/Applications/XAMPP/htdocs/` per MAC) + - WAMP (`C:\wamp\www`) + - MAMP (`C:\MAMP\htdocs` per Windows, `/Applications/MAMP/htdocs` per MAC) -2. Creare un database vuoto (tramite [PHPMyAdmin](http://localhost/phpmyadmin/) o riga di comando). -3. Accedere a dal vostro browser. -4. Inserire i dati per collegarsi al database e cliccare su **Installa** per completare l'installazione. +3. Creare un database vuoto (tramite [PHPMyAdmin](http://localhost/phpmyadmin/) o riga di comando). +4. Accedere a dal vostro browser. +5. Inserire i dati di configurazione per collegarsi al database. +6. Procedere all'installazione del software, cliccando sul pulsante **Installa**. **Attenzione**: è possibile che l'installazione richieda del tempo. Si consiglia pertanto di attendere almeno qualche minuto senza alcun cambiamento nella pagina di installazione (in particolare, della progress bar presente) prima di cercare una possibile soluzione nelle discussioni del forum o nella sezione dedicata. ### Versioni -Per mantenere un elevato grado di trasparenza riguardo al ciclo delle release, seguiamo le linee guida [Semantic Versioning (SemVer)](http://semver.org/) per definire le versioni del progetto. Per vedere tutte le versioni disponibili al download, visitare la [pagina relativa](https://github.com/devcode-it/openstamanager/releases) su Github (per versioni precedenti alla 2.3, visitare [SourceForge](https://sourceforge.net/projects/openstamanager/files/)). +Per mantenere un elevato grado di trasparenza riguardo al ciclo delle release, seguiamo le linee guida [Semantic Versioning (SemVer)](http://semver.org/) per definire le versioni del progetto. +Per vedere tutte le versioni disponibili al download, visitare la [pagina relativa](https://github.com/devcode-it/openstamanager/releases) su Github (per versioni precedenti alla 2.3, visitare [SourceForge](https://sourceforge.net/projects/openstamanager/files)). + +Nel caso utilizziate il programma per uso commerciale, si consiglia di scaricare le release disponibili nel sito ufficiale del progetto (), evitando di utilizzare direttamente il codice della repository. +Se siete inoltre interessati a supporto e assistenza professionali, li potete richiedere nella [sezione dedicata](http://www.openstamanager.com/per-le-aziende/). ### Github -Nel caso si stia utilizzando la versione direttamente ottenuta dalla repository di Github, è necessario eseguire i seguenti comandi da linea di comando per completare le dipendenze PHP (tramite [Composer](https://getcomposer.org/)) e gli asssets (tramite [Yarn](https://yarnpkg.com/)) del progetto. +Nel caso si stia utilizzando la versione direttamente ottenuta dalla repository di Github, è necessario eseguire i seguenti comandi da linea di comando per completare le dipendenze PHP (tramite [Composer](https://getcomposer.org)) e gli asssets (tramite [Yarn](https://yarnpkg.com)) del progetto. ```bash php composer.phar install -php composer.phar update yarn global add gulp yarn install gulp diff --git a/modules/anagrafiche/edit.php b/modules/anagrafiche/edit.php index cfb12bf48..2fd801d5f 100644 --- a/modules/anagrafiche/edit.php +++ b/modules/anagrafiche/edit.php @@ -225,7 +225,7 @@ if ($fornitore) {
- {[ "type": "text", "label": "o iscr. C.C.I.A.A.'); ?>", "name": "cciaa", "value": "$cciaa$" ]} + {[ "type": "text", "label": "", "name": "cciaa", "value": "$cciaa$" ]}
@@ -271,19 +271,19 @@ if ($fornitore) {
- {[ "type": "text", "label": "o dipendenti'); ?>", "name": "dipendenti", "value": "$dipendenti$" ]} + {[ "type": "text", "label": "", "name": "dipendenti", "value": "$dipendenti$" ]}
- {[ "type": "text", "label": "o macchine'); ?>", "name": "macchine", "value": "$macchine$" ]} + {[ "type": "text", "label": "", "name": "macchine", "value": "$macchine$" ]}
- {[ "type": "text", "label": "o iscr. tribunale'); ?>", "name": "iscrizione_tribunale", "value": "$iscrizione_tribunale$" ]} + {[ "type": "text", "label": "", "name": "iscrizione_tribunale", "value": "$iscrizione_tribunale$" ]}
- {[ "type": "text", "label": "o iscr. albo artigiani'); ?>", "name": "n_alboartigiani", "value": "$n_alboartigiani$" ]} + {[ "type": "text", "label": "", "name": "n_alboartigiani", "value": "$n_alboartigiani$" ]}
diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index 7af982a1b..5868c9309 100644 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -293,6 +293,6 @@ if ($tot > 0) { '.tr('Ci sono _NUM_ righe di documenti collegate', [ '_NUM_' => $tot, ]).'. - '.tr('Eliminando questo articolo si potrebbero verificare problemi nelle altre sezioni del gestionale!').' + '.tr('Eliminando questo elemento si potrebbero verificare problemi nelle altre sezioni del gestionale!').'
'; } diff --git a/modules/articoli/plugins/articoli.lotti.php b/modules/articoli/plugins/articoli.lotti.php index 600bae77e..12596f901 100644 --- a/modules/articoli/plugins/articoli.lotti.php +++ b/modules/articoli/plugins/articoli.lotti.php @@ -243,13 +243,13 @@ for ($i = 0; $i < count($rs2); ++$i) { $totali[] = [$data[0]['subtotale'], $data[0]['iva']]; - $numero = !empty($rs6[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero']; + $numero = !empty($data[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero']; - $text = tr('_DOC_ no _NUM_ del _DATE_', [ + $text = tr('_DOC_ num. _NUM_ del _DATE_', [ '_DOC_' => $data[0]['tipo_documento'], '_NUM_' => $numero, '_DATE_' => Translator::dateToLocale($data[0]['data']), - ]).(!empty($extra) ? ' '.$extra : ''); + ]).(!empty($extra) ? ' '.$extra : ''); echo ' '.Modules::link($module_id, $id, $text).'
'; diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index 747a0a40f..0d571f8a0 100644 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -105,10 +105,10 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$"", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
@@ -271,6 +271,7 @@ if ($records[0]['stato'] != 'Pagato') { ?>
@@ -319,7 +320,7 @@ if (!empty($records[0]['idcontratto_prev'])) { echo ' - '.Modules::link($id_module, $idcontratto_prev, tr('Contratto no _NUM_', [ + '.Modules::link($id_module, $idcontratto_prev, tr('Contratto num. _NUM_', [ '_NUM_' => $rs[0]['numero'], ]).'
'.$rs[0]['nome'].'').' @@ -367,3 +368,34 @@ if (!empty($records[0]['idcontratto_prev'])) { + +fetchArray('SELECT `co_documenti`.*, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idcontratto` = '.prepare($id_record).')'); +if (!empty($fatture)) { + echo ' +
+

'.tr('Ci sono _NUM_ documenti collegate a questo elemento', [ + '_NUM_' => count($fatture), + ]).'.

+
    '; + + foreach ($fatture as $fattura) { + $descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [ + '_DOC_' => $fattura['tipo_documento'], + '_NUM_' => !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'], + '_DATE_' => Translator::dateToLocale($fattura['data']), + ]); + + $modulo = ($fattura['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; + $id = $fattura['id']; + + echo ' +
  • '.Modules::link($modulo, $id, $descrizione).'
  • '; + } + + echo ' +
+

'.tr('Eliminando questo elemento si potrebbero verificare problemi nelle altre sezioni del gestionale!').'

+
'; +} diff --git a/modules/contratti/plugins/contratti.fatturaordiniservizio.php b/modules/contratti/plugins/contratti.fatturaordiniservizio.php index 6a93fc750..7c2509736 100644 --- a/modules/contratti/plugins/contratti.fatturaordiniservizio.php +++ b/modules/contratti/plugins/contratti.fatturaordiniservizio.php @@ -243,7 +243,7 @@ if (empty($rs)) { $numero_doc = $rsf[0]['numero']; } - $documento = Modules::link('Fatture di vendita', $rs[$i]['iddocumento'], tr('Fattura no _NUM_ del _DATE_', [ + $documento = Modules::link('Fatture di vendita', $rs[$i]['iddocumento'], tr('Fattura num. _NUM_ del _DATE_', [ '_NUM_' => $numero_doc, '_DATE_' => Translator::dateToLocale($rsf[0]['data']), ])); diff --git a/modules/contratti/plugins/contratti.ordiniservizio.php b/modules/contratti/plugins/contratti.ordiniservizio.php index 38f86849f..ea0beee4d 100644 --- a/modules/contratti/plugins/contratti.ordiniservizio.php +++ b/modules/contratti/plugins/contratti.ordiniservizio.php @@ -188,7 +188,7 @@ if (empty($rs)) { echo ' - '.Modules::link('Interventi', $r['idintervento'], tr('Intervento no _NUM_ del _DATE_', [ + '.Modules::link('Interventi', $r['idintervento'], tr('Intervento num. _NUM_ del _DATE_', [ '_NUM_' => $res['codice'], '_DATE_' => Translator::dateToLocale($r[0]['data_intervento']), ])).' diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index f76dda7b7..60b33d269 100644 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -33,7 +33,7 @@ if ($module['name'] == 'Ddt di vendita') { if ($dir == 'uscita') { echo '
- {[ "type": "span", "label": "'. tr('Numero ddt').'", "class": "text-center", "value": "$numero$" ]} + {[ "type": "span", "label": "'.tr('Numero ddt').'", "class": "text-center", "value": "$numero$" ]}
'; } ?> @@ -89,7 +89,7 @@ if ($dir == 'uscita') {
- {[ "type": "text", "label": "o colli'); ?>", "name": "n_colli", "value": "$n_colli$" ]} + {[ "type": "text", "label": "", "name": "n_colli", "value": "$n_colli$" ]}
@@ -194,3 +194,34 @@ include $docroot.'/modules/ddt/row-list.php'; + +fetchArray('SELECT `co_documenti`.*, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idddt` = '.prepare($id_record).')'); +if (!empty($fatture)) { + echo ' +
+

'.tr('Ci sono _NUM_ documenti collegate a questo elemento', [ + '_NUM_' => count($fatture), + ]).'.

+
    '; + + foreach ($fatture as $fattura) { + $descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [ + '_DOC_' => $fattura['tipo_documento'], + '_NUM_' => !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'], + '_DATE_' => Translator::dateToLocale($fattura['data']), + ]); + + $modulo = ($fattura['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; + $id = $fattura['id']; + + echo ' +
  • '.Modules::link($modulo, $id, $descrizione).'
  • '; + } + + echo ' +
+

'.tr('Eliminando questo elemento si potrebbero verificare problemi nelle altre sezioni del gestionale!').'

+
'; +} diff --git a/modules/fatture/add_serial.php b/modules/fatture/add_serial.php index 2a34197c6..fff311c1e 100644 --- a/modules/fatture/add_serial.php +++ b/modules/fatture/add_serial.php @@ -117,7 +117,7 @@ if ($dir == 'entrata') { $r = $dbo->select($data[$pos]['table'], $data[$pos]['id'], ['id' => $res[0][str_replace('id', 'id_riga_', $data[$pos]['id'])]]); echo ' - '.Modules::link($modulo, $r[0][$data[$pos]['id']], tr('Visualizza vendita').' ', null); + '.Modules::link($modulo, $r[0][$data[$pos]['id']], tr('Visualizza vendita'), null); } echo ' '; diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 69ff4888d..5569b7d19 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -144,7 +144,7 @@ if ($tipodoc == 'Fattura accompagnatoria di vendita') {
- {[ "type": "text", "label": "o colli'); ?>", "name": "n_colli", "value": "$n_colli$" ]} + {[ "type": "text", "label": "", "name": "n_colli", "value": "$n_colli$" ]}
diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index b535985d1..63bb1b88b 100644 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -145,7 +145,7 @@ if (!empty($rs)) { if (!empty($descrizione)) { echo ' -
'.Modules::link($ref, $ref_id, $descrizione.' ', $descrizione); +
'.Modules::link($ref, $ref_id, $descrizione, $descrizione); } echo ' diff --git a/modules/ordini/edit.php b/modules/ordini/edit.php index 78101cc94..68276735f 100644 --- a/modules/ordini/edit.php +++ b/modules/ordini/edit.php @@ -23,19 +23,19 @@ if ($module['name'] == 'Ordini cliente') {
- {[ "type": "text", "label": "", "name": "numero", "required": 1, "class": "text-center", "value": "$numero$" ]} + {[ "type": "text", "label": "", "name": "numero", "required": 1, "class": "text-center", "value": "$numero$" ]}
- {[ "type": "text", "label": "", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$" ]} + {[ "type": "text", "label": "", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$" ]}
- {[ "type": "date", "label": "", "maxlength": 10, "name": "data", "required": 1, "value": "$data$" ]} + {[ "type": "date", "label": "", "maxlength": 10, "name": "data", "required": 1, "value": "$data$" ]}
- {[ "type": "select", "label": "", "name": "idstatoordine", "required": 1, "values": "query=SELECT * FROM or_statiordine", "value": "$idstatoordine$" ]} + {[ "type": "select", "label": "", "name": "idstatoordine", "required": 1, "values": "query=SELECT * FROM or_statiordine", "value": "$idstatoordine$" ]}
@@ -43,22 +43,22 @@ if ($module['name'] == 'Ordini cliente') {
- {[ "type": "select", "label": "", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Cliente' AND deleted=0 ORDER BY ragione_sociale", "value": "$idanagrafica$", "ajax-source": "clienti" ]} + if ($dir == 'entrata') { + ?> + {[ "type": "select", "label": "", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Cliente' AND deleted=0 ORDER BY ragione_sociale", "value": "$idanagrafica$", "ajax-source": "clienti" ]} - {[ "type": "select", "label": "", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Fornitore' AND deleted=0 ORDER BY ragione_sociale", "value": "$idanagrafica$" ]} + } else { + ?> + {[ "type": "select", "label": "", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Fornitore' AND deleted=0 ORDER BY ragione_sociale", "value": "$idanagrafica$" ]} + + } + ?>
- {[ "type": "select", "label": "", "name": "idpagamento", "required": 1, "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento$" ]} + {[ "type": "select", "label": "", "name": "idpagamento", "required": 1, "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento$" ]}
@@ -70,7 +70,7 @@ if ($module['name'] == 'Ordini cliente') {
- {[ "type": "textarea", "label": "", "name": "note", "value": "$note$" ]} + {[ "type": "textarea", "label": "", "name": "note", "value": "$note$" ]}
@@ -91,18 +91,22 @@ if ($module['name'] == 'Ordini cliente') {
@@ -112,7 +116,7 @@ if ($module['name'] == 'Ordini cliente') {
- +
@@ -121,3 +125,40 @@ if ($module['name'] == 'Ordini cliente') { + +fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, `co_documenti`.`numero`, `co_documenti`.`numero_esterno`, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idordine` = '.prepare($id_record).') UNION +SELECT `dt_ddt`.`id`, `dt_ddt`.`data`, `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`, `dt_tipiddt`.`descrizione` AS tipo_documento, `dt_tipiddt`.`dir` FROM `dt_ddt` JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` WHERE `dt_ddt`.`id` IN (SELECT `idddt` FROM `dt_righe_ddt` WHERE `idordine` = '.prepare($id_record).')'); +if (!empty($elementi)) { + echo ' +
+

'.tr('Ci sono _NUM_ documenti collegate a questo elemento', [ + '_NUM_' => count($elementi), + ]).'.

+
    '; + + foreach ($elementi as $elemento) { + $descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [ + '_DOC_' => $elemento['tipo_documento'], + '_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'], + '_DATE_' => Translator::dateToLocale($elemento['data']), + ]); + + if (!in_array($elemento['tipo_documento'], ['Ddt di vendita', 'Ddt di acquisto'])) { + $modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; + } else { + $modulo = ($elemento['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; + } + + $id = $elemento['id']; + + echo ' +
  • '.Modules::link($modulo, $id, $descrizione).'
  • '; + } + + echo ' +
+

'.tr('Eliminando questo elemento si potrebbero verificare problemi nelle altre sezioni del gestionale!').'

+
'; +} diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php index 585be3c81..4f129cd1e 100644 --- a/modules/preventivi/edit.php +++ b/modules/preventivi/edit.php @@ -161,3 +161,34 @@ include $docroot.'/modules/preventivi/row-list.php'; + +fetchArray('SELECT `co_documenti`.*, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idpreventivo` = '.prepare($id_record).')'); +if (!empty($fatture)) { + echo ' +
+

'.tr('Ci sono _NUM_ documenti collegate a questo elemento', [ + '_NUM_' => count($fatture), + ]).'.

+
    '; + + foreach ($fatture as $fattura) { + $descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [ + '_DOC_' => $fattura['tipo_documento'], + '_NUM_' => !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'], + '_DATE_' => Translator::dateToLocale($fattura['data']), + ]); + + $modulo = ($fattura['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; + $id = $fattura['id']; + + echo ' +
  • '.Modules::link($modulo, $id, $descrizione).'
  • '; + } + + echo ' +
+

'.tr('Eliminando questo elemento si potrebbero verificare problemi nelle altre sezioni del gestionale!').'

+
'; +} diff --git a/src/Modules.php b/src/Modules.php index cd75da11a..1f1248214 100644 --- a/src/Modules.php +++ b/src/Modules.php @@ -458,9 +458,14 @@ class Modules */ public static function link($modulo, $id_record, $testo = null, $alternativo = true, $extra = null, $blank = true) { - $testo = isset($testo) ? nl2br($testo) : tr('Visualizza scheda').' '; + $testo = isset($testo) ? nl2br($testo) : tr('Visualizza scheda'); $alternativo = is_bool($alternativo) && $alternativo ? $testo : $alternativo; + // Aggiunta automatica dell'icona di riferimento + if (!str_contains($testo, ''; + } + $module = self::getModule($modulo); $extra .= !empty($blank) ? ' target="_blank"' : ''; diff --git a/templates/contratti/body.php b/templates/contratti/body.php index e7aa52053..c00f184df 100644 --- a/templates/contratti/body.php +++ b/templates/contratti/body.php @@ -16,7 +16,7 @@ echo '
- '.tr('Contratto No _NUM_ del _DATE_', [ + '.tr('Contratto Num. _NUM_ del _DATE_', [ '_NUM_' => $records[0]['numero'], '_DATE_' => Translator::dateToLocale($records[0]['data_bozza']), ], ['upper' => true]).' diff --git a/templates/ddt/body.php b/templates/ddt/body.php index 44bf8ac59..fdc7d4844 100644 --- a/templates/ddt/body.php +++ b/templates/ddt/body.php @@ -55,7 +55,7 @@ foreach ($rs_gen as $r) { $numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero']; echo ' -
'.tr('Rif. ordine no_NUM_ del _DATE_', [ +
'.tr('Rif. ordine num._NUM_ del _DATE_', [ '_NUM_' => $numero, '_DATE_' => Translator::dateToLocale($rso[0]['data']), ]).''; diff --git a/templates/ddt/footer.php b/templates/ddt/footer.php index 6051a9bb6..cbb5d6430 100644 --- a/templates/ddt/footer.php +++ b/templates/ddt/footer.php @@ -75,7 +75,7 @@ echo ' - '.tr('No colli', [], ['upper' => true]).' + '.tr('Num. colli', [], ['upper' => true]).' diff --git a/templates/fatture_accompagnatorie/pdfgen.fatture_accompagnatorie.php b/templates/fatture_accompagnatorie/pdfgen.fatture_accompagnatorie.php index b1990d8b7..6b88dcc54 100644 --- a/templates/fatture_accompagnatorie/pdfgen.fatture_accompagnatorie.php +++ b/templates/fatture_accompagnatorie/pdfgen.fatture_accompagnatorie.php @@ -103,7 +103,7 @@ if ($rs[0]['buono_ordine'] != '') { $body .= "\n"; $body .= "\n"; -$body .= "\n"; +$body .= "\n"; $body .= "\n"; $body .= "\n"; @@ -331,14 +331,14 @@ if ($tot > 0) { if (!empty($rsr[$i]['idordine'])) { $rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id="'.$rsr[$i]['idordine'].'"'); ($rso[0]['numero_esterno'] != '') ? $numero = $rso[0]['numero_esterno'] : $numero = $rso[0]['numero']; - $body .= '
Rif. ordine no'.$numero.' del '.Translator::dateToLocale($rso[0]['data']).''; + $body .= '
Rif. ordine num.'.$numero.' del '.Translator::dateToLocale($rso[0]['data']).''; } // Aggiunta riferimento a ddt elseif (!empty($rsr[$i]['idddt'])) { $rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt WHERE id="'.$rsr[$i]['idddt'].'"'); ($rso[0]['numero_esterno'] != '') ? $numero = $rso[0]['numero_esterno'] : $numero = $rso[0]['numero']; - $body .= '
Rif. ddt no'.$numero.' del '.Translator::dateToLocale($rso[0]['data']).''; + $body .= '
Rif. ddt num.'.$numero.' del '.Translator::dateToLocale($rso[0]['data']).''; } $body .= "\n"; diff --git a/templates/interventi/body.php b/templates/interventi/body.php index fd7ade232..b728fa969 100644 --- a/templates/interventi/body.php +++ b/templates/interventi/body.php @@ -18,8 +18,8 @@ echo ' - - + + '; // Dati cliente diff --git a/templates/interventi_ordiniservizio/pdfgen.interventi_ordiniservizio.php b/templates/interventi_ordiniservizio/pdfgen.interventi_ordiniservizio.php index 2a20ac529..b2f70ac93 100644 --- a/templates/interventi_ordiniservizio/pdfgen.interventi_ordiniservizio.php +++ b/templates/interventi_ordiniservizio/pdfgen.interventi_ordiniservizio.php @@ -40,7 +40,7 @@ $body .= "\n"; $body .= '\n"; $body .= "\n"; @@ -56,7 +56,7 @@ $body .= "
".$rs[0]['tipo_doc']."
no $numero
".$rs[0]['tipo_doc']."
num. $numero
Data:
".Translator::dateToLocale($rs[0]['data'])."
Pagamento:
".$rs[0]['tipo_pagamento']."
'.tr('Intervento numero').': '.$records[0]['codice'].' '.tr('Data').': '.Translator::dateToLocale($records[0]['data_richiesta']).''.tr('Preventivo No').': '.$records[0]['numero_preventivo'].''.tr('Contratto No').': '.$records[0]['numero_contratto'].''.tr('Preventivo Num.').': '.$records[0]['numero_preventivo'].''.tr('Contratto Num.').': '.$records[0]['numero_contratto'].'
\n"; +$body .= 'ORDINE DI SERVIZIO Num. '.$rs[0]['id']."TECNICO: '.$rs[0]['tecnico']."
\n"; -$body .= ' Contratto no '.$rs2[0]['numero'].":
\n"; +$body .= ' Contratto num. '.$rs2[0]['numero'].":
\n"; $body .= ' durata dal '.Translator::dateToLocale($rs2[0]['data_accettazione']).' al '.Translator::dateToLocale($rs2[0]['data_conclusione'])."
\n"; $body .= ' Tipologia: '.$rs2[0]['nome']."

\n"; diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php index ff2f2e412..b345588d9 100644 --- a/templates/preventivi/body.php +++ b/templates/preventivi/body.php @@ -16,7 +16,7 @@ echo '
- '.tr('Preventivo No _NUM_ del _DATE_', [ + '.tr('Preventivo Num. _NUM_ del _DATE_', [ '_NUM_' => $records[0]['numero'], '_DATE_' => Translator::dateToLocale($records[0]['data']), ], ['upper' => true]).'