From 94868b3e8d5c02dadc6cec1a5e2e1c95908f67d7 Mon Sep 17 00:00:00 2001 From: Lucas Awade Date: Fri, 15 Dec 2023 20:40:27 +0000 Subject: [PATCH] ajuestes geral sistema de multiempresa --- cadastros/organizacao/cadOrganizacao.php | 11 +++++----- configGeral.php | 2 +- contacteFunc.php | 6 ++++-- projeto/base/sql/versao-1.9.0.sql | 2 ++ seguranca/grupos/grupoSelect.php | 26 ++++++++++++++++-------- seguranca/perfil/perfilGrupo.php | 11 ++++++---- sites/siteInsert.php | 1 - supervisor.php | 2 +- 8 files changed, 38 insertions(+), 23 deletions(-) diff --git a/cadastros/organizacao/cadOrganizacao.php b/cadastros/organizacao/cadOrganizacao.php index 77725939..c1e84697 100644 --- a/cadastros/organizacao/cadOrganizacao.php +++ b/cadastros/organizacao/cadOrganizacao.php @@ -44,7 +44,7 @@ function setOrganizacao($dbcon, $dados, $id = null) } $isExistsMaster = verificaMaster($dbcon); - if ($isExistsMaster == true && $dados['master'] == "checked"){ + if ($isExistsMaster == true && $dados['master'] == "checked") { throw new Exception("Já existe uma empresa master ativa!"); } @@ -144,11 +144,10 @@ function criarGruposDefault($dbcon, $org_id) foreach ($gps as $g) { $sql = "INSERT INTO pbx_grupo_funcoes (gp_id, fun_id, org_id) - SELECT {$g['gp_id']}, fun_id, {$org_id} + SELECT {$g['gp_id']} AS gp_id, fun_id, {$org_id} AS org_id FROM pbx_grupo_funcoes - WHERE gp_nome = '{$g['gp_nome']}' - AND gp_system = 0 - AND org_id = 1; "; + WHERE gp_id = (SELECT gp_id FROM pbx_grupo WHERE org_id = (SELECT min(id) FROM pbx_organizacao) + AND gp_nome = '{$g['gp_nome']}' AND gp_system = 0)"; pg_query($dbcon, $sql); } } @@ -188,7 +187,7 @@ function verificaMaster($dbcon) $query = "SELECT id, master, status FROM pbx_organizacao;"; $result = pg_query($dbcon, $query); $resposta = false; - if(!$result){ + if (!$result) { throw new Exception("Não foi possível verificar se existe organizaçao master!"); } $dados = pg_fetch_all($result); diff --git a/configGeral.php b/configGeral.php index 994dbe31..d210a398 100644 --- a/configGeral.php +++ b/configGeral.php @@ -245,7 +245,7 @@ if ($idSubProg == CONFIG_BASE_DADOS) { prm_exige_proto_vendas, prm_bloqueio, prm_bloqueio_data, prm_abandonada_semretorno, prm_max_licenca, prm_max_ramal,prm_normaliza_agenda, prm_max_dias_relatorio, prm_ocultar_telefone, prm_ocultar_email, prm_ocultar_documento,prm_max_licenca_fixo, prm_relatorio_servico - FROM pbx_parametros WHERE id = 1"; + FROM pbx_parametros WHERE id = {$_SESSION['prm_id']}"; $result = pg_query($dbcon, $query); $dados = @pg_fetch_array($result); foreach ($fields as $value) { diff --git a/contacteFunc.php b/contacteFunc.php index f7eba22d..34e7bc90 100644 --- a/contacteFunc.php +++ b/contacteFunc.php @@ -24,14 +24,16 @@ function GetDac($dbcon, $codDac, $disableb = "", $incTodos = 0, $soAtivo = 1, $i } if ($isAdm) { - $query = "SELECT DISTINCT id, nome AS nome, 'Receptivo' AS tipo FROM pbx_queues_grupos d WHERE 1=1 AND org_id = $org_id " . ($soAtivo ? " and status = 'A' " : "") . " ORDER BY 2"; + $query = "SELECT DISTINCT id, nome AS nome, 'Receptivo' AS tipo + FROM pbx_queues_grupos d + WHERE 1=1 AND org_id = $org_id " . ($soAtivo ? " AND status = 'A' " : "") . " ORDER BY 2"; } else { $query = "SELECT DISTINCT d.id, d.nome, 'Receptivo' AS tipo, 'false' AS padrao FROM pbx_usuarios a, pbx_grupo_usuario b, pbx_fila_grupos c, pbx_dacs d WHERE b.user_id = a.id AND c.gp_id = b.gp_id AND d.id = c.id - AND a.org_id = $org_id + AND c.org_id = $org_id AND lower(a.matricula) = lower('$matricula') " . ($soAtivo ? " and d.status = 'A' " : "") . " order by 1, 2 "; } diff --git a/projeto/base/sql/versao-1.9.0.sql b/projeto/base/sql/versao-1.9.0.sql index 3a385255..64a1fc52 100644 --- a/projeto/base/sql/versao-1.9.0.sql +++ b/projeto/base/sql/versao-1.9.0.sql @@ -90,6 +90,8 @@ DROP INDEX "idxSipRamaisNome"; DROP INDEX "pbx_usuarios_matricula_key"; DROP INDEX "idxUsuariosApelido"; DROP INDEX "idxGrupNome"; +DROP INDEX "idxSiteNome"; +DROP INDEX "idxUnqBase"; ----------------- ALTER TABLE pbx_grupo DROP CONSTRAINT "idxGrupNome"; ALTER TABLE pbx_usuarios DROP CONSTRAINT pbx_usuarios_new_matricula_key; diff --git a/seguranca/grupos/grupoSelect.php b/seguranca/grupos/grupoSelect.php index 657d4d8c..f9845c09 100644 --- a/seguranca/grupos/grupoSelect.php +++ b/seguranca/grupos/grupoSelect.php @@ -37,24 +37,32 @@ if (IsUserAdmin()) { * sem a necessidade de estar em outros grupos diretamente o que evita o bloqueio de audio. */ $idUser = GetIdUser(); - $gpCompl = " and gp_id in( select gp_id from pbx_grupo_usuario where user_id = (select id FROM pbx_usuarios where apelido = 'administrador'))"; - $permissoesAdmin = "\nunion\nselect gp_id, gp_nome, gp_status, user_id, 1 as gp_lgpd, case when(user_id = 0)then 0 else 1 end as ord from pbx_grupo a where user_id > '0'\n"; + //$gpCompl = " AND gp_id IN( SELECT gp_id FROM pbx_grupo_usuario WHERE user_id = (SELECT id FROM pbx_usuarios WHERE apelido = 'administrador'))"; + $permissoesAdmin = "\nUNION\n"; + $permissoesAdmin .= "SELECT gp_id, gp_nome, gp_status, user_id, 1 as gp_lgpd, + CASE WHEN(user_id = 0)THEN 0 ELSE 1 END AS ord + FROM pbx_grupo a WHERE user_id > '0' + AND a.org_id = {$org_id} \n"; } else if (!IsAdmin()) { $idUser = GetIdUser(); - $gpCompl = " and gp_id in( select gp_id from pbx_grupo_usuario where user_id = $idUser)"; + $gpCompl = " AND gp_id IN(SELECT gp_id FROM pbx_grupo_usuario WHERE user_id = $idUser)"; } /* * Restringe para todos. */ -$restringLgpd = " and a.gp_id not in(select gp_id from pbx_grupo where gp_nome ilike 'LGPD_%_%_%')"; +$restringLgpd = " AND a.gp_id NOT IN(SELECT gp_id FROM pbx_grupo WHERE gp_nome ILIKE 'LGPD_%_%_%')"; /* * Libera apenas para quem tiver acesso atribuido a administracao da lgpd. */ $liberaLgpd = ''; if (VerificaPerfilAcesso($dbcon, GetIdProgFromNomeMenu('mnLgpdAdm'))) { - $liberaLgpd = "\nunion\nselect gp_id, gp_nome, gp_status, user_id, 1 as gp_lgpd, case when(user_id = 0)then 0 else 1 end as ord from pbx_grupo a where gp_nome ilike 'LGPD_%_%_%'\n"; + $liberaLgpd = "\nUNION\n"; + $liberaLgpd .= "SELECT gp_id, gp_nome, gp_status, user_id, 1 AS gp_lgpd, + CASE WHEN(user_id = 0)THEN 0 ELSE 1 END AS ord + FROM pbx_grupo a WHERE gp_nome ILIKE 'LGPD_%_%_%' + AND a.org_id = {$org_id} \n"; } $acessoAudio = VerificaPerfilAcesso($dbcon, GetIdProgFromNomeArq('audio.php')); @@ -63,13 +71,15 @@ $colspan = $acessoAudio ? 6 : 5; $compl = ''; if (isset($_REQUEST['paramPesquisa']) && $_REQUEST['paramPesquisa']) { $compl = PreparaLike($filtro, true); - $compl = sprintf("and (a.gp_nome ilike %s)", $compl); + $compl = sprintf("AND (a.gp_nome ILIKE %s)", $compl); } $compl .= "AND org_id = $org_id "; -$query = "SELECT gp_id, gp_nome, gp_status, user_id, 0 as gp_lgpd, case when(user_id = 0)then 0 else 1 end as ord FROM pbx_grupo a\n"; -$query .= "WHERE a.gp_system = '0' $compl $gpCompl $restringLgpd $liberaLgpd $permissoesAdmin order by 5, gp_nome"; +$query = "SELECT gp_id, gp_nome, gp_status, user_id, 0 AS gp_lgpd, CASE WHEN(user_id = 0)THEN 0 ELSE 1 END AS ord FROM pbx_grupo a\n"; +$query .= "WHERE a.gp_system = '0' + AND org_id = {$org_id} + $compl $gpCompl $restringLgpd $liberaLgpd $permissoesAdmin ORDER BY 5, gp_nome"; $params = "¶mPesquisa=$filtro"; $links = PaginaDados($idProg, $query, $params, $regPagina, $offSet, $pagMostra, true); diff --git a/seguranca/perfil/perfilGrupo.php b/seguranca/perfil/perfilGrupo.php index 210179b5..5dd95eb8 100644 --- a/seguranca/perfil/perfilGrupo.php +++ b/seguranca/perfil/perfilGrupo.php @@ -40,9 +40,12 @@ function GetGrupoDef($dbcon, &$codGp, &$nomeGp, $idUser) { $org_id = GetOrganizacao(); $flagSystem = (IsAdmin() && IsLocalServer()) ? '1=1' : " gp_system = '0' "; - $query = "SELECT gp_id, gp_nome FROM pbx_grupo g WHERE $flagSystem and gp_status = 1 {REST} AND org_id = $org_id ORDER BY gp_nome LIMIT 1"; + $query = "SELECT gp_id, gp_nome + FROM pbx_grupo g + WHERE $flagSystem and gp_status = 1 + AND org_id = $org_id + ORDER BY gp_nome LIMIT 1"; //restricao se o usuario nao for admin - $query = strtoupper(GetLogin()) == "ADMIN" ? str_replace("{REST}", "", $query) : str_replace("{REST}", " AND exists(SELECT '' FROM pbx_grupo_usuario WHERE gp_id = g.gp_id AND user_id = $idUser)", $query); $result = pg_query($dbcon, $query); $row = pg_fetch_array($result); $codGp = $row["gp_id"]; @@ -63,8 +66,8 @@ function GetGrupo($dbcon, $codGp, $size = 1) FROM pbx_grupo g WHERE $flagSystem AND org_id = $org_id - AND gp_status = 1 {REST} ORDER BY 3,2"; - $query = strtoupper(GetLogin()) == "ADMIN" ? str_replace("{REST}", "", $query) : str_replace("{REST}", " AND exists(SELECT '' from pbx_grupo_usuario where gp_id = g.gp_id and user_id = $idUser)", $query); + AND gp_status = 1 ORDER BY 3,2"; + $result = pg_query($dbcon, $query); $sel = ""; $cont = 0; diff --git a/sites/siteInsert.php b/sites/siteInsert.php index 12a77a9d..d6a92466 100644 --- a/sites/siteInsert.php +++ b/sites/siteInsert.php @@ -7,7 +7,6 @@ $org_id = GetOrganizacao(); if (IsPostBack() && empty($erro)) { $query = "INSERT INTO pbx_sites (host, usuario, senha, basedados, porta, descricao, status, org_id) VALUES(%s, %s, %s, %s, %s, %s, %s, %s)"; $query = sprintf($query, QuotedStr($host), QuotedStr($usuario), QuotedStr($senha), QuotedStr($basedados), QuotedStr($porta), QuotedStr($descricao), $status, $org_id); - echo $query; $result = pg_query($dbcon, $query); if ($result) { $erro = "Registro inserido com sucesso!"; diff --git a/supervisor.php b/supervisor.php index b15ff5ed..40678fd5 100644 --- a/supervisor.php +++ b/supervisor.php @@ -546,7 +546,7 @@ function GetQueryAgt($dac) FROM pbx_supervisor_agentes a WHERE a.dac = CASE WHEN(upper('$dac') = 'TODOS')THEN a.dac ELSE '$dac' END\n"; - if ($selTodos && !IsAdmin()) { + if ($selTodos && !IsAdmin() && $dacsAcesso) { $queryLocal .= " AND a.dac IN($dacsAcesso)\n"; } $queryLocal .= " ORDER BY a.dac, a.nome";