From 9c2d1fa607607ce8be563a120e01927779bac297 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Sat, 3 Feb 2018 16:29:53 +0100 Subject: [PATCH] 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. --- ajax_autocomplete.php | 1196 ------------------------- ajax_complete.php | 17 + ajax_search.php | 535 +++++++++++ ajax_select.php | 11 +- docs/Struttura.md | 4 +- lib/functions.js | 2 +- locale/catalog.pot | 10 +- locale/en/en.po | 10 +- locale/it/it.po | 10 +- modules/anagrafiche/ajax/complete.php | 34 + modules/anagrafiche/ajax/search.php | 99 ++ modules/anagrafiche/ajax/select.php | 19 +- modules/articoli/ajax/complete.php | 101 +++ modules/ddt/add_articolo.php | 6 +- modules/fatture/add_articolo.php | 6 +- modules/interventi/add_articolo.php | 6 +- modules/my_impianti/edit.php | 2 +- modules/ordini/add_articolo.php | 6 +- src/AJAX.php | 133 ++- src/Modules.php | 18 + 20 files changed, 975 insertions(+), 1250 deletions(-) delete mode 100644 ajax_autocomplete.php create mode 100644 ajax_complete.php create mode 100644 ajax_search.php create mode 100644 modules/anagrafiche/ajax/complete.php create mode 100644 modules/anagrafiche/ajax/search.php create mode 100644 modules/articoli/ajax/complete.php diff --git a/ajax_autocomplete.php b/ajax_autocomplete.php deleted file mode 100644 index db33e3903..000000000 --- a/ajax_autocomplete.php +++ /dev/null @@ -1,1196 +0,0 @@ -fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo htmlspecialchars_decode($rs[$i]['ragione_sociale'], ENT_QUOTES); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco città - elseif ($op == 'getcitta') { - $q = 'SELECT DISTINCT(citta) FROM an_anagrafiche WHERE 1=1 '.Modules::getAdditionalsQuery('Anagrafiche').' ORDER BY citta'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo htmlspecialchars_decode($rs[$i]['citta'], ENT_QUOTES); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco province - elseif ($op == 'getprovince') { - $q = 'SELECT DISTINCT(provincia) FROM an_anagrafiche WHERE 1=1 '.Modules::getAdditionalsQuery('Anagrafiche').' ORDER BY provincia'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['provincia']); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco cap - elseif ($op == 'getcap') { - $q = 'SELECT DISTINCT(cap) FROM an_anagrafiche WHERE 1=1 '.Modules::getAdditionalsQuery('Anagrafiche').' ORDER BY cap'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['cap']); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco settori - elseif ($op == 'getsettori') { - $q = 'SELECT DISTINCT(settore) FROM an_anagrafiche WHERE 1=1 '.Modules::getAdditionalsQuery('Anagrafiche').' ORDER BY settore'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['settore'], ENT_QUOTES); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco marche - elseif ($op == 'getmarche') { - $q = 'SELECT DISTINCT(marche) FROM an_anagrafiche WHERE 1=1 '.Modules::getAdditionalsQuery('Anagrafiche').' ORDER BY marche'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['marche'], ENT_QUOTES); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco e-mail - uso la funzione nativa di php "trim" per rimuovere eventuali spazi dalle e-mail - elseif ($op == 'getemail') { - $idanagrafica = $get['idanagrafica']; - - if ($idanagrafica != '') { - $WHERE_IDANAGRAFICA = 'AND idanagrafica = '.$idanagrafica; - } - - // tutti i referenti per questo cliente - $q = 'SELECT DISTINCT(email),idanagrafica,nome FROM an_referenti WHERE 1=1 '.$WHERE_IDANAGRAFICA.' ORDER BY idanagrafica'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - if (trim($rs[$i]['email']) != '') { - echo html_entity_decode($rs[$i]['nome'].' <'.trim($rs[$i]['email']).'>'); - if (($i) < $n) { - echo '|'; - } - } - } - - // -- - - // tutti gli agenti - $q = "SELECT DISTINCT(email),ragione_sociale,an_anagrafiche.idanagrafica FROM an_anagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE idtipoanagrafica=(SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Agente') ORDER BY idanagrafica"; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - if (trim($rs[$i]['email']) != '') { - echo html_entity_decode($rs[$i]['nome'].' <'.trim($rs[$i]['email']).'>'); - if (($i) < $n) { - echo '|'; - } - } - } - - // -- - - // email azienda di questo cliente - $q = 'SELECT DISTINCT(email),ragione_sociale,idanagrafica FROM an_anagrafiche WHERE 1=1 '.$WHERE_IDANAGRAFICA.' ORDER BY idanagrafica'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - if (trim($rs[$i]['email']) != '') { - echo html_entity_decode($rs[$i]['ragione_sociale'].' <'.trim($rs[$i]['email']).'>'); - if (($i + 1) < $n) { - echo '|'; - } - } - } - } - - // Elenco sedi - elseif ($op == '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 '|'; - } - } - } - - // Elenco sedi con \n"; - echo "\n"; - - for ($i = 0; $i < $n; ++$i) { - echo '\n"; - } - } elseif ($op == 'get_default_value') { - $idanagrafica = $get['idanagrafica']; - $q = "SELECT idtipointervento_default FROM an_anagrafiche WHERE idanagrafica='".$idanagrafica."' ".Modules::getAdditionalsQuery('Anagrafiche').''; - $rs = $dbo->fetchArray($q); - - echo html_entity_decode($rs[0]['idtipointervento_default'], ENT_QUOTES); - } - - break; - - case 'Articoli': - // Elenco categorie - if ($op == 'getcategorie') { - $q = 'SELECT DISTINCT(categoria) FROM mg_articoli WHERE 1=1 '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY categoria'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['categoria']); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco subcategorie - elseif ($op == 'getsubcategorie') { - $q = 'SELECT DISTINCT(subcategoria) FROM mg_articoli WHERE 1=1 '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY subcategoria'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['subcategoria']); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco descrizione - elseif ($op == 'getdescrizione') { - $q = 'SELECT DISTINCT(descrizione) FROM mg_articoli WHERE 1=1 '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY descrizione'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['descrizione']); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco codici - elseif ($op == 'getcodice') { - $q = 'SELECT DISTINCT(codice) FROM mg_articoli WHERE 1=1 '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY codice'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['codice']); - if (($i + 1) < $n) { - echo '|'; - } - } - } - - // Elenco lotti in base all'articolo - elseif ($op == 'getlotti') { - $idarticolo = $get['idarticolo']; - $q = 'SELECT DISTINCT(lotto) FROM mg_prodotti WHERE id_articolo="'.$idarticolo.'" '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY lotto ASC'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - - echo "\n"; - - for ($i = 0; $i < $n; ++$i) { - $dir = 'entrata'; - - $qs = 'SELECT COUNT(serial) AS num_seriali FROM mg_prodotti WHERE id_articolo='.prepare($idarticolo).' AND lotto='.prepare($rs[$i]['lotto']).' '. - 'AND (serial NOT IN(SELECT serial FROM co_righe_documenti INNER JOIN co_documenti ON co_righe_documenti.iddocumento = co_documenti.id INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id WHERE lotto='.prepare($rs[$i]['lotto']).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '. - 'AND serial NOT IN(SELECT serial FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine = or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine = or_tipiordine.id WHERE lotto='.prepare($rs[$i]['lotto']).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '. - 'AND serial NOT IN(SELECT serial FROM dt_righe_ddt INNER JOIN dt_ddt ON dt_righe_ddt.idddt = dt_ddt.id INNER JOIN dt_tipiddt ON dt_ddt.idtipoddt = dt_tipiddt.id WHERE lotto='.prepare($rs[$i]['lotto']).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '. - 'AND serial NOT IN(SELECT serial FROM mg_articoli_interventi WHERE lotto='.prepare($rs[$i]['lotto']).' AND serial=mg_prodotti.serial) ) '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY serial ASC'; - - $rsn = $dbo->fetchArray($qs); - - echo '\n"; - - // echo '\n"; - } - } - - // Elenco lotti in base all'articolo e lotto - elseif ($op == 'getserial') { - $idarticolo = $get['idarticolo']; - $lotto = $get['lotto']; - - if (($get['serial_start'] != '') and ($get['serial_end'] != '')) { - $serial_start = $get['serial_start']; - $serial_end = $get['serial_end']; - $additional_where_serial = ' AND CAST(serial AS UNSIGNED) >= CAST('.prepare($$serial_start).' AS UNSIGNED) AND CAST(serial AS UNSIGNED) <= CAST('.prepare($serial_end).' AS UNSIGNED) '; - } elseif ($get['serial_start'] != '') { - $serial_start = $get['serial_start']; - $additional_where_serial = ' AND CAST(serial AS UNSIGNED) > CAST('.prepare($$serial_start).' AS UNSIGNED)'; - } elseif ($get['serial_end'] != '') { - $serial_end = $get['serial_end']; - $additional_where_serial = ' AND CAST(serial AS UNSIGNED) < CAST('.prepare($serial_end).' AS UNSIGNED)'; - } else { - $additional_where_serial = ''; - } - - if ($dir == 'entrata') { - $q = 'SELECT DISTINCT(serial) FROM mg_prodotti WHERE id_articolo='.prepare($idarticolo).' AND lotto='.prepare($lotto). - ' AND (serial NOT IN(SELECT serial FROM co_righe_documenti INNER JOIN co_documenti ON co_righe_documenti.iddocumento = co_documenti.id INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).')'. - ' AND serial NOT IN(SELECT serial FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine = or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine = or_tipiordine.id WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '. - ' AND serial NOT IN(SELECT serial FROM dt_righe_ddt INNER JOIN dt_ddt ON dt_righe_ddt.idddt = dt_ddt.id INNER JOIN dt_tipiddt ON dt_ddt.idtipoddt = dt_tipiddt.id WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '. - 'AND serial NOT IN(SELECT serial FROM mg_articoli_interventi WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) '.$additional_where_serial.' ) '. - Modules::getAdditionalsQuery('Magazzino').' ORDER BY serial ASC'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - } else { - $q = 'SELECT DISTINCT(serial) FROM mg_prodotti WHERE id_articolo='.prepare($idarticolo).' AND lotto='.prepare($lotto).' AND (serial NOT IN(SELECT serial FROM co_righe_documenti WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial ) AND serial NOT IN(SELECT serial FROM or_righe_ordini WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) AND serial NOT IN(SELECT serial FROM dt_righe_ddt WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) AND serial NOT IN(SELECT serial FROM mg_articoli_interventi WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) '.$additional_where_serial.' ) '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY serial ASC'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - } - - if (($get['serial_start'] != '') or ($get['serial_end'] != '')) { - } elseif ($get['lotto'] == '') { - echo "\n"; - } else { - echo "\n"; - } - - for ($i = 0; $i < $n; ++$i) { - echo '\n"; - } - } - - // Elenco lotti in base all'articolo, lotto e serial - elseif ($op == 'getaltro') { - $idarticolo = $get['idarticolo']; - $lotto = $get['lotto']; - $serial = $get['serial']; - $q = 'SELECT DISTINCT(altro) FROM mg_prodotti WHERE id_articolo="'.$idarticolo.'" AND lotto="'.$lotto.'" AND serial="'.$serial.'" AND (altro NOT IN(SELECT altro FROM co_righe_documenti WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM or_righe_ordini WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM dt_righe_ddt WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM mg_articoli_interventi WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro)) '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY altro ASC'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - - echo "\n"; - - for ($i = 0; $i < $n; ++$i) { - echo '\n"; - } - } - - // Legge gli ultimi prezzi di vendita di un determinato cliente e un determinato articolo e li visualizza per suggerire il prezzo di vendita - elseif ($op == 'getprezzi') { - $idarticolo = $get['idarticolo']; - $idanagrafica = $get['idanagrafica']; - $ids = ['""']; - - echo ''; - 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 "
\n"; - echo "\n"; - echo "\n"; - echo "\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 "\n"; - - echo "\n"; - echo "\n"; - array_push($ids, '"'.$fatture[$i]['iddocumento'].'"'); - } - echo "
DocumentoDataTotale
Fattura num. ".$n_fattura."".Translator::dateToLocale($fatture[$i]['data_fattura'])."".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €
\n"; - } else { - echo '
'.tr('Nessuna vendita di questo articolo al cliente selezionato')."...
\n"; - } - } - echo '
'; - } - - // Legge gli ultimi prezzi di vendita di un determinato articolo e li visualizza per suggerire il prezzo di vendita - elseif ($op == 'getprezzivendita') { - $idarticolo = $get['idarticolo']; - - echo ''; - // 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 "
\n"; - echo "\n"; - echo "\n"; - echo "\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 "\n"; - - echo "\n"; - echo "\n"; - } - echo "
DocumentoDataTotale
Fattura num. ".$n_fattura."".Translator::dateToLocale($fatture[$i]['data_fattura'])."".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €
\n"; - } else { - echo '
'.tr('Questo articolo non è mai stato venduto')."...
\n"; - } - echo '
'; - echo '
'; - } - - // Legge gli ultimi prezzi di vendita di un determinato articolo e li visualizza per suggerire il prezzo di vendita - elseif ($op == 'getprezziacquisto') { - $idarticolo = $get['idarticolo']; - - echo ''; - // 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 "
\n"; - echo "\n"; - echo "\n"; - echo "\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 "\n"; - - echo "\n"; - echo "\n"; - } - echo "
DocumentoDataTotale
Fattura num. ".$n_fattura."".Translator::dateToLocale($fatture[$i]['data_fattura'])."".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €
\n"; - } else { - echo '
'.tr('Questo articolo non è mai stato acquistato')."...
\n"; - } - echo '
'; - echo '
'; - } - break; - - case 'Interventi': - // Elenco nomi - if ($op == 'get_ragione_sociale') { - $ragione_sociale = $get['ragione_sociale']; - $q = "SELECT ragione_sociale FROM an_anagrafiche WHERE ragione_sociale LIKE '%$ragione_sociale%' ".Modules::getAdditionalsQuery('Anagrafiche').' ORDER BY ragione_sociale'; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo htmlspecialchars_decode($rs[$i]['ragione_sociale'], ENT_QUOTES); - if (($i + 1) < $n) { - echo '|'; - } - } - } - break; - - case 'Preventivi': - // Elenco nomi preventivi - if ($op == 'get_select_preventivi') { - $idanagrafica = $get['idanagrafica']; - $q = "SELECT co_preventivi.id AS idpreventivo, an_anagrafiche.idanagrafica, nome, idtipointervento FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica WHERE an_anagrafiche.idanagrafica='$idanagrafica' AND idstato NOT IN (SELECT `id` FROM co_statipreventivi WHERE descrizione='Bozza' OR descrizione='Rifiutato' OR descrizione='Pagato') ".Modules::getAdditionalsQuery('Preventivi'); - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['idpreventivo'].':'.$rs[$i]['nome'].':'.$rs[$i]['idtipointervento']); - if (($i + 1) < $n) { - echo '|'; - } - } - } - break; - - case 'Contratti': - // Elenco nomi preventivi - if ($op == 'get_select_contratti') { - $idanagrafica = $get['idanagrafica']; - $q = "SELECT co_contratti.id AS idcontratto, an_anagrafiche.idanagrafica, nome FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE an_anagrafiche.idanagrafica='$idanagrafica' AND idstato NOT IN (SELECT `id` FROM co_staticontratti WHERE fatturabile = 1) ".Modules::getAdditionalsQuery('Contratti'); - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - for ($i = 0; $i < $n; ++$i) { - echo html_entity_decode($rs[$i]['idcontratto'].':'.$rs[$i]['nome']); - if (($i + 1) < $n) { - echo '|'; - } - } - } - break; - - case 'Fatture': - // Elenco fatture non pagate per anagrafica - if ($op == 'get_fatture') { - $idanagrafica = $get['idanagrafica']; - $q = "SELECT data, co_documenti.id AS iddocumento, co_tipidocumento.descrizione AS tipo_doc, dir FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.idanagrafica='$idanagrafica' AND (idstatodocumento=(SELECT `id` FROM co_statidocumento WHERE descrizione='Emessa') OR (SELECT da_pagare-pagato AS differenza FROM co_scadenziario WHERE NOT iddocumento=co_documenti.id=0) )"; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - if ($n > 0) { - echo "\n"; - } else { - echo tr('Nessuna fattura trovata').'...'; - } - } - - // Elenco causali prima nota - elseif ($op == 'get_causali') { - $descrizione = $get['descrizione']; - $q = 'SELECT DISTINCT descrizione FROM co_movimenti WHERE descrizione LIKE "%'.$descrizione."%\" AND (iddocumento='' OR iddocumento IS NULL) AND primanota=1 ".Modules::getAdditionalsQuery('Prima nota'); - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - if ($n > 0) { - for ($i = 0; $i < $n; ++$i) { - echo $rs[$i]['descrizione']; - if (($i + 1) < $n) { - echo '|'; - } - } - } - } - break; - - case 'Ddt': - // Elenco ddt del fornitore scelto - if ($op == 'get_ddt') { - $idfornitore = $get['idfornitore']; - $q = "SELECT data, dt_ddt.id AS idddt, numero, dt_tipiddt.descrizione AS tipo_doc, dir FROM dt_ddt INNER JOIN dt_tipiddt ON dt_ddt.idtipoddt=dt_tipiddt.id WHERE dt_ddt.idanagrafica='$idfornitore'"; - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - if ($n > 0) { - echo "\n"; - } else { - echo tr('Nessun ddt trovato')."...\n"; - } - } - break; - - case 'MyImpianti': - // Elenco ddt del fornitore scelto - if ($op == 'get_impianti') { - $idanagrafica = $get['idanagrafica']; - $idsede = $get['idsede']; - - if ($idsede != '' && $idsede != '-1' && $idsede != 'undefined') { - $q = 'SELECT *, (SELECT nomesede FROM an_sedi WHERE id=my_impianti.idsede) AS nomesede FROM my_impianti WHERE idanagrafica="'.$idanagrafica.'" AND idsede="'.$idsede.'" ORDER BY idsede'; - } else { - $q = 'SELECT *, (SELECT nomesede FROM an_sedi WHERE id=my_impianti.idsede) AS nomesede FROM my_impianti WHERE idanagrafica="'.$idanagrafica.'" ORDER BY idsede'; - } - - $rs = $dbo->fetchArray($q); - $n = sizeof($rs); - - for ($i = 0; $i < $n; ++$i) { - echo $rs[$i]['id'].':'.$rs[$i]['matricola'].' - '.$rs[$i]['nome']."\n"; - - if (($i + 1) < $n) { - echo '|'; - } - } - } - break; -} - -/* - == Super search == - Ricerca di un termine su tutti i moduli. - Il risultato è in json -*/ -if ($op == 'supersearch') { - $term = $get['term']; - $term = str_replace('/', '\\/', $term); - $i = 0; - - if (strlen($term) < 2) { - echo 'null'; - exit; - } - - /* - Anagrafiche - */ - if (Modules::getPermission('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[$r + $i]['link'] = $rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['idanagrafica']; - $result[$r + $i]['title'] = $rs[$r]['ragione_sociale']; - $result[$r + $i]['category'] = 'Anagrafiche'; - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - } - - $i += $r; - } - } - - // 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']; - } - - /* - Referenti anagrafiche - */ - if (Modules::getPermission('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) { - // 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]['idanagrafica'].'#tabs-2'; - $result[$r + $i]['title'] = $rs[$r]['nome']; - $result[$r + $i]['category'] = 'Referenti'; - $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 + $i][$campi[$c]], $matches); - - for ($m = 0; $m < sizeof($matches); ++$m) { - $text = str_replace($matches[$m], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - - // Aggiunta nome anagrafica come ultimo campo - if (sizeof($ragioni_sociali) > 1) { - $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; - } - } - - $i += $r; - } - } - - /* - 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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - - // Aggiunta nome anagrafica come ultimo campo - if (sizeof($ragioni_sociali) > 1) { - $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; - } - } - - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - - // Aggiunta nome anagrafica come ultimo campo - if (sizeof($ragioni_sociali) > 1) { - $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; - } - } - - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - - // Aggiunta nome anagrafica come ultimo campo - if (sizeof($ragioni_sociali) > 1) { - $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; - } - } - - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - - // Aggiunta nome anagrafica come ultimo campo - if (sizeof($ragioni_sociali) > 1) { - $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; - } - } - - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - } - - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - } - - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - - // Aggiunta nome anagrafica come ultimo campo - if (sizeof($ragioni_sociali) > 1) { - $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; - } - } - - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - - // Aggiunta nome anagrafica come ultimo campo - if (sizeof($ragioni_sociali) > 1) { - $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; - } - } - - $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], "".$matches[$m].'', $text); - } - - $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; - } - } - - // Aggiunta nome anagrafica come ultimo campo - if (sizeof($ragioni_sociali) > 1) { - $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; - } - } - - $i += $r; - } - } - - // Contratti - // Ordini - - $result = (array) $result; - foreach ($result as $key => $value) { - $result[$key]['value'] = $key; - } - - echo json_encode($result); -} diff --git a/ajax_complete.php b/ajax_complete.php new file mode 100644 index 000000000..fcac22f6b --- /dev/null +++ b/ajax_complete.php @@ -0,0 +1,17 @@ +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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + // Aggiunta nome anagrafica come ultimo campo + if (sizeof($ragioni_sociali) > 1) { + $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; + } + } + + $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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + // Aggiunta nome anagrafica come ultimo campo + if (sizeof($ragioni_sociali) > 1) { + $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; + } + } + + $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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + // Aggiunta nome anagrafica come ultimo campo + if (sizeof($ragioni_sociali) > 1) { + $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; + } + } + + $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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + // Aggiunta nome anagrafica come ultimo campo + if (sizeof($ragioni_sociali) > 1) { + $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; + } + } + + $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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + } + + $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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + } + + $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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + // Aggiunta nome anagrafica come ultimo campo + if (sizeof($ragioni_sociali) > 1) { + $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; + } + } + + $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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + // Aggiunta nome anagrafica come ultimo campo + if (sizeof($ragioni_sociali) > 1) { + $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; + } + } + + $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], "".$matches[$m].'', $text); + } + + $result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + // Aggiunta nome anagrafica come ultimo campo + if (sizeof($ragioni_sociali) > 1) { + $result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; + } + } + + $i += $r; + } + } + + $results = $result; +} diff --git a/ajax_select.php b/ajax_select.php index 7301af012..605390f16 100644 --- a/ajax_select.php +++ b/ajax_select.php @@ -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'); diff --git a/docs/Struttura.md b/docs/Struttura.md index c61191591..5350d40af 100644 --- a/docs/Struttura.md +++ b/docs/Struttura.md @@ -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. diff --git a/lib/functions.js b/lib/functions.js index 7f1f25b39..563406b6c 100644 --- a/lib/functions.js +++ b/lib/functions.js @@ -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 diff --git a/locale/catalog.pot b/locale/catalog.pot index cc7c1ed52..8ca7d2716 100644 --- a/locale/catalog.pot +++ b/locale/catalog.pot @@ -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 "" diff --git a/locale/en/en.po b/locale/en/en.po index 41ac4ee5f..37cf3ef48 100644 --- a/locale/en/en.po +++ b/locale/en/en.po @@ -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 "" diff --git a/locale/it/it.po b/locale/it/it.po index 2358f648b..1f6e138c3 100644 --- a/locale/it/it.po +++ b/locale/it/it.po @@ -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" diff --git a/modules/anagrafiche/ajax/complete.php b/modules/anagrafiche/ajax/complete.php new file mode 100644 index 000000000..5ff352930 --- /dev/null +++ b/modules/anagrafiche/ajax/complete.php @@ -0,0 +1,34 @@ +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 \n"; + echo "\n"; + + for ($i = 0; $i < $n; ++$i) { + echo '\n"; + } + break; +} diff --git a/modules/anagrafiche/ajax/search.php b/modules/anagrafiche/ajax/search.php new file mode 100644 index 000000000..345d2a2cf --- /dev/null +++ b/modules/anagrafiche/ajax/search.php @@ -0,0 +1,99 @@ +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], "".$matches[$m].'', $text); + } + + $result['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + $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], "".$matches[$m].'', $text); + } + + $result['labels'][] = $campi_text[$c].': '.$text.'
'; + } + } + + // Aggiunta nome anagrafica come ultimo campo + if (sizeof($ragioni_sociali) > 1) { + $result['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'
'; + } + + $results[] = $result; + } +} diff --git a/modules/anagrafiche/ajax/select.php b/modules/anagrafiche/ajax/select.php index dc9b1fd44..7e1e7a6b8 100644 --- a/modules/anagrafiche/ajax/select.php +++ b/modules/anagrafiche/ajax/select.php @@ -1,8 +1,9 @@ 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) { diff --git a/modules/articoli/ajax/complete.php b/modules/articoli/ajax/complete.php new file mode 100644 index 000000000..736505fe1 --- /dev/null +++ b/modules/articoli/ajax/complete.php @@ -0,0 +1,101 @@ +'; + 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 "
\n"; + echo "\n"; + echo "\n"; + echo "\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 "\n"; + + echo "\n"; + echo "\n"; + array_push($ids, '"'.$fatture[$i]['iddocumento'].'"'); + } + echo "
DocumentoDataTotale
Fattura num. ".$n_fattura."".Translator::dateToLocale($fatture[$i]['data_fattura'])."".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €
\n"; + } else { + echo '
'.tr('Nessuna vendita di questo articolo al cliente selezionato')."...
\n"; + } + } + echo ''; + break; + + // Legge gli ultimi prezzi di vendita di un determinato articolo e li visualizza per suggerire il prezzo di vendita + case 'getprezzivendita': + echo ''; + // 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 "
\n"; + echo "\n"; + echo "\n"; + echo "\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 "\n"; + + echo "\n"; + echo "\n"; + } + echo "
DocumentoDataTotale
Fattura num. ".$n_fattura."".Translator::dateToLocale($fatture[$i]['data_fattura'])."".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €
\n"; + } else { + echo '
'.tr('Questo articolo non è mai stato venduto')."...
\n"; + } + echo '
'; + echo '
'; + + break; + + // Legge gli ultimi prezzi di vendita di un determinato articolo e li visualizza per suggerire il prezzo di vendita + case 'getprezziacquisto': + echo ''; + // 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 "
\n"; + echo "\n"; + echo "\n"; + echo "\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 "\n"; + + echo "\n"; + echo "\n"; + } + echo "
DocumentoDataTotale
Fattura num. ".$n_fattura."".Translator::dateToLocale($fatture[$i]['data_fattura'])."".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €
\n"; + } else { + echo '
'.tr('Questo articolo non è mai stato acquistato')."...
\n"; + } + echo '
'; + echo '
'; + + break; +} diff --git a/modules/ddt/add_articolo.php b/modules/ddt/add_articolo.php index 889e04ee0..844f7205a 100644 --- a/modules/ddt/add_articolo.php +++ b/modules/ddt/add_articolo.php @@ -85,21 +85,21 @@ echo ' echo '
-
-
-
diff --git a/modules/fatture/add_articolo.php b/modules/fatture/add_articolo.php index dced8800a..4c8988c19 100644 --- a/modules/fatture/add_articolo.php +++ b/modules/fatture/add_articolo.php @@ -106,21 +106,21 @@ echo ' echo '
-
-
-
diff --git a/modules/interventi/add_articolo.php b/modules/interventi/add_articolo.php index 7d67982a8..0f9db8ff0 100644 --- a/modules/interventi/add_articolo.php +++ b/modules/interventi/add_articolo.php @@ -130,21 +130,21 @@ echo ' echo '
-
-
-
diff --git a/modules/my_impianti/edit.php b/modules/my_impianti/edit.php index df13351e4..57e85c634 100644 --- a/modules/my_impianti/edit.php +++ b/modules/my_impianti/edit.php @@ -39,7 +39,7 @@ include_once __DIR__.'/../../core.php';
- {[ "type": "select", "label": "", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Cliente' AND deleted=0 ORDER BY ragione_sociale", "value": "$idanagrafica$", "extra": "onchange=\"load_preventivi( this.value ); load_contratti( this.value ); $('#idsede').load( '/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": "", "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( '/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" ]}
diff --git a/modules/ordini/add_articolo.php b/modules/ordini/add_articolo.php index 736bbb79b..f300445cc 100644 --- a/modules/ordini/add_articolo.php +++ b/modules/ordini/add_articolo.php @@ -94,21 +94,21 @@ echo ' echo '
-
-
-
diff --git a/src/AJAX.php b/src/AJAX.php index 0d9711b4d..888139c07 100644 --- a/src/AJAX.php +++ b/src/AJAX.php @@ -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; + } } diff --git a/src/Modules.php b/src/Modules.php index 6cbd40f0c..62c3efc32 100644 --- a/src/Modules.php +++ b/src/Modules.php @@ -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. *