From 6ed1afcdfc90c59fced51f9720b71b68aff20f73 Mon Sep 17 00:00:00 2001 From: "douglas.strappasson" Date: Tue, 10 Oct 2023 11:19:30 -0400 Subject: [PATCH] finalizei os ajustes do icone e da tela para edicao, faltam apenas as permissoes. --- contacteFunc.php | 2 +- projeto/base/sql/versao-1.8.1.sql | 13 + .../geral/relClassificacaoDetalhes.php | 58 +++-- supervisao/editaClassificado.php | 222 +++++++----------- templates/supervisao/editaClassificado.tpl | 31 ++- 5 files changed, 143 insertions(+), 183 deletions(-) diff --git a/contacteFunc.php b/contacteFunc.php index 20f99a81..428712e3 100644 --- a/contacteFunc.php +++ b/contacteFunc.php @@ -861,7 +861,7 @@ function GetClassificacao($db, $idClas, $dac, $useSelect = 1) { function GetItem($db, $idClas, $idItem, $useSelect = 1) { $query = " SELECT clit_id, clit_descricao FROM pbx_classifica_item where clas_id = $idClas and clit_status = 1 order by 2"; $result = pg_query($db, $query); - $clas = $useSelect ? "" : ""; if (!$idClas) $clas .= ""; diff --git a/projeto/base/sql/versao-1.8.1.sql b/projeto/base/sql/versao-1.8.1.sql index ae3581ea..925d2b65 100644 --- a/projeto/base/sql/versao-1.8.1.sql +++ b/projeto/base/sql/versao-1.8.1.sql @@ -2,6 +2,19 @@ update pbx_tarifa_tipo_preco set ttp_descricao = 'Móvel Local' where ttp_id = 'vc3'; update pbx_tarifa_tipo_preco set ttp_descricao = 'Móvel Interurbano' where ttp_id = 'vc4'; +-- as colunas serão utilizadas para registrar quando houver edição da classificação através do icone inserido do relatorio de classificação por agente. +ALTER TABLE pbx_classifica_reg +ADD matricula_ultimo_update INT DEFAULT NULL, +ADD data_ultimo_update timestamp DEFAULT NULL; + + +-- Para remover a restrição UNIQUE da constraint +ALTER TABLE public.pbx_classifica_reg DROP CONSTRAINT "idxPkClasReg"; + +-- Acrescentando a coluna primary key na tabela para facilitar as consultas +ALTER TABLE pbx_classifica_reg +ADD COLUMN id serial PRIMARY KEY; + -- acrescenta flag que identifica se o numero de destino foi corrigido no script importaBilhetes através da funcao CorrigeNumeroDestino -- o objetivo é evitar que ligações sejam gravadas na tabela pbx_bilhetes com o numero de destino incorreto. ALTER TABLE ast_bilhetes diff --git a/relatorios/callcenter/geral/relClassificacaoDetalhes.php b/relatorios/callcenter/geral/relClassificacaoDetalhes.php index 5e9b5fe3..05ebd9fe 100644 --- a/relatorios/callcenter/geral/relClassificacaoDetalhes.php +++ b/relatorios/callcenter/geral/relClassificacaoDetalhes.php @@ -1,7 +1,8 @@ ___servico; $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA; - $query = "SELECT " . ( $mostraColunaServicos ? "coalesce(s.serv_id, 'Não Informado') as serv_id," : "" ) . " calldate, apelido, src AS origem, dst AS destino, f.nome, clas_descricao, clit_descricao,tplg_descricao, - CASE WHEN (g.conf_uid <> '' AND g.conf_discado = 1) THEN 'S' ELSE 'N' END AS discador + $query = "SELECT b.id AS reg_class_id, + a.uniqueid, " . ( $mostraColunaServicos ? "coalesce(s.serv_id, 'Não Informado') as serv_id," : "" ) . " calldate, apelido, src AS origem, dst AS destino, f.nome, clas_descricao, clit_descricao,tplg_descricao, + CASE WHEN (g.conf_uid <> '' AND g.conf_discado = 1) THEN 'S' ELSE 'N' END AS discador, b.id_dac as id_dac, a.uniqueid as uniqueid, b.clas_id, b.clit_id, b.data_reg FROM pbx_bilhetes a INNER JOIN pbx_tipo_ligacao h ON h.tplg_codigo = a.tipo_chamada INNER JOIN pbx_classifica_reg b ON a.uniqueid = b.id_bilhetes AND a.calldate = (SELECT MAX(calldate) FROM pbx_bilhetes WHERE uniqueid = b.id_bilhetes) @@ -152,7 +154,7 @@ class RelClassificacaoDetalhes extends Relatorios { } $query .= $mostraColunaServicos ? "ORDER BY s.serv_id, calldate" : "ORDER BY calldate"; - $query = sprintf($query, $dataIni, $dataFim, $dac); + $query = sprintf($query, $dataIni, $dataFim, $dac); $subQuery = "SELECT count(1) as chmd FROM pbx_bilhetes a INNER JOIN pbx_eventos_dacs b ON b.uid2 = a.uniqueid AND b.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS') @@ -205,7 +207,7 @@ class RelClassificacaoDetalhes extends Relatorios { ); $dadosField = array( - 'calldate', + 'data_reg', 'origem', 'destino', 'apelido', @@ -237,7 +239,7 @@ class RelClassificacaoDetalhes extends Relatorios { $row['clit_descricao'] = RemoveAcentos($row['clit_descricao']); $row['clas_descricao'] = RemoveAcentos($row['clas_descricao']); $row['tplg_descricao'] = explode(' ', $row['tplg_descricao'])[0]; - $row['calldate'] = date('d/m/Y H:i:s', strtotime($row['calldate'])); + $row['data_reg'] = date('d/m/Y H:i:s', strtotime($row['data_reg'])); $row['origem'] = ocultarTelefone($row['origem']); $row['destino'] = ocultarTelefone($row['destino']); // Formata linha de dados. @@ -291,7 +293,7 @@ class RelClassificacaoDetalhes extends Relatorios { ); $dadosField = array( - 'calldate', + 'data_reg', 'origem', 'destino', 'apelido', @@ -332,7 +334,7 @@ class RelClassificacaoDetalhes extends Relatorios { $row['clit_descricao'] = RemoveAcentos($row['clit_descricao']); $row['clas_descricao'] = RemoveAcentos($row['clas_descricao']); $row['tplg_descricao'] = explode(' ', $row['tplg_descricao'])[0]; - $row['calldate'] = date('d/m/Y H:i:s', strtotime($row['calldate'])); + $row['data_reg'] = date('d/m/Y H:i:s', strtotime($row['data_reg'])); $row['origem'] = ocultarTelefone($row['origem']); $row['destino'] = ocultarTelefone($row['destino']); @@ -353,10 +355,7 @@ class RelClassificacaoDetalhes extends Relatorios { protected function ___PreparaGrid() { $dataRel = array(); - $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA; - $editaClassificacao = " - \"Não"; + $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA; $dadosCabecalio = array( 'Data/Hora' => 'align="center"', @@ -367,27 +366,20 @@ class RelClassificacaoDetalhes extends Relatorios { 'Item' => 'align="center"', 'Tipo' => 'align="center"', 'Discador' => 'align="Center"', + 'Editar Classificação' => 'align="Center"' ); $dadosField = array( - 'calldate' => 'align="center"', + 'data_reg' => 'align="center"', 'origem' => 'align="left"', 'destino' => 'align="left"', 'apelido' => 'align="left"', 'clas_descricao' => 'align="left"', 'clit_descricao' => 'align="center"', 'tplg_descricao' => 'align="center"', - 'discador' => 'align="Center"' + 'discador' => 'align="Center"', + 'editarClassificacao' => 'align="Center"' ); - - if (IsAdmin()){ - $dadosCabecalio += [ - 'Editar Classificação' => 'align="Center"' - ]; - $dadosField += [ - 'editarClassificacao' => 'align="Center"' - ]; - } if ($mostraColunaServicos) { $dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio); @@ -430,7 +422,7 @@ class RelClassificacaoDetalhes extends Relatorios { $oldSrv = $srv; } if ((($srv != $oldSrv)) || !$row) { - $dataRel[] = sprintf("Total [%s] %s", $oldSrv, $somaServico); + $dataRel[] = sprintf("Total [%s] %s", $oldSrv, $somaServico); $oldSrv = $srv; $somaServico = 0; } @@ -443,17 +435,21 @@ class RelClassificacaoDetalhes extends Relatorios { * Linhas de dados. */ foreach ($this->GetData()[0] as $row) { - + $editaClassificacao = sprintf(" + \"Clique", $row['id_dac'], $row['clas_id'], $row['clit_id'], $row['reg_class_id']); + if ($mostraColunaServicos) { $agrupaServico($row); } $somaReg ++; - $row["calldate"] = date('d/m/Y H:i:s', strtotime($row["calldate"])); + $row["data_reg"] = date('d/m/Y H:i:s', strtotime($row["data_reg"])); $row['tplg_descricao'] = explode(' ', $row['tplg_descricao'])[0]; $row['origem'] = ocultarTelefone($row['origem']); $row['destino'] = ocultarTelefone($row['destino']); $row['editarClassificacao'] = $editaClassificacao; + // Formata linha de dados. $linha = ""; foreach ($dadosField as $key => $value) { @@ -465,10 +461,10 @@ class RelClassificacaoDetalhes extends Relatorios { /* * Linha de totalizacao. */ - $colspan = 6; + $colspan = 7; if ($mostraColunaServicos) { $agrupaServico(false); - $colspan = 7; + $colspan = 8; } $linha = 'Total [ Chamadas Periodo ]: %sRegistros: %s'; @@ -505,7 +501,7 @@ class RelClassificacaoDetalhes extends Relatorios { 'Discador' => 'C', ); $dadosField = array( - 'calldate' => 'C', + 'data_reg' => 'C', 'origem' => 'C', 'destino' => 'C', 'apelido' => 'C', @@ -537,7 +533,7 @@ class RelClassificacaoDetalhes extends Relatorios { $perc = !$somaChmTotal ? 0 : (($somaServico / $somaChmTotal) * 100.0); $data = []; $data['serv_id'] = "TOTAL[$oldSrv]"; - $data['calldate'] = ' '; + $data['data_reg'] = ' '; $data['origem'] = ' '; $data['apelido'] = ' '; $data['clas_descricao'] = ' '; @@ -562,7 +558,7 @@ class RelClassificacaoDetalhes extends Relatorios { } $somaReg ++; - $row['calldate'] = date('d/m/Y H:i:s', strtotime($row['calldate'])); + $row['data_reg'] = date('d/m/Y H:i:s', strtotime($row['data_reg'])); $row['tplg_descricao'] = explode(' ', $row['tplg_descricao'])[0]; $row['origem'] = ocultarTelefone($row['origem']); $row['destino'] = ocultarTelefone($row['destino']); diff --git a/supervisao/editaClassificado.php b/supervisao/editaClassificado.php index 27588893..5db34d3d 100644 --- a/supervisao/editaClassificado.php +++ b/supervisao/editaClassificado.php @@ -1,172 +1,108 @@ %s"; - $idClas = isset($_REQUEST['listaClas']) ? $_REQUEST['listaClas'] : 0; - $idItem = isset($_REQUEST['listaItem']) ? $_REQUEST['listaItem'] : 0; - $regCad = array(); + $parameters = ['idDac', 'listaClas', 'listaItem', 'regClassId']; - if (isset($_GET['audio'])) { - $file = $_GET["audio"]; - $filepath = VerificaCharFinal($_SESSION[SS_PRM_PATH_AUDIO]) . $file; + if ($wipeSessionParameter) { + unset($_SESSION['parameters']); + $dados = array(); - if (!@file_get_contents($filepath)) { - $jsStartup[] = "alert('Arquivo não encontrado!');"; - } else { - DownloadAudio($file, $filepath); - exit; + foreach ($parameters as $parameter) { + if (isset($_REQUEST[$parameter])) { + $dados[$parameter] = $_REQUEST[$parameter]; + } + + $_SESSION['parameters'] = $dados; } + } else { + $_SESSION['parameters']["listaClasNew"] ? $_SESSION['parameters']['listaClas'] = $_SESSION['parameters']["listaClasNew"] : ''; + $_SESSION['parameters']["idItemNew"] ? $_SESSION['parameters']['listaItem'] = $_SESSION['parameters']["idItemNew"] : ''; + + $_SESSION['parameters']["listaClasNew"] = $_REQUEST["listaClas"] ? $_REQUEST["listaClas"] : null; + $_SESSION['parameters']["idItemNew"] = $_REQUEST["listaItem"] ? $_REQUEST["listaItem"] : null; } - if (IsPostBack() && isset($_POST['bt_classifica'])) { + $wipeSessionParameter = 0; //evita que a session seja limpa. - $msg = ''; - $clas = $idClas; - $clasItem = $idItem; - $regClass = isset($_POST['sel']) ? $_POST['sel'] : []; + // Utilizei a função extract() para criar variáveis com nomes de chaves do array e atribuir seus respectivos valores + if (isset($_SESSION['parameters'])){ + extract($_SESSION['parameters']); + } - if (!count($regClass)) { - $msg = "Selecione pelo menos um registro!"; - $jsStartup[] = "alert('$msg');"; - } else { - $result = pg_query($dbcon, "begin"); + if (IsPostBack() && isset($_POST['bt_classifica'])) { + $msg = ''; + $result = pg_query($dbcon, "begin"); - if (!$result) { - $msg = "Não foi possível inicar uma transação no banco de dados!"; - } else { - $regMat = array(); - foreach ($regClass as $value) { - $reg = explode("|", $value); - $matricula = $reg[0]; - $uniqueid = $reg[1]; - $regCad[] = $uniqueid; - - if (!$clas || !$clasItem) { - $msg = "Selecione uma classificação!"; - } - - if (!$msg) { - - /* - * Esta informações são utilizadas no relatorio de abandonadas na fila para identificar - * qdo o agente não esta recdebendo uma chamada por não ter classificado a mesma estando - * portanto desabilitado de receber chamadas o que pode causar abandono. - */ - $matUser = GetMatricula(); - $query = "update pbx_registra_classificacao set rgc_saida = now(), matricula_reg = '$matUser' where uid = '$uniqueid' and rgc_saida is null"; - pg_query($dbcon, $query); - - $query = "insert - into pbx_classifica_reg(matricula, clas_id, clit_id, id_bilhetes, id_dac, contrib_id, mun_id) - values(%s, %s, %s, %s, %s, '0', '0' )"; - - $query = sprintf($query, QuotedStr($matricula), QuotedStr($clas), QuotedStr($clasItem), QuotedStr($uniqueid), QuotedStr($idDac)); - $result = pg_query($dbcon, $query); - - if (array_search($matricula, $regMat) === false) { - @GetUrl(AST_REM_PAUSA, $dac, $matricula); - $regMat[] = $matricula; - } - - if (!$result) { - $msg = "Não foi possível registrar a classificação!"; - } - } - } + if (!$result) { + $msg = "Não foi possível inicar uma transação no banco de dados!"; + } else { + if (!$listaClas || !$listaItem) { + $msg = "Selecione uma classificação!"; + } - if (!$msg) { - $msg = "Registros classificados com sucesso!"; - pg_query($dbcon, "commit"); - } else { - pg_query($dbcon, "rollback"); + if (!$msg) { + /* + * Esta informações são utilizadas para registrar quem realizou a ultima edição da classificação. + */ + $matUser = GetMatricula(); + $query = "UPDATE pbx_classifica_reg SET clas_id = $listaClasNew, clit_id = $idItemNew, matricula_ultimo_update = $matUser, data_ultimo_update = NOW() + WHERE id = $regClassId"; + $result = pg_query($dbcon, $query); + + if (!$result) { + $msg = "Não foi possível registrar a classificação!"; } - - $jsStartup[] = "alert('$msg');"; } - } - } - $dataIni = date('d/m/Y'); - $dataFim = date('d/m/Y'); - - if (isset($_POST['btConsulta'])) { - if (!is_date($_POST["dataIni"]) || !is_date($_POST["dataFim"])) { - $jsStartup[] = "alert('Datas inválidas, verifique e tente novamente!');"; - } else { - $dataIni = $_POST["dataIni"]; - $dataFim = $_POST["dataFim"]; + if (!$msg) { + $msg = "Registros classificados com sucesso!"; + pg_query($dbcon, "commit"); + } else { + pg_query($dbcon, "rollback"); + } + $jsStartup[] = "alert('$msg');"; } } + $idClas = $listaClasNew ? $listaClasNew : $listaClas; + $idItemClass = $idItemNew ? $idItemNew : $listaItem; + + $query = "SELECT b.id_bilhetes, + b.data_reg, + e.matricula AS agente, + e.nome nome_agente, + b.matricula_ultimo_update, + b.data_ultimo_update, + b.id_dac, + (SELECT nome FROM pbx_usuarios WHERE matricula = CAST(b.matricula_ultimo_update as VARCHAR)) as nome_update + FROM pbx_classifica_reg b + INNER JOIN pbx_classifica_atendimento c ON c.clas_id = b.clas_id + INNER JOIN pbx_usuarios e ON e.matricula = b.matricula + WHERE b.id = $regClassId"; - $dtIni = FormatDtMssql($dataIni); - $dtFim = FormatDtMssql($dataFim); - - $query = sprintf("select id_bilhetes, data_bilhete, calldate, origem, destino, uniqueid, fila, agente, nome_agente, audio,(strtoint(tempo_atendimento) * interval '1 second')as tempo_atendimento, evento " - . " from pbx_nao_classificado where fila = %s and data_bilhete >= %s and data_bilhete <= %s ", QuotedStr($dac), QuotedStr($dtIni), QuotedStr($dtFim)); $result = pg_query($dbcon, $query); $linhas = ''; - $imp = 0; - $downloadAudio = VerificaPerfilAcesso($dbcon, GetIdProgFromNomeArq('downloadAudio.php')); - $acessoAudio = GetAcessoAudio($dac); - while ($dados = pg_fetch_array($result)) { - $uid = $dados["uniqueid"]; - $agt = $dados["agente"]; - $agtNomte = $dados["nome_agente"]; - $dt = FormataDBDataHora($dados["calldate"]); - $duracao = $dados["tempo_atendimento"]; - $fone = array_search($dados["evento"], array('COMPLETEAGENT', 'COMPLETECALLER', 'COMPLETECALLERRAMAL', 'TRANSFER')) !== false ? $dados["origem"] : $dados["destino"]; - $audio = $dados["audio"]; - $sel = array_search($uid, $regCad) !== false ? 'checked="checked"' : ''; - $check = sprintf("", $agt, $uid, $sel); - - if (!$downloadAudio || IsAdmin() || !$acessoAudio) { - if (IsAdmin()) { - $msgAudio = "Usuário Administrador não tem permissão para acessar áudios!"; - } else { - $msgAudio = "Este usuário não possui permissões para acessar áudios!"; - } - - $audio = sprintf("", $msgAudio); - } else { - $audio = "" . "" . ""; - } - $linha = sprintf(" - $check - $agt/$agtNomte - $dt - $duracao - %s - $audio - ", ocultarTelefone($fone)); - $linhas .= $linha; - $imp++; - } - - $jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) "; - $jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) "; + $dados = pg_fetch_array($result); + $agt = $dados["agente"]; + $agtNome = $dados["nome_agente"]; + $dt = FormataDBDataHora($dados["data_reg"]); + $matricula_ultimo_update = $dados["matricula_ultimo_update"]; + $nome_update = $dados["nome_update"]; + $data_ultimo_update = $dados["data_ultimo_update"] ? FormataDBDataHora($dados["data_ultimo_update"]) : " - "; + $linha = " + $agt - $agtNome + $dt + $matricula_ultimo_update - $nome_update + $data_ultimo_update + "; + $linhas .= $linha; $clas = GetClassificacao($dbcon, $idClas, $idDac); - $clasItem = GetItem($dbcon, $idClas, $idItem); - if (!$imp) - $linhas = sprintf($linhaSumario, "Nenum registro encontrado!"); + $clasItem = GetItem($dbcon, $idClas, $idItemClass); $smarty->assign("linhas", $linhas); $smarty->assign("classifica", $clas); $smarty->assign("clas_item", $clasItem); - $smarty->assign("dac", $dac); - $smarty->assign("idDac", $idDac); - $smarty->assign("dataFim", $dataFim); - $smarty->assign("dataIni", $dataIni); GetTemplate($smarty, $nomeTpl); -} -else { - $idClas = $_GET['idItem']; - echo GetItem($dbcon, $idClas, 0); -} ?> diff --git a/templates/supervisao/editaClassificado.tpl b/templates/supervisao/editaClassificado.tpl index d19a2db5..fbcd37db 100644 --- a/templates/supervisao/editaClassificado.tpl +++ b/templates/supervisao/editaClassificado.tpl @@ -1,19 +1,34 @@ {capture name="display"} - +
-
+ + + +
+ + + + + + + + + + + {$linhas} +
Informações da Classificação
Agente da ClassificaçãoData e Hora Agente da EdiçãoData e Hora da Edição
+ +
- - - + + + - +
- - Classificar
ClassificaçãoItemClassificarClassificaçãoItemClassificar
{$classifica} {$clas_item}