forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
333 lines
15 KiB
333 lines
15 KiB
2 years ago
|
<?php
|
||
|
|
||
|
$tpl = "supervisorInfoAgente.tpl";
|
||
|
$dac = $_GET["dac"];
|
||
|
$matricula = $_GET["matricula"];
|
||
|
$tpLayout = 1;
|
||
|
$chamadaGraf = isset($_GET["tipoGraph"]);
|
||
|
$tipo = $chamadaGraf ? $_GET["tipoGraph"] : 'agt';
|
||
|
$tpOper = $_GET["tipoDac"];
|
||
|
|
||
|
|
||
|
// ramal matricula apelido nome chamadas_atendidas tempo_atendimento
|
||
|
// login numPausa pos_atendimento tempo_pausa tempo_login
|
||
|
|
||
|
if ($chamadaGraf) {
|
||
|
$_SESSION["SScolorAgtGraphPie"] = array("red", "blue", "yellow", "green");
|
||
|
$_SESSION["SSdadoGraphWidth"] = 480;
|
||
|
$_SESSION["SSdadoGraphHeigth"] = 380;
|
||
|
$_SESSION["SSLegendaSetColumns"] = 2;
|
||
|
|
||
|
if ($tipo != 'agt') {
|
||
|
$_SESSION["SSnomeGraphPie"] = "Desempenho Dac";
|
||
|
FetchDados($dbcon, $tipo, $dac, '');
|
||
|
} else {
|
||
|
$_SESSION["SSnomeGraphPie"] = "Desempenho Agente";
|
||
|
FetchDados($dbcon, $tipo, $dac, $matricula);
|
||
|
}
|
||
|
ob_clean();
|
||
|
include 'graphAgente.php';
|
||
|
exit;
|
||
|
} else {
|
||
|
|
||
|
$dados = FetchDados($dbcon, $tipo, $dac, $matricula);
|
||
|
|
||
|
$nomeDac = $dados["dac"];
|
||
|
$idDac = $dados["id_dac"];
|
||
|
$tempoAtendimento = $dados["tempo_atendimento"];
|
||
|
$apelido = $dados["apelido"];
|
||
|
$nome = $dados["nome"];
|
||
|
$ramal = $dados["ramal"];
|
||
|
$chamadasAtendidas = $dados["chamadas_atendidas"];
|
||
|
$chamadasOriginadas = $dados["chamadas_originadas"];
|
||
|
$tempoLogin = $dados["tempo_login"];
|
||
|
$tempoPausa = $dados["tempo_pausa"];
|
||
|
$tempoAcw = $dados["pos_atendimento"];
|
||
|
$tempoLivre = $tempoLogin - ($tempoAtendimento + $tempoPausa + $tempoAcw);
|
||
|
$horaLogin = $dados["login"];
|
||
|
$numPausa = $dados["numpausa"];
|
||
|
|
||
|
$arDados = $_SESSION["SSdadosAgtGraphPie"];
|
||
|
$grafAgt = "<img src=\"index.php?idProg=126&tipoGraph=agt&tipoDac=$tpOper&dac=$nomeDac&matricula=$matricula\">";
|
||
|
$grafDac = "<img src=\"index.php?idProg=126&tipoGraph=dacAtu&dac=$idDac&tipoDac=$tpOper\">";
|
||
|
|
||
|
$smarty->assign('nomeDac', $nomeDac);
|
||
|
$smarty->assign('matricula', $matricula);
|
||
|
$smarty->assign("apelido", $apelido);
|
||
|
$smarty->assign("nome", $nome);
|
||
|
$smarty->assign("ramal", $ramal);
|
||
|
$smarty->assign("chamadasAtendidas", $chamadasAtendidas);
|
||
|
$smarty->assign("chamadasOriginadas", $chamadasOriginadas);
|
||
|
$smarty->assign("tma", !($chamadasAtendidas + $chamadasOriginadas) ? SecondToStrTime(0) : SecondToStrTime(round($tempoAtendimento / ($chamadasAtendidas + $chamadasOriginadas), 0)));
|
||
|
$smarty->assign("login", $horaLogin);
|
||
|
$smarty->assign("tempoLogado", SecondToStrTime($tempoLogin));
|
||
|
$linkPausa = !$numPausa ? "" : sprintf("<a href=\"javaScript:NovaJanela('index.php?idProg=128&matricula=%s', 'agtRelMotPausa', '600', '500', 'scrollbars=YES');\" style=\"color:black;\"><span style=\"font-size:9px;\" >(detalhar)</span>%s</a>", $matricula, $numPausa);
|
||
|
$smarty->assign("numeroPausas", $linkPausa);
|
||
|
$smarty->assign("graficoAgente", $grafAgt);
|
||
|
$smarty->assign("graficoDac", $grafDac);
|
||
|
GetTemplate($smarty, $tpl);
|
||
|
}
|
||
|
|
||
|
function FetchDados($dbcon, $tipo, $dac, $matricula) {
|
||
|
$dados = GetDados($dbcon, $tipo, $dac, $matricula);
|
||
|
if (!$dados)
|
||
|
$dados = GetDados($dbcon, $tipo, $dac, $matricula, 1);
|
||
|
if ($tipo != 'agt') {
|
||
|
$numAgt = IsNull($dados["num_agente"], 1);
|
||
|
$tempoAtendimento = !$numAgt ? 0 : round(IsNull($dados["tempo_atendimento"], 0) / $numAgt, 0);
|
||
|
$chamadasOriginadas = !$numAgt ? 0 : $dados["chamadas_originadas"];
|
||
|
$chamadasAtendidas = !$numAgt ? 0 : round(IsNull($dados["chamadas_atendidas"] + $chamadasOriginadas, 0) / $numAgt, 0);
|
||
|
$tempoLogin = !$numAgt ? 0 : round(IsNull($dados["tempo_login"], 0) / $numAgt, 0);
|
||
|
$tempoPausa = !$numAgt ? 0 : round(IsNull($dados["tempo_pausa"], 0) / $numAgt, 0);
|
||
|
$tempoAcw = !$numAgt ? 0 : round(IsNull($dados["pos_atendimento"], 0) / $numAgt, 0);
|
||
|
} else {
|
||
|
$tempoAtendimento = IsNull($dados["tempo_atendimento"], 0);
|
||
|
$chamadasAtendidas = IsNull($dados["chamadas_atendidas"], 0);
|
||
|
$tempoLogin = IsNull($dados["tempo_login"], 0);
|
||
|
$tempoPausa = IsNull($dados["tempo_pausa"], 0);
|
||
|
$tempoAcw = IsNull($dados["pos_atendimento"], 0);
|
||
|
}
|
||
|
|
||
|
$tempoLivre = $tempoLogin - ($tempoAtendimento + $tempoPausa + $tempoAcw);
|
||
|
$tempoTotal = $tempoLivre + $tempoPausa + $tempoAcw + $tempoAtendimento;
|
||
|
|
||
|
$perc = round(!$tempoTotal ? 0 : ((($tempoLivre * 100 ) / $tempoTotal)), 0);
|
||
|
$legLivre = SecondToStrTime($tempoLivre); // . " $perc%%";
|
||
|
|
||
|
$perc = round(!$tempoTotal ? 0 : ((($tempoPausa * 100 ) / $tempoTotal)), 0);
|
||
|
$legPausa = SecondToStrTime($tempoPausa); // . " $perc%%";
|
||
|
|
||
|
$perc = round(!$tempoTotal ? 0 : ((($tempoAcw * 100 ) / $tempoTotal)), 0);
|
||
|
$legAcw = SecondToStrTime($tempoAcw); // . " $perc%%";
|
||
|
|
||
|
$perc = round(!$tempoTotal ? 0 : ((($tempoAtendimento * 100 ) / $tempoTotal)), 0);
|
||
|
$legAtend = SecondToStrTime($tempoAtendimento); // . " $perc%%";
|
||
|
|
||
|
/*
|
||
|
* $legLivre = round( (!$tempoTotal ? 0 : (($tempoLivre * 100 ) /$tempoTotal)) , 0 );
|
||
|
$legPausa = SecondToStrTime( round( (!$tempoTotal ? 0 : (($tempoPausa * 100 ) /$tempoTotal)) , 0 ));
|
||
|
$legAcw = SecondToStrTime( round( (!$tempoTotal ? 0 : (($tempoAcw * 100 ) /$tempoTotal)) , 0 ));
|
||
|
$legAtend = SecondToStrTime( round( (!$tempoTotal ? 0 : (($tempoAtendimento * 100 ) /$tempoTotal)) , 0 ));
|
||
|
|
||
|
*/
|
||
|
|
||
|
$_SESSION["SSlegendAgtGraphPie"] = array("Livre: " . $legLivre, "Pausa: " . $legPausa, "Pausa-Produtiva: " . $legAcw, "Ocupado: " . $legAtend);
|
||
|
|
||
|
$dadosInfoAgt = array($tempoLivre, $tempoPausa, $tempoAcw, $tempoAtendimento);
|
||
|
$_SESSION["SSdadosAgtGraphPie"] = $dadosInfoAgt;
|
||
|
return $dados;
|
||
|
}
|
||
|
|
||
|
function GetDados($dbcon, $tipo, $dac, $matricula, $tpQuery = '') {
|
||
|
$query = ($tipo == 'agt') ? GetQueryAgt($dac, $matricula, $tpQuery) : GetQueryDac($dac);
|
||
|
|
||
|
$result = pg_query($dbcon, $query);
|
||
|
//echo $query;
|
||
|
if ($result && pg_num_rows($result)) {
|
||
|
$numReg = pg_num_rows($result);
|
||
|
$dados = pg_fetch_array($result);
|
||
|
$dadosGraph = array();
|
||
|
|
||
|
if ($numReg) {
|
||
|
foreach ($dados as $key => $value) {
|
||
|
$dadosGraph[$key] = $value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$query = ($tipo == 'agt') ? GetQueryAgtComplemento($dados["id_dac"], $matricula) : GetQueryDacComplemento($dados["id_dac"]);
|
||
|
$result = pg_query($dbcon, $query);
|
||
|
|
||
|
if (pg_num_rows($result)) {
|
||
|
$numReg = pg_num_rows($result);
|
||
|
$dados = pg_fetch_array($result);
|
||
|
if ($numReg) {
|
||
|
foreach ($dados as $key => $value) {
|
||
|
$dadosGraph[$key] = $value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $dadosGraph;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function GetQueryAgt($dac, $matricula, $sql = '') {
|
||
|
if ($sql) {
|
||
|
$queryDac = "SELECT e.ramal,
|
||
|
e.matricula,
|
||
|
e.nome as apelido,
|
||
|
c.id as id_dac,
|
||
|
d.nome,
|
||
|
e.dac
|
||
|
FROM pbx_dacs c, pbx_usuarios d, pbx_supervisor_agentes e
|
||
|
where e.matricula = d.matricula
|
||
|
and c.nome = '$dac'
|
||
|
and d.matricula = '$matricula'
|
||
|
GROUP BY 1,2,3,4,5,6";
|
||
|
} else {
|
||
|
$queryCampanha = "SELECT e.ramal,
|
||
|
e.matricula,
|
||
|
e.nome as apelido,
|
||
|
c.cmp_id as id_dac,
|
||
|
d.nome,
|
||
|
e.dac,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN b.evento = 'CONNECT' THEN 1
|
||
|
ELSE 0
|
||
|
END) AS chamadas_atendidas,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN b.evento = 'COMPLETECALLER' OR b.evento = 'COMPLETEAGENT' OR b.evento = 'TRANSFER' THEN
|
||
|
CASE
|
||
|
WHEN b.evento = 'TRANSFER' THEN(case when(coalesce(param4,'') = '')then 0 else b.param4::int end)
|
||
|
ELSE (case when(coalesce(param2,'') = '')then 0 else b.param2::int end)
|
||
|
END
|
||
|
ELSE 0
|
||
|
END) AS tempo_atendimento
|
||
|
FROM pbx_supervisor_agentes e
|
||
|
inner join pbx_campanha c on e.dac = c.cmp_descricao
|
||
|
inner join pbx_usuarios d on e.matricula = d.matricula
|
||
|
left outer join ast_eventos_dacs b on c.cmp_descricao = b.fila and e.matricula = substring(b.agente, 7, 4) and cast(to_timestamp(uid1::int) as date) in (cast(e.tempo_login as date),cast(now() as date))
|
||
|
left outer join ast_bilhetes a on b.uid2 = a.accountcode and a.lastapp = 'ResetCDR' and a.dcontext = 'ext-campanha'
|
||
|
WHERE cast(tempo_login as date) = now()::date
|
||
|
and c.cmp_descricao = '$dac'
|
||
|
and d.matricula = '$matricula'
|
||
|
GROUP BY 1,2,3,4,5,6 ";
|
||
|
|
||
|
|
||
|
$queryDac = "SELECT e.ramal,
|
||
|
e.matricula,
|
||
|
e.nome as apelido,
|
||
|
c.id as id_dac,
|
||
|
d.nome,
|
||
|
e.dac,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN b.evento in('COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG') THEN 1
|
||
|
ELSE 0
|
||
|
END) AS chamadas_originadas,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN b.evento in('COMPLETECALLER', 'COMPLETEAGENT' , 'TRANSFER') THEN 1
|
||
|
ELSE 0
|
||
|
END) AS chamadas_atendidas,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN(b.evento in('COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG','COMPLETECALLER', 'COMPLETEAGENT' , 'TRANSFER'))THEN
|
||
|
CASE
|
||
|
WHEN b.evento in('TRANSFER', 'TRANSFERORIG')THEN (case when(coalesce(param4,'') = '')then 0 else b.param4::int end)
|
||
|
ELSE (case when(coalesce(param2,'') = '')then 0 else b.param2::int end)
|
||
|
END
|
||
|
ELSE 0
|
||
|
END) AS tempo_atendimento
|
||
|
FROM ast_bilhetes a, ast_eventos_dacs b, pbx_dacs c, pbx_usuarios d, pbx_supervisor_agentes e
|
||
|
where b.uid2 = a.uniqueid
|
||
|
AND c.nome = b.fila
|
||
|
and d.matricula = substring(b.agente,7,4)
|
||
|
and e.matricula = d.matricula
|
||
|
and a.calldate::date in(e.tempo_login::date, now()::date)
|
||
|
and c.nome = '$dac'
|
||
|
and d.matricula = '$matricula'
|
||
|
and lastapp <> 'Transferred Call'
|
||
|
GROUP BY 1,2,3,4,5,6";
|
||
|
}
|
||
|
if ($GLOBALS["tpOper"] == OPERACAO_ATIVO) {
|
||
|
return $queryCampanha;
|
||
|
}
|
||
|
//if(IsAdmin()) echo $queryDac;
|
||
|
return $queryDac;
|
||
|
}
|
||
|
|
||
|
function GetQueryAgtComplemento($dac, $matricula) {
|
||
|
return "select count(entrada_pausa) as numPausa,
|
||
|
min(a.login) as login,
|
||
|
sum( case when(a.pausa_produtiva = 1)then EXTRACT(epoch from (saida_pausa - entrada_pausa)) else 0 end ) as pos_atendimento,
|
||
|
sum( case when(a.pausa_produtiva = 0)then EXTRACT(epoch from (saida_pausa - entrada_pausa)) else 0 end ) as tempo_pausa,
|
||
|
sum(EXTRACT(epoch from (logoff - login))) as tempo_login
|
||
|
from pbx_eventos_agentes a
|
||
|
where coalesce(entrada_pausa, login)::date = now()::date
|
||
|
and matricula = '$matricula'
|
||
|
and id_dac = '$dac' ";
|
||
|
|
||
|
$queryDac = ""; // left outer join pbx_motivos_pausas b on b.id = a.id_motivo_pausa
|
||
|
|
||
|
if ($GLOBALS["tpOper"] == OPERACAO_ATIVO) {
|
||
|
return $queryCampanha;
|
||
|
}
|
||
|
|
||
|
return $queryDac;
|
||
|
}
|
||
|
|
||
|
function GetQueryDac($dac) {
|
||
|
$queryCampanha = "SELECT c.cmp_id as id_dac,
|
||
|
count(distinct d.matricula) as num_agente,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN b.evento = 'CONNECT' THEN 1
|
||
|
ELSE 0
|
||
|
END) AS chamadas_atendidas,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN b.evento = 'COMPLETECALLER' OR b.evento = 'COMPLETEAGENT' OR b.evento = 'TRANSFER' THEN
|
||
|
CASE
|
||
|
WHEN b.evento = 'TRANSFER' THEN (case when(coalesce(param4,'') = '')then 0 else b.param4::int end)
|
||
|
ELSE (case when(coalesce(param2,'') = '')then 0 else b.param2::int end)
|
||
|
END
|
||
|
ELSE 0
|
||
|
END) AS tempo_atendimento
|
||
|
|
||
|
FROM pbx_supervisor_agentes e
|
||
|
inner join pbx_campanha c on e.dac = c.cmp_descricao
|
||
|
inner join pbx_usuarios d on e.matricula = d.matricula
|
||
|
left outer join ast_eventos_dacs b on c.cmp_descricao = b.fila and e.matricula = substring(b.agente, 7, 4) and cast(to_timestamp(uid1::int) as date) in (cast(e.tempo_login as date),cast(now() as date))
|
||
|
left outer join ast_bilhetes a on b.uid2 = a.accountcode and a.lastapp = 'ResetCDR' and a.dcontext = 'ext-campanha'
|
||
|
WHERE cast(tempo_login as date) = now()::date
|
||
|
and c.cmp_id = '$dac'
|
||
|
group by 1";
|
||
|
|
||
|
$queryDac = "SELECT c.id as id_dac,
|
||
|
count(distinct d.matricula) as num_agente,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN (b.evento in('COMPLETECALLER', 'COMPLETEAGENT' , 'TRANSFER','COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG'))THEN 1
|
||
|
ELSE 0
|
||
|
END) AS chamadas_atendidas,
|
||
|
sum(
|
||
|
CASE
|
||
|
WHEN(b.evento in('COMPLETECALLER', 'COMPLETEAGENT' , 'TRANSFER','COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG'))THEN
|
||
|
CASE
|
||
|
WHEN( b.evento in('TRANSFER', 'TRANSFERORIG'))THEN( case when(coalesce(param4,'') = '')then 0 else b.param4::int end )ELSE(case when(coalesce(param2,'') = '')then 0 else b.param2::int end)
|
||
|
END
|
||
|
ELSE 0
|
||
|
END) AS tempo_atendimento
|
||
|
|
||
|
FROM pbx_supervisor_agentes e
|
||
|
inner join pbx_dacs c on e.dac = c.nome
|
||
|
inner join pbx_usuarios d on e.matricula = d.matricula
|
||
|
left outer join ast_eventos_dacs b on c.nome = b.fila and e.matricula = substring(b.agente, 7, 4) and cast(to_timestamp(uid1::int) as date) in (cast(e.tempo_login as date),cast(now() as date))
|
||
|
left outer join ast_bilhetes a on b.uid2 = a.accountcode and a.lastapp = 'ResetCDR'
|
||
|
WHERE c.id = '$dac'
|
||
|
group by 1";
|
||
|
|
||
|
if ($GLOBALS["tpOper"] == OPERACAO_ATIVO) {
|
||
|
return $queryCampanha;
|
||
|
}
|
||
|
|
||
|
return $queryDac;
|
||
|
}
|
||
|
|
||
|
function GetQueryDacComplemento($dac) {
|
||
|
return "select count(distinct matricula) as num_agente,
|
||
|
count(entrada_pausa) as numPausa,
|
||
|
min(a.login) as login,
|
||
|
sum( case when(a.pausa_produtiva = 1)then EXTRACT(epoch from (saida_pausa - entrada_pausa)) else 0 end ) as pos_atendimento,
|
||
|
sum( case when(a.pausa_produtiva = 0)then EXTRACT(epoch from (saida_pausa - entrada_pausa)) else 0 end ) as tempo_pausa,
|
||
|
sum(EXTRACT(epoch from (logoff - login))) as tempo_login
|
||
|
from pbx_eventos_agentes a
|
||
|
where coalesce(entrada_pausa, login)::date = now()::date
|
||
|
and coalesce(entrada_pausa, login)::date = now()::date and id_dac = '$dac'";
|
||
|
}
|
||
|
|
||
|
?>
|