|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
include("util/funcoesSsupervisor.php");
|
|
|
|
|
include("util/sharedMem.php");
|
|
|
|
|
|
|
|
|
|
if (isset($_GET["listaDacs"])) {
|
|
|
|
|
$dac = $_GET["listaDacs"];
|
|
|
|
|
$_SESSION['SSsupervisorDacAtu'] = $dac;
|
|
|
|
|
} else if (!isset($_GET["listaDacs"])) {
|
|
|
|
|
$dac = isset($_SESSION['SSsupervisorDacAtu']) && $_SESSION['SSsupervisorDacAtu'] ? $_SESSION['SSsupervisorDacAtu'] : $_SESSION[SS_DAC_PADRAO];
|
|
|
|
|
$_SESSION['SSsupervisorDacAtu'] = $dac;
|
|
|
|
|
} else {
|
|
|
|
|
$dac = 'TODOS'; //$dac = isset($_SESSION['SSsupervisorDacAtu']) ? $_SESSION['SSsupervisorDacAtu'] : -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//if($dac == -1) { $dac = $_SESSION[SS_DAC_PADRAO]; $_SESSION['SSsupervisorDacAtu'] = $dac; }
|
|
|
|
|
|
|
|
|
|
$selTodos = (strtoupper($dac) == 'TODOS') || !$dac;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Indica se o servidor esta lendo da memoria ou do banco de dados.
|
|
|
|
|
*/
|
|
|
|
|
$statusServer = false;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Valores para o head das tabelas de dac e agente
|
|
|
|
|
*/
|
|
|
|
|
$tbCli = '<table width="100%%" cellpadding="0" cellspacing="0" border="0">
|
|
|
|
|
<tr><td colspan="2" style="border:0" align="center"> Resumo Clientes</td></tr>
|
|
|
|
|
<tr><td style="border-top:0; border-bottom:0; border-left:0" align="center">%s</td><td style="border:0" align="center">%s</td></tr>
|
|
|
|
|
</table>';
|
|
|
|
|
|
|
|
|
|
$tbFone = '<table width="100%%" cellpadding="0" cellspacing="0" border="0">
|
|
|
|
|
<tr><td colspan="3" style="border:0" align="center"> Resumo Telefones</td></tr>
|
|
|
|
|
<tr><td style="border-top:0; border-bottom:0; border-left:0" align="center">%s</td><td style="border-top:0; border-bottom:0; border-left:0" align="center">%s</td><td style="border-top:0; border-bottom:0; border-left:0" align="center">%s</td><td style="border:0" align="center">%s</td></tr>
|
|
|
|
|
</table>';
|
|
|
|
|
|
|
|
|
|
$imPausaDac = "Pausa"; //"<img src=\"imgSite/user_on.gif\" title=\"Monitor\" alt=\"Monitor\" width=\"16\" height=\"16\">";
|
|
|
|
|
$imMonitor = "<img src=\"imgSite/search16.png\" title=\"Monitor\" alt=\"Monitor\" width=\"16\" height=\"16\">";
|
|
|
|
|
$imLiberaManal = "<div style=\"width:100%;text-align:center\"><img src=\"imgSite/calendario.png\" title=\"Mostra Agendamentos para o Dac\" alt=\"Mostra Agendamentos para o Dac\"></div>";
|
|
|
|
|
|
|
|
|
|
$tbHeadDac = array($imMonitor, 'Dac', 'Agentes', 'Originadas', 'Atendimento', 'Abandonadas', 'Espera', 'Tempo Espera', 'Nível de Serviço', "Campanha", $imPausaDac, "Clas"); //,'Tempo Nível de Serviço'
|
|
|
|
|
$tbHeadAgente = array('Ramal', 'Matrícula', 'Nome', 'Login', 'Atendimento', 'Orig/Dest', 'Status', 'Duração', '<span title="Chamadas Originadas">CO</span>', '<span title="Chamadas Atendidas">CA</span>', '<span title="Tempo M<EFBFBD>dio de Atendimento">TMA</span>', '', '', '', '');
|
|
|
|
|
if ($selTodos)
|
|
|
|
|
array_unshift($tbHeadAgente, 'DAC');
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Captura os filtros enviados pelo supervisor.
|
|
|
|
|
*/
|
|
|
|
|
$cklivre = isset($_FORMS["cklivre"]) && $_FORMS["cklivre"] ? 'LIVRE' : '';
|
|
|
|
|
$ckocupado = isset($_FORMS["ckocupado"]) && $_FORMS["ckocupado"] ? 'OCUPADO' : '';
|
|
|
|
|
$ckpausa = isset($_FORMS["ckpausa"]) && $_FORMS["ckpausa"] ? 'PAUSA' : '';
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Monta as tebelas de dac e agente
|
|
|
|
|
*/
|
|
|
|
|
$tbHead = $tbHeadDac;
|
|
|
|
|
$tbDac = GetTbDac($dbcon, $dac, $tbHead);
|
|
|
|
|
$tbAgente = GetTbAgente($dbcon, $dac, $tbHeadAgente);
|
|
|
|
|
$tbCall = "";
|
|
|
|
|
|
|
|
|
|
if (IsAjax() && isset($_GET["logoff"])) {
|
|
|
|
|
$matrLogoff = $_GET["logoff"];
|
|
|
|
|
$dacLogoff = $_GET["dac"];
|
|
|
|
|
$GLOBALS["ramalOperacao"] = GetRamalLogado($dbcon, $matrLogoff);
|
|
|
|
|
//if(AgenteOcupado($dbcon, $matrLogoff)) //restri<EFBFBD><EFBFBD>o removida.
|
|
|
|
|
if (false) {
|
|
|
|
|
echo "Esta opera<EFBFBD><EFBFBD>o n<EFBFBD>o pode ser realizada quando o \"Agente Est<EFBFBD> Ocupado\"!";
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
@GetUrl(AST_REM_FILA, $dacLogoff, $matrLogoff);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Desliga a chamada corrente
|
|
|
|
|
* e desconecta o usuario do asterisk
|
|
|
|
|
*/
|
|
|
|
|
$query = "select canal, canal_transfer, canal_agente, ramal, nome, dac, uniqueid, status from pbx_supervisor_agentes where matricula = '$matrLogoff'";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
if ($result) {
|
|
|
|
|
$row = @pg_fetch_array($result);
|
|
|
|
|
$_SESSION[SS_AGT_CHANNEL_AGENTE] = $row["canal_agente"];
|
|
|
|
|
@GetUrl(AST_DESLIGAR_LIGACAO);
|
|
|
|
|
}
|
|
|
|
|
@GetUrl(AST_LOGOFF_AGENTE, $dacLogoff, $matrLogoff);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$result = @pg_query($dbcon, "begin");
|
|
|
|
|
//atualiza dados do supervisor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$query = "delete
|
|
|
|
|
from pbx_supervisor_agentes
|
|
|
|
|
where matricula = '$matrLogoff'";
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
$result = @pg_affected_rows($result);
|
|
|
|
|
|
|
|
|
|
//registra o login do usuario
|
|
|
|
|
if ($result) {
|
|
|
|
|
$query = "select coalesce(max(id),0) as id from pbx_eventos_agentes where matricula = '$matrLogoff' and cast(login as date) = cast(now() as date) and flag <> 2";
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
$row = @pg_fetch_row($result);
|
|
|
|
|
$idLogoff = $row[0];
|
|
|
|
|
if ($idLogoff) {
|
|
|
|
|
$query = "update pbx_eventos_agentes
|
|
|
|
|
set logoff = now(),
|
|
|
|
|
flag = 2
|
|
|
|
|
where id = $idLogoff";
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
$result = @pg_affected_rows($result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($result) {
|
|
|
|
|
@pg_query($dbcon, "commit");
|
|
|
|
|
echo "O logoff do usu<EFBFBD>rio executado com sucesso!";
|
|
|
|
|
} else {
|
|
|
|
|
@pg_query($dbcon, "rollback");
|
|
|
|
|
echo "O logoff do usu<EFBFBD>rio n<EFBFBD>o pode ser executado!" + pg_last_error($dbcon);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (IsAjax() && isset($_GET["pausaAgente"])) {
|
|
|
|
|
$matricula = $_GET["pausaAgente"];
|
|
|
|
|
$dac = $_GET["dac"];
|
|
|
|
|
$ramal = $_GET["ramal"];
|
|
|
|
|
|
|
|
|
|
if (AgenteOcupado($dbcon, $matricula)) {
|
|
|
|
|
echo "Esta opera<EFBFBD><EFBFBD>o n<EFBFBD>o pode ser realizada quando o \"Agente Est<EFBFBD> Ocupado\"!";
|
|
|
|
|
} else {
|
|
|
|
|
$ret = explode(";", PausaAgente($dbcon, $ramal, $dac, $matricula));
|
|
|
|
|
echo $ret[1];
|
|
|
|
|
}
|
|
|
|
|
} else if (IsAjax() && isset($_GET["intercalarAgente"])) {
|
|
|
|
|
$matricula = $_GET["intercalarAgente"];
|
|
|
|
|
$dac = $_GET["dac"];
|
|
|
|
|
$idSessao = "SSinter_" . $matricula;
|
|
|
|
|
$intercalar = $_SESSION[$idSessao];
|
|
|
|
|
$_SESSION[SS_DESTINO_INTERCALAR] = $_GET["ramal"];
|
|
|
|
|
|
|
|
|
|
//$query = sprintf("select (intercalar + monitorar) as monitorar from pbx_supervisor_agentes where matricula = %s", QuotedStr($matricula));
|
|
|
|
|
//$intercalar = RegistroInc($dbcon, $query);
|
|
|
|
|
$intercalar = false;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Derruba todos so canais ativos que estiver marcados como intercar/momitorar para o ramal selecionados
|
|
|
|
|
*/
|
|
|
|
|
@GetUrl(AST_DESLIGAR_TODOS);
|
|
|
|
|
|
|
|
|
|
$query = "update pbx_supervisor_agentes
|
|
|
|
|
set intercalar = '{Status}'
|
|
|
|
|
where matricula = '$matricula'";
|
|
|
|
|
|
|
|
|
|
if (!$intercalar) {
|
|
|
|
|
$ramalIntercalar = soNumero(GetRamalMonitorar(RAMAL_MONITOR_SUPERVISOR));
|
|
|
|
|
if (!$ramalIntercalar) {
|
|
|
|
|
echo "RAMAL_INVALIDO";
|
|
|
|
|
} else if (GetUrl(AST_INTERCALAR, $dac, $matricula)) {
|
|
|
|
|
//atualiza dados do supervisor
|
|
|
|
|
$query = str_replace("{Status}", "1", $query);
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
if ($result)
|
|
|
|
|
$result = pg_affected_rows($result);
|
|
|
|
|
if ($result)
|
|
|
|
|
$_SESSION[$idSessao] = 1;
|
|
|
|
|
echo "Inicianado a intercala<EFBFBD><EFBFBD>o!";
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
echo "N<EFBFBD>o foi poss<EFBFBD>vel realizar a opera<EFBFBD><EFBFBD>o!";
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
echo "Opera<EFBFBD><EFBFBD>o em andamento!";
|
|
|
|
|
}
|
|
|
|
|
} else if (IsAjax() && isset($_GET["monitorarAgente"])) {
|
|
|
|
|
|
|
|
|
|
$matricula = $_GET["monitorarAgente"];
|
|
|
|
|
$dac = $_GET["dac"];
|
|
|
|
|
$idSessao = "SSmonitorar_" . $matricula;
|
|
|
|
|
$monitorar = $_SESSION[$idSessao];
|
|
|
|
|
$_SESSION[SS_DESTINO_INTERCALAR] = $_GET["ramal"];
|
|
|
|
|
$monitorar = false;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Derruba todos so canais ativos que estiver marcados como intercar/momitorar para o ramal selecionados
|
|
|
|
|
*/
|
|
|
|
|
@GetUrl(AST_DESLIGAR_TODOS);
|
|
|
|
|
|
|
|
|
|
if (!$monitorar) {
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
if (!$ramalIntercalar = soNumero(GetRamalMonitorar(RAMAL_MONITOR_SUPERVISOR))) {
|
|
|
|
|
throw new Exception("RAMAL_INVALIDO");
|
|
|
|
|
}
|
|
|
|
|
$canalIntercalar = GetRamalMonitorar(CANAL_MONITOR_SUPERVISOR);
|
|
|
|
|
$nvLgpdSupervisor = GetNivelLgpd(GetMatricula());
|
|
|
|
|
$nvLgpdMonitorado = GetNivelLgpd($matricula);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!GetUrl(AST_MONITORAR, GetParamMonitorar($ramalIntercalar, $canalIntercalar, $matricula, $nvLgpdSupervisor, $nvLgpdMonitorado))) {
|
|
|
|
|
throw new Exception("N<EFBFBD>o foiposs<EFBFBD>vel realzar a opera<EFBFBD><EFBFBD>o!");
|
|
|
|
|
}
|
|
|
|
|
echo "Iniciando monitoria!";
|
|
|
|
|
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
echo $ex->getMessage();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
echo "Opera<EFBFBD><EFBFBD>o em andamento!";
|
|
|
|
|
}
|
|
|
|
|
} else if (IsAjax() && isset($_GET["pausaDac"])) {
|
|
|
|
|
/*
|
|
|
|
|
* Coloca todos os atendentes em pausa
|
|
|
|
|
*/
|
|
|
|
|
$pausaDac = $_GET["pausaDac"];
|
|
|
|
|
$query = "Select matricula, ramal, dac from pbx_supervisor_agentes where dac = '$pausaDac' and upper(status) not in('PAUSA', 'OCUPADO') ";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
if ($result) {
|
|
|
|
|
if (pg_num_rows($result)) {
|
|
|
|
|
$numAgtPausa = 0;
|
|
|
|
|
while ($row = pg_fetch_array($result)) {
|
|
|
|
|
$matricula = $row["matricula"];
|
|
|
|
|
$dac = $row["dac"];
|
|
|
|
|
$ramal = $row["ramal"];
|
|
|
|
|
$ret = explode(";", PausaAgente($dbcon, $ramal, $dac, $matricula));
|
|
|
|
|
if (strtoupper($ret[0]) == 'OK') {
|
|
|
|
|
$numAgtPausa++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($numAgtPausa) {
|
|
|
|
|
echo $numAgtPausa > 1 ? ($numAgtPausa + " Agentes foram colocados em pausa!") : "Agente colocado em pausa!";
|
|
|
|
|
} else {
|
|
|
|
|
echo "Nenhum agente foi colocado em pausa!";
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
echo "Nenhum agente esta em pausa no momento!";
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
echo "N<EFBFBD>o foi poss<EFBFBD>vel realizar a opera<EFBFBD><EFBFBD>o! Erro ao acessar base de dados!";
|
|
|
|
|
}
|
|
|
|
|
} else if (IsAjax()) {
|
|
|
|
|
echo $tbDac . "#" . $tbAgente . "#" . $tbCall;
|
|
|
|
|
} else {
|
|
|
|
|
//$jsJQuery[] = GetJqTips('img');
|
|
|
|
|
//define arquivo de javaScript necessarios
|
|
|
|
|
$tempoSuperAtu = GetTempoSupervisor();
|
|
|
|
|
$jsStartup[] = "var idSet = window.setInterval(\"GetSupervisor('$dac','')\",$tempoSuperAtu);";
|
|
|
|
|
|
|
|
|
|
//$smarty->assign('dacs', GetDac($dbcon, $dac));
|
|
|
|
|
$smarty->assign('tbDac', $tbDac);
|
|
|
|
|
$smarty->assign('tbAgente', $tbAgente);
|
|
|
|
|
$smarty->assign('ramal_monitor', GetRamalMonitorar(RAMAL_MONITOR_SUPERVISOR));
|
|
|
|
|
$smarty->assign('cklivre', $cklivre);
|
|
|
|
|
$smarty->assign('ckocupado', $ckocupado);
|
|
|
|
|
$smarty->assign('ckpausa', $ckpausa);
|
|
|
|
|
$smarty->assign('prm_super_alerta_atende', $_SESSION["prm_super_alerta_atende"]);
|
|
|
|
|
$smarty->assign('prm_super_alerta_pausa', $_SESSION["prm_super_alerta_pausa"]);
|
|
|
|
|
$smarty->assign('prm_super_alerta_livre', $_SESSION["prm_super_alerta_livre"]);
|
|
|
|
|
$smarty->assign('isAdmin', IsAdmin());
|
|
|
|
|
$smarty->assign('prm_max_ramal', $_SESSION["prm_max_ramal"]);
|
|
|
|
|
$smarty->assign('prm_max_licenca', $_SESSION["prm_max_licenca"]);
|
|
|
|
|
$smarty->assign('prm_max_licenca_fixo', $_SESSION["prm_max_licenca_fixo"]);
|
|
|
|
|
|
|
|
|
|
$smarty->assign('nomeRamalMonitor', (RAMAL_MONITOR_SUPERVISOR));
|
|
|
|
|
$smarty->assign('canalRamallMonitor', (CANAL_MONITOR_SUPERVISOR));
|
|
|
|
|
|
|
|
|
|
GetTemplate($smarty, 'supervisor.tpl');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetDadosDac() {
|
|
|
|
|
global $statusServer, $arRetornoAbandonadas;
|
|
|
|
|
try {
|
|
|
|
|
/*
|
|
|
|
|
* Dacs disponiveis para o usuario conectado.
|
|
|
|
|
*/
|
|
|
|
|
$arControle = GetInfoControle();
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verifica o tempo de atuzliza<EFBFBD><EFBFBD>o do servidor,
|
|
|
|
|
* se for inferior a 10s usa o servidor do su-
|
|
|
|
|
* pervisor para obter os dados, do contr<EFBFBD>rio
|
|
|
|
|
* utiliza o acesso direto ao banco de dados.
|
|
|
|
|
*/
|
|
|
|
|
$ultAtu = time() - $arControle['ultAtulizacao'];
|
|
|
|
|
|
|
|
|
|
if ($ultAtu < 10) {
|
|
|
|
|
/*
|
|
|
|
|
* Dacs incluidos no perfil do usuario.
|
|
|
|
|
*/
|
|
|
|
|
$dacsAcesso = GetDacsAcesso(GetIdUser(), true);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Tenta obter os dados do supervisor atraves do acesso ao servico
|
|
|
|
|
* do supervisor
|
|
|
|
|
*/
|
|
|
|
|
$dados = RetornaDadosDac($arControle, $dacsAcesso);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Se a fun<EFBFBD><EFBFBD>o retornar dados retorna para aplica<EFBFBD><EFBFBD>o, caso
|
|
|
|
|
* contrario continua com o banco de dados;
|
|
|
|
|
*/
|
|
|
|
|
$statusServer = true;
|
|
|
|
|
return $dados;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Retorna dados diretamente do banco.
|
|
|
|
|
*/
|
|
|
|
|
$dadosDac = array();
|
|
|
|
|
$query = GetQueryDac();
|
|
|
|
|
$result = pg_query($query);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Lista chamadads sem retorno
|
|
|
|
|
*/
|
|
|
|
|
SetAbandonasFila();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (($dados = @pg_fetch_array($result, null, PGSQL_ASSOC))) {
|
|
|
|
|
$dados['abdsr'] = isset($arRetornoAbandonadas[$dados['dac']]) ? $arRetornoAbandonadas[$dados['dac']] : 0;
|
|
|
|
|
$dadosDac[] = $dados;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $dadosDac;
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
return array();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetDadosAgt($dac) {
|
|
|
|
|
global $statusServer;
|
|
|
|
|
try {
|
|
|
|
|
$dacAll = strtoupper($dac) == "TODOS";
|
|
|
|
|
|
|
|
|
|
$arControle = GetInfoControle();
|
|
|
|
|
// print_r($arControle); exit;
|
|
|
|
|
/*
|
|
|
|
|
* Verifica o tempo de atuzliza<EFBFBD><EFBFBD>o do servidor,
|
|
|
|
|
* se for inferior a 10s usa o servidor do su-
|
|
|
|
|
* pervisor para obter os dados, do contr<EFBFBD>rio
|
|
|
|
|
* utiliza o acesso direto ao banco de dados.
|
|
|
|
|
*/
|
|
|
|
|
$ultAtu = time() - $arControle['ultAtulizacao'];
|
|
|
|
|
|
|
|
|
|
if ($ultAtu < TEMPO_MAX_SERVER_RESPONDE) {
|
|
|
|
|
/*
|
|
|
|
|
* Dacs incluidos no perfil do usuario.
|
|
|
|
|
*/
|
|
|
|
|
$dacsAcesso = GetDacsAcesso(GetIdUser(), true);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Tenta obter os dados do supervisor atraves do acesso ao servico
|
|
|
|
|
* do supervisor
|
|
|
|
|
*/
|
|
|
|
|
$dados = RetornaDadosAgt($arControle);
|
|
|
|
|
$arDadosDac = array();
|
|
|
|
|
foreach ($dados as $dadosDac) {
|
|
|
|
|
$dacSel = $dadosDac['dac'];
|
|
|
|
|
if (($dacSel == $dac) || ($dacAll && (array_search($dacSel, $dacsAcesso) !== false ))) {
|
|
|
|
|
$arDadosDac[] = $dadosDac;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Se a fun<EFBFBD><EFBFBD>o retornar dados retorna para aplica<EFBFBD><EFBFBD>o, caso
|
|
|
|
|
* contrario continua com o banco de dados;
|
|
|
|
|
*/
|
|
|
|
|
if (count($arDadosDac)) {
|
|
|
|
|
$statusServer = true;
|
|
|
|
|
return $arDadosDac;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
$statusServer = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Retorna dados diretamente do banco.
|
|
|
|
|
*/
|
|
|
|
|
$dadosAgt = array();
|
|
|
|
|
$qr = GetQueryAgt($dac);
|
|
|
|
|
$result = pg_query($qr);
|
|
|
|
|
$dadosDac = array();
|
|
|
|
|
while (($dados = @pg_fetch_array($result, null, PGSQL_ASSOC))) {
|
|
|
|
|
$dadosDac[] = $dados;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $dadosDac;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetQueryDac() {
|
|
|
|
|
global $transbordoEvento;
|
|
|
|
|
$idUser = GetIdUser();
|
|
|
|
|
$login = GetLogin();
|
|
|
|
|
|
|
|
|
|
$dacsAcesso = GetDacsAcesso($idUser);
|
|
|
|
|
|
|
|
|
|
$query = " select distinct coalesce(sel, 0) as sel,
|
|
|
|
|
e.dac,
|
|
|
|
|
coalesce(originadas_pa,0) as originadas,
|
|
|
|
|
coalesce(a.atendidas, 0) as atendidas,
|
|
|
|
|
coalesce(a.abandonadas::int, 0) as abandonadas,
|
|
|
|
|
coalesce(e.espera::int, 0) as espera,
|
|
|
|
|
( coalesce(e.tempo_espera::int, 0) * INTERVAL '1 SECOND') as tempo_espera,
|
|
|
|
|
coalesce(e.tempo_espera::int, 0) as tempo_espera_int,
|
|
|
|
|
( round(coalesce(a.inb,0),0)::text || '%') as tempo_nivel_servico,
|
|
|
|
|
'D' as tipo,
|
|
|
|
|
transbordando,
|
|
|
|
|
transbordada,
|
|
|
|
|
tme,
|
|
|
|
|
tma,
|
|
|
|
|
(select count(*) from pbx_nao_classificado where fila = a.dac and data_bilhete = a.data) as nao_classificado,
|
|
|
|
|
id_dac,
|
|
|
|
|
(select count(*) from pbx_supervisor_agentes where dac = e.dac) as num_agente, 1 as ord
|
|
|
|
|
from pbx_supervisor_dacs e
|
|
|
|
|
left join (
|
|
|
|
|
SELECT 0 as sel, DAC, ID_DAC,
|
|
|
|
|
DATA,
|
|
|
|
|
ABANDONADAS
|
|
|
|
|
,ATENDIDAS_PA AS ATENDIDAS
|
|
|
|
|
,ORIGINADAS_PA
|
|
|
|
|
,ESPERA
|
|
|
|
|
,round( CASE WHEN(ESPERA = 0)THEN 0 ELSE (TEMPO_ESPERA / ESPERA) END ) * INTERVAL '1 SECOND' AS TME
|
|
|
|
|
,round( CASE WHEN(ATENDIDAS_PA = 0)THEN 0 ELSE (TEMPO_ATENDIMENTO / (ATENDIDAS_PA + ORIGINADAS_PA))END) * INTERVAL '1 SECOND' AS TMA
|
|
|
|
|
,round(CASE WHEN(ABANDONADAS = 0)THEN 0 ELSE (TEMPO_ABANDONO / ABANDONADAS) END) * INTERVAL '1 SECOND' AS TMAB
|
|
|
|
|
,(CASE WHEN((ATENDIDAS_PA::FLOAT + ABANDONADAS::FLOAT) = 0)THEN 0 ELSE ATENDIDAS_30::FLOAT / (ATENDIDAS_PA::FLOAT + ABANDONADAS::FLOAT) END * 100)::numeric(5,2) as INB
|
|
|
|
|
,(CASE WHEN(OFERECIDAS::FLOAT = 0)THEN 0 ELSE (ABANDONADAS::FLOAT / OFERECIDAS::FLOAT) END * 100)::numeric(5,2) as IAB
|
|
|
|
|
,TEMPO_ESPERA
|
|
|
|
|
,TEMPO_ATENDIMENTO
|
|
|
|
|
,TEMPO_ABANDONO
|
|
|
|
|
,TRANSBORDANDO
|
|
|
|
|
,TRANSBORDADA
|
|
|
|
|
FROM (
|
|
|
|
|
SELECT DATA,
|
|
|
|
|
DAC, ID_DAC
|
|
|
|
|
,SUM (CASE WHEN EVENTO = 'ENTERQUEUE' THEN 1 ELSE 0 END) AS OFERECIDAS
|
|
|
|
|
,SUM (CASE WHEN EVENTO = 'ENTERQUEUE' THEN 1 ELSE 0 END) AS ATENDIDAS_URA
|
|
|
|
|
,SUM (CASE WHEN EVENTO = 'ABANDON' THEN 1 ELSE 0 END) AS ABANDONADAS
|
|
|
|
|
,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL') THEN 1 ELSE 0 END) AS ATENDIDAS_PA
|
|
|
|
|
,SUM (CASE WHEN EVENTO IN ('COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG','BUSYS','NOANSWERS') THEN 1 ELSE 0 END) AS ORIGINADAS_PA
|
|
|
|
|
,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL') AND strtoint(param1) <= (SELECT a.tempo_nivel_servico FROM pbx_supervisor_dacs a WHERE a.dac = fila)::FLOAT THEN 1 ELSE 0 END) AS ATENDIDAS_30
|
|
|
|
|
,SUM (CASE WHEN EVENTO IN ('TRANSFER') THEN 1 ELSE 0 END) AS TRANSFERIDAS
|
|
|
|
|
,SUM (CASE WHEN EVENTO IN ('CONNECT') AND strtoint(param1) > '3' THEN 1 ELSE 0 END) AS ESPERA
|
|
|
|
|
,SUM (CASE WHEN (EVENTO IN ('CONNECT') AND strtoint(param1) > '3') THEN strtoint(param1) ELSE 0 END) AS TEMPO_ESPERA
|
|
|
|
|
,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER','TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL') AND strtoint((case when(param2 = '')then '0' else param2 end)) > '1' THEN strtoint((case when(param2 = '')then '0' else param2 end)) ELSE 0 END) AS TEMPO_ATENDIMENTO
|
|
|
|
|
,SUM (CASE WHEN EVENTO IN ('ABANDON') THEN strtoint(param3) ELSE 0 END) AS TEMPO_ABANDONO
|
|
|
|
|
,SUM (CASE WHEN EVENTO IN('TRANSBORDANDO') THEN 1 ELSE 0 END) AS TRANSBORDANDO
|
|
|
|
|
,SUM (transbordada) AS TRANSBORDADA
|
|
|
|
|
FROM (
|
|
|
|
|
SELECT D.NOME AS DAC, d.id as ID_DAC,
|
|
|
|
|
a.calldate::date AS DATA, a.calldate,b.fila,b.evento,b.param1,b.param2,b.param3,b.param4,
|
|
|
|
|
case when(evento = 'TRANSBORDADO')then 1 else 0 end as transbordada
|
|
|
|
|
FROM ast_eventos_dacs b INNER JOIN ast_bilhetes a on a.uniqueid = b.uid2 and a.lastapp <> 'Transferred Call'
|
|
|
|
|
INNER JOIN pbx_dacs d on d.nome = b.fila and d.status = 'A'
|
|
|
|
|
WHERE b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER', 'CONNECT','ENTERQUEUE','TRANSFER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG', 'TRANSBORDANDO', 'TRANSBORDADO','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSYS','NOANSWERS')
|
|
|
|
|
AND a.data_bilhete = now()::date
|
|
|
|
|
) AS DADOS
|
|
|
|
|
GROUP BY DATA, DAC, ID_DAC
|
|
|
|
|
) AS DADOS ORDER BY 1
|
|
|
|
|
) a on e.dac = a.dac \n";
|
|
|
|
|
|
|
|
|
|
if (!IsAdmin()) {
|
|
|
|
|
$query .= " where e.dac in($dacsAcesso)\n";
|
|
|
|
|
}
|
|
|
|
|
//select b.uid2 as uid, b.fila from pbx_eventos_dacs b where b.evento in ('ABANDON','TRANSBORDANDO') group by b.uid2, b.fila having count(*) > 1
|
|
|
|
|
$query .= " order by 2";
|
|
|
|
|
// echo $query; exit;//if(IsAdmin())echo $query; exit;
|
|
|
|
|
return $query;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetDacsAcesso($idUser, $array = false) {
|
|
|
|
|
$query = "select distinct b.nome from pbx_queues_grupos b
|
|
|
|
|
inner join pbx_fila_grupos c on c.id = b.id
|
|
|
|
|
inner join pbx_grupo_usuario d on d.gp_id = c.gp_id
|
|
|
|
|
and d.user_id = %s and b.status = 'A' ";
|
|
|
|
|
$query = sprintf($query, IsAdmin() ? 'd.user_id' : QuotedStr($idUser));
|
|
|
|
|
$result = @pg_query($query);
|
|
|
|
|
|
|
|
|
|
$linha = $array ? array() : '';
|
|
|
|
|
if ($result) {
|
|
|
|
|
while ($dados = @pg_fetch_array($result)) {
|
|
|
|
|
$dac = $dados["nome"];
|
|
|
|
|
if ($array) {
|
|
|
|
|
$linha[] = $dac;
|
|
|
|
|
} else {
|
|
|
|
|
$linha .= !$linha ? "'$dac'" : ",'$dac'";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $linha;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetQueryAgt($dac) {
|
|
|
|
|
global $selTodos;
|
|
|
|
|
$idUser = GetIdUser();
|
|
|
|
|
$login = GetLogin();
|
|
|
|
|
if ($selTodos) {
|
|
|
|
|
$dacsAcesso = GetDacsAcesso($idUser);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$queryLocal = "select a.dac,
|
|
|
|
|
a.ramal as ramal_monitor,
|
|
|
|
|
a.matricula,
|
|
|
|
|
a.nome,
|
|
|
|
|
a.monitorar as statusmonitorar,
|
|
|
|
|
a.intercalar as statusintercalar,
|
|
|
|
|
((EXTRACT(EPOCH FROM (now() - a.duracao)) / 60)) as status_time,
|
|
|
|
|
a.disponivel_atendimento,
|
|
|
|
|
chamada_classificado,
|
|
|
|
|
(LOCALTIMESTAMP(0) - a.tempo_login) as tempo_logado,
|
|
|
|
|
a.modo_atendimento,
|
|
|
|
|
a.origem_destino as fone,
|
|
|
|
|
case when((a.status = 'PAUSA') and (coalesce(a.motivo_pausa, '') <> ''))then a.status || '-' || upper(a.motivo_pausa) else a.status end as status,
|
|
|
|
|
(LOCALTIMESTAMP(0) - a.duracao) as duracao,
|
|
|
|
|
protocolo as num_protocolo,
|
|
|
|
|
uniqueid2,
|
|
|
|
|
extract(epoch from (now() - logado))::int as tempo_atualiza,
|
|
|
|
|
trim(motivo_pausa) as pausa_motivo_rt,
|
|
|
|
|
trim(uniqueid) as uniqueid,
|
|
|
|
|
disponivel_atendimento,
|
|
|
|
|
chamada_classificado,
|
|
|
|
|
coalesce(canal_transfer, '') as canal_transfer,
|
|
|
|
|
tipo_ligacao, cont_identificador, status_discador,
|
|
|
|
|
media,
|
|
|
|
|
( SELECT count(*)
|
|
|
|
|
FROM ast_bilhetes x, ast_eventos_dacs y
|
|
|
|
|
where y.uid2 = x.uniqueid
|
|
|
|
|
and x.data_bilhete in(a.tempo_login::date, now()::date)
|
|
|
|
|
and y.fila = a.dac
|
|
|
|
|
and substring(y.agente, 7, 4) = a.matricula
|
|
|
|
|
and y.evento in('COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG')
|
|
|
|
|
and x.lastapp <> 'Transferred Call' )as originadas_pa,
|
|
|
|
|
( SELECT count(*)
|
|
|
|
|
FROM ast_bilhetes x, ast_eventos_dacs y,pbx_bilhetes_complemento z
|
|
|
|
|
where y.uid2 = x.uniqueid
|
|
|
|
|
and x.uniqueid = z.uniqueid2
|
|
|
|
|
and z.direcao = 'fila-ramal'
|
|
|
|
|
and x.data_bilhete in(a.tempo_login::date, now()::date)
|
|
|
|
|
and y.fila = a.dac
|
|
|
|
|
and substring(y.agente, 7, 4) = a.matricula
|
|
|
|
|
and y.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL')
|
|
|
|
|
and x.lastapp <> 'Transferred Call' ) AS atendidas_pa,
|
|
|
|
|
|
|
|
|
|
( SELECT sum( CASE WHEN ((y.evento = 'TRANSFER') or (y.evento = 'TRANSFERORIG')) THEN case when(y.param4 = '')then 0 else y.param4::int end
|
|
|
|
|
ELSE case when(y.param2 = '')then 0 else y.param2::int end END
|
|
|
|
|
)
|
|
|
|
|
FROM ast_bilhetes x, ast_eventos_dacs y
|
|
|
|
|
where y.uid2 = x.uniqueid
|
|
|
|
|
and x.data_bilhete in(a.tempo_login::date, now()::date)
|
|
|
|
|
and y.fila = a.dac
|
|
|
|
|
and substring(y.agente, 7, 4) = a.matricula
|
|
|
|
|
and y.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL', 'COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG')
|
|
|
|
|
and x.lastapp <> 'Transferred Call' ) AS tempo_atendimento, (select coalesce(pa_fixo, 0) from pbx_usuarios where matricula = a.matricula) as pa_fixo
|
|
|
|
|
FROM pbx_supervisor_agentes a
|
|
|
|
|
WHERE a.dac = case when(upper('$dac') = 'TODOS')then a.dac else '$dac' end\n";
|
|
|
|
|
|
|
|
|
|
if ($selTodos && !IsAdmin()) {
|
|
|
|
|
$queryLocal .= " and a.dac in($dacsAcesso)\n";
|
|
|
|
|
}
|
|
|
|
|
$queryLocal .= " order by a.dac, a.nome";
|
|
|
|
|
|
|
|
|
|
//if(IsAdmin ()) echo $queryLocal; // coalesce(a.calldate::date, now()::date) = now()::date
|
|
|
|
|
return $queryLocal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetHeadTable($items, $title = "", $filtro = array()) {
|
|
|
|
|
global $smarty;
|
|
|
|
|
$colspan = count($items);
|
|
|
|
|
$tb = "<tr>";
|
|
|
|
|
|
|
|
|
|
foreach ($items as $item) {
|
|
|
|
|
$tb .= "<th>$item</th>";
|
|
|
|
|
}
|
|
|
|
|
$tb .= "</tr>";
|
|
|
|
|
|
|
|
|
|
if (!IsAjax())
|
|
|
|
|
$smarty->assign('colspan', $colspan);
|
|
|
|
|
return $tb . "\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetCloseTable() {
|
|
|
|
|
return "</table>\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetLinhasDac($dac) {
|
|
|
|
|
global $dbcon, $statusServer;
|
|
|
|
|
$linha = '';
|
|
|
|
|
$imgSet = "";
|
|
|
|
|
$stl = "";
|
|
|
|
|
$align = "align=\"center\"";
|
|
|
|
|
$somaTodos = array('dac' => 'TODOS', 'num_agente' => 0, 'originadas' => 0, 'atendidas' => 0, 'transbordando' => 0, 'transbordada' => 0, 'abandonadas' => 0, 'espera' => 0, 'tempo_espera_int' => 0, 'abdsr' => 0);
|
|
|
|
|
$arDados = array();
|
|
|
|
|
|
|
|
|
|
$arDados = GetDadosDac();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($arDados as $dados) {
|
|
|
|
|
foreach ($somaTodos as $key => $value) {
|
|
|
|
|
if ($value !== 'TODOS') {
|
|
|
|
|
$somaTodos[$key] += $dados[$key];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
array_unshift($arDados, $somaTodos);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//print_r($arDados); exit;
|
|
|
|
|
foreach ($arDados as $dados) {
|
|
|
|
|
$linha .= "<tr>";
|
|
|
|
|
$stl = ($dac == $dados["dac"]) || ($dac == -1) ? "class=\"gridSelect\"" : "";
|
|
|
|
|
$dacAtv = $dados["dac"];
|
|
|
|
|
$dacAll = strtoupper($dacAtv) == 'TODOS';
|
|
|
|
|
if ($stl)
|
|
|
|
|
$_SESSION['SSsupervisorDacAtu'] = $dacAtv;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Seleciona o dac ativo.
|
|
|
|
|
*/
|
|
|
|
|
$imOn = 'dacOn.png';
|
|
|
|
|
$imOn = "<img src=\"imgSite/$imOn\" width=\"16\" border=\"0\" height=\"16\" title=\"Dac Ativo\" alt=\"Dac Ativo\" align=\"absmiddle\">";
|
|
|
|
|
$imOff = 'dacOff.png';
|
|
|
|
|
$imOff = "<img src=\"imgSite/$imOff\" width=\"16\" border=\"0\" height=\"16\" title=\"Clique aqui para ativar este dac!\" alt=\"Clique aqui para ativar este dac!\" align=\"absmiddle\">";
|
|
|
|
|
$imgSet = $stl ? $imOn : $imOff;
|
|
|
|
|
$linha .= "<td $align $stl><a href=\" javaScript:GetSupervisor('$dacAtv', '1');\">$imgSet</a></td>";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Chamada para o grafico.
|
|
|
|
|
*/
|
|
|
|
|
$dadoSel = ($dacAtv == 'Todos') ? $dadoSel = sprintf("<a style=\"color:black;\">%s</a>", ($stl ? "<span id=\"dacAtivo\">$dacAtv</span>" : $dacAtv)) : sprintf("<a href=\"javaScript:NovaJanela('index.php?idProg=127&dac=$dacAtv', 'jnGraphDac', '550', '250', 'resizable=NO,scrollbars=NO');\" style=\"color:black;\">%s</a>", ($stl ? "<span id=\"dacAtivo\">$dacAtv</span>" : $dacAtv));
|
|
|
|
|
$linha .= "<td $align $stl>$dadoSel</td>";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Agentes conectados.
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s %s>%s</td>", $align, $stl, $dados['num_agente']);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Chamadas originadas.
|
|
|
|
|
*/
|
|
|
|
|
$lkOriginadas = (($dados['originadas'] == 0) || ($dacAtv == 'TODOS')) ? $dados['originadas'] : sprintf("<a href=\"javaScript:NovaJanela('index.php?idProg=264&dac=$dacAtv&tpLayout=2', 'jnRelSupOriginadas', '900', '500', 'scrollbars=YES');\" title=\"Chamadas Originadas!\" style=\"color:black;\" >%s</a>", $dados['originadas']);
|
|
|
|
|
$linha .= sprintf("<td %s %s>%s</td>", $align, $stl, $lkOriginadas);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Chamadas atendidas e transbordo
|
|
|
|
|
*/
|
|
|
|
|
$imgTrbdando = "<img src=\"imgSite/transbordando.png\" align=\"bottom\" width=\"9\" height=\"8\" title=\"Chamadas que foram Transferidas para outro DAC por transbordo\"/>";
|
|
|
|
|
$imgTrbdada = "<img src=\"imgSite/transbordada.png\" alt=\"\" width=\"9\" height=\"8\" title=\"Chamadas recebidas por transbordo de outro DAC\"/>";
|
|
|
|
|
$atend = "<table width=\"100%%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td align=\"center\" width=\"33\" style=\"border:0;\">%s</td><td align=\"center\" width=\"33\" style=\"border:0;\"><a href=\"javaScript:NovaJanela('index.php?idProg=324&listaDacs={$dados['dac']}&tipo=TRANSBORDANDO', 'relTransbordo', '550', '250', 'resizable=NO,scrollbars=NO');\">%s</a></td><td align=\"center\" style=\"border:0;\"><a href=\"javaScript:NovaJanela('index.php?idProg=324&listaDacs={$dados['dac']}&tipo=TRANSBORDADO', 'relTransbordo', '550', '250', 'resizable=NO,scrollbars=NO');\">%s</a></td></tr></table>";
|
|
|
|
|
|
|
|
|
|
$imgAtd = ($dados['atendidas'] ? $dados['atendidas'] : 0);
|
|
|
|
|
$lkRecebidas = (($imgAtd == 0) || ($dacAtv == 'TODOS')) ? $imgAtd : sprintf("<a href=\"javaScript:NovaJanela('index.php?idProg=265&dac=$dacAtv&tpLayout=2', 'jnRelSupRecebidas', '900', '500', 'scrollbars=YES');\" title=\"Chamadas Recebidas!\" style=\"color:black;\" >%s</a>", $imgAtd);
|
|
|
|
|
$imgTrbdando = ($dados['transbordando'] ? $dados['transbordando'] : 0) . $imgTrbdando;
|
|
|
|
|
$imgTrbdada = ($dados['transbordada'] ? $dados['transbordada'] : 0) . $imgTrbdada;
|
|
|
|
|
|
|
|
|
|
$atend = sprintf($atend, $lkRecebidas, $imgTrbdando, $imgTrbdada);
|
|
|
|
|
$linha .= "<td align=\"center\" $stl>$atend</td>";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Chamadas abandonadas.
|
|
|
|
|
*/
|
|
|
|
|
$abd = $dados['abandonadas'];
|
|
|
|
|
$ramal = GetRamalMonitorar(RAMAL_MONITOR_SUPERVISOR);
|
|
|
|
|
$abdsr = $dacAll ? $dados['abdsr'] : RetornaAbandon($dbcon, $dados['dac'], $ramal, "supervisor", "", $dados['abdsr']);
|
|
|
|
|
$linha .= "<td align=\"center\" $stl>$abd - $abdsr</td>";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Chamadas em espera.
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s %s> %s</td>", $align, $stl, $dados['espera']);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Tempo de m<EFBFBD>dio de espera das chamadas..
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s %s> %s</td>", $align, $stl, $dacAll ? SecondToStrTime($dados['tempo_espera_int']) : $dados['tempo_espera']);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* N<EFBFBD>vel de servi<EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s %s> %s</td>", $align, $stl, $dacAll ? '-' : $dados['tempo_nivel_servico']);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Informacoes da campanha;
|
|
|
|
|
*/
|
|
|
|
|
$cmpInfo = GetInfoCampanha($dacAtv);
|
|
|
|
|
$linha .= sprintf("<td %s %s>%s</td>", $align, $stl, ($dacAll ? '-' : $cmpInfo));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Pausa da opera<EFBFBD><EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
$imOn = "<img src=\"imgSite/grupos.gif\" width=\"16\" border=\"0\" height=\"16\" title=\"Coloca todos os Agentes em Pausa!\" alt=\"Coloca todos os Agentes em Pausa!\" align=\"absmiddle\">";
|
|
|
|
|
$imOff = "<img src=\"imgSite/user_of.gif\" width=\"16\" border=\"0\" height=\"16\" title=\"Remove todos os Agentes da Pausa!\" alt=\"Remove todos os Agentes da Pausa!\" align=\"absmiddle\">";
|
|
|
|
|
|
|
|
|
|
$imgSet = $imOn; //($dac == $dados[1]) || ($dac == -1) ? $imOn : $imOff;
|
|
|
|
|
$linha .= $dacAll ? sprintf("<td %s %s>%s</td>", $align, $stl, '-') : "<td align=\"center\" $stl><a href=\"javaScript:PausaDac('{$dados['dac']}', 1);\">$imgSet</a></td>";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verifica arquivos rejeitados no modulo de vendas quando ativado.
|
|
|
|
|
*/
|
|
|
|
|
$imgVendas = '';
|
|
|
|
|
if (!$dacAll && UseModVendas()) {
|
|
|
|
|
|
|
|
|
|
$rejeitados = GetRejeitadosVendas($dacAtv);
|
|
|
|
|
$imOn = "<img src=\"imgSite/dollar16.png\" width=\"16\" border=\"0\" height=\"16\" title=\"Existem $rejeitados Arquivo(s) Rejeitado(s) na Integra<EFBFBD><EFBFBD>o das Vendas nesta data!\" alt=\"Existem Arquivos Rejeitados na Integra<EFBFBD><EFBFBD>o das Vendas!\" align=\"absmiddle\">";
|
|
|
|
|
$imOff = "<img src=\"imgSite/dollar16.png\" width=\"16\" border=\"0\" height=\"16\" title=\"N<EFBFBD>o Arquivos Rejeitados!\" alt=\"N<EFBFBD>o Arquivos Rejeitados!\" align=\"absmiddle\">";
|
|
|
|
|
|
|
|
|
|
$imgVendas = "<a href=\"javaScript:NovaJanela('index.php?idProg=283&dac=%s', 'jnRejeitadosVendas', '650', '450', 'resizable=YES,scrollbars=YES');\">%s</a>";
|
|
|
|
|
$imgVendas = sprintf($imgVendas, $dacAtv, ($rejeitados ? $imOn : $imOff));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* classifica<EFBFBD><EFBFBD>o de chamadas.
|
|
|
|
|
*/
|
|
|
|
|
$naoClas = isset($dados['nao_classificado']) ? $dados['nao_classificado'] : false;
|
|
|
|
|
$dacClas = $dados['dac'];
|
|
|
|
|
$idDac = isset($dados['id_dac']) ? $dados['id_dac'] : null;
|
|
|
|
|
$imOn = "<img src=\"imgSite/class16.png\" width=\"16\" border=\"0\" height=\"16\" title=\"Existem $naoClas chamado(s) n<EFBFBD>o classificado(s)!\" alt=\"Existem $naoClas chamado(s) n<EFBFBD>o classificado(s)!\" align=\"absmiddle\">";
|
|
|
|
|
$imOff = "<img src=\"imgSite/class16off.png\" width=\"16\" border=\"0\" height=\"16\" title=\"N<EFBFBD>o h<EFBFBD> chamados a classificar nesta data!\" alt=\"N<EFBFBD>o h<EFBFBD> chamados a classificar nesta data!\" align=\"absmiddle\">";
|
|
|
|
|
|
|
|
|
|
if (!$dacAll && $naoClas) {
|
|
|
|
|
$linha .= "<td align=\"center\" $stl><a href=\"javaScript:NovaJanela('index.php?idProg=192&dac=$dacClas&idDac=$idDac', 'jnNaoClassificado', '505', '210', 'resizable=YES,scrollbars=YES');\">$imOn</a>$imgVendas</td>";
|
|
|
|
|
} else {
|
|
|
|
|
if ($dacAll) {
|
|
|
|
|
$linha .= ("<td align=\"center\" $stl>" . ($statusServer ? "..." : "-") . "$imgVendas</td>");
|
|
|
|
|
} else {
|
|
|
|
|
$linha .= "<td align=\"center\" $stl><a href=\"javaScript:NovaJanela('index.php?idProg=192&dac=$dacClas&idDac=$idDac', 'jnNaoClassificado', '505', '210', 'resizable=YES,scrollbars=YES');\">$imOff</a>$imgVendas</td>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$linha .= "</tr>\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $linha;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function FiltroAgt($status) {
|
|
|
|
|
global $cklivre, $ckocupado, $ckpausa;
|
|
|
|
|
|
|
|
|
|
if (!$cklivre && !$ckocupado && !$ckpausa) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ($cklivre === $status) || ($ckocupado === $status) || ($ckpausa === $status);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetLinhasAgt($dac) {
|
|
|
|
|
//ramal, matricula, nome,tempo_logado, modo_atendimento,fone, status, duracao, originadas_pa, atendidas_pa, tempo_atendimento statusmonitorar, statusintercalar, dac, status_time disponivel_atendimento, chamada_classificado
|
|
|
|
|
global $selTodos;
|
|
|
|
|
$imgSet = "";
|
|
|
|
|
$stl = "";
|
|
|
|
|
$align = "align=\"center\"";
|
|
|
|
|
$arStatusMonitorar = array('PAUSA', 'OCUPADO', 'LIVRE');
|
|
|
|
|
$arAlerta = array("PAUSA" => "orangered", "OCUPADO" => "lightblue", "LIVRE" => "palegreen");
|
|
|
|
|
$arStatus = array("PAUSA" => "prm_super_alerta_pausa", "OCUPADO" => "prm_super_alerta_atende", "LIVRE" => "prm_super_alerta_livre");
|
|
|
|
|
$arMonitorar = 0;
|
|
|
|
|
//$acessAudio = GetAcessoAudio($dac);
|
|
|
|
|
$linhas = '';
|
|
|
|
|
// "tempo_logado" => "tempo_login"; "fone" => "origem_destino, "ramal_monitor" => "ramal";
|
|
|
|
|
|
|
|
|
|
$dadosAgt = GetDadosAgt($dac);
|
|
|
|
|
//$response = json_decode(request('http://127.0.0.1/integracao/media/api/agente/listarAgentesDisponivel'), true);
|
|
|
|
|
|
|
|
|
|
foreach ($dadosAgt as $dados) {
|
|
|
|
|
$linha = "<tr {MONITOR}>";
|
|
|
|
|
$stAr = isset($dados["status"]) ? explode("-", $dados["status"]) : array();
|
|
|
|
|
$stAtual = isset($stAr[0]) ? $stAr[0] : '';
|
|
|
|
|
$arMonitorar = (array_search($stAtual, $arStatusMonitorar) !== false);
|
|
|
|
|
$acessAudio = GetAcessoAudio($dados["dac"]);
|
|
|
|
|
$media = StrToIntDef($dados['media']) && (StrToIntDef($dados['media']) != 99);
|
|
|
|
|
|
|
|
|
|
if (FiltroAgt($stAtual)) {
|
|
|
|
|
/*
|
|
|
|
|
* Dac quando seledionado todos;
|
|
|
|
|
*/
|
|
|
|
|
if ($selTodos) {
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $dados["dac"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Ramal do agente;
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $dados["ramal_monitor"]);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Matricula e e chamada para grafico.
|
|
|
|
|
*/
|
|
|
|
|
$mat = isset($dados['matricula']) ? $dados['matricula'] : '-';
|
|
|
|
|
$strLicenca = "<img src=\"imgSite/%s\" width=\"8\" border=\"0\" height=\"8\" title=\"%s\" alt=\"%s\" align=\"absmiddle\">";
|
|
|
|
|
$msgTpLicenca = ($dados['pa_fixo'] ? "Licen<EFBFBD>a Fixa!" : "Licen<EFBFBD>a Din<EFBFBD>mica!");
|
|
|
|
|
$tpLicenca = sprintf($strLicenca, ($dados['pa_fixo'] ? "pa_fixo.png" : "pa_dinamico.png"), $msgTpLicenca, $msgTpLicenca);
|
|
|
|
|
$dacAtv = isset($dados['dac']) ? $dados['dac'] : '-';
|
|
|
|
|
$strTmp = "<a href=\"javaScript:NovaJanela('index.php?idProg=126&matricula=$mat&dac=$dacAtv', 'jnGraphAgente', '1048', '640', 'resizable=NO,scrollbars=NO');\" style=\"color:black;\">$mat</a>";
|
|
|
|
|
$linha .= sprintf("<td %s>%s %s</td>", $align, $strTmp, $tpLicenca);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Nome
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $dados["nome"]);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Login
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $dados["tempo_logado"]);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Modo de atendimetno selecionado.
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $dados["modo_atendimento"]);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Origem e destino(bina).
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
$strTmp = isset($dados['fone']) ? $dados['fone'] : '-';
|
|
|
|
|
|
|
|
|
|
if ($media) {
|
|
|
|
|
$strTmp = "<a href=\"javaScript:NovaJanela('index.php?idProg=357&matricula={$dados['matricula']}','jnAtendChat','1048','640', 'resizable=NO,scrollbars=NO');\">$strTmp</a>  ";
|
|
|
|
|
$strTmp .= "<img src=\"imgSite/monitoring.png\" width=\"12\" border=\"0\" height=\"12\" title=\"Monitorar atendimentos\" alt=\"Monitorar atendimentos\" align=\"absmiddle\">";
|
|
|
|
|
} else {
|
|
|
|
|
$img1 = ($dados['tipo_ligacao'] == 'E') ? "direcaoE32.png" : "direcaoS32.png";
|
|
|
|
|
$title1 = ($dados['tipo_ligacao'] == 'E') ? "Chamada Entrante!" : "Chamada Sainte!";
|
|
|
|
|
if ($strTmp)
|
|
|
|
|
$strTmp .= " <img src=\"imgSite/$img1\" width=\"12\" border=\"0\" height=\"12\" title=\"$title1\" alt=\"$title1\" align=\"absmiddle\">";
|
|
|
|
|
|
|
|
|
|
$dacClass = $dados['dac'];
|
|
|
|
|
if (SupervisorClass($dacClass)) {
|
|
|
|
|
$img = GetExigeClassStatus($dados['chamada_classificado'], $dacClass, 1) ? "ledGreen.png" : "ledRed.png";
|
|
|
|
|
$title = GetExigeClassStatus($dados['chamada_classificado'], $dacClass, 1) ? "Chamada Classificada!" : "Chamada n<EFBFBD>o Classificada!";
|
|
|
|
|
$strTmp .= " <img src=\"imgSite/$img\" width=\"12\" border=\"0\" height=\"12\" title=\"$title\" alt=\"$title\" align=\"absmiddle\">";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Status do agente.
|
|
|
|
|
*/
|
|
|
|
|
$strTmp = isset($dados['status']) ? $dados['status'] : '';
|
|
|
|
|
$img = isset($dados['disponivel_atendimento']) && $dados['disponivel_atendimento'] ? "ledGreen.png" : "ledRed.png";
|
|
|
|
|
$title = isset($dados['disponivel_atendimento']) && $dados['disponivel_atendimento'] ? "Agente Dispon<EFBFBD>vel para Fila!" : "Agente Indispon<EFBFBD>vel para Fila!";
|
|
|
|
|
$strTmp .= " <img src=\"imgSite/$img\" width=\"12\" border=\"0\" height=\"12\" title=\"$title\" alt=\"$title\" align=\"absmiddle\">";
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Dura<EFBFBD><EFBFBD>o do login
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $dados["duracao"]);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Chamadas oferecidas
|
|
|
|
|
*/
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $dados["originadas_pa"]);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Chamadas Atendidas na fila.
|
|
|
|
|
*/
|
|
|
|
|
$atendidas_pa = 0;
|
|
|
|
|
$statusAgentMedia = '';
|
|
|
|
|
// if($media){
|
|
|
|
|
// foreach($response['data'] as $v){
|
|
|
|
|
// if($v['matricula'] == $dados["matricula"]){
|
|
|
|
|
// $atendidas_pa = $v['numero_atendimento_dia'];
|
|
|
|
|
// $statusAgentMedia = $v['status'];
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// } else {
|
|
|
|
|
// $atendidas_pa = $dados["atendidas_pa"];
|
|
|
|
|
// }
|
|
|
|
|
$atendidas_pa = $dados["atendidas_pa"];
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $atendidas_pa);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Tempo m<EFBFBD>dio de atendimento
|
|
|
|
|
*/
|
|
|
|
|
$chamadaAgt = $dados["originadas_pa"] + $dados["atendidas_pa"];
|
|
|
|
|
$strTmp = $chamadaAgt ? round(($dados["tempo_atendimento"] / $chamadaAgt), 0) : 0;
|
|
|
|
|
$strTmp = SecondToStrTime($strTmp);
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Logoff de Agente
|
|
|
|
|
*/
|
|
|
|
|
if ($media) {
|
|
|
|
|
$strTmp = "<a href=\"javaScript:finalizarAgente('{$dados['matricula']}');\"><img src=\"imgSite/exit16.png\" width=\"16\" height=\"16\" border=\"0\" title=\"Logoff de Agente!\" alt=\"Logoff de Agente!\"></a>";
|
|
|
|
|
} else {
|
|
|
|
|
$strTmp = "<a href=\"javaScript:LogoffAgente('%s','%s','%s','%s');\"><img src=\"imgSite/exit16.png\" width=\"16\" height=\"16\" border=\"0\" title=\"Logoff de Agente!\" alt=\"Logoff de Agente!\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, isset($dados['matricula']) ? $dados['matricula'] : '', strtoupper((isset($dados['modo_atendimento']) ? $dados['modo_atendimento'] : '')), isset($dados['dac']) ? $dados['dac'] : '', $stAtual);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Controle de pausas do agente
|
|
|
|
|
*/
|
|
|
|
|
if ($media) {
|
|
|
|
|
if ($statusAgentMedia == 'LIVRE') {
|
|
|
|
|
$strTmp = "<a href=\"javaScript:NovaJanela('index.php?idProg=106&pausaAgente=%s&dac=%s&tipoPausa=%s&status=%s', 'setPausaFromSuper', '515', '230', 'resizable=NO,scrollbars=NO');\"><img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, $dados['matricula'], $dados['dac'], 'media', $statusAgentMedia, "user_on.gif", "Gerenciar Pausa!", "Gerenciar Pausa!");
|
|
|
|
|
} else {
|
|
|
|
|
$strTmp = "<a href=\"javaScript:sairPausa('%s');\"><img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, $dados['matricula'], "user_off.gif", "Gerenciar Pausa!", "Remover Pausa!");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (substr(strtoupper($dados['status']), 0, 5) == 'PAUSA') {
|
|
|
|
|
$strTmp = "<a href=\"javaScript:PausaAgente('%s','%s','%s', '%s', '%s');\"><img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, $dados['matricula'], strtoupper($dados['ramal_monitor']), $dados['dac'], '0', $media, "user_off.gif", "Tira o agente de Pausa!", "Tira o agente de Pausa!");
|
|
|
|
|
} else {
|
|
|
|
|
$strTmp = "<a href=\"javaScript:PausaAgente('%s','%s','%s', '%s', '%s');\"><img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, isset($dados['matricula']) ? $dados['matricula'] : '', strtoupper(isset($dados['ramal_monitor']) ? $dados['ramal_monitor'] : ''), isset($dados['dac']) ? $dados['dac'] : '', '1', $media, "user_on.gif", "Coloca Agente em pausa!", "Coloca Agente em pausa!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Monitoramento do ramal do agente.
|
|
|
|
|
*/
|
|
|
|
|
if ($acessAudio && !$media) {
|
|
|
|
|
$idSessao = "SSmonitorar_" . (isset($dados['matricula']) ? $dados['matricula'] : '');
|
|
|
|
|
|
|
|
|
|
if (isset($dados["statusmonitorar"]) && ($dados["statusmonitorar"] == 1)) {
|
|
|
|
|
//$_SESSION[$idSessao] = 1;
|
|
|
|
|
$strTmp = "<a href=\"javaScript:MonitoraAgente('%s', '%s', '%s');\"><img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, $dados['matricula'], strtoupper($dados['ramal_monitor']), $dados['dac'], "monitorar.gif", "Em opera<EFBFBD><EFBFBD>o!", "Em opera<EFBFBD><EFBFBD>o!");
|
|
|
|
|
} else {
|
|
|
|
|
$_SESSION[$idSessao] = 0;
|
|
|
|
|
$strTmp = "<a href=\"javaScript:MonitoraAgente('%s', '%s', '%s');\"><img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, isset($dados['matricula']) ? $dados['matricula'] : '', strtoupper(isset($dados['ramal_monitor']) ? $dados['ramal_monitor'] : ''), $dados['dac'], "monitorarOff.gif", "Monitorar!", "Monitorar!");
|
|
|
|
|
}
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$idSessao = "SSinter_" . (isset($dados['matricula']) ? $dados['matricula'] : '' );
|
|
|
|
|
|
|
|
|
|
if (isset($dados["statusintercalar"]) && ($dados["statusintercalar"] == 1)) {
|
|
|
|
|
//$_SESSION[$idSessao] = 1;
|
|
|
|
|
$strTmp = "<a href=\"javaScript:IntercalarAgente('%s', '%s', '%s');\"><img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, $dados['matricula'], strtoupper($dados['ramal_monitor']), $dados['dac'], "intercalar.gif", "Em opera<EFBFBD><EFBFBD>o!", "Em opera<EFBFBD><EFBFBD>o!");
|
|
|
|
|
} else {
|
|
|
|
|
$_SESSION[$idSessao] = 0;
|
|
|
|
|
$strTmp = "<a href=\"javaScript:IntercalarAgente('%s', '%s', '%s');\"><img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\"></a>";
|
|
|
|
|
$strTmp = sprintf($strTmp, isset($dados['matricula']) ? $dados['matricula'] : '', strtoupper(isset($dados['ramal_monitor']) ? $dados['ramal_monitor'] : ''), isset($dados['dac']) ? $dados['dac'] : '', "intercalarOff.gif", "Intercalar!", "Intercalar!");
|
|
|
|
|
}
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
} else {
|
|
|
|
|
$title = 'Monitoramento de <EFBFBD>udio n<EFBFBD>o disponivel!';
|
|
|
|
|
$imgBloq = 'lockClose.gif';
|
|
|
|
|
$strTmp = sprintf("<img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\">", $imgBloq, $title, $title);
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
|
|
|
|
|
$strTmp = sprintf("<img src=\"imgSite/%s\" width=\"16\" height=\"16\" border=\"0\" title=\"%s\" alt=\"%s\">", $imgBloq, $title, $title);
|
|
|
|
|
$linha .= sprintf("<td %s>%s</td>", $align, $strTmp);
|
|
|
|
|
}
|
|
|
|
|
$linha .= "</tr>\n";
|
|
|
|
|
|
|
|
|
|
$statusTime = "";
|
|
|
|
|
if ($arMonitorar) {
|
|
|
|
|
if ($stAtual == "PAUSA") {
|
|
|
|
|
$tempoAlerta = GetTempoPausa($stAr[1]);
|
|
|
|
|
if (SecondToStrTime($tempoAlerta['tempo_alerta']) <= $dados["duracao"]) {
|
|
|
|
|
$statusTime = sprintf('style="background-color: %s" ', $arAlerta[$stAtual]);
|
|
|
|
|
}
|
|
|
|
|
} else if ($_SESSION[$arStatus[$stAtual]] <= $dados["status_time"]) {
|
|
|
|
|
$statusTime = sprintf('style="background-color: %s" ', $arAlerta[$stAtual]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$linhas .= str_replace("{MONITOR}", $statusTime, $linha);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $linhas;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetTbDac($dbcon, $dac, $head) {
|
|
|
|
|
//tabela de dacs
|
|
|
|
|
$tb = "";
|
|
|
|
|
$tb .= GetHeadTable($head);
|
|
|
|
|
$tb .= GetLinhasDac($dac);
|
|
|
|
|
return $tb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetTbAgente($dbcon, $dac, $head) {
|
|
|
|
|
$tb = GetHeadTable($head, "Agentes em Opera<EFBFBD><EFBFBD>o");
|
|
|
|
|
$tb .= GetLinhasAgt($dac);
|
|
|
|
|
//$tb .= GetCloseTable();
|
|
|
|
|
return $tb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetTempoPausa($pausa) {
|
|
|
|
|
global $dbcon;
|
|
|
|
|
$query = "SELECT tempo_alerta FROM pbx_motivos_pausas WHERE motivo ILIKE '$pausa'";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
return pg_fetch_assoc($result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetCurrentCall($conn, $cmpId) {
|
|
|
|
|
$table = ' <table cellpadding="2" cellspacing="0" border="0" width="100%" class="grid">
|
|
|
|
|
<tr>
|
|
|
|
|
<th>Fone</th>
|
|
|
|
|
<th>Status</th>
|
|
|
|
|
<th>Tempo</th>
|
|
|
|
|
</tr>
|
|
|
|
|
{linha}
|
|
|
|
|
</table>';
|
|
|
|
|
|
|
|
|
|
$query = "select conf_fone, conf_status, round(extract(epoch from age(now(),conf_data))) * interval '1 second' as tempo from pbx_campanha_contato_fone where conf_status_lista = '1' and upper(conf_status) = upper('discando') and round(extract(epoch from age(now(),conf_data))) <= '30' and cmp_id = (select cmp_id from pbx_campanha where cmp_descricao = '$cmpId')";
|
|
|
|
|
|
|
|
|
|
$result = @pg_query($conn, $query);
|
|
|
|
|
|
|
|
|
|
//$erro = ($result ? '' : "N<EFBFBD>o foiposs<EFBFBD>vel realizar a opera<EFBFBD>ao! Erro: " . pg_last_error($dbcon));
|
|
|
|
|
$linha = '';
|
|
|
|
|
if ($result) {
|
|
|
|
|
while ($dados = @pg_fetch_array($result)) {
|
|
|
|
|
$fone = $dados["conf_fone"];
|
|
|
|
|
$tempo = $dados["tempo"];
|
|
|
|
|
$status = $dados["conf_status"];
|
|
|
|
|
|
|
|
|
|
$linha .= " <tr><td>$fone</td><td>$status</td><td>$tempo</td> </tr>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
|
$linha = " <tr><td colspan=\"3\">Erro ao consultar servidor!</td></tr>";
|
|
|
|
|
} else if (empty($linha)) {
|
|
|
|
|
$linha = " <tr><td colspan=\"3\">Aguardando....</td></tr>";
|
|
|
|
|
}
|
|
|
|
|
$table = str_replace("{linha}", $linha, $table);
|
|
|
|
|
|
|
|
|
|
return $table;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function PausaAgente($dbcon, $ramal, $dac, $matricula) {
|
|
|
|
|
$idDac = GetDacCod($dbcon, $dac);
|
|
|
|
|
$idSessao = "SSpausa_" . $matricula;
|
|
|
|
|
$pausa = GetPausa($dbcon, $matricula); // $_SESSION[$idSessao];
|
|
|
|
|
$codMotivo = $_SESSION["SetListaMotivo"];
|
|
|
|
|
$GLOBALS["ramalOperacao"] = $ramal;
|
|
|
|
|
if (!$pausa) {
|
|
|
|
|
$result = GetUrl(AST_ADD_PAUSA, $dac, $matricula);
|
|
|
|
|
|
|
|
|
|
if ($result) {
|
|
|
|
|
$result = @pg_query($db, "begin");
|
|
|
|
|
|
|
|
|
|
//Descricao do Motivo de pausa
|
|
|
|
|
$query = "select motivo from pbx_motivos_pausas where id = '$codMotivo'";
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
|
|
|
|
|
if ($result) {
|
|
|
|
|
$rowMotivo = @pg_fetch_row($result);
|
|
|
|
|
$descMotivo = $rowMotivo[0];
|
|
|
|
|
|
|
|
|
|
//atualiza dados do supervisor
|
|
|
|
|
$query = "update pbx_supervisor_agentes
|
|
|
|
|
set status = 'PAUSA',
|
|
|
|
|
duracao = now(),
|
|
|
|
|
motivo_pausa = '$descMotivo',
|
|
|
|
|
origem_destino = ''
|
|
|
|
|
where matricula = '$matricula'";
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($result)
|
|
|
|
|
$result = @pg_affected_rows($result);
|
|
|
|
|
|
|
|
|
|
//registra pausa
|
|
|
|
|
if ($result) {
|
|
|
|
|
$regProc = QuotedStr(sprintf("AddPausa: Login: %s Scrp: %s Func: %s ", GetLogin(), 'supervisor.php', 'PausaAgente'));
|
|
|
|
|
$relEvt = GetRelacionaEventos($dbcon, $matricula);
|
|
|
|
|
$query = "insert into pbx_eventos_agentes(matricula, ramal, id_dac, id_motivo_pausa, entrada_pausa, flag, relaciona_eventos, pausa_produtiva, reg_proc)
|
|
|
|
|
values('$matricula', '$ramal', $idDac, $codMotivo, now(), 0, $relEvt, (select produtiva from pbx_motivos_pausas where id = '$codMotivo'), $regProc)";
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
|
|
|
|
|
if ($result) {
|
|
|
|
|
$result = @pg_affected_rows($result);
|
|
|
|
|
|
|
|
|
|
//pega o id corrente
|
|
|
|
|
if ($result) {
|
|
|
|
|
$query = "select currval('pbx_eventos_agentes_id_seq')";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
$row = pg_fetch_row($result);
|
|
|
|
|
$_SESSION[$matricula . "relEvt"] = $relEvt;
|
|
|
|
|
$_SESSION[$matricula . "idPausa"] = $row[0];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($result) {
|
|
|
|
|
@pg_query($db, "commit");
|
|
|
|
|
$_SESSION[$idSessao] = 1;
|
|
|
|
|
$_SESSION[AGT_ULT_EVENTO] = "PAUSA";
|
|
|
|
|
return "OK;O agente \"Matricula: $matricula \" foi colocado em pausa!";
|
|
|
|
|
} else {
|
|
|
|
|
@pg_query($db, "rollback");
|
|
|
|
|
return "ERRO;A opera<EFBFBD><EFBFBD>o n<EFBFBD>o pode ser realizada! Erro: " + pg_last_error($dbcon);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$result = GetUrl(AST_REM_PAUSA, $dac, $matricula);
|
|
|
|
|
|
|
|
|
|
if ($result) {
|
|
|
|
|
$regProc = QuotedStr(sprintf(",RemPausa: Login: %s Scrp: %s Func: %s", GetLogin(), 'supervisor.php', 'PausaAgente'));
|
|
|
|
|
$result = @pg_query($dbcon, "begin");
|
|
|
|
|
//atualiza dados do supervisor
|
|
|
|
|
|
|
|
|
|
$query = "select origem_destino from pbx_supervisor_agentes where matricula = '$matricula' ";
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
$row = pg_fetch_row($result);
|
|
|
|
|
|
|
|
|
|
$statusAtual = empty($row[0]) ? 'LIVRE' : 'OCUPADO';
|
|
|
|
|
|
|
|
|
|
$query = "update pbx_supervisor_agentes
|
|
|
|
|
set status = '$statusAtual',
|
|
|
|
|
duracao = now()
|
|
|
|
|
where matricula = '$matricula'";
|
|
|
|
|
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
if ($result)
|
|
|
|
|
$result = pg_affected_rows($result);
|
|
|
|
|
|
|
|
|
|
//registra o login do usuario
|
|
|
|
|
if ($result) {
|
|
|
|
|
$query = "update pbx_eventos_agentes
|
|
|
|
|
set saida_pausa = now(),
|
|
|
|
|
flag = 2,
|
|
|
|
|
reg_proc = coalesce(reg_proc, '') || $regProc
|
|
|
|
|
where matricula = '$matricula'
|
|
|
|
|
and id_dac = (select id from pbx_dacs where nome = '$dac')
|
|
|
|
|
and entrada_pausa = (select max(entrada_pausa) from pbx_eventos_agentes where matricula = '$matricula' and id_dac = (select id from pbx_dacs where nome = '$dac'))";
|
|
|
|
|
|
|
|
|
|
$result = @pg_query($dbcon, $query);
|
|
|
|
|
if ($result)
|
|
|
|
|
$result = @pg_affected_rows($result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($result) {
|
|
|
|
|
@pg_query($dbcon, "commit");
|
|
|
|
|
$_SESSION[$idSessao] = 0;
|
|
|
|
|
$_SESSION[AGT_DESCONECTA_SUPER] = 1;
|
|
|
|
|
|
|
|
|
|
return "OK;O agente \"Matricula: $matricula \" foi retirado de pausa!";
|
|
|
|
|
} else {
|
|
|
|
|
@pg_query($db, "rollback");
|
|
|
|
|
return "ERRO;A opera<EFBFBD><EFBFBD>o n<EFBFBD>o pode ser realizada! Erro: " + pg_last_error($dbcon);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function request($url, $post = []) {
|
|
|
|
|
$ch = curl_init();
|
|
|
|
|
$isPost = $post ? 1 : 0;
|
|
|
|
|
|
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
|
|
|
curl_setopt($ch, CURLOPT_POST, $isPost);
|
|
|
|
|
|
|
|
|
|
if ($isPost) {
|
|
|
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
|
|
|
|
$head = curl_exec($ch);
|
|
|
|
|
curl_close($ch);
|
|
|
|
|
return $head;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
?>
|