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; */ } ?>