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.
375 lines
17 KiB
375 lines
17 KiB
<?php |
|
|
|
/* |
|
* carregar controles prepara relatório |
|
*/ |
|
//variaveis para manter o estado |
|
$listaContrato = 0; |
|
$dataIni = date('d/m/Y'); |
|
$dataFim = date('d/m/Y'); |
|
$agrup = true; |
|
$refaturar = false; |
|
$numRefatura = 0; |
|
|
|
|
|
if (IsPostBack()) { |
|
//print "listaAgente: " . $_SESSION["listaSites"] ." - ". $_POST["listaSites"]; |
|
$dataIni = $_POST["dataIni"] ? $_POST["dataIni"] : date('d/m/Y'); |
|
$dataFim = $_POST["dataFim"] ? $_POST["dataFim"] : date('d/m/Y'); |
|
$listaContrato = $_POST['listaContrato']; |
|
$agrup = isset($_POST['agrup']); |
|
$refaturar = isset($_POST['btRetarifa']); |
|
} |
|
|
|
$isValid = 1; |
|
if (IsPostBack() && !is_date($dataIni)) { |
|
$isValid = 0; |
|
$msg = "Data inicial inválida!"; |
|
} else if (IsPostBack() && !is_date($dataFim)) { |
|
$isValid = 0; |
|
$msg = "Data final inválida!"; |
|
} |
|
|
|
$imp = 0; |
|
|
|
//executa consulta somente com post |
|
if (IsPostBack() && $isValid) { |
|
$linhas = GetDadosRefatura($refaturar); |
|
$somaDuration = 0; |
|
$somaValor = 0; |
|
$somaValorRefaturado = 0; |
|
$linha = ''; |
|
foreach ($linhas as $row) { |
|
$str = GetLinhaTRefat($agrup); |
|
foreach ($row as $key => $value) { |
|
$str = str_replace('{' . $key . '}', $value, $str); |
|
} |
|
$linha .= $str; |
|
|
|
$somaValor += $row['trr_valor_orig']; |
|
$somaDuration += $row['trr_duracao_orig']; |
|
$somaValorRefaturado += $row['trr_valor_retarifa_orig']; |
|
} |
|
} |
|
if (empty($linha)) { |
|
if ($isValid && pg_last_error($dbcon)) { |
|
$noData = "Erro ao realizar a consulta!"; // Erro: " . pg_last_error($dbcon); |
|
} else { |
|
$noData = IsPostBack() ? ($isValid ? "Nenhum registro encontrado!" : $msg) : "Informa as datas inicial,final, ramal e clique em consultar!"; |
|
} |
|
$linha = " <tr><td colspan=\"10\" align=\"left\" class=\"headData\">$noData</td>"; |
|
} |
|
|
|
$corRefat = $somaValor == $somaValorRefaturado ? '#000' : ($somaValorRefaturado > $somaValor ? '#00f' : '#f00'); |
|
$fontRefat = $somaValor != $somaValorRefaturado ? 'bold' : 'normal'; |
|
$somaDuration = SecondToStrTime($somaDuration); |
|
$somaValor = FormataValor(round($somaValor, 2)); |
|
$somaValorRefaturado = FormataValor(round($somaValorRefaturado, 2)); |
|
$colspan = $agrup ? 3 : 7; |
|
|
|
$linhaTotal = " <tr> |
|
<th colspan=\"1\" align=\"left\" class=\"headColun\">Chamadas: $imp</th> |
|
<th align=\"center\" class=\"headColun\" colspan=\"$colspan\">Total</th> |
|
<th align=\"center\" class=\"headColun\">$somaDuration</th>"; |
|
if ($agrup) { |
|
$linhaTotal .= "<th align=\"right\" class=\"headColun\">$somaValor</th> |
|
<th align=\"right\" class=\"headColun\"><span style=\"color:$corRefat; font-weight:$fontRefat;\">$somaValorRefaturado</span></th> |
|
</tr>"; |
|
} else { |
|
$linhaTotal .= "<th align=\"center\" class=\"headColun\">-</th> |
|
<th align=\"right\" class=\"headColun\">$somaValor</th> |
|
<th align=\"center\" class=\"headColun\">-</th> |
|
<th align=\"right\" class=\"headColun\"><span style=\"color:$corRefat; font-weight:$fontRefat;\">$somaValorRefaturado</span></th> |
|
</tr>"; |
|
} |
|
|
|
$linha .= $linhaTotal; |
|
|
|
if (!$isValid) |
|
$jsStartup[] = "alert('$msg');"; |
|
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) "; |
|
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) "; |
|
|
|
|
|
|
|
$contratos = PbxContratos($listaContrato); |
|
$smarty->assign("contratos", $contratos); |
|
$smarty->assign('dtIni', $dataIni); |
|
$smarty->assign('dtFim', $dataFim); |
|
$smarty->assign('imp', $numRefatura); |
|
$smarty->assign('agrup', $agrup); |
|
$smarty->assign('linhas', $linha); |
|
|
|
GetTemplate($smarty, 'cadastros/tarifacao/tarifaRefatura.htm'); |
|
|
|
function GetQuery($ordem = 0) { |
|
global $dataIni, $dataFim, $listaContrato; |
|
$dataI = FormatDtMssql($dataIni); |
|
$dataF = FormatDtMssql($dataFim); |
|
$dddDef = GetDddPadrao(); |
|
$sql = "select a.contr_id,h.contr_descricao, i.prc_vigencia, a.trr_id, a.oper_id_dest, a.oper_numero_dest, a.uniqueid, a.trr_link, a.trr_data, a.trr_origem, a.trr_destino, a.trr_inicio, a.trr_fim, a.trr_duracao, a.trr_preco, |
|
a.trr_vc, a.trr_preco_tipo, a.trr_tipo_opera, a.trr_sentido_chamada, a.trr_tarifa_zero, a.trr_conta_senha, a.trr_conta, a.trr_vc_cad, a.trr_vc_ext, |
|
a.trr_preco_total, b.oper_nome, g.ttp_descricao, |
|
(a.trr_duracao / 60)::int as duracao_mininuto, (a.trr_duracao % 60) as duracao_segundo, a.trr_franquia, h.contr_tipo_franquia, a.trr_duracao as duracao, |
|
a.trr_tipo_chamada, a.trr_duracao_transf, h.contr_dia_fechamento, |
|
j.prc_tipo, j.prc_preco_vc1, j.prc_preco_vc2, j.prc_preco_vc3, j.prc_preco_vc4, j.prc_preco_vc5, j.prc_preco_vc6, j.prc_preco_vc1_cad, j.prc_preco_vc2_cad, j.prc_preco_vc3_cad, j.prc_preco_vc4_cad, |
|
j.prc_preco_vc5_cad, j.prc_preco_vc6_cad, j.prc_preco_vc1_ext, j.prc_preco_vc2_ext, j.prc_preco_vc3_ext, j.prc_preco_vc4_ext, j.prc_preco_vc5_ext, j.prc_preco_vc6_ext |
|
from pbx_tarif_registra a |
|
inner join pbx_operadoras b on b.oper_id = a.oper_id_dest |
|
inner join pbx_tarif_contrato h on h.contr_id = a.contr_id |
|
inner join pbx_tarif_contrato_preco i on i.prc_id = a.prc_id |
|
inner join pbx_tarif_contrato_preco j on j.contr_id = a.contr_id and j.prc_id = (select max(prc_id) as prc_id from pbx_tarif_contrato_preco where contr_id = a.contr_id and prc_vigencia <= a.trr_data) |
|
left join pbx_tarifa_tipo_preco g on g.ttp_id = a.trr_vc |
|
where length(trr_destino) >= 8 |
|
and a.trr_duracao > 3 |
|
and a.trr_data >= '$dataI' |
|
and a.trr_data <= '$dataF'\n"; |
|
$sql .= " and a.contr_id <> 0 and trr_tarifa_zero = 0 and gettipoligacao(a.trr_destino, $dddDef) <> 'Gratuita'\n"; |
|
if ($listaContrato) { |
|
$sql .= " and a.contr_id = '$listaContrato'\n"; |
|
} |
|
$sql .= " order by h.contr_descricao, i.prc_vigencia, a.trr_data, a.trr_inicio\n"; |
|
|
|
//if(IsAdmin ())echo $sql . "\n"; |
|
return $sql; |
|
} |
|
|
|
function GetLinhaTRefat($agrup) { |
|
$linha = "<tr> |
|
<td align=\"left\" class=\"headData\">{contr_descricao}</td> |
|
<td align=\"left\" class=\"headData\">{prc_vigencia}</td> |
|
<td align=\"left\" class=\"headData\">{oper_nome}</td> |
|
<td align=\"left\" class=\"headData\">{ttp_descricao}</td>\n"; |
|
if (!$agrup) |
|
$linha .= "<td align=\"right\" class=\"headData\">{trr_origem}</td>\n"; |
|
if (!$agrup) |
|
$linha .= "<td align=\"right\" class=\"headData\">{trr_conta}</td>\n"; |
|
if (!$agrup) |
|
$linha .= "<td align=\"right\" class=\"headData\">{trr_destino}</td>\n"; |
|
if (!$agrup) |
|
$linha .= "<td align=\"center\" class=\"headData\">{trr_data}</td>\n"; |
|
$linha .= "<td align=\"center\" class=\"headData\">{trr_duracao}</td>\n"; |
|
if (!$agrup) |
|
$linha .= "<td align=\"right\" class=\"headData\">{trr_preco}</td>\n"; |
|
$linha .= "<td align=\"right\" class=\"headData\"><span title=\"{TITLE_VALOR}\">{trr_valor}</span></td>\n"; |
|
if (!$agrup) |
|
$linha .= "<td align=\"right\" class=\"headData\">{trr_preco_retarifa}</td>\n"; |
|
$linha .= "<td align=\"right\" class=\"headData\"><span title=\"{TITLE_VALOR_REFAT}\" style=\"color:{COR_VALOR_REFAT}; font-weight:{FONT_BOLD_REFAT};\">{trr_valor_retarifa}</span></td>\n"; |
|
$linha .= "</tr>\n"; |
|
|
|
return $linha; |
|
} |
|
|
|
function GetRetarifa(&$row) { |
|
$vc = $row['trr_vc']; |
|
|
|
switch ($vc) { |
|
case 'vc1' : $trrPreco = $row['prc_preco_vc1']; |
|
$trrVcCad = $row['prc_preco_vc1_cad']; |
|
$trrVcCadExt = $row['prc_preco_vc1_ext']; |
|
break; |
|
case 'vc2' : $trrPreco = $row['prc_preco_vc2']; |
|
$trrVcCad = $row['prc_preco_vc2_cad']; |
|
$trrVcCadExt = $row['prc_preco_vc2_ext']; |
|
break; |
|
case 'vc3' : $trrPreco = $row['prc_preco_vc3']; |
|
$trrVcCad = $row['prc_preco_vc3_cad']; |
|
$trrVcCadExt = $row['prc_preco_vc3_ext']; |
|
break; |
|
case 'vc4' : $trrPreco = $row['prc_preco_vc4']; |
|
$trrVcCad = $row['prc_preco_vc4_cad']; |
|
$trrVcCadExt = $row['prc_preco_vc4_ext']; |
|
break; |
|
case 'vc5' : $trrPreco = $row['prc_preco_vc5']; |
|
$trrVcCad = $row['prc_preco_vc5_cad']; |
|
$trrVcCadExt = $row['prc_preco_vc5_ext']; |
|
break; |
|
case 'vc6' : $trrPreco = $row['prc_preco_vc6']; |
|
$trrVcCad = $row['prc_preco_vc6_cad']; |
|
$trrVcCadExt = $row['prc_preco_vc6_ext']; |
|
break; |
|
} |
|
|
|
$row["trr_preco_tipo_retarifa"] = $row['prc_tipo']; |
|
$row["trr_preco_retarifa"] = $trrPreco; |
|
$row["trr_vc_cad_retarifa"] = $trrVcCad; |
|
$row["trr_vc_ext_retarifa"] = $trrVcCadExt; |
|
} |
|
|
|
function GetDadosRefatura($refaturar = false, $msg = '') { |
|
global $imp, $agrup, $dbcon, $jsStartup, $numRefatura; |
|
$numRefatura = 0; |
|
$arOrdem = GetOrdenacaoRelatorio($dbcon, REL_SAINTES_RAMAL); |
|
$ordem = $arOrdem[0]; |
|
$ordem = empty($ordem) ? "a.src" : $ordem; |
|
$linhas = array(); |
|
$idxAgp = 0; |
|
$agv = array(); |
|
$agd = array(); |
|
$agr = array(); |
|
$queryIns = array(); |
|
$queryUpd = array(); |
|
$colunas = array('contr_descricao', 'prc_vigencia', 'oper_nome', 'ttp_descricao', 'trr_origem', 'trr_conta', 'trr_destino', 'trr_data', 'trr_duracao', 'trr_valor', 'trr_valor_orig', 'trr_duracao_orig', 'trr_?reco', 'trr_preco_retarifa', 'trr_valor_retarifa', 'COR_VALOR_REFAT', 'FONT_BOLD_REFAT', 'TITLE_VALOR', 'TITLE_VALOR_REFAT'); |
|
|
|
$result = pg_query($dbcon, GetQuery()); |
|
while ($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"]); |
|
$tarifaZero = ($tarifaZero || $franquia) && (!$franquiaParcial); |
|
|
|
$row["prc_vigencia"] = FormataDBDataHora($row["prc_vigencia"]); |
|
$row["trr_origem"] = $agrup ? '' : $row["trr_origem"]; |
|
$row["trr_conta"] = $agrup ? '' : ($row["trr_conta_senha"] ? $row["trr_conta"] : "-"); |
|
$row["trr_destino"] = $agrup ? '' : ( ($tarifaZero ? '#' : ($franquia ? ($franquiaParcial ? '*' : '**') : '') ) . $row["trr_destino"] ); |
|
$row["trr_data"] = $agrup ? '' : FormataDBDataHora($row["trr_inicio"]); |
|
|
|
$row["trr_destino"] = ocultarTelefone($row["trr_destino"]); |
|
/* |
|
* Calcula hash para agrupamento. |
|
*/ |
|
$idxAgp = md5($row["contr_descricao"] . $row["prc_vigencia"] . $row["oper_nome"] . $row["ttp_descricao"] . $row["trr_origem"] . $row["trr_conta"] . $row["trr_data"]); |
|
|
|
/* |
|
* Duração total da chamada. |
|
*/ |
|
$row["trr_duracao"] = $franquiaParcial ? $row["trr_franquia"] : (int) $row["trr_duracao"]; |
|
/* |
|
* Parametrização do preco, tabela pbx_tarif_contrato_preco -> preco, cadencia, quebra da cadencia. |
|
* correspondente na tabela pbx_tarif_registra -> trr_preco, trr_vc_cad, trr_vc_ext |
|
* Fixo Local....: prc_preco_vc1, prc_preco_vc1_cad, prc_preco_vc1_ext |
|
* Fixo DDD......: prc_preco_vc2, prc_preco_vc2_cad, prc_preco_vc2_ext |
|
* Fixo DDI......: prc_preco_vc5, prc_preco_vc5_cad, prc_preco_vc5_ext |
|
* Móvel Local...: prc_preco_vc3, prc_preco_vc3_cad, prc_preco_vc3_ext |
|
* Móvel DDD.....: prc_preco_vc4, prc_preco_vc4_cad, prc_preco_vc4_ext |
|
* Móvel DDI.....: prc_preco_vc6, prc_preco_vc6_cad, prc_preco_vc6_ext |
|
* Tarifa por chamada = 1 ou Minuto = 2, tabela pbx_tarif_contrato_preco -> prc_tipo, pbx_tarif_registra -> trr_preco_tipo |
|
*/ |
|
if (!$tarifaZero) { |
|
$row["contr_descricao"] = sprintf("<a href=\"javaScript:NovaJanela('index.php?idProg=198&acao=preco&contr_id=%s&contr_descricao=%s&oper_id=%s&oper_nome=%s&contr_tipo_franquia=%s&contr_dia_fechamento=%s', 'jnCadPreco', '800', '600', 'resizable=NO,scrollbars=NO');\" style=\"color: #000\">%s</a>", $row["contr_id"], $row["contr_descricao"], $row["oper_numero_dest"], $row["oper_nome"], $row["contr_tipo_franquia"], $row["contr_dia_fechamento"], $row["contr_descricao"] |
|
); |
|
|
|
|
|
$disp = 1; |
|
$imp++; |
|
$row["trr_valor"] = TarifaChamada($row["trr_preco_tipo"], $row["trr_duracao"], $row["trr_preco"], $row["trr_vc_cad"], $row["trr_vc_ext"]); |
|
$row['TITLE_VALOR'] = $agrup ? '' : sprintf('Tipo: %s Preço: %s Cadência: %s X %s', ($row["trr_preco_tipo"] == 1 ? 'Minuto' : 'Chamada'), $row["trr_preco"], $row["trr_vc_cad"], $row["trr_vc_ext"]); |
|
/* |
|
* Retarifa a chamada pelo valores atuais da vigencia do contrato obtidos pela trr_data |
|
*/ |
|
GetRetarifa($row); |
|
$row["trr_valor_retarifa"] = TarifaChamada($row["trr_preco_tipo_retarifa"], $row["trr_duracao"], $row["trr_preco_retarifa"], $row["trr_vc_cad_retarifa"], $row["trr_vc_ext_retarifa"]); |
|
$row['TITLE_VALOR_REFAT'] = $agrup ? '' : sprintf('Tipo: %s Preço: %s Cadência: %s X %s', ($row["trr_preco_tipo_retarifa"] == 1 ? 'Minuto' : 'Chamada'), $row["trr_preco_retarifa"], $row["trr_vc_cad_retarifa"], $row["trr_vc_ext_retarifa"]); |
|
|
|
/* |
|
* Para habilitar a refaturação deve haver ao menos 1 registro divergente; |
|
*/ |
|
if (!$numRefatura && ($row["trr_valor"] != $row["trr_valor_retarifa"])) { |
|
$numRefatura++; |
|
} |
|
$incRefat = $refaturar && (($row["trr_valor"] != $row["trr_valor_retarifa"]) || ($row["trr_preco"] != $row["trr_preco_retarifa"] ) || ($row["trr_vc_cad"] != $row["trr_vc_cad_retarifa"]) || ($row["trr_vc_ext"] != $row["trr_vc_ext_retarifa"])); |
|
if ($refaturar && $incRefat) { |
|
$sql = "update pbx_tarif_registra set trr_preco_tipo = %s, trr_preco = %s, trr_vc_cad = %s, trr_vc_ext = %s where trr_id = %s;\n"; |
|
$queryUpd[] = sprintf($sql, $row["trr_preco_tipo_retarifa"], $row["trr_preco_retarifa"], $row["trr_vc_cad_retarifa"], $row["trr_vc_ext_retarifa"], $row["trr_id"]); |
|
|
|
$sql = "insert into pbx_tarif_retarifa values(now(),'%s','%s','%s','%s','%s','%s');\n"; |
|
$queryIns[] = sprintf($sql, $row["trr_id"], $row["trr_preco_tipo"], $row["trr_preco"], $row["trr_vc_cad"], $row["trr_vc_ext"], GetLogin()); |
|
} |
|
|
|
/* |
|
* Valores agrupados |
|
*/ |
|
$agv[$idxAgp] = isset($agv[$idxAgp]) ? ($agv[$idxAgp] + $row["trr_valor"]) : $row["trr_valor"]; |
|
$agr[$idxAgp] = isset($agv[$idxAgp]) ? ($agr[$idxAgp] + $row["trr_valor_retarifa"]) : $row["trr_valor_retarifa"]; |
|
$agd[$idxAgp] = isset($agd[$idxAgp]) ? ($agd[$idxAgp] + $row["trr_duracao"]) : $row["trr_duracao"]; |
|
$row["trr_valor"] = FormataValor($agv[$idxAgp]); |
|
$row["trr_valor_retarifa"] = FormataValor($agr[$idxAgp]); |
|
$row["trr_duracao"] = SecondToStrTime($agd[$idxAgp]); |
|
$row["trr_valor_orig"] = $agv[$idxAgp]; |
|
$row["trr_valor_retarifa_orig"] = $agr[$idxAgp]; |
|
$row["trr_duracao_orig"] = $agd[$idxAgp]; |
|
|
|
$row["COR_VALOR_REFAT"] = ($row["trr_valor_retarifa_orig"] == $row["trr_valor_orig"]) ? '#000' : (($row["trr_valor_retarifa_orig"] > $row["trr_valor_orig"]) ? '#00f' : '#f00'); |
|
$row["FONT_BOLD_REFAT"] = ($row["trr_valor_retarifa_orig"] == $row["trr_valor_orig"]) ? 'normal' : 'bold'; |
|
|
|
$linhas[$idxAgp] = $row; |
|
} |
|
} |
|
|
|
if (!$refaturar && $msg) { |
|
$jsStartup[] = "alert('$msg');"; |
|
} |
|
return $refaturar ? GetDadosRefatura(false, Refatura($dbcon, $queryIns, $queryUpd)) : $linhas; |
|
} |
|
|
|
function Refatura($dbcon, $queryIns, $queryUpd) { |
|
$intran = false; |
|
try { |
|
$tamQuery = 500; |
|
$result = pg_query($dbcon, 'begin'); |
|
if (!$result) { |
|
throw new Exception("Não foi possível iniciar a retarifação!"); |
|
} |
|
$intran = true; |
|
/* |
|
* gravando o log da retarifação. |
|
*/ |
|
$query = ''; |
|
$numLinhas = 0; |
|
foreach ($queryIns as $sql) { |
|
$query .= $sql; |
|
if (++$numLinhas >= $tamQuery) { |
|
if (!$result = ($result && pg_query($dbcon, $query))) { |
|
break; |
|
} |
|
$numLinhas = 0; |
|
$query = ''; |
|
} |
|
} |
|
|
|
if ($query && $result) { |
|
$result = pg_query($dbcon, $query); |
|
} |
|
if (!$result) { |
|
throw new Exception("Não foi possível registrar a retarifação!"); |
|
} |
|
|
|
/* |
|
* Atualizando os registros da tarifação. |
|
*/ |
|
$query = ''; |
|
$numLinhas = 0; |
|
foreach ($queryUpd as $sql) { |
|
$query .= $sql; |
|
if (++$numLinhas >= $tamQuery) { |
|
if (!$result = ($result && pg_query($dbcon, $query))) { |
|
break; |
|
} |
|
$numLinhas = 0; |
|
$query = ''; |
|
} |
|
} |
|
|
|
if ($query && $result) { |
|
$result = pg_query($dbcon, $query); |
|
} |
|
if (!$result) { |
|
throw new Exception("Não foi possível retarifar os registros!"); |
|
} |
|
|
|
$result = pg_query($dbcon, 'commit'); |
|
if (!$result) { |
|
throw new Exception("Não foi possível concluir a retarifação!"); |
|
} |
|
|
|
return 'Operação realizada com sucesso!'; |
|
} catch (Exception $ex) { |
|
if ($intran) |
|
pg_query($dbcon, 'rollback'); |
|
return $ex->getMessage(); |
|
} |
|
} |
|
|
|
?>
|
|
|