@media print { .headSite, #rodapeSite, .filtro { display: none; } } "; $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ível de serviço: * É calculado pela relação entre chamadas atendidas até 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: * É o percentual de chamadas que foram atendidas sem ficar em espera em realaçã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í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é: %s\nDac: %s Emitido: %s Usuário: %s", ($totalMedia ? "Média no Período" : "Totais Acumulados no Perí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íodo: [%s] ATD[%s] ABD[%s] TRB[%s] Mé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ível de Serviço"); $iabPlot = new BarPlot($arIab); $iabPlot->SetLegend("Índice de Abandono"); $iaPlot = new BarPlot($arIa); $iaPlot->SetLegend("Í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álida!');"; } else if (!is_date($dataFim)) { $jsStartup[] = "alert('Data final inválida!');"; } else { $linkGraph = sprintf('', $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; }