From f0431b8243800f0ebfa660e08ed85bcd23bb9038 Mon Sep 17 00:00:00 2001 From: Matheo Bonucia Date: Tue, 6 Aug 2024 14:40:35 +0000 Subject: [PATCH] =?UTF-8?q?Inser=C3=A7=C3=A3o=20da=20nova=20feature=20de?= =?UTF-8?q?=20escolher=20entre=20supervisor=20e=20agente=20no=20cadastro?= =?UTF-8?q?=20de=20usuario=20e=20atualiza=C3=A7=C3=A3o=20dos=20valores=20d?= =?UTF-8?q?e=20org=5Fid=20ao=20iniciar=20um=20banco,=20definindo=201=20par?= =?UTF-8?q?a=20a=20empresa=20master.=20Cria=C3=A7=C3=A3o=20da=20grupos=20p?= =?UTF-8?q?adr=C3=B5es=20para=20cada=20organiza=C3=A7=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cadastros/organizacao/cadOrganizacao.php | 61 +++++++++++++++++------- projeto/base/sql/versao-1.9.0.sql | 4 +- seguranca/usuarioCad.php | 49 ++++++++++++++++++- templates/seguranca/usuario.tpl | 19 ++++---- 4 files changed, 105 insertions(+), 28 deletions(-) diff --git a/cadastros/organizacao/cadOrganizacao.php b/cadastros/organizacao/cadOrganizacao.php index 067bbf3f..7e9fde1a 100644 --- a/cadastros/organizacao/cadOrganizacao.php +++ b/cadastros/organizacao/cadOrganizacao.php @@ -133,28 +133,53 @@ function importIdTables($dbcon, $organizacao) return true; } -function criarGruposDefault($dbcon, $org_id) -{ - $query = "INSERT INTO pbx_grupo (gp_nome, gp_status, gp_user, gp_system, org_id) - SELECT gp_nome, gp_status, gp_user, gp_system, $org_id - FROM pbx_grupo - WHERE gp_nome IN ('ADMINISTRADOR','SUPERVISOR','AGENTE') - AND gp_system = 0 - AND org_id = 1 - RETURNING gp_id, gp_nome"; - $result = pg_query($dbcon, $query); - $gps = pg_fetch_all($result); +function criarGruposDefault($dbcon, $org_id) { + try { + // Iniciar uma transação + if (!pg_query($dbcon, 'BEGIN')) { + throw new Exception("Erro ao iniciar transação: " . pg_last_error($dbcon)); + } + + $query = "INSERT INTO pbx_grupo (gp_nome, gp_status, gp_user, gp_system, org_id) + SELECT gp_nome, gp_status, gp_user, gp_system, $org_id + FROM pbx_grupo + WHERE gp_nome IN ('ADMINISTRADOR','SUPERVISOR','AGENTE') + AND gp_system = 0 + AND org_id = 1 + RETURNING gp_id, gp_nome"; + + $result = pg_query($dbcon, $query); + + if ($result) { + $grupos = pg_fetch_all($result); - foreach ($gps as $g) { - $sql = "INSERT INTO pbx_grupo_funcoes (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_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); + foreach ($grupos as $grupo) { + $sql = "INSERT INTO pbx_grupo_funcoes (gp_id, fun_id, org_id) + SELECT {$grupo['gp_id']} AS gp_id, fun_id, {$org_id} AS org_id + FROM pbx_grupo_funcoes + WHERE gp_id = (SELECT gp_id FROM pbx_grupo WHERE org_id = 1 + AND gp_nome = '{$grupo['gp_nome']}' AND gp_system = 0)"; + + if (!pg_query($dbcon, $sql)) { + throw new Exception("Erro ao inserir em pbx_grupo_funcoes: " . pg_last_error($dbcon)); + } + } + + if (!pg_query($dbcon, "COMMIT")) { + throw new Exception("Erro ao confirmar a transação: " . pg_last_error($dbcon)); + } + + } else { + throw new Exception("Erro ao criar os grupos de usuário ao instânciar nova organização: " . pg_last_error($dbcon)); + } + } catch (Exception $error) { + pg_query($dbcon, "ROLLBACK"); + throw new Exception("Erro ao processar requisição no BD: " . $error); + } } + function addUserOrganizacaoGrupo($dbcon, $org_id) { $iduser = $_SESSION["SSidUser"]; diff --git a/projeto/base/sql/versao-1.9.0.sql b/projeto/base/sql/versao-1.9.0.sql index 92b435a3..5f83554b 100644 --- a/projeto/base/sql/versao-1.9.0.sql +++ b/projeto/base/sql/versao-1.9.0.sql @@ -332,4 +332,6 @@ Alter table pbx_rotas_saida Alter table pbx_horarios_itens ADD COLUMN acao_asterisk varchar(115); - \ No newline at end of file +--Sempre que iniciar um banco, sera setado o org_id como 1 para master + +UPDATE pbx_grupo SET org_id = 1 WHERE gp_id IN (28, 29, 30); \ No newline at end of file diff --git a/seguranca/usuarioCad.php b/seguranca/usuarioCad.php index 0081b049..f7aaba93 100644 --- a/seguranca/usuarioCad.php +++ b/seguranca/usuarioCad.php @@ -39,6 +39,9 @@ if (isset($_GET["idUser"]) && $_GET["idUser"] == 0) { $penalidade = $dados["penalidade"]; $dacAgente = GetIdDacPadrao($dbcon, $idUser); $dacPadrao = GetDacs($dbcon, $dacAgente, "", 0, 1); + $userSuper = $dados["supervisor"]; + $userAgente = $dados["agente"]; + } else if ((isset($_POST["btGravar"]))) { $msg = ""; if (empty($_POST["userNome"])) { @@ -113,7 +116,7 @@ if (isset($_GET["idUser"]) && $_GET["idUser"] == 0) { * Inclui usuario como grupo. */ $query = sprintf("INSERT INTO pbx_grupo(gp_nome, gp_status, user_id, gp_user, org_id) - SELECT apelido, 1, id, id, $org_id FROM pbx_usuarios WHERE apelido = %s", QuotedStr($userLogin)); + SELECT apelido, 1, id, id, $org_id FROM pbx_usuarios WHERE id = %s", $user['id']); $result2 = $result && pg_query($dbcon, $query); /* @@ -132,6 +135,13 @@ if (isset($_GET["idUser"]) && $_GET["idUser"] == 0) { $result4 = $result && pg_query($dbcon, $query); } + /* + * Insere o usuario no grupo (agente/supervisor) que foi escolhido. + */ + $grupo = $userSuper === 'TRUE' ? 'SUPERVISOR' : 'AGENTE'; + $query = sprintf("INSERT INTO pbx_grupo_usuario(user_id, gp_id, org_id) SELECT %d, gp_id, org_id FROM pbx_grupo WHERE gp_nome = '%s' AND org_id = $org_id", $user['id'],$grupo); + $result5 = $result && pg_query($dbcon, $query); + /* * Finaliza a transacao. */ @@ -198,6 +208,11 @@ if (isset($_GET["idUser"]) && $_GET["idUser"] == 0) { $result = $result && pg_query($dbcon, $query); } + if($result) { + $grupo = $userSuper === 'TRUE' ? 'SUPERVISOR' : 'AGENTE'; + updateGrupoUser($dbcon,$grupo,$org_id,$idUser); + } + if ($result) { $ret = IncluiAgenteFile($dbcon); $result = strtoupper($ret) == "OK"; @@ -223,6 +238,36 @@ if (isset($_GET["idUser"]) && $_GET["idUser"] == 0) { $jsStartup[] = $msg; } +function updateGrupoUser($dbcon, $grupoNovo, $org_id, $idUser) { + // Determine o grupo oposto + $grupoOposto = $grupoNovo === 'AGENTE' ? 'SUPERVISOR' : 'AGENTE'; + + // Preparar a consulta para obter os IDs dos grupos de interesse + $query = "SELECT gp_nome, gp_id FROM pbx_grupo WHERE (gp_nome = $1 OR gp_nome = $2) AND org_id = $3;"; + $result = pg_query_params($dbcon, $query, array($grupoNovo, $grupoOposto, $org_id)); + + $valorNovo = null; + $valorOposto = null; + + // Verificar e atribuir os valores dos IDs dos grupos + while ($row = pg_fetch_assoc($result)) { + if ($row['gp_nome'] === $grupoNovo) { + $valorNovo = $row['gp_id']; + } elseif ($row['gp_nome'] === $grupoOposto) { + $valorOposto = $row['gp_id']; + } + } + + // Se ambos os IDs dos grupos forem encontrados, atualize o grupo do usuário + if ($valorNovo !== null && $valorOposto !== null) { + $query = "UPDATE pbx_grupo_usuario SET gp_id = $1 WHERE org_id = $2 AND gp_id = $3 AND user_id = $4;"; + $result = pg_query_params($dbcon, $query, array($valorNovo, $org_id, $valorOposto, $idUser)); + return $result !== false; + } else { + return false; + } +} + $smarty->assign("userExpiraSenha", $userExpiraSenha ? $userExpiraSenha : 0); $smarty->assign("userNome", $limpaVar ? "" : $userNome); $smarty->assign("userLogin", $limpaVar ? "" : $userLogin); @@ -237,6 +282,8 @@ $smarty->assign("acaoUser", $acaoUser); $smarty->assign("idUser", $idUser); $smarty->assign("dacPadrao", $dacPadrao); $smarty->assign("penalidade", $penalidade ? $penalidade : "0"); +$smarty->assign("userAgente", $userAgente ? true : false); +$smarty->assign("userSuper", $userSuper ? true : false); $jsJQuery[] = "\$('#userLogin').change(function(){limpaEspaco(this);}) "; $jsJQuery[] = "\$('#penalidade').keyup(function(){somenteNumeros(this);}) "; diff --git a/templates/seguranca/usuario.tpl b/templates/seguranca/usuario.tpl index 0c1e4369..eadef811 100644 --- a/templates/seguranca/usuario.tpl +++ b/templates/seguranca/usuario.tpl @@ -50,14 +50,17 @@ Tipo de usuário - - - - - - - - + + + + + + + + + Penalidade