PABX da Simples IP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1160 lines
54 KiB

<?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;
/**
* Separa as informacoes da fila conforme a organizacao
*/
$org_id = GetOrganizacao();
/*
* 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&iacute;vel de Servi&ccedil;o', "Campanha", $imPausaDac, "Clas"); //,'Tempo N&iacute;vel de Servi&ccedil;o'
$tbHeadAgente = array('Ramal', 'Matr&iacute;cula', 'Nome', 'Login', 'Atendimento', 'Orig/Dest', 'Status', 'Dura&ccedil;&atilde;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"];
$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);
if (GetAvisoLgpdMonitoria()) {
$nvLgpdSupervisor = GetNivelLgpd(GetMatricula());
$nvLgpdMonitorado = GetNivelLgpd($matricula);
}
if (!GetUrl(AST_MONITORAR, GetParamMonitorar(GetAvisoLgpdMonitoria(), $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 {
$tempoSuperAtu = GetTempoSupervisor();
$jsStartup[] = "var idSet = window.setInterval(\"GetSupervisor('$dac','')\",$tempoSuperAtu);";
$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, $dbcon;
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($dbcon, $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, $dbcon;
try {
$dacAll = strtoupper($dac) == "TODOS";
$arControle = GetInfoControle();
/*
* Verifica o tempo de atualiza<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($dbcon, $qr);
$dadosDac = array();
while (($dados = @pg_fetch_array($result, null, PGSQL_ASSOC))) {
$dadosDac[] = $dados;
}
return $dadosDac;
}
function GetQueryDac()
{
$idUser = GetIdUser();
$org_id = GetOrganizacao();
$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,
org_id
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, org_id
,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,
d.org_id
FROM ast_eventos_dacs b INNER JOIN ast_bilhetes a on a.uniqueid = b.uid2 and a.lastapp <> 'Transferred Call'
INNER JOIN pbx_queues_grupos 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, org_id
) AS DADOS ORDER BY 1
) a ON e.dac = a.dac \n";
$query .= " WHERE 1=1 ";
if (!IsAdmin() && !empty($dacsAcesso)) {
$query .= " AND e.dac IN($dacsAcesso)\n";
}
$query .= " AND org_id = $org_id ";
$query .= " ORDER BY 2";
return $query;
}
function GetDacsAcesso($idUser, $array = false)
{
global $dbcon;
$org_id = GetOrganizacao();
$query = "SELECT DISTINCT b.nome
FROM pbx_queues_grupos b
INNER JOIN pbx_fila_grupos c ON c.id = b.id and c.org_id = b.org_id
INNER JOIN pbx_grupo_usuario d ON d.gp_id = c.gp_id and d.org_id = c.org_id
AND d.user_id = %s and b.status = 'A' ";
$query = sprintf($query, IsAdmin() ? 'd.user_id' : QuotedStr($idUser));
$query .= " AND b.org_id = {$org_id}";
$result = pg_query($dbcon, $query);
if(!pg_num_rows($result)){
return array();
}
$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();
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','BUSYS','NOANSWERS')
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() && $dacsAcesso) {
$queryLocal .= " AND a.dac IN($dacsAcesso)\n";
}
$queryLocal .= " ORDER BY a.dac, a.nome";
//echo $queryLocal; exit;
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];
}
}
}
if (is_array($arDados)) {
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"];
$dacDisplay = explode('@',$dados['dac'])[0];
$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\">$dacDisplay</span>" : $dacDisplay)) : 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\">$dacDisplay</span>" : $dacDisplay));
$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);
$dacDisplay = explode('@',$dados["dac"])[0];
if (FiltroAgt($stAtual)) {
/*
* Dac quando seledionado todos;
*/
if ($selTodos) {
$linha .= sprintf("<td %s>%s</td>", $align, $dacDisplay);
}
/*
* 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($dacDisplay) ? $dacDisplay : '-';
$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> &nbsp";
$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 = '';
$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) {
pg_query($dbcon, "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($dbcon, "commit");
$_SESSION[$idSessao] = 1;
$_SESSION[AGT_ULT_EVENTO] = "PAUSA";
return "OK;O agente \"Matricula: $matricula \" foi colocado em pausa!";
} else {
pg_query($dbcon, "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($dbcon, "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;
}