package gcom.gui.relatorio.faturamento;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.FiltroCategoria;
import gcom.cadastro.imovel.FiltroImovelPerfil;
import gcom.cadastro.imovel.ImovelPerfil;
import gcom.cadastro.localidade.FiltroGerenciaRegional;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.FiltroUnidadeNegocio;
import gcom.cadastro.localidade.GerenciaRegional;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.localidade.UnidadeNegocio;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.RelatorioVazioException;
import gcom.relatorio.faturamento.FiltrarRelatorioDevolucaoPagamentosDuplicidadeHelper;
import gcom.relatorio.faturamento.RelatorioDevolucaoPagamentosDuplicidade;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.SistemaException;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
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;
/**
* [UC1129] Gerar Relat�rio Devolu��o dos Pagamentos em Duplicidade
*
* @author Hugo Leonardo
*
* @date 10/03/2011
*/
public class GerarRelatorioDevolucaoPagamentosDuplicidadeAction extends ExibidorProcessamentoTarefaRelatorio {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = null;
HttpSession sessao = httpServletRequest.getSession(false);
httpServletRequest.setAttribute("telaSucessoRelatorio",true);
// Form
GerarRelatorioDevolucaoPagamentosDuplicidadeActionForm form = (GerarRelatorioDevolucaoPagamentosDuplicidadeActionForm) actionForm;
FiltrarRelatorioDevolucaoPagamentosDuplicidadeHelper helper = new FiltrarRelatorioDevolucaoPagamentosDuplicidadeHelper();
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
boolean peloMenosUmParametroInformado = false;
this.validarLocalidade(httpServletRequest, form);
String periodoReferencia = "";
String referenciaInicial = form.getMesAnoReferenciaInicial();
String referenciaFinal = form.getMesAnoReferenciaFinal();
if (referenciaInicial != null && !referenciaInicial.equals("") &&
!Util.validarMesAno(referenciaInicial)) {
throw new ActionServletException("atencao.adicionar_debito_ano_mes_referencia_invalido",null, "Inicial");
}
if (referenciaFinal != null && !referenciaFinal.equals("") &&
!Util.validarMesAno(referenciaFinal)) {
throw new ActionServletException("atencao.adicionar_debito_ano_mes_referencia_invalido",null, "Final");
}
SistemaParametro sistemaParametro = Fachada.getInstancia().pesquisarParametrosDoSistema();
int mesAnoFaturamento = sistemaParametro.getAnoMesFaturamento();
referenciaInicial = Util.formatarMesAnoParaAnoMesSemBarra(referenciaInicial);
referenciaFinal = Util.formatarMesAnoParaAnoMesSemBarra(referenciaFinal);
int anoMesInicio = new Integer(referenciaInicial);
int anoMesFim = new Integer(referenciaFinal);
// [FS0002] - Validar datas do Per�odo
if(anoMesInicio > anoMesFim){
throw new ActionServletException("atencao.mes_ano_inicial.maior.mes_ano_final");
}
if( anoMesInicio > mesAnoFaturamento){
throw new ActionServletException("atencao.mes_ano_inicial.maior.mes_ano_faturamento");
}
if( anoMesFim > mesAnoFaturamento){
throw new ActionServletException("atencao.mes_ano_final.maior.mes_ano_faturamento");
}
periodoReferencia = form.getMesAnoReferenciaInicial() + " a " + form.getMesAnoReferenciaFinal();
helper.setAnoMesReferenciaInicial( referenciaInicial);
helper.setAnoMesReferenciaFinal( referenciaFinal);
peloMenosUmParametroInformado = true;
// Gerencia
String gerenciaDescricao = " -- ";
if ( form.getIdGerencia() != null &&
!form.getIdGerencia().equals("-1")) {
helper.setIdGerencia(form.getIdGerencia());
peloMenosUmParametroInformado = true;
FiltroGerenciaRegional filtroGerenciaRegional = new FiltroGerenciaRegional();
filtroGerenciaRegional.adicionarParametro(new ParametroSimples( FiltroGerenciaRegional.ID,
form.getIdGerencia()));
Collection colecaoGerenciaRegional =
this.getFachada().pesquisar(filtroGerenciaRegional, GerenciaRegional.class.getName());
GerenciaRegional gerencia = (GerenciaRegional) Util.retonarObjetoDeColecao(colecaoGerenciaRegional);
gerenciaDescricao = "" + gerencia.getId() + " - " + gerencia.getNome();
}
// Unidade Neg�cio
String unidadeDescricao = " -- ";
if ( form.getIdUnidadeNegocio() != null &&
!form.getIdUnidadeNegocio().equals("-1")){
helper.setIdUnidadeNegocio(form.getIdUnidadeNegocio());
peloMenosUmParametroInformado = true;
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples( FiltroUnidadeNegocio.ID,
form.getIdUnidadeNegocio()));
Collection colecaoUnidadeNegocio =
this.getFachada().pesquisar(filtroUnidadeNegocio, UnidadeNegocio.class.getName());
UnidadeNegocio unidadeNegocio = (UnidadeNegocio) Util.retonarObjetoDeColecao(colecaoUnidadeNegocio);
unidadeDescricao = "" + unidadeNegocio.getId() + " - " + unidadeNegocio.getNome();
}
// Localidade
if ( form.getIdLocalidade() != null &&
!form.getIdLocalidade().equals("")){
helper.setIdLocalidade(form.getIdLocalidade());
peloMenosUmParametroInformado = true;
}
if ( form.getNomeLocalidade() != null &&
!form.getNomeLocalidade().equals("")){
helper.setNomeLocalidade(form.getNomeLocalidade());
peloMenosUmParametroInformado = true;
}
// Perfil Im�vel
String perfilDescricao = " -- ";
if ( form.getIdPerfilImovel() != null &&
!form.getIdPerfilImovel().equals("-1")){
helper.setIdPerfilImovel(form.getIdPerfilImovel());
peloMenosUmParametroInformado = true;
FiltroImovelPerfil filtroImovelPerfil = new FiltroImovelPerfil();
filtroImovelPerfil.adicionarParametro(new ParametroSimples( FiltroImovelPerfil.ID,
form.getIdPerfilImovel()));
Collection colecaoPerfilImovel =
this.getFachada().pesquisar(filtroImovelPerfil, ImovelPerfil.class.getName());
ImovelPerfil imovelPerfil = (ImovelPerfil) Util.retonarObjetoDeColecao(colecaoPerfilImovel);
perfilDescricao = "" + imovelPerfil.getId() + " - " + imovelPerfil.getDescricao();
}
// Im�vel Categoria
String categoriaDescricao = " -- ";
if ( form.getIdCategoriaImovel() != null &&
!form.getIdCategoriaImovel().equals("-1")){
helper.setIdCategoriaImovel(form.getIdCategoriaImovel());
peloMenosUmParametroInformado = true;
FiltroCategoria filtroCategoria = new FiltroCategoria();
filtroCategoria.adicionarParametro(new ParametroSimples( FiltroCategoria.CODIGO,
form.getIdCategoriaImovel()));
Collection colecaoCategoria =
this.getFachada().pesquisar(filtroCategoria, Categoria.class.getName());
Categoria categoria = (Categoria) Util.retonarObjetoDeColecao(colecaoCategoria);
categoriaDescricao = "" + categoria.getId() + " - " + categoria.getDescricao();
}
// Erro caso o usu�rio mandou filtrar sem nenhum par�metro
if (!peloMenosUmParametroInformado) {
throw new ActionServletException(
"atencao.filtro.nenhum_parametro_informado");
}
TarefaRelatorio relatorio = new RelatorioDevolucaoPagamentosDuplicidade((Usuario)
(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
relatorio.addParametro("tipoFormatoRelatorio",Integer.parseInt(tipoRelatorio));
relatorio.addParametro("filtrarRelatorioDevolucaoPagamentosDuplicidadeHelper", helper);
relatorio.addParametro("gerenciaDescricao", gerenciaDescricao);
relatorio.addParametro("unidadeDescricao", unidadeDescricao);
relatorio.addParametro("perfilDescricao", perfilDescricao);
relatorio.addParametro("categoriaDescricao", categoriaDescricao);
relatorio.addParametro("periodoReferencia", periodoReferencia);
try {
retorno = processarExibicaoRelatorio(relatorio, tipoRelatorio, httpServletRequest,
httpServletResponse, actionMapping);
} catch (SistemaException ex) {
// manda o erro para a p�gina no request atual
reportarErros(httpServletRequest, "erro.sistema");
// seta o mapeamento de retorno para a tela de erro de popup
retorno = actionMapping.findForward("telaErroPopup");
} catch (RelatorioVazioException ex1) {
throw new ActionServletException("atencao.pesquisa.nenhumresultado", null, "");
}
sessao.removeAttribute("limpar");
return retorno;
}
private void validarLocalidade(HttpServletRequest httpServletRequest,
GerarRelatorioDevolucaoPagamentosDuplicidadeActionForm form){
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, form.getIdLocalidade()));
Collection<Localidade> localidadePesquisada = this.getFachada().pesquisar(
filtroLocalidade, Localidade.class.getName());
// Se nenhum usu�rio for encontrado a mensagem � enviada para a p�gina
if ( !Util.isVazioOrNulo(localidadePesquisada)) {
Localidade localidade = (Localidade) Util.retonarObjetoDeColecao(localidadePesquisada);
if(form.getIdGerencia() != null && !form.getIdGerencia().equals("-1")
&& localidade.getGerenciaRegional().getId().compareTo(new Integer(form.getIdGerencia())) != 0){
FiltroGerenciaRegional filtroGerenciaRegional = new FiltroGerenciaRegional();
filtroGerenciaRegional.adicionarParametro(new ParametroSimples( FiltroGerenciaRegional.ID,
form.getIdGerencia()));
Collection colecaoGerencia =
this.getFachada().pesquisar(filtroGerenciaRegional, GerenciaRegional.class.getName());
GerenciaRegional gerenciaRegional = (GerenciaRegional)Util.retonarObjetoDeColecao(colecaoGerencia);
form.setIdLocalidade("");
form.setNomeLocalidade("");
throw new ActionServletException("atencao.localidade_nao_percente_gerencia_regional", null, gerenciaRegional.getNome());
}
if(form.getIdUnidadeNegocio() != null && !form.getIdUnidadeNegocio().equals("-1")
&& localidade.getUnidadeNegocio().getId().compareTo(new Integer(form.getIdUnidadeNegocio())) != 0){
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(
new ParametroSimples(FiltroUnidadeNegocio.ID, form.getIdUnidadeNegocio()));
Collection colecaoUnidadeNegocio =
this.getFachada().pesquisar(filtroUnidadeNegocio, UnidadeNegocio.class.getName());
UnidadeNegocio unidadeNegocio = (UnidadeNegocio)Util.retonarObjetoDeColecao(colecaoUnidadeNegocio);
form.setIdLocalidade("");
form.setNomeLocalidade("");
throw new ActionServletException("atencao.localidade_nao_percente_unidade_negocio", null, unidadeNegocio.getNome());
}
}
}
}