From 3ca91567419bbe8b25461be9c380c62ed9254708 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Sat, 3 Feb 2018 15:03:48 +0100 Subject: [PATCH] Miglioramento gestione select dinamici MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Miglioramento della gestione dei select dinamici, in risposta a #66. Per il momento la gestione è ancora completamente delegata a file fisici, con possibilità di aggiungere un file ajax/select.php nei moduli. --- ajax_select.php | 819 +++++++++++----------------- modules/anagrafiche/ajax/select.php | 168 ++++++ src/AJAX.php | 102 ++++ src/HTMLBuilder/HTMLBuilder.php | 4 +- 4 files changed, 578 insertions(+), 515 deletions(-) create mode 100644 modules/anagrafiche/ajax/select.php create mode 100644 src/AJAX.php diff --git a/ajax_select.php b/ajax_select.php index 366e76edf..7301af012 100644 --- a/ajax_select.php +++ b/ajax_select.php @@ -2,588 +2,379 @@ include_once __DIR__.'/core.php'; -$op = empty($op) ? filter('op') : $op; -$search = filter('q'); +if (!isset($superselect)) { + $op = empty($op) ? filter('op') : $op; + $search = filter('q'); -if (!isset($elements)) { - $elements = []; -} -$elements = (!is_array($elements)) ? explode(',', $elements) : $elements; - -$superselect = !empty($_SESSION['superselect']) ? $_SESSION['superselect'] : []; - -$where = []; -$filter = []; -$search_fields = []; - -$custom = [ - 'id' => 'id', - 'text' => 'descrizione', -]; - -if (!function_exists('completeResults')) { - function completeResults($query, $where, $filter = [], $search = [], $custom = []) - { - $dbo = Database::getConnection(); - - if (str_contains($query, '|filter|')) { - $query = str_replace('|filter|', !empty($filter) ? 'WHERE '.implode(' OR ', $filter) : '', $query); - } elseif (!empty($filter)) { - $where[] = '('.implode(' OR ', $filter).')'; - } - - if (!empty($search)) { - $where[] = '('.implode(' OR ', $search).')'; - } - - $query = str_replace('|where|', !empty($where) ? 'WHERE '.implode(' AND ', $where) : '', $query); - - $rs = $dbo->fetchArray($query); - - $results = []; - foreach ($rs as $r) { - $result = []; - foreach ($custom as $key => $value) { - $result[$key] = $r[$value]; - } - - $results[] = $result; - } - - return $results; + if (!isset($elements)) { + $elements = []; } -} + $elements = (!is_array($elements)) ? explode(',', $elements) : $elements; -switch ($op) { - case 'clienti': - if (Modules::get('Anagrafiche')['permessi'] != '-') { - //$citta_cliente = ", IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')'))"; + $results = AJAX::getSelectValues($op, $elements, $search); - $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"; + echo json_encode($results); +} 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'; + + $idiva_predefinita = get_var('Iva predefinita'); + $rs = $dbo->fetchArray("SELECT descrizione FROM co_iva WHERE id='".$idiva_predefinita."'"); + $iva_predefinita = $rs[0]['descrizione']; foreach ($elements as $element) { - $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); + $filter[] = 'mg_articoli.id='.prepare($element); } - if (empty($filter)) { - $where[] = "descrizione='Cliente'"; - $where[] = 'deleted=0'; + $where[] = 'attivo=1'; + if (!empty($superselect['dir']) && $superselect['dir'] == 'entrata') { + //$where[] = 'qta>0'; } if (!empty($search)) { - $search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'mg_articoli.descrizione LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'mg_articoli.codice LIKE '.prepare('%'.$search.'%'); } - $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) { - $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); + $wh = ''; + if (!empty($search_fields)) { + $where[] = '('.implode(' OR ', $search_fields).')'; } - if (empty($filter)) { - $where[] = "descrizione='Fornitore'"; - $where[] = 'deleted=0'; + if (!empty($filter)) { + $where[] = '('.implode(' OR ', $filter).')'; } - if (!empty($search)) { - $search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%'); + if (count($where) != 0) { + $wh = 'WHERE '.implode(' AND ', $where); } + $query = str_replace('|where|', $wh, $query); - $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) { - $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); - } - - if (empty($filter)) { - $where[] = "descrizione='Agente'"; - $where[] = 'deleted=0'; - } - - if (!empty($search)) { - $search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%'); - } - - $results = completeResults($query, $where, $filter, $search, $custom); - - // Evidenzia l'agente di default - if ($superselect['idanagrafica']) { - $rsa = $dbo->fetchArray('SELECT idagente FROM an_anagrafiche WHERE idanagrafica='.prepare($superselect['idanagrafica'])); - $idagente_default = $rsa[0]['idagente']; - } else { - $idagente_default = 0; - } - - $ids = array_column($results, $id); - $pos = array_search($idagente_default, $ids); - 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) { - $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); - } - - if (empty($filter)) { - $where[] = "descrizione='Tecnico'"; - $where[] = 'deleted=0'; - } - - if (!empty($search)) { - $search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%'); - } - - // $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) { - $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); - } - - if (empty($filter)) { - $where[] = 'deleted=0'; - } - - if (!empty($search)) { - $search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%'); - } - - // $custom['idtipointervento'] = 'idtipointervento_default'; - } - break; - - case 'sedi': - if (Modules::get('Anagrafiche')['permessi'] != '-' && 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) { - $filter[] = 'id='.prepare($element); - } - - $where[] = 'idanagrafica='.prepare($superselect['idanagrafica']); - - if (!empty($search)) { - $search_fields[] = 'nomesede LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); - } - } - break; - - case 'referenti': - if (Modules::get('Anagrafiche')['permessi'] != '-' && isset($superselect['idanagrafica'])) { - $query = 'SELECT id, nome AS descrizione FROM an_referenti |where| ORDER BY id'; - - foreach ($elements as $element) { - $filter[] = 'id='.prepare($element); - } - - $where[] = 'idanagrafica='.prepare($superselect['idanagrafica']); - - if (!empty($search)) { - $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); - } - } - break; - - 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'; - - $idiva_predefinita = get_var('Iva predefinita'); - $rs = $dbo->fetchArray("SELECT descrizione FROM co_iva WHERE id='".$idiva_predefinita."'"); - $iva_predefinita = $rs[0]['descrizione']; - - foreach ($elements as $element) { - $filter[] = 'mg_articoli.id='.prepare($element); - } - - $where[] = 'attivo=1'; - if (!empty($superselect['dir']) && $superselect['dir'] == 'entrata') { - //$where[] = 'qta>0'; - } - - if (!empty($search)) { - $search_fields[] = 'mg_articoli.descrizione LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'mg_articoli.codice LIKE '.prepare('%'.$search.'%'); - } - - $wh = ''; - if (!empty($search_fields)) { - $where[] = '('.implode(' OR ', $search_fields).')'; - } - - if (!empty($filter)) { - $where[] = '('.implode(' OR ', $filter).')'; - } - - if (count($where) != 0) { - $wh = 'WHERE '.implode(' AND ', $where); - } - $query = str_replace('|where|', $wh, $query); - - $prev = -1; - $rs = $dbo->fetchArray($query); - foreach ($rs as $r) { - if ($prev != $r['id_sottocategoria']) { - $categoria = $dbo->fetchArray('SELECT `nome` FROM `mg_categorie` WHERE `id`='.prepare($r['id_categoria']))[0]['nome']; - - $sottocategoria = $dbo->fetchArray('SELECT `nome` FROM `mg_categorie` WHERE `id`='.prepare($r['id_sottocategoria']))[0]['nome']; - - $prev = $r['id_sottocategoria']; - $results[] = ['text' => $categoria.' ('.(!empty($r['id_sottocategoria']) ? $sottocategoria : '-').')', 'children' => []]; - } - - if (empty($r['idiva_vendita'])) { - $idiva = $idiva_predefinita; - $iva = $iva_predefinita; - } else { - $idiva = $r['idiva_vendita']; - $iva = $r['iva_vendita']; - } - - $results[count($results) - 1]['children'][] = [ - 'id' => $r['id'], - 'text' => $r['codice'].' - '.$r['descrizione'], - 'descrizione' => $r['descrizione'], - 'um' => $r['um'], - 'idiva_vendita' => $idiva, - 'iva_vendita' => $iva, - 'prezzo_acquisto' => Translator::numberToLocale($r['prezzo_acquisto']), - 'prezzo_vendita' => Translator::numberToLocale($r['prezzo_vendita']), - ]; - } - break; - - case 'conti': - if (Modules::get('Piano dei conti')['permessi'] != '-') { - $query = 'SELECT * FROM co_pianodeiconti2'; - + $prev = -1; $rs = $dbo->fetchArray($query); foreach ($rs as $r) { - $results[] = ['text' => $r['numero'].' '.$r['descrizione'], 'children' => []]; + if ($prev != $r['id_sottocategoria']) { + $categoria = $dbo->fetchArray('SELECT `nome` FROM `mg_categorie` WHERE `id`='.prepare($r['id_categoria']))[0]['nome']; - $subquery = 'SELECT * FROM co_pianodeiconti3 |where|'; + $sottocategoria = $dbo->fetchArray('SELECT `nome` FROM `mg_categorie` WHERE `id`='.prepare($r['id_sottocategoria']))[0]['nome']; - $where = []; - $filter = []; - $search_fields = []; + $prev = $r['id_sottocategoria']; + $results[] = ['text' => $categoria.' ('.(!empty($r['id_sottocategoria']) ? $sottocategoria : '-').')', 'children' => []]; + } + + if (empty($r['idiva_vendita'])) { + $idiva = $idiva_predefinita; + $iva = $iva_predefinita; + } else { + $idiva = $r['idiva_vendita']; + $iva = $r['iva_vendita']; + } + + $results[count($results) - 1]['children'][] = [ + 'id' => $r['id'], + 'text' => $r['codice'].' - '.$r['descrizione'], + 'descrizione' => $r['descrizione'], + 'um' => $r['um'], + 'idiva_vendita' => $idiva, + 'iva_vendita' => $iva, + 'prezzo_acquisto' => Translator::numberToLocale($r['prezzo_acquisto']), + 'prezzo_vendita' => Translator::numberToLocale($r['prezzo_vendita']), + ]; + } + break; + + case 'conti': + if (Modules::get('Piano dei conti')['permessi'] != '-') { + $query = 'SELECT * FROM co_pianodeiconti2'; + + $rs = $dbo->fetchArray($query); + foreach ($rs as $r) { + $results[] = ['text' => $r['numero'].' '.$r['descrizione'], 'children' => []]; + + $subquery = 'SELECT * FROM co_pianodeiconti3 |where|'; + + $where = []; + $filter = []; + $search_fields = []; + + foreach ($elements as $element) { + $filter[] = 'id='.prepare($element); + } + if (!empty($filter)) { + $where[] = '('.implode(' OR ', $filter).')'; + } + + $where[] = 'idpianodeiconti2='.prepare($r['id']); + + if (!empty($search)) { + $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); + } + if (!empty($search_fields)) { + $where[] = '('.implode(' OR ', $search_fields).')'; + } + + $wh = ''; + if (count($where) != 0) { + $wh = 'WHERE '.implode(' AND ', $where); + } + $subquery = str_replace('|where|', $wh, $subquery); + + $rs2 = $dbo->fetchArray($subquery); + foreach ($rs2 as $r2) { + $results[count($results) - 1]['children'][] = ['id' => $r2['id'], 'text' => $r2['descrizione']]; + } + } + } + break; + + case 'conti-vendite': + if (Modules::get('Piano dei conti')['permessi'] != '-') { + $query = "SELECT co_pianodeiconti3.id, CONCAT_WS( ' ', co_pianodeiconti3.numero, co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN (co_pianodeiconti2 INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| ORDER BY co_pianodeiconti3.numero ASC"; foreach ($elements as $element) { - $filter[] = 'id='.prepare($element); - } - if (!empty($filter)) { - $where[] = '('.implode(' OR ', $filter).')'; + $filter[] = 'co_pianodeiconti3.id='.prepare($element); } - $where[] = 'idpianodeiconti2='.prepare($r['id']); + $where[] = "co_pianodeiconti1.descrizione='Economico'"; + $where[] = "co_pianodeiconti3.dir='entrata'"; if (!empty($search)) { $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); } - if (!empty($search_fields)) { - $where[] = '('.implode(' OR ', $search_fields).')'; + } + break; + + case 'conti-acquisti': + if (Modules::get('Piano dei conti')['permessi'] != '-') { + $query = "SELECT co_pianodeiconti3.id, CONCAT_WS( ' ', co_pianodeiconti3.numero, co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN (co_pianodeiconti2 INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| ORDER BY co_pianodeiconti3.numero ASC"; + + foreach ($elements as $element) { + $filter[] = 'co_pianodeiconti3.id='.prepare($element); } - $wh = ''; - if (count($where) != 0) { - $wh = 'WHERE '.implode(' AND ', $where); - } - $subquery = str_replace('|where|', $wh, $subquery); + $where[] = "co_pianodeiconti1.descrizione='Economico'"; + $where[] = "co_pianodeiconti3.dir='uscita'"; - $rs2 = $dbo->fetchArray($subquery); - foreach ($rs2 as $r2) { - $results[count($results) - 1]['children'][] = ['id' => $r2['id'], 'text' => $r2['descrizione']]; + if (!empty($search)) { + $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); } } - } - break; + break; - case 'conti-vendite': - if (Modules::get('Piano dei conti')['permessi'] != '-') { - $query = "SELECT co_pianodeiconti3.id, CONCAT_WS( ' ', co_pianodeiconti3.numero, co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN (co_pianodeiconti2 INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| ORDER BY co_pianodeiconti3.numero ASC"; + case 'impianti': + if (Modules::get('MyImpianti')['permessi'] != '-' && isset($superselect['idanagrafica'])) { + $query = 'SELECT id, CONCAT(matricola, " - ", nome) AS descrizione FROM my_impianti |where| ORDER BY idsede'; - foreach ($elements as $element) { - $filter[] = 'co_pianodeiconti3.id='.prepare($element); + foreach ($elements as $element) { + $filter[] = 'id='.prepare($element); + } + + $where[] = 'idanagrafica='.prepare($superselect['idanagrafica']); + $where[] = 'idsede='.prepare($superselect['idsede']); + + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'matricola LIKE '.prepare('%'.$search.'%'); + } + } + break; + + case 'componenti': + if (Modules::get('Gestione componenti')['permessi'] != '-' && isset($superselect['marticola'])) { + $query = 'SELECT id, nome AS descrizione, contenuto FROM my_impianto_componenti |where| ORDER BY id'; + + foreach ($elements as $element) { + $filter[] = 'idimpianto='.prepare($element); + } + + $temp = []; + $impianti = explode(',', $superselect['marticola']); + foreach ($impianti as $key => $idimpianto) { + $temp[] = 'idimpianto='.prepare($idimpianto); + } + $where[] = '('.implode(' OR ', $temp).')'; + + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + } + + $custom['contenuto'] = 'contenuto'; + + $results = completeResults($query, $where, $filter, $search, $custom); + foreach ($results as $key => $value) { + $matricola = \Util\Ini::getValue($r['contenuto'], 'Matricola'); + + $results[$key]['text'] = (empty($matricola) ? '' : $matricola.' - ').$results[$key]['text']; + + unset($results[$key]['content']); + } } - $where[] = "co_pianodeiconti1.descrizione='Economico'"; - $where[] = "co_pianodeiconti3.dir='entrata'"; + break; - if (!empty($search)) { - $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); + case 'categorie': + if (Modules::get('Magazzino')['permessi'] != '-') { + $query = 'SELECT id, nome AS descrizione FROM mg_categorie |where| ORDER BY id'; + + foreach ($elements as $element) { + $filter[] = 'id='.prepare($element); + } + + $where[] = '`parent` IS NULL'; + + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + } } - } - break; + break; - case 'conti-acquisti': - if (Modules::get('Piano dei conti')['permessi'] != '-') { - $query = "SELECT co_pianodeiconti3.id, CONCAT_WS( ' ', co_pianodeiconti3.numero, co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN (co_pianodeiconti2 INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| ORDER BY co_pianodeiconti3.numero ASC"; + case 'sottocategorie': + if (Modules::get('Magazzino')['permessi'] != '-' && isset($superselect['id_categoria'])) { + $query = 'SELECT id, nome AS descrizione FROM mg_categorie |where| ORDER BY id'; - foreach ($elements as $element) { - $filter[] = 'co_pianodeiconti3.id='.prepare($element); + foreach ($elements as $element) { + $filter[] = 'id='.prepare($element); + } + + $where[] = '`parent`='.prepare($superselect['id_categoria']); + + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + } } + break; - $where[] = "co_pianodeiconti1.descrizione='Economico'"; - $where[] = "co_pianodeiconti3.dir='uscita'"; + case 'preventivi': + if (Modules::get('Preventivi')['permessi'] != '-' && isset($superselect['idanagrafica'])) { + $query = 'SELECT co_preventivi.id AS id, an_anagrafiche.idanagrafica, CONCAT(numero, " ", nome) AS descrizione, co_preventivi.idtipointervento, (SELECT descrizione descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento = co_preventivi.idtipointervento) AS idtipointervento_descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id'; - if (!empty($search)) { - $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); + foreach ($elements as $element) { + $filter[] = 'id='.prepare($element); + } + + $where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']); + $where[] = "idstato NOT IN (SELECT `id` FROM co_statipreventivi WHERE descrizione='Bozza' OR descrizione='Rifiutato' OR descrizione='Pagato')"; + + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + } + + $custom['idtipointervento'] = 'idtipointervento'; + $custom['idtipointervento_descrizione'] = 'idtipointervento_descrizione'; } - } - break; + break; - case 'impianti': - if (Modules::get('MyImpianti')['permessi'] != '-' && isset($superselect['idanagrafica'])) { - $query = 'SELECT id, CONCAT(matricola, " - ", nome) AS descrizione FROM my_impianti |where| ORDER BY idsede'; + case 'preventivi_aperti': + if (Modules::get('Preventivi')['permessi'] != '-') { + $query = 'SELECT co_preventivi.id AS id, CONCAT(numero, " ", nome, " (", ragione_sociale, ")") AS descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id'; - foreach ($elements as $element) { - $filter[] = 'id='.prepare($element); + foreach ($elements as $element) { + $filter[] = 'idpreventivo='.prepare($element); + } + $where[] = 'idstato IN (1)'; + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + } } + break; - $where[] = 'idanagrafica='.prepare($superselect['idanagrafica']); - $where[] = 'idsede='.prepare($superselect['idsede']); + case 'contratti': + if (Modules::get('Contratti')['permessi'] != '-') { + $query = 'SELECT co_contratti.id AS id, CONCAT(numero, " ", nome) AS descrizione FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id'; - if (!empty($search)) { - $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); - $search_fields[] = 'matricola LIKE '.prepare('%'.$search.'%'); + foreach ($elements as $element) { + $filter[] = 'id='.prepare($element); + } + + $where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']); + $where[] = 'idstato IN (SELECT `id` FROM co_staticontratti WHERE pianificabile = 1)'; + + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + } } - } - break; + break; - case 'componenti': - if (Modules::get('Gestione componenti')['permessi'] != '-' && isset($superselect['marticola'])) { - $query = 'SELECT id, nome AS descrizione, contenuto FROM my_impianto_componenti |where| ORDER BY id'; + case 'tipiintervento': + if (Modules::get('Interventi')['permessi'] != '-') { + $query = 'SELECT idtipointervento AS id, descrizione FROM in_tipiintervento |where| ORDER BY idtipointervento'; - foreach ($elements as $element) { - $filter[] = 'idimpianto='.prepare($element); + foreach ($elements as $element) { + $filter[] = 'idtipointervento='.prepare($element); + } + if (!empty($search)) { + $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); + } } + break; - $temp = []; - $impianti = explode(',', $superselect['marticola']); - foreach ($impianti as $key => $idimpianto) { - $temp[] = 'idimpianto='.prepare($idimpianto); + case 'misure': + if (Modules::get('Magazzino')['permessi'] != '-') { + $query = 'SELECT valore AS id, valore AS descrizione FROM mg_unitamisura |where| ORDER BY valore'; + + foreach ($elements as $element) { + $filter[] = 'valore='.prepare($element).''; + } + if (!empty($search)) { + $search_fields[] = 'valore LIKE '.prepare('%'.$search.'%'); + } } - $where[] = '('.implode(' OR ', $temp).')'; + break; - if (!empty($search)) { - $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + case 'prodotti_lotti': + if (Modules::get('Magazzino')['permessi'] != '-') { + $query = 'SELECT DISTINCT lotto AS descrizione FROM mg_prodotti |where|'; + + $where[] = 'idarticolo='.prepare($superselect['idarticolo']); + + foreach ($elements as $element) { + $filter[] = 'lotto='.prepare($element).''; + } + + if (!empty($search)) { + $search_fields[] = 'lotto LIKE '.prepare('%'.$search.'%'); + } + + $custom['id'] = 'descrizione'; } + break; - $custom['contenuto'] = 'contenuto'; + case 'prodotti_serial': + if (Modules::get('Magazzino')['permessi'] != '-') { + $query = 'SELECT DISTINCT serial AS descrizione FROM mg_prodotti |where|'; - $results = completeResults($query, $where, $filter, $search, $custom); - foreach ($results as $key => $value) { - $matricola = \Util\Ini::getValue($r['contenuto'], 'Matricola'); + $where[] = 'id_articolo='.prepare($superselect['idarticolo']); + $where[] = 'lotto='.prepare($superselect['lotto']); - $results[$key]['text'] = (empty($matricola) ? '' : $matricola.' - ').$results[$key]['text']; + foreach ($elements as $element) { + $filter[] = 'serial='.prepare($element).''; + } + if (!empty($search)) { + $search_fields[] = 'serial LIKE '.prepare('%'.$search.'%'); + } - unset($results[$key]['content']); + $custom['id'] = 'descrizione'; } - } + break; - break; + case 'prodotti_altro': + if (Modules::get('Magazzino')['permessi'] != '-') { + $query = 'SELECT DISTINCT altro AS descrizione FROM mg_prodotti |where|'; - case 'categorie': - if (Modules::get('Magazzino')['permessi'] != '-') { - $query = 'SELECT id, nome AS descrizione FROM mg_categorie |where| ORDER BY id'; + $where[] = 'id_articolo='.prepare($superselect['idarticolo']); + $where[] = 'lotto='.prepare($superselect['lotto']); + $where[] = 'serial='.prepare($superselect['serial']); - foreach ($elements as $element) { - $filter[] = 'id='.prepare($element); + foreach ($elements as $element) { + $filter[] = 'altro='.prepare($element).''; + } + if (!empty($search)) { + $search_fields[] = 'altro LIKE '.prepare('%'.$search.'%'); + } + + $custom['id'] = 'descrizione'; } - - $where[] = '`parent` IS NULL'; - - if (!empty($search)) { - $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); - } - } - break; - - case 'sottocategorie': - if (Modules::get('Magazzino')['permessi'] != '-' && isset($superselect['id_categoria'])) { - $query = 'SELECT id, nome AS descrizione FROM mg_categorie |where| ORDER BY id'; - - foreach ($elements as $element) { - $filter[] = 'id='.prepare($element); - } - - $where[] = '`parent`='.prepare($superselect['id_categoria']); - - if (!empty($search)) { - $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); - } - } - break; - - case 'preventivi': - if (Modules::get('Preventivi')['permessi'] != '-' && isset($superselect['idanagrafica'])) { - $query = 'SELECT co_preventivi.id AS id, an_anagrafiche.idanagrafica, CONCAT(numero, " ", nome) AS descrizione, co_preventivi.idtipointervento, (SELECT descrizione descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento = co_preventivi.idtipointervento) AS idtipointervento_descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id'; - - foreach ($elements as $element) { - $filter[] = 'id='.prepare($element); - } - - $where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']); - $where[] = "idstato NOT IN (SELECT `id` FROM co_statipreventivi WHERE descrizione='Bozza' OR descrizione='Rifiutato' OR descrizione='Pagato')"; - - if (!empty($search)) { - $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); - } - - $custom['idtipointervento'] = 'idtipointervento'; - $custom['idtipointervento_descrizione'] = 'idtipointervento_descrizione'; - } - break; - - case 'preventivi_aperti': - if (Modules::get('Preventivi')['permessi'] != '-') { - $query = 'SELECT co_preventivi.id AS id, CONCAT(numero, " ", nome, " (", ragione_sociale, ")") AS descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id'; - - foreach ($elements as $element) { - $filter[] = 'idpreventivo='.prepare($element); - } - $where[] = 'idstato IN (1)'; - if (!empty($search)) { - $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); - } - } - break; - - case 'contratti': - if (Modules::get('Contratti')['permessi'] != '-') { - $query = 'SELECT co_contratti.id AS id, CONCAT(numero, " ", nome) AS descrizione FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id'; - - foreach ($elements as $element) { - $filter[] = 'id='.prepare($element); - } - - $where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']); - $where[] = 'idstato IN (SELECT `id` FROM co_staticontratti WHERE pianificabile = 1)'; - - if (!empty($search)) { - $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); - } - } - break; - - case 'tipiintervento': - if (Modules::get('Interventi')['permessi'] != '-') { - $query = 'SELECT idtipointervento AS id, descrizione FROM in_tipiintervento |where| ORDER BY idtipointervento'; - - foreach ($elements as $element) { - $filter[] = 'idtipointervento='.prepare($element); - } - if (!empty($search)) { - $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); - } - } - break; - - case 'misure': - if (Modules::get('Magazzino')['permessi'] != '-') { - $query = 'SELECT valore AS id, valore AS descrizione FROM mg_unitamisura |where| ORDER BY valore'; - - foreach ($elements as $element) { - $filter[] = 'valore='.prepare($element).''; - } - if (!empty($search)) { - $search_fields[] = 'valore LIKE '.prepare('%'.$search.'%'); - } - } - break; - - case 'prodotti_lotti': - if (Modules::get('Magazzino')['permessi'] != '-') { - $query = 'SELECT DISTINCT lotto AS descrizione FROM mg_prodotti |where|'; - - $where[] = 'idarticolo='.prepare($superselect['idarticolo']); - - foreach ($elements as $element) { - $filter[] = 'lotto='.prepare($element).''; - } - - if (!empty($search)) { - $search_fields[] = 'lotto LIKE '.prepare('%'.$search.'%'); - } - - $custom['id'] = 'descrizione'; - } - break; - - case 'prodotti_serial': - if (Modules::get('Magazzino')['permessi'] != '-') { - $query = 'SELECT DISTINCT serial AS descrizione FROM mg_prodotti |where|'; - - $where[] = 'id_articolo='.prepare($superselect['idarticolo']); - $where[] = 'lotto='.prepare($superselect['lotto']); - - foreach ($elements as $element) { - $filter[] = 'serial='.prepare($element).''; - } - if (!empty($search)) { - $search_fields[] = 'serial LIKE '.prepare('%'.$search.'%'); - } - - $custom['id'] = 'descrizione'; - } - break; - - case 'prodotti_altro': - if (Modules::get('Magazzino')['permessi'] != '-') { - $query = 'SELECT DISTINCT altro AS descrizione FROM mg_prodotti |where|'; - - $where[] = 'id_articolo='.prepare($superselect['idarticolo']); - $where[] = 'lotto='.prepare($superselect['lotto']); - $where[] = 'serial='.prepare($superselect['serial']); - - foreach ($elements as $element) { - $filter[] = 'altro='.prepare($element).''; - } - if (!empty($search)) { - $search_fields[] = 'altro LIKE '.prepare('%'.$search.'%'); - } - - $custom['id'] = 'descrizione'; - } - break; + break; + } } - -if (!isset($results) && !empty($query)) { - $results = completeResults($query, $where, $filter, $search_fields, $custom); -} - -echo json_encode($results); diff --git a/modules/anagrafiche/ajax/select.php b/modules/anagrafiche/ajax/select.php new file mode 100644 index 000000000..dc9b1fd44 --- /dev/null +++ b/modules/anagrafiche/ajax/select.php @@ -0,0 +1,168 @@ +fetchArray('SELECT idagente FROM an_anagrafiche WHERE idanagrafica='.prepare($superselect['idanagrafica'])); + $idagente_default = $rsa[0]['idagente']; + } else { + $idagente_default = 0; + } + + $ids = array_column($results, $id); + $pos = array_search($idagente_default, $ids); + 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) { + $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); + } + + if (empty($filter)) { + $where[] = "descrizione='Tecnico'"; + $where[] = 'deleted=0'; + } + + if (!empty($search)) { + $search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%'); + } + + // $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) { + $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); + } + + if (empty($filter)) { + $where[] = 'deleted=0'; + } + + if (!empty($search)) { + $search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%'); + } + + // $custom['idtipointervento'] = 'idtipointervento_default'; + } + break; + + case 'sedi': + if (Modules::get('Anagrafiche')['permessi'] != '-' && 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) { + $filter[] = 'id='.prepare($element); + } + + $where[] = 'idanagrafica='.prepare($superselect['idanagrafica']); + + if (!empty($search)) { + $search_fields[] = 'nomesede LIKE '.prepare('%'.$search.'%'); + $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); + } + } + break; + + case 'referenti': + if (Modules::get('Anagrafiche')['permessi'] != '-' && isset($superselect['idanagrafica'])) { + $query = 'SELECT id, nome AS descrizione FROM an_referenti |where| ORDER BY id'; + + foreach ($elements as $element) { + $filter[] = 'id='.prepare($element); + } + + $where[] = 'idanagrafica='.prepare($superselect['idanagrafica']); + + if (!empty($search)) { + $search_fields[] = 'nome LIKE '.prepare('%'.$search.'%'); + } + } + break; +} diff --git a/src/AJAX.php b/src/AJAX.php new file mode 100644 index 000000000..0d9711b4d --- /dev/null +++ b/src/AJAX.php @@ -0,0 +1,102 @@ +fetchArray($query); + + $results = []; + foreach ($rs as $r) { + $result = []; + foreach ($custom as $key => $value) { + $result[$key] = $r[$value]; + } + + $results[] = $result; + } + + return $results; + } + + private static function getFileValues($file, $resource, $elements = [], $search = null) + { + $superselect = self::getSelectInfo(); + + $where = []; + $filter = []; + $search_fields = []; + + $custom = [ + 'id' => 'id', + 'text' => 'descrizione', + ]; + + require $file; + + if (!isset($results) && !empty($query)) { + $results = self::completeResults($query, $where, $filter, $search_fields, $custom); + } + + return $results; + } + + private static function getSelectInfo() + { + return !empty($_SESSION['superselect']) ? $_SESSION['superselect'] : []; + } +} diff --git a/src/HTMLBuilder/HTMLBuilder.php b/src/HTMLBuilder/HTMLBuilder.php index 2575879ae..ab38884c6 100644 --- a/src/HTMLBuilder/HTMLBuilder.php +++ b/src/HTMLBuilder/HTMLBuilder.php @@ -123,7 +123,9 @@ class HTMLBuilder protected static function generate($json) { // Elaborazione del formato - list($values, $extras) = self::elaborate($json); + $elaboration = self::elaborate($json); + $values = $elaboration[0]; + $extras = $elaboration[1]; $result = null; if (!empty($values)) {