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.
 
 
 
 
 
 

181 lines
7.4 KiB

#!/usr/bin/php -q
<?php
include('bd.php');
include('util/util.php');
include('funcoes/shared.php');
error_reporting(E_ALL);
ini_set('display_errors', 0);
$uniqueId = trim($argv[1]);
$final = isset($argv[2]) ? trim($argv[2]) : '';
$uniqueIdOrig = isset($argv[3]) ? trim($argv[3]) : '';
//$arg4 = trim($argv[4]);
$data = date('Y-m-d H:i:s');
$gravaLog = 1;
$log = array();
$log[] = 'Tarifa Finaliza';
$result = 0;
//$final = '';
if ($final == 'FINALTRANSFER') {
$query = "SELECT trr_destino FROM pbx_tarif_registra WHERE uniqueid = '$uniqueIdOrig'\n";
$result = pg_query($conexao, $query);
$row = pg_fetch_row($result);
$destino = $row[0];
if ($result) {
$query = "UPDATE pbx_tarif_registra SET trr_fim = now(), trr_origem = trr_destino, trr_destino = '$destino', trr_duracao = (extract(epoch FROM (now() - trr_inicio))::int ) WHERE uniqueid = '$uniqueId' AND coalesce(trr_duracao, 0) = 0\n";
$result = pg_query($conexao, $query);
}
} else {
$query = "UPDATE pbx_tarif_registra SET trr_fim = now(), trr_duracao = (extract(epoch FROM (now() - trr_inicio))::int ) WHERE uniqueid = '$uniqueId' AND coalesce(trr_duracao, 0) = 0\n";
$result = pg_query($conexao, $query);
}
$log[] = $query;
__Prepago($uniqueId);
/*
* Seleciona o tipo do dispositivo destino(fixo/móvel) e a
* franquia cadastrada:
* 0 - Desabilitada: Não há fraquia para o contrato.
* 1 - Compartilhada: Computa com franquia qualquer ligação fixo/móvel.
* 2 - Fixo: Considera apenas as ligações para fixo como franqueadas até o limite cadastrado no contrato.
* 3 - Móvel: Considera apenas as ligações para móvel como franqueadas até o limite cadastrado no contrato.
* 4 - Fixo/Móvel: Considera as chamadas para fixo/movel porém tem valores cadastrados para cada tipo no
* contrato.
*/
$query = "SELECT a.trr_tipo_dispositivo, b.contr_tipo_franquia
FROM pbx_tarif_registra a, pbx_tarif_contrato b
WHERE b.contr_id = a.contr_id
AND uniqueid = '$uniqueId'\n";
$log[] = $query;
$result = pg_query($conexao, $query);
$row = pg_fetch_array($result);
$tipoDispo = $row['trr_tipo_dispositivo'];
$tipoFranquia = $row['contr_tipo_franquia'];
/*
* Verifica se exite configuração para franquia registra os valores.
* A tabela pbx_tarif_franquia_movimento tem uma trigger associada que
* faz o restante do trabalho.
*/
if ($result && __InsereFranquia($tipoDispo, $tipoFranquia)) {
$query = "INSERT INTO pbx_tarif_franquia_movimento
(prc_id, contr_id, tfm_mes, uniqueid, tfm_data, tfm_lanc, tfm_tipo_lanc, tfm_motivo, tfm_user, tfm_tipo_franquia, tmf_tipo_saldo, tfm_preco_tipo)
SELECT a.prc_id, a.contr_id, date_part('month', a.trr_data) as tfm_mes, a.uniqueid, now(),
CASE WHEN((a.trr_duracao = 0) OR (b.contr_tipo_franquia = 0) OR (a.trr_tarifa_zero = 1) )THEN 0 ELSE -a.trr_duracao END AS tfm_lanc,
'D' as tfm_tipo_lanc,
CASE WHEN(b.contr_tipo_franquia = 0) THEN 'Franquia Zero' ELSE CASE WHEN(a.trr_tarifa_zero = 1) THEN 'Tarifa Zero' ELSE 'Chamada de saida' END END AS tfm_motivo,
CASE WHEN(a.trr_conta_senha = 1)THEN trr_conta ELSE a.trr_origem END AS tfm_user, b.contr_tipo_franquia AS tfm_tipo_franquia,
CASE WHEN(a.trr_vc IN('vc3', 'vc4')) THEN 'M' ELSE 'F' END AS tmf_tipo_saldo, a.trr_preco_tipo
FROM pbx_tarif_registra a, pbx_tarif_contrato b
WHERE b.contr_id = a.contr_id
AND a.uniqueid = '$uniqueId'\n";
pg_query($conexao, $query);
}
$log[] = $query;
//Final: Finaliza: 1383258798.101 Final: FINALTRANSFER Arg3: 1383258762.93 Arg4: 1004 Data: 2013-10-31 19:33:28
$err = error_get_last();
if (count($err)) {
$log[] = sprintf('Erro: %s', $err["message"]);
}
if ($gravaLog) {
GravaLogApl($log, "tarifacao_finaliza");
}
//exten => h,1,DeadAgi(tarifaFinaliza.php,${UNIQUEID})
function __Prepago($uniqueId)
{
include('util/funcoesApl.php');
global $log;
$queryPrepago = "SELECT CASE WHEN(a.trr_conta_senha = 0)THEN a.trr_origem ELSE a.trr_conta END AS prm_ramal_conta,
a.trr_conta_senha, a.trr_tarifa_zero, a.trr_franquia, b.contr_tipo_franquia, a.trr_preco_tipo,
a.trr_vc_cad, a.trr_vc_ext, 0.0 AS prm_valor,
a.trr_id,
a.trr_preco,
a.trr_duracao,
a.trr_destino,
now()::date AS prm_data,
now() AS prm_data_lanc,
'D' AS prm_tipo_lancamento,
'Chamada Efetuada' AS prm_historico
FROM pbx_tarif_registra a, pbx_tarif_contrato b
WHERE b.contr_id = a.contr_id
AND a.uniqueid = '%s'";
$queryPrepagoIns = "INSERT INTO pbx_prepago_movimento
(prm_ramal_conta, prm_conta_senha, trr_id, prm_valor_minuto, prm_tempo, prm_destino, prm_valor, prm_data, prm_data_lanc, prm_tipo_lancamento, prm_historico)
VALUES({prm_ramal_conta}, {trr_conta_senha}, {trr_id}, {trr_preco}, {trr_duracao}, {trr_destino}, {prm_valor}, {prm_data}, {prm_data_lanc}, {prm_tipo_lancamento}, {prm_historico})";
$prepagoIncluso = 0;
/*
* Verifica se o ramal/conta esta incluso no pre-pago
*/
$query = "SELECT count(*)
FROM pbx_prepago a, pbx_tarif_registra b
WHERE a.tipo = b.trr_conta_senha
AND a.id = CASE WHEN(b.trr_conta_senha = 0)THEN b.trr_origem ELSE b.trr_conta END
AND a.habilita_prepago = '1'
AND b.uniqueid = '%s'";
$query = sprintf($query, $uniqueId);
$result = pg_query($conexao, $query);
if (!$result) {
$log[] = sprintf('Ver. Pre-pago: %s', $query);
}
$row = pg_fetch_row($result);
$prepagoIncluso = $row[0];
if ($prepagoIncluso) {
$queryPrepago = sprintf($queryPrepago, $uniqueId);
$result = pg_query($conexao, $queryPrepago);
$row = pg_fetch_array($result);
$tipoFranquia = $row["contr_tipo_franquia"];
$tarifaZero = $row["trr_tarifa_zero"] > 0;
$franquia = ($row["trr_franquia"] > 0) && ($tipoFranquia > 0);
$franquiaParcial = $franquia && ($row["trr_franquia"] != $row["trr_duracao"]);
$tipoTarifa = $row["trr_preco_tipo"];
$precoMinuto = $row["trr_preco"];
$fator = $row["trr_vc_cad"];
$cadencia = $row["trr_vc_ext"];
$dura = $franquiaParcial ? $row["trr_franquia"] : (int) $row["trr_duracao"];
$row['prm_valor'] = $tarifaZero ? 0 : - (TarifaChamada($tipoTarifa, $dura, $precoMinuto, $fator, $cadencia));
foreach ($row as $key => $value) {
$queryPrepagoIns = str_replace('{' . $key . '}', QuotedStr($value), $queryPrepagoIns);
}
$result = pg_query($conexao, $queryPrepagoIns);
if (!$result) {
$log[] = sprintf('Ins. Pre-pago: %s', $queryPrepagoIns);
}
}
}
function __InsereFranquia($disp, $franquia)
{
/*
* Tipos de franquia: Fixo/Móvel -> 4, Móvel -> 3, Fixo -> 2, Compartilhada -> 1, Desbilidadta -> 0
*/
if (!$franquia) {
return false;
} else if ($franquia == 4) {
return true;
} else if (($franquia == 3) and ($disp == 'movel')) {
return true;
} else if (($franquia == 2) and ($disp == 'fixo')) {
return true;
}
return false;
}
?>