$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 = " $noData"; } $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 = " Chamadas: $imp Total $somaDuration"; if ($agrup) { $linhaTotal .= "$somaValor $somaValorRefaturado "; } else { $linhaTotal .= "- $somaValor - $somaValorRefaturado "; } $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 = " {contr_descricao} {prc_vigencia} {oper_nome} {ttp_descricao}\n"; if (!$agrup) $linha .= "{trr_origem}\n"; if (!$agrup) $linha .= "{trr_conta}\n"; if (!$agrup) $linha .= "{trr_destino}\n"; if (!$agrup) $linha .= "{trr_data}\n"; $linha .= "{trr_duracao}\n"; if (!$agrup) $linha .= "{trr_preco}\n"; $linha .= "{trr_valor}\n"; if (!$agrup) $linha .= "{trr_preco_retarifa}\n"; $linha .= "{trr_valor_retarifa}\n"; $linha .= "\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("%s", $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(); } } ?>