diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 000000000..21bdc7f6e --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,67 @@ +# Contribuire + +Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto! + +Siamo entusiasti di ogni nuova contribuzione che otteniamo dalla nostra community. +Ci sono molti modi per contribuire: segnalare bug, richiedere miglioramenti, scrivere tutorial, migliorare la documentazione... + +Non serve essere degli esperti programmatori per aiutarci! :smile_cat: + +Leggi le seguenti sezioni per scoprire come ti consigliamo di procedere. +Se ti serve un aiuto, crea una issue su GitHub. + +## Linee guida + +Per migliorare il sistema con cui sviluppiamo il codice, abbiamo deciso di adottare alcune linee guida per facilitare la collaborazione tra più persone. + +### Codice di condotta + +Per il momento non abbiamo adottato un vero e proprio codice di condotta, ma ti chiediamo di essere il più civile possibile nel comunicare con gli altri per questo progetto. + +### Stile del codice + +Utilizziamo principalmente due strumenti per mantenere consistente nel tempo lo stile del codice: +- [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) +- [EditorConfig](http://editorconfig.org>) + +PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aumentare la sua comprensibilità. +La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.php_cs). + +EditorConfig viene sfruttato per mantenere la consistenza nella formattazione di base dei diversi altri file utilizzati nel progetto. +La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig). + +Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti. + +## Prima contribuzione + +Sei insicuro su cosa potresti lavorare per contribuire al progetto? + +Prova a dare un'occhiata alle issue sotto la label [nuovi contributori](https://github.com/devcode-it/openstamanager/labels/nuovi%20contributori), dove sono indicate le migliorie più semplici da applicare. + +## Problemi di sicurezza + +Se trovi un problema di sicurezza, NON aprire una issue. Inviaci un'email all'indirizzo `info at openstamanager dot com`. + +Per capire se hai individuato un problema di sicurezza, prova a farti queste domande: + +* Posso accedere a qualcosa a cui non dovrei avere accesso? +* Posso disabilitare qualcosa per altre persone? + +Se la risposta a una di queste domande è positiva, allora probabilmente hai individuato un problema di sicurezza. +Considera però che anche in caso negativo potrebbe trattarsi di un problema di questo tipo, quindi se sei insicuro contattaci comunque via email. + +## Segnalare un bug + +Se hai individuato un bug e desideri segnalarlo, apri una nuova issue provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/ISSUE_TEMPLATE.md). + +Se vuoi suggerire una miglioramento di qualche tipo oppure una nuova funzionalità, sentiti libero di aprire una issue apposita dove spieghi dettagliatamente la modifica che vorresti, la sua utilità e il suo funzionamento generale + +## Pull Request + +Se sei in grado di risolvere uno dei bug segnalati oppure vuoi completare una nuova funzionalità, apri una nuova Pull Request provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/PULL_REQUEST_TEMPLATE.md). + +## Community + +Siamo presenti su [Facebook](https://www.facebook.com/openstamanager), e il nostro forum ufficiale è disponibile all'indirizzo . + +Cerchiamo di essere disponibili quanto possibile, ma non sempre riusciamo a rispondere tempestivamente. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..1a968ebf7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,38 @@ +## Comportamento richiesto + +Descrivi il comportamento che ti aspetti dal progetto. + +## Comportamento attuale + +Qual è il comportamento attuale, e come ti aspetti che venga migliorato? + +## Possibile soluzione + +[Non obbligatorio] Hai suggerimenti su come risolvere il bug o individuarne le cause? + +## Passi per riprodurre il comportamento + +[Per i bug] Descrivi dettagliatamente i singoli passi per riprodurre il malfunzionamento. + +1. +2. +3. + +Eventuale codice rilevante: +```php +Se serve, aggiungi qui il codice che vuoi farci testare +``` + +Eventuali log relativi (cartella **logs/**): +``` +Se presenti, aggiungi qui i log relativi al malfunzionamento +``` + +## Contesto + +Inserisci le informazioni riguardanti il tuo ambiente di esecuzione. Può essere utile per individuare problemi riproducibili solo con condizioni specifiche. + +* Modulo: +* Versione del progetto: +* Versione PHP: +* Tipo di server: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..874e8c2f1 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,22 @@ +## Descrizione + +Includi un sommario dei cambiamenti introdotti, con il relativo contesto. +Elenca anche le eventuali dipendenze aggiuntive richieste per questa modifica. + +Risolve: #(issue) + +## Tipologia + +Rimuovi le opzioni non rilevanti. + +- [ ] Bug fix (cambiamenti minori che risolvono una issue) +- [ ] Nuova funzionalità (cambiamenti minori che aggiungono una nuova funzionalità) +- [ ] Cambiamento maggiore (fix o funzionalità che richiede una revisione prima di essere pubblicata) +- [ ] Questo cambiamenti richiede un aggiornamento della documentazione + +# Checklist + +- [ ] Il codice segue le linee guida del progetto +- [ ] Ho commentato il codice, in particolare nelle parti più complesse +- [ ] Ho aggiornato di conseguenza la documentazione (se presente) +- [ ] Il codice non genera warnings diff --git a/.php_cs b/.php_cs index eb4a92954..6781b979b 100644 --- a/.php_cs +++ b/.php_cs @@ -14,6 +14,7 @@ $config = PhpCsFixer\Config::create() ->setRules([ '@Symfony' => true, 'array_syntax' => ['syntax' => 'short'], + 'yoda_style' => false, ]) ->setFinder($finder); diff --git a/CHANGELOG.md b/CHANGELOG.md index e52248ce8..28546116c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo file. Per informazioni più dettagliate, consultare il log GIT della repository su Github. +Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo file. Per informazioni più dettagliate, consultare il log GIT della repository su GitHub. Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release. diff --git a/README.md b/README.md index 866dc25a7..54f40580b 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ La documentazione ufficiale è disponibile all'indirizzo ), 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 +### 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 assets (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 assets (tramite [Yarn](https://yarnpkg.com)) del progetto. ```bash php composer.phar install diff --git a/ajax_dataload.php b/ajax_dataload.php index 92178f71c..0cd3dc021 100644 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -126,7 +126,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom } // Allineamento al centro se il valore della prima riga risulta relativo a date o icone - elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icontr(.+?)$/', $field)) { + elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icon_(.+?)$/', $field)) { $align[$field] = 'text-center'; } } @@ -162,7 +162,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom } // Icona - if (preg_match('/^colortr(.+?)$/', $field, $m)) { + if (preg_match('/^color_(.+?)$/', $field, $m)) { $value = $r['color_title_'.$m[1]] ?: ''; $column['class'] = 'text-center small'; diff --git a/docs/Contribuire.md b/docs/Contribuire.md index 74f78a6ed..9a19cb6cc 100644 --- a/docs/Contribuire.md +++ b/docs/Contribuire.md @@ -4,7 +4,81 @@ currentMenu: contribuire # Contribuire +Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto! + +Siamo entusiasti di ogni nuova contribuzione che otteniamo dalla nostra community. +Ci sono molti modi per contribuire: segnalare bug, richiedere miglioramenti, scrivere tutorial, migliorare la documentazione... + +Non serve essere degli esperti programmatori per aiutarci! :smile_cat: + +Leggi le seguenti sezioni per scoprire come ti consigliamo di procedere. +Se ti serve un aiuto, crea una issue su GitHub. + +- [Linee guida](#linee-guida) + - [Codice di condotta](#codice-di-condotta) + - [Stile del codice](#stile-del-codice) +- [Prima contribuzione](#prima-contribuzione) +- [Problemi di sicurezza](#problemi-di-sicurezza) +- [Segnalare un bug](#segnalare-un-bug) +- [Pull Request](#pull-request) +- [Community](#community) + +## Linee guida + +Per migliorare il sistema con cui sviluppiamo il codice, abbiamo deciso di adottare alcune linee guida per facilitare la collaborazione tra più persone. + +### Codice di condotta + +Per il momento non abbiamo adottato un vero e proprio codice di condotta, ma ti chiediamo di essere il più civile possibile nel comunicare con gli altri per questo progetto. + +### Stile del codice + +Utilizziamo principalmente due strumenti per mantenere consistente nel tempo lo stile del codice: +- [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) +- [EditorConfig](http://editorconfig.org>) + +PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aumentare la sua comprensibilità. +La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.php_cs). + +EditorConfig viene sfruttato per mantenere la consistenza nella formattazione di base dei diversi altri file utilizzati nel progetto. +La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig). + +Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti. + +## Prima contribuzione + +Sei insicuro su cosa potresti lavorare per contribuire al progetto? + +Prova a dare un'occhiata alle issue sotto la label [nuovi contributori](https://github.com/devcode-it/openstamanager/labels/nuovi%20contributori), dove sono indicate le migliorie più semplici da applicare. + +## Problemi di sicurezza + +Se trovi un problema di sicurezza, NON aprire una issue. Inviaci un'email all'indirizzo `info at openstamanager dot com`. + +Per capire se hai individuato un problema di sicurezza, prova a farti queste domande: + +* Posso accedere a qualcosa a cui non dovrei avere accesso? +* Posso disabilitare qualcosa per altre persone? + +Se la risposta a una di queste domande è positiva, allora probabilmente hai individuato un problema di sicurezza. +Considera però che anche in caso negativo potrebbe trattarsi di un problema di questo tipo, quindi se sei insicuro contattaci comunque via email. + +## Segnalare un bug + +Se hai individuato un bug e desideri segnalarlo, apri una nuova issue provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/ISSUE_TEMPLATE.md). + +Se vuoi suggerire una miglioramento di qualche tipo oppure una nuova funzionalità, sentiti libero di aprire una issue apposita dove spieghi dettagliatamente la modifica che vorresti, la sua utilità e il suo funzionamento generale + +## Pull Request + +Se sei in grado di risolvere uno dei bug segnalati oppure vuoi completare una nuova funzionalità, apri una nuova Pull Request provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/PULL_REQUEST_TEMPLATE.md). + +## Community + +Siamo presenti su [Facebook](https://www.facebook.com/openstamanager), e il nostro forum ufficiale è disponibile all'indirizzo . + +Cerchiamo di essere disponibili quanto possibile, ma non sempre riusciamo a rispondere tempestivamente. diff --git a/docs/Framework.md b/docs/Framework.md index 973ed3d82..fd0d93907 100644 --- a/docs/Framework.md +++ b/docs/Framework.md @@ -70,4 +70,4 @@ Per ulteriori informazioni, consultare la [documentazione ufficiale di Composer] - symfony/finder - symfony/translation -_I nomi sono indicati secondo la notazione tipica dei progetti pubblici su Github._ +_I nomi sono indicati secondo la notazione tipica dei progetti pubblici su GitHub._ diff --git a/docs/Installazione.md b/docs/Installazione.md index 9c5cfb187..b59bbeeec 100644 --- a/docs/Installazione.md +++ b/docs/Installazione.md @@ -7,7 +7,7 @@ currentMenu: installazione - [Requisiti](#requisiti) - [Installazione](#installazione) - [Versioni](#versioni) - - [Github](#github) + - [GitHub](#github) - [Strumenti utili](#strumenti-utili) - [Windows](#windows) - [Linux](#linux) @@ -47,14 +47,14 @@ Per procedere all'installazione è necessario seguire i seguenti punti: ### 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 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 +### 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 assets (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 assets (tramite [Yarn](https://yarnpkg.com)) del progetto. ```bash php composer.phar install diff --git a/editor.php b/editor.php index 13aaa7854..8ce69adf9 100755 --- a/editor.php +++ b/editor.php @@ -73,7 +73,7 @@ if (empty($records)) { '.tr("Torna all'elenco").' '; - $plugins = $dbo->fetchArray('SELECT id, title FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab' AND enabled = 1"); + $plugins = $dbo->fetchArray('SELECT id, title FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab' AND enabled = 1 ORDER BY zz_plugins.order DESC"); foreach ($plugins as $plugin) { echo ' diff --git a/files/.htaccess b/files/.htaccess index 521aa7bf2..5520a48f5 100644 --- a/files/.htaccess +++ b/files/.htaccess @@ -1,5 +1,7 @@ # Disable PHP rendering -php_flag engine off - -## Options -ExecCGI -AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi + + php_flag engine off + + + php_flag engine off + diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index 781893920..169063b28 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -156,7 +156,7 @@ switch (post('op')) { // Lettura iva dell'articolo $rs2 = $dbo->fetchArray('SELECT percentuale, descrizione, indetraibile FROM co_iva WHERE id='.prepare($idiva)); - $iva = ($prezzo - $sconto) / 100 * $rs2[0]['percentuale']; + $iva = ($prezzo*$qta - $sconto) / 100 * $rs2[0]['percentuale']; $iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile']; $desc_iva = $rs2[0]['descrizione']; diff --git a/modules/contratti/plugins/addpianficazione.php b/modules/contratti/plugins/addpianficazione.php new file mode 100644 index 000000000..f7b995bf1 --- /dev/null +++ b/modules/contratti/plugins/addpianficazione.php @@ -0,0 +1,134 @@ + + +$idcontratto_riga = $get['idcontratto_riga']; +$qp = 'SELECT *, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga; +$rsp = $dbo->fetchArray($qp); + +$data_richiesta = readDate($rsp[0]['data_richiesta']); + +$orario_inizio = '09:00'; +$orario_fine = '17:00'; + +echo ' +
+ + + +
+ + +
+ {[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$rsp[0]['idtipointervento'].'", "extra": "disabled" ]} +
+ + +
+ {[ "type": "number", "label": "'.tr('Intervallo').'", "name": "intervallo", "class": "", "decimals": 0, "required": 1, "icon-after": "GG", "min-value": "1" ]} +
+ + + +
+ +
+ +
+ {[ "type": "textarea", "label": "'.tr('Descrizione').'", "placeholder": "'.tr('Descrizione').'", "name": "richiesta", "extra": "readonly", "value": "'.$rsp[0]['richiesta'].'" ]} +
+ +
+ + +
+ + + + + +'; + +?> + +
+ {[ "type": "select", "label": "", "name": "parti_da_oggi", "values": "list= \"0\":\"\", \"1\":\"\"", "value": "" ]} +
+ + + {[ "type": "date", "label": "'.tr('Fine pianificazione (Data conclusione contratto)').'", "name": "data_conclusione", "extra": "readonly", "value": "'.$rsp[0]['data_conclusione'].'" ]} +
+ + + + +
+ +
+ {[ "type": "checkbox", "label": "'.tr('Pianifica intervento').'", "name": "pianifica_intervento", "value": "0", "help": "", "placeholder": "'.tr('Pianificare anche gli interventi ').'" ]} +
+ +
+ {[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "required": 0, "ajax-source": "tecnici", "value": "", "extra": "disabled" ]} +
+ + +
+ {[ "type": "time", "label": "'.tr('Orario inizio').'", "name": "orario_inizio", "required": 0, "value": "'.$orario_inizio.'", "extra": "disabled" ]} +
+ +
+ {[ "type": "time", "label": "'.tr('Orario fine').'", "name": "orario_fine", "required": 0, "value": "'.$orario_fine.'", "extra": "disabled" ]} +
+ + + + +
+ + + + + +
+
+ +
+
+ + +
'; + +echo ' + '; + +echo ' + '; \ No newline at end of file diff --git a/modules/contratti/plugins/contratti.pianificazioneinterventi.php b/modules/contratti/plugins/contratti.pianificazioneinterventi.php index f24eca427..03cdef60c 100644 --- a/modules/contratti/plugins/contratti.pianificazioneinterventi.php +++ b/modules/contratti/plugins/contratti.pianificazioneinterventi.php @@ -31,6 +31,170 @@ switch (filter('op')) { redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin); break; + + + + //pianificazione + case 'pianificazione': + + $idcontratto_riga = filter('idcontratto_riga'); + $intervallo = filter('intervallo'); + $parti_da_oggi = post('parti_da_oggi'); + + if (!empty($idcontratto_riga) and !empty($intervallo) ){ + + $qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_record.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga; + $rsp = $dbo->fetchArray($qp); + + $idtipointervento = $rsp[0]['idtipointervento']; + $idsede = $rsp[0]['idsede']; + $richiesta = $rsp[0]['richiesta']; + + //mi serve per la pianificazione interventi + $idanagrafica = $rsp[0]['idanagrafica']; + + $data_conclusione = $rsp[0]['data_conclusione']; + $data_richiesta = $rsp[0]['data_richiesta']; + + + //se voglio pianificare anche le date precedenti ad oggi (parto da questo promemoria) + if ($parti_da_oggi){ + + //oggi + $min_date = date('Y-m-d'); + + + }else{ + + $min_date = date('Y-m-d', strtotime($data_richiesta)); + + } + + //inizio controllo data_conclusione, data valida e maggiore della $min_date + if ( (date('Y', strtotime($data_conclusione)) > 1970) and (date('Y-m-d', strtotime($min_date)) < date('Y-m-d', strtotime($data_conclusione))) ) { + + //Ciclo partendo dalla data_richiesta fino all data conclusione del contratto + while ( date('Y-m-d', strtotime($data_richiesta)) < date('Y-m-d', strtotime($data_conclusione)) ){ + + //calcolo nuova data richiesta + $data_richiesta = date('Y-m-d', strtotime($data_richiesta. " + ".intval($intervallo)." days") ); + + + //controllo nuova data richiesta --> solo date maggiori o uguali di [oggi o data richiesta iniziale] ma che non superano la data di fine del contratto + if ( (date('Y-m-d', strtotime($data_richiesta)) >= $min_date ) and (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione))) ){ + + //Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta. + if ( count($dbo->fetchArray("SELECT id FROM co_righe_contratti WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0 ){ + + $query = 'INSERT INTO `co_righe_contratti`(`idcontratto`, `idtipointervento`, `data_richiesta`, `richiesta`, `idsede`) VALUES('.prepare($id_record).', '.prepare($idtipointervento).', '.prepare($data_richiesta).', '.prepare($richiesta).', '.prepare($idsede).')'; + + if ($dbo->query($query)) { + + $idriga = $dbo->lastInsertedID(); + + $_SESSION['infos'][] = tr('Promemoria intervento pianificato!'); + + + //pianificare anche l' intervento? + if ($post['pianifica_intervento']){ + + /*$orario_inizio = post('orario_inizio'); + $orario_fine = post('orario_fine');*/ + + //$idanagrafica = 2; + + //intervento sempre nello stato "In programmazione" + $idstatointervento = 'WIP'; + + //calcolo codice intervento + $formato = get_var('Formato codice intervento'); + $template = str_replace('#', '%', $formato); + + $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice=(SELECT MAX(CAST(codice AS SIGNED)) FROM in_interventi) AND codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1'); + $codice = get_next_code($rs[0]['codice'], 1, $formato); + + if (empty($codice)) { + $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1'); + + $codice = get_next_code($rs[0]['codice'], 1, $formato); + } + + + + // Creo intervento + $dbo->insert('in_interventi', [ + 'idanagrafica' => $idanagrafica, + 'idclientefinale' => post('idclientefinale') ?: 0, + 'idstatointervento' => $idstatointervento, + 'idtipointervento' => $idtipointervento, + 'idsede' => $idsede ?: 0, + 'idautomezzo' => $idautomezzo ?: 0, + + 'codice' => $codice, + 'data_richiesta' => $data_richiesta, + 'richiesta' => $richiesta, + ]); + + $idintervento = $dbo->lastInsertedID(); + + + + $idtecnici = post('idtecnico'); + + //aggiungo i tecnici + foreach ($idtecnici as $idtecnico) { + add_tecnico($idintervento, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine'), $id_record); + } + + //collego l'intervento ai promemoria + $dbo->query('UPDATE co_righe_contratti SET idintervento='.prepare($idintervento).' WHERE id='.prepare($idriga)); + + // $_SESSION['infos'][] = tr('Intervento '.$codice.' pianificato correttamente.'); + + $_SESSION['infos'][] = tr('Interventi pianificati correttamente.'); + + + } + //fine if pianificazione intervento + + + }else{ + + $_SESSION['errors'][] = tr('Errore durante esecuzione query di pianificazione. #'.$idcontratto_riga); + + } + + }else{ + + $_SESSION['warnings'][] = tr("Esiste già un promemoria pianificato per il ".readDate($data_richiesta)."."); + + + } + + } + //fine controllo nuova data richiesta + + } + //fine ciclo while + + }else{ + + $_SESSION['errors'][] = tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria.'); + + } + //fine controllo data_conclusione + + + }else{ + + $_SESSION['errors'][] = tr('Errore durante la pianificazione. #'.$idcontratto_riga); + + } + + redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin); + break; + + } // Righe già inserite @@ -84,27 +248,44 @@ if (count($rsp) != 0) { '_NUM_' => $rsp2[0]['codice'], '_DATE_' => Translator::dateToLocale($rsp2[0]['data']), ])); + + $disabled = 'disabled'; + } else { $info_intervento = '- '.('Nessuno').' -'; + $disabled = ''; } + + + if (date('Y', strtotime($records[0]['data_conclusione']))<1971){ + $records[0]['data_conclusione'] = ''; + } echo ' - '.Translator::dateToLocale($rsp[$i]['data_richiesta']).' + '.Translator::dateToLocale($rsp[$i]['data_richiesta']).' '.$rsp[$i]['tipointervento'].' '.nl2br($rsp[$i]['richiesta']).' '.$info_intervento.' '.$info_sede.' '; + + + + echo ' + '; + + + + + + echo ' + '; - if (empty($rsp[$i]['idintervento'])) { - echo ' - '; + echo ' + '; - echo ' - '; - } echo ' '; diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php index 3cd4b6ff0..9453abc5a 100644 --- a/modules/ddt/actions.php +++ b/modules/ddt/actions.php @@ -232,10 +232,9 @@ switch (post('op')) { $id_record = $dbo->lastInsertedID(); // Lettura di tutte le righe della tabella in arrivo - foreach ($post['qta_da_evadere'] AS $idriga=>$value) { + foreach ($post['qta_da_evadere'] as $idriga => $value) { // Processo solo le righe da evadere if ($post['evadere'][$idriga] == 'on') { - $idarticolo = post('idarticolo')[$idriga]; $descrizione = post('descrizione')[$idriga]; @@ -382,7 +381,7 @@ switch (post('op')) { // Se c'è un collegamento ad un ordine, aggiorno la quantità evasa if (!empty($idddt)) { - $dbo->query( 'UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$old_qta.' + '.$qta.' WHERE descrizione='.prepare($rs[0]['descrizione']).' AND idarticolo='.prepare($rs[0]['idarticolo']).' AND idordine='.prepare($idordine).' AND idiva='.prepare($rs[0]['idiva']) ); + $dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$old_qta.' + '.$qta.' WHERE descrizione='.prepare($rs[0]['descrizione']).' AND idarticolo='.prepare($rs[0]['idarticolo']).' AND idordine='.prepare($idordine).' AND idiva='.prepare($rs[0]['idiva'])); } // Calcolo iva @@ -393,9 +392,9 @@ switch (post('op')) { $desc_iva = $rs[0]['descrizione']; // Modifica riga generica sul ddt - if($is_descrizione==0){ + if ($is_descrizione == 0) { $query = 'UPDATE dt_righe_ddt SET idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga); - }else{ + } else { $query = 'UPDATE dt_righe_ddt SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga); } if ($dbo->query($query)) { @@ -496,11 +495,11 @@ switch (post('op')) { } // Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase -if( !empty($id_record) ){ - $rs = $dbo->fetchArray( 'SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record) ); +if (!empty($id_record)) { + $rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record)); - for( $i=0; $iquery( 'UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'")' ); + for ($i = 0; $i < sizeof($rs); ++$i) { + $dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine'])); } } diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 71752a14f..e60aa59b8 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -293,29 +293,40 @@ switch (post('op')) { $idanagrafica = $rs[0]['idanagrafica']; $data = $rs[0]['data']; $codice = $rs[0]['codice']; + + //Fatturo le ore di lavoro raggruppate per costo orario + $rst = $dbo->fetchArray('SELECT SUM( ROUND( TIMESTAMPDIFF( MINUTE, orario_inizio, orario_fine ) / 60, '.get_var('Cifre decimali per quantità').' ) ) AS tot_ore, SUM(prezzo_ore_consuntivo) AS tot_prezzo_ore_consuntivo, prezzo_ore_unitario FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).' GROUP BY prezzo_ore_unitario'); + + //Aggiunta riga intervento sul documento + for( $i=0; $ifetchArray($query); + + $sconto = $rst[$i]['sconto']; + $subtot = $rst[$i]['tot_prezzo_ore_consuntivo']; + $iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; + $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; + $desc_iva = $rs[0]['descrizione']; + + // Calcolo rivalsa inps + $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS')); + $rs = $dbo->fetchArray($query); + $rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; + + // Calcolo ritenuta d'acconto + $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); + $rs = $dbo->fetchArray($query); + $ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale']; + + $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; + $dbo->query($query); + } $costi_intervento = get_costi_intervento($idintervento); - // Calcolo iva - $query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva); - $rs = $dbo->fetchArray($query); - - $sconto = $costi_intervento['manodopera_addebito'] - $costi_intervento['manodopera_scontato']; - $subtot = $costi_intervento['manodopera_addebito']; - $iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; - $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; - $desc_iva = $rs[0]['descrizione']; - - // Calcolo rivalsa inps - $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS')); - $rs = $dbo->fetchArray($query); - $rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; - - // Calcolo ritenuta d'acconto - $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); - $rs = $dbo->fetchArray($query); - $ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale']; - // Aggiunta diritto di chiamata (se presente) come riga a parte $diritto_chiamata = $costi_intervento['dirittochiamata_addebito']; @@ -1328,7 +1339,7 @@ if (!empty($id_record)) { $rs = $dbo->fetchArray('SELECT idddt FROM co_righe_documenti WHERE iddocumento='.prepare($id_record)); for ($i = 0; $i < sizeof($rs); ++$i) { - $dbo->query('UPDATE dt_ddt SET idstatoddt=(SELECT id FROM dt_statiddt WHERE descrizione="'.get_stato_ddt($rs[$i]['idddt']).'")'); + $dbo->query('UPDATE dt_ddt SET idstatoddt=(SELECT id FROM dt_statiddt WHERE descrizione="'.get_stato_ddt($rs[$i]['idddt']).'") WHERE id = '.prepare($rs[$i]['idddt'])); } } @@ -1337,7 +1348,7 @@ if (!empty($id_record)) { $rs = $dbo->fetchArray('SELECT idordine FROM co_righe_documenti WHERE iddocumento='.prepare($id_record)); for ($i = 0; $i < sizeof($rs); ++$i) { - $dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'")'); + $dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine'])); } } diff --git a/modules/fatture/add_ddt.php b/modules/fatture/add_ddt.php index 2118de6c1..f49d846e5 100644 --- a/modules/fatture/add_ddt.php +++ b/modules/fatture/add_ddt.php @@ -19,7 +19,7 @@ $idanagrafica = $record[0]['idanagrafica']; echo '
- {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_ddt", "required": 1, "values": "query=SELECT dt_ddt.id, CONCAT(\'nr. \', IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM dt_ddt WHERE idanagrafica='.prepare($idanagrafica).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione=\'Bozza\') AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]} + {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_ddt", "required": 1, "values": "query=SELECT dt_ddt.id, CONCAT(\'nr. \', IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM dt_ddt WHERE idanagrafica='.prepare($idanagrafica).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
'; diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 374e435f7..19b40e35e 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -283,7 +283,7 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') { '; // Lettura ddt - $qd = 'SELECT id FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione=\'Bozza\') AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)'; + $qd = 'SELECT id FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)'; $ddt = $dbo->fetchNum($qd); echo ' diff --git a/modules/primanota/actions.php b/modules/primanota/actions.php index 974866812..dc5f39ec9 100644 --- a/modules/primanota/actions.php +++ b/modules/primanota/actions.php @@ -242,36 +242,42 @@ switch (post('op')) { for ($i = 0; $i < sizeof($rs); ++$i) { if (abs($rimanente) > 0) { - if (abs($rs[$i]['da_pagare']) >= abs($rimanente)) { - $query2 = 'SELECT pagato FROM co_scadenziario WHERE id='.prepare($rs[$i]['id']); - $rs2 = $dbo->fetchArray($query2); - $pagato = $rs2[0]['pagato']; - ($pagato < 0) ? $sign = -1 : $sign = 1; - $new_value = ((abs($pagato) - abs($rimanente)) * $sign); + if (abs($rs[$i]['pagato']) >= abs($rimanente)) { + $query2 = 'SELECT pagato FROM co_scadenziario WHERE id='.prepare($rs[$i]['id']); + $rs2 = $dbo->fetchArray($query2); + $pagato = $rs2[0]['pagato']; + + ($pagato < 0) ? $sign = -1 : $sign = 1; + $new_value = ((abs($pagato) - abs($rimanente)) * $sign); - // Se resta ancora un po' di pagato cambio solo l'importo... - if ($new_value > 0) { - $dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).' WHERE id='.prepare($rs[$i]['id'])); + // Se resta ancora un po' di pagato cambio solo l'importo... + if ($new_value > 0) { + $dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).' WHERE id='.prepare($rs[$i]['id'])); + } + + // ...se l'importo è a zero, azzero anche la data di pagamento + else { + $dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).", data_pagamento='0000-00-00' WHERE id=".prepare($rs[$i]['id'])); + } + + $rimanente = 0; + } else { + $dbo->query("UPDATE co_scadenziario SET pagato='0', data_pagamento='0000-00-00' WHERE id=".prepare($rs[$i]['id'])); + $rimanente -= abs($rs[$i]['pagato']); } - - // ...se l'importo è a zero, azzero anche la data di pagamento - else { - $dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).", data_pagamento='0000-00-00' WHERE id=".prepare($rs[$i]['id'])); - } - - $rimanente = 0; - } else { - $dbo->query("UPDATE co_scadenziario SET pagato='0' WHERE id=".prepare($rs[$i]['id'])); - $rimanente -= abs($rs[$i]['da_pagare']); - } } } // Eliminazione prima nota $dbo->query('DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1'); - // Aggiorno lo stato della fattura a "Emessa" - $dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento)); + // Aggiorno lo stato della fattura a "Emessa" o "Parzialmente pagato" + $rs_pagamenti = $dbo->fetchArray("SELECT SUM(pagato) AS pagato FROM co_scadenziario WHERE iddocumento='".$iddocumento."'"); + if($rs_pagamenti[0]['pagato']>0){ + $dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Parzialmente pagato') WHERE id=".prepare($iddocumento)); + }else{ + $dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento)); + } // Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono $query = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL'; diff --git a/update/2_2.sql b/update/2_2.sql index 7e687a6ab..79ad451d1 100644 --- a/update/2_2.sql +++ b/update/2_2.sql @@ -50,7 +50,6 @@ UPDATE `zz_modules` SET `options` = '{ "main_query": [ { "type": "table", "field UPDATE `zz_modules` SET `options` = '{ "main_query": [ { "type": "table", "fields": "Documento, Anagrafica, Tipo di pagamento, Data emissione, Data scadenza, Importo, Pagato", "query": "SELECT co_scadenziario.id AS id, ragione_sociale AS `Anagrafica`, co_pagamenti.descrizione AS `Tipo di pagamento`, CONCAT(co_tipidocumento.descrizione, CONCAT('' numero '', IF(numero_esterno<>'''', numero_esterno, numero))) AS `Documento`, DATE_FORMAT(data_emissione, ''%d/%m/%Y'') AS `Data emissione`, DATE_FORMAT(scadenza, ''%d/%m/%Y'') AS `Data scadenza`, REPLACE(REPLACE(REPLACE(FORMAT(da_pagare, 2), '','', ''#''), ''.'', '',''), ''#'', ''.'') AS `Importo`, REPLACE(REPLACE(REPLACE(FORMAT(pagato, 2), '','', ''#''), ''.'', '',''), ''#'', ''.'') AS `Pagato`, IF(scadenza0', '#A15D2D', 'fa fa-money', '', '', '', '', 'Valore magazzino', '1', '1'); INSERT INTO `zz_widget_modules` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`) VALUES (NULL, 'Articoli in magazzino', 'stats', '21', 'controller_right', 'col-md-12', 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT (SUM(qta),2), ",", "#"), ".", ","), "#", "."), "unità") AS dato FROM mg_articoli WHERE qta>0', '#45A9F1', 'fa fa-check-square-o', '', '', '', '', 'Articoli in magazzino', '1', '1'); -- Controllo scadenze per contratti con data conclusione > 1970 UPDATE `zz_widget_modules` SET `query` = 'SELECT COUNT(id) AS dato FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE descrizione="Accettato" OR descrizione="In lavorazione" OR descrizione="In attesa di pagamento") AND rinnovabile=1 AND NOW() > DATE_ADD(data_conclusione, INTERVAL -ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970' WHERE `zz_widget_modules`.`name` = 'Contratti in scadenza'; --- aumento dimensione campo descrizione su co_pagamenti +-- Aumento dimensione campo descrizione su co_pagamenti ALTER TABLE `co_pagamenti` CHANGE `descrizione` `descrizione` VARCHAR(255) NOT NULL; -- Aggiunta filtro su MyImpianti per mostrare solo quelli del cliente loggato @@ -145,12 +137,10 @@ ALTER TABLE `co_righe2_contratti` ADD `iva_indetraibile` DECIMAL(12, 4) NOT NULL -- Aggiunto stato concluso anche ai contratti INSERT INTO `co_staticontratti` (`id`, `descrizione`, `icona`, `completato`, `annullato`) VALUES (NULL, 'Concluso', 'fa fa-2x fa-check text-success', '0', '0'); - -- Aggiunto modulo per gestire componenti -- (SELECT `id` FROM `zz_modules` WHERE `name`='MyImpianti') INSERT INTO `zz_modules` (`id`, `name`, `name2`, `module_dir`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `level`, `parent`, `default`, `enabled`, `type`, `new`) VALUES (NULL, 'Gestione componenti', '', 'gestione_componenti', '{ "main_query": [ { "type": "custom" } ]}', '', 'fa fa-external-link', '2.2', '2.2', '0', '1', '30', '1', '1', 'menu', '0'); -UPDATE `zz_modules` SET `parent` = (SELECT `id` FROM (SELECT * FROM zz_modules) AS table1 WHERE `name`='MyImpianti') WHERE `zz_modules`.`name` = 'Gestione componenti'; - +UPDATE `zz_modules` `t1` INNER JOIN `zz_modules` `t2` ON (`t1`.`name` = 'Gestione componenti' AND `t2`.`name` = 'MyImpianti') SET `t1`.`parent` = `t2`.`id`; -- Aggiunti campi per gestire firma rapportini ALTER TABLE `in_interventi` ADD `firma_file` varchar(255) NOT NULL AFTER `ora_sla`; @@ -173,7 +163,6 @@ CREATE TABLE IF NOT EXISTS `my_componenti_interventi` ( -- Aggiunto campo prc_guadagno in co_righe_preventivi ALTER TABLE `co_righe_preventivi` ADD `prc_guadagno` DECIMAL(5,2) NOT NULL AFTER `sconto`; - -- 2016-11-09 (r1509) CREATE TABLE IF NOT EXISTS `co_contratti_tipiintervento` ( `idcontratto` int(11) NOT NULL,