@media print { .headSite, #rodapeSite, .filtro { display: none; } } "; $linkGraph = ''; $printGraph = isset($_REQUEST['printGraph']) ? 1 : 0; if ($printGraph) { ob_clean(); $query = GetQuery($listaDacs, $dataIni, $dataFim); $result = pg_query($query); $serv = array(); $arTotal = array(); $arOferecidas = array(); $arAtendidas = array(); $arAtd30 = array(); $arAbandonadas = array(); $arTransbordadas = array(); $arEspera = array(); $serv = array(); $arIab = array(0); $arNS = array(0); $arIa = array(0); $somaTotal = 0; $somaTotalAtd = 0; $somaTotalAbd = 0; $somaTotalTrb = 0; $somaTotalAtd30 = 0; $somaTotalEsp = 0; $somaTotalTrf = 0; $totalMedia = 0; $dac = ""; $start = 0; // 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)) { if (!$start++) { $arOferecidas = array(); $arIab = array(); $arNS = array(); $arIa = array(); } $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, 800); $graph->SetScale("intint"); $graph->SetShadow(); $graph->SetMargin(80, 20, 60, 40); $graph->title->Set(sprintf("Índices de Atendimento no Período 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($arLabel); $graph->legend->Pos(0.33, 0.84); $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('Percentual de Atendimento'); $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($nsPlot, $iaPlot, $iabPlot)); $gpBarPlot->SetWidth(0.8); $graph->Add($gpBarPlot); $graph->img->SetAntiAliasing(false); $nsPlot->value->Show(); $nsPlot->value->SetFormat("%d%%"); $nsPlot->value->SetAngle(45); $iabPlot->SetFillColor('red'); $iabPlot->value->Show(); $iabPlot->value->SetFormat("%d%%"); $iabPlot->value->SetAngle(45); $iaPlot->value->Show(); $iaPlot->value->SetFormat("%d%%"); $iaPlot->value->SetAngle(45); $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, $totalMedia); } // echo GetQuery($listaDacs, $dataIni, $dataFim); exit; } //carrega dacs $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('totalMedia', -1); $smarty->assign('linkGraph', $linkGraph); GetTemplate($smarty, 'analise/resumoOperacao.tpl'); function GetQuery($dac, $dataIni, $dataFim) { $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('hour', a.calldate) as hora ,SUM (CASE WHEN EVENTO in('ABANDON', 'COMPLETEAGENT','COMPLETECALLER','TRANSFER','TRANSBORDANDO') THEN 1 ELSE 0 END) AS OFERECIDAS ,SUM (CASE WHEN EVENTO = 'ABANDON' THEN 1 ELSE 0 END) AS ABANDONADAS ,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER','TRANSFER') AND SUBSTRING(AGENTE,1,5) = 'Agent' THEN 1 ELSE 0 END) as ATENDIDAS ,SUM (CASE WHEN EVENTO IN ('TRANSBORDANDO') THEN 1 ELSE 0 END) AS TRANSBORDADAS ,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER','TRANSFER') AND strtoint(param1) <= '30' AND SUBSTRING(AGENTE,1,5) = 'Agent' 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_dacs c where b.uid2 = a.uniqueid and c.nome = b.fila and data_bilhete >= %s and data_bilhete <= %s %s and b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER', 'CONNECT','ENTERQUEUE','TRANSFER', 'TRANSBORDANDO', 'TRANSBORDADO') and a.lastapp <> 'Transferred Call' group by 1,2; select hora, ((cast(%s as date) - cast(%s as date)) + 1) as dias, 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 hora order by 1; "; //$query = sprintf($query, QuotedStr($dataIni), QuotedStr($dataFim), QuotedStr($dataFim), QuotedStr($dataIni)); return sprintf($query, QuotedStr($dataIni), QuotedStr($dataFim), ($dac ? sprintf(' and c.id = %s', QuotedStr($dac)) : ''), QuotedStr($dataFim), QuotedStr($dataIni)); }