package gcom.gui.relatorio.faturamento.conta;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.FiltroSetorComercial;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.localidade.SetorComercial;
import gcom.fachada.Fachada;
import gcom.faturamento.FaturamentoGrupo;
import gcom.faturamento.FiltroFaturamentoGrupo;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.faturamento.conta.RelatorioConta;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* action respons�vel pela exibi��o do relat�rio de contas
*
* @author Rafael Corr�a
* @created 27/07/2009
*/
public class GerarRelatorioContaAction extends
ExibidorProcessamentoTarefaRelatorio {
/**
* < <Descri��o do m�todo>>
*
* @param actionMapping
* Descri��o do par�metro
* @param actionForm
* Descri��o do par�metro
* @param httpServletRequest
* Descri��o do par�metro
* @param httpServletResponse
* Descri��o do par�metro
* @return Descri��o do retorno
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
httpServletRequest.setAttribute("telaSucessoRelatorio",true);
// cria a vari�vel de retorno
ActionForward retorno = null;
GerarRelatorioContaActionForm form = (GerarRelatorioContaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
// Valida os par�metro passados como consulta
boolean peloMenosUmParametroInformado = false;
// Grupo
Integer idGrupo = null;
if (form.getIdGrupoFaturamento() != null
&& !form.getIdGrupoFaturamento()
.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
idGrupo = new Integer(form
.getIdGrupoFaturamento());
}
// Rota
Short codigoRotaInicial = null;
Short codigoRotaFinal = null;
Short sequencialRotaInicial = null;
Short sequencialRotaFinal = null;
if (form.getCodigoRotaInicial() != null
&& !form.getCodigoRotaInicial().trim()
.equals("")) {
peloMenosUmParametroInformado = true;
codigoRotaInicial = new Short(form
.getCodigoRotaInicial());
codigoRotaFinal = new Short(form
.getCodigoRotaFinal());
if (form.getSequencialRotaInicial() != null
&& !form.getSequencialRotaInicial().trim()
.equals("")) {
peloMenosUmParametroInformado = true;
sequencialRotaInicial = new Short(form
.getSequencialRotaInicial());
sequencialRotaFinal = new Short(form
.getSequencialRotaFinal());
}
}
// Localidade Inicial
Localidade localidadeInicial = null;
SetorComercial setorComercialInicial = null;
String idLocalidadeInicial = form
.getIdLocalidadeInicial();
String codigoSetorComercialInicial = form
.getCodigoSetorComercialInicial();
if (idLocalidadeInicial != null && !idLocalidadeInicial.equals("")) {
peloMenosUmParametroInformado = true;
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, idLocalidadeInicial));
Collection colecaoLocalidades = fachada.pesquisar(filtroLocalidade,
Localidade.class.getName());
if (colecaoLocalidades != null && !colecaoLocalidades.isEmpty()) {
localidadeInicial = (Localidade) Util
.retonarObjetoDeColecao(colecaoLocalidades);
} else {
throw new ActionServletException(
"atencao.pesquisa_inexistente", null,
"Localidade Inicial");
}
// Setor Comercial Inicial
if (codigoSetorComercialInicial != null && !codigoSetorComercialInicial.trim().equals("")) {
FiltroSetorComercial filtro = new FiltroSetorComercial();
filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.CODIGO_SETOR_COMERCIAL, codigoSetorComercialInicial));
filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.ID_LOCALIDADE, localidadeInicial.getId()));
Collection pesquisa = (Collection) fachada.pesquisar(filtro, SetorComercial.class.getName());
if (pesquisa != null && !pesquisa.isEmpty()) {
setorComercialInicial = (SetorComercial) Util.retonarObjetoDeColecao(pesquisa);
} else {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Setor Comercial");
}
}
}
// Localidade Final
Localidade localidadeFinal = null;
SetorComercial setorComercialFinal = null;
String idLocalidadeFinal = form
.getIdLocalidadeFinal();
String codigoSetorComercialFinal = form
.getCodigoSetorComercialFinal();
if (idLocalidadeFinal != null && !idLocalidadeFinal.equals("")) {
peloMenosUmParametroInformado = true;
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, idLocalidadeFinal));
Collection colecaoLocalidades = fachada.pesquisar(filtroLocalidade,
Localidade.class.getName());
if (colecaoLocalidades != null && !colecaoLocalidades.isEmpty()) {
localidadeFinal = (Localidade) Util
.retonarObjetoDeColecao(colecaoLocalidades);
} else {
throw new ActionServletException(
"atencao.pesquisa_inexistente", null,
"Localidade Final");
}
// Setor Comercial Final
if (codigoSetorComercialFinal != null && !codigoSetorComercialFinal.trim().equals("")) {
FiltroSetorComercial filtro = new FiltroSetorComercial();
filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.CODIGO_SETOR_COMERCIAL, codigoSetorComercialFinal));
filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.ID_LOCALIDADE, localidadeFinal.getId()));
Collection pesquisa = (Collection) fachada.pesquisar(filtro, SetorComercial.class.getName());
if (pesquisa != null && !pesquisa.isEmpty()) {
setorComercialFinal = (SetorComercial) Util.retonarObjetoDeColecao(pesquisa);
} else {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Setor Comercial");
}
}
}
// Refer�ncia
Integer mesAno = null;
if (form.getMesAno() != null && !form.getMesAno().equals("")) {
mesAno = Util.formatarMesAnoComBarraParaAnoMes(form.getMesAno());
}
// Erro caso o usu�rio mandou filtrar sem nenhum par�metro
if (!peloMenosUmParametroInformado) {
throw new ActionServletException(
"atencao.filtro.nenhum_parametro_informado");
}
// seta os parametros que ser�o mostrados no relat�rio
// Fim da parte que vai mandar os parametros para o relat�rio
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
RelatorioConta relatorio = new RelatorioConta(
(Usuario) (httpServletRequest.getSession(false))
.getAttribute("usuarioLogado"));
relatorio.addParametro("mesAno", mesAno);
relatorio.addParametro("idGrupo", idGrupo);
if (localidadeInicial != null) {
relatorio.addParametro("idLocalidadeInicial",
localidadeInicial.getId());
}
if (localidadeFinal != null) {
relatorio.addParametro("idLocalidadeFinal",
localidadeFinal.getId());
}
if (setorComercialInicial != null) {
relatorio.addParametro("codigoSetorComercialInicial", setorComercialInicial.getCodigo());
}
if (setorComercialFinal != null) {
relatorio.addParametro("codigoSetorComercialFinal", setorComercialFinal.getCodigo());
}
FiltroFaturamentoGrupo filtroFaturamentoGrupo = new FiltroFaturamentoGrupo();
filtroFaturamentoGrupo.adicionarParametro(new ParametroSimples(FiltroFaturamentoGrupo.ID, idGrupo));
Collection colecaoFaturamentoGrupo = fachada.pesquisar(filtroFaturamentoGrupo, FaturamentoGrupo.class.getName());
FaturamentoGrupo faturamentoGrupo = (FaturamentoGrupo) colecaoFaturamentoGrupo.iterator().next();
//Solicitado por Eduardo Borges
//Caso o ano mes do grupo - 1 seja menor ou igual ao informado, n�o existem contas.
if((Util.subtraiAteSeisMesesAnoMesReferencia(faturamentoGrupo.getAnoMesReferencia(), 1) < mesAno) ){
throw new ActionServletException("atencao.pesquisa.nenhumresultado");
}
relatorio.addParametro("codigoRotaInicial", codigoRotaInicial);
relatorio.addParametro("codigoRotaFinal", codigoRotaFinal);
relatorio.addParametro("sequencialRotaInicial", sequencialRotaInicial);
relatorio.addParametro("sequencialRotaFinal", sequencialRotaFinal);
relatorio.addParametro("tipoFormatoRelatorio",
Integer.parseInt(tipoRelatorio));
String indicadorEmissao = form.getIndicadorEmissao();
String indicadorOrdenacao = form.getIndicadorOrdenacao();
relatorio.addParametro("indicadorEmissao",indicadorEmissao);
relatorio.addParametro("indicadorOrdenacao",indicadorOrdenacao);
retorno = processarExibicaoRelatorio(relatorio,
tipoRelatorio, httpServletRequest, httpServletResponse,
actionMapping);
// devolve o mapeamento contido na vari�vel retorno
return retorno;
}
}