'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 = ""; return $clas; } function ConectarDac() { /* * Verifica se o usuário clicou no botao desconectar. */ if (!isset($_POST["btConDac"])) return false; return strtoupper($_POST["btConDac"]) == 'CONECTAR'; /* * Retorna true se o usuario nã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ã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ário clicou no botao desconectar. */ if (!isset($_POST["btConDac"])) return false; /* * Retorna true se o usuá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çoes para o alerta sonoro na classificaçã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ão foi possí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ão foi possí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ão foi possí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ção de discagem o agente é colocado antes como indisponivel * para fila, o status atual é 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ção esse registro é recuperado e envidao para o agente. Este registro foi * importado da lista para o agente logado, o registro em quetão fica disponí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çã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ç?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çã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('"; return $lista; } function GetStatusDiscador($value, $cmpId = 0) { $lista = ''; $org_id = GetOrganizacao(); /* * Pega a lista de status da operaçã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 = ""; while ($dados = @pg_fetch_row($result)) { $sel = ($value == $dados[0]) ? " selected" : ""; $id = $dados[0]; $desc = $dados[1]; $lista .= ""; } $lista .= ""; 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ã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; }