forked from SimplesIP/pabx-app
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
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; |
|
*/ |
|
} |
|
|
|
?>
|
|
|