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.

230 lines
10 KiB

<?php
// *************************************************************************
// * *
// * Relat<EFBFBD>rio Resumo Geral DAC *
// * Autor *
// * Lucas Awade *
// * *
// *************************************************************************
/*
Defini<EFBFBD><EFBFBD>es do Projeto
Nome: resumoGeralDac
Data in<EFBFBD>cio: 09/01/2019
Equipe: Amarildo Pereira
Descri<EFBFBD><EFBFBD>o:
O relat<EFBFBD>rio tem a finalidade de apresentar todas as chamadas pelo seu quan
titativo de abandonadas, atendidas e originadas, al<EFBFBD>m de apresentar desse
geral as chamadas que tem retorno, sem retorno, entrada e saida, tudo com
base nas liga<EFBFBD><EFBFBD>es realizada no periodo informado.
Tabela(s):
-> pbx_bilhetes
-> pbx_eventos_dacs
-> pbx_tipo_ligacao
-> pbx_abandonadas_semretorno
-> pbx_dacs
Calculos:
-> Abandonadas, atendidas e Originas = S<EFBFBD>o relacionadas a quantidade de
chamadas.
-> Transferidas = Relacionada a quantidade de chamadas atendidas.
-> Com retorno e sem retorno = Relacionada a quantidade de chamadas abando
nadas.
-> Entradas e saidas = Relacionada a quantidades de chamadas totais. Saben
do que n<EFBFBD>o contabiliza as chamadas internas sendo a soma menor que 100%.
Tipo de Evento tratados:
-> (COMPLETEAGENT,COMPLETECALLER,TRANSFER) para chamadas ATENDIDAS;
-> (COMPLETEAGENT,COMPLETECALLER,TRANSFERORIG) para chamadas ORIGINADAS;
-> ENTERQUEUE para chamdas OFERECIDAS;
-> ABANDON para chamdas ABANDONADAS;
OBS: Esse relat<EFBFBD>rio <EFBFBD> foi realizado para CLICK TELECOM de um pedido de via
bilidade;
// ***********************************************************************
// * Copyright (c) 2018, Simples IP *
// ***********************************************************************
*/
require("jpgraph/jpgraph.php");
require("jpgraph/jpgraph_bar.php");
require("jpgraph/jpgraph_line.php");
$listaDacs = isset($_REQUEST["listaDacs"]) ? $_REQUEST["listaDacs"] : GetIdDacPadrao($dbcon, GetIdUser());
$dataIni = isset($_REQUEST["dataIni"]) ? $_REQUEST["dataIni"] : date('d/m/Y') . " 00:00";
$dataFim = isset($_REQUEST["dataFim"]) ? $_REQUEST["dataFim"] : date('d/m/Y') . " 23:59";
$cssBlock = "<style>
@media print {
.headSite, #rodapeSite, .filtro {
display: none;
}
}
</style>";
$linkGraph = '';
$printGraph = isset($_REQUEST['printGraph']) ? 1 : 0;
if ($printGraph) {
ob_clean();
$data = GetQuery($listaDacs, $dataIni, $dataFim);
$arIab[] = $data['abandonadas'];
$arIa[] = $data['atendidas'];
$arIori[] = $data['originadas'];
$arItrans[] = $data['transferidas'];
$arIcret[] = $data['com_retorno'];
$arIsret[] = $data['sem_retorno'];
$arIent[] = $data['tpl_entrada'];
$arIsai[] = $data['tpl_saida'];
$graph = new Graph(1080, 650);
$graph->SetScale("intint");
$graph->SetShadow();
$graph->SetMargin(80, 20, 60, 40);
$graph->title->Set(sprintf("Resumo Geral DAC De: %s At<EFBFBD>: %s \nDac: %s Emitido: %s Usu<EFBFBD>rio: %s", $dataIni, $dataFim, GetNomeDac($listaDacs), date("d/m/Y H:i:s"), GetLogin()));
$graph->xaxis->SetTickLabels(0);
$graph->legend->Pos(0.35, 0.85);
$graph->legend->SetColumns(3);
$graph->legend->SetFrameWeight(1);
$labelX = sprintf('Totais: CHAMADAS[ %s ] DIA(s)[ %s ] ABANDONADA(s)[ %s ] ATENDIDAS[ %s ] ORIGINADAS[ %s ] TRANSFERIDAS[ %s ] C/RET[ %s ] S/RET[ %s ] ENTRADA[ %s ] SAIDA[ %s ] ' , $data['chamadas'], $data['dias_media'],$data['abandonadas'],$data['atendidas'],$data['originadas'],$data['transferidas'],$data['com_retorno'],$data['sem_retorno'],$data['tpl_entrada'],$data['tpl_saida']);
$graph->xaxis->title->Set($labelX);
$graph->xaxis->title->SetMargin(15);
$graph->yaxis->title->Set('Percentual de Chamadas');
$graph->yaxis->title->SetMargin(5);
$iabPlot = new BarPlot($arIab);
$iabPlot->SetLegend(sprintf("Abandonadas (%s%%)",round(($data['abandonadas']/$data['chamadas']) * 100)));
$iabPlot->setfillcolor('red');
$iaPlot = new BarPlot($arIa);
$iaPlot->SetLegend(sprintf("Atendidas (%s%%)",round(($data['atendidas'] / $data['chamadas']) * 100)));
$oriPlot = new BarPlot($arIori);
$oriPlot->SetLegend(sprintf("Originadas (%s%%)",round(($data['originadas'] / $data['chamadas']) * 100)));
$transPlot = new BarPlot($arItrans);
$transPlot->SetLegend(sprintf("Transferidas (%s%%)",round(($data['transferidas'] / $data['atendidas']) * 100)));
$cretPlot = new BarPlot($arIcret);
$cretPlot->SetLegend(sprintf("Com Retorno (%s%%)",round(($data['com_retorno'] / $data['abandonadas']) * 100)));
$sretPlot = new BarPlot($arIsret);
$sretPlot->SetLegend(sprintf("Sem Retorno (%s%%)",round(($data['sem_retorno'] / $data['abandonadas']) * 100)));
$entPlot = new BarPlot($arIent);
$entPlot->SetLegend(sprintf("Entradas (%s%%)",round(($data['tpl_entrada'] / $data['chamadas']) * 100)));
$saiPlot = new BarPlot($arIsai);
$saiPlot->SetLegend(sprintf("Saidas (%s%%)",round(($data['tpl_saida'] / $data['chamadas']) * 100)));
$gpBarPlot = new GroupBarPlot(array($iabPlot, $iaPlot, $oriPlot, $transPlot, $cretPlot, $sretPlot, $entPlot, $saiPlot));
$gpBarPlot->SetWidth(1);
$graph->Add($gpBarPlot);
$graph->img->SetAntiAliasing(false);
$iabPlot->value->show();
$iabPlot->value->setformat("%d");
$iabPlot->value->SetAngle(360);
$iaPlot->value->show();
$iaPlot->value->setformat("%d");
$iaPlot->value->SetAngle(360);
$oriPlot->value->show();
$oriPlot->value->setformat("%d");
$oriPlot->value->SetAngle(360);
$transPlot->value->show();
$transPlot->value->setformat("%d");
$transPlot->value->SetAngle(360);
$cretPlot->value->show();
$cretPlot->value->setformat("%d");
$cretPlot->value->SetAngle(360);
$sretPlot->value->show();
$sretPlot->value->setformat("%d");
$sretPlot->value->SetAngle(360);
$entPlot->value->show();
$entPlot->value->setformat("%d");
$entPlot->value->SetAngle(360);
$saiPlot->value->show();
$saiPlot->value->setformat("%d");
$saiPlot->value->SetAngle(360);
$graph->Stroke();
exit();
} else if (IsPostBack()) {
if (!$dataIni) {
$jsStartup[] = "alert('Data inicial inv<EFBFBD>lida!');";
} else if (!$dataFim) {
$jsStartup[] = "alert('Data final inv<EFBFBD>lida!');";
} else {
$linkGraph = sprintf('<img id="relGrafico" src="index.php?idProg=308&dataIni=%s&dataFim=%s&listaDacs=%s&printGraph=1" border="0">', $dataIni, $dataFim, $listaDacs);
}
}
$dacs = GetDac($dbcon, $listaDacs, '', 1);
//$smarty->assign('imp', $i);
$smarty->assign('dacs', $dacs);
$smarty->assign('dataIni', $dataIni);
$smarty->assign('dataFim', $dataFim);
$smarty->assign('erro', $erro);
$smarty->assign('linkGraph', $linkGraph);
GetTemplate($smarty, 'analise/resumoGeralDAC.tpl');
function GetQuery($dac, $dataIni, $dataFim) {
$dataLogin = FormatDtMssql(substr($dataIni, 0, 10));
$dataLogout = FormatDtMssql(substr($dataFim, 0, 10));
$dataIni = strlen($dataIni) == 10 ? FormatDtMssql($dataIni) . " 00:00" : FormatDtMssql(substr($dataIni, 0, 10)) . substr($dataIni, 10, 16);
$dataFim = strlen($dataFim) == 10 ? FormatDtMssql($dataFim) . " 23:59" : FormatDtMssql(substr($dataFim, 0, 10)) . substr($dataFim, 10, 16);
$query = "SELECT c.id, b.fila,
SUM (1) AS CHAMADAS,
SUM (CASE WHEN EVENTO = 'ABANDON' THEN 1 ELSE 0 END) AS ABANDONADAS,
SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER','TRANSFER') THEN 1 ELSE 0 END) AS ATENDIDAS,
SUM (CASE WHEN EVENTO IN ('COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG') THEN 1 ELSE 0 END) AS ORIGINADAS,
SUM (CASE WHEN EVENTO IN ('TRANSFER') THEN 1 ELSE 0 END) AS TRANSFERIDAS,
SUM (CASE WHEN (EVENTO = 'ABANDON' AND abdsr_data_hora_retorno IS NOT NULL)THEN 1 ELSE 0 END) AS COM_RETORNO,
SUM (CASE WHEN (EVENTO = 'ABANDON' AND abdsr_data_hora_retorno IS NULL)THEN 1 ELSE 0 END) AS SEM_RETORNO,
SUM (CASE WHEN (tplg_tipo = 2)THEN 1 ELSE 0 END) AS TPL_ENTRADA,
SUM (CASE WHEN (tplg_tipo = 3)THEN 1 ELSE 0 END) AS TPL_SAIDA,
(SELECT COUNT(DISTINCT login::DATE) FROM pbx_eventos_agentes WHERE id_dac = '$dac' AND login::DATE >= '$dataLogin' AND login::DATE <= '$dataLogout') AS dias_media
FROM pbx_bilhetes a
INNER JOIN pbx_eventos_dacs b ON b.uid2 = a.uniqueid
INNER JOIN pbx_dacs c ON c.nome = b.fila
LEFT JOIN pbx_abandonadas_semretorno d ON a.uniqueid = d.abdsr_uniqueid
INNER JOIN pbx_tipo_ligacao e ON a.tipo_chamada = e.tplg_codigo
WHERE a.calldate::TIMESTAMP >= '$dataIni'
AND a.calldate::TIMESTAMP <= '$dataFim'
AND c.id = '$dac'
AND a.lastapp <> 'Transferred Call'
AND b.evento IN('ABANDON','COMPLETAAGENT','COMPLETACALLER','COMPLETEAGENT','COMPLETECALLER','TRANSFER')
AND 1 = CASE WHEN(b.evento = 'ABANDON')THEN (CASE WHEN(NOT EXISTS(SELECT '' FROM ast_eventos_dacs WHERE uid2 = b.uid2 AND evento = 'TRANSBORDANDO' AND fila = b.fila))THEN 1 ELSE 0 END) ELSE 1 END
GROUP BY 1,2
ORDER BY 3";
$result = pg_query($query);
$resp = pg_fetch_assoc($result);
if (pg_last_error()) {
throw new Exception('N<EFBFBD>o foi possivel realizar a consulta!');
}
return $resp;
}