Data Inicial */ $dia = $tp == 1 ? '01' : GetLastDayofMonth($ano, $mes); return sprintf("%s-%s-%s", $ano, $mes, $dia); } function GetDacsWkf($conn, $restDac, $emailId, $dataEnvio, $tpEnvio) { global $debug; $dataInicial = $tpEnvio == ENVIO_DIARIO ? $dataEnvio : GetDataEnvioMensal($dataEnvio, 1); $dataFinal = $tpEnvio == ENVIO_DIARIO ? $dataEnvio : GetDataEnvioMensal($dataEnvio, 2); $query = " select distinct x.id, x.nome from pbx_dacs x where exists( select '' from pbx_bilhetes a inner join pbx_eventos_dacs b on b.uid2 = a.uniqueid where a.calldate::date >= '$dataInicial' and a.calldate::date <= '$dataFinal' and b.fila = x.nome and b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER','COMPLETAAGENT','COMPLETACALLER','ENTERQUEUE','TRANSFER') )"; $query .= $restDac ? "and exists(select * from pbx_workflow_emails_dacs where nome_dac = x.nome and wkf_email_id = '$emailId') order by 1" : "order by 1"; if ($debug == 9) { PreparaLog('GetDacsWkf', $query, false); } $result = pg_query($conn, $query); if (!pg_num_rows($result)) return false; $dacs = array(); while ($dados = pg_fetch_array($result)) { $dacs[] = $dados; } return $dacs; } function GetGrafico($conn, $dacInfo, $dataEnvio, $diario) { $Img = &$GLOBALS["embedImg"]; $templeteContent = file_get_contents("/var/lib/asterisk/scripts/workflow/workflowConteudoDados.html"); $dac = $dacInfo["id"]; $diario = ($diario == ENVIO_DIARIO); $dataInicial = $diario ? $dataEnvio : GetDataEnvioMensal($dataEnvio, 1); $dataFinal = $diario ? $dataEnvio : GetDataEnvioMensal($dataEnvio, 2); $dacGraph = sprintf('%s_%s.jpg', $dacInfo["nome"], soNumero($dataEnvio)); $dacGraphCid = sprintf('%s_%s', $dacInfo["nome"], soNumero($dataEnvio)); $Img[$dacGraphCid] = $dacGraph; if (file_exists($dacGraph)) { $content = str_replace("{GRAFICO}", $dacGraphCid, $templeteContent); return $content; } $mediaAlt = $diario ? "" : ",(select count(distinct a.calldate::date) from pbx_bilhetes a, pbx_eventos_dacs b, pbx_dacs c where b.uid2 = a.uniqueid and c.nome = b.fila and a.calldate::date >= '$dataInicial' and a.calldate::date <= '$dataFinal' and c.id = '$dac' ) as media_alt"; $query = " select c.id, b.fila, date_part('hour', a.calldate) as hora, SUM (CASE WHEN EVENTO = 'ENTERQUEUE' THEN 1 ELSE 0 END) AS OFERECIDAS, SUM (CASE WHEN EVENTO = 'ABANDON' THEN 1 ELSE 0 END) AS ABANDONADAS, SUM (CASE WHEN (abdsr_data_retorno IS NOT NULL AND evento IN ('ABANDON')) THEN 1 ELSE 0 END) AS ABD_RET, 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 ('CONNECT') AND strtoint(param1) > '3' THEN 1 ELSE 0 END) AS ESPERA, SUM (CASE WHEN EVENTO IN ('CONNECT') AND strtoint(param1) > '1' THEN strtoint(param1) ELSE 0 END) AS TEMPO_ESPERA, SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER','TRANSFER') AND strtoint(param2,0) > 1 THEN strtoint(param2,0) ELSE 0 END) AS TEMPO_ATENDIMENTO, SUM (CASE WHEN EVENTO IN ('COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG') AND strtoint(param2,0) > 1 THEN strtoint(param2,0) ELSE 0 END) AS TEMPO_ORIGINADA, SUM (CASE WHEN( (EVENTO = 'ABANDON') ) THEN strtoint(param3,0) ELSE 0 END) AS TEMPO_ABANDONO, SUM (CASE WHEN EVENTO IN ('TRANSFER') THEN 1 ELSE 0 END) AS TRANSFERIDAS, (select count(distinct login::date) from pbx_eventos_agentes where id_dac = '$dac' and login::date >= '$dataInicial' and login::date <= '$dataFinal' ) as dias_media $mediaAlt 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 d.abdsr_uniqueid = a.uniqueid where a.calldate::date >= '$dataInicial' and a.calldate::date <= '$dataFinal' and c.id = '$dac' and a.lastapp <> 'Transferred Call' and b.evento in ('ABANDON','COMPLETAAGENT','COMPLETACALLER','COMPLETEAGENT','COMPLETECALLER','ENTERQUEUE','CONNECT','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 c.id, b.fila, date_part('hour', a.calldate) order by 3"; $arOferecida = GetArHour(); $arOriginada = GetArHour(); $arAtendida = GetArHour(); $arAbandonadas = GetArHour(); $arEstera = GetArHour(); $arTransfer = GetArHour(); $arLabel = GetArHour(true); $somaEspera = 0; $somaEsperaTempo = 0; $somaAtendida = 0; $somaAtendidaTempo = 0; $somaAbandonada = 0; $somaAbandonadaTempo = 0; $somaTransferidas = 0; $somaOriginada = 0; $somaOriginadaTempo = 0; $arAbandonadasRet = 0; $dac = ""; $result = pg_query($conn, $query); while ($dados = pg_fetch_array($result)) { // dias_atendidas dias_abandon dias_transfer dias_oferecidas $media = $diario ? 0 : ($dados["dias_media"] ? $dados["dias_media"] : $dados["media_alt"]); $hour = $dados["hora"]; $arOferecida[$hour] = ($diario || !$media) ? $dados["oferecidas"] : round($dados["oferecidas"] / $media); $arOriginada[$hour] = ($diario || !$media) ? $dados["originadas"] : round($dados["originadas"] / $media); $arAtendida[$hour] = ($diario || !$media) ? $dados["atendidas"] : round($dados["atendidas"] / $media); $arAbandonadas[$hour] = ($diario || !$media) ? $dados["abandonadas"] : round($dados["abandonadas"] / $media); $arAbandonadasRet[$hour] = ($diario || !$media) ? $dados["abd_ret"] : round($dados["abd_ret"] / $media); $arEstera[$hour] = ($diario || !$media) ? $dados["espera"] : round($dados["espera"] / $media); $arTransfer[$hour] = ($diario || !$media) ? $dados["transferidas"] : round($dados["transferidas"] / $media); $dac = $dados["fila"]; $somaTransferidas += $dados["transferidas"]; $somaEspera += $dados["espera"]; $somaEsperaTempo += $dados["tempo_espera"]; $somaAtendida += $dados["atendidas"]; $somaAtendidaTempo += $dados["tempo_atendimento"]; $somaAbandonada += $dados["abandonadas"]; $somaAbandonadaRet += $dados["abd_ret"]; $somaAbandonadaTempo += $dados["tempo_abandono"]; $somaOriginada += $dados["originadas"]; $somaOriginadaTempo += $dados["tempo_originada"]; } $graph = new Graph(960, 600); $graph->SetScale("textint"); $graph->SetShadow(); $graph->SetMargin(40, 20, 40, 40); $graph->title->Set($dac . ($diario ? " - Data: $dataInicial" : " - De: $dataInicial Até: $dataFinal")); $graph->xaxis->SetTickLabels($arLabel); $graph->legend->Pos(0.2, 0.90); $graph->legend->SetColumns(5); $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: ORG[%s] ATD[%s] ESP[%s] TRF[%s] ABD[%s] AB.RET[%s] Médias: TMO[%s] TMA[%s] TME[%s] TMB[%s] ', $somaOriginada, $somaAtendida, $somaEspera, $somaTransferidas, $somaAbandonada, $somaAbandonadaRet, $mediaOriginada, $mediaAtendimento, $mediaEspera, $mediaAbandono); $graph->xaxis->title->Set($labelX); $graph->yaxis->title->Set('Chamadas/h'); $barPlot1 = new BarPlot($arOriginada); $barPlot2 = new BarPlot($arAtendida); $barPlot3 = new BarPlot($arAbandonadas); $barPlot4 = new BarPlot($arEstera); $barPlot5 = new BarPlot($arTransfer); $gpBarPlot = new GroupBarPlot(array($barPlot1, $barPlot2, $barPlot4, $barPlot5, $barPlot3)); $gpBarPlot->SetWidth(0.9); $graph->Add($gpBarPlot); $barPlot1->SetLegend("Originadas(ORG/TMO)"); $barPlot2->SetLegend("Atendidas(ATD/TMA)"); $barPlot3->SetLegend("Abandonadas(ABD/TMB)"); $barPlot4->SetLegend("Espera(ESP/TME)"); $barPlot5->SetLegend("Transfer.(TRF)"); $barPlot1->SetFillColor("springgreen3"); $barPlot2->SetFillColor("dodgerblue"); $barPlot3->SetFillColor("red"); $barPlot4->SetFillColor("yellow1"); $barPlot5->SetFillColor("orange"); $barPlot1->value->Show(); $barPlot1->value->SetFormat("%d"); $barPlot1->value->SetColor("springgreen3"); $barPlot2->value->Show(); $barPlot2->value->SetFormat("%d"); $barPlot2->value->SetColor("dodgerblue"); $barPlot3->value->Show(); $barPlot3->value->SetFormat("%d"); $barPlot3->value->SetColor("red"); $barPlot4->value->Show(); $barPlot4->value->SetFormat("%d"); $barPlot4->value->SetColor("yellow1"); $barPlot5->value->Show(); $barPlot5->value->SetFormat("%d"); $barPlot5->value->SetColor("orange"); $graph->Stroke($dacGraph); $content = str_replace("{GRAFICO}", $dacGraphCid, $templeteContent); return $content; } function GetMsg($conn, $dataEnvio, $dataDisplay, $restDac, $emailId, $tpEnvio) { $templeteEmail = file_get_contents("/var/lib/asterisk/scripts/workflow/workflowConteudo.html"); $content = ""; $dacs = GetDacsWkf($conn, $restDac, $emailId, $dataEnvio, $tpEnvio); $content = str_replace("{CONF_PRINCIPAL_WORKFLOW}", CONF_PRINCIPAL_WORKFLOW, $templeteEmail); $content = str_replace("{CONF_PARCEIRO_WORKFLOW}", CONF_PARCEIRO_WORKFLOW, $content); if ($dacs === false) { $display = $tpEnvio == ENVIO_DIARIO ? sprintf("DIARIO %s", FormataDBDataHora($dataEnvio)) : sprintf("MENSAL %s/%s", substr($dataEnvio, 0, 2), substr($dataEnvio, 2, 4)); $conteudo = 'Nenhum dado encontrado para a operação nesta data!'; $content = str_replace("{CONTEUDO}", $conteudo, $content); $content = str_replace("{DISPLAY}", $display, $content); return $content; } foreach ($dacs as $dac) { $idDac = $dac["id"]; $nomeDac = $dac["nome"]; $retGraf = GetGrafico($conn, $dac, $dataEnvio, $tpEnvio); $retClas = GetClassificacaoWkf($conn, $dac, $dataEnvio, $tpEnvio); $classifica .= str_replace("{CLASSIFICACAO}", $retClas, $retGraf); } $display = $tpEnvio == ENVIO_DIARIO ? sprintf("DIARIO %s", FormataDBDataHora($dataEnvio)) : sprintf("MENSAL %s/%s", substr($dataEnvio, 0, 2), substr($dataEnvio, 2, 4)); $content = str_replace("{CONTEUDO}", $classifica ,$content); $content = str_replace("{DISPLAY}", $display, $content); return $content; //if(GetDebug()){PreparaLog('GetMsg', $query, false);} } function GetClassificacaoWkf($dbcon, $dacInfo, $data, $tpEnvio) { $Html = &$GLOBALS["relHtml"]; $dac = $dacInfo["id"]; $dacNome = $dacInfo["nome"]; $arq = sprintf("%s_%s.htm", $dacNome, soNumero($data)); $relClas = ""; if (file_exists($arq)) { return file_get_contents($arq); } $table = file_get_contents("/var/lib/asterisk/scripts/workflow/workflowClassificacao.html"); $somaQtde = 0; $query = GetQueryClassificaWkf($data, $dac, $tpEnvio); $result = pg_query($dbcon, $query); $dadosBuff = array(); /* * Verifica se existe dados para o dac, caso a consulta não retorne dados * retorna mensagem padrão. */ if (!pg_num_rows($result)) { return "Não existe classificação de atentimento para a Fila: $dacNome!"; } while ($dados = pg_fetch_array($result)) { $dadosBuff[] = $dados; $somaQtde += (($dados["media"] <= 1) ? $dados["qtde"] : round($dados["qtde"] / $dados["media"])); } $dados = array(); $linhas = ""; foreach ($dadosBuff as $dados) { $clas = $dados["clas_descricao"]; $item = $dados["clit_descricao"]; $qtde = $dados["media"] <= 1 ? $dados["qtde"] : round($dados["qtde"] / $dados["media"]); $perc = round(!$somaQtde ? 0 : ($qtde * 100.0) / $somaQtde, 0); $linhas .= " $clas $item $perc% $qtde "; } $linhas .= "Total$somaQtde"; $relClas .= str_replace("{DADOS_CLASSIFICA}", $linhas, $table); /* * Grava o arquivo para não necessitar * refazer o processo para o próximo usuário */ $file = fopen($arq, 'w'); if ($file) { fwrite($file, $relClas); fclose($file); } /* * Arquivos a serem apagados no final da operação */ $Html[] = $arq; return $relClas; } function GetQueryClassificaWkf($dataEnvio, $dac, $tpEnvio) { $dataInicial = $tpEnvio == ENVIO_DIARIO ? $dataEnvio : GetDataEnvioMensal($dataEnvio, 1); $dataFinal = $tpEnvio == ENVIO_DIARIO ? $dataEnvio : GetDataEnvioMensal($dataEnvio, 2); $query = "select a.id_dac, e.nome, clas_descricao, clit_descricao, count(*) as qtde, (select count(distinct data_reg::date) from pbx_classifica_reg where id_dac = '$dac' and data_reg::date >= '$dataInicial' and data_reg::date <= '$dataFinal') as media from pbx_classifica_reg a, pbx_classifica_atendimento b, pbx_classifica_item c, pbx_bilhetes d, pbx_dacs e, pbx_eventos_dacs f where b.clas_id = a.clas_id and c.clit_id = a.clit_id and d.uniqueid = a.id_bilhetes and e.id = a.id_dac and d.lastapp <> 'Transferred Call' and a.id_dac = '$dac' and d.calldate::date >= '$dataInicial' and d.calldate::date <= '$dataFinal' and f.evento IN('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS') group by a.id_dac, e.nome, clas_descricao, clit_descricao order by 5 desc"; return $query; } function GetPhpVerision() { return soNumero(phpversion()); } ?>