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

260 lines
10 KiB

<?php
require("jpgraph/jpgraph.php");
require("jpgraph/jpgraph_bar.php");
require("jpgraph/jpgraph_line.php");
//variaveis para manter o estado
$listaDacs = isset($_REQUEST["listaDacs"]) ? $_REQUEST["listaDacs"] : GetIdDacPadrao($dbcon, GetIdUser());
$dataIni = isset($_REQUEST["dataIni"]) ? $_REQUEST["dataIni"] : date('d/m/Y');
$dataFim = isset($_REQUEST["dataFim"]) ? $_REQUEST["dataFim"] : date('d/m/Y');
$totalMedia = 0; //isset($_REQUEST["totalMedia"]) ? $_REQUEST["totalMedia"] : 1;
$listaServico = isset($_REQUEST["listaServico"]) ? $_REQUEST["listaServico"] : 0;
$ano = 2017;
$cssBlock = "<style>
@media print {
.headSite, #rodapeSite, .filtro {
display: none;
}
}
</style>";
$linkGraph = '';
$printGraph = isset($_REQUEST['printGraph']) ? 1 : 0;
if ($printGraph) {
ob_clean();
$query = GetQuery($ano, $listaDacs);
$result = pg_query($query);
$serv = array();
$arTotal = array();
$arOferecidas = array();
$arAtendidas = array();
$arAtd30 = array();
$arAbandonadas = array();
$arTransbordadas = array();
$arEspera = array();
$serv = array();
$arIab = array();
$arNS = array();
$arIa = array();
$somaTotal = 0;
$somaTotalAtd = 0;
$somaTotalAbd = 0;
$somaTotalTrb = 0;
$somaTotalAtd30 = 0;
$somaTotalEsp = 0;
$somaTotalTrf = 0;
$dac = "";
// oferecidas originadas abandonadas nao_atendidas nao_atendidas atendidas efetuadas transbordadas
// total_oferecidas total_originadas total_abandonadas total_nao_atendidas total_atendidas total_efetuadas total_transbordadas
while ($row = pg_fetch_array($result, null, PGSQL_ASSOC)) {
$serv[$row['serv_id']] = 0;
$arOferecidas[] = $totalMedia ? round($row['avg_oferecidas']) : $row['total_oferecidas'];
$arAtendidas[] = $totalMedia ? round($row['avg_atendidas']) : $row['total_atendidas'];
$arAbandonadas[] = $totalMedia ? round($row['avg_abandonadas']) : $row['total_abandonadas'];
$arTransbordadas[] = $totalMedia ? round($row['avg_transbordadas']) : $row['total_transbordadas'];
$arAtd30[] = $totalMedia ? round($row['avg_atd_30']) : $row['total_atd_30'];
$arEspera[] = $totalMedia ? round($row['avg_esp']) : $row['total_esp'];
$arTrf[$hora] = $totalMedia ? round($row['avg_trf']) : $row['total_trf'];
$oferTotal = $totalMedia ? round($row['avg_oferecidas']) : $row['total_oferecidas'];
/*
* Abandonadas total por oferecidas na fila.
*/
$abd = $totalMedia ? round($row['avg_abandonadas']) : $row['total_abandonadas'];
$atd30 = $totalMedia ? round($row['avg_atd_30']) : $row['total_atd_30'];
$esp = $totalMedia ? round($row['avg_esp']) : $row['total_esp'];
$atendida = $totalMedia ? round($row['avg_atendidas']) : $row['total_atendidas'];
$arIab[] = $oferTotal ? round(($abd / $oferTotal) * 100.0) : 0;
/*
* N<EFBFBD>vel de servi<EFBFBD>o:
* <EFBFBD> calculado pela rela<EFBFBD><EFBFBD>o entre chamadas atendidas at<EFBFBD> 30s pela soma total das
* chamadas atendidas no pa + o total de abandonadas.
* Atendidas-30 / (atendidas-pa + abandonadas) * 100.0;
*/
$atdPaAbd = $abd + $atendida;
$ns = $oferTotal > 0 ? round(($atd30 / $atdPaAbd) * 100.0) : 0;
$arNS[] = $ns;
/*
* Indice de Atendimento:
* <EFBFBD> o percentual de chamadas que foram atendidas sem ficar em espera em reala<EFBFBD><EFBFBD>o
* ao total de chamdas oferecidas na fila.
*/
$abdEspera = $esp + $abd;
$arIa[] = !$oferTotal ? 0 : (($oferTotal - $abdEspera) * 100.0) / $oferTotal;
//$arTrf[] = $totalMedia ? round($row['avg_trf']) : $row['total_trf'];
/*
* Totais do per<EFBFBD>odo.
*/
$somaTotal += $row['total_oferecidas'];
$somaTotalAtd += $row['total_atendidas'];
$somaTotalAbd += $row['total_abandonadas'];
$somaTotalTrb += $row['total_transbordadas'];
}
$arLabel = array_keys($serv);
$graph = new Graph(1080, 650);
$graph->SetScale("intint");
$graph->SetShadow();
$graph->SetMargin(80, 20, 60, 40);
$graph->title->Set(sprintf("%s De: %s At<EFBFBD>: %s\nDac: %s Emitido: %s Usu<EFBFBD>rio: %s", ($totalMedia ? "M<EFBFBD>dia no Per<EFBFBD>odo" : "Totais Acumulados no Per<EFBFBD>odo"), $dataIni, $dataFim, GetNomeDac($listaDacs), date("d/m/Y H:i:s"), GetLogin()));
$graph->xaxis->SetTickLabels($arLabel);
$graph->legend->Pos(0.21, 0.85);
$graph->legend->SetColumns(4);
$graph->legend->SetFrameWeight(1);
$mediaAtendimento = SecondToStrTime(!$somaAtendida ? 0 : round($somaAtendidaTempo / $somaAtendida));
$mediaOriginada = SecondToStrTime(!$somaOriginada ? 0 : round($somaOriginadaTempo / $somaOriginada));
$mediaEspera = SecondToStrTime(!$somaEspera ? 0 : round($somaEsperaTempo / $somaEspera));
$mediaAbandono = SecondToStrTime(!$somaAbandonada ? 0 : round($somaAbandonadaTempo / $somaAbandonada));
$labelX = sprintf('Totais Per<EFBFBD>odo: [%s] ATD[%s] ABD[%s] TRB[%s] M<EFBFBD>dias / %%: ATD[%s / %s%%] ABD[%s / %s%%] TRB[%s / %s%% ] ', $somaTotal, $somaTotalAtd, $somaTotalAbd, $somaTotalTrb, round($somaTotalAtd / $dias), round(($somaTotalAtd / $somaTotal) * 100.0), round($somaTotalAbd / $dias), round(($somaTotalAbd / $somaTotal) * 100.0), round($somaTotalTrb / $dias), round(($somaTotalTrb / $somaTotal) * 100.0)
);
$graph->xaxis->title->Set($labelX);
$graph->yaxis->title->Set('');
$oferPlot = new BarPlot($arOferecidas);
$oferPlot->SetLegend("Total");
$atdPlot = new BarPlot($arAtendidas);
$atdPlot->SetLegend("Atendidas(ATD)");
$atd30Plot = new BarPlot($arAtd30);
$atd30Plot->SetLegend("ATD30");
$abdPlot = new BarPlot($arAbandonadas);
$abdPlot->SetLegend("Abandonadas(ABD)");
$espPlot = new BarPlot($arEspera);
$espPlot->SetLegend("Espera(ESP)");
$trbPlot = new BarPlot($arTransbordadas);
$trbPlot->SetLegend("Transbordadas(TRB)");
$nsPlot = new BarPlot($arNS);
$nsPlot->SetLegend("N<EFBFBD>vel de Servi<EFBFBD>o");
$iabPlot = new BarPlot($arIab);
$iabPlot->SetLegend("<EFBFBD>ndice de Abandono");
$iaPlot = new BarPlot($arIa);
$iaPlot->SetLegend("<EFBFBD>ndice de Atendimento");
$gpBarPlot = new GroupBarPlot(array($oferPlot, $atdPlot, $abdPlot, $trbPlot));
$gpBarPlot->SetWidth(0.7);
$graph->Add($gpBarPlot);
$graph->img->SetAntiAliasing(false);
$oferPlot->SetFillColor('brown');
$oferPlot->value->Show();
$oferPlot->value->SetFormat("%d");
$atdPlot->SetFillColor('green');
$atdPlot->value->Show();
$atdPlot->value->SetFormat("%d");
$abdPlot->SetFillColor('red');
$abdPlot->value->Show();
$abdPlot->value->SetFormat("%d");
$trbPlot->SetFillColor('yellow');
$trbPlot->value->Show();
$trbPlot->value->SetFormat("%d");
$graph->Stroke();
exit;
} else if (IsPostBack()) {
if (!is_date($dataIni)) {
$jsStartup[] = "alert('Data inicial inv<EFBFBD>lida!');";
} else if (!is_date($dataFim)) {
$jsStartup[] = "alert('Data final inv<EFBFBD>lida!');";
} else {
$linkGraph = sprintf('<img id="relGrafico" src="index.php?idProg=290&dataIni=%s&dataFim=%s&listaDacs=%s&listaServico=%s&totalMedia=%s&printGraph=1" border="0">', $dataIni, $dataFim, $listaDacs, $listaServico, $totalMedia);
}
// echo GetQuery($ano, $listaDacs); exit;
}
$listaServico = GetIdentRota($dbcon, $listaServico);
//carrega dacs
$dacs = GetDac($dbcon, $listaDacs, '', 1);
$smarty->assign('imp', $i);
$smarty->assign('dacs', $dacs);
$smarty->assign('listaServico', $listaServico);
$smarty->assign('dataIni', $dataIni);
$smarty->assign('dataFim', $dataFim);
$smarty->assign('erro', $erro);
$smarty->assign('totalMedia', $totalMedia);
$smarty->assign('linkGraph', $linkGraph);
GetTemplate($smarty, 'analise/resumoOperacaoServico.tpl');
function GetQuery($ano, $dac) {
// $dataIni = FormatDtMssql($dataIni);
// $dataFim = FormatDtMssql($dataFim);
$query = "drop table if exists anl_operacao;
create temporary table anl_operacao as
select a.data_bilhete
,date_part('month', a.calldate) as mes
,c.serv_id
,sum( case when(b.evento in('ENTERQUEUE', 'CHAMANDO'))then 1 else 0 end) as OFERECIDAS
,sum( case when(b.evento in('ABANDON', 'BUSYS', 'NOANSWERS'))then 1 else 0 end) as ABANDONADAS
,sum( case when(b.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER', 'TRANSORIG', 'ATENDIDA') )then 1 else 0 end) as ATENDIDAS
,sum( case when(b.evento in('EXITWITHTIMEOUT', 'TRANSBORDANDO') )then 1 else 0 end) as TRANSBORDADAS
,sum( case when(b.evento in('COMPLETEAGENT','COMPLETECALLER','TRANSFER') and strtoint(param1) <= '30')then 1 else 0 end) AS ATD_30
,sum( case when(b.evento = 'TRANSFER')then 1 else 0 end) AS TRF
,sum( case when(b.evento = 'CONNECT' and strtoint(b.param1) > '3')then 1 else 0 end) AS ESP
from pbx_bilhetes a, pbx_eventos_dacs b, pbx_servicos_registra c, pbx_dacs d
where b.uid2 = a.uniqueid
and c.uniqueid = b.uid2
and d.nome = b.fila
and date_part('year', a.data_bilhete) >= %s
%s
and b.evento in ('CONNECT','CHAMANDO','ATENDIDA','BUSYS', 'NOANSWERS', 'ABANDON','COMPLETEAGENT','COMPLETECALLER', 'ENTERQUEUE', 'TRANSFER', 'EXITWITHTIMEOUT', 'TRANSBORDANDO')
and a.lastapp <> 'Transferred Call'
group by 1,2,3;
select serv_id,
sum(oferecidas) as total_oferecidas, round( avg(oferecidas), 2) as avg_oferecidas,
sum(abandonadas) as total_abandonadas, round( avg(abandonadas), 2) as avg_abandonadas,
sum(atendidas) as total_atendidas, round( avg(atendidas), 2) as avg_atendidas,
sum(transbordadas) as total_transbordadas, round( avg(transbordadas), 2) as avg_transbordadas,
sum(atd_30) AS total_atd_30, round( avg(atd_30), 2) as avg_atd_30,
sum(trf) AS total_trf, round( avg(trf), 2) as avg_trf,
sum(esp) AS total_esp, round( avg(esp), 2) as avg_esp
from anl_operacao group by serv_id order by 1; ";
//$query = sprintf($query, QuotedStr($dataIni), QuotedStr($dataFim), QuotedStr($dataFim), QuotedStr($dataIni));
return sprintf(
$query, QuotedStr($ano), ($dac ? sprintf(' and d.id = %s', QuotedStr($dac)) : '')
);
}
function __GetAr__($label = false) {
$ar = array();
$result = pg_query('select serv_id from pbx_servicos order by 1');
while ($row = pg_fetch_row($result)) {
if (!$label)
$ar[$row[0]] = 0;
else
$ar[] = $row[0];
}
return $ar;
}