<?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í 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"];
$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();
// 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($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()) {
$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;
$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($dbcon, $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();
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()) {
$queryLocal .= " AND a.dac IN($dacsAcesso)\n";
}
$queryLocal .= " ORDER BY a.dac, a.nome";
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"];
$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 = '';
$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;
}