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 = ""; $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('', $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; }