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.
230 lines
10 KiB
230 lines
10 KiB
<?php |
|
|
|
// ************************************************************************* |
|
// * * |
|
// * Relatório Resumo Geral DAC * |
|
// * Autor * |
|
// * Lucas Awade * |
|
// * * |
|
// ************************************************************************* |
|
/* |
|
Definições do Projeto |
|
Nome: resumoGeralDac |
|
Data início: 09/01/2019 |
|
Equipe: Amarildo Pereira |
|
Descrição: |
|
O relatório tem a finalidade de apresentar todas as chamadas pelo seu quan |
|
titativo de abandonadas, atendidas e originadas, além de apresentar desse |
|
geral as chamadas que tem retorno, sem retorno, entrada e saida, tudo com |
|
base nas ligaçõ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ã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ã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ório é 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é: %s \nDac: %s Emitido: %s Usuá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álida!');"; |
|
} else if (!$dataFim) { |
|
$jsStartup[] = "alert('Data final invá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ão foi possivel realizar a consulta!'); |
|
} |
|
|
|
return $resp; |
|
} |
|
|