package gcom.gui.faturamento; import gcom.fachada.Fachada; import gcom.faturamento.FaturamentoAtividade; import gcom.faturamento.FaturamentoGrupo; import gcom.faturamento.FiltroFaturamentoAtividade; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.ConstantesSistema; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.Iterator; 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 InserirComandoAtividadeFaturamentoAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { //Seta o mapeamento de retorno ActionForward retorno = actionMapping.findForward("telaSucesso"); //Carrega a instancia da fachada Fachada fachada = Fachada.getInstancia(); //Carrega o objeto sessao HttpSession sessao = httpServletRequest.getSession(false); //Inst�ncia do formul�rio que est� sendo utilizado InserirComandoAtividadeFaturamentoActionForm inserirComandoAtividadeFaturamentoActionForm = (InserirComandoAtividadeFaturamentoActionForm) actionForm; // Grupo selecionado String grupoFaturamentoJSP = inserirComandoAtividadeFaturamentoActionForm .getGrupoFaturamentoID(); // Atividade selecionado String atividadeFaturamentoJSP = inserirComandoAtividadeFaturamentoActionForm .getAtividadeFaturamentoID(); if (grupoFaturamentoJSP == null || grupoFaturamentoJSP.equalsIgnoreCase(String .valueOf(ConstantesSistema.NUMERO_NAO_INFORMADO))) { throw new ActionServletException( "atencao.faturamento_grupo_nao_informado"); } if (atividadeFaturamentoJSP == null || atividadeFaturamentoJSP.equalsIgnoreCase(String .valueOf(ConstantesSistema.NUMERO_NAO_INFORMADO))) { throw new ActionServletException( "atencao.faturamento_atividade_nao_informado"); } // Carrega Grupo Selecionado // Cole��o que foi utilizada para carregar o listBos de exibi��o Collection colecaoFaturamentoGrupo = (Collection) sessao .getAttribute("colecaoGrupoFaturamento"); FaturamentoGrupo faturamentoGrupo = obterFaturamentoGrupoSelecionado( grupoFaturamentoJSP, colecaoFaturamentoGrupo); // [FS0003] - Verificar exist�ncia do cronograma para o grupo fachada.verificarExistenciaCronogramaGrupo(faturamentoGrupo); // Carrega Atividade Selecionada FiltroFaturamentoAtividade filtroFaturamentoAtividade = new FiltroFaturamentoAtividade(); filtroFaturamentoAtividade.adicionarParametro(new ParametroSimples( FiltroFaturamentoAtividade.ID, atividadeFaturamentoJSP)); filtroFaturamentoAtividade.adicionarParametro(new ParametroSimples( FiltroFaturamentoAtividade.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO)); Collection colecaoFaturamentoAtividade = fachada.pesquisar( filtroFaturamentoAtividade, FaturamentoAtividade.class .getName()); FaturamentoAtividade faturamentoAtividade = (FaturamentoAtividade) Util .retonarObjetoDeColecao(colecaoFaturamentoAtividade); // [FS0008] - Verificar exist�ncia da atividade no cronograma do grupo do m�s corrente // fachada.verificarExistenciaCronogramaAtividadeGrupo( // faturamentoAtividade, faturamentoGrupo); // Rotas selecionadas // [FS0006] - Verificar exist�ncia de rotas para o grupo Collection colecaoRotasGrupo = fachada .verificarExistenciaRotaGrupo(faturamentoGrupo); // [SB0002] - Verificar Situa��o da Atividade para a Rota // true = Rotas habilitadas Collection colecaoRotasSituacao = fachada .verificarSituacaoAtividadeRota(colecaoRotasGrupo, faturamentoAtividade, faturamentoGrupo, true); //[FS0007] - Verificar sele��o de pelo menos uma rota habilitada if (colecaoRotasSituacao == null || colecaoRotasSituacao.isEmpty()) { throw new ActionServletException( "atencao.pesquisa.nenhuma.rota_habilitada_grupo"); } // Para auxiliar na formata��o de uma data SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy"); // Data corrente para compara��o String dataCorrente = null; Date dataCorrenteGrupo = null; if ((faturamentoAtividade.getId().equals(FaturamentoAtividade.FATURAR_GRUPO) || faturamentoAtividade.getId().equals(FaturamentoAtividade.GERAR_ARQUIVO_LEITURA)) && sessao.getAttribute("dataCorrente") != null) { dataCorrente = (String) sessao.getAttribute("dataCorrente"); if (dataCorrente != null && !dataCorrente.equalsIgnoreCase("")) { try { dataCorrenteGrupo = formatoData.parse(dataCorrente); } catch (ParseException ex) { dataCorrenteGrupo = null; } } } //Data de vencimento do grupo na base para compara��o String dataVencimentoGrupoBase = null; //Date dataVencimentoGrupoBaseObjeto = null; // Data de vecimento do grupo String dataVencimentoGrupoJSP = inserirComandoAtividadeFaturamentoActionForm .getVencimentoGrupo(); if ((faturamentoAtividade.getId().equals(FaturamentoAtividade.FATURAR_GRUPO) || faturamentoAtividade.getId().equals(FaturamentoAtividade.GERAR_ARQUIVO_LEITURA)) && sessao.getAttribute("exibirCampoVencimentoGrupo") != null) { dataVencimentoGrupoBase = (String) sessao.getAttribute("exibirCampoVencimentoGrupo"); if (dataVencimentoGrupoBase != null && !dataVencimentoGrupoBase.equalsIgnoreCase("")) { /*try { dataVencimentoGrupoBaseObjeto = formatoData.parse(dataVencimentoGrupoBase); } catch (ParseException ex) { dataVencimentoGrupoBaseObjeto = null; }*/ } if (dataVencimentoGrupoJSP == null || dataVencimentoGrupoJSP.equals("")){ throw new ActionServletException( "atencao.data_vencimento_obrigatoria"); } } String faturamentoGrupoAnoMes = ""+faturamentoGrupo.getAnoMesReferencia(); faturamentoGrupoAnoMes = Util.formatarAnoMesParaMesAno(faturamentoGrupoAnoMes); Date dataVencimentoGrupo = null; if ((faturamentoAtividade.getId().equals(FaturamentoAtividade.FATURAR_GRUPO) || faturamentoAtividade.getId().equals(FaturamentoAtividade.GERAR_ARQUIVO_LEITURA)) && sessao.getAttribute("exibirCampoVencimentoGrupo") != null) { if (dataVencimentoGrupoJSP != null && !dataVencimentoGrupoJSP.equalsIgnoreCase("")) { String mesAnoVencimentoGrupo = dataVencimentoGrupoJSP.substring(3,10); Integer diferencaMeses = Util.getDiferencaMeses(faturamentoGrupoAnoMes, mesAnoVencimentoGrupo); if (diferencaMeses > 3){ throw new ActionServletException( "atencao.data_vencimento_superior_permitido"); } try { dataVencimentoGrupo = formatoData .parse(dataVencimentoGrupoJSP); if (dataCorrenteGrupo.after(dataVencimentoGrupo)) { throw new ActionServletException( "atencao.faturamento_data_vencimento_grupo_menor", null, dataCorrente); } } catch (ParseException ex) { dataVencimentoGrupo = null; } } } // O sistema inclui o comando Integer faturamentoAtividadeCronogramaId = fachada.inserirComandoAtividadeFaturamento(faturamentoGrupo, faturamentoAtividade, colecaoRotasSituacao, dataVencimentoGrupo, this.getUsuarioLogado(httpServletRequest)); montarPaginaSucesso(httpServletRequest, "Comando da Atividade de Faturamento " + faturamentoAtividade.getDescricao() + " do " + faturamentoGrupo.getDescricaoAbreviada() + " refer�ncia " + Util.formatarAnoMesParaMesAno(faturamentoGrupo.getAnoMesReferencia()) + " inserido com sucesso.", "Inserir outro Comando de Atividade de Faturamento", "exibirInserirComandoAtividadeFaturamentoAction.do", "exibirAtualizarComandoAtividadeFaturamentoAction.do?faturamentoAtividadeCronogramaID=" + faturamentoAtividadeCronogramaId, "Atualizar Comando de Atividade de Faturamento Inserido"); //Removendo os objetos da sess�o sessao.removeAttribute("dataCorrente"); sessao.removeAttribute("exibirCampoVencimentoGrupo"); sessao.removeAttribute("colecaoGrupoFaturamento"); sessao.removeAttribute("colecaoGrupoFaturamento"); return retorno; } /** * Retorna o objeto FaturamentoGrupo selecionado * * @param id * @param colecao * @return */ private FaturamentoGrupo obterFaturamentoGrupoSelecionado(String id, Collection colecao) { FaturamentoGrupo retorno = null; Iterator colecaoIterator = colecao.iterator(); while (colecaoIterator.hasNext()) { retorno = (FaturamentoGrupo) colecaoIterator.next(); if (retorno.getId().equals(new Integer(id))) { break; } } return retorno; } }