diff --git a/ajax_dataload.php b/ajax_dataload.php
index 92178f71c..c8c9741bd 100644
--- a/ajax_dataload.php
+++ b/ajax_dataload.php
@@ -80,7 +80,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom
unset($pieces[$cont - 1]);
}
- $module_query = implode('ORDER', $pieces).' ORDER BY `'.$total['order_by'][$order['column']].'` '.$order['dir'];
+ $module_query = implode('ORDER', $pieces).' ORDER BY '.$total['order_by'][$order['column']].' '.$order['dir'];
}
// Calcolo di eventuali somme
@@ -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/ajax_select.php b/ajax_select.php
index 366e76edf..4ca1eaa1d 100644
--- a/ajax_select.php
+++ b/ajax_select.php
@@ -231,9 +231,9 @@ switch ($op) {
$filter[] = 'mg_articoli.id='.prepare($element);
}
- $where[] = 'attivo=1';
+ $where[] = 'attivo = 1';
if (!empty($superselect['dir']) && $superselect['dir'] == 'entrata') {
- //$where[] = 'qta>0';
+ //$where[] = '(qta > 0 OR servizio = 1)';
}
if (!empty($search)) {
@@ -241,7 +241,6 @@ switch ($op) {
$search_fields[] = 'mg_articoli.codice LIKE '.prepare('%'.$search.'%');
}
- $wh = '';
if (!empty($search_fields)) {
$where[] = '('.implode(' OR ', $search_fields).')';
}
@@ -250,6 +249,7 @@ switch ($op) {
$where[] = '('.implode(' OR ', $filter).')';
}
+ $wh = '';
if (count($where) != 0) {
$wh = 'WHERE '.implode(' AND ', $where);
}
diff --git a/composer.json b/composer.json
index 8353bf9a3..c22a5ac6a 100644
--- a/composer.json
+++ b/composer.json
@@ -23,6 +23,10 @@
"type": "project",
"require": {
"php": ">=5.6",
+
+ "ext-mbstring": "*",
+ "ext-pdo_mysql": "*",
+
"aluguest/ical-easy-reader": "^1.5",
"danielstjules/stringy": "^3.1",
"ezyang/htmlpurifier": "^4.8",
@@ -41,6 +45,9 @@
"symfony/translation": "^3.3",
"symfony/var-dumper": "^3.3"
},
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.10"
+ },
"autoload": {
"psr-4": {
"": "src/"
diff --git a/couscous.yml b/couscous.yml
index b01269b14..423fa6d15 100644
--- a/couscous.yml
+++ b/couscous.yml
@@ -40,6 +40,9 @@ menu:
api:
text: API
relativeUrl: api.html
+ contribuire:
+ text: Contribuire
+ relativeUrl: contributing.html
structure:
name: Approfondimenti
items:
diff --git a/.github/CONTRIBUTING.md b/docs/CONTRIBUTING.md
similarity index 95%
rename from .github/CONTRIBUTING.md
rename to docs/CONTRIBUTING.md
index 21bdc7f6e..49625e5b9 100644
--- a/.github/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -1,3 +1,7 @@
+---
+currentMenu: contribuire
+---
+
# Contribuire
Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto!
@@ -28,7 +32,7 @@ PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aum
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).
+La configurazione può essere trovata nel file [.editorconfig](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig).
Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti.
diff --git a/docs/Contribuire.md b/docs/Contribuire.md
deleted file mode 100644
index 9a19cb6cc..000000000
--- a/docs/Contribuire.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-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/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/articoli/modutil.php b/modules/articoli/modutil.php
index 73f71e13f..dabab38f7 100644
--- a/modules/articoli/modutil.php
+++ b/modules/articoli/modutil.php
@@ -12,7 +12,7 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '
if (empty($qta)) {
return false;
}
-
+
//Info Articolo
$rs_art = $dbo->fetchArray("SELECT * FROM mg_articoli WHERE id='".$idarticolo."'");
@@ -79,9 +79,9 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '
$movimento = str_replace(['_NAME_', '_TYPE_', '_NUM_'], [$nome, $tipo, $numero], $movimento);
$new = ($qta > 0 ? '+' : '').$qta;
-
+
//Movimento il magazzino solo se l'articolo non è un servizio
- if($rs_art[0]['servizio']==0){
+ if ($rs_art[0]['servizio'] == 0) {
// Movimentazione effettiva
if (empty($array['idintervento']) || empty($array['idautomezzo'])) {
$dbo->query('UPDATE mg_articoli SET qta = qta + '.$new.' WHERE id = '.prepare($idarticolo));
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 '
+
';
+
+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 '