<?php
include_once 'util/relatoriosBase.php';
class RelDesempenhoOperacao extends Relatorios {
private $___ano;
private $___mes;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
$this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0;
$this->___mes = isset($_POST['listaMes']) ? $_POST['listaMes'] : date('m');
$this->___ano = isset($_POST['listaAno']) ? $_POST['listaAno'] : date('Y');
}
public function ___ValidaForm() {
if (!IsPostBack())
return;
if ($this->GetIncDac() & & !StrToIntDef($this->___dac)) {
GeraExcept('Informe uma Fila!');
}
}
function ___FiltrosRelatorio() {
if ($this->___media != MEDIA_PRINT_GRID) {
/*
* Recupera os filtros da sess<EFBFBD> o do usu<EFBFBD> rio.
*/
list($this->___dac, $this->___ano, $this->___mes, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
if ($this->___media == MEDIA_PRINT_HTML) {
$fila = $this->GetIncDac() ? 'Fila: ' . GetDacDesc($this->GetDbCon(), $this->GetIdProg() . ' ') : '';
return sprintf("%sData Inicial: %s Data Final: %s Tipo: %s", $fila, $this->___ano, $this->___mes, ($this->___tipoRelatorio ? 'Anal<EFBFBD> tico' : 'Sint<EFBFBD> tico'));
}
$fltCsv = array();
if ($this->GetIncDac()) {
$fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac);
}
// $fltCsv[] = "Ano:" . $this->___ano;
//$fltCsv[] = "M<EFBFBD> s:" . $this->___mes;
$fltCsv[] = "Data Emissao:" . date('d/m/Y H:i:s');
$fltCsv[] = "Emitido Por:" . GetLogin();
return $fltCsv;
}
if ($this->GetIncDac()) {
$dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1);
}
$lkPrint = "";
if ($this->___dataCount) {
$prt = '< a href = "index.php?idProg=%s&media=%s&tipoRelatorio=%s" > < img src = "imgSite/%s" alt = "Clique aqui para imprimir!" width = "24" height = "24" border = "0" > < / a > ';
$prtHtml = "< a href = \"javaScript:NovaJanela('index.php?idProg=%s&media=%s&tipoRelatorio=%s', ' % s ' , ' 720 ' , ' 700 ' , ' scrollbars = YES');\" > < img src = \"imgSite/%s\" alt = \"Clique aqui para imprimir ! \ " width = \"24\" height = \"24\" border = \"0\" > < / a > ";
$lkPrint .= sprintf($prtHtml, $this->GetidProg(), MEDIA_PRINT_HTML, $this->___tipoRelatorio, substr(LimpaString(GetDispProgSel($this->GetIdProg())), 0, 20), 'print.gif');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_EXCEL, $this->___tipoRelatorio, 'prt-xls.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_PDF, $this->___tipoRelatorio, 'prt-pdf.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, $this->___tipoRelatorio, 'prt-csv.png');
}
$tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"';
/*
* Personalise esta fun<EFBFBD> <EFBFBD> o se necessitar de outras opera<EFBFBD> <EFBFBD> es de filtro.
*/
$filtro = '< table border = "0" cellspacing = "1" cellpadding = "1" > ';
/*
* Rotulos.
*/
$filtro .= '< tr > ';
$this->GetIncDac() ? $filtro .= '< td > Fila< / td > ' : '';
$filtro .= '< td > M<EFBFBD> s< / td > ';
$filtro .= '< td > Ano< / td > ';
$filtro .= '< td align = "center" valign = "middle" > < / td > ';
$filtro .= '< / tr > ';
/*
* Valores.
*/
$filtro .= '< tr > ';
$this->GetIncDac() ? $filtro .= sprintf('< td > %s< / td > ', $dacs) : '';
$filtro .= sprintf('< td > %s< / td > ', GetMes($this->___mes, '', 1));
$filtro .= sprintf('< td > %s< / td > ', GetAno($this->___ano, 1));
$filtro .= '< td > < input type = "submit" name = "btConsulta" id = "btConsulta" value = "Consultar" > < / td > ';
$filtro .= '< td > %s< / td > ';
$filtro .= '< / tr > ';
$filtro .= '< / table > ';
/*
* Guarda os filtros passados para recuperar na emiss<EFBFBD> o dos relat<EFBFBD> rios para impress<EFBFBD> o.
*/
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___ano, $this->___mes, $this->___tipoRelatorio);
return sprintf($filtro, $lkPrint);
}
protected function ___GetDadosDb() {
$ano = $this->___ano;
$mes = $this->___mes;
$iniMes = "$ano-$mes-01";
$fimMes = "$ano-$mes-" . GetLastDayofMonth($ano, $mes);
$dac = $this->___dac;
$query = "SELECT FILA, date_part('day',DATA) AS DATA
,OFERECIDAS
,ATENDIDAS_URA
,ABANDONADAS
,ATENDIDAS_FILA
,ATENDIDAS_PA
,ORIGINADAS_PA
,ATENDIDAS_30
,TRANSFERIDAS
,ESPERA
,round( CASE WHEN(ESPERA = 0)THEN 0 ELSE (TEMPO_ESPERA / ESPERA) END ) * INTERVAL '1 SECOND' AS TME
,round( CASE WHEN(ATENDIDAS_PA = 0)THEN 0 ELSE (TEMPO_ATENDIMENTO / ATENDIDAS_PA)END) * INTERVAL '1 SECOND' AS TMA
,round(CASE WHEN(ABANDONADAS = 0)THEN 0 ELSE (TEMPO_ABANDONO / ABANDONADAS) END) * INTERVAL '1 SECOND' AS TMAB
,(CASE WHEN((ATENDIDAS_PA::FLOAT + ABANDONADAS::FLOAT ) = 0)THEN 0 ELSE ATENDIDAS_30::FLOAT / (ATENDIDAS_PA::FLOAT + ABANDONADAS::FLOAT ) END * 100)::numeric(5,2) as INB
,(CASE WHEN(OFERECIDAS::FLOAT = 0)THEN 0 ELSE (ABANDONADAS::FLOAT / OFERECIDAS::FLOAT) END * 100)::numeric(5,2) as IAB
,TEMPO_ESPERA
,TEMPO_ATENDIMENTO
,TEMPO_ORIGINADAS
,TEMPO_ABANDONO
,TRANSBORDADA
,TRANSBORDANDO
FROM (
SELECT
FILA
,DATA
,SUM (CASE WHEN EVENTO in('ABANDON', 'COMPLETEAGENT','COMPLETECALLER','TRANSFER','TRANSBORDANDO') THEN 1 ELSE 0 END) AS OFERECIDAS
,SUM (CASE WHEN (EVENTO = 'ENTERQUEUE') AND (URA > 0) THEN 1 ELSE 0 END) AS ATENDIDAS_URA
,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_FILA
,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER','TRANSFER') AND SUBSTRING(AGENTE,1,5) = 'Agent' THEN 1 ELSE 0 END) AS ATENDIDAS_PA
,SUM (CASE WHEN EVENTO IN ('COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG','BUSYS','NOANSWERS') THEN 1 ELSE 0 END) AS ORIGINADAS_PA
,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER','TRANSFER') AND strtoint(param1) < = '30' AND SUBSTRING(AGENTE,1,5) = 'Agent' THEN 1 ELSE 0 END) AS ATENDIDAS_30
,SUM (CASE WHEN((EVENTO = 'TRANSFER') or (exists(select '' from pbx_bilhetes where data_bilhete = dados.data_bilhete and accountcode = dados.uniqueid and evento in('COMPLETEAGENT','COMPLETECALLER')))) THEN 1 ELSE 0 END) AS TRANSFERIDAS
,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) > '3' THEN strtoint(param1) ELSE 0 END) AS TEMPO_ESPERA
,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER') AND strtoint(( case when(coalesce(param2, '') = '')then '0' else param2 end )) > '1' THEN strtoint(param2) ELSE 0 END) AS TEMPO_ATENDIMENTO
,SUM (CASE WHEN EVENTO IN ('COMPLETAAGENT','COMPLETACALLER') AND strtoint(( case when(coalesce(param2, '') = '')then '0' else param2 end )) > '1' THEN strtoint(param2) ELSE 0 END) AS TEMPO_ORIGINADAS
,SUM (CASE WHEN EVENTO = 'ABANDON' THEN (CASE WHEN(coalesce(param3, '') = '')THEN 0 ELSE param3::int END) ELSE 0 END) AS TEMPO_ABANDONO
,SUM (CASE WHEN EVENTO IN('EXITWITHTIMEOUT', 'TRANSBORDANDO') THEN 1 ELSE 0 END) AS TRANSBORDANDO
,SUM (transbordada) AS TRANSBORDADA
FROM (
SELECT
a.data_bilhete AS DATA, a.data_bilhete,b.fila,
case when(exists(select '' from pbx_bilhetes where data_bilhete = a.data_bilhete and accountcode = a.uniqueid and evento in('COMPLETEAGENT','COMPLETECALLER','COMPLETAAGENT','COMPLETACALLER')))then ( case when(b.evento in('COMPLETEAGENT','COMPLETECALLER'))then 'TRANSFER' else 'TRANSFERORIG' end) else b.evento end as evento,
case when((evento = 'TRANSBORDADO') OR ((evento = 'ENTERQUEUE') and exists(select '' from ast_eventos_dacs where uid2 = b.uid2 and fila < > b.fila and evento = 'EXITWITHTIMEOUT' and b.id > id)))then 1 else 0 end as transbordada
,b.param1,b.param2,b.param3,b.param4,b.agente,
(select count(*) from pbx_bilhetes_complemento where uniqueid2 = a.uniqueid and direcao = 'ura') as ura, a.uniqueid
FROM pbx_eventos_dacs b
INNER JOIN pbx_bilhetes a on a.uniqueid = b.uid2 and a.lastapp < > 'Transferred Call'
INNER JOIN pbx_dacs d on d.nome = b.fila
WHERE b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER', 'COMPLETAAGENT','COMPLETACALLER','CONNECT','ENTERQUEUE','TRANSFER','TRANSFERORIG', 'EXITWITHTIMEOUT', 'TRANSBORDANDO', 'TRANSBORDADO','BUSYS','NOANSWERS')
AND a.data_bilhete >= '$iniMes'
AND a.data_bilhete < = '$fimMes'
AND d.id = '$dac'
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
) AS DADOS
GROUP BY FILA, DATA
) AS DADOS ORDER BY 2";
$subQuery = "SELECT date_part('day', COALESCE(entrada_pausa, login)::DATE) AS data,
COUNT(entrada_pausa) AS numPausa,
MIN(a.login) AS login,
SUM(CASE WHEN(b.motivo = 'acw')THEN EXTRACT(epoch FROM (saida_pausa - entrada_pausa)) ELSE 0 END) AS pos_atendimento,
SUM(CASE WHEN(b.motivo < > 'acw')THEN EXTRACT(epoch FROM (saida_pausa - entrada_pausa)) ELSE 0 END) AS tempo_pausa,
SUM(EXTRACT(epoch FROM (logoff - login))) AS tempo_login,
SUM((a.logoff) - (a.\"login\")) AS agt_duracao,
COUNT(DISTINCT a.matricula) AS conexoes
FROM pbx_eventos_agentes a
LEFT OUTER JOIN pbx_motivos_pausas b ON b.id = a.id_motivo_pausa
WHERE COALESCE(entrada_pausa::DATE,login::DATE) >= '$iniMes'
AND COALESCE(entrada_pausa::DATE,login::DATE) < = '$fimMes'
AND id_dac = $dac
GROUP BY COALESCE(entrada_pausa, login)::DATE ORDER BY 1";
//echo $query;
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
$subResult = $this->___GetQuery($subQuery);
$subRow = pg_fetch_all($subResult);
$this->SetData($subRow ? $subRow : array());
}
protected function ___PreparaCsv() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
/*
* Inicia o relat<EFBFBD> rio.
*/
$dataRel[] = GenerateCsvFromArray($filtro);
$dadosCabecalio = array(
'Dia', 'Fila', 'Conexoes', 'Transbordo Entrada', 'Transbordo Saida', 'Abandonadas', 'Ramal Est<EFBFBD> tico', 'Atendidas PA', 'Atendidas Ate 30',
'Transferidas', 'Espera', 'Originadas PA', 'TME', 'PA', 'Abandono', 'NS', 'Atend.', 'Livre', 'Pausa'
);
$dadosField = array(
'data', 'oferecidas','conexoes', 'transbordada', 'transbordando', 'abandonadas', 'atendidas_fila', 'atendidas_pa', 'atendidas_30', 'transferidas',
'espera', 'originadas_pa', 'tme', 'tma', 'tmab', 'inb', 'agtAtend', 'agtLivre', 'agtPausa'
);
/*
* Monta a linha de cabecalio.
*/
$dataRel[] = GenerateCsvFromArray($dadosCabecalio);
$somaReg = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
$somaAbandonadas = 0;
$somaAtendRamal = 0;
$somaAtendPA = 0;
$somaAtend30 = 0;
$somaTransferidas = 0;
$somaEspera = 0;
$somaOriginadasPA = 0;
$x = 0;
$data = [];
foreach($this->GetData()[1] as $rel){
$data[$rel['data']] = $rel;
}
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
$somaAbandonadas += $row['abandonadas'];
$somaAtendRamal += $row['atendidas_fila'];
$somaAtendPA += $row['atendidas_pa'];
$somaAtend30 += $row['atendidas_30'];
$somaTransferidas += $row['transferidas'];
$somaEspera += $row['espera'];
$somaOriginadasPA += $row['originadas_pa'];
$somaConexoes += $data[$row['data']]['conexoes'];
$tempo_calc = $row['tempo_atendimento'] + $row['tempo_originadas'];
$agt_duracaoseg = $data[$row['data']]['tempo_login'];
$agt_pausa = $data[$row['data']]['tempo_pausa'];
$livre = $agt_duracaoseg - ($agt_pausa + $tempo_calc);
$row['conexoes'] = ($data[$row['data']]['conexoes'] ? $data[$row['data']]['conexoes'] : 0);
$row['agtAtend'] = $agt_duracaoseg ? round($tempo_calc / ($agt_duracaoseg / 100), 2) : 0;
$row['agtLivre'] = $agt_duracaoseg ? round($livre / ($agt_duracaoseg / 100), 2) : 0;
$row['agtPausa'] = $agt_duracaoseg ? round($agt_pausa / ($agt_duracaoseg / 100), 2) : 0;
$residualPercentage = ($row['agtAtend'] + $row['agtLivre'] + $row['agtPausa']) - 100;
$row['agtLivre'] = $this->adjustPercentageResidual($residualPercentage, $row['agtLivre']);
$x++;
$linha = array();
foreach ($dadosField as $key) {
$linha[] = $row["$key"];
}
$dataRel[] = GenerateCsvFromArray($linha);
}
$dataRel[] = GenerateCsvFromArray(array(''));
$dataRel[] = GenerateCsvFromArray(array('Media', round($somaFila / $somaReg),round($somaConexoes / $somaReg) ,round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), round($somaOriginadasPA / $somaReg), ' - ', ' - ', ' - ', ' - ', ' - ', ' - ', ' - '));
$dataRel[] = GenerateCsvFromArray(array('Total', $somaFila,$somaConexoes ,$somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, $somaOriginadasPA, ' - ', ' - ', ' - ', ' - ', ' - ', ' - ', ' - '));
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaExcel() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$linha = array('LABEL');
foreach ($filtro as $values) {
$values = RemoveAcentos($values);
list($label, $value) = explode(":", $values);
$linha[] = $label;
}
$dataRel[] = $linha;
$linha = array('DADOS');
foreach ($filtro as $values) {
list($label, $value) = explode(":", $values);
$linha[] = $value;
}
$dataRel[] = $linha;
$dadosCabecalio = array(
'Dia', 'Fila', 'Conexoes','Transbordo Entrada', 'Transbordo Saida', 'Abandonadas', 'Ramal Est<EFBFBD> tico', 'Atendidas PA', 'Atendidas Ate 30',
'Transferidas', 'Espera', 'Originadas PA', 'TME', 'PA', 'Abandono', 'NS', 'Atend.', 'Livre', 'Pausa'
);
$dadosField = array(
'data', 'oferecidas', 'conexoes','transbordada', 'transbordando', 'abandonadas', 'atendidas_fila', 'atendidas_pa', 'atendidas_30', 'transferidas',
'espera', 'originadas_pa', 'tme', 'tma', 'tmab', 'inb', 'agtAtend', 'agtLivre', 'agtPausa'
);
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
}
$dataRel[] = $linha;
$somaReg = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
$somaAbandonadas = 0;
$somaAtendRamal = 0;
$somaAtendPA = 0;
$somaAtend30 = 0;
$somaTransferidas = 0;
$somaEspera = 0;
$somaOriginadasPA = 0;
$x = 0;
$data = [];
foreach($this->GetData()[1] as $rel){
$data[$rel['data']] = $rel;
}
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
$somaAbandonadas += $row['abandonadas'];
$somaAtendRamal += $row['atendidas_fila'];
$somaAtendPA += $row['atendidas_pa'];
$somaAtend30 += $row['atendidas_30'];
$somaTransferidas += $row['transferidas'];
$somaEspera += $row['espera'];
$somaOriginadasPA += $row['originadas_pa'];
$somaConexoes += $data[$row['data']]['conexoes'];
$tempo_calc = $row['tempo_atendimento'] + $row['tempo_originadas'];
$agt_duracaoseg = $data[$row['data']]['tempo_login'];
$agt_pausa = $data[$row['data']]['tempo_pausa'];
$livre = $agt_duracaoseg - ($agt_pausa + $tempo_calc);
$row['conexoes'] = $data[$row['data']]['conexoes'];
$row['agtAtend'] = $agt_duracaoseg ? round($tempo_calc / ($agt_duracaoseg / 100), 2) : 0;
$row['agtLivre'] = $agt_duracaoseg ? round($livre / ($agt_duracaoseg / 100), 2) : 0;
$row['agtPausa'] = $agt_duracaoseg ? round($agt_pausa / ($agt_duracaoseg / 100), 2) : 0;
$residualPercentage = ($row['agtAtend'] + $row['agtLivre'] + $row['agtPausa']) - 100;
$row['agtLivre'] = $this->adjustPercentageResidual($residualPercentage, $row['agtLivre']);
// Formata linha de dados.
$linha = array('DADOS');
foreach ($dadosField as $key) {
$linha[] = $row["$key"];
}
$dataRel[] = $linha;
}
/*
* Linha de totalizacao.
*/
$dataRel[] = array('LABEL', 'Media', round($somaFila / $somaReg), round($somaConexoes / $somaReg),round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), round($somaOriginadasPA / $somaReg), ' - ', ' - ', ' - ', ' - ', ' - ', ' - ', ' - ');
$dataRel[] = array('LABEL', 'Total', $somaFila, $somaConexoes ,$somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, $somaOriginadasPA, ' - ', ' - ', ' - ', ' - ', ' - ', ' - ', ' - ');
/*
* Fecha relatorio.
*/
$dataRel[] = '< / table > ';
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaGrid() {
$dataRel = array();
$dadosCabecalio = array(
'Dia' => 'align="center"',
'Fila' => 'align="center"',
'Conex<EFBFBD> es' => 'align="center"',
'Transbordo Entrada' => 'align="center"',
'Transbordo Sa<EFBFBD> da' => 'align="center"',
'Abandonadas' => 'align="center"',
'Ramal Est<EFBFBD> tico' => 'align="center"',
'Atendidas PA' => 'align="center"',
'Atendidas At<EFBFBD> 30' => 'align="center"',
'Transferidas' => 'align="center"',
'Espera' => 'align="center"',
'Originadas PA' => 'align="center"',
'TME' => 'align="center"',
'PA' => 'align="center"',
'Abandono' => 'align="center"',
'NS' => 'align="center"',
'Atend.' => 'align="center"',
'Livre' => 'align="center"',
'Pausa' => 'align="center"'
);
$dadosField = array(
'data' => 'align="center"',
'oferecidas' => 'align="center"',
'conexoes' => 'align="center"',
'transbordada' => 'align="center"',
'transbordando' => 'align="center"',
'abandonadas' => 'align="center"',
'atendidas_fila' => 'align="center"',
'atendidas_pa' => 'align="center"',
'atendidas_30' => 'align="center"',
'transferidas' => 'align="center"',
'espera' => 'align="center"',
'originadas_pa' => 'align="center"',
'tme' => 'align="center"',
'tma' => 'align="center"',
'tmab' => 'align="center"',
'inb' => 'align="center"',
'agtAtend' => 'align="center"',
'agtLivre' => 'align="center"',
'agtPausa' => 'align="center"'
);
/*
* Inicia o relat<EFBFBD> rio.
*/
$dataRel[] = '< table width = "100%" cellpadding = "2" class = "grid" > ';
/*
* Monta a linha de cabecalio.
*/
$linha = '< tr > ';
$linha .= sprintf(
"< th align = \"center\" > %s< / th > "
. "< th colspan = \"11\" > Liga<EFBFBD> <EFBFBD> es< / th > "
. "< th colspan = \"4\" > Performace< / th > "
. "< th colspan = \"3\" > Produtividade< / th > ", $this->___ano);
$linha .= "< / tr > ";
$dataRel[] = $linha;
$linha2 .= "< tr > ";
$linha2 .= sprintf(
"< th align = \"center\" > %s< / th > "
. "< th colspan = \"11\" > Total de Chamadas< / th > "
. "< th colspan = \"4\" > Tempo M<EFBFBD> dio(Segundos)< / th > "
. "< th colspan = \"3\" > Tempo(%%)< / th > ", $this->___mes);
$linha2 .= "< / tr > ";
$dataRel[] = $linha2;
/*
* Verifica se retornou dados
*/
if (!IsPostBack() || !count($this->GetData()[0])) {
$dataRel[] = sprintf("< tr > < td align = \"center\" colspan = \"%s\" > %s< td > < / tr > < / table > ", count($dadosCabecalio) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$this->___dataRel[] = $dataRel;
return;
}
$linhaC = "< tr > ";
foreach ($dadosCabecalio as $key => $value) {
$linhaC .= sprintf("< th % s > %s< / th > ", $value, $key);
}
$linhaC .= "< / tr > ";
$dataRel[] = $linhaC;
$somaReg = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
$somaAbandonadas = 0;
$somaAtendRamal = 0;
$somaAtendPA = 0;
$somaAtend30 = 0;
$somaTransferidas = 0;
$somaEspera = 0;
$somaOriginadasPA = 0;
$x = 0;
$data = [];
foreach($this->GetData()[1] as $rel){
$data[$rel['data']] = $rel;
}
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
$somaAbandonadas += $row['abandonadas'];
$somaAtendRamal += $row['atendidas_fila'];
$somaAtendPA += $row['atendidas_pa'];
$somaAtend30 += $row['atendidas_30'];
$somaTransferidas += $row['transferidas'];
$somaEspera += $row['espera'];
$somaOriginadasPA += $row['originadas_pa'];
$somaConexoes += $data[$row['data']]['conexoes'];
$tempo_calc = $row['tempo_atendimento'] + $row['tempo_originadas'];
$agt_duracaoseg = $data[$row['data']]['tempo_login'];
$agt_pausa = $data[$row['data']]['tempo_pausa'];
$livre = $agt_duracaoseg - ($agt_pausa + $tempo_calc);
$row['conexoes'] = ($data[$row['data']]['conexoes'] ? $data[$row['data']]['conexoes'] : 0);
$row['agtAtend'] = $agt_duracaoseg ? round($tempo_calc / ($agt_duracaoseg / 100), 2) : 0;
$row['agtLivre'] = $agt_duracaoseg ? round($livre / ($agt_duracaoseg / 100), 2) : 0;
$row['agtPausa'] = $agt_duracaoseg ? round($agt_pausa / ($agt_duracaoseg / 100), 2) : 0;
$residualPercentage = ($row['agtAtend'] + $row['agtLivre'] + $row['agtPausa']) - 100;
$row['agtLivre'] = $this->adjustPercentageResidual($residualPercentage, $row['agtLivre']);
$linha = "< tr > ";
foreach ($dadosField as $key => $value) {
$linha .= sprintf("< td % s > %s< / td > ", $value, $row["$key"]);
}
$linha .= "< / tr > ";
$dataRel[] = $linha;
$x++;
}
$linhaTotal = '< tr > < th > M<EFBFBD> dia< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > - < / th > < th > - < / th > < th > - < / th > < th > - < / th > < th > - < / th > < th > - < / th > < th > - < / th > < / tr > ';
$dataRel[] = sprintf($linhaTotal, round($somaFila / $somaReg), round($somaConexoes / $somaReg),round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), round($somaOriginadasPA / $somaReg));
$linhaGeral = '< tr > < th > Total< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > %s< / th > < th > - < / th > < th > - < / th > < th > - < / th > < th > - < / th > < th > - < / th > < th > - < / th > < th > - < / th > < / tr > ';
$dataRel[] = sprintf($linhaGeral, $somaFila, $somaConexoes,$somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, $somaOriginadasPA);
/*
* Fecha relatorio.
*/
$dataRel[] = '< / table > ';
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaHtml() {
}
protected function ___PreparaPdf() {
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
/**
* TABELA DADOS PRINCIPAIS
*/
$somaReg = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
$somaAbandonadas = 0;
$somaAtendRamal = 0;
$somaAtendPA = 0;
$somaAtend30 = 0;
$somaTransferidas = 0;
$somaEspera = 0;
$somaOriginadasPA = 0;
$dados = array();
$x = 0;
$data = [];
foreach($this->GetData()[1] as $rel){
$data[$rel['data']] = $rel;
}
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
$somaAbandonadas += $row['abandonadas'];
$somaAtendRamal += $row['atendidas_fila'];
$somaAtendPA += $row['atendidas_pa'];
$somaAtend30 += $row['atendidas_30'];
$somaTransferidas += $row['transferidas'];
$somaEspera += $row['espera'];
$somaOriginadasPA += $row['originadas_pa'];
$somaConexao += $data[$row['data']]['conexoes'];
$tempo_calc = $row['tempo_atendimento'] + $row['tempo_originadas'];
$agt_duracaoseg = $data[$row['data']]['tempo_login'];
$agt_pausa = $data[$row['data']]['tempo_pausa'];
$livre = $agt_duracaoseg - ($agt_pausa + $tempo_calc);
$row['conexoes'] = $data[$row['data']]['conexoes'];
$dados[$x]['agtAtend'] = $agt_duracaoseg ? round($tempo_calc / ($agt_duracaoseg / 100), 2) : 0;
$dados[$x]['agtLivre'] = $agt_duracaoseg ? round($livre / ($agt_duracaoseg / 100), 2) : 0;
$dados[$x]['agtPausa'] = $agt_duracaoseg ? round($agt_pausa / ($agt_duracaoseg / 100), 2) : 0;
$residualPercentage = ($dados[$x]['agtAtend'] + $dados[$x]['agtLivre'] + $dados[$x]['agtPausa']) - 100;
$dados[$x]['agtLivre'] = $this->adjustPercentageResidual($residualPercentage, $dados[$x]['agtLivre']);
$dados[$x]["data"] = $row["data"];
$dados[$x]["conexoes"] = $row["conexoes"];
$dados[$x]["oferecidas"] = $row["oferecidas"];
$dados[$x]["transbordada"] = $row["transbordada"];
$dados[$x]["transbordando"] = $row["transbordando"];
$dados[$x]["abandonadas"] = $row["abandonadas"];
$dados[$x]["atendidas_fila"] = $row["atendidas_fila"];
$dados[$x]["atendidas_pa"] = $row["atendidas_pa"];
$dados[$x]["atendidas_30"] = $row["atendidas_30"];
$dados[$x]["transferidas"] = $row["transferidas"];
$dados[$x]["originadas_pa"] = $row['originadas_pa'];
$dados[$x]["espera"] = $row["espera"];
$dados[$x]["tme"] = $row["tme"];
$dados[$x]["tma"] = $row["tma"];
$dados[$x]["tmab"] = $row["tmab"];
$dados[$x]["inb"] = $row["inb"];
$x++;
}
//HEADER DA TABELA DO PDF -> DADOS EM ARRAY
$dadosCabecalio = array(
'Dia' => 'C',
'Fila' => 'C',
'Conex<EFBFBD> es' => 'C',
'Trans. E.' => 'C',
'Trans. S.' => 'C',
'Aband.' => 'C',
'Atend. Ramal' => 'C',
'Atend. PA' => 'C',
'Atend. 30' => 'C',
'Transf.' => 'C',
'Espera' => 'C',
'Orig. PA' => 'C',
'TME' => 'C',
'PA' => 'C',
'Abandono' => 'C',
'NS' => 'C',
'Atend.' => 'C',
'Livre' => 'C',
'Pausa' => 'C'
);
$dadosField = array(
'data' => 'C',
'oferecidas' => 'C',
'conexoes' => 'C',
'transbordada' => 'C',
'transbordando' => 'C',
'abandonadas' => 'C',
'atendidas_fila' => 'C',
'atendidas_pa' => 'C',
'atendidas_30' => 'C',
'transferidas' => 'C',
'espera' => 'C',
'originadas_pa' => 'C',
'tme' => 'C',
'tma' => 'C',
'tmab' => 'C',
'inb' => 'C',
'agtAtend' => 'C',
'agtLivre' => 'C',
'agtPausa' => 'C'
);
$this->setType("L");
$widthHeader = array(11, 11, 15, 11, 11, 11, 16, 11, 13, 10, 10, 12, 20, 20, 20, 20, 20, 20, 20);
$totaliza = array(
'M<EFBFBD> dia', round($somaFila / $somaReg), round($somaConexao/$somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), round($somaOriginadasPA / $somaReg), ' - ', ' - ', ' - ', ' - ', ' - ', ' - ', ' - ');
//Monta o array para passar para o prepara; Necess<EFBFBD> rio passar 6 parametros
$table1 = array($dadosCabecalio, $dadosField, $dados, $widthHeader, $totaliza, 0);
$totaliza1 = array('Total', $somaFila, $somaConexao, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, $somaOriginadasPA, ' - ', ' - ', ' - ', ' - ', ' - ', ' - ', ' - ');
$widthHeader1 = array(11, 11, 15, 11, 11, 11, 16, 11, 13, 10, 10, 12, 20, 20, 20, 20, 20, 20, 20);
$table2 = array('', '', '', $widthHeader1, $totaliza1, 0);
$this->___dataRel = array($table1, $table2);
}
private function adjustPercentageResidual($residualPercentage, $percentForAdjustment)
{
if ($residualPercentage > 0){
$adjustedPercentage = $percentForAdjustment - $residualPercentage;
} else if ($residualPercentage < 0 ) {
$adjustedPercentage = $percentForAdjustment + ($residualPercentage * -1);
} else {
$adjustedPercentage = $percentForAdjustment;
}
return $adjustedPercentage;
}
public function ExecutaRelatorio() {
global $jsStartup, $jsJQuery, $smarty;
try {
/*
* Use esta fun<EFBFBD> <EFBFBD> o para validar dados do formul<EFBFBD> rio.
*/
$this->___ValidaForm();
/*
* Recupera os dados do banco.
*/
$this->___ConteudoRelatorio();
/*
* Imprime relat<EFBFBD> rio de acordo com a media passada.
*/
$conteudoRelatorio = $this->___ImprimeRelatorio();
} catch (Exception $exc) {
$this->SetMsg($exc->getMessage());
$jsStartup[] = sprintf("alert('%s');", $this->GetMsg());
$this->___GravaLog();
}
/*
* Inclua os scripts necess<EFBFBD> rios aqui.
*/
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) ";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
$smarty->assign('filtros', $this->___FiltrosRelatorio());
$smarty->assign('conteudo', $conteudoRelatorio);
$smarty->assign('msg', $this->GetMsg());
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
$relDesempenhoOp = new RelDesempenhoOperacao($idProg, $dbcon, 1);
$relDesempenhoOp->ExecutaRelatorio();
?>