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.
181 lines
7.4 KiB
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; |
|
} |
|
?>
|