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.
 
 
 
 
 
 

456 lines
16 KiB

<?php
/*
* Array ira armazenar bilhetes retornados do banco de dados
*/
$tableBilhetes = array();
/*
* Indice para localizar um registro no array $tableBilhetes
*/
$pkBilhetes = array();
/*
* Indica que um determinado uniqueid possui transferencia/consulta
* e marca tambem o final dessa operações
*/
$idxAccountCode = array();
/*
* Quando ocorre uma varias transferencias, torna-se dificil manter um link
* entre as diversas transferncia e o registro que gerou o chamada essa variavel
* é uma tentativa de estabelecer esta ligação, pois toda vez que "lastapp" = TRANSFERREDCALL
* o registro imediatamete anterior possui a mesma calldate e este por sua vez tem
* "accountcode" = "uniqueid" do registro original.
*/
$idxLinkTransfer = array();
/*
* Esta variavel se baseia em "lastapp" = TRANSFERREDCALL
* e $idxLinkTransfer para armazenar o numero de transferencias
* ocorridos durante a chamada.
*/
$idxTransfer = array();
/*
* Esta consulta traz informações adicionais retornados de
* pbx_bilhetes_complemento
*/
$tableCompl = array();
/*
* Indice para uniqueid2/direcao da pbx_bilhetes_compleemto
* pode ser usadao para verificar tipo de operacao:
* $pkCompl["1342811031.6990"]["entrada-pstn"] => Chamada de Entrada
* $pkCompl["1342811031.6990"]["saida-pstn"] => Chamada de saida
* $pkCompl["1342811031.6990"]["app-conta-senha"] => Indica uma chamada com conta e senha
*/
$pkCompl = array();
//$ignorado, $ramal, $sep, $data, $sep, $duracao, $sep, $rota, $sep, $tronco, $sep, $numero, $sep, $ramaltransfer, $sep, $tpLigacao
/*
* Armazenha o bilhete analisado
*/
$dadosRel = array("ramal" => "", "data" => "", "duracao" => "", "numero" => "", "rota" => "", "tronco" => "", "ramaltransfer" => "", "tpLigacao" => "", "contaSenha" => "", "ramalOrig" => "", "procid" => "", "reg" => "", "uid" => "0", "id" => "0");
/*
* Armazena bilhetes processados. Na verdade uma coleção $dadosRel;
*/
$bilhetsProc = array();
/*
* Indica que a chamada foi realizada ou recebida por um ramal associado a uma conta e senha
*/
$contaSenha = 0;
//print_r(ClassificaBilhetes());
function GetDadosBilhetes($dataBilhete, $type = INTEGRA_SOCKET) {
$conn = $GLOBALS["conn"];
/*
* Retorna dos os bilhetes gerados na data passada
*/
$queryBil = "select a.id_bilhetes, a.calldate, a.src, a.dst, a.dcontext, a.channel, a.dstchannel, a.lastapp, a.duration, a.billsec, a.accountcode, a.uniqueid,
to_char(a.calldate, 'dd/mm/yy hh24:mi') AS data, a.billsec * interval '1 second' as duracao,
cast(substr(a.dstchannel, strpos(a.dstchannel, '/')+1) as char(4)) AS linhatronco, cast(a.dst as char(30)) AS numero, 'O' as tipo_ligacao
from pbx_bilhetes a
where a.calldate::date = '$dataBilhete'
and a.dcontext <> 'ext-anuncios'
and exists(select '' from pbx_bilhetes_complemento where uniqueid2 = a.uniqueid and direcao = 'saida-pstn')";
if ($type == INTEGRA_SERIAL)
$queryBil .= " and not exists(select '' from pbx_bilhetes_online where id_bilhetes = a.id_bilhetes )";
$queryBil .= " order by a.uniqueid, a.id_bilhetes";
//and (case when((a.dcontext like '%ura%') or (a.dcontext = 'ext-ramais'))then 1 else 0 end) = 0
/*
* Informações complementares sobre os bilhetes
*/
//LogTrf('GetDadosBilhetes', 'lita bilhetes', $queryBil);
$queryCompl = " select a.id_bilhetes, a.calldate, a.src, a.dst, a.dcontext, a.channel, a.dstchannel, a.lastapp, a.duration, a.billsec, a.accountcode, a.uniqueid,
b.uniqueid2, coalesce(b.direcao, 'NOTSET') as direcao, b.id, coalesce(b.conta, '0') AS conta, b.fone, b.destino, b.data_registro, b.id_usuario, b.agente, b.dac
from pbx_bilhetes a
left join pbx_bilhetes_complemento b on b.uniqueid2 = a.uniqueid
where a.calldate::date = '$dataBilhete'
and a.dcontext <> 'ext-anuncios'";
if ($type == INTEGRA_SERIAL)
$queryCompl .= " and not exists(select '' from pbx_bilhetes_online where id_bilhetes = a.id_bilhetes )";
$queryCompl .= " order by a.uniqueid, a.id_bilhetes";
// LogTrf('GetDadosBilhetes', 'lita bilhetes como', $queryCompl);
//and (case when(dcontext like '%ura%')then 1 else 0 end) = 0
$tableBilhetes = &$GLOBALS["tableBilhetes"];
$pkBilhetes = &$GLOBALS["pkBilhetes"];
$idxAccountCode = &$GLOBALS["idxAccountCode"];
$idxLinkTransfer = &$GLOBALS["idxLinkTransfer"];
$idxTransfer = &$GLOBALS["idxTransfer"];
/*
* Executa consulta no banco de dados
*/
$result = pg_query($conn, $queryBil);
/*
* Posição que um determinado bilhete esta no array $tableBilhetes
*/
$idx = 0;
while ($dados = pg_fetch_array($result)) {
$tableBilhetes[$idx] = $dados;
/*
* Guarda uma referencia por "id_bilhetes" no array $tableBilhetes
*/
$pkBilhetes[$dados["id_bilhetes"]] = $idx;
$uid = trim($dados["uniqueid"]);
$accode = trim($dados["accountcode"]);
$lastApp = trim(strtoupper($dados["lastapp"]));
$callDate = trim(strtoupper($dados["calldate"]));
if (!empty($accode)) {
// Fim de uma transferencia ou consulta
$idxAccountCode[$dados["accountcode"]] = $idx;
$accode = '';
}
if (!isset($idxLinkTransfer[$callDate])) {
// Utilizado para saber para identificar o numero de transferencias baseado no parametro "TRANSFERRED CALL"
$acd = $dados["accountcode"];
$idxLinkTransfer[$callDate] = !empty($acd) ? $acd : $uid;
}
if ($lastApp == "TRANSFERRED CALL") {
// O registro contendo este
$link = $idxLinkTransfer[$callDate];
if (!isset($idxTransfer[$link])) {
$idxTransfer[$link] = 1;
} else {
$idxTransfer[$link] ++;
}
}
$idx++;
}
$tableCompl = &$GLOBALS["tableCompl"];
$pkCompl = &$GLOBALS["pkCompl"];
$result = pg_query($conn, $queryCompl);
$idx = 0;
while ($dados = pg_fetch_array($result)) {
$tableCompl[$idx] = $dados;
$uid = trim($dados["uniqueid"]);
$dir = trim(strtoupper($dados["direcao"]));
$conta = ($dir == 'INTERNA') ? trim($dados["destino"]) : trim($dados["conta"]);
$pkCompl[$uid][$dir] = $conta;
$idx++;
}
}
function InicializaBilhetes() {
$tableBilhetes = &$GLOBALS["tableBilhetes"];
$pkBilhetes = &$GLOBALS["pkBilhetes"];
$idxAccountCode = &$GLOBALS["idxAccountCode"];
$idxLinkTransfer = &$GLOBALS["idxLinkTransfer"];
$idxTransfer = &$GLOBALS["idxTransfer"];
$tableCompl = &$GLOBALS["tableCompl"];
$pkCompl = &$GLOBALS["pkCompl"];
$bilhetsProc = &$GLOBALS["bilhetsProc"];
$tableBilhetes = array();
$pkBilhetes = array();
$idxAccountCode = array();
$idxLinkTransfer = array();
$idxTransfer = array();
$tableCompl = array();
$pkCompl = array();
$bilhetsProc = array();
}
function ClassificaBilhetes($dataBilhete, $type = INTEGRA_SOCKET) {
InicializaBilhetes();
GetDadosBilhetes($dataBilhete, $type);
$tableBilhetes = $GLOBALS["tableBilhetes"];
$tableProcessados = &$GLOBALS["tableProcessados"];
$tableExcluidos = &$GLOBALS["tableExcluidos"];
$dadosRel = &$GLOBALS["dadosRel"];
$numBilhetes = count($tableBilhetes);
$clas = "";
$duracao = 0;
for ($i = 0; $i < $numBilhetes; $i++) {
$dados = $tableBilhetes[$i];
$id = $dados['id_bilhetes'];
$src = $dados["src"];
$dst = $dados["dst"];
$call = $dados["calldate"];
$lst = strtoupper(trim($dados["lastapp"]));
$uid = $dados["uniqueid"];
$billsec = $dados["billsec"];
if (!isset($tableProcessados[$id]) && (!isset($tableExcluidos[$id]))) {
if (VerificaChamdaDireta($uid)) {
$tp = VerificaTipoChamada($uid);
$ct = VerificaContaSenha($uid);
$tipo = $tp;
$duracao = $billsec;
$dadosRel["ramal"] = VerificaSigame($uid) ? GetRamalSigame($uid) : ($tipo == "R" ? $dst : ($ct ? $ct : $src));
$dadosRel["data"] = $dados["data"];
$dadosRel["duracao"] = $duracao;
$dadosRel["numero"] = $tipo == "R" ? $src : $dst;
$dadosRel["rota"] = "";
$dadosRel["tronco"] = $dados["linhatronco"];
$dadosRel["ramaltransfer"] = "";
$dadosRel["tpLigacao"] = $tp;
$dadosRel["contaSenha"] = $ct;
$dadosRel["ramalOrig"] = $tipo == "R" ? $dst : $src;
$dadosRel["procid"] = "ClassificaBilhetes";
$dadosRel["reg"] = "direta";
$dadosRel["uid"] = $uid;
$dadosRel["id"] = $id;
SetaBilhetes($dadosRel);
} else if (VerificaTransf($uid)) {
$tp = VerificaTipoChamada($uid);
$ct = VerificaContaSenha($uid);
GetTransfer($i, $uid, $tp, $ct);
} else if (VerificaConsulta($uid)) {
$tp = VerificaTipoChamada($uid);
$ct = VerificaContaSenha($uid);
GetConsulta($i, $uid, $tp, $ct);
} else {
$clas = "none";
$tableExcluidos[$id] = $i;
}
}
}
return $GLOBALS["bilhetsProc"];
}
function GetTransfer($i, $uid, $tipo, $contaSenha) {
$tableBilhetes = $GLOBALS["tableBilhetes"];
$numBilhetes = count($tableBilhetes);
$tableProcessados = &$GLOBALS["tableProcessados"];
$finalOper = VerificaConsulta($uid);
$dadosRel = array();
$srcDst = array();
$duracao = 0;
$start = 0;
$relaciona = 0;
for (; $i < $numBilhetes; $i++) {
$dados = $tableBilhetes[$i];
$id = $dados['id_bilhetes'];
$src = $dados["src"];
$dst = $dados["dst"];
$call = $dados["calldate"];
$lst = strtoupper(trim($dados["lastapp"]));
$uid = $dados["uniqueid"];
$billsec = $dados["billsec"];
if (!$start) {
$oldSrc = $src;
$oldDst = $dst;
$data = $dados["data"];
$linhaTronco = $dados["linhatronco"];
$oldCall = $call;
$oldUid = $uid;
$oldId = $id;
$duracao = $billsec;
$srcDst[$src] = 1;
$srcDst[$dst] = 1;
$tableProcessados[$id] = 1;
}
if ($start) {
$relaciona = (isset($srcDst[$src]) || isset($srcDst[$dst]));
if (($lst == "DIAL") && ($oldCall == $call) && ($oldUid == $uid)) {
$duracao = $billsec;
} else if (($lst == "DIAL") && ($relaciona)) {
$duracao += $billsec;
$srcDst[$src] = 1;
$srcDst[$dst] = 1;
}
if ($relaciona) {
$tableProcessados[$id] = 1;
}
if ($i == $finalOper) {
$dadosRel["ramal"] = $tipo == "R" ? $oldDst : ($contaSenha ? $contaSenha : $oldSrc);
$dadosRel["data"] = $data;
$dadosRel["duracao"] = $duracao;
$dadosRel["numero"] = $tipo == "R" ? $oldSrc : $oldDst;
$dadosRel["rota"] = "";
$dadosRel["tronco"] = $linhaTronco;
$dadosRel["ramaltransfer"] = "";
$dadosRel["tpLigacao"] = $tipo;
$dadosRel["contaSenha"] = $contaSenha;
$dadosRel["ramalOrig"] = $tipo == "R" ? $oldDst : $oldSrc;
$dadosRel["procid"] = "GetTransfer";
$dadosRel["reg"] = "transfer";
$dadosRel["uid"] = $oldUid;
$dadosRel["id"] = $oldId;
SetaBilhetes($dadosRel);
return true;
}
}
$start++;
}
return false;
}
function GetConsulta($i, $uid, $tipo, $contaSenha) {
$tableBilhetes = $GLOBALS["tableBilhetes"];
$numBilhetes = count($tableBilhetes);
$tableProcessados = &$GLOBALS["tableProcessados"];
$finalOper = VerificaConsulta($uid);
$dadosRel = array();
$srcDst = array();
$duracao = 0;
$start = 0;
$relaciona = 0;
for (; $i < $numBilhetes; $i++) {
$dados = $tableBilhetes[$i];
$id = $dados['id_bilhetes'];
$uid = $dados["uniqueid"];
$billsec = $dados["billsec"];
$src = $dados["src"];
$dst = $dados["dst"];
if (!$start) {
$oldSrc = $src;
$oldDst = $dst;
$data = $dados["data"];
$linhaTronco = $dados["linhatronco"];
$oldUid = $uid;
$oldId = $id;
$duracao = $billsec;
$srcDst[$src] = 1;
$tableProcessados[$id] = 1;
}
if ($start) {
$relaciona = isset($srcDst[$src]);
if (($relaciona) && ($oldUid == $uid)) {
$duracao = $billsec;
}
if ($relaciona) {
$tableProcessados[$id] = 1;
}
if ($i == $finalOper) {
$dadosRel["ramal"] = $tipo == "R" ? $oldDst : ($contaSenha ? $contaSenha : $oldSrc);
$dadosRel["data"] = $data;
$dadosRel["duracao"] = $duracao;
$dadosRel["numero"] = $tipo == "R" ? $oldSrc : $oldDst;
$dadosRel["rota"] = "";
$dadosRel["tronco"] = $linhaTronco;
;
$dadosRel["ramaltransfer"] = "";
$dadosRel["tpLigacao"] = $tipo;
$dadosRel["contaSenha"] = $contaSenha;
$dadosRel["ramalOrig"] = $tipo == "R" ? $oldDst : $oldSrc;
$dadosRel["procid"] = "GetConsulta";
$dadosRel["reg"] = "consulta";
$dadosRel["uid"] = $oldUid;
$dadosRel["id"] = $oldId;
SetaBilhetes($dadosRel);
return true;
}
}
$start++;
}
return false;
}
function VerificaProcessado($idx) {
$tableProcessados = &$GLOBALS["tableProcessados"];
$tableExcluidos = &$GLOBALS["tableExcluidos"];
return isset($tableProcessados[$idx]) || isset($tableExcluidos[$idx]);
}
function VerificaContaSenha($uid) {
$pkCompl = $GLOBALS["pkCompl"];
return isset($pkCompl[$uid]["APP-CONTA-SENHA"]) ? $pkCompl[$uid]["APP-CONTA-SENHA"] : 0;
}
function GetRamalSigame($uid) {
$pkCompl = $GLOBALS["pkCompl"];
return $pkCompl[$uid]["INTERNA"];
}
function VerificaTransf($uid) {
$idxTransfer = $GLOBALS["idxTransfer"];
return isset($idxTransfer[$uid]) ? $idxTransfer[$uid] : 0;
}
function VerificaConsulta($uid) {
$idxAccountCode = $GLOBALS["idxAccountCode"];
return isset($idxAccountCode[$uid]) ? $idxAccountCode[$uid] : 0;
}
function VerificaChamdaDireta($uid) {
return (!VerificaConsulta($uid)) && ((VerificaTipoSaida($uid)) || (VerificaTipoEntrada($uid)));
}
function VerificaTipoChamada($uid) {
$pkCompl = $GLOBALS["pkCompl"];
//return isset($pkCompl[$uid]["ENTRADA-PSTN"]) ? "R" : (isset($pkCompl[$uid]["SAIDA-PSTN"]) ? "O" : false);
return isset($pkCompl[$uid]["SAIDA-PSTN"]) ? "O" : "R";
}
function VerificaSigame($uid) {
$pkCompl = $GLOBALS["pkCompl"];
return isset($pkCompl[$uid]["ENTRADA-PSTN"]) && isset($pkCompl[$uid]["SAIDA-PSTN"]);
}
function VerificaTipoEntrada($uid) {
$pkCompl = $GLOBALS["pkCompl"];
return isset($pkCompl[$uid]["ENTRADA-PSTN"]);
}
function VerificaTipoSaida($uid) {
$pkCompl = $GLOBALS["pkCompl"];
return isset($pkCompl[$uid]["SAIDA-PSTN"]);
}
function SetaBilhetes($dadosRel) {
$bilhetsProc = &$GLOBALS["bilhetsProc"];
$bilhetsProc[] = $dadosRel;
/*
$dadosRel["ramal"] = VerificaContaSenha($uid) ? VerificaContaSenha($uid) : (VerificaTipoEntrada($uid) ? $dst : $src) ;
$dadosRel["data"] = $dados["data"];
$dadosRel["duracao"] = $duracao;
$dadosRel["rota"] = "";
$dadosRel["tronco"] = $dados["linhatronco"];
$dadosRel["ramaltransfer"] = "";
$dadosRel["tpLigacao"] = VerificaTipoEntrada($uid) ? "O" : "R";
$dadosRel["procid"] = "ClassificaBilhetes";
$dadosRel["reg"] = $clas;
*/
}
?>