You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

259 lines
13 KiB

<?php
$templateName = 'discador/desempenhoDiscador.tpl';
//$vAlineMaster = 'middle';
$_SESSION["dataIni"] = IsPostBack() ? $_POST["dataIni"] : date('d/m/Y');
$_SESSION["dataFim"] = IsPostBack() ? $_POST["dataFim"] : date('d/m/Y');
if (IsAjax()) {
if (isset($_GET["tipo"])) {
$cmpId = $_GET["cmpId"];
echo GetCampanhas($dbcon, $cmpId, 0, $_GET["dataIni"], $_GET["dataFim"]);
} else {
$campanhaIn = explode('-', $_GET["listaDacs"]);
$dataIni = is_date($_GET["dataIni"]) ? $_GET["dataIni"] : "";
$dataFim = is_date($_GET["dataFim"]) ? $_GET["dataFim"] : "";
if ($dataIni && $dataFim) {
echo GetListaCampanha($dbcon, $campanhaIn[0], 0, FormatDtMssql($dataIni), FormatDtMssql($dataFim));
} else {
echo GetListaCampanha($dbcon, $campanhaIn[0], 0);
}
}
} else {
if (IsPostBack()) {
$listId = $_POST["listId"];
$validaCampanha = 1;
$campanhas = explode('-', $_POST["listaDacs"]);
$cmpId = $campanhas[0];
$dtIni = trim($_SESSION["dataIni"]);
$dtFim = trim($_SESSION["dataFim"]);
if (!$cmpId) {
$validaCampanha = 0;
$msg = "Selecione pelo menos uma \"Campanha\"";
} else if (empty($dtIni) || !is_date($_SESSION["dataIni"])) {
$validaCampanha = 0;
$msg = "Data Inicial Inválida";
} else if (empty($dtFim) || !is_date($_SESSION["dataFim"])) {
$validaCampanha = 0;
$msg = "Data Final Inválida";
}
}
if (IsPostBack() && $validaCampanha) {
$linha = "";
$linhas = "";
$rows = array();
$query = GetQuery($cmpId);
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$rows[] = $dados;
}
//matricula, inicio_operacao, final_oepracao, apelido,
//dac, list_nome, operacao, tempo_operacao
$numReg = count($rows);
$dadosBD = array();
$dadosAgt = array();
$agtAnterior = "";
$agtAnteriorPausa = "";
$start = 0;
$tempo_pausa = 0;
$data = new CalcDataHora();
$dataAtu = "";
$dataAnt = "";
$dataPausaAnt = "";
for ($i = 0; $i < $numReg; $i++) {
$dados = $rows[$i];
$operacao = strtoupper($dados["operacao"]);
$operacao = $operacao == 'ATENDIMENTO' ? 'ATENDIMENTO' : 'PAUSA';
$dataAtu = substr($dados["inicio_operacao"], 0, 10);
if ($operacao == 'ATENDIMENTO') {
$dadosAgt[$dados["matricula"]]["matricula"] = $dados["matricula"];
$dadosAgt[$dados["matricula"]]["apelido"] = $dados["apelido"];
$dadosAgt[$dados["matricula"]]["id_dac"] = $dados["id_dac"];
$dadosAgt[$dados["matricula"]]["dac"] = $dados["dac"];
$dadosAgt[$dados["matricula"]]["list_id"] = $dados["list_id"];
$dadosAgt[$dados["matricula"]]["list_nome"] = $dados["list_nome"];
$dadosAgt[$dados["matricula"]]["data_operacao"] = FormataDBDataHora($dados["inicio_operacao"]);
if (!$i || ($agtAnterior != $dados["matricula"])) {
$dadosAgt[$dados["matricula"]]["quantidade"] = 1;
$dadosAgt[$dados["matricula"]]["tempo_atende"] = $dados["tempo_operacao"];
$dadosAgt[$dados["matricula"]]["tempo_livre"] = 0;
$horaAnterior = substr(FormataDBDataHora($dados["inicio_operacao"]), 0, 19);
$agtAnterior = $dados["matricula"];
$dataAnt = substr($dados["inicio_operacao"], 0, 10);
} else {
// echo "HA -> " . $horaAnterior . " HC -> " . FormataDBDataHora($dados["inicio_operacao"]) . " DIF " . $data->difDataHora($horaAnterior, substr(FormataDBDataHora($dados["inicio_operacao"]), 0, 19), 's') . "\n";
$dadosAgt[$dados["matricula"]]["quantidade"] += 1;
$dadosAgt[$dados["matricula"]]["tempo_atende"] += $dados["tempo_operacao"];
if ($dataAtu != $dataAnt) {
//$dif = $data->difDataHora(FormataDBDataHora($dataAnt), FormataDBDataHora($dataAtu), 's');
//$dadosAgt[$dados["matricula"]]["tempo_livre"] -= $dif;
$dataAnt = substr($dados["inicio_operacao"], 0, 10);
} else {
$dadosAgt[$dados["matricula"]]["tempo_livre"] += $data->difDataHora($horaAnterior, substr(FormataDBDataHora($dados["inicio_operacao"]), 0, 19), 's');
}
$horaAnterior = substr(FormataDBDataHora($rows[$i]["inicio_operacao"]), 0, 19);
}
} else {
$dadosAgt[$dados["matricula"]][$operacao]["tempo_livre"] = 0;
if (($agtAnteriorPausa != $dados["matricula"])) {
$dadosAgt[$dados["matricula"]]["tempo_pausa"] = $dados["tempo_operacao"];
$agtAnteriorPausa = $dados["matricula"];
$dadosAgt[$dados["matricula"]]["quantidade_pausa"] = 1;
$dataPausaAnt = substr($dados["inicio_operacao"], 0, 10);
} else {
$dadosAgt[$dados["matricula"]]["tempo_pausa"] += $dados["tempo_operacao"];
$dadosAgt[$dados["matricula"]]["quantidade_pausa"] += 1;
}
}
}
echo $contAgt;
// print_r($dadosAgt); exit;
$dados = array();
//print_r($dadosAgt);
foreach ($dadosAgt as $dados) {
$dataIni = $_SESSION["dataIni"];
$dataFim = $_SESSION["dataFim"];
$dacs = $cmpId . "-" . $dados["dac"];
$listas = $listId ? ($listId . "-" . $dados["list_nome"]) : "Todas";
$agente = $dados["apelido"] . "/" . $matricula;
$matricula = $dados["matricula"];
$quantAtende = $dados["quantidade"];
$quantPausa = !$dados["quantidade_pausa"] ? 0 : $dados["quantidade_pausa"];
$tempoAtende = SecondToStrTime(round($dados["tempo_atende"] / $quantAtende));
$tempoPausa = SecondToStrTime(round($dados["tempo_pausa"] / $quantAtende));
if ($quantAtende <= 1) {
$tempoLivre = SecondToStrTime(0);
} else {
$tempoLivre = $dados["tempo_livre"] - ($dados["tempo_pausa"] + $dados["tempo_atende"]);
$tempoLivre = SecondToStrTime(round($tempoLivre / $quantAtende), 0);
}
$data = substr($dados[data_operacao], 0, 19);
$linkPausa = !$quantPausa ? 0 : "<a style=\"color:black;\" href=\"javaScript:NovaJanela('index.php?idProg=123&dacs=$dacs&cmpId=$cmpId&listId=$listId&matricula=$matricula&dataIni=$dataIni&dataFim=$dataFim&dacs=$dacs&agente=$agente&listas=$listas&totalPausa=$quantPausa', 'jnDiscadorPusas', '600', '500', 'resizable=yes,scrollbars=yes'); \">$quantPausa</a>";
// <td align=\"left\">$data</td>
$linha = "<tr>
<td align=\"left\">$dados[dac]</td>
<td align=\"left\"> $dados[apelido]/$dados[matricula]</td>
<td align=\"center\">$quantAtende</td>
<td align=\"center\">$tempoAtende</td>
<td align=\"center\">$linkPausa</td>
<td align=\"center\">$tempoPausa</td>
<td align=\"center\">$tempoLivre</td>
</tr>";
$linhas .= $linha;
}
}
//$jsJQuery[] = "\$('#listaDacs').change(function(){GetCampanhaLista();}) ";
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataData(this);});";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataData(this);}); ";
$jsJQuery[] = "\$('#dataIni').change(function(){GetCampanha();}); ";
$jsJQuery[] = "\$('#dataFim').change(function(){GetCampanha();}); ";
$jsJQuery[] = "\$('#dataFim').focus(function(){this.value = '';}); ";
$jsJQuery[] = "\$('#dataIni').focus(function(){this.value = '';}); ";
$dacs = GetCampanhas($dbcon, $cmpId, 0, $_SESSION["dataIni"], $_SESSION["dataFim"]);
$listas = GetListaCampanha($dbcon, $cmpId, $listId, FormatDtMssql($_SESSION["dataIni"]), FormatDtMssql($_SESSION["dataFim"]));
//Atualiza template
$smarty->assign("dacs", $dacs);
$smarty->assign("listas", $listas);
$smarty->assign('dataIni', $_SESSION["dataIni"]);
$smarty->assign('dataFim', $_SESSION["dataFim"]);
$smarty->assign("linha", $linhas);
//Seta o template
GetTemplate($smarty, $templateName);
}
function GetQuery($cmpId) {
$listId = $_POST["listId"];
$dtIni = is_date($_SESSION["dataIni"]) ? FormatDtMssql($_SESSION["dataIni"]) : '';
$dtFim = is_date($_SESSION["dataFim"]) ? FormatDtMssql($_SESSION["dataFim"]) : '';
$dddpadrao = GetDddPadrao();
$tipoChamada = $_SESSION["tipoChamada"];
$matricula = '0';
$ret = "";
$ret = "CREATE TEMPORARY TABLE agente_operacao (matricula varchar(4) not null, data date not null, inicio_operacao timestamp not null, final_operacao timestamp,
apelido varchar(20), id_dac int not null, dac varchar(120), list_id int, list_nome varchar(100), operacao varchar(20), tempo_operacao bigint, CONSTRAINT \"pkAnaliseDacOpera\" PRIMARY KEY( id_dac, inicio_operacao, matricula));
CREATE INDEX \"idxAnaliseDacOpera\" ON agente_operacao (id_dac, data, matricula );
CREATE INDEX \"idxAnaliseDacOperaOrd\" ON agente_operacao (matricula, inicio_operacao );
CREATE TEMPORARY TABLE agente_pausa (matricula varchar(4) not null, data date not null, inicio_operacao timestamp not null, final_operacao timestamp,
apelido varchar(20), id_dac int not null, dac varchar(120), list_id int, list_nome varchar(100), operacao varchar(20), tempo_operacao bigint, CONSTRAINT \"pkAnaliseOpera\" PRIMARY KEY( id_dac, inicio_operacao, matricula));
CREATE INDEX \"idxAnaliseOpera\" ON agente_pausa (id_dac, data, matricula);
insert into agente_operacao
select i.matricula, conf_data::date, a.conf_data as inicio_operacao, a.conf_data as final_oepracao, i.apelido, a.cmp_id as id_dac, b.cmp_descricao as dac, a.list_id, j.list_nome, cast('atendimento' as varchar(30)) as operacao,
sum(case when(h.evento in('COMPLETECALLER', 'COMPLETEAGENT', 'CONNECT'))then case when(h.evento <> 'CONNECT') then h.param2::int else param1::int end else 0 end) as tempo_operacao
from pbx_campanha_contato_fone a
inner join pbx_campanha b on b.cmp_id = a.cmp_id
inner join pbx_bilhetes g on g.src = a.conf_fone and g.calldate::date = a.conf_data::date and date_part('hour', g.calldate) = date_part('hour', a.conf_data)
inner join pbx_eventos_dacs h on h.uid2 = g.accountcode and h.evento in('COMPLETEAGENT', 'COMPLETECALLER', 'CONNECT') and h.fila = b.cmp_descricao
inner join pbx_usuarios i on i.matricula::int = a.agente
inner join pbx_campanha_lista j on j.list_id = a.list_id
where a.cmp_id = '$cmpId'
and a.list_id = case when($listId = 0)then a.list_id else $listId end
and a.conf_data::date >= '$dtIni'
and a.conf_data::date <= '$dtFim'
and g.lastapp <> 'Transferred Call'
and i.matricula = case when('$matricula' = '0')then i.matricula else '$matricula' end
group by 1, 2, 3, 4, 5, 6, 7, 8, 9;
insert into agente_pausa
select matricula, entrada_pausa::date, entrada_pausa, saida_pausa, cast('' as varchar(20)) as apelido, id_dac, cast('' as varchar(100)) as dac, 0 as id_lista,cast('' as varchar(100)) as list_nome, b.motivo,
extract(epoch from ((saida_pausa - entrada_pausa))) as tempo_operacao
from pbx_eventos_agentes a, pbx_motivos_pausas b
where b.id = a.id_motivo_pausa
and coalesce(login, a.entrada_pausa) >= (select min(inicio_operacao) from agente_operacao)
and coalesce(login,a.entrada_pausa) <= (select max(inicio_operacao) from agente_operacao)
and id_dac = '$cmpId'
and a.matricula = case when('$matricula' = '0')then a.matricula else '$matricula' end;
insert into agente_operacao
select *
from agente_pausa a
where exists(
select '' from agente_operacao b
where b.id_dac = a.id_dac
and b.data = a.data::date
and b.matricula = a.matricula
);
select * from agente_operacao order by 1, 3 ";
//if(IsAdmin ()){ echo $ret; exit;}//and motivo = 'acw'
return $ret;
}
?>