1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2024-12-25 15:22:24 +01:00

Introduzione della nuova struttura AJAX

Introduzione della nuova struttura AJAX per la gestione automatica e modulare del sistema di ricerca e del completamente automatico.
Miglioramenti nella gestione dei permessi.
This commit is contained in:
Thomas Zilio 2018-02-03 16:29:53 +01:00
parent 3ca9156741
commit 9c2d1fa607
20 changed files with 975 additions and 1250 deletions

File diff suppressed because it is too large Load Diff

17
ajax_complete.php Normal file
View File

@ -0,0 +1,17 @@
<?php
include_once __DIR__.'/core.php';
if (!isset($resource)) {
$module = $get['module'];
$op = $get['op'];
$result = AJAX::complete($op);
echo $result;
}
// Casi particolari
else {
}

535
ajax_search.php Normal file
View File

@ -0,0 +1,535 @@
<?php
include_once __DIR__.'/core.php';
if (!isset($term)) {
/*
== Super search ==
Ricerca di un termine su tutti i moduli.
Il risultato è in json
*/
$term = $get['term'];
$term = str_replace('/', '\\/', $term);
$results = AJAX::search($term);
echo json_encode($results);
}
// Casi particolari
else {
$i = 0;
/*
Interventi
*/
if (Modules::getPermission('Interventi') != '-') {
$campi = ['codice', '(SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id)', 'data_richiesta', 'info_sede', 'richiesta', 'descrizione', 'informazioniaggiuntive'];
$campi_text = ['Codice intervento', 'Data intervento', 'Data richiesta intervento', 'Sede intervento', 'Richiesta', 'Descrizione', 'Informazioni aggiuntive'];
$id_module = Modules::get('Interventi')['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$build_query .= Modules::getAdditionalsQuery('Interventi');
$rs = $dbo->fetchArray('SELECT *, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS data FROM in_interventi WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['id'];
$result[$r + $i]['title'] = 'Intervento '.$rs[$r]['codice'].' del '.Translator::dateToLocale($rs[$r]['data']);
$result[$r + $i]['category'] = 'Interventi';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Preventivi
*/
if (Modules::getPermission('Contabilita') != '-') {
$campi = ['numero', 'nome', 'descrizione'];
$campi_text = ['Codice preventivo', 'Nome', 'Descrizione'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='Preventivi'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT *, co_preventivi.id AS idpreventivo FROM co_preventivi WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['idpreventivo'];
$result[$r + $i]['title'] = 'Preventivo '.$rs[$r]['numero'].(($rs[$r]['data_accettazione'] == '0000-00-00') ? ' del '.Translator::dateToLocale($rs[$r]['data_accettazione']) : '');
$result[$r + $i]['category'] = 'Preventivi';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Fatture
*/
if (Modules::getPermission('Contabilita') != '-') {
$campi = ['numero', 'numero_esterno', 'data', 'note', 'note_aggiuntive', 'buono_ordine'];
$campi_text = ['Numero', 'Numero secondario', 'Data', 'Note', 'Note aggiuntive', 'Buono d\'ordine'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT *, co_documenti.id AS iddocumento FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
if ($rs[$r]['numero_esterno'] == '') {
$numero = $rs[$r]['numero'];
} else {
$numero = $rs[$r]['numero_esterno'];
}
// Controllo se si tratta di una fattura di acquisto o di vendita e seleziono il modulo opportuno
if ($rs[$r]['dir'] == 'uscita') {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Fatture di acquisto'");
$id_module = $rsm[0]['id'];
} else {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Fatture di vendita'");
$id_module = $rsm[0]['id'];
}
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['iddocumento'];
$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'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Righe fatture
*/
if (Modules::getPermission('Contabilita') != '-') {
$campi = ['descrizione'];
$campi_text = ['Riga'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR co_righe_documenti.'.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT co_documenti.*, co_documenti.id AS iddocumento, co_tipidocumento.descrizione AS tipodoc, co_tipidocumento.dir, co_righe_documenti.descrizione FROM co_righe_documenti INNER JOIN (co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id) ON co_documenti.id=co_righe_documenti.iddocumento WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
if ($rs[$r]['numero_esterno'] == '') {
$numero = $rs[$r]['numero'];
} else {
$numero = $rs[$r]['numero_esterno'];
}
// Controllo se si tratta di una fattura di acquisto o di vendita e seleziono il modulo opportuno
if ($rs[$r]['dir'] == 'uscita') {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Fatture di acquisto'");
$id_module = $rsm[0]['id'];
} else {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Fatture di vendita'");
$id_module = $rsm[0]['id'];
}
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['iddocumento'];
$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'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Articoli
*/
if (Modules::getPermission('Articoli') != '-') {
$campi = ['codice', 'descrizione', '(SELECT nome FROM mg_categorie WHERE mg_categorie.id = mg_articoli.id_categoria)', '(SELECT nome FROM mg_categorie WHERE mg_categorie.id = mg_articoli.id_sottocategoria)', 'note'];
$campi_text = ['Codice', 'Descrizione', 'Categoria', 'Subcategoria', 'Note'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='Articoli'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT * FROM mg_articoli WHERE 1=0 '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['id'];
$result[$r + $i]['title'] = $rs[$r]['codice'].' - '.$rs[$r]['descrizione'];
$result[$r + $i]['category'] = 'Articoli';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
}
$i += $r;
}
}
/*
Automezzi
*/
if (Modules::getPermission('Automezzi') != '-') {
$campi = ['nome', 'descrizione', 'targa'];
$campi_text = ['Nome', 'Descrizione', 'Targa'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='Automezzi'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT * FROM dt_automezzi WHERE 1=0 '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['id'];
$result[$r + $i]['title'] = $rs[$r]['nome'];
$result[$r + $i]['category'] = 'Automezzi';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
}
$i += $r;
}
}
/*
Ddt
*/
if (Modules::getPermission('Magazzino') != '-') {
$campi = ['numero', 'numero_esterno', 'data', 'note'];
$campi_text = ['Numero', 'Numero secondario', 'Data', 'Note'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT *, dt_ddt.id AS idddt FROM dt_ddt INNER JOIN dt_tipiddt ON dt_ddt.idtipoddt=dt_tipiddt.id WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
if ($rs[$r]['numero_esterno'] == '') {
$numero = $rs[$r]['numero'];
} else {
$numero = $rs[$r]['numero_esterno'];
}
// Controllo se si tratta di un tipo ddt di acquisto o di vendita e seleziono il modulo opportuno
if ($rs[$r]['dir'] == 'uscita') {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Ddt di acquisto'");
$id_module = $rsm[0]['id'];
} else {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Ddt di vendita'");
$id_module = $rsm[0]['id'];
}
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['idddt'];
$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'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Righe ddt
*/
if (Modules::getPermission('Magazzino') != '-') {
$campi = ['descrizione'];
$campi_text = ['Riga'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR dt_righe_ddt.'.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT dt_ddt.*, dt_ddt.id AS idddt, dt_tipiddt.descrizione AS tipodoc, dt_tipiddt.dir, dt_righe_ddt.descrizione FROM dt_righe_ddt INNER JOIN (dt_ddt INNER JOIN dt_tipiddt ON dt_ddt.idtipoddt=dt_tipiddt.id) ON dt_ddt.id=dt_righe_ddt.idddt WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
if ($rs[$r]['numero_esterno'] == '') {
$numero = $rs[$r]['numero'];
} else {
$numero = $rs[$r]['numero_esterno'];
}
// Controllo se si tratta di un tipo ddt di acquisto o di vendita e seleziono il modulo opportuno
if ($rs[$r]['dir'] == 'uscita') {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Ddt di acquisto'");
$id_module = $rsm[0]['id'];
} else {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Ddt di vendita'");
$id_module = $rsm[0]['id'];
}
$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'].' num. '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']);
$result[$r + $i]['category'] = $rs[$r]['tipodoc'];
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
MyImpianti
*/
if (Modules::getPermission('MyImpianti') != '-') {
$campi = ['matricola', 'nome', 'descrizione', 'ubicazione', 'occupante', 'proprietario'];
$campi_text = ['Matricola', 'Nome', 'Descrizione', 'Ubicazione', 'Occupante', 'Proprietario'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='MyImpianti'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$build_query .= Modules::getAdditionalsQuery('MyImpianti');
$rs = $dbo->fetchArray('SELECT * FROM my_impianti WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['matricola'];
$result[$r + $i]['title'] = $rs[$r]['matricola'].' - '.$rs[$r]['nome'];
$result[$r + $i]['category'] = 'MyImpianti';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
$results = $result;
}

View File

@ -2,7 +2,7 @@
include_once __DIR__.'/core.php';
if (!isset($superselect)) {
if (!isset($resource)) {
$op = empty($op) ? filter('op') : $op;
$search = filter('q');
@ -11,10 +11,13 @@ if (!isset($superselect)) {
}
$elements = (!is_array($elements)) ? explode(',', $elements) : $elements;
$results = AJAX::getSelectValues($op, $elements, $search);
$results = AJAX::select($op, $elements, $search);
echo json_encode($results);
} else {
}
// Casi particolari
else {
switch ($resource) {
case 'articoli':
$query = 'SELECT mg_articoli.*, co_iva.descrizione AS iva_vendita FROM mg_articoli LEFT OUTER JOIN co_iva ON mg_articoli.idiva_vendita=co_iva.id |where| ORDER BY mg_articoli.id_categoria ASC, mg_articoli.id_sottocategoria ASC';
@ -201,7 +204,7 @@ if (!isset($superselect)) {
$custom['contenuto'] = 'contenuto';
$results = completeResults($query, $where, $filter, $search, $custom);
$results = AJAX::completeResults($query, $where, $filter, $search, $custom);
foreach ($results as $key => $value) {
$matricola = \Util\Ini::getValue($r['contenuto'], 'Matricola');

View File

@ -13,7 +13,7 @@ currentMenu: struttura
- [Struttura](#struttura)
- [Root](#root)
- [add.php](#addphp)
- [ajax_autocomplete.php](#ajax_autocompletephp)
- [ajax_complete.php](#ajax_completephp)
- [ajax_dataload.php](#ajax_dataloadphp)
- [ajax_select.php](#ajax_selectphp)
- [bug.php](#bugphp)
@ -107,7 +107,7 @@ Il file `add.php` è dedicato alla gestione dei form di creazione nuovi elementi
In particolare si occupa parallelamente della funzionalità di aggiunta al volo, visibile in azione nei modulo **Interventi**, **Articoli** e in alcuni altri punti del software.
### ajax_autocomplete.php
### ajax_complete.php
Il file `ajax_dataload.php` gestisce il caricamento dinamico dei dati in varie sezioni del sito, relativamente alle operazioni di auto-completamento dei form e della ricerca globale.

View File

@ -323,7 +323,7 @@ $(document).ready(function () {
},
source: function (request, response) {
$.ajax({
url: globals.rootdir + '/ajax_autocomplete.php?op=supersearch&module=*',
url: globals.rootdir + '/ajax_search.php',
dataType: "json",
data: {
term: request.term

View File

@ -65,23 +65,23 @@ msgstr ""
msgid "Errore"
msgstr ""
#: ajax_autocomplete.php:357
#: ajax_complete.php:357
msgid "Nessuna vendita di questo articolo al cliente selezionato"
msgstr ""
#: ajax_autocomplete.php:388
#: ajax_complete.php:388
msgid "Questo articolo non è mai stato venduto"
msgstr ""
#: ajax_autocomplete.php:419
#: ajax_complete.php:419
msgid "Questo articolo non è mai stato acquistato"
msgstr ""
#: ajax_autocomplete.php:488
#: ajax_complete.php:488
msgid "Nessuna fattura trovata"
msgstr ""
#: ajax_autocomplete.php:524
#: ajax_complete.php:524
msgid "Nessun ddt trovato"
msgstr ""

View File

@ -64,23 +64,23 @@ msgstr ""
msgid "Errore"
msgstr ""
#: ajax_autocomplete.php:357
#: ajax_complete.php:357
msgid "Nessuna vendita di questo articolo al cliente selezionato"
msgstr ""
#: ajax_autocomplete.php:388
#: ajax_complete.php:388
msgid "Questo articolo non è mai stato venduto"
msgstr ""
#: ajax_autocomplete.php:419
#: ajax_complete.php:419
msgid "Questo articolo non è mai stato acquistato"
msgstr ""
#: ajax_autocomplete.php:488
#: ajax_complete.php:488
msgid "Nessuna fattura trovata"
msgstr ""
#: ajax_autocomplete.php:524
#: ajax_complete.php:524
msgid "Nessun ddt trovato"
msgstr ""

View File

@ -64,23 +64,23 @@ msgstr "Errore durante l'eliminazione del file _FILE_ in _DIR_!"
msgid "Errore"
msgstr "Errore"
#: ajax_autocomplete.php:357
#: ajax_complete.php:357
msgid "Nessuna vendita di questo articolo al cliente selezionato"
msgstr "Nessuna vendita di questo articolo al cliente selezionato"
#: ajax_autocomplete.php:388
#: ajax_complete.php:388
msgid "Questo articolo non è mai stato venduto"
msgstr "Questo articolo non è mai stato venduto"
#: ajax_autocomplete.php:419
#: ajax_complete.php:419
msgid "Questo articolo non è mai stato acquistato"
msgstr "Questo articolo non è mai stato acquistato"
#: ajax_autocomplete.php:488
#: ajax_complete.php:488
msgid "Nessuna fattura trovata"
msgstr "Nessuna fattura trovata"
#: ajax_autocomplete.php:524
#: ajax_complete.php:524
msgid "Nessun ddt trovato"
msgstr "Nessun ddt trovato"

View File

@ -0,0 +1,34 @@
<?php
include_once __DIR__.'/../../../core.php';
switch ($resource) {
case 'get_sedi':
$idanagrafica = get('idanagrafica');
$q = "SELECT id, CONCAT_WS( ' - ', nomesede, citta ) AS descrizione FROM an_sedi WHERE idanagrafica='".$idanagrafica."' ".Modules::getAdditionalsQuery('Anagrafiche').' ORDER BY id';
$rs = $dbo->fetchArray($q);
$n = sizeof($rs);
for ($i = 0; $i < $n; ++$i) {
echo html_entity_decode($rs[$i]['id'].':'.$rs[$i]['descrizione']);
if (($i + 1) < $n) {
echo '|';
}
}
break;
// Elenco sedi con <option>
case 'get_sedi_select':
$idanagrafica = get('idanagrafica');
$q = "SELECT id, CONCAT_WS( ' - ', nomesede, citta ) AS descrizione FROM an_sedi WHERE idanagrafica='".$idanagrafica."' ".Modules::getAdditionalsQuery('Anagrafiche').' ORDER BY id';
$rs = $dbo->fetchArray($q);
$n = sizeof($rs);
echo "<option value=\"-1\">- Nessuna -</option>\n";
echo "<option value=\"0\">Sede legale</option>\n";
for ($i = 0; $i < $n; ++$i) {
echo '<option value="'.$rs[$i]['id'].'">'.$rs[$i]['descrizione']."</option>\n";
}
break;
}

View File

@ -0,0 +1,99 @@
<?php
include_once __DIR__.'/../../../core.php';
/*
Anagrafiche
*/
$campi = ['codice', 'ragione_sociale', 'piva', 'codice_fiscale', 'indirizzo', 'indirizzo2', 'citta', 'cap', 'provincia', 'telefono', 'fax', 'cellulare', 'email', 'sitoweb', 'note', 'codicerea', 'settore', 'marche', 'cciaa', 'n_alboartigiani'];
$campi_text = ['Codice', 'Ragione sociale', 'Partita iva', 'Codice fiscale', 'Indirizzo', 'Indirizzo2', 'Città', 'C.A.P.', 'Provincia', 'Telefono', 'Fax', 'Cellulare', 'Email', 'Sito web', 'Note', 'Codice REA', 'Settore', 'Marche', 'CCIAA', 'Numero di iscrizione albo artigiani'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='Anagrafiche'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%" AND deleted = 0';
}
$rs = $dbo->fetchArray('SELECT * FROM an_anagrafiche WHERE 1=0 '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result = [];
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['idanagrafica'];
$result['title'] = $rs[$r]['ragione_sociale'];
$result['category'] = 'Anagrafiche';
$result['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
$results[] = $result;
}
}
/*
Referenti anagrafiche
*/
$campi = ['nome', 'mansione', 'telefono', 'email'];
$campi_text = ['Nome', 'Mansione', 'Telefono', 'Email'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT * FROM an_referenti WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
$result = [];
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['idanagrafica'].'#tabs-2';
$result['title'] = $rs[$r]['nome'];
$result['category'] = 'Referenti';
$result['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
$results[] = $result;
}
}

View File

@ -1,8 +1,9 @@
<?php
include_once __DIR__.'/../../../core.php';
switch ($resource) {
case 'clienti':
if (Modules::get('Anagrafiche')['permessi'] != '-') {
//$citta_cliente = ", IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')'))";
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale $citta_cliente) AS descrizione, idtipointervento_default 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| ORDER BY ragione_sociale";
@ -23,12 +24,10 @@ switch ($resource) {
}
$custom['idtipointervento'] = 'idtipointervento_default';
}
break;
case 'fornitori':
if (Modules::get('Anagrafiche')['permessi'] != '-') {
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale, IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')'))) AS descrizione, idtipointervento_default 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| ORDER BY ragione_sociale";
foreach ($elements as $element) {
@ -47,11 +46,10 @@ switch ($resource) {
}
$custom['idtipointervento'] = 'idtipointervento_default';
}
break;
case 'agenti':
if (Modules::get('Anagrafiche')['permessi'] != '-') {
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale, IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')'))) AS descrizione, idtipointervento_default 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| ORDER BY ragione_sociale";
foreach ($elements as $element) {
@ -69,7 +67,7 @@ switch ($resource) {
$search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%');
}
$results = completeResults($query, $where, $filter, $search, $custom);
$results = AJAX::completeResults($query, $where, $filter, $search, $custom);
// Evidenzia l'agente di default
if ($superselect['idanagrafica']) {
@ -84,11 +82,9 @@ switch ($resource) {
if ($pos !== false) {
$results[$pos]['_bgcolor_'] = '#ff0';
}
}
break;
case 'tecnici':
if (Modules::get('Anagrafiche')['permessi'] != '-') {
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale, IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')'))) AS descrizione, idtipointervento_default 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| ORDER BY ragione_sociale";
foreach ($elements as $element) {
@ -107,12 +103,10 @@ switch ($resource) {
}
// $custom['idtipointervento'] = 'idtipointervento_default';
}
break;
// Nota Bene: nel campo id viene specificato idtipoanagrafica-idanagrafica -> modulo Utenti e permessi, creazione nuovo utente
case 'anagrafiche':
if (Modules::get('Anagrafiche')['permessi'] != '-') {
$query = "SELECT CONCAT(an_tipianagrafiche.idtipoanagrafica, '-', an_anagrafiche.idanagrafica) AS id, CONCAT_WS('', ragione_sociale, ' (', citta, ' ', provincia, ')') AS descrizione idtipointervento_default 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| ORDER BY ragione_sociale";
foreach ($elements as $element) {
@ -130,11 +124,10 @@ switch ($resource) {
}
// $custom['idtipointervento'] = 'idtipointervento_default';
}
break;
case 'sedi':
if (Modules::get('Anagrafiche')['permessi'] != '-' && isset($superselect['idanagrafica'])) {
if (isset($superselect['idanagrafica'])) {
$query = "SELECT * FROM (SELECT 0 AS id, 'Sede legale' AS descrizione UNION SELECT id, CONCAT_WS(' - ', nomesede, citta) FROM an_sedi |where|) AS tab |filter| ORDER BY id";
foreach ($elements as $element) {
@ -151,7 +144,7 @@ switch ($resource) {
break;
case 'referenti':
if (Modules::get('Anagrafiche')['permessi'] != '-' && isset($superselect['idanagrafica'])) {
if (isset($superselect['idanagrafica'])) {
$query = 'SELECT id, nome AS descrizione FROM an_referenti |where| ORDER BY id';
foreach ($elements as $element) {

View File

@ -0,0 +1,101 @@
<?php
include_once __DIR__.'/../../../core.php';
$idarticolo = get('idarticolo');
switch ($resource) {
// Legge gli ultimi prezzi di vendita di un determinato cliente e un determinato articolo e li visualizza per suggerire il prezzo di vendita
case 'getprezzi':
$idanagrafica = get('idanagrafica');
$ids = ['""'];
echo '<small>';
if (!empty($idarticolo)) {
// Ultime 5 vendite al cliente
$fatture = $dbo->fetchArray('SELECT iddocumento, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM co_documenti WHERE id=iddocumento) AS n_fattura, (SELECT numero_esterno FROM co_documenti WHERE id=iddocumento) AS n2_fattura, (SELECT data FROM co_documenti WHERE id=iddocumento) AS data_fattura FROM co_righe_documenti WHERE idarticolo="'.$idarticolo."\" AND iddocumento IN(SELECT id FROM co_documenti WHERE idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='entrata') AND idanagrafica=\"".$idanagrafica.'") LIMIT 0,5');
if (sizeof($fatture) > 0) {
echo "<br/><table cellspacing='0' class='table-striped' >\n";
echo "<tr><th width='150'>Documento</th>\n";
echo "<th width='50'>Data</th>\n";
echo "<th width='80' class='text-right' >Totale</th></tr>\n";
for ($i = 0; $i < sizeof($fatture); ++$i) {
($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura'];
$id_module = Modules::get('Fatture di vendita')['id'];
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fattura num. ".$n_fattura."</a></td>\n";
echo "<td class='table_cell text-left'>".Translator::dateToLocale($fatture[$i]['data_fattura'])."</td>\n";
echo "<td class='table_cell text-right'>".Translator::numberToLocale($fatture[$i]['costo_unitario'])." &euro;</td></tr>\n";
array_push($ids, '"'.$fatture[$i]['iddocumento'].'"');
}
echo "</table>\n";
} else {
echo '<br/>'.tr('Nessuna vendita di questo articolo al cliente selezionato')."...<br/>\n";
}
}
echo '</small>';
break;
// Legge gli ultimi prezzi di vendita di un determinato articolo e li visualizza per suggerire il prezzo di vendita
case 'getprezzivendita':
echo '<small>';
// Ultime 5 vendite totali
$fatture = $dbo->fetchArray("SELECT DISTINCT iddocumento, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM co_documenti WHERE id=iddocumento) AS n_fattura, (SELECT numero_esterno FROM co_documenti WHERE id=iddocumento) AS n2_fattura, (SELECT data FROM co_documenti WHERE id=iddocumento) AS data_fattura FROM co_righe_documenti WHERE idarticolo='".$idarticolo."' AND iddocumento IN(SELECT id FROM co_documenti WHERE idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='entrata') ) ORDER BY data_fattura DESC, n_fattura DESC LIMIT 0,5");
if (sizeof($fatture) > 0) {
echo "<br/><table cellspacing='0' class='table-striped' >\n";
echo "<tr><th width='150'>Documento</th>\n";
echo "<th width='50'>Data</th>\n";
echo "<th width='80' class='text-right' >Totale</th></tr>\n";
for ($i = 0; $i < sizeof($fatture); ++$i) {
($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura'];
$id_module = Modules::get('Fatture di vendita')['id'];
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fattura num. ".$n_fattura."</a></td>\n";
echo "<td class='table_cell text-left'>".Translator::dateToLocale($fatture[$i]['data_fattura'])."</td>\n";
echo "<td class='table_cell text-right'>".Translator::numberToLocale($fatture[$i]['costo_unitario'])." &euro;</td></tr>\n";
}
echo "</table>\n";
} else {
echo '<br/>'.tr('Questo articolo non è mai stato venduto')."...<br/>\n";
}
echo '</small>';
echo '<br/>';
break;
// Legge gli ultimi prezzi di vendita di un determinato articolo e li visualizza per suggerire il prezzo di vendita
case 'getprezziacquisto':
echo '<small>';
// Ultime 5 vendite totali
$fatture = $dbo->fetchArray("SELECT DISTINCT iddocumento, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM co_documenti WHERE id=iddocumento) AS n_fattura, (SELECT numero_esterno FROM co_documenti WHERE id=iddocumento) AS n2_fattura, (SELECT data FROM co_documenti WHERE id=iddocumento) AS data_fattura FROM co_righe_documenti WHERE idarticolo='".$idarticolo."' AND iddocumento IN(SELECT id FROM co_documenti WHERE idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='uscita') ) ORDER BY data_fattura DESC, n_fattura DESC LIMIT 0,5");
if (sizeof($fatture) > 0) {
echo "<br/><table cellspacing='0' class='table-striped' >\n";
echo "<tr><th width='150'>Documento</th>\n";
echo "<th width='50'>Data</th>\n";
echo "<th width='80' class='text-right'>Totale</th></tr>\n";
for ($i = 0; $i < sizeof($fatture); ++$i) {
($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura'];
$id_module = Modules::get('Fatture di acquisto')['id'];
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fattura num. ".$n_fattura."</a></td>\n";
echo "<td class='table_cell text-left'>".Translator::dateToLocale($fatture[$i]['data_fattura'])."</td>\n";
echo "<td class='table_cell text-right'>".Translator::numberToLocale($fatture[$i]['costo_unitario'])." &euro;</td></tr>\n";
}
echo "</table>\n";
} else {
echo '<br/>'.tr('Questo articolo non è mai stato acquistato')."...<br/>\n";
}
echo '</small>';
echo '<br/>';
break;
}

View File

@ -85,21 +85,21 @@ echo '
echo '
<div class="row" id="prezzi_articolo">
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (cliente)').'
</button>
<div id="prezzi" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (acquisto)').'
</button>
<div id="prezziacquisto" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (vendita)').'
</button>
<div id="prezzivendita" class="hide"></div>

View File

@ -106,21 +106,21 @@ echo '
echo '
<div class="row" id="prezzi_articolo">
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (cliente)').'
</button>
<div id="prezzi" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (acquisto)').'
</button>
<div id="prezziacquisto" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (vendita)').'
</button>
<div id="prezzivendita" class="hide"></div>

View File

@ -130,21 +130,21 @@ echo '
echo '
<div class="row" id="prezzi_articolo">
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (cliente)').'
</button>
<div id="prezzi" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (acquisto)').'
</button>
<div id="prezziacquisto" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (vendita)').'
</button>
<div id="prezzivendita" class="hide"></div>

View File

@ -39,7 +39,7 @@ include_once __DIR__.'/../../core.php';
<div class="clearfix"></div>
<div class="col-md-12">
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "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$", "extra": "onchange=\"load_preventivi( this.value ); load_contratti( this.value ); $('#idsede').load( '<?php echo $rootdir ?>/ajax_autocomplete.php?module=Anagrafiche&op=get_sedi_select&idanagrafica='+$('#idanagrafica option:selected').val() ); load_impianti( $('#idanagrafica option:selected').val(), $('#idsede option:selected').val() );\"", "ajax-source": "clienti" ]}
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "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$", "extra": "onchange=\"load_preventivi( this.value ); load_contratti( this.value ); $('#idsede').load( '<?php echo $rootdir ?>/ajax_complete.php?module=Anagrafiche&op=get_sedi_select&idanagrafica='+$('#idanagrafica option:selected').val() ); load_impianti( $('#idanagrafica option:selected').val(), $('#idsede option:selected').val() );\"", "ajax-source": "clienti" ]}
</div>
</div>
</div>

View File

@ -94,21 +94,21 @@ echo '
echo '
<div class="row" id="prezzi_articolo">
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (cliente)').'
</button>
<div id="prezzi" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (acquisto)').'
</button>
<div id="prezziacquisto" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_autocomplete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (vendita)').'
</button>
<div id="prezzivendita" class="hide"></div>

View File

@ -19,22 +19,33 @@ class AJAX
return \Whoops\Util\Misc::isAjaxRequest() && filter('ajax') !== null;
}
public static function getSelectValues($resource, $elements = [], $search = null)
public static function select($resource, $elements = [], $search = null)
{
if (!isset($elements)) {
$elements = [];
}
$elements = (!is_array($elements)) ? explode(',', $elements) : $elements;
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$customs = glob(DOCROOT.'/modules/*/ajax/select.php');
$dirs = array_column($modules, 'directory');
$pieces = array_chunk($dirs, 5);
$customs = [];
foreach ($pieces as $piece) {
$files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/ajax/select.php', GLOB_BRACE);
$customs = array_merge($customs, $files);
}
// File di gestione predefinita
array_unshift($customs, DOCROOT.'/ajax_select.php');
foreach ($customs as $custom) {
$temp = str_replace('/ajax/', '/custom/ajax/', $custom);
$file = file_exists($temp) ? $file : $custom;
$file = file_exists($temp) ? $temp : $custom;
$results = self::getFileValues($file, $resource, $elements, $search);
$results = self::getSelectResults($file, $resource, $elements, $search);
if (isset($results)) {
break;
}
@ -43,7 +54,7 @@ class AJAX
return $results;
}
private static function completeResults($query, $where, $filter = [], $search = [], $custom = [])
public static function completeResults($query, $where, $filter = [], $search = [], $custom = [])
{
if (str_contains($query, '|filter|')) {
$query = str_replace('|filter|', !empty($filter) ? 'WHERE '.implode(' OR ', $filter) : '', $query);
@ -73,7 +84,7 @@ class AJAX
return $results;
}
private static function getFileValues($file, $resource, $elements = [], $search = null)
private static function getSelectResults($file, $resource, $elements = [], $search = null)
{
$superselect = self::getSelectInfo();
@ -86,6 +97,10 @@ class AJAX
'text' => 'descrizione',
];
// Database
$database = Database::getConnection();
$dbo = $database;
require $file;
if (!isset($results) && !empty($query)) {
@ -99,4 +114,110 @@ class AJAX
{
return !empty($_SESSION['superselect']) ? $_SESSION['superselect'] : [];
}
public static function search($term)
{
if (strlen($term) < 2) {
return;
}
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$dirs = array_column($modules, 'directory');
$pieces = array_chunk($dirs, 5);
$customs = [];
foreach ($pieces as $piece) {
$files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/ajax/search.php', GLOB_BRACE);
$customs = array_merge($customs, $files);
}
// File di gestione predefinita
array_unshift($customs, DOCROOT.'/ajax_search.php');
$results = [];
foreach ($customs as $custom) {
$temp = str_replace('/ajax/', '/custom/ajax/', $custom);
$file = file_exists($temp) ? $temp : $custom;
$module_results = self::getSearchResults($file, $term);
$results = array_merge($results, $module_results);
}
return $results;
}
private static function getSearchResults($file, $term)
{
// Database
$database = Database::getConnection();
$dbo = $database;
// Ricerca anagrafiche per ragione sociale per potere mostrare gli interventi, fatture,
// ordini, ecc della persona ricercata
$idanagrafiche = ['-1'];
$ragioni_sociali = ['-1'];
$rs = $dbo->fetchArray('SELECT idanagrafica, ragione_sociale FROM an_anagrafiche WHERE ragione_sociale LIKE "%'.$term.'%"');
for ($a = 0; $a < sizeof($rs); ++$a) {
$idanagrafiche[] = $rs[$a]['idanagrafica'];
$ragioni_sociali[$rs[$a]['idanagrafica']] = $rs[$a]['ragione_sociale'];
}
$results = [];
require $file;
$results = (array) $results;
foreach ($results as $key => $value) {
$results[$key]['value'] = $key;
}
return $results;
}
public static function complete($resource)
{
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$dirs = array_column($modules, 'directory');
$pieces = array_chunk($dirs, 5);
$customs = [];
foreach ($pieces as $piece) {
$files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/ajax/complete.php', GLOB_BRACE);
$customs = array_merge($customs, $files);
}
// File di gestione predefinita
array_unshift($customs, DOCROOT.'/ajax_complete.php');
foreach ($customs as $custom) {
$temp = str_replace('/ajax/', '/custom/ajax/', $custom);
$file = file_exists($temp) ? $temp : $custom;
$result = self::getCompleteResults($file, $resource);
if (!empty($result)) {
break;
}
}
return $result;
}
private static function getCompleteResults($file, $resource)
{
// Database
$database = Database::getConnection();
$dbo = $database;
ob_start();
require $file;
$result = ob_get_clean();
return $result;
}
}

View File

@ -79,6 +79,24 @@ class Modules
return self::$modules;
}
/**
* Restituisce l'elenco dei moduli con permessi di accesso accordati.
*
* @return array
*/
public static function getAvailableModules()
{
// Individuazione dei moduli con permesso di accesso
$modules = self::getModules();
foreach ($modules as $key => $module) {
if ($module['permessi'] == '-') {
unset($modules[$key]);
}
}
return $modules;
}
/**
* Restituisce le informazioni relative a un singolo modulo specificato.
*