Browse Source

finalizei os ajustes do icone e da tela para edicao, faltam apenas as permissoes.

edicao_rel_classificacao_agente
douglas.strappasson 1 year ago
parent
commit
6ed1afcdfc
  1. 2
      contacteFunc.php
  2. 13
      projeto/base/sql/versao-1.8.1.sql
  3. 52
      relatorios/callcenter/geral/relClassificacaoDetalhes.php
  4. 174
      supervisao/editaClassificado.php
  5. 31
      templates/supervisao/editaClassificado.tpl

2
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 ? "<select name=\"listaItem\" style=\"width:169px;\">" : "";
$clas = $useSelect ? "<select name=\"listaItem\" style=\"width:250px;\">" : "";
if (!$idClas)
$clas .= "<option value=\"0\" selected>Selecione o Item de Classificação</option>";

13
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

52
relatorios/callcenter/geral/relClassificacaoDetalhes.php

@ -1,7 +1,8 @@
<?php
include_once 'util/relatoriosBase.php';
// error_reporting(E_ALL);
// ini_set('display_errors', 1);
class RelClassificacaoDetalhes extends Relatorios {
private $___classificacao;
@ -117,8 +118,9 @@ class RelClassificacaoDetalhes extends Relatorios {
$srv = $this->___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)
@ -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']);
@ -354,9 +356,6 @@ class RelClassificacaoDetalhes extends Relatorios {
$dataRel = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$editaClassificacao = "<a href=\"javaScript:NovaJanela('index.php?idProg=367&pbxRequest=1&dac=ALMOXARIFADO_SGP&idDac=', 'jneditaClassificado', '505', '210', 'resizable=YES,scrollbars=YES');\">
<img src=\"imgSite/class16.png\" width=\"16\" border=\"0\" height=\"16\" title=\"Não chamados a classificar nesta data!\"
alt=\"Não há chamados a classificar nesta data!\" align=\"absmiddle\"></a>";
$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"'
);
if (IsAdmin()){
$dadosCabecalio += [
'Editar Classificação' => 'align="Center"'
];
$dadosField += [
'discador' => 'align="Center"',
'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("<tr><th colspan=\"7\" align=\"center\" {$style}>Total [%s] </th><th colspan=\"2\" align=\"right\" {$style}>%s</th></tr>", $oldSrv, $somaServico);
$dataRel[] = sprintf("<tr><th colspan=\"8\" align=\"center\" {$style}>Total [%s] </th><th colspan=\"2\" align=\"right\" {$style}>%s</th></tr>", $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("<a href=\"javaScript:NovaJanela('index.php?idProg=367&pbxRequest=1&wipeSessionParameter=1&idDac=%s&listaClas=%s&listaItem=%s&regClassId=%s', 'jneditaClassificado', '0', '0', 'resizable=no,location=no,scrollbars=no');\">
<img src=\"imgSite/class16.png\" width=\"16\" border=\"0\" height=\"16\" title=\"Clique para editar esta classificação.\"
alt=\"Clique para editar esta classificação.\" align=\"absmiddle\"></a>", $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 = "<tr>";
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 = '<tr><th colspan="' .$colspan . '" align="left">Total [ Chamadas Periodo ]: %s</th><th colspan="2" align="right">Registros: %s</th></tr>';
@ -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']);

174
supervisao/editaClassificado.php

@ -1,85 +1,61 @@
<?php
// error_reporting(E_ALL);
// ini_set('display_errors', 1);
if (!IsAjax()) {
$tpLayout = 1;
$dac = $_REQUEST["dac"];
$idDac = $_REQUEST["idDac"];
$wipeSessionParameter = $_REQUEST['wipeSessionParameter'] ? $_REQUEST['wipeSessionParameter'] : null;
$nomeTpl = "supervisao/editaClassificado.tpl";
$linhaSumario = "<tr><td align=\"center\" colspan=\"6\">%s</td></tr>";
$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"] : '';
if (IsPostBack() && isset($_POST['bt_classifica'])) {
$_SESSION['parameters']["listaClasNew"] = $_REQUEST["listaClas"] ? $_REQUEST["listaClas"] : null;
$_SESSION['parameters']["idItemNew"] = $_REQUEST["listaItem"] ? $_REQUEST["listaItem"] : null;
}
$msg = '';
$clas = $idClas;
$clasItem = $idItem;
$wipeSessionParameter = 0; //evita que a session seja limpa.
$regClass = isset($_POST['sel']) ? $_POST['sel'] : [];
if (!count($regClass)) {
$msg = "Selecione pelo menos um registro!";
$jsStartup[] = "alert('$msg');";
} else {
// 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 (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) {
if (!$listaClas || !$listaItem) {
$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.
* Esta informações são utilizadas para registrar quem realizou a ultima edição da classificação.
*/
$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));
$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 (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 (!$msg) {
$msg = "Registros classificados com sucesso!";
@ -87,86 +63,46 @@ if (!IsAjax()) {
} else {
pg_query($dbcon, "rollback");
}
$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"];
}
}
$idClas = $listaClasNew ? $listaClasNew : $listaClas;
$idItemClass = $idItemNew ? $idItemNew : $listaItem;
$dtIni = FormatDtMssql($dataIni);
$dtFim = FormatDtMssql($dataFim);
$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";
$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"];
$dados = pg_fetch_array($result);
$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("<input type=\"checkbox\" name=\"sel[]\" id=\"sel\" value=\"%s|%s\" %s/>", $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("<img src=\"imgSite/lockClose.gif\" width=\"22\" height=\"22\" title=\"%s\" border=\"0\">", $msgAudio);
} else {
$audio = "<a href=\"index.php?idProg=192&audio=$audio&dac=$dac\" style=\"color: #000;\">" . "<img src=\"imgSite/sound22.png\" width=\"22\" height=\"22\" border=\"0\">" . "</a>";
}
$linha = sprintf("<tr>
<td align=\"left\">$check</td>
<td align=\"left\">$agt/$agtNomte</td>
<td align=\"left\">$dt</td>
<td align=\"center\">$duracao</td>
<td align=\"center\">%s</td>
<td align=\"center\">$audio</td>
</tr>", ocultarTelefone($fone));
$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 = "<tr>
<td align=\"center\">$agt - $agtNome</td>
<td align=\"center\">$dt</td>
<td align=\"center\">$matricula_ultimo_update - $nome_update</td>
<td align=\"center\">$data_ultimo_update</td>
</tr>";
$linhas .= $linha;
$imp++;
}
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) ";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
$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);
}
?>

31
templates/supervisao/editaClassificado.tpl

@ -1,19 +1,34 @@
{capture name="display"}
<table width="98%" border="0" cellspacing="0" cellpadding="2">
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td><table border="0" cellspacing="0" cellpadding="2" class="grid">
<td>
<table cellpadding="2" class="grid" style="width:100%">
<tr >
<th colspan="6" align="center"><span class="cabRelatorioBase">Informações da Classificação</span></th>
</tr>
<tr>
<th align="center" class="headColun">Agente da Classificação</th>
<th align="center" class="headColun">Data e Hora </th>
<th align="center" class="headColun">Agente da Edição</th>
<th align="center" class="headColun">Data e Hora da Edição</th>
</tr>
{$linhas}
</table>
</td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="2" class="grid">
<tr>
<th colspan="3" align="center">
<input type="hidden" name="dac" id="hiddenField" value="{$dac}" />
<input type="hidden" name="idDac" id="hiddenField2" value="{$idDac}" />
Classificar</th>
</tr>
<tr>
<td>Classificação</td>
<td>Item</td>
<td>Classificar</td>
<th>Classificação</th>
<th>Item</th>
<th>Classificar</th>
</tr>
<tr>
<tr align="center">
<td><span id="classifica">{$classifica}</span></td>
<td><span id="clasItem">{$clas_item}</span></td>
<td><input name="bt_classifica" type="submit" id="bt_classifica" value="Classificar" style="width:100px" /></td>

Loading…
Cancel
Save