package gcom.gui.cobranca;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.imovel.ImovelPerfil;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cobranca.CobrancaDocumento;
import gcom.cobranca.CobrancaForma;
import gcom.cobranca.bean.ContaValoresHelper;
import gcom.cobranca.bean.DebitoCreditoParcelamentoHelper;
import gcom.cobranca.bean.GuiaPagamentoValoresHelper;
import gcom.cobranca.bean.IndicadoresParcelamentoHelper;
import gcom.cobranca.bean.NegociacaoOpcoesParcelamentoHelper;
import gcom.cobranca.bean.ObterOpcoesDeParcelamentoHelper;
import gcom.cobranca.parcelamento.Parcelamento;
import gcom.fachada.Fachada;
import gcom.faturamento.credito.CreditoARealizar;
import gcom.faturamento.debito.DebitoACobrar;
import gcom.faturamento.debito.DebitoACobrarCategoria;
import gcom.faturamento.debito.DebitoACobrarCategoriaPK;
import gcom.faturamento.debito.DebitoACobrarGeral;
import gcom.faturamento.debito.DebitoCreditoSituacao;
import gcom.faturamento.debito.DebitoTipo;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.FiltroParametro;
import gcom.util.filtro.ParametroNulo;
import gcom.util.filtro.ParametroSimples;
import gcom.util.filtro.ParametroSimplesDiferenteDe;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Esta classe tem por finalidade a emiss�o do extrato de d�bitos do im�vel
*
* @author Adriana Muniz
* @date 23/11/2011
*/
public class EmissaoRelatorioDebitoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("emissaoRelatorioDebito");
Fachada fachada = Fachada.getInstancia();
DebitoCreditoDadosSelecaoExtratoActionForm form =
(DebitoCreditoDadosSelecaoExtratoActionForm) actionForm;
HttpSession sessao = httpServletRequest.getSession(false);
String idImovel = form.getIdImovel();
String indicadorIncluirAcrescimosImpontualidade = form.getIndicadorIncluirAcrescimosImpontualidade();
//String indicadorTaxaCobranca = form.getIndicadorTaxaCobranca();
Collection<ContaValoresHelper> colecaoContas = null;
Collection<GuiaPagamentoValoresHelper> colecaoGuiasPagamento = null;
Collection<DebitoACobrar> colecaoDebitosACobrar = null;
Collection<CreditoARealizar> colecaoCreditoARealizar = null;
Collection<DebitoACobrar> colecaoDebitosACobrarParcelamento = null;
Collection<CreditoARealizar> colecaoCreditoARealizarParcelamento = null;
Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoDebitosDeParcelamento = null;
Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoCreditosDeParcelamento = null;
BigDecimal valorAcrescimosImpontualidade = new BigDecimal("0.00");
BigDecimal valorDocumento = new BigDecimal("0.00");
BigDecimal valorDesconto = new BigDecimal("0.00");
BigDecimal valorAtualizacaoMonetaria = new BigDecimal("0.00");
BigDecimal valorJurosMora = new BigDecimal("0.00");
BigDecimal valorMulta = new BigDecimal("0.00");
String idsContas = httpServletRequest.getParameter("conta");
String idsDebitosPreteritos = httpServletRequest.getParameter("debitosPreteritos");
if (idsDebitosPreteritos != null) {
if (idsContas == null)
idsContas = idsDebitosPreteritos;
else
idsContas += "," + idsDebitosPreteritos;
}
String idsDebitos = httpServletRequest.getParameter("debito");
String idsCreditos = httpServletRequest.getParameter("credito");
String idsGuias = httpServletRequest.getParameter("guiaPagamento");
String idsParcelamentos = httpServletRequest.getParameter("parcelamento");
Object[] contas = this.obterContasSelecionadas(idsContas, sessao);
Object[] debitos = this.obterDebitosSelecionados(idsDebitos, sessao);
Object[] creditos = this.obterCreditosSelecionadas(idsCreditos, sessao);
Object[] guias = this.obterGuiasSelecionadas(idsGuias, sessao);
Object[] parcelamentos = this.obterParcelamentosSelecionados(idsParcelamentos, sessao);
//ANTECIPA��O DE PARCELAS DE PARCELAMENTO
Map<String, String[]> requestAntecipacaoParcelasMap = httpServletRequest.getParameterMap();
Object[] parcelasAntecipacaoParcelamento = this.obterAntecipacaoParcelasParcelamentosSelecionados(
sessao, requestAntecipacaoParcelasMap, fachada);
/*
* TOTALIZANDO O VALOR DE CADA TIPO DE DOCUMENTO SELECIONADO, EM SEPERADO
*/
BigDecimal valorTotalConta = BigDecimal.ZERO;
BigDecimal valorTotalDebitoACobrar = BigDecimal.ZERO;
BigDecimal valorTotalCreditoARealizar = BigDecimal.ZERO;
BigDecimal valorTotalGuiaPagamento = BigDecimal.ZERO;
BigDecimal valorTotalDebitoParcelamento = BigDecimal.ZERO;
BigDecimal valorTotalCreditoParcelamento = BigDecimal.ZERO;
BigDecimal valorTotalAntecipacaoDebitoParcelamento = BigDecimal.ZERO;
BigDecimal valorTotalAntecipacaoCreditoParcelamento = BigDecimal.ZERO;
//CONTAS
if(contas != null){
colecaoContas = (Collection)contas[0];
valorTotalConta = (BigDecimal)contas[1];
if(contas[2] != null &&
!indicadorIncluirAcrescimosImpontualidade.equals(CobrancaDocumento.NAO_INCLUIR_ACRESCIMOS)){
valorAcrescimosImpontualidade = (BigDecimal)contas[2];/* recebe o valor da multa se for diferente de nulo
o campo valorMulta e incluir impontualidades � verdadeiro*/
}
valorAtualizacaoMonetaria = (BigDecimal)contas[3];
valorJurosMora = (BigDecimal)contas[4];
valorMulta = (BigDecimal)contas[5];
}
//D�BITOS A COBRAR
if(debitos != null){
colecaoDebitosACobrar = (Collection)debitos[0];
valorTotalDebitoACobrar = (BigDecimal)debitos[1];
}
//CR�DITOS A REALIZAR
if(creditos != null){
colecaoCreditoARealizar = (Collection)creditos[0];
valorTotalCreditoARealizar = (BigDecimal)creditos[1];
}
//GUIAS DE PAGAMENTO
if(guias != null){
colecaoGuiasPagamento = (Collection)guias[0];
valorTotalGuiaPagamento = (BigDecimal)guias[1];
valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add((BigDecimal)guias[2]);
valorJurosMora = valorJurosMora.add((BigDecimal)guias[3]);
valorMulta = valorMulta.add((BigDecimal)guias[4]);
}
//PARCELAMENTOS
if(parcelamentos != null){
colecaoDebitosACobrarParcelamento = (Collection)parcelamentos[0];
valorTotalDebitoParcelamento = (BigDecimal)parcelamentos[1];
if(colecaoDebitosACobrarParcelamento != null){
if(colecaoDebitosACobrar == null){
colecaoDebitosACobrar = new ArrayList();
}
colecaoDebitosACobrar.addAll(colecaoDebitosACobrarParcelamento);
}
colecaoCreditoARealizarParcelamento = (Collection)parcelamentos[2];
valorTotalCreditoParcelamento = (BigDecimal)parcelamentos[3];
if(colecaoCreditoARealizarParcelamento != null){
if(colecaoCreditoARealizar == null){
colecaoCreditoARealizar = new ArrayList();
}
colecaoCreditoARealizar.addAll(colecaoCreditoARealizarParcelamento);
}
}
//ANTECIPA��O PARCELAS DE PARCELAMENTO
if (parcelasAntecipacaoParcelamento != null){
colecaoAntecipacaoDebitosDeParcelamento = (Collection<DebitoCreditoParcelamentoHelper>) parcelasAntecipacaoParcelamento[0];
valorTotalAntecipacaoDebitoParcelamento = (BigDecimal) parcelasAntecipacaoParcelamento[1];
colecaoAntecipacaoCreditosDeParcelamento = (Collection<DebitoCreditoParcelamentoHelper>) parcelasAntecipacaoParcelamento[2];
valorTotalAntecipacaoCreditoParcelamento = (BigDecimal) parcelasAntecipacaoParcelamento[3];
}
//TOTALIZANDO O VALOR DO DOCUMENTO DE COBRAN�A QUE SER� GERADO
valorDocumento = valorTotalConta.add(valorTotalDebitoACobrar);
valorDocumento = valorDocumento.add(valorTotalGuiaPagamento);
valorDocumento = valorDocumento.add(valorTotalDebitoParcelamento);
valorDocumento = valorDocumento.add(valorTotalAntecipacaoDebitoParcelamento);
valorDocumento = valorDocumento.subtract(valorTotalCreditoARealizar);
valorDocumento = valorDocumento.subtract(valorTotalCreditoParcelamento);
valorDocumento = valorDocumento.subtract(valorTotalAntecipacaoCreditoParcelamento);
//TOTALIZANDO O VALOR DOS CR�DITOS A REALIZAR
BigDecimal valorCreditoDocumento = valorTotalCreditoARealizar.add(valorTotalCreditoParcelamento);
valorCreditoDocumento = valorCreditoDocumento.add(valorTotalAntecipacaoCreditoParcelamento);
if(indicadorIncluirAcrescimosImpontualidade.equals(CobrancaDocumento.INCLUIR_ACRESCIMOS)){
valorDocumento = valorDocumento.add(valorAcrescimosImpontualidade);
}
if(indicadorIncluirAcrescimosImpontualidade.equals(CobrancaDocumento.INCLUIR_ACRESCIMOS_COM_DESCONTO)){
valorDesconto = valorDesconto.add(valorAcrescimosImpontualidade);
}
// valorDesconto = valorDesconto.add(valorTotalCreditoARealizar);
// valorDesconto = valorDesconto.add(valorTotalCreditoParcelamento);
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
if(sistemaParametro.getResolucaoDiretoria() != null){
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
calcularDescontos(form, fachada, sistemaParametro, usuarioLogado,
valorDocumento, valorTotalDebitoParcelamento,
valorCreditoDocumento, colecaoGuiasPagamento,
colecaoContas, valorMulta, valorJurosMora,
valorAtualizacaoMonetaria);
valorDocumento = Util.formatarMoedaRealparaBigDecimal(form.getValorPagamentoAVista());
valorDesconto = Util.formatarMoedaRealparaBigDecimal(form.getValorDescontoPagamentoAVista());
}
/* if(indicadorTaxaCobranca != null &&
indicadorTaxaCobranca.equals(ConstantesSistema.SIM.toString())){
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, new Integer(idImovel)));
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("setorComercial");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra");
filtroImovel.adicionarParametro(new ParametroSimplesDiferenteDe(
FiltroImovel.INDICADOR_IMOVEL_EXCLUIDO,
Imovel.IMOVEL_EXCLUIDO, FiltroParametro.CONECTOR_OR,2));
filtroImovel.adicionarParametro(new ParametroNulo(FiltroImovel.INDICADOR_IMOVEL_EXCLUIDO));
Collection<Imovel> imovelPesquisado = fachada.pesquisar(filtroImovel, Imovel.class.getName());
Imovel imovel = imovelPesquisado.iterator().next();
// SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
BigDecimal valorTaxa = fachada.obterValorTaxaDocumentoCobranca(imovel, Short.valueOf(indicadorTaxaCobranca));
valorDocumento = valorDocumento.add(valorTaxa);
DebitoTipo debitoTipo = null;
// Pesquisa o tipo de d�bito no sistema
debitoTipo = fachada.pesquisarDebitoTipo(DebitoTipo.TAXA_COBRANCA);
// Cria a vari�vel que vai armazenar a situa��o de cr�dito/d�bito
DebitoCreditoSituacao debitoCreditoSituacaoAtual = new DebitoCreditoSituacao();
debitoCreditoSituacaoAtual.setId(DebitoCreditoSituacao.NORMAL);
// Cria a vari�vel que vai armazenar a forma de cobran�a
CobrancaForma cobrancaForma = new CobrancaForma();
cobrancaForma.setId(CobrancaForma.COBRANCA_EM_CONTA);
*//** Cria o d�bito a cobrar geral *//*
DebitoACobrarGeral debitoACobrarGeral = new DebitoACobrarGeral();
debitoACobrarGeral.setIndicadorHistorico(new Short("2"));
debitoACobrarGeral.setUltimaAlteracao(new Date());
Integer idDebitoACobrarGeral = (Integer) fachada.inserir(debitoACobrarGeral);
// Cria o d�bito a cobrar
// Seta as informa��es necess�rias para criar o d�bito a cobrar
DebitoACobrar debitoACobrar = new DebitoACobrar();
debitoACobrar.setImovel(imovel);
debitoACobrar.setDebitoTipo(debitoTipo);
debitoACobrar.setGeracaoDebito(new Date());
debitoACobrar.setAnoMesReferenciaDebito(null);
Integer anoMesParametro = sistemaParametro.getAnoMesArrecadacao();
Integer anoMesCorrente = Util.formataAnoMes(new Date());
if(anoMesParametro > anoMesCorrente){
debitoACobrar.setAnoMesReferenciaContabil(anoMesParametro);
}else{
debitoACobrar.setAnoMesReferenciaContabil(anoMesCorrente);
}
debitoACobrar.setAnoMesCobrancaDebito(sistemaParametro.getAnoMesArrecadacao());
debitoACobrar.setValorDebito(valorTaxa);
debitoACobrar.setNumeroPrestacaoDebito((new Short("1")).shortValue());
debitoACobrar.setNumeroPrestacaoCobradas((new Short("0")).shortValue());
debitoACobrar.setLocalidade(imovel.getLocalidade());
debitoACobrar.setQuadra(imovel.getQuadra());
debitoACobrar.setCodigoSetorComercial(imovel.getSetorComercial().getCodigo());
debitoACobrar.setNumeroQuadra(imovel.getQuadra().getNumeroQuadra());
debitoACobrar.setNumeroLote(imovel.getLote());
debitoACobrar.setNumeroSubLote(imovel.getSubLote());
debitoACobrar.setPercentualTaxaJurosFinanciamento(new BigDecimal("0.00"));
debitoACobrar.setRegistroAtendimento(null);
debitoACobrar.setOrdemServico(null);
debitoACobrar.setFinanciamentoTipo(debitoTipo.getFinanciamentoTipo());
debitoACobrar.setLancamentoItemContabil(debitoTipo.getLancamentoItemContabil());
debitoACobrar.setDebitoCreditoSituacaoAtual(debitoCreditoSituacaoAtual);
debitoACobrar.setDebitoCreditoSituacaoAnterior(null);
debitoACobrar.setParcelamentoGrupo(null);
debitoACobrar.setCobrancaForma(cobrancaForma);
debitoACobrar.setUltimaAlteracao(new Date());
debitoACobrar.setId(idDebitoACobrarGeral);
debitoACobrar.setDebitoACobrarGeral(debitoACobrarGeral);
fachada.inserir(debitoACobrar);
// [UC0108] Obter Quantidade de Economias por Categoria
Collection<Categoria> colecaoCategoriasImovel = fachada.obterQuantidadeEconomiasCategoria(imovel);
// [UC0185] Obter Valor por Categoria, passando o valor da taxa
Collection<BigDecimal> colecaoValorePorCategoria = fachada.obterValorPorCategoria(colecaoCategoriasImovel, valorTaxa);
// Cria as itera��es de categoria e valor
Iterator iteratorCategoria = colecaoCategoriasImovel.iterator();
Iterator iteratorValorPorCategoria = colecaoValorePorCategoria.iterator();
// Inclui na tabela DEBITO_A_COBRAR_CATEGORIA a(s) categoria(s) e
// sua(s) respectiva(s) quantidade(s) de economia retornados pels
//[UC0108] e os valores retornados pelo [UC0185] para cada categoria
while (iteratorCategoria.hasNext()) {
// Recupera a categoria
Categoria categoria = (Categoria) iteratorCategoria.next();
// Recupera o valor da categoria
BigDecimal valorPorCategoria = (BigDecimal) iteratorValorPorCategoria.next();
// Cria o d�bito a cobrar categoria
DebitoACobrarCategoria debitoACobrarCategoria = new DebitoACobrarCategoria();
DebitoACobrarCategoriaPK debitoACobrarCategoriaPK = new DebitoACobrarCategoriaPK(debitoACobrar, categoria);
debitoACobrarCategoria.setComp_id(debitoACobrarCategoriaPK);
debitoACobrarCategoria.setQuantidadeEconomia(categoria.getQuantidadeEconomiasCategoria());
debitoACobrarCategoria.setValorCategoria(valorPorCategoria);
debitoACobrarCategoria.setUltimaAlteracao(new Date());
// Inserindo o DEBITO_A_COBRAR_CATEGORIA no banco de dados
fachada.inserir(debitoACobrarCategoria);
}
if(colecaoDebitosACobrar == null){
colecaoDebitosACobrar = new ArrayList();
}
colecaoDebitosACobrar.add(debitoACobrar);
}*/
if(valorDocumento.compareTo(new BigDecimal("0.00")) < 0){
throw new ActionServletException("atencao.resultado.negativo");
}
sessao.setAttribute("colecaoContasRelatorio",colecaoContas);
sessao.setAttribute("colecaoGuiasPagamentoRelatorio",colecaoGuiasPagamento);
sessao.setAttribute("colecaoDebitosACobrarRelatorio",colecaoDebitosACobrar);
sessao.setAttribute("colecaoCreditoARealizarRelatorio",colecaoCreditoARealizar);
sessao.setAttribute("valorAcrescimosImpontualidadeRelatorio" ,valorAcrescimosImpontualidade);
sessao.setAttribute("valorDocumentoRelatorio" ,valorDocumento);
sessao.setAttribute("valorDescontoRelatorio" ,valorDesconto);
sessao.setAttribute("valorCreditoARealizarRelatorio" ,valorCreditoDocumento);
sessao.setAttribute("idImovelRelatorio",idImovel);
sessao.setAttribute("nomeClienteRelatorio",form.getNomeClienteUsuarioImovel());
sessao.setAttribute("cpfCnpjRelatorio", form.getCpfCnpj() );
sessao.setAttribute("colecaoAntecipacaoDebitosDeParcelamentoRelatorio",colecaoAntecipacaoDebitosDeParcelamento);
sessao.setAttribute("colecaoAntecipacaoCreditosDeParcelamentoRelatorio",colecaoAntecipacaoCreditosDeParcelamento);
return retorno;
}
private Object[] obterContasSelecionadas(String idsContas, HttpSession sessao){
Object[] retorno = null;
Collection<ContaValoresHelper> colecaoContas = null;
BigDecimal valorTotalConta = BigDecimal.ZERO;
BigDecimal valorTotalAcrescimoImpontualidade = BigDecimal.ZERO;
BigDecimal valorAtualizacaoMonetaria = new BigDecimal("0.00");
BigDecimal valorJurosMora = new BigDecimal("0.00");
BigDecimal valorMulta = new BigDecimal("0.00");
if (idsContas != null && !idsContas.equals("")){
retorno = new Object[6];
colecaoContas = new ArrayList();
Collection colecaoContasSessao = (Collection) sessao.getAttribute("colecaoConta");
Iterator itColecaoContasSessao = colecaoContasSessao.iterator();
ContaValoresHelper contaValoresHelper = null;
String[] idsContasArray = idsContas.split(",");
while (itColecaoContasSessao.hasNext()){
contaValoresHelper = (ContaValoresHelper) itColecaoContasSessao.next();
for(int x=0; x<idsContasArray.length; x++){
if (contaValoresHelper.getConta().getId().equals(new Integer(idsContasArray[x]))){
colecaoContas.add(contaValoresHelper);
valorTotalConta = valorTotalConta.add(contaValoresHelper.getValorTotalConta());
valorTotalAcrescimoImpontualidade = valorTotalAcrescimoImpontualidade.add(
contaValoresHelper.getValorTotalContaValoresParcelamento());
if (contaValoresHelper.getConta().getValorImposto() != null) {
valorTotalConta = valorTotalConta.subtract(contaValoresHelper.getConta().getValorImposto());
}
if (contaValoresHelper.getValorAtualizacaoMonetaria() != null && !contaValoresHelper.getValorAtualizacaoMonetaria().equals("")) {
valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(contaValoresHelper.getValorAtualizacaoMonetaria().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (contaValoresHelper.getValorJurosMora() != null && !contaValoresHelper.getValorJurosMora().equals("")) {
valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorJurosMora = valorJurosMora.add(contaValoresHelper.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (contaValoresHelper.getValorMulta() != null && !contaValoresHelper.getValorMulta().equals("")) {
valorMulta.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorMulta = valorMulta.add(contaValoresHelper.getValorMulta().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
}
}
}
retorno[0] = colecaoContas;
retorno[1] = valorTotalConta;
retorno[2] = valorTotalAcrescimoImpontualidade;
retorno[3] = valorAtualizacaoMonetaria;
retorno[4] = valorJurosMora;
retorno[5] = valorMulta;
}
return retorno;
}
private Object[] obterDebitosSelecionados(String idsDebitos, HttpSession sessao){
Object[] retorno = null;
Collection<DebitoACobrar> colecaoDebitos = null;
BigDecimal valorTotalDebitoACobrar = BigDecimal.ZERO;
if (idsDebitos != null && !idsDebitos.equals("")){
retorno = new Object[2];
colecaoDebitos = new ArrayList();
Collection colecaoDebitosSessao = (Collection) sessao.getAttribute("colecaoDebitoACobrar");
Iterator itColecaoDebitosSessao = colecaoDebitosSessao.iterator();
DebitoACobrar debitoACobrar = null;
String[] idsDebitosArray = idsDebitos.split(",");
while (itColecaoDebitosSessao.hasNext()){
debitoACobrar = (DebitoACobrar) itColecaoDebitosSessao.next();
for(int x=0; x<idsDebitosArray.length; x++){
if (debitoACobrar.getId().equals(new Integer(idsDebitosArray[x]))){
colecaoDebitos.add(debitoACobrar);
valorTotalDebitoACobrar = valorTotalDebitoACobrar.add(debitoACobrar.getValorTotalComBonus());
}
}
}
retorno[0] = colecaoDebitos;
retorno[1] = valorTotalDebitoACobrar;
}
return retorno;
}
private Object[] obterCreditosSelecionadas(String idsCreditos, HttpSession sessao){
Object[] retorno = null;
Collection<CreditoARealizar> colecaoCreditos = null;
BigDecimal valorTotalCreditoARealizar = BigDecimal.ZERO;
if (idsCreditos != null && !idsCreditos.equals("")){
retorno = new Object[2];
colecaoCreditos = new ArrayList();
Collection colecaoCreditosSessao = (Collection) sessao.getAttribute("colecaoCreditoARealizar");
Iterator itColecaoCreditosSessao = colecaoCreditosSessao.iterator();
CreditoARealizar creditoARealizar = null;
String[] idsCreditosArray = idsCreditos.split(",");
while (itColecaoCreditosSessao.hasNext()){
creditoARealizar = (CreditoARealizar) itColecaoCreditosSessao.next();
for(int x=0; x<idsCreditosArray.length; x++){
if (creditoARealizar.getId().equals(new Integer(idsCreditosArray[x]))){
colecaoCreditos.add(creditoARealizar);
valorTotalCreditoARealizar = valorTotalCreditoARealizar.add(creditoARealizar.getValorTotalComBonus());
}
}
}
retorno[0] = colecaoCreditos;
retorno[1] = valorTotalCreditoARealizar;
}
return retorno;
}
private Object[] obterGuiasSelecionadas(String idsGuias, HttpSession sessao){
Object[] retorno = null;
Collection<GuiaPagamentoValoresHelper> colecaoGuias = null;
BigDecimal valorTotalGuiaPagamento = BigDecimal.ZERO;
BigDecimal valorAtualizacaoMonetaria = new BigDecimal("0.00");
BigDecimal valorJurosMora = new BigDecimal("0.00");
BigDecimal valorMulta = new BigDecimal("0.00");
if (idsGuias != null && !idsGuias.equals("")){
retorno = new Object[5];
colecaoGuias = new ArrayList();
Collection colecaoGuiasSessao = (Collection) sessao.getAttribute("colecaoGuiaPagamento");
Iterator itColecaoGuiasSessao = colecaoGuiasSessao.iterator();
GuiaPagamentoValoresHelper guiaPagamentoValoresHelper = null;
String[] idsGuiasArray = idsGuias.split(",");
while (itColecaoGuiasSessao.hasNext()){
guiaPagamentoValoresHelper = (GuiaPagamentoValoresHelper) itColecaoGuiasSessao.next();
for(int x=0; x<idsGuiasArray.length; x++){
if (guiaPagamentoValoresHelper.getGuiaPagamento().getId().equals(new Integer(idsGuiasArray[x]))){
colecaoGuias.add(guiaPagamentoValoresHelper);
valorTotalGuiaPagamento = valorTotalGuiaPagamento.add(
guiaPagamentoValoresHelper.getGuiaPagamento().getValorDebito());
if (guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria() != null && !guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria().equals("")) {
valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (guiaPagamentoValoresHelper.getValorJurosMora() != null && !guiaPagamentoValoresHelper.getValorJurosMora().equals("")) {
valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorJurosMora = valorJurosMora.add(guiaPagamentoValoresHelper.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (guiaPagamentoValoresHelper.getValorMulta() != null && !guiaPagamentoValoresHelper.getValorMulta().equals("")) {
valorMulta.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorMulta = valorMulta.add(guiaPagamentoValoresHelper.getValorMulta().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
}
}
}
retorno[0] = colecaoGuias;
retorno[1] = valorTotalGuiaPagamento;
retorno[2] = valorAtualizacaoMonetaria;
retorno[3] = valorJurosMora;
retorno[4] = valorMulta;
}
return retorno;
}
private Object[] obterParcelamentosSelecionados(String idsParcelamentos, HttpSession sessao){
Object[] retorno = null;
Collection<DebitoACobrar> colecaoDebitoFinal = null;
Collection<CreditoARealizar> colecaoCreditoFinal = null;
BigDecimal valorTotalDebito = BigDecimal.ZERO;
BigDecimal valorTotalCredito = BigDecimal.ZERO;
if (idsParcelamentos != null && !idsParcelamentos.equals("")){
retorno = new Object[4];
colecaoDebitoFinal = new ArrayList();
colecaoCreditoFinal = new ArrayList();
Collection colecaoDebitoCreditoParcelamentoSessao = (Collection) sessao.getAttribute("colecaoDebitoCreditoParcelamento");
Iterator itColecaoDebitoCreditoParcelamentoSessao = colecaoDebitoCreditoParcelamentoSessao.iterator();
DebitoCreditoParcelamentoHelper debitoCreditoParcelamentoHelper = null;
String[] idsParcelamentoArray = idsParcelamentos.split(",");
while (itColecaoDebitoCreditoParcelamentoSessao.hasNext()){
debitoCreditoParcelamentoHelper = (DebitoCreditoParcelamentoHelper) itColecaoDebitoCreditoParcelamentoSessao.next();
for(int x=0; x<idsParcelamentoArray.length; x++){
if (debitoCreditoParcelamentoHelper.getParcelamento().getId().equals(new Integer(idsParcelamentoArray[x]))){
Collection<DebitoACobrar> colecaoDebito = null;
Collection<CreditoARealizar> colecaoCredito = null;
if(debitoCreditoParcelamentoHelper.getColecaoCreditoARealizarParcelamento() != null &&
!debitoCreditoParcelamentoHelper.getColecaoCreditoARealizarParcelamento().isEmpty()){
colecaoCredito = debitoCreditoParcelamentoHelper.getColecaoCreditoARealizarParcelamento();
Iterator iterCredito = colecaoCredito.iterator();
while (iterCredito.hasNext()) {
CreditoARealizar creditoARealizar = (CreditoARealizar) iterCredito.next();
colecaoCreditoFinal.add(creditoARealizar);
valorTotalCredito = valorTotalCredito.add(creditoARealizar.getValorTotalComBonus());
}
}
if(debitoCreditoParcelamentoHelper.getColecaoDebitoACobrarParcelamento() != null &&
!debitoCreditoParcelamentoHelper.getColecaoDebitoACobrarParcelamento().isEmpty()){
colecaoDebito = debitoCreditoParcelamentoHelper.getColecaoDebitoACobrarParcelamento();
Iterator iterDebito = colecaoDebito.iterator();
while (iterDebito.hasNext()) {
DebitoACobrar debitoACobrar = (DebitoACobrar) iterDebito.next();
colecaoDebitoFinal.add(debitoACobrar);
valorTotalDebito = valorTotalDebito.add(debitoACobrar.getValorTotalComBonus());
}
}
}
}
}
retorno[0] = colecaoDebitoFinal;
retorno[1] = valorTotalDebito;
retorno[2] = colecaoCreditoFinal;
retorno[3] = valorTotalCredito;
}
return retorno;
}
/**
* [UC0630] Solicitar Emiss�o do Extrato de D�bitos
*
* @author Raphael Rossiter
* @date 30/03/2010
*
* @param sessao
* @param requestMap
* @param fachada
* @return Object[]
*/
private Object[] obterAntecipacaoParcelasParcelamentosSelecionados(HttpSession sessao,
Map<String, String[]> requestMap, Fachada fachada){
Object[] retorno = null;
//PARCELAMENTOS DISPONIBILIZADOS PARA O USU�RIO SELECIONAR
Collection colecaoDebitoCreditoParcelamentoSessao = (Collection)
sessao.getAttribute("colecaoDebitoCreditoParcelamento");
if (colecaoDebitoCreditoParcelamentoSessao != null &&
!colecaoDebitoCreditoParcelamentoSessao.isEmpty()){
Iterator itColecaoDebitoCreditoParcelamentoSessao = colecaoDebitoCreditoParcelamentoSessao.iterator();
DebitoCreditoParcelamentoHelper debitoCreditoParcelamentoHelper = null;
BigDecimal valorTotalDebito = BigDecimal.ZERO;
BigDecimal valorTotalCredito = BigDecimal.ZERO;
Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoDebitos = new ArrayList();
Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoCreditos = new ArrayList();
while (itColecaoDebitoCreditoParcelamentoSessao.hasNext()){
debitoCreditoParcelamentoHelper = (DebitoCreditoParcelamentoHelper)
itColecaoDebitoCreditoParcelamentoSessao.next();
if (requestMap.get("parc" + debitoCreditoParcelamentoHelper.getParcelamento().getId()) != null) {
//QUANTIDADE DE PARCELAS QUE SER�O ANTECIPADAS
String qtdAntecipacaoParcelas = (requestMap.get("parc" +
debitoCreditoParcelamentoHelper.getParcelamento().getId()))[0];
if(qtdAntecipacaoParcelas != null && !qtdAntecipacaoParcelas.equals("")){
//INICIALIZANDO O OBJETO DE RETORNO
if (retorno == null){
retorno = new Object[4];
}
//QUANTIDADE DE PARCELAS QUE SER�O ANTECIPADAS
debitoCreditoParcelamentoHelper.setQuantidadeAntecipacaoParcelas(
Integer.valueOf(qtdAntecipacaoParcelas));
/*
* SELECIONANDO OS D�BITOS RELACIONADOS AO PARCELAMENTO E CALCULANDO O VALOR QUE SER�
* COLOCADO NO EXTRATO DE ACORDO COM A QUANTIDADE DE PARCELAS QUE FOI INFORMADA PARA
* ANTECIPA��O.
*/
if (debitoCreditoParcelamentoHelper.getColecaoDebitoACobrarParcelamento() != null &&
!debitoCreditoParcelamentoHelper.getColecaoDebitoACobrarParcelamento().isEmpty()){
Collection colecaoDebito = debitoCreditoParcelamentoHelper
.getColecaoDebitoACobrarParcelamento();
Iterator iterDebito = colecaoDebito.iterator();
while (iterDebito.hasNext()) {
DebitoACobrar debitoACobrar = (DebitoACobrar) iterDebito.next();
/*
* [UC0630] Solicitar Emiss�o do Extrato de D�bitos
* [FS0003] � Quantidade de Parcelas Informadas Inv�lida
*/
fachada.verificarQuantidadeParcelasInformada(debitoACobrar,
Short.valueOf(qtdAntecipacaoParcelas));
//CALCULANDO O VALOR QUE SER� ANTECIPADO
valorTotalDebito = valorTotalDebito.add(debitoACobrar
.getValorAntecipacaoParcela(Integer.valueOf(qtdAntecipacaoParcelas)));
}
//D�BITOS A COBRAR QUE FAR�O PARTE DO EXTRATO DE D�BITO
colecaoAntecipacaoDebitos.add(debitoCreditoParcelamentoHelper);
}
/*
* SELECIONANDO OS CR�DITOS RELACIONADOS AO PARCELAMENTO E CALCULANDO O VALOR QUE SER�
* COLOCADO NO EXTRATO DE ACORDO COM A QUANTIDADE DE PARCELAS QUE FOI INFORMADA PARA
* ANTECIPA��O.
*/
if(debitoCreditoParcelamentoHelper.getColecaoCreditoARealizarParcelamento() != null &&
!debitoCreditoParcelamentoHelper.getColecaoCreditoARealizarParcelamento().isEmpty()){
Collection colecaoCredito = debitoCreditoParcelamentoHelper
.getColecaoCreditoARealizarParcelamento();
Iterator iterCredito = colecaoCredito.iterator();
while (iterCredito.hasNext()) {
CreditoARealizar creditoARealizar = (CreditoARealizar) iterCredito.next();
//CALCULANDO O VALOR QUE SER� ANTECIPADO
valorTotalCredito = valorTotalCredito.add(creditoARealizar
.getValorAntecipacaoParcela(Integer.valueOf(qtdAntecipacaoParcelas)));
}
//CR�DITOS A REALIZAR QUE FAR�O PARTE DO EXTRATO DE D�BITO
colecaoAntecipacaoCreditos.add(debitoCreditoParcelamentoHelper);
}
}
}
}
if (retorno != null){
retorno[0] = colecaoAntecipacaoDebitos;
retorno[1] = valorTotalDebito;
retorno[2] = colecaoAntecipacaoCreditos;
retorno[3] = valorTotalCredito;
}
}
return retorno;
}
private void calcularDescontos(DebitoCreditoDadosSelecaoExtratoActionForm form,
Fachada fachada, SistemaParametro sistemaParametro, Usuario usuarioLogado,
BigDecimal valorDebitoTotalAtualizado, BigDecimal valorTotalDebitoParcelamento,
BigDecimal valorCreditoDocumento, Collection colecaoGuiasPagamento,
Collection colecaoContas, BigDecimal valorMulta, BigDecimal valorJurosMora,
BigDecimal valorAtualizacaoMonetaria){
ImovelPerfil imovelPerfil = fachada.obterImovelPerfil(new Integer(form.getIdImovel()));
Short numeroReparcelamentoConsecutivos = fachada.consultarNumeroReparcelamentoConsecutivosImovel(new Integer(form.getIdImovel()));
if(numeroReparcelamentoConsecutivos == null){
numeroReparcelamentoConsecutivos = new Short("0");
}
IndicadoresParcelamentoHelper indicadoresParcelamentoHelper =
new IndicadoresParcelamentoHelper();
indicadoresParcelamentoHelper.setIndicadorDebitosACobrar(new Integer("1"));
indicadoresParcelamentoHelper.setIndicadorCreditoARealizar(new Integer("1"));
indicadoresParcelamentoHelper.setIndicadorGuiasPagamento(new Integer("1"));
indicadoresParcelamentoHelper.setIndicadorAcrescimosImpotualidade(new Integer("1"));
indicadoresParcelamentoHelper.setIndicadorContasRevisao(new Integer("1"));
indicadoresParcelamentoHelper.setIndicadorDividaAtiva(new Integer("3"));
//CARREGANDO O HELPER COM AS INFORMA��ES DO PARCELAMENTO
ObterOpcoesDeParcelamentoHelper helper = new ObterOpcoesDeParcelamentoHelper(
sistemaParametro.getResolucaoDiretoria().getId(),
new Integer(form.getIdImovel()),
new BigDecimal("0.00"),
new Integer(form.getIdLigacaoAguaSituacaoImovel()),
new Integer(form.getIdLigacaoEsgotoSituacaoImovel()),
imovelPerfil.getId(),
"01/0001",
new Integer(form.getIndicadorRestabelecimento()),
colecaoContas,
valorDebitoTotalAtualizado,
valorMulta,
valorJurosMora,
valorAtualizacaoMonetaria,
new Integer(numeroReparcelamentoConsecutivos.toString()),
colecaoGuiasPagamento,
usuarioLogado,
valorTotalDebitoParcelamento,
Util.formatarMesAnoComBarraParaAnoMes("01/0001"),
Util.formatarMesAnoComBarraParaAnoMes("12/9999"),
indicadoresParcelamentoHelper,
valorCreditoDocumento);
NegociacaoOpcoesParcelamentoHelper negociacaoOpcoesParcelamentoHelper =
fachada.calcularValorDosDescontosPagamentoAVista(helper);
BigDecimal valorTotalDescontoPagamentoAVista = negociacaoOpcoesParcelamentoHelper.getValorTotalDescontoPagamentoAVista();
BigDecimal valorPagamentoAVista = valorDebitoTotalAtualizado.subtract(valorTotalDescontoPagamentoAVista);
form.setValorDescontoPagamentoAVista(Util.formatarMoedaReal(valorTotalDescontoPagamentoAVista));
form.setValorPagamentoAVista(Util.formatarMoedaReal(valorPagamentoAVista));
}
public static void main(String[] args) {
System.out.println(Util.formataAnoMes(new Date()));
}
}