|
|
<?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); |
|
|
|
|
|
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 { |
|
|
//$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]; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
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 = ''; |
|
|
// 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) { |
|
|
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($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; |
|
|
} |
|
|
|
|
|
?>
|
|
|
|