package gcom.gui.arrecadacao; import gcom.arrecadacao.Devolucao; import gcom.arrecadacao.FiltroAvisoBancario; import gcom.arrecadacao.FiltroDevolucao; import gcom.arrecadacao.GuiaDevolucao; import gcom.arrecadacao.aviso.AvisoBancario; import gcom.cadastro.cliente.Cliente; import gcom.cadastro.imovel.FiltroImovel; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.localidade.Localidade; import gcom.fachada.Fachada; import gcom.faturamento.debito.DebitoTipo; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.interceptor.RegistradorOperacao; import gcom.seguranca.acesso.Operacao; import gcom.seguranca.acesso.OperacaoEfetuada; import gcom.seguranca.acesso.usuario.Usuario; import gcom.seguranca.acesso.usuario.UsuarioAcao; import gcom.seguranca.acesso.usuario.UsuarioAcaoUsuarioHelper; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.List; 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; /** * Description of the Class * * @author Fernanda Karla * @created 09 de Mar�o de 2006 */ public class AtualizarDevolucaoAction extends GcomAction { /** * Description of the Method * * @param actionMapping * Description of the Parameter * @param actionForm * Description of the Parameter * @param httpServletRequest * Description of the Parameter * @param httpServletResponse * Description of the Parameter * @return Description of the Return Value */ public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { // Seta o mapeamento de retorno ActionForward retorno = actionMapping.findForward("telaSucesso"); ManterDevolucaoActionForm manterDevolucaoActionForm = (ManterDevolucaoActionForm) actionForm; HttpSession sessao = httpServletRequest.getSession(false); Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado"); // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_DEVOLUCOES_ATUALIZAR, new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); Operacao operacao = new Operacao(); operacao.setId(Operacao.OPERACAO_DEVOLUCOES_ATUALIZAR); OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada(); operacaoEfetuada.setOperacao(operacao); //------------ REGISTRAR TRANSA��O ---------------- String codigoDevolucao = manterDevolucaoActionForm.getCodigoDevolucao(); String valorDevolucaoAntes = manterDevolucaoActionForm.getValorDevolucao().toString().replace(".",""); String valorDevolucao = valorDevolucaoAntes.replace(",","."); String dataDevolucao = manterDevolucaoActionForm.getDataDevolucao(); String confirmado = httpServletRequest.getParameter("confirmado"); Fachada fachada = Fachada.getInstancia(); // Criando o objeto Devolucao Devolucao devolucao = new Devolucao(); FiltroDevolucao filtroDevolucao = new FiltroDevolucao(); filtroDevolucao.adicionarParametro(new ParametroSimples( FiltroDevolucao.ID, codigoDevolucao)); Collection devolucoes = fachada.pesquisar(filtroDevolucao, Devolucao.class.getName()); if (devolucoes != null && !devolucoes.isEmpty()) { Devolucao dadosDevolucao = (Devolucao) ((List) devolucoes).get(0); SimpleDateFormat dataFormatada = new SimpleDateFormat("dd/MM/yyyy"); devolucao.setId(new Integer(codigoDevolucao)); if(dadosDevolucao.getValorDevolucao() != (new BigDecimal(valorDevolucao))) { FiltroAvisoBancario filtroAvisoBancario = new FiltroAvisoBancario(); filtroAvisoBancario.adicionarParametro(new ParametroSimples( FiltroAvisoBancario.ID, dadosDevolucao.getAvisoBancario().getId())); Collection avisoBancario = fachada.pesquisar(filtroAvisoBancario, AvisoBancario.class.getName()); BigDecimal valorFinal = null; if (avisoBancario != null && !avisoBancario.isEmpty()) { AvisoBancario dadosAvisoBancario = (AvisoBancario) ((List) avisoBancario).get(0); BigDecimal valorDevolucao2 = dadosAvisoBancario.getValorDevolucaoCalculado(); BigDecimal valorSubtracao = (valorDevolucao2.subtract(dadosDevolucao.getValorDevolucao())); valorFinal = (new BigDecimal(valorDevolucao).add(valorSubtracao)); } fachada.atualizaValorArrecadacaoAvisoBancaraio(valorFinal, dadosDevolucao.getAvisoBancario().getId()); } devolucao.setValorDevolucao(new BigDecimal(valorDevolucao)); int mesAnoArrecadacao = dadosDevolucao .getAnoMesReferenciaArrecadacao(); devolucao.setAnoMesReferenciaArrecadacao(new Integer( mesAnoArrecadacao)); Date dataDevolucoesFormatada = null; try { dataDevolucoesFormatada = dataFormatada.parse(dataDevolucao); } catch (ParseException ex) { throw new ActionServletException("erro.sistema"); } devolucao.setDataDevolucao(dataDevolucoesFormatada); // Criando o objeto Referencia Devolucao if (manterDevolucaoActionForm.getReferenciaDevolucaoClone() != null && !manterDevolucaoActionForm.getReferenciaDevolucaoClone() .equals("")) { String referenciaDevolucao = manterDevolucaoActionForm .getReferenciaDevolucaoClone(); String mes = referenciaDevolucao.substring(0, 2); String ano = referenciaDevolucao.substring(3, 7); String mesAno = ano + mes; devolucao.setAnoMesReferenciaDevolucao(new Integer(mesAno)); } else { devolucao.setAnoMesReferenciaDevolucao(null); } // Criando o objeto Cliente if (manterDevolucaoActionForm.getCodigoClienteClone() != null && !manterDevolucaoActionForm.getCodigoClienteClone().equals("")) { Integer idCliente = new Integer(manterDevolucaoActionForm .getCodigoClienteClone()); Cliente cliente = new Cliente(); cliente.setId(idCliente); devolucao.setCliente(cliente); }else { devolucao.setCliente(null); } devolucao.setDevolucaoSituacaoAnterior(dadosDevolucao .getDevolucaoSituacaoAnterior()); devolucao.setDevolucaoSituacaoAtual(dadosDevolucao .getDevolucaoSituacaoAtual()); FiltroImovel filtroImovel = new FiltroImovel(); filtroImovel .adicionarCaminhoParaCarregamentoEntidade("localidade"); // Criando o objeto Imovel if (manterDevolucaoActionForm.getCodigoImovelClone() != null && !manterDevolucaoActionForm.getCodigoImovelClone().equals("")) { Integer idImovel = new Integer(manterDevolucaoActionForm .getCodigoImovelClone()); Imovel imovel = new Imovel(); imovel.setId(idImovel); devolucao.setImovel(imovel); filtroImovel.adicionarParametro(new ParametroSimples( FiltroImovel.ID, manterDevolucaoActionForm.getCodigoImovelClone())); Collection imovelEncontrado = fachada.pesquisar(filtroImovel, Imovel.class.getName()); if (imovelEncontrado != null && !imovelEncontrado.isEmpty()) { String codigoDigitadoLocalidadeEnter = ((Imovel) ((List) imovelEncontrado).get(0)).getLocalidade().getId().toString(); if(manterDevolucaoActionForm.getLocalidade() != null && !manterDevolucaoActionForm.getLocalidade().equals("") && !manterDevolucaoActionForm.getLocalidadeClone().equals(codigoDigitadoLocalidadeEnter)) { throw new ActionServletException( "atencao.pesquisa.localidade.imovel.diferente", "" + codigoDigitadoLocalidadeEnter, manterDevolucaoActionForm.getLocalidade()); } } } else { devolucao.setImovel(null); } // Criando o objeto Localidade if (manterDevolucaoActionForm.getLocalidadeClone() != null && !manterDevolucaoActionForm.getLocalidadeClone().equals("")) { Integer idLocalidade = new Integer(manterDevolucaoActionForm .getLocalidadeClone()); Localidade localidade = new Localidade(); localidade.setId(idLocalidade); devolucao.setLocalidade(localidade); }else { devolucao.setLocalidade(dadosDevolucao.getLocalidade()); } // Criando o objeto Guia Devolucao if (manterDevolucaoActionForm.getGuiaDevolucaoClone() != null && !manterDevolucaoActionForm.getGuiaDevolucaoClone().equals("")) { Integer idGuiaDevolucao = new Integer(manterDevolucaoActionForm .getGuiaDevolucaoClone()); GuiaDevolucao guiaDevolucao = new GuiaDevolucao(); guiaDevolucao.setId(idGuiaDevolucao); devolucao.setGuiaDevolucao(guiaDevolucao); } else { devolucao.setGuiaDevolucao(null); } devolucao.setAvisoBancario(dadosDevolucao.getAvisoBancario()); // Criando o objeto TipoDebito if (manterDevolucaoActionForm.getTipoDebitoClone() != null && !manterDevolucaoActionForm.getTipoDebitoClone().equals("")) { Integer idTipoDebito = new Integer(manterDevolucaoActionForm .getTipoDebitoClone()); DebitoTipo tipoDebito = new DebitoTipo(); tipoDebito.setId(idTipoDebito); devolucao.setDebitoTipo(tipoDebito); }else{ devolucao.setDebitoTipo(null); } // �ltima Altera��o devolucao.setUltimaAlteracao(new Date()); } if(devolucao.getImovel() != null) { FiltroImovel filtroImovel = new FiltroImovel(); filtroImovel .adicionarCaminhoParaCarregamentoEntidade("localidade"); filtroImovel.adicionarParametro(new ParametroSimples( FiltroImovel.ID, devolucao.getImovel().getId())); Collection imovelEncontrado = fachada.pesquisar(filtroImovel, Imovel.class.getName()); if (imovelEncontrado != null && !imovelEncontrado.isEmpty()) { String codigoDigitadoLocalidadeEnter = ((Imovel) ((List) imovelEncontrado).get(0)).getLocalidade().getId().toString(); if(manterDevolucaoActionForm.getLocalidade() != null && !manterDevolucaoActionForm.getLocalidade().equals("") && !manterDevolucaoActionForm.getLocalidade().equals(codigoDigitadoLocalidadeEnter)) { throw new ActionServletException( "atencao.pesquisa.localidade.imovel.diferente", "" + codigoDigitadoLocalidadeEnter, manterDevolucaoActionForm.getLocalidade()); } } } Devolucao dadosDevolucao = (Devolucao)sessao.getAttribute("dadosDevolucao"); // verifica se o valor da devolucao � maior que o valor da guia da devolucao if(manterDevolucaoActionForm.getValorGuiaDevolucao() != null && !manterDevolucaoActionForm.getValorGuiaDevolucao().equalsIgnoreCase("") && Util.formatarMoedaRealparaBigDecimal(manterDevolucaoActionForm.getValorDevolucao()).compareTo(Util.formatarMoedaRealparaBigDecimal(manterDevolucaoActionForm.getValorGuiaDevolucao())) == 1) { if (confirmado == null || !confirmado.trim().equalsIgnoreCase("ok")){ httpServletRequest.setAttribute("caminhoActionConclusao", "/gsan/atualizarDevolucaoAction.do"); // Monta a p�gina de confirma��o para perguntar se o usu�rio // quer inserir // a devolu��o mesmo com o valor da devolu��o sendo superior ao da guia da devolu��o // coloca o objeto devolucao na sessao caso ele seja diferente de null if(dadosDevolucao != null){ sessao.setAttribute("dadosDevolucao",dadosDevolucao); } return montarPaginaConfirmacao( "atencao.valor_devolucao_maior_valor_guia_devolucao.confirmacao", httpServletRequest, actionMapping, manterDevolucaoActionForm.getValorDevolucao(),manterDevolucaoActionForm.getValorGuiaDevolucao()); } } // ------------ REGISTRAR TRANSA��O ---------------- devolucao.setOperacaoEfetuada(operacaoEfetuada); devolucao.adicionarUsuario(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO); registradorOperacao.registrarOperacao(devolucao); //------------ REGISTRAR TRANSA��O ---------------- // Limpa os parametros do filtro para fazer uma nova pesquisar e verificar a ultima alteracao na base filtroDevolucao.limparListaParametros(); // Parte de Valida��o com Timestamp // Seta no filtro o c�digo da devolucao que est� sendo atualizada filtroDevolucao.adicionarParametro(new ParametroSimples( FiltroDevolucao.ID, devolucao.getId())); // Procura a devolucao na base Devolucao devolucaoNaBase = (Devolucao) ((List) (fachada .pesquisar(filtroDevolucao, Devolucao.class.getName()))).get(0); // Atualiza��o realizada por outro usu�rio // Caso o usu�rio esteja tentando atualizar uma devolucao e o mesmo j� // tenha // sido atualizado durante a manuten��o corrente if (devolucaoNaBase.getUltimaAlteracao().after( dadosDevolucao.getUltimaAlteracao())) { throw new ActionServletException("atencao.atualizacao.timestamp"); } // Atualiza a Devolucao fachada.atualizar(devolucao); montarPaginaSucesso(httpServletRequest, "Devolu��o de c�digo " + devolucao.getId() + " atualizada com sucesso.", "Realizar outra Manuten��o de Devolucao", "exibirFiltrarDevolucaoAction.do?tela=manterDevolucao&menu=sim"); return retorno; } }