package gcom.gui.faturamento.conta; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.filtro.ParametroSimples; import gcom.cadastro.imovel.FiltroImovel; import gcom.cadastro.imovel.Imovel; import gcom.faturamento.debito.DebitoCobrado; import gcom.faturamento.debito.DebitoTipo; import gcom.faturamento.debito.FiltroDebitoTipo; import gcom.cadastro.sistemaparametro.SistemaParametro; import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.Vector; import gcom.util.ConstantesSistema; import gcom.util.Util; import java.math.BigDecimal; 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; public class AdicionarDebitoCobradoContaAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { //Seta o mapeamento de retorno ActionForward retorno = actionMapping .findForward("exibirAdicionarDebitoCobradoConta"); Fachada fachada = Fachada.getInstancia(); //Mudar isso quando tiver esquema de seguran�a HttpSession sessao = httpServletRequest.getSession(false); //Inst�ncia do formul�rio que est� sendo utilizado AdicionarDebitoCobradoContaActionForm adicionarDebitoCobradoContaActionForm = (AdicionarDebitoCobradoContaActionForm) actionForm; //Par�metros recebidos para adicionar um d�bito cobrado String debitoTipoID = adicionarDebitoCobradoContaActionForm.getDebitoTipoID(); String mesAnoDebito = adicionarDebitoCobradoContaActionForm.getMesAnoDebito(); String mesAnoCobranca = adicionarDebitoCobradoContaActionForm.getMesAnoCobranca(); String valorDebito = adicionarDebitoCobradoContaActionForm.getValorDebito(); String idImovelSeleted = adicionarDebitoCobradoContaActionForm.getImovelID(); //Gerando o objeto DebitoCobrado que ser� inserido na cole��o DebitoCobrado objDebitoCobrado = new DebitoCobrado(); objDebitoCobrado.setUltimaAlteracao(new Date()); //Verifica��o da matr�cula do im�vel selecionado if (idImovelSeleted == null || idImovelSeleted.equalsIgnoreCase("")){ throw new ActionServletException( "atencao.adicionar_debito_imovel_obrigatorio"); } //Verifica��o do m�s e ano de d�bito if (mesAnoDebito != null && !mesAnoDebito.equalsIgnoreCase("")){ //[FS0002] - Validar ano e m�s de refer�ncia if (Util.validarAnoMes(mesAnoDebito)){ throw new ActionServletException( "atencao.adicionar_debito_ano_mes_referencia_invalido"); } //[FS0004] - Verifica ano e m�s do faturamento //Invertendo para AnoM�s e retirando a barra mesAnoDebito = Util.formatarMesAnoParaAnoMesSemBarra(mesAnoDebito); FiltroImovel filtroImovel = new FiltroImovel(); //Objetos que ser�o retornados pelo hibernate //filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra.rota.faturamentoGrupo.anoMesReferencia"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra.rota.faturamentoGrupo"); filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, idImovelSeleted)); Collection colecaoImovel = fachada.pesquisar(filtroImovel, Imovel.class.getName()); if (colecaoImovel == null || colecaoImovel.isEmpty()){ throw new ActionServletException( "atencao.adicionar_debito_ano_mes_debito_invalido"); } Imovel objImovel = (Imovel) Util.retonarObjetoDeColecao(colecaoImovel); Integer mesAnoFaturamentoImovel = objImovel.getQuadra().getRota().getFaturamentoGrupo().getAnoMesReferencia(); if (!compararAnoMesReferencia(mesAnoFaturamentoImovel, new Integer(mesAnoDebito), ">")){ throw new ActionServletException( "atencao.adicionar_debito_ano_mes_debito_invalido"); } //Inserir o mesAnoReferencia do d�bito no objeto final objDebitoCobrado.setAnoMesReferenciaDebito(new Integer(mesAnoDebito)); } //Verifica��o do m�s e ano de cobran�a if (mesAnoCobranca != null && !mesAnoCobranca.equalsIgnoreCase("")){ //[FS0002] - Validar ano e m�s de refer�ncia if (Util.validarAnoMes(mesAnoCobranca)){ throw new ActionServletException( "atencao.adicionar_debito_ano_mes_referencia_invalido"); } //[FS0011] - Verifica ano e m�s da cobran�a //Invertendo para AnoM�s e retirando a barra mesAnoCobranca = Util.formatarMesAnoParaAnoMesSemBarra(mesAnoCobranca); SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); if (sistemaParametro == null){ throw new ActionServletException( "atencao.adicionar_debito_ano_mes_cobranca_invalido"); } else if (compararAnoMesReferencia(new Integer(mesAnoCobranca), new Integer(sistemaParametro.getAnoMesArrecadacao()), ">")){ throw new ActionServletException( "atencao.adicionar_debito_ano_mes_faturamento_invalido"); } else{ //Inserir o mesAnoCobranca do d�bito no objeto final objDebitoCobrado.setAnoMesCobrancaDebito(new Integer(mesAnoCobranca)); } } //[FS0012] - Verificar valor do d�bito cobrado igual a zero BigDecimal objValorDebito = Util.formatarMoedaRealparaBigDecimal(valorDebito); if (objValorDebito.equals(new BigDecimal("0"))){ throw new ActionServletException( "atencao.adicionar_debito_valor_debito_igual_zero"); } //Inserir o valor do d�bito no objeto final objDebitoCobrado.setValorPrestacao(objValorDebito); //Realizando consulta para obter os dados do tipo do d�bito selecionado FiltroDebitoTipo filtroDebitoTipo = new FiltroDebitoTipo(); filtroDebitoTipo.adicionarCaminhoParaCarregamentoEntidade("lancamentoItemContabil"); filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.ID, debitoTipoID)); filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO)); Collection colecaoDebitoTipo = fachada.pesquisar(filtroDebitoTipo, DebitoTipo.class.getName()); if (colecaoDebitoTipo == null || colecaoDebitoTipo.isEmpty()){ throw new ActionServletException( "atencao.pesquisa.nenhum_registro_tabela", null, "DEBITO_TIPO"); } DebitoTipo objDebitoTipo = (DebitoTipo) Util.retonarObjetoDeColecao(colecaoDebitoTipo); //Inserindo o tipo do d�bito selecionado objDebitoCobrado.setDebitoTipo(objDebitoTipo); //N�mero de presta��es objDebitoCobrado.setNumeroPrestacao(new Short("1").shortValue()); //N�mero da presta��o objDebitoCobrado.setNumeroPrestacaoDebito(new Short("1").shortValue()); //Colocando o objeto gerado na cole��o que ficar� na sess�o if (sessao.getAttribute("colecaoDebitoCobrado") == null){ Collection colecaoDebitoCobrado = new Vector(); colecaoDebitoCobrado.add(objDebitoCobrado); sessao.setAttribute("colecaoDebitoCobrado", colecaoDebitoCobrado); httpServletRequest.setAttribute("reloadPage", "OK"); //Definindo o caso de uso que receber� o retorno if (sessao.getAttribute("UseCase").equals("INSERIRCONTA")){ httpServletRequest.setAttribute("reloadPageURL", "INSERIRCONTA"); } else{ httpServletRequest.setAttribute("reloadPageURL", "MANTERCONTA"); } } else{ Collection colecaoDebitoCobrado = (Collection) sessao.getAttribute("colecaoDebitoCobrado"); //[FS0014] - Verificar d�bito j� existente if (!verificarDebitoJaExistente(colecaoDebitoCobrado, objDebitoCobrado)){ colecaoDebitoCobrado.add(objDebitoCobrado); httpServletRequest.setAttribute("reloadPage", "OK"); //Definindo o caso de uso que receber� o retorno if (sessao.getAttribute("UseCase").equals("INSERIRCONTA")){ httpServletRequest.setAttribute("reloadPageURL", "INSERIRCONTA"); } else{ httpServletRequest.setAttribute("reloadPageURL", "MANTERCONTA"); } } else{ throw new ActionServletException( "atencao.adicionar_debito_ja_existente"); } } //Limpando o formul�rio para inserir um novo d�bito adicionarDebitoCobradoContaActionForm.setDebitoTipoID(""); adicionarDebitoCobradoContaActionForm.setMesAnoCobranca(""); adicionarDebitoCobradoContaActionForm.setMesAnoDebito(""); adicionarDebitoCobradoContaActionForm.setValorDebito(""); /* * Colocado por Raphael Rossiter em 29/03/2007 * Objetivo: Manipula��o dos objetos que ser�o exibidos no formul�rio de acordo com a empresa */ SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); httpServletRequest.setAttribute("empresaNome", sistemaParametro.getNomeAbreviadoEmpresa().trim()); return retorno; } /** * Compara dois objetos no formato anoMesReferencia de acordo com o sinal logico passado. * @param anoMesReferencia1 * @param anoMesReferencia2 * @param sinal * @return um boleano */ private boolean compararAnoMesReferencia(Integer anoMesReferencia1, Integer anoMesReferencia2, String sinal){ boolean retorno = true; //Separando os valores de m�s e ano para realizar a compara��o String mesReferencia1 = String.valueOf(anoMesReferencia1.intValue()).substring(4, 6); String anoReferencia1 = String.valueOf(anoMesReferencia1.intValue()).substring(0, 4); String mesReferencia2 = String.valueOf(anoMesReferencia2.intValue()).substring(4, 6); String anoReferencia2 = String.valueOf(anoMesReferencia2.intValue()).substring(0, 4); if (sinal.equalsIgnoreCase("=")){ if (!Integer.valueOf(anoReferencia1).equals(Integer.valueOf(anoReferencia2))){ retorno = false; } else if (!Integer.valueOf(mesReferencia1).equals(Integer.valueOf(mesReferencia2))){ retorno = false; } } else if (sinal.equalsIgnoreCase(">")){ if (Integer.valueOf(anoReferencia1).intValue() < Integer.valueOf(anoReferencia2).intValue()){ retorno = false; } else if (Integer.valueOf(anoReferencia1).equals(Integer.valueOf(anoReferencia2)) && Integer.valueOf(mesReferencia1).intValue() <= Integer.valueOf(mesReferencia2).intValue()){ retorno = false; } } else{ if (Integer.valueOf(anoReferencia2).intValue() < Integer.valueOf(anoReferencia1).intValue()){ retorno = false; } else if (Integer.valueOf(anoReferencia2).equals(Integer.valueOf(anoReferencia1)) && Integer.valueOf(mesReferencia2).intValue() <= Integer.valueOf(mesReferencia1).intValue()){ retorno = false; } } return retorno; } /** * [FS0014] - Caso o tipo do d�bito selecionado j� esteja na lista * @param colecaoDebitoCobrado * @param debitoCobradoInsert * @return um boleano */ private boolean verificarDebitoJaExistente(Collection colecaoDebitoCobrado, DebitoCobrado debitoCobradoInsert){ boolean retorno = false; Iterator colecaoDebitoCobradoIt = colecaoDebitoCobrado.iterator(); DebitoCobrado debitoCobradoColecao; while (colecaoDebitoCobradoIt.hasNext()){ debitoCobradoColecao = (DebitoCobrado) colecaoDebitoCobradoIt.next(); if (debitoCobradoColecao.getDebitoTipo().getId().equals(debitoCobradoInsert.getDebitoTipo().getId())){ retorno = true; break; } } return retorno; } }