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.
1038 lines
37 KiB
1038 lines
37 KiB
2 years ago
|
<?php
|
||
|
|
||
|
/*
|
||
|
* Constantes
|
||
|
*/
|
||
|
define("_LOG_MSG_ERROR", 1);
|
||
|
define("_LOG_MSG_ALL", 2);
|
||
|
define("_LOG_MSG_DISPLAY", 3);
|
||
|
|
||
|
/*
|
||
|
* funcoes compartilhadas
|
||
|
* - GetDddPadrao()($numero) -> Se passado um numero retorna concatenado com ddd padrao, se nao retorna somente o ddd.
|
||
|
* - GetSpid($numero) -> Faz pesquisa no banco de dadodos da portabilidade e retorna o sipid da operadora relacionada.
|
||
|
* - GetTipoChamada($destino, $dddPadao) -> verifica se a chamada e para fixo, movel, local ou interurbano pela analise do destino informado.
|
||
|
* Retorna um array contendo tipo dispositivo, tipo da chamada, numero da operadora.
|
||
|
*/
|
||
|
|
||
|
//Funcao verifica operadora - Amarildo Pereira 37 99669 7131
|
||
|
function GetSpid(&$numero) {
|
||
|
$flInter = substr($numero, 0, 2);
|
||
|
if (($flInter != '00') && (substr($numero, 0, 1) == '0'))
|
||
|
$numero = substr($numero, 1);
|
||
|
$tam = strlen($numero);
|
||
|
|
||
|
if (($tam == 8) || (($tam == 9) && (substr($numero, 0, 1) == '9'))) {
|
||
|
$numeroBusca = $numero;
|
||
|
$numeroBusca = GetDddPadrao($numeroBusca);
|
||
|
$tam = strlen($numeroBusca);
|
||
|
$prefixo = substr($numeroBusca, 0, ($tam - 4));
|
||
|
$sufixo = substr($numeroBusca, -4);
|
||
|
|
||
|
return GetSpidBd($numeroBusca, $prefixo, $sufixo);
|
||
|
} else {
|
||
|
/*
|
||
|
* Tenta achar o numero com 10 ou 11 digitos validos.
|
||
|
*/
|
||
|
$prefixo = substr($numero, 0, ($tam - 4));
|
||
|
$sufixo = substr($numero, -4);
|
||
|
|
||
|
$ret = GetSpidBd($numero, $prefixo, $sufixo);
|
||
|
if ($ret)
|
||
|
return $ret;
|
||
|
|
||
|
/*
|
||
|
* Numero fornecido com 11 digitros mas apenas os 10 ultimos seo validos.
|
||
|
*/
|
||
|
$numero = substr($numero, 1);
|
||
|
$tam = strlen($numero);
|
||
|
$prefixo = substr($numero, 0, ($tam - 4));
|
||
|
$sufixo = substr($numero, -4);
|
||
|
|
||
|
return GetSpidBd($numero, $prefixo, $sufixo);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function GetSpidBd($numero, $prefixo, $sufixo) {
|
||
|
$nonoDigito = (strlen($numero) == 11);
|
||
|
$numeroConsulta = $numero;
|
||
|
$numero_Consulta = $numero;
|
||
|
$ddd_ini = substr($numero, 0, 1);
|
||
|
if ($nonoDigito) {
|
||
|
$numeroConsulta = substr($numero, 0, 2) . substr($numero, 3, 8);
|
||
|
}
|
||
|
if ((strlen($numero) == 10) && (($ddd_ini != '4' ) || ($ddd_ini != '5' ))) {
|
||
|
$numero_Consulta = substr($numero, 0, 2) . '9' . substr($numero, 2, 8);
|
||
|
}
|
||
|
$query = "select spid from portabilidade where (tel_doadora = '$numeroConsulta' or tel_doadora = '$numero_Consulta' or tel_doadora = '$numero')";
|
||
|
$result = pg_query($query);
|
||
|
|
||
|
if (!$result || !pg_num_rows($result)) {
|
||
|
$oper = GetOperNumero($numero);
|
||
|
return $oper ? $oper : false;
|
||
|
}
|
||
|
|
||
|
$dados = pg_fetch_row($result);
|
||
|
return !pg_num_rows($result) ? false : $dados[0];
|
||
|
}
|
||
|
|
||
|
function GetOperadoraRelacionada($operadora) {
|
||
|
/*
|
||
|
* funcao busca por operadoras que se relacionam, ou seja, se a operadora
|
||
|
* passada estiver relacionada a outra e porque deve sair pelo tronco dessa,
|
||
|
* ex.: Em algumas localidades a TNL->331 dever sair pelo tronco OI->314.
|
||
|
* Este relacionamento deve ser configurado na aplicacao web menu:
|
||
|
* Ferramentas->Tarifacao/Portabilidade->Operadoras.
|
||
|
*/
|
||
|
$query = "select oper_spid from pbx_operadora_rel where oper_spid_rel = '$operadora'";
|
||
|
$result = pg_query($query);
|
||
|
$dados = pg_fetch_row($result);
|
||
|
|
||
|
/*
|
||
|
* Se nao encontrar uma operadora relacionada, retorna a mesma passada.
|
||
|
*/
|
||
|
return !pg_num_rows($result) ? $operadora : $dados[0];
|
||
|
}
|
||
|
|
||
|
function GetTipoChamada($destino, $dddPadrao = '0') {
|
||
|
/*
|
||
|
* ddd -> 65
|
||
|
* operadodra -> 021
|
||
|
* 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01
|
||
|
* | | | | | | | | | | | | | | | | | |
|
||
|
* 9 2 8 9 3 9 1 3 -> Movel Local 08 digitos iniciado em ['6','7','8','9'].
|
||
|
* 9 9 2 8 9 3 9 1 3 -> Movel Local 09 digitos.
|
||
|
* 6 5 9 9 2 8 9 3 9 1 3 -> Movel Local 11 digitos (ddd = padrao).
|
||
|
* 6 5 9 2 8 9 3 9 1 3 -> Movel Local 10 digitos (ddd = padrao) + numero iniciado em ['6','7','8','9'].
|
||
|
* 6 7 9 2 8 9 3 9 1 3 -> Movel Interurbano 10 digitos (ddd != padrao) + numero iniciado em ['6','7','8','9'].
|
||
|
* 0 2 1 6 7 9 2 8 9 3 9 1 3 -> Movel Interurbano 13 digitos operadora + (ddd != padrao) + numero iniciado em ['6','7','8','9'].
|
||
|
* 0 2 1 6 7 9 9 2 8 9 3 9 1 3 -> Movel Interurbano 14 digitos operadora + (ddd != padrao) + numero iniciado em ['6','7','8','9'].
|
||
|
* 6 7 9 9 2 8 9 3 9 1 3 -> Movel Interurbano 11 digitos (ddd != padrao).
|
||
|
* 3 6 1 4 3 9 1 3 -> Fixo Local 08 digitos iniciado em ['2','3','4','5'].
|
||
|
* 6 5 3 6 1 4 3 9 1 3 -> Fixo Local 10 digitos (ddd = padrao) + numero, iniciado em ['2','3','4','5'].
|
||
|
* 6 7 3 6 1 4 3 9 1 3 -> Fixo Interurbano 10 digitos (ddd != padrao) + numero, iniciado em ['2','3','4','5'].
|
||
|
* 0 2 1 6 7 3 6 1 4 3 9 1 3 -> Fixo Interurbano 13 digitos operadora + (ddd != padrao) + numero, iniciado em ['2','3','4','5'].
|
||
|
*/
|
||
|
$destino = trim($destino);
|
||
|
|
||
|
/*
|
||
|
* Chamadas iniciadas com "00" indicam uma ligacao internacional.
|
||
|
*/
|
||
|
$flInter = substr($destino, 0, 2);
|
||
|
|
||
|
/*
|
||
|
* Nao sendo uma chamada internacional, remove o "0" zero a esquerda.
|
||
|
*/
|
||
|
if (($flInter != '00') && (substr($destino, 0, 1) == '0')) {
|
||
|
$destino = substr($destino, 1);
|
||
|
}
|
||
|
$tam = strlen($destino);
|
||
|
$arMovel = array('6', '7', '8', '9');
|
||
|
$arEmergencia = array('100', '128', '190', '191', '192', '193', '194', '197', '198', '199');
|
||
|
|
||
|
if ($tam == 8) {
|
||
|
$ch = substr($destino, 0, 1);
|
||
|
return array('fixo', 'local', '0');
|
||
|
} else if (($tam > 8) && ($flInter == '00')) {
|
||
|
$oper = substr($destino, 2, 2);
|
||
|
return array('fixo', 'ddi', $oper);
|
||
|
} else if ($tam == 9) {
|
||
|
$ch = substr($destino, 0, 1);
|
||
|
if ($ch == '9') {
|
||
|
return array('movel', 'local');
|
||
|
}
|
||
|
return array('fixo', 'local', '0');
|
||
|
} else if ($tam == 10) {
|
||
|
$dddNum = substr($destino, 0, 2);
|
||
|
$ch = substr($destino, 2, 1);
|
||
|
if (($dddNum == $dddPadrao) && (array_search($ch, $arMovel)))
|
||
|
return array('movel', 'local', '0');
|
||
|
if (($dddNum != $dddPadrao) && (array_search($ch, $arMovel)))
|
||
|
return array('movel', 'inter', '0');
|
||
|
if ($dddNum == $dddPadrao)
|
||
|
return array('fixo', 'local', '0');
|
||
|
else
|
||
|
return array('fixo', 'inter', '0');
|
||
|
}
|
||
|
else if ($tam == 11) {
|
||
|
$dddNum = substr($destino, 0, 2);
|
||
|
$ch = substr($destino, -9, 1);
|
||
|
if ($dddNum == $dddPadrao) {
|
||
|
if ($ch == '9') {
|
||
|
return array('movel', 'local', '0');
|
||
|
}
|
||
|
return array('fixo', 'local', '0');
|
||
|
} else {
|
||
|
if ($ch == '9') {
|
||
|
return array('movel', 'inter', '0');
|
||
|
}
|
||
|
return array('fixo', 'inter', '0');
|
||
|
}
|
||
|
} else if ($tam == 13) {
|
||
|
$oper = substr($destino, 0, 2);
|
||
|
$dddNum = substr($destino, 2, 2);
|
||
|
$ch = substr($destino, 4, 1);
|
||
|
if (($dddNum == $dddPadrao) && (array_search($ch, $arMovel)))
|
||
|
return array('movel', 'local', $oper);
|
||
|
if (($dddNum != $dddPadrao) && (array_search($ch, $arMovel)))
|
||
|
return array('movel', 'inter', $oper);
|
||
|
if ($dddNum == $dddPadrao)
|
||
|
return array('fixo', 'local', '0');
|
||
|
else
|
||
|
return array('fixo', 'inter', $oper);
|
||
|
}
|
||
|
else if ($tam == 14) {
|
||
|
$oper = substr($destino, 0, 3);
|
||
|
$dddNum = substr($destino, 3, 2);
|
||
|
if ($dddNum == $dddPadrao)
|
||
|
return array('movel', 'local', $oper);
|
||
|
else
|
||
|
return array('movel', 'inter', $oper);
|
||
|
}
|
||
|
else {
|
||
|
if ((substr($destino, 0, 4) == '0800') || (array_search($destino, $arEmergencia)) || ($tam < 8))
|
||
|
return array('fixo', 'local', '0');
|
||
|
|
||
|
$dddNum = substr(substr($destino, -10), 0, 2);
|
||
|
$ch = substr(substr($destino, -8), 0, 1);
|
||
|
|
||
|
if (($dddNum == $dddPadrao) && (array_search($ch, $arMovel)))
|
||
|
return array('movel', 'local', '0');
|
||
|
if (($dddNum != $dddPadrao) && (array_search($ch, $arMovel)))
|
||
|
return array('movel', 'inter', '0');
|
||
|
if ($dddNum == $dddPadrao)
|
||
|
return array('fixo', 'local', '0');
|
||
|
else
|
||
|
return array('fixo', 'inter', '0');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Ver0800($destino) {
|
||
|
$destino = trim($destino);
|
||
|
$str = substr($destino, -11);
|
||
|
|
||
|
return substr($str, 0, 4) == '0800' ? $str : $destino;
|
||
|
}
|
||
|
|
||
|
function GravaLogApl($mensagem, $nome_file = '', $login = '') {
|
||
|
$data = date('dmY');
|
||
|
if (!$nome_file) {
|
||
|
$nome_file = 'log_apl';
|
||
|
}
|
||
|
$file = sprintf("/var/log/asterisk/%s.log", $nome_file);
|
||
|
|
||
|
$arq = fopen($file, 'a');
|
||
|
if ($arq) {
|
||
|
$start = '';
|
||
|
foreach ($mensagem as $linha) {
|
||
|
$linha = trim($linha);
|
||
|
|
||
|
if (!$start) {
|
||
|
$start++;
|
||
|
fwrite($arq, sprintf("Inicio: %s%s\n", date('d/m/Y H:i:s'), ($login ? sprintf(" Login: %s", $login) : '')));
|
||
|
}
|
||
|
fwrite($arq, $linha . "\n");
|
||
|
}
|
||
|
fwrite($arq, "Final: $start\n\n");
|
||
|
fclose($arq);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function GetInfoTarifa($troncoId, $numOper, $destino, $dispositivo) {
|
||
|
global $log;
|
||
|
/*
|
||
|
* Informacoes do contrato relacionado ao tronco tronco
|
||
|
*/
|
||
|
$query = "select a.id, a.nome, b.contr_id, b.oper_id, c.oper_numero, b.contr_dia_fechamento, b.contr_bloq_franquia
|
||
|
from pbx_troncos a, pbx_tarif_contrato b, pbx_operadoras c
|
||
|
where b.contr_id = a.contrato
|
||
|
and c.oper_id = b.oper_id
|
||
|
and a.id = '$troncoId'";
|
||
|
|
||
|
$log[] = "GetInfoTarifa[\n.";
|
||
|
$log[] = "Query Contrato: $query";
|
||
|
|
||
|
$result = pg_query($query);
|
||
|
|
||
|
if (!pg_num_rows($result)) {
|
||
|
$info['oper_numero'] = (!$numOper) ? '0' : $numOper;
|
||
|
$info['contr_id'] = 0;
|
||
|
$info['oper_id'] = 0;
|
||
|
$info['trr_tipo_opera'] = 0;
|
||
|
$info['oper_numero_dest'] = $info['oper_numero'];
|
||
|
$info['trr_tarifa_zero'] = 0;
|
||
|
$info['oper_id_dest'] = 0;
|
||
|
$info['contr_id_dest'] = 0;
|
||
|
$info['contr_dia_fechamento'] = 0;
|
||
|
$info['contr_bloq_franquia'] = 0;
|
||
|
$info['prc_id'] = 0;
|
||
|
$info['trr_preco_tipo'] = 0;
|
||
|
$info['trr_vc1'] = 0;
|
||
|
$info['trr_vc2'] = 0;
|
||
|
$info['trr_vc3'] = 0;
|
||
|
$info['trr_vc4'] = 0;
|
||
|
$info['trr_vc5'] = 0;
|
||
|
$info['trr_vc6'] = 0;
|
||
|
$info['trr_vc1_cad'] = 0;
|
||
|
$info['trr_vc2_cad'] = 0;
|
||
|
$info['trr_vc3_cad'] = 0;
|
||
|
$info['trr_vc4_cad'] = 0;
|
||
|
$info['trr_vc5_cad'] = 0;
|
||
|
$info['trr_vc6_cad'] = 0;
|
||
|
$info['trr_vc1_ext'] = 0;
|
||
|
$info['trr_vc2_ext'] = 0;
|
||
|
$info['trr_vc3_ext'] = 0;
|
||
|
$info['trr_vc4_ext'] = 0;
|
||
|
$info['trr_vc5_ext'] = 0;
|
||
|
$info['trr_vc6_ext'] = 0;
|
||
|
$info['prc_franquia'] = 0;
|
||
|
} else {
|
||
|
$dados = pg_fetch_array($result);
|
||
|
|
||
|
$info = array();
|
||
|
$contrId = $dados['contr_id'];
|
||
|
$numOperContrato = $dados['oper_numero'];
|
||
|
$info['oper_numero'] = $dados['oper_numero'];
|
||
|
$info['contr_id'] = $dados['contr_id'];
|
||
|
$info['oper_id'] = $dados['oper_id'];
|
||
|
$tipoOpera = (!$numOper) || ($numOper == $numOperContrato) ? 0 : 1;
|
||
|
$info['trr_tipo_opera'] = $tipoOpera;
|
||
|
$info['oper_numero_dest'] = $tipoOpera ? $numOper : $dados['oper_numero'];
|
||
|
$info['contr_dia_fechamento'] = $dados['contr_dia_fechamento'];
|
||
|
$info['contr_bloq_franquia'] = $dados['contr_bloq_franquia'];
|
||
|
|
||
|
|
||
|
$query = "select count(*) from pbx_tarif_contrato_tarifa_zero where contr_id = '$contrId' and trz_numero = '$destino'";
|
||
|
$result = pg_query($query);
|
||
|
$dados = pg_fetch_row($result);
|
||
|
$info['trr_tarifa_zero'] = $dados[0];
|
||
|
|
||
|
$queryPrec = "select prc_id, prc_tipo, prc_franquia, prc_franquia_movel, prc_franquia_preco, prc_preco_vc1, prc_preco_vc2,
|
||
|
prc_preco_vc3,prc_preco_vc4, prc_preco_vc5, prc_preco_vc6, a.prc_preco_vc1_cad, a.prc_preco_vc2_cad, a.prc_preco_vc3_cad, a.prc_preco_vc4_cad, a.prc_preco_vc5_cad,a.prc_preco_vc6_cad, a.prc_preco_vc1_ext,
|
||
|
a.prc_preco_vc2_ext, a.prc_preco_vc3_ext, a.prc_preco_vc4_ext, a.prc_preco_vc5_ext,a.prc_preco_vc6_ext, b.oper_id, b.contr_id
|
||
|
from pbx_tarif_contrato_preco a, pbx_tarif_contrato b
|
||
|
where b.contr_id = a.contr_id
|
||
|
and a.prc_id = (
|
||
|
select max(prc_id) as prc_id from pbx_tarif_contrato_preco
|
||
|
where contr_id = %s
|
||
|
and prc_vigencia <= now()::date
|
||
|
)";
|
||
|
|
||
|
if ($tipoOpera) {
|
||
|
$queryCompl = sprintf('select b.contr_id from pbx_operadoras a, pbx_tarif_contrato b where b.oper_id = a.oper_id and b.contr_tipo = %s and a.oper_numero = %s', QuotedStr($dispositivo), QuotedStr($numOper));
|
||
|
$query = sprintf($queryPrec, "($queryCompl)");
|
||
|
$log[] = "Query preco: $query";
|
||
|
$result = pg_query($query);
|
||
|
$dados = pg_fetch_array($result);
|
||
|
}
|
||
|
|
||
|
if ((!$tipoOpera) || (($tipoOpera) && (!pg_num_rows($result)))) {
|
||
|
$query = sprintf($queryPrec, QuotedStr($contrId));
|
||
|
$log[] = "Query preco: $query";
|
||
|
$result = pg_query($query);
|
||
|
$dados = pg_fetch_array($result);
|
||
|
}
|
||
|
|
||
|
if (!$result) {
|
||
|
$erro = error_get_last();
|
||
|
$log[] = "Erro: " . $erro['message'] . " Cmd: $query";
|
||
|
}
|
||
|
|
||
|
$info['oper_id_dest'] = $dados['oper_id'];
|
||
|
$info['contr_id_dest'] = $dados['contr_id'];
|
||
|
$info['prc_id'] = $dados['prc_id'];
|
||
|
$info['trr_preco_tipo'] = trim($dados['prc_tipo']);
|
||
|
$info['trr_vc1'] = $dados['prc_preco_vc1'];
|
||
|
$info['trr_vc2'] = $dados['prc_preco_vc2'];
|
||
|
$info['trr_vc3'] = $dados['prc_preco_vc3'];
|
||
|
$info['trr_vc4'] = $dados['prc_preco_vc4'];
|
||
|
$info['trr_vc5'] = $dados['prc_preco_vc5'];
|
||
|
$info['trr_vc6'] = $dados['prc_preco_vc6'];
|
||
|
$info['trr_vc1_cad'] = $dados['prc_preco_vc1_cad'];
|
||
|
$info['trr_vc2_cad'] = $dados['prc_preco_vc2_cad'];
|
||
|
$info['trr_vc3_cad'] = $dados['prc_preco_vc3_cad'];
|
||
|
$info['trr_vc4_cad'] = $dados['prc_preco_vc4_cad'];
|
||
|
$info['trr_vc5_cad'] = $dados['prc_preco_vc5_cad'];
|
||
|
$info['trr_vc6_cad'] = $dados['prc_preco_vc6_cad'];
|
||
|
$info['trr_vc1_ext'] = $dados['prc_preco_vc1_ext'];
|
||
|
$info['trr_vc2_ext'] = $dados['prc_preco_vc2_ext'];
|
||
|
$info['trr_vc3_ext'] = $dados['prc_preco_vc3_ext'];
|
||
|
$info['trr_vc4_ext'] = $dados['prc_preco_vc4_ext'];
|
||
|
$info['trr_vc5_ext'] = $dados['prc_preco_vc5_ext'];
|
||
|
$info['trr_vc6_ext'] = $dados['prc_preco_vc6_ext'];
|
||
|
$info['prc_franquia'] = $dados['prc_franquia'];
|
||
|
}
|
||
|
|
||
|
return $info;
|
||
|
}
|
||
|
|
||
|
function GetTempoPrepago($db, $contaSenha, $origem, $destino, $tronco) {
|
||
|
/*
|
||
|
* Esta funcao havalia se a origem esta incluida no sistema de prepago.
|
||
|
* Retorna o tempo disponivel para conversacao conforme o destino.
|
||
|
* Retorna -1 se nao estiver habilitado, se nao existir.
|
||
|
* Retorna -2 se estiver incluido no tarifa 0.
|
||
|
* Retorna -3 se retornar erro.
|
||
|
*/
|
||
|
|
||
|
$query = "select habilita_prepago, saldo_prepago, (select prm_prepago from pbx_parametros limit 1) as pre_pago from pbx_prepago where tipo = '$contaSenha' and id = '$origem'";
|
||
|
$result = pg_query($db, $query);
|
||
|
|
||
|
/*
|
||
|
* Numero inexistente ou erro na consulta.
|
||
|
*/
|
||
|
if (!$result)
|
||
|
return -3;
|
||
|
if (!pg_num_rows($result))
|
||
|
return -1;
|
||
|
|
||
|
$dados = pg_fetch_array($result);
|
||
|
|
||
|
/*
|
||
|
* Nao esta habilitado nos parametros ou a origem nao esta habilitada.
|
||
|
*/
|
||
|
if (!$dados['pre_pago'] || !$dados['habilita_prepago'])
|
||
|
return -1;
|
||
|
|
||
|
/*
|
||
|
* Nao tem saldo.
|
||
|
*/
|
||
|
$saldoPrepago = $dados['saldo_prepago'];
|
||
|
if (!$saldoPrepago)
|
||
|
return 0;
|
||
|
|
||
|
$dddPadrao = GetDddPadrao();
|
||
|
$tpChamada = GetTipoChamada($destino, $dddPadrao);
|
||
|
$dispositivo = $tpChamada[0];
|
||
|
$tipoChamada = $tpChamada[1];
|
||
|
$numOper = $tpChamada[2];
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Esta funcao retorna informacoes sobre o contrato e precos
|
||
|
*/
|
||
|
$infoContrato = GetInfoTarifa($tronco, $numOper, $origem, $dispositivo);
|
||
|
if (($dispositivo == 'fixo') && ($tipoChamada == 'local')) {
|
||
|
$info['trr_vc_cad'] = $infoContrato['trr_vc1_cad'];
|
||
|
$info['trr_vc_ext'] = $infoContrato['trr_vc1_ext'];
|
||
|
$info['trr_vc'] = 'vc1';
|
||
|
$info['trr_preco'] = $infoContrato['trr_vc1'];
|
||
|
}
|
||
|
if (($dispositivo == 'fixo') && ($tipoChamada == 'inter')) {
|
||
|
$info['trr_vc_cad'] = $infoContrato['trr_vc2_cad'];
|
||
|
$info['trr_vc_ext'] = $infoContrato['trr_vc2_ext'];
|
||
|
$info['trr_vc'] = 'vc2';
|
||
|
$info['trr_preco'] = $infoContrato['trr_vc2'];
|
||
|
}
|
||
|
if (($dispositivo == 'fixo') && ($tipoChamada == 'ddi')) {
|
||
|
$info['trr_vc_cad'] = $infoContrato['trr_vc5_cad'];
|
||
|
$info['trr_vc_ext'] = $infoContrato['trr_vc5_ext'];
|
||
|
$info['trr_vc'] = 'vc5';
|
||
|
$info['trr_preco'] = $infoContrato['trr_vc5'];
|
||
|
}
|
||
|
if (($dispositivo == 'movel') && ($tipoChamada == 'local')) {
|
||
|
$info['trr_vc_cad'] = $infoContrato['trr_vc3_cad'];
|
||
|
$info['trr_vc_ext'] = $infoContrato['trr_vc3_ext'];
|
||
|
$info['trr_vc'] = 'vc3';
|
||
|
$info['trr_preco'] = $infoContrato['trr_vc3'];
|
||
|
}
|
||
|
if (($dispositivo == 'movel') && ($tipoChamada == 'inter')) {
|
||
|
$info['trr_vc_cad'] = $infoContrato['trr_vc4_cad'];
|
||
|
$info['trr_vc_ext'] = $infoContrato['trr_vc4_ext'];
|
||
|
$info['trr_vc'] = 'vc4';
|
||
|
$info['trr_preco'] = $infoContrato['trr_vc4'];
|
||
|
}
|
||
|
if (($dispositivo == 'movel') && ($tipoChamada == 'ddi')) {
|
||
|
$info['trr_vc_cad'] = $infoContrato['trr_vc6_cad'];
|
||
|
$info['trr_vc_ext'] = $infoContrato['trr_vc6_ext'];
|
||
|
$info['trr_vc'] = 'vc6';
|
||
|
$info['trr_preco'] = $infoContrato['trr_vc6'];
|
||
|
}
|
||
|
|
||
|
//$log[] = print_r($infoContrato, true);
|
||
|
//@GravaLogApl($log, 'pre_pago_log');
|
||
|
/*
|
||
|
* Verifica se o destino esta incluido no tarifa 0.
|
||
|
*/
|
||
|
if ($infoContrato['trr_tarifa_zero']) {
|
||
|
return -2;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Tarifacao(trr_preco_tipo) 1 por minuto tipo, 2 por chamada.
|
||
|
* O preco esta indicado em trr_preco.
|
||
|
*/
|
||
|
$tipoPreco = (int) $infoContrato['trr_preco_tipo'];
|
||
|
$tipoMinuto = ($tipoPreco == 1);
|
||
|
$preco = $info['trr_preco'];
|
||
|
|
||
|
if ($tipoMinuto) {
|
||
|
$precoMinuto = $info['trr_preco'];
|
||
|
$cadencia = (int) $info['trr_vc'];
|
||
|
|
||
|
if (($cadencia < 60) && ($saldoPrepago < ($precoMinuto / 2.0)))
|
||
|
return 0;
|
||
|
if (($cadencia >= 60) && ($saldoPrepago < ($precoMinuto)))
|
||
|
return 0;
|
||
|
|
||
|
return ((int) (($saldoPrepago / $precoMinuto) * 60)) * 1000;
|
||
|
}
|
||
|
else {
|
||
|
return (int) ($saldoPrepago > $preco ? 99999999 : 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function logStr($msg, $metodo = "", $script = "", $pathLog = "", $logErro = false) {
|
||
|
$data = date("Y-m-d H:i:s");
|
||
|
|
||
|
/*
|
||
|
* Se o path do arquivo de log nao for fornecido em $pathLog e indicado o local padrao
|
||
|
* com o nome do script que esta executando.
|
||
|
*/
|
||
|
$script = $script ? $script : $argv[0];
|
||
|
$pathLog = !$pathLog ? sprintf("/var/log/asterisk/%s.log", basename($script, '.php')) : $pathLog;
|
||
|
|
||
|
/*
|
||
|
* Indica o tipo de mensagem que deva ser gravada no arquivo de log.
|
||
|
*/
|
||
|
$nivelLog = isset($GLOBALS["_nivelLog"]) ? $GLOBALS["_nivelLog"] : _LOG_MSG_ERROR;
|
||
|
|
||
|
/*
|
||
|
* Se o nome do metodo nao for informado tenta recuperalo a partir do array de mensagens.
|
||
|
*/
|
||
|
$msgs = $metodo ? $metodo : explode("#", $msg);
|
||
|
$metodo = $msgs[5];
|
||
|
|
||
|
$erroSys = sprintf("Type:%s File: %s Line: %s \nMsgSys: %s", $msgs[1], $msgs[3], $msgs[4], $msgs[2]);
|
||
|
|
||
|
/*
|
||
|
* Captura informacoes sobre erros no sistema
|
||
|
*/
|
||
|
$str = sprintf("Scrp: [%s] Funcao: [%s] Data: [%s] \nMsg: %s \nSys: %s\n\n", $script, $metodo, $data, $msgs[0], $erroSys);
|
||
|
/*
|
||
|
* Mostra as mensagens de log
|
||
|
*/
|
||
|
if ($nivelLog == _LOG_MSG_DISPLAY) {
|
||
|
echo $str . "\n";
|
||
|
}
|
||
|
/*
|
||
|
* Grava o log
|
||
|
*/
|
||
|
if ($logErro || ($nivelLog <> _LOG_MSG_ERROR)) {
|
||
|
GravaLog($str, $pathLog);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function GravaLog($log, $path) {
|
||
|
$arq = fopen($path, 'a');
|
||
|
fwrite($arq, $log);
|
||
|
fclose($arq);
|
||
|
}
|
||
|
|
||
|
function Excpt($msg, $metodo = "", $erro = '') {
|
||
|
//$erroSys = error_get_last();
|
||
|
//$msg = sprintf("%s#%s#%s#%s#%s#%s",$msg, $erroSys['type'], $erroSys['message'], $erroSys['file'], $erroSys['line'], $metodo);
|
||
|
$msg = sprintf("%s -> %s <- %s", (!empty($metodo)) ? "Motodo [{$metodo}] " : '', $msg, (!empty($erro)) ? "Erro: $erro" : "");
|
||
|
logBkp($msg);
|
||
|
throw new Exception($msg);
|
||
|
}
|
||
|
|
||
|
function logBkp($msg, $logDate = true, $echo = true) {
|
||
|
$log = $msg;
|
||
|
if ($logDate) {
|
||
|
$log = date('d/m/Y H:i:s') . ': ' . $msg . "\n";
|
||
|
if ($echo) {
|
||
|
echo $log;
|
||
|
}
|
||
|
}
|
||
|
GravaLog($log, BackupConfig::$logFile);
|
||
|
}
|
||
|
|
||
|
function KeyCrypt($key = '') {
|
||
|
return $key ? $key : "A32589Ba83F3aA5a8b1737339604B609";
|
||
|
}
|
||
|
|
||
|
function Encrypt($text, $key = '') {
|
||
|
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
|
||
|
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
|
||
|
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
|
||
|
$key = substr(hash('sha256', KeyCrypt($key)), 0, $keySize);
|
||
|
$encryptedData = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
|
||
|
return base64_encode($iv . $encryptedData);
|
||
|
}
|
||
|
|
||
|
function Decrypt($text, $key = '') {
|
||
|
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
|
||
|
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
|
||
|
$data = base64_decode($text, true);
|
||
|
$key = substr(hash('sha256', KeyCrypt($key)), 0, $keySize);
|
||
|
$iv = substr($data, 0, $ivSize);
|
||
|
$data = substr($data, $ivSize);
|
||
|
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
|
||
|
return rtrim($data, "\0");
|
||
|
}
|
||
|
|
||
|
function ErrorGetLast($type = "message") {
|
||
|
$erro = error_get_last();
|
||
|
return $erro[$type];
|
||
|
}
|
||
|
|
||
|
function GetAtualizacoes($db, $cliId) {
|
||
|
/*
|
||
|
* Esta consulta traz todos os arquivos que o cliente ainda nao atualizou na portabilidade.
|
||
|
*/
|
||
|
$query = "select idarquivo
|
||
|
from atualizacoes a
|
||
|
where erro = 0
|
||
|
and idarquivo > coalesce((select max(idarquivo) from clientes a, clientes_atualizacoes b where b.cli_id = a.cli_id and cli_idexterno = '$cliId'), 0)";
|
||
|
$result = pg_query($db, $query);
|
||
|
|
||
|
if (!$result)
|
||
|
throw new Exception(GetExcept("Erro ao buscar atualizacoes no servidor remoto!"));
|
||
|
if (!pg_num_rows($result)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$dados = array();
|
||
|
while ($row = pg_fetch_row($result)) {
|
||
|
$dados[] = $row[0];
|
||
|
}
|
||
|
|
||
|
return $dados;
|
||
|
}
|
||
|
|
||
|
function GetAtualizacoesDados($db, $idAtualiza, $limit, $offset) {
|
||
|
/*
|
||
|
* Esta consulta retorna todos o comandos que devem ser executados para atualizar a base
|
||
|
* da portabilidade no cliente.
|
||
|
*/
|
||
|
global $debug;
|
||
|
|
||
|
$query = "select comando from atualizacoes_itens where idarquivo = '$idAtualiza' limit $limit offset $offset";
|
||
|
if ($debug)
|
||
|
echo "Selecionando: $query\n";
|
||
|
$result = pg_query($db, $query);
|
||
|
|
||
|
/*
|
||
|
* Sinaliza que ocorreu algum erro ao consultar o banco de dados.
|
||
|
*/
|
||
|
if (!$result)
|
||
|
throw new Exception(GetExcept("Erro ao buscar dados de atualizacoes no servidor remoto!"));
|
||
|
|
||
|
/*
|
||
|
* Indica que nao exitem atualizacoes disponiveis.
|
||
|
*/
|
||
|
if (!pg_num_rows($result))
|
||
|
return false;
|
||
|
|
||
|
$dados = array();
|
||
|
while ($row = pg_fetch_row($result)) {
|
||
|
$dados[] = $row[0];
|
||
|
}
|
||
|
return $dados;
|
||
|
}
|
||
|
|
||
|
function GetNumRegAtaulizacao($dbRemoto, $idAtualiza) {
|
||
|
|
||
|
$query = "select count(*) as numero from atualizacoes_itens where idarquivo = '$idAtualiza'";
|
||
|
$result = pg_query($dbRemoto, $query);
|
||
|
|
||
|
if (!$result)
|
||
|
throw new Exception(GetExcept("Erro ao buscar numero de atualizacoes no servidor remoto! Id: $idAtualiza"));
|
||
|
if (!pg_num_rows($result))
|
||
|
return 0;
|
||
|
|
||
|
$dados = array();
|
||
|
$row = pg_fetch_row($result);
|
||
|
return $row[0];
|
||
|
}
|
||
|
|
||
|
function VerificaStatus($dbRemoto, $cliId) {
|
||
|
/*
|
||
|
* Verifica o status do cliente para executar a acao adequada.
|
||
|
* -1 -> Desativado ou excluido
|
||
|
* 1 -> Normal
|
||
|
* 2 -> Aguardando instalacao.
|
||
|
*/
|
||
|
$query = "select clie_status from clientes where cli_idexterno = '$cliId'";
|
||
|
$result = pg_query($dbRemoto, $query);
|
||
|
if (!$result)
|
||
|
throw new Exception(GetExcept("Nao foi possivel verificar o status do cliente!"));
|
||
|
|
||
|
$row = pg_fetch_row($result);
|
||
|
return $row[0];
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function GetCliIdPorta($dbPorta, $idExt) {
|
||
|
$query = "select cli_id from clientes where cli_idexterno = '$idExt'";
|
||
|
$result = pg_query($dbPorta, $query);
|
||
|
|
||
|
/*
|
||
|
* Erro na consulta.
|
||
|
*/
|
||
|
if (!$result) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Nao encontrou o cliente.
|
||
|
*/
|
||
|
if (!pg_num_rows($result)) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Retorna o id do cliente cadastrado.
|
||
|
*/
|
||
|
$row = pg_fetch_array($result);
|
||
|
return $row[0];
|
||
|
}
|
||
|
|
||
|
function PortabAtualizando($db = null) {
|
||
|
if (!$db) {
|
||
|
$db = GetAlernativeDB($dbHost = '', $dbPort = '', $dbName = 'portabilidade', $dbUser = '', $dbPass = '');
|
||
|
}
|
||
|
try {
|
||
|
$query = "select '' as reg from atualizacoes_registro where atr_data = now()::date and atr_fim is null";
|
||
|
$result = @pg_query($db, $query);
|
||
|
if (!$result)
|
||
|
throw new Exception(GetExcept("IniciaAtualizacao: Nao foi possivel verifica se ha uma atualizacao em andamento!"));
|
||
|
|
||
|
return pg_num_rows($result) ? true : false;
|
||
|
} catch (Exception $ex) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function PortabSolicitaConexao($db, $cliIdExterno) {
|
||
|
define("MAX_CONN_CLIENTE_PORTAB", 3);
|
||
|
if (!$db) {
|
||
|
$db = GetAlernativeDB($dbHost = '', $dbPort = '', $dbName = 'portabilidade', $dbUser = '', $dbPass = '');
|
||
|
}
|
||
|
try {
|
||
|
$query = "select count(*) as reg from controle_conexao where ctrc_data = now()::date and ctrc_fim is null";
|
||
|
$result = @pg_query($db, $query);
|
||
|
if (!$result)
|
||
|
throw new Exception(GetExcept("PortabSolicitaConexao: Nao foi possivel verifica se ha conexoes ativas!"));
|
||
|
|
||
|
$row = pg_fetch_row($result);
|
||
|
$connecta = MAX_CONN_CLIENTE_PORTAB > $row[0];
|
||
|
if ($connecta) {
|
||
|
$query = "insert into controle_conexao( ctrc_data, cli_id, ctrc_inicio)values(now()::date, '$cliIdExterno', now())";
|
||
|
$result = pg_query($db, $query);
|
||
|
if (!$result || !pg_affected_rows($result)) {
|
||
|
throw new Exception(GetExcept("PortabSolicitaConexao: Nao foi possivel registrar a conexao!"));
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
} catch (Exception $ex) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function GetExcept($msg) {
|
||
|
$ex = error_get_last();
|
||
|
return sprintf("%s\nErro: %s\n", trim($msg), trim($ex['message']));
|
||
|
}
|
||
|
|
||
|
function GetTipoChamadaCod($destino, $dddPadrao, $tipo) {
|
||
|
/*
|
||
|
* fixo movel local inter ddi
|
||
|
* -- 1 -> Interna;
|
||
|
* -- 2 -> Entrada,
|
||
|
* 21 -> Entrada Fixo Local,
|
||
|
* 22 -> Entrada Fixo Interurbano,
|
||
|
* 23 -> Entrada Movel Local,
|
||
|
* 24 -> Entrada Movel Interurbano
|
||
|
* 25 -> Entrada Internacional;
|
||
|
* -- 3 -> Saida,
|
||
|
* 31 -> Saida Fixo Local,
|
||
|
* 32 -> Saida Fixo Interurbano,
|
||
|
* 33 -> Saida Movel local,
|
||
|
* 34 -> Saida Movel Interurbano,
|
||
|
* 35 -> Saida Internacional;
|
||
|
* -- 4 -> Emergencia;
|
||
|
* -- 5 -> Zero oitocentos
|
||
|
*
|
||
|
-- delete from pbx_tipo_ligacao
|
||
|
-- select * from pbx_tipo_ligacao
|
||
|
-- create table pbx_tipo_ligacao(tplg_codigo int not null primary key, tplg_descricao varchar(64) not null, tplg_tipo int not null);
|
||
|
insert into pbx_tipo_ligacao values( 1, 'Interna', 1);
|
||
|
insert into pbx_tipo_ligacao values( 2, 'Entrada', 2);
|
||
|
insert into pbx_tipo_ligacao values(21, 'Entrada Fixo Local', 2);
|
||
|
insert into pbx_tipo_ligacao values(22, 'Entrada Fixo Interurbano', 2);
|
||
|
insert into pbx_tipo_ligacao values(23, 'Entrada Movel Local', 2);
|
||
|
insert into pbx_tipo_ligacao values(24, 'Entrada Movel Interurbano', 2);
|
||
|
insert into pbx_tipo_ligacao values(25, 'Entrada Internacional', 2);
|
||
|
insert into pbx_tipo_ligacao values( 3, 'Saida', 3);
|
||
|
insert into pbx_tipo_ligacao values(31, 'Saida Fixo Local', 3);
|
||
|
insert into pbx_tipo_ligacao values(32, 'Saida Fixo Interurbano', 3);
|
||
|
insert into pbx_tipo_ligacao values(33, 'Saida Movel local', 3);
|
||
|
insert into pbx_tipo_ligacao values(34, 'Saida Movel Interurbano', 3);
|
||
|
insert into pbx_tipo_ligacao values(35, 'Saida Internacional', 3);
|
||
|
insert into pbx_tipo_ligacao values( 4, 'Emergencia', 4);
|
||
|
insert into pbx_tipo_ligacao values( 5, 'Zero Oitocentos', 5);
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* $direcao -> I = Interna, E = Entrada, S = Saida.
|
||
|
*/
|
||
|
$direcao = strtoupper(trim($tipo));
|
||
|
if ($direcao === 'I') {
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Verifica chamadas de emergencia, nao tratadas adequadamente pela funcao GetTipoChamada.
|
||
|
*/
|
||
|
$arEmergencia = array('100', '128', '190', '191', '192', '193', '194', '197', '198', '199');
|
||
|
if (array_search($destino, $arEmergencia) !== false) {
|
||
|
return 4;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Verifica chamadas 0800, nao tratadas adequadamente pela funcao GetTipoChamada.
|
||
|
*/
|
||
|
if (substr($destino, 0, 4) == '0800') {
|
||
|
return 5;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Funcao analisa o tipo de chamada
|
||
|
*/
|
||
|
list($tpFone, $tpChamada) = GetTipoChamada($destino, $dddPadrao);
|
||
|
|
||
|
if ($direcao === 'E') {
|
||
|
if (($tpFone === 'fixo') && ($tpChamada === 'local')) {
|
||
|
return 21;
|
||
|
} else if (($tpFone === 'fixo') && ($tpChamada === 'inter')) {
|
||
|
return 22;
|
||
|
} else if (($tpFone === 'movel') && ($tpChamada === 'local')) {
|
||
|
return 23;
|
||
|
} else if (($tpFone === 'movel') && ($tpChamada === 'inter')) {
|
||
|
return 24;
|
||
|
} else if (($tpFone === 'fixo') && ($tpChamada === 'ddi')) {
|
||
|
return 25;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($direcao === 'S') {
|
||
|
if (($tpFone === 'fixo') && ($tpChamada === 'local')) {
|
||
|
return 31;
|
||
|
} else if (($tpFone === 'fixo') && ($tpChamada === 'inter')) {
|
||
|
return 32;
|
||
|
} else if (($tpFone === 'movel') && ($tpChamada === 'local')) {
|
||
|
return 33;
|
||
|
} else if (($tpFone === 'movel') && ($tpChamada === 'inter')) {
|
||
|
return 34;
|
||
|
} else if (($tpFone === 'fixo') && ($tpChamada === 'ddi')) {
|
||
|
return 35;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
function GetTipoChamadaDesc($cod) {
|
||
|
/*
|
||
|
* fixo movel local inter ddi
|
||
|
* -- 1 -> Interna;
|
||
|
* -- 2 -> Entrada,
|
||
|
* 21 -> Entrada Fixo Local,
|
||
|
* 22 -> Entrada Fixo Interurbano,
|
||
|
* 23 -> Entrada Movel Local,
|
||
|
* 24 -> Entrada Movel Interurbano
|
||
|
* 25 -> Entrada Internacional;
|
||
|
* -- 3 -> Saida,
|
||
|
* 31 -> Saida Fixo Local,
|
||
|
* 32 -> Saida Fixo Interurbano,
|
||
|
* 33 -> Saida Movel local,
|
||
|
* 34 -> Saida Movel Interurbano,
|
||
|
* 35 -> Saida Internacional;
|
||
|
* -- 4 -> Emergencia;
|
||
|
* -- 5 -> Zero oitocentos
|
||
|
*/
|
||
|
|
||
|
switch ($cod) {
|
||
|
case 1: return 'Interna';
|
||
|
case 4: return 'Emergencia';
|
||
|
case 5: return 'Gratuita';
|
||
|
|
||
|
case 21: return 'Local Fixo';
|
||
|
case 22: return 'Interurbano Fixo';
|
||
|
case 23: return 'Local Movel';
|
||
|
case 24: return 'Interurbano Movel';
|
||
|
case 25: return 'Internacional';
|
||
|
|
||
|
case 31: return 'Local Fixo';
|
||
|
case 32: return 'Interurbano Fixo';
|
||
|
case 33: return 'Local Movel';
|
||
|
case 34: return 'Interurbano Movel';
|
||
|
case 35: return 'Internacional';
|
||
|
|
||
|
default:
|
||
|
return 'NI';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function ChamadaFila($uid, $temp = 1) {
|
||
|
$query = sprintf("select strtoint(param2, 0) as billsec from %s where uid2 = %s and evento in('COMPLETACALLER', 'COMPLETAAGENT', 'TRANSFERORIG', 'COMPLETECALLER', 'COMPLETEAGENT', 'TRANSFER','COMPLETECALLERRAMAL')", ($temp ? 'ast_eventos_dacs' : 'pbx_eventos_dacs'), QuotedStr($uid));
|
||
|
$result = pg_query($query);
|
||
|
if (!pg_num_rows($result))
|
||
|
return 0;
|
||
|
|
||
|
$row = pg_fetch_row($result);
|
||
|
return $row[0];
|
||
|
}
|
||
|
|
||
|
function GetIdMunicipio($tipo, $dddPadrao, $destino, $useBanco = true) {
|
||
|
$tamPrefixo = 6;
|
||
|
$movel = ($tipo == 23) || ($tipo == 24) || ($tipo == 33) || ($tipo == 34);
|
||
|
/*
|
||
|
* ligacao Interna,Eemergencia, Gratuita(0800) e internacional nao tem municipio associado.
|
||
|
*/
|
||
|
if (($tipo == 1) || ($tipo == 4) || ($tipo == 5) || ($tipo == 25) || ($tipo == 35)) {
|
||
|
return '0';
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
*
|
||
|
*/
|
||
|
if ($movel) {
|
||
|
if (strlen($destino) == 9) {
|
||
|
$dddCel = $dddPadrao;
|
||
|
} else {
|
||
|
$dddCel = substr(substr($destino, -11), 0, 2);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Procura o municipio em um array global previamente alimentado.
|
||
|
*/
|
||
|
if (!$useBanco) {
|
||
|
return GetIdMunicipioMovel($dddCel);
|
||
|
}
|
||
|
$query = sprintf("select id from (select min(id) as id, codigo_ddd, uf from pbx_municipios group by codigo_ddd, uf) a where codigo_ddd = %s", StrToIntDef($dddCel));
|
||
|
} else {
|
||
|
if (strlen($destino) == 8)
|
||
|
$destino = $dddPadrao . $destino;
|
||
|
|
||
|
$destino = soNumero(substr($destino, -10));
|
||
|
$prefixo = StrToIntDef(substr($destino, 0, 6));
|
||
|
$numero = StrToIntDef(substr($destino, -4));
|
||
|
/*
|
||
|
* Procura o municipio em um array global previamente alimentado.
|
||
|
*/
|
||
|
if (!$useBanco) {
|
||
|
return GetIdMunicipioFixo($prefixo, $numero);
|
||
|
}
|
||
|
$query = sprintf("select id from pbx_municipios where prefixo = '%s' and '%s' >= faixa_inicial and '%s' <= faixa_final", $prefixo, $numero, $numero);
|
||
|
}
|
||
|
|
||
|
|
||
|
$result = pg_query($query);
|
||
|
if (!$result || !pg_num_rows($result)) {
|
||
|
$codMun = -1;
|
||
|
} else {
|
||
|
$dados = pg_fetch_row($result);
|
||
|
$codMun = $dados[0];
|
||
|
}
|
||
|
|
||
|
return $codMun;
|
||
|
}
|
||
|
|
||
|
function PreparaConsltaMunicipio() {
|
||
|
global $arPrefixo, $arDddMunicipio;
|
||
|
$query = "select distinct prefixo, faixa_inicial, faixa_final, id, codigo_ddd from pbx_municipios";
|
||
|
$result = pg_query($query);
|
||
|
|
||
|
if (!$result || !pg_num_rows($result)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$dddOld = '';
|
||
|
$prefixoAtual = '';
|
||
|
|
||
|
while ($dados = pg_fetch_array($result, null, PGSQL_ASSOC)) {
|
||
|
|
||
|
/*
|
||
|
* Separa os dados por prefixo para facilitar a consulta de
|
||
|
* prefixo por faixa.
|
||
|
*/
|
||
|
$prefixo = $dados["prefixo"];
|
||
|
|
||
|
if (($prefixo != $prefixoAtual) && $prefixoAtual) {
|
||
|
$arPrefixo[$prefixoAtual] = $dadosPrefixo;
|
||
|
$dadosPrefixo = array();
|
||
|
}
|
||
|
|
||
|
$dadosPrefixo[] = $dados;
|
||
|
$prefixoAtual = $prefixo;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Inclui um municipio por ddd para ser usado na
|
||
|
* consulta de uf para movel.
|
||
|
*/
|
||
|
$dddAtual = $dados["codigo_ddd"];
|
||
|
|
||
|
if (!$dddOld || ($dddOld != $dddAtual)) {
|
||
|
$arDddMunicipio[$dddAtual] = $dados[id];
|
||
|
$dddOld = $dddAtual;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (count($dadosPrefixo)) {
|
||
|
$arPrefixo[$prefixo] = $dadosPrefixo;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function GetIdMunicipioMovel($ddd) {
|
||
|
global $arDddMunicipio;
|
||
|
return $arDddMunicipio[$ddd] ? $arDddMunicipio[$ddd] : '-1';
|
||
|
}
|
||
|
|
||
|
function GetIdMunicipioFixo($prefixo, $sufixo) {
|
||
|
global $arPrefixo;
|
||
|
$arPesquisa = $arPrefixo[$prefixo];
|
||
|
if (!count($arPesquisa)) {
|
||
|
return '-1';
|
||
|
}
|
||
|
foreach ($arPesquisa as $dados) {
|
||
|
$faixaInicial = $dados['faixa_inicial'];
|
||
|
$faixaFinal = $dados['faixa_final'];
|
||
|
$id = $dados['id'];
|
||
|
|
||
|
if (($sufixo >= $faixaInicial) && ($sufixo <= $faixaFinal)) {
|
||
|
return $id ? $id : '-1';
|
||
|
}
|
||
|
}
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
function TrataEntrada($numero) {
|
||
|
$num = trim($numero);
|
||
|
|
||
|
/*
|
||
|
* Trata ligacoes entrantes vindas de operadoras voip, para que
|
||
|
* nao sejam confundidas com ligacoes internacionais.
|
||
|
*
|
||
|
*/
|
||
|
if (substr($num, 0, 2) == '00') {
|
||
|
return substr($num, 2);
|
||
|
}
|
||
|
return $num;
|
||
|
}
|
||
|
|
||
|
/* commnad lines
|
||
|
* $rows = intval(`tput lines`);
|
||
|
$cols = intval(`tput cols`);
|
||
|
$colors = intval(`tput colors`);
|
||
|
|
||
|
echo "monitor $rows x $cols with $colors colors\n";
|
||
|
*/
|
||
|
?>
|