PABX da Simples IP
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.
 
 
 
 
 
 

1089 lines
37 KiB

<?php
define('CONF_PATH_LOG_DISCADORCLIENT', '/var/log/asterisk/discadorclient.log');
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
function GetQryStatusChamadas($useAgt = true)
{
$matricula = $_SESSION["SSmatriculaUser"];
$dac = $_SESSION[AGT_DAC_CONECT];
$query = "SELECT fila
,ABANDONADAS
,ATENDIDAS_PA
,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
,TEMPO_ESPERA
,TEMPO_ATENDIMENTO
,TEMPO_ABANDONO
FROM (
SELECT fila
,SUM (CASE WHEN EVENTO = 'ABANDON' THEN 1 ELSE 0 END) AS ABANDONADAS
,SUM (CASE WHEN EVENTO IN ('CONNECT') THEN 1 ELSE 0 END) AS ATENDIDAS_PA
,SUM (CASE WHEN EVENTO IN ('CONNECT') AND to_number(param1,'999999999') > '3' THEN 1 ELSE 0 END) AS ESPERA
,SUM (CASE WHEN EVENTO IN ('CONNECT') AND to_number(param1,'999999999') > '1' THEN to_number(param1,'999999999') ELSE 0 END) AS TEMPO_ESPERA
,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER') AND to_number(param2,'999999999') > '1' THEN to_number(param2,'999999999') ELSE 0 END) AS TEMPO_ATENDIMENTO
,SUM (CASE WHEN( (EVENTO = 'ABANDON') AND (to_number(param2,'999999999') > '1') ) THEN to_number(param3,'999999999') ELSE 0 END) AS TEMPO_ABANDONO
FROM (
SELECT
a.calldate,b.fila,b.evento,b.param1,b.param2,b.param3,b.param4
FROM ast_bilhetes a
INNER JOIN ast_eventos_dacs b on b.uid2 = a.uniqueid
WHERE b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER','CONNECT','ENTERQUEUE')
AND a.lastapp <> 'Transferred Call'
AND a.data_bilhete = now()::date ";
if ($useAgt)
$query .= " AND substring(b.agente, 7,4) = '$matricula' ";
$query .= " AND b.fila = (select nome from pbx_dacs where id = $dac)
) AS DADOS
GROUP BY FILA
) AS DADOS
";
return $query;
}
function GetQryInfoGeral()
{
$dac = $_SESSION[AGT_DAC_CONECT_DESC];
return "select abandonadas, espera from pbx_supervisor_dacs where upper(trim(dac)) = upper(trim('$dac')) ";
//atendidas, abandonadas, espera, (tempo_espera * (interval '1 second')) as tempo_espera, cast(percentual_nivel_servico as varchar) || '%' as tempo_nivel_servico
}
function GetQryInfoChamadasCorrente()
{
$matricula = $_SESSION["SSmatriculaUser"];
//$dac = $_SESSION[AGT_DAC_CONECT_DESC];
return "select ramal, matricula, nome, (LOCALTIMESTAMP(0) - tempo_login) as tempo_login, modo_atendimento, origem_destino, status, (LOCALTIMESTAMP(0) - duracao) as duracao,
uniqueid from pbx_supervisor_agentes
where matricula = '$matricula' ";
}
function DispRel($smarty, $tpl)
{
$smarty->display($tpl);
}
function GetStChamada($db, &$tme, &$tma, &$atd, &$fila)
{
$result = pg_query($db, GetQryStatusChamadas());
$st = @pg_num_rows($result) > 0;
$dados = @pg_fetch_array($result);
$tme = $st ? $dados["tme"] : "0";
$tma = $st ? $dados["tma"] : "0";
$atd = $st ? $dados["atendidas_pa"] : "0";
$fila = $dados["fila"];
}
function GetInfoChamada($db, &$stAgtAtende, &$lgd, &$dura, &$qtFila, &$fone, &$abd, &$unqId)
{
$result = pg_query($db, GetQryInfoGeral());
$st = @pg_num_rows($result) > 0;
$dados = @pg_fetch_array($result);
$qtFila = $st ? $dados["espera"] : "0";
$result = pg_query($db, GetQryStatusChamadas(false));
$st = @pg_num_rows($result) > 0;
$dados = @pg_fetch_array($result);
$abd = $st ? $dados["abandonadas"] : "0";
$result = pg_query($db, GetQryInfoChamadasCorrente());
$st = @pg_num_rows($result) > 0;
$dados = @pg_fetch_array($result);
$unqId = $dados["uniqueid"];
$lgd = $st ? $dados["tempo_login"] : "0";
$stAgtAtende = $st ? $dados["status"] : "0";
$dura = $st && $dados["origem_destino"] ? $dados["duracao"] : "0";
$fone = ($st && $dados["origem_destino"]) || (strtoupper($dados["status"]) == "OCUPADO") ? (empty($dados["origem_destino"]) ? "-" : $dados["origem_destino"]) : "Livre";
$_SESSION[RAMAL_DESTINO] = $fone;
}
function UpdateLogoff($db)
{
$idLogoff = $_SESSION[AGT_ID_LOGIN];
$matricula = GetMatricula();
$query = "update pbx_supervisor_agentes
set logado = now()
where matricula = '$matricula'";
$result = pg_query($db, $query);
$query = "update pbx_eventos_agentes
set logoff = now(),
flag = 1
where id = $idLogoff";
pg_query($db, $query);
$query = "select count(*) from pbx_supervisor_agentes where matricula = '$matricula' ";
//echo $query;
$result = pg_query($db, $query);
$row = @pg_fetch_row($result);
if ((!$row[0] && DesConectaAgente($db, 0)) || (GetPausa($db, GetMatricula()))) {
echo "999";
}
}
function UpdatePausa($db)
{
if (AgentePausa()) {
$idPausa = $_SESSION[AGT_ID_PAUSA];
$query = "update pbx_eventos_agentes
set saida_pausa = now(),
flag = 1
where id = $idPausa ";
pg_query($db, $query);
}
}
function AgentePausa()
{
$org_id = GetOrganizacao();
$matricula = GetMatricula();
$query = "select count(*) from pbx_supervisor_agentes where matricula = '$matricula' and upper(status) = 'PAUSA' and org_id IN ($org_id, 0)";
$result = pg_query($query);
$row = @pg_fetch_row($result);
return $row[0];
}
function AgenteLivre()
{
$matricula = GetMatricula();
$query = "select count(*) from pbx_supervisor_agentes where matricula = '$matricula' and upper(status) = 'LIVRE' ";
$result = pg_query($query);
$row = @pg_fetch_row($result);
return $row[0];
}
function AgtAtivaControles($status)
{
$arControlesAgt = array();
$arControlesAgt["btConDac"] = false;
$arControlesAgt["listaDacs"] = false;
$arControlesAgt["listaClas"] = false;
$arControlesAgt["listaItem"] = false;
$arControlesAgt["listaMotivo"] = false;
$arControlesAgt["rbModoAtend"] = false;
$arControlesAgt["btPausa"] = false;
$arControlesAgt["btCliente"] = false;
$arControlesAgt["txtCliente"] = false;
$arControlesAgt["bt_classifica"] = false;
switch ($status) {
case AGT_STATUS_OFF:
$arControlesAgt["btConDac"] = true;
$arControlesAgt["listaDacs"] = true;
$arControlesAgt["rbModoAtend"] = true;
break;
case AGT_STATUS_PAUSA:
$arControlesAgt["listaClas"] = true;
$arControlesAgt["listaItem"] = true;
$arControlesAgt["btPausa"] = true;
$arControlesAgt["btCliente"] = true;
$arControlesAgt["txtCliente"] = true;
$arControlesAgt["bt_classifica"] = true;
break;
case AGT_STATUS_LIVRE:
$arControlesAgt["btConDac"] = true;
$arControlesAgt["btPausa"] = true;
$arControlesAgt["listaMotivo"] = true;
break;
case AGT_STATUS_OCUPADO:
$arControlesAgt["btConDac"] = true;
$arControlesAgt["listaClas"] = true;
$arControlesAgt["listaItem"] = true;
$arControlesAgt["btPausa"] = true;
$arControlesAgt["btCliente"] = true;
$arControlesAgt["txtCliente"] = true;
$arControlesAgt["bt_classifica"] = true;
break;
case AGT_STATUS_ORIGNANDO:
break;
case AGT_STATUS_CHAMANDO:
break;
}
return $arControlesAgt;
}
function ConvertStatusStr($status)
{
$status = strtoupper($status);
if ($status == "LIVRE")
return AGT_STATUS_LIVRE;
if ($status == "OCUPADO")
return AGT_STATUS_OCUPADO;
if ($status == "PAUSA")
return AGT_STATUS_PAUSA;
if ($status == "CHAMANDO")
return AGT_STATUS_CHAMANDO;
if ($status == "ORIGINANDO")
return AGT_STATUS_ORIGNANDO;
return AGT_STATUS_OFF;
}
function SetLoginMotivo($motivoLogin)
{
$_SESSION['PAUSA_LOGIN'] = $motivoLogin;
}
function GetMotivoPausa()
{
global $dbcon;
$matricula = GetMatricula();
$query = "SELECT motivo_pausa FROM pbx_supervisor_agentes WHERE matricula = '$matricula'";
$resp = pg_query($dbcon, $query);
$row = pg_fetch_assoc($resp);
return strtoupper($row['motivo_pausa']);
}
function GetPausaLogin()
{
return $_SESSION['PAUSA_LOGIN'];
}
function CarregaMunicipios($db)
{
$query = "select uf from pbx_uf order by 1";
$result = pg_query($db, $query);
$ufs = "";
$mun = "";
while ($dados = @pg_fetch_row($result)) {
$uf = $dados[0];
$ufs .= empty($ufs) ? "['$uf'," : ",['$uf',";
$query = "select mun_id as uf, mun_nome from pbx_municipio_classifica where uf = '$uf' order by uf, mun_nome";
$resultItem = pg_query($db, $query);
$mun = "";
while ($dadosItem = @pg_fetch_row($resultItem)) {
$munUf = $dadosItem[0];
$munDesc = str_replace("'", " ", $dadosItem[1]);
$mun .= empty($mun) ? "'$munUf;$munDesc'" : ",'$munUf;$munDesc'";
}
$ufs .= "[$mun]]\n";
}
$ufs = "var ufs = [$ufs];\n\n\n";
$ufs .= "function CarregaMunicipios()
{
var listaUfs = document.getElementById(\"listaUfs\");
var listMun = document.getElementById(\"listaMun\");
var ufValue = listaUfs.options[listaUfs.selectedIndex].value;
var posicao = 0;
listMun.length = 0;
if(ufValue == 0)
{
listMun.options.length = 0;
listMun.options[posicao] = new Option('----------', 0);
}
else
{
for(i = 0; i < ufs.length; i++)
{
var item = ufs[i];
if(item[0] == ufValue)
{
var itens = item[1];
for(j = 0; j < itens.length; j++)
{
var valItens = itens[j].split(';');
listMun.options[posicao++] = new Option(valItens[1], valItens[0]);
if(j == 0){ munId = valItens[0]; }
}
break;
}
}
}
if(ufValue == 0)munId = 0;
}";
$GLOBALS["jsStartup"][] = $ufs;
}
function CarregaClassificacao($db, $dacSel)
{
$query = " SELECT distinct c.id_dac, a.clas_id, a.clas_descricao
FROM pbx_classifica_atendimento a, pbx_classifica_item b, pbx_classifica_dacs c
where b.clas_id = a.clas_id
and c.clas_id = a.clas_id
and a.clas_status = 1
order by 3";
$result = pg_query($db, $query);
$clas = "";
$item = "";
while ($dados = @pg_fetch_row($result)) {
$dac = $dados[0];
$id = $dados[1];
$desc = str_replace("'", "\\'", $dados[2]);
$clas .= empty($clas) ? "['$dac', '$id','$desc'," : ",['$dac', '$id','$desc',";
$query = " SELECT clas_id, clit_id, clit_descricao FROM pbx_classifica_item where clas_id = $id and clit_status = 1 order by 3";
$resultItem = pg_query($db, $query);
$item = "";
while ($dadosItem = @pg_fetch_row($resultItem)) {
$idItem = $dadosItem[1];
$descItem = str_replace("'", "\\'", $dadosItem[2]);
$item .= empty($item) ? "'$idItem;$descItem'" : ",'$idItem;$descItem'";
}
$clas .= "[$item]]\n";
}
$clas = "var clas = [$clas];\n\n";
$clas .= "function GetAgtClassifica(dac)
{
var listClas = document.getElementById(\"listaClas\");
var posicao = 0;
listClas.options[posicao] = new Option('----------', 0);
for(i = 0; i < clas.length; i++)
{
var item = clas[i];
if(item[0] == dac)
{
listClas.options[++posicao] = new Option(item[2], item[1]);
}
}
}
function GetAgtClasItem(clasValue)
{
var listaClasItem = document.getElementById(\"listaClasItem\");
var posicao = 0;
listaClasItem.options.length = 0;
listaClasItem.options[posicao] = new Option('----------', 0);
posicao++;
for(i = 0; i < clas.length; i++)
{
var item = clas[i];
if(item[1] == clasValue)
{
var itens = item[3];
for(j = 0; j < itens.length; j++)
{
var valItens = itens[j].split(';');
listaClasItem.options[posicao++] = new Option(valItens[1], valItens[0]);
}
break;
}
}
}
GetAgtClassifica($dacSel);
";
return $clas;
}
function ___GetItem($db, $idClas, $idItem)
{
$query = " SELECT clit_id, clit_descricao FROM pbx_classifica_item where clas_id = $idClas and clit_status = 1 order by 2";
$result = pg_query($db, $query);
$clas = "<select name=\"listaItem\" style=\"width:169px;\">";
$def = $idItem;
if (!$idClas)
$clas .= "<option value=\"0\" selected>Selecione a Classifica<EFBFBD><EFBFBD>o</option>";
else {
while ($dados = @pg_fetch_row($result)) {
$sel = (!$def++) || ($idItem == $dados[0]) ? "selected" : "";
$id = $dados[0];
$desc = $dados[1];
$clas .= "<option value=\"$id\" $sel>$desc</option>";
}
}
$clas .= "</select>";
return $clas;
}
function ConectarDac()
{
/*
* Verifica se o usu<EFBFBD>rio clicou no botao desconectar.
*/
if (!isset($_POST["btConDac"]))
return false;
return strtoupper($_POST["btConDac"]) == 'CONECTAR';
/*
* Retorna true se o usuario n<EFBFBD>o estiver conectado.
*/
$matricula = GetMatricula();
$query = "select count(*) from pbx_supervisor_agentes where matricula = '$matricula' ";
$result = pg_query($query);
$row = @pg_fetch_row($result);
return !$row[0];
}
function GetAgenteDisponivelFila()
{
/*
* Retorna true se o usuario n<EFBFBD>o estiver conectado.
*/
$matricula = GetMatricula();
$query = "select count(*) from pbx_supervisor_agentes where matricula = '$matricula' and disponivel_atendimento = 1";
$result = pg_query($query);
if (!$result || !pg_num_rows($result)) {
return false;
}
$row = @pg_fetch_row($result);
return $row[0] ? true : false;
}
function DesconectarDac()
{
$org_id = $_SESSION['SSEmpresaPadrao'];
/*
* Verifica se o usu<EFBFBD>rio clicou no botao desconectar.
*/
if (!isset($_POST["btConDac"]))
return false;
/*
* Retorna true se o usu<EFBFBD>rio estiver conectado.
*/
$matricula = GetMatricula();
$query = "select count(*) from pbx_supervisor_agentes where matricula = '$matricula' and org_id = $org_id";
$result = pg_query($query);
$row = @pg_fetch_row($result);
return $row[0];
}
function SairDePausa()
{
return isset($_POST["btPausa"]) && AgentePausa();
//return isset($_POST["btPausa"]) && $_SESSION[SS_PAUSA_AGENTE];
}
function RegistraLogAgente($metodo, $msg, $ex = null)
{
$matricula = GetMatricula();
$log[] = "/****************************** INICIO ****************************";
$log[] = sprintf("Matricula: %s", $matricula);
$log[] = sprintf("Metodo: %s", $metodo);;
$log[] = sprintf("Data: %s", Date("d-m-Y H:i:s"));
$log[] = sprintf("Msg: %s", $msg);
if ($ex) {
//$log[] = sprintf("Arquivo: %s Linha: %s", $ex->getFile(), $ex->getLine());
$log[] = sprintf("MsgSys: %s", GetErrorLast('', 1));
}
$log[] = "****************************** FIM ****************************/";
$file = sprintf("agentesrt_%s.log", ($matricula ? "$matricula" : "null"));
RegistraLog($log, $file);
}
function ArrayToStr($ar)
{
$strLog = '';
foreach ($ar as $key => $value) {
if (is_array($value)) {
$strLog .= !$strLog ? ("{$key}{" . ArrayToStr($value) . "}") : ("|{$key}{" . ArrayToStr($value) . "}");
} else {
$strLog .= !$strLog ? "{$key}: $value" : "|{$key}: $value";
}
}
return $strLog;
}
function LogAgente($modulo, $msg, $data = true)
{
global $detalhaLog;
if ($detalhaLog) {
if ($data) {
$msg .= " Data:[" . ArrayToStr($_REQUEST) . "]\n";
}
RegistraLogAgente($modulo, $msg);
}
}
function EntrarPausa()
{
return isset($_POST["btPausa"]) && (!AgentePausa());
}
/*
* Fun<EFBFBD>oes para o alerta sonoro na classifica<EFBFBD><EFBFBD>o obrigatoria.
*/
function SetAlertAgente($stAlerta)
{
$_SESSION['SSstartAlert'] = $stAlerta;
}
function GetAlertAgente()
{
if (!isset($_SESSION['SSstartAlert'])) {
return false;
}
return $_SESSION['SSstartAlert'];
}
function SetAlertOcupado($status)
{
$_SESSION["SSagenteOcupdo"] = $status;
}
function GetAlertOcupado()
{
if (!isset($_SESSION['SSagenteOcupdo'])) {
return false;
}
return $_SESSION["SSagenteOcupdo"];
}
function SetAlertTempo($tempo)
{
$_SESSION['SStempoAlert'] = $tempo;
}
function GetAlertTempo()
{
if (!isset($_SESSION['SStempoAlert'])) {
return false;
}
return $_SESSION['SStempoAlert'];
}
/*
* Funcoes para o Discador-X.
*/
function HabilitaDiscador()
{
return $_SESSION["prm_use_discador"];
}
/*
* Usa o cliente em uma nova janela quando true.
*/
function AgenteNovaJanela()
{
return $_SESSION["prm_agente_nova_janela"];
}
function GetCampanhaDiscador($idDac)
{
if (!HabilitaDiscador()) {
return false;
}
$matricula = GetMatricula();
/*
* Procura uma campanha ativa para o dac.
*/
$query = "select min(a.cmp_id)
from pbx_campanha_usuarios u
inner join pbx_campanha a on a.cmp_id = u.cmp_id and a.cmp_status = 1 and a.id_dac = '$idDac'
inner join pbx_campanha_lista b on b.cmp_id = a.cmp_id and b.list_status = 1
where u.matricula = '$matricula' and (a.cmp_tipo_campanha = 1 OR a.cmp_tipo_campanha = 9)";
//$query = "select a.cmp_id from pbx_campanha_usuarios u, pbx_campanha a, pbx_campanha_lista b where b.cmp_id = a.cmp_id and a.cmp_status = 1 and a.id_dac = '$idDac' and b.list_status = 1";
$result = pg_query($query);
/*
* Retorna false caso nao exista.
*/
if (!$result || !pg_num_rows($result)) {
return false;
}
$dados = pg_fetch_row($result);
return $dados[0];
}
function AtualizaNumDiscador($db, $contfId, $numeroDiscar)
{
global $dac;
if (!$contfId)
return true;
$query = "update pbx_campanha_contato_fone set conf_discado = 1, conf_callfile = substring(now()::text, 1,19) where conf_id = %s";
$query = sprintf($query, QuotedStr($contfId));
$result = pg_query($db, $query);
if (!$result || !pg_affected_rows($result)) {
GeraExcept('0;Erro;N<EFBFBD>o foi poss<EFBFBD>vel alterar o status do numero corrente!');
}
$dadosDiscador = GetDadosDiscador($dac, 0);
$query = "update pbx_campanha_contato set cont_discado = 1 where cont_id = %s";
$query = sprintf($query, QuotedStr($dadosDiscador['cont_id']));
$result = pg_query($db, $query);
$query = "update pbx_campanha_operacao set conf_id = %s, conf_fone = %s where cmpo_id = %s";
$query = sprintf($query, QuotedStr($contfId), QuotedStr($numeroDiscar), QuotedStr($dadosDiscador['cmpo_id']));
$result = pg_query($db, $query);
if (!$result || !pg_affected_rows($result)) {
GeraExcept('0;Erro;N<EFBFBD>o foi poss<EFBFBD>vel alterar os dados da operacao!');
}
return true;
}
function LmpaUidAgente($db, $matricula)
{
$query = "update pbx_supervisor_agentes set uniqueid2 = '' where matricula = %s";
$query = sprintf($query, QuotedStr($matricula));
return pg_query($db, $query) ? true : false;
}
function GetNumDiscadoStatus($conf_id)
{
$matricula = GetMatricula();
$query = "select a.conf_id, a.cont_id, a.conf_fone, a.conf_status
from pbx_campanha_contato_fone a, pbx_campanha_operacao b
where b.cont_id = a.cont_id
and b.matricula = '%s'
and b.cmpo_status in(0,2)
and a.conf_discado = 1
and a.conf_status = '0'
and a.conf_id <> '%s'";
$query = sprintf($query, $matricula, $conf_id);
$result = pg_query($query);
if (!$result) {
GeraExcept('0;Erro;N<EFBFBD>o foi poss<EFBFBD>vel verificar o status do numero discado!');
}
if (pg_num_rows($result)) {
return pg_fetch_array($result, null, PGSQL_ASSOC);
}
return false;
}
function AtivaNumeroDiscagem($db, $matricula)
{
global $dac;
if (!GetPendenciaDiscador($db, true)) {
FechaRegistroDiscaor($db);
}
$dadosDiscador = GetDadosDiscador($dac, 0);
if ($dadosDiscador !== false) {
$query = "update pbx_campanha_operacao set carrega_fone = 0 where cmpo_id = %s and matricula = %s";
$query = sprintf($query, QuotedStr($dadosDiscador['cmpo_id']), QuotedStr($matricula));
$result = pg_query($db, $query);
if ($result) {
$query = "update pbx_supervisor_agentes set status_discador = 1 where matricula = %s";
$query = sprintf($query, QuotedStr($matricula));
$result = pg_query($db, $query);
}
}
}
function SetDispoDiscador($status)
{
/*
* Quando o agente inicia a opera<EFBFBD><EFBFBD>o de discagem o agente <EFBFBD> colocado antes como indisponivel
* para fila, o status atual <EFBFBD> guardado e restaurado qdo finalizada a operacao de discagem.
*/
$_SESSION['SSDispoDiscador'] = $status;
}
function GetDispoDiscador()
{
return $_SESSION['SSDispoDiscador'];
}
function GetDadosDiscador($dac, $idCampanha = 0)
{
$inTran = 0;
$dadosCampanha = array();
$org_id = GetOrganizacao();
/*
* Se existir um registro em opera<EFBFBD><EFBFBD>o esse registro <EFBFBD> recuperado e envidao para o agente. Este registro foi
* importado da lista para o agente logado, o registro em quet<EFBFBD>o fica dispon<EFBFBD>vel somente para o agente que
* o selecionou, as tabelas relacionadas tem seus status atualizados para evitar conflitos. O pbx_campanha_contato
*/
$matricula = GetMatricula();
$query = "select cmpo_id, cmp_id, list_id, cont_id, conf_id, cmp_descricao, list_nome, cont_identificador,
cont_param1, cont_param2, cont_param3, cont_param4, cont_param5,
disp_param1, disp_param2, disp_param3, disp_param4, disp_param5,
conf_fone, lista_fones_discador, matricula, case when(cmpo_status in(0,2))then 0 else 1 end as cmpo_status, carrega_fone, discagem_inicial
from pbx_campanha_operacao
where matricula = '$matricula'
and cmpo_status in(0, 2) and org_id IN ($org_id, 0)";
$result = pg_query($query);
if (!$result) {
return false;
}
if ($result && pg_num_rows($result)) {
$dadosCampanha = pg_fetch_array($result, null, PGSQL_ASSOC);
return ocultarDadosAgente($dadosCampanha);
}
if (($idCampanha === 0) || !$idCampanha) {
return false;
}
$sql = "SELECT cmp_seletiva FROM pbx_campanha WHERE cmp_id = {$idCampanha}";
$res = pg_query($sql);
$cmpExclusiva = pg_fetch_assoc($res);
if ($cmpExclusiva['cmp_seletiva'] == 1) {
$cmplCamp .= " AND conf_matricula_exclusiva = '{$matricula}' ";
}
/*
* Procura por um registro disponivel para discagem.
*/
$query = "select a.cmp_id, b.list_id,d.cont_id, d.conf_id, a.cmp_descricao, b.list_nome, c.cont_identificador,
c.cont_param1, c.cont_param2, c.cont_param3, c.cont_param4, c.cont_param5,
coalesce(e.disp_param1, 'Param1') as disp_param1, coalesce(e.disp_param2, '-') as disp_param2,
coalesce(e.disp_param3, '-') as disp_param3, coalesce(e.disp_param4, '-') as disp_param4, coalesce(e.disp_param5, '-') as disp_param5,
d.conf_fone, '' as lista_fones_discador, '$matricula' as matricula, 0 as cmpo_status, 0 as carrega_fone, 0 as discagem_inicial
from pbx_campanha a
inner join pbx_campanha_usuarios u on u.cmp_id = a.cmp_id and u.matricula = '$matricula'
inner join pbx_campanha_lista b on b.cmp_id = a.cmp_id and b.list_status = 1
inner join pbx_campanha_contato c on c.list_id = b.list_id and c.cont_id = (select min(cont_id) from pbx_campanha_contato where list_id = b.list_id and cont_discado = 0 and matricula is null and cont_status = 0 $cmplCamp)
inner join pbx_campanha_contato_fone d on d.cont_id = c.cont_id and d.conf_id = (select min(conf_id) from pbx_campanha_contato_fone where cont_id = c.cont_id and conf_discado = 0 and matricula is null)
inner join pbx_campanha_contato_display e on e.list_id = b.list_id
where a.cmp_status = 1
and (a.cmp_tipo_campanha = 1 OR a.cmp_tipo_campanha = 9)
and a.id_dac = '$dac' ";
try {
$result = pg_query($query);
if (!$result) {
GeraExcept("ERRO; Erro ao consultar a campanha!");
}
if (!pg_num_rows($result)) {
return false;
}
$dadosCampanha = pg_fetch_array($result, null, PGSQL_ASSOC);
$result = pg_query('begin');
if (!$result) {
GeraExcept("ERRO; Erro ao iniciar a transa<EFBFBD><EFBFBD>o!");
}
$inTran = 1;
/*
* Remove o contato da lista registro para discar.
*/
$query = "update pbx_campanha_contato set matricula = %s where cont_id = %s";
$query = sprintf($query, QuotedStr($matricula), QuotedStr($dadosCampanha["cont_id"]));
$result = pg_query($query);
if (!$result || !pg_affected_rows($result)) {
GeraExcept("ERRO; Erro ao reservar contato para discagem!");
}
/*
* Marca o registro do telefone em operacao.
*/
$query = "update pbx_campanha_contato_fone set matricula = %s, conf_status_lista = 2 where conf_id = %s";
$query = sprintf($query, QuotedStr($matricula), QuotedStr($dadosCampanha["conf_id"]));
$result = pg_query($query);
if (!$result || !pg_affected_rows($result)) {
GeraExcept("ERRO; Erro ao reservar o telefone para discagem!");
}
/*
* Faz a chamada para o numero default.
*/
$dadosCampanha['lista_fones_discador'] = GetFonesContato($dadosCampanha['cont_id'], $dadosCampanha['conf_fone']);
/*
* Registra as informa<EFBFBD>?os do contato para o agente que realizara a chamada.
*/
$dadosCampanha['cmpo_id'] = RegistraContatoAgente($matricula, $dadosCampanha);
$result = pg_query('commit');
if (!$result) {
GeraExcept("ERRO; Erro ao finalizar a transa<EFBFBD><EFBFBD>o!");
}
return ocultarDadosAgente($dadosCampanha);
} catch (Exception $ex) {
if ($inTran) {
pg_query('rollback');
}
RegistraLogAgente("GetDadosDiscador", $ex->getMessage(), $ex);
return false;
}
}
function ocultarDadosAgente($dadosCampanha)
{
$campoOcultar = array();
foreach ($dadosCampanha as $key => $info) {
ocultarCampo($info, $key, $campoOcultar);
}
foreach ($campoOcultar as $key => $dt) {
if (strpos('disp', $key) !== false) {
$key = str_replace('disp', 'cont', $key);
}
$dadosCampanha[$key] = ocultarLGPD($key, $dt);
}
return $dadosCampanha;
}
function RegistraContatoAgente($matricula, $dadosCampanha)
{
$query = "insert "
. " into pbx_campanha_operacao(matricula,cmp_id,list_id,cont_id,conf_id,cmp_descricao,list_nome,cont_identificador,cont_param1,cont_param2,"
. "cont_param3,cont_param4,cont_param5,disp_param1,disp_param2,disp_param3,disp_param4,disp_param5,conf_fone,lista_fones_discador, cmpo_status)"
. " values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,'0')";
$query = sprintf(
$query,
QuotedStr($matricula),
QuotedStr($dadosCampanha["cmp_id"]),
QuotedStr($dadosCampanha["list_id"]),
QuotedStr($dadosCampanha["cont_id"]),
QuotedStr($dadosCampanha["conf_id"]),
QuotedStr($dadosCampanha["cmp_descricao"]),
QuotedStr($dadosCampanha["list_nome"]),
QuotedStr($dadosCampanha["cont_identificador"]),
QuotedStr($dadosCampanha["cont_param1"]),
QuotedStr($dadosCampanha["cont_param2"]),
QuotedStr($dadosCampanha["cont_param3"]),
QuotedStr($dadosCampanha["cont_param4"]),
QuotedStr($dadosCampanha["cont_param5"]),
QuotedStr($dadosCampanha["disp_param1"]),
QuotedStr($dadosCampanha["disp_param2"]),
QuotedStr($dadosCampanha["disp_param3"]),
QuotedStr($dadosCampanha["disp_param4"]),
QuotedStr($dadosCampanha["disp_param5"]),
QuotedStr($dadosCampanha["conf_fone"]),
QuotedStr($dadosCampanha["lista_fones_discador"])
);
$result = pg_query($query);
if (!$result) {
GeraExcept("ERRO; Erro ao reservar contato para discagem!");
}
return GetCurrVal('pbx_campanha_operacao');
}
function GetFonesContato($contId, $value)
{
global $sZListaFones;
$lista = sprintf('<select name="ListaFones" type="text" id="ListaFones" style="%s" onchange="SetFoneDiscador();">', $sZListaFones);
/*
* Pega a lista de status da opera<EFBFBD><EFBFBD>o.
*/
$query = "select conf_id, conf_fone from pbx_campanha_contato_fone where cont_id = '$contId' and conf_status_lista <> 3 order by conf_id";
$result = pg_query($query);
$value = trim($value);
while ($dados = @pg_fetch_row($result)) {
$id = trim($dados[0]);
$desc = trim($dados[1]);
$sel = ($value == $desc) ? " selected" : "";
$lista .= "<option value=\"$id\"$sel>$desc</option>";
}
$lista .= "</select>";
return $lista;
}
function GetStatusDiscador($value, $cmpId = 0)
{
$lista = '';
$org_id = GetOrganizacao();
/*
* Pega a lista de status da opera<EFBFBD><EFBFBD>o.
*/
$query = "SELECT ctst_id, ctst_nome
FROM pbx_campanha_contato_status
WHERE ctst_status = 1
AND NOT EXISTS(SELECT '' FROM pbx_status_contato_campanha WHERE cmp_id = '{$cmpId}')
AND org_id = $org_id
UNION
SELECT a.ctst_id, a.ctst_nome
FROM pbx_campanha_contato_status a, pbx_status_contato_campanha b
WHERE b.ctst_id = a.ctst_id
AND b.cmp_id = '{$cmpId}'
AND a.ctst_status = 1
AND a.org_id = $org_id
ORDER BY ctst_nome;";
$result = pg_query($query);
$sel = $value ? " selected" : "";
$lista = "<option value='' $sel>---------------</option>";
while ($dados = @pg_fetch_row($result)) {
$sel = ($value == $dados[0]) ? " selected" : "";
$id = $dados[0];
$desc = $dados[1];
$lista .= "<option value=\"$id\"$sel>$desc</option>";
}
$lista .= "</select>";
return $lista;
}
function GetDadosIntegracao($dadosIntegracao)
{
$arLabels = array('disp_param0', 'disp_param1', 'disp_param2', 'disp_param3', 'disp_param4', 'disp_param5');
$arValuesId = array('cont_identificador', 'cont_param1', 'cont_param2', 'cont_param3', 'cont_param4', 'cont_param5');
$arDisplay = array();
$arValues = array();
$arDados = array_slice(explode('|', trim($dadosIntegracao)), 3, 6);
if (!count($arDados)) {
return false;
}
foreach ($arDados as $values) {
list($label, $value) = explode(":", $values);
$arDisplay[] = $label;
$arValues[] = $value;
}
$arDados = array();
for ($i = 0; $i < count($arLabels); $i++) {
$arDados[$arLabels[$i]] = isset($arDisplay[$i]) ? $arDisplay[$i] : '';
}
for ($i = 0; $i < count($arValuesId); $i++) {
$arDados[$arValuesId[$i]] = isset($arValues[$i]) ? $arValues[$i] : '';
}
return $arDados;
}
function RealizaConsultaIntegracao()
{
include '/var/lib/asterisk/scripts/integracao/localDataBase.php';
$patScript = "/var/lib/asterisk/scripts/integracao/custom/";
$codCliente = $_GET['codigoCliente'];
try {
$query = "SELECT prm_select_integracao FROM pbx_parametros";
$sql = pg_query($query);
$idMetodo = pg_fetch_row($sql);
$row = GetMetodoIntegra($idMetodo[0]);
$script = trim($row["itgm_comando"]);
$nomeMetodo = $patScript . $script;
if (!file_exists($nomeMetodo)) {
GeraExcept("RealizaConsultaIntegracao", "O arquivo informado n<EFBFBD>o existe! Nome: $script");
return true;
}
if (!empty($nomeMetodo)) {
include($nomeMetodo);
$telefone = explode(',', $cliente['fone']);
$celular = explode(',', $cliente['celular']);
$numeroCliente = array(
soNumero($celular[0]),
soNumero($telefone[0])
);
$numeroCliente = json_encode($numeroCliente);
$_SESSION['SSIntegracaoAtivo'] = $infoIntegracao;
} else {
GeraExcept('RealizaConsultaIntegracao', 'Nome do Metodo nao encontrado!');
}
if ($celular[0] && $telefone[0]) {
SetIntegracaoContato($retorno_cliente);
echo 'OK;' . $numeroCliente;
} else {
echo 'ERRO;Cliente nao encontrado!';
}
} catch (Exception $ex) {
$ex->getMessage();
}
}
function ClassificacaoAudioEscuta($audioFone)
{
$cmd = array();
$resp = "";
if (strpos($audioFone, 'AUTO') !== false) {
$audioFone = explode('|', $audioFone)[1];
$cmd["Channel"] = sprintf('Local/%s@app-callcenter', GetRamalMonitorar(RAMAL_MONITOR_AUDIO));
} else {
$cmd["Channel"] = GetRamalMonitorar(CANAL_MONITOR_AUDIO);
}
$cmd["Action"] = "Originate";
$cmd["Context"] = 'audio-escuta-apl';
$cmd["Exten"] = 's';
$cmd["Priority"] = '1';
$cmd["CallerID"] = GetRamalMonitorar(RAMAL_MONITOR_AUDIO);
$cmd["Variable"] = sprintf("AVISO=OK,AUDIO=%s", $audioFone);
$retCmd = CommandoAmi($cmd);
if ($retCmd === false) {
$resp = "ERRO";
} else {
$retCmd = strtoupper(trim($retCmd));
$resp = $retCmd == 'OK' ? "OK" : "ERRO";
}
return $resp;
}
function GetClientOperacao($matricula)
{
$org_id = GetOrganizacao();
$query = "SELECT cont_identificador FROM pbx_campanha_operacao WHERE cmpo_id = (SELECT max(cmpo_id)::INT FROM pbx_campanha_operacao WHERE matricula = '{$matricula}' and org_id IN ($org_id, 0)) and org_id IN ($org_id, 0)";
$result = pg_query($query);
return pg_fetch_assoc($result);
}
function GetContidClient($contid, $uniqueid)
{
if ($uniqueid || $uniqueid != 'null') {
$query = "SELECT client_id
FROM pbx_campanha_operacao a
INNER JOIN pbx_cliente b ON a.cont_id = b.cont_id
WHERE a.cont_id = {$contid}
AND client_id NOT IN (SELECT client_id FROM pbx_cliente_audio x WHERE x.client_id = b.client_id) ";
$result = pg_query($query);
$res = pg_fetch_assoc($result);
if (!$res) {
return;
}
$query = sprintf("INSERT INTO pbx_cliente_audio (client_id, uid) VALUES(%s, %s);", QuotedStr($res['client_id']), $uniqueid);
$result = pg_query($query);
GravaLog("INSERE CLIENTE AUDIO: QUERY: $query | DADOS: [uniqueid: $uniqueid] [contid: $contid] \n", CONF_PATH_LOG_DISCADORCLIENT);
if ($result) {
return true;
}
}
return false;
}