package gcom.gui.relatorio.atendimentopublico;
import gcom.atendimentopublico.ordemservico.FiltroServicoTipo;
import gcom.atendimentopublico.ordemservico.ServicoTipo;
import gcom.cadastro.empresa.Empresa;
import gcom.cadastro.empresa.FiltroEmpresa;
import gcom.cadastro.localidade.FiltroGerenciaRegional;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.FiltroQuadra;
import gcom.cadastro.localidade.FiltroSetorComercial;
import gcom.cadastro.localidade.FiltroUnidadeNegocio;
import gcom.cadastro.localidade.GerenciaRegional;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.localidade.Quadra;
import gcom.cadastro.localidade.SetorComercial;
import gcom.cadastro.localidade.UnidadeNegocio;
import gcom.cobranca.CobrancaGrupo;
import gcom.cobranca.FiltroCobrancaGrupo;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.micromedicao.ContratoEmpresaServico;
import gcom.micromedicao.FiltroContratoEmpresaServico;
import gcom.relatorio.ConstantesRelatorios;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.RelatorioVazioException;
import gcom.relatorio.atendimentopublico.RelatorioOSSituacao;
import gcom.relatorio.atendimentopublico.RelatorioOSSituacaoHelper;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
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;
/**[UC1177] Gerar Relat�rio de Ordens de Servi�o por Situa��o
*
* Action respons�vel por gerar o relat�rio de ordens
* de servi�o por situa��o. Action ser� chamada atrav�s
* da tela relatorio_os_situacao_gerar.jsp
*
* @author Diogo Peixoto
* @since 09/06/2011
*/
public class GerarRelatorioOSSituacaoAction extends ExibidorProcessamentoTarefaRelatorio{
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
GerarRelatorioOSSituacaoActionForm form = (GerarRelatorioOSSituacaoActionForm) actionForm;
String nomeRelatorio = null;
if(form.getOpcaoRelatorio().equalsIgnoreCase("1")){
nomeRelatorio = ConstantesRelatorios.RELATORIO_OS_SITUACAO_ANALITICO;
}else if(form.getOpcaoRelatorio().equalsIgnoreCase("2")){
nomeRelatorio = ConstantesRelatorios.RELATORIO_OS_SITUACAO_SINTETICO;
}
RelatorioOSSituacao relatorioOSSituacao = new RelatorioOSSituacao(
(Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"), nomeRelatorio);
FiltrarRelatorioOSSituacaoHelper filtro = new FiltrarRelatorioOSSituacaoHelper();
//Verifica se o elo polo foi digitado pelo usu�rio
String idEloPolo = form.getIdEloPolo();
Localidade eloPolo = null;
if(Util.verificarIdNaoVazio(idEloPolo)){
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID_ELO, idEloPolo));
Collection<Localidade> localidadeEloPolo = Fachada.getInstancia().pesquisar(filtroLocalidade, Localidade.class.getName());
if (!Util.isVazioOrNulo(localidadeEloPolo)){
eloPolo = (Localidade) localidadeEloPolo.iterator().next();
filtro.setEloPolo(eloPolo);
}else{
throw new ActionServletException("atencao.localidade.nao.elo");
}
}
//Verifica se a localidade foi digitada pelo usu�rio
String idLocalidade = form.getIdLocalidade();
Localidade localidadeEncontrada = null;
if(Util.verificarIdNaoVazio(idLocalidade)){
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID, idLocalidade));
if(eloPolo != null){
filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID_ELO, idEloPolo));
}
Collection<Localidade> localidade = Fachada.getInstancia().pesquisar(filtroLocalidade, Localidade.class.getName());
if (!Util.isVazioOrNulo(localidade)){
localidadeEncontrada = (Localidade) localidade.iterator().next();
filtro.setLocalidade(localidadeEncontrada);
}else{
if(eloPolo != null){
throw new ActionServletException("atencao.localidade_inexistente_elo", eloPolo.getDescricao());
}else{
throw new ActionServletException("atencao.pesquisa.localidade_inexistente");
}
}
}
//Verifica se o setor comercial foi digitado pelo usu�rio
String idSetorComercial = form.getIdSetorComercial();
SetorComercial setorComercial = null;
if(Util.verificarIdNaoVazio(idSetorComercial)){
FiltroSetorComercial filtroSetorComercial = new FiltroSetorComercial();
filtroSetorComercial.adicionarParametro(new ParametroSimples(FiltroSetorComercial.CODIGO_SETOR_COMERCIAL, idSetorComercial));
//Verifica se o usu�rio digitou a localidade, pois o setor comercial � atrelado � localidade
if(localidadeEncontrada != null){
filtroSetorComercial.adicionarParametro(new ParametroSimples(FiltroSetorComercial.ID_LOCALIDADE, idLocalidade));
}
Collection<SetorComercial> setorComercials = Fachada.getInstancia().pesquisar(filtroSetorComercial, SetorComercial.class.getName());
if (!Util.isVazioOrNulo(setorComercials)){
setorComercial = (SetorComercial) setorComercials.iterator().next();
filtro.setSetorComercial(setorComercial);
}else{
if(localidadeEncontrada != null){
throw new ActionServletException("atencao.setor_comercial_nao_existe");
}else{
throw new ActionServletException("atencao.processo.setorComercialNaoCadastrada");
}
}
}
//Verifica se o usu�rio digitou a quadra.
String idQuadra = form.getIdQuadra();
if(Util.verificarIdNaoVazio(idQuadra)){
FiltroQuadra filtroQuadra = new FiltroQuadra();
filtroQuadra.adicionarParametro(new ParametroSimples(FiltroQuadra.ID, idQuadra));
//Verifica se o usu�rio digitou o setor comercial ou a localidade, pois a quadra est� associada a ambos.
if(setorComercial != null){
filtroQuadra.adicionarParametro(new ParametroSimples(FiltroQuadra.ID_SETORCOMERCIAL, idSetorComercial));
}
if(localidadeEncontrada != null){
filtroQuadra.adicionarParametro(new ParametroSimples(FiltroQuadra.ID_LOCALIDADE, idLocalidade));
}
Collection<Quadra> quadras = Fachada.getInstancia().pesquisar(filtroQuadra, Quadra.class.getName());
if (!Util.isVazioOrNulo(quadras)){
Quadra quadra = (Quadra) quadras.iterator().next();
filtro.setQuadra(quadra);
}else{
if(setorComercial != null){
throw new ActionServletException("atencao.quadra.inexistente");
}else if(localidadeEncontrada != null){
throw new ActionServletException("atencao.quadra.inexistente");
}else{
throw new ActionServletException("atencao.quadra.inexistente");
}
}
}
//Verifica se o tipo de servi�o foi digitado pelo usu�rio
String idServicoTipo = form.getIdTipoServico();
ServicoTipo servicoTipo = null;
if(Util.verificarIdNaoVazio(idServicoTipo)){
FiltroServicoTipo filtroServicoTipo = new FiltroServicoTipo();
filtroServicoTipo.adicionarParametro(new ParametroSimples(FiltroServicoTipo.ID, idServicoTipo));
Collection<ServicoTipo> servicosTipo = Fachada.getInstancia().pesquisar(filtroServicoTipo, ServicoTipo.class.getName());
if (!Util.isVazioOrNulo(servicosTipo)){
servicoTipo = (ServicoTipo) Util.retonarObjetoDeColecao(servicosTipo);
filtro.setServicoTipo(servicoTipo);
}else{
throw new ActionServletException("atencao.tipo_servico_inexistente");
}
}
FiltroGerenciaRegional filtroGerenciaRegional = new FiltroGerenciaRegional();
filtroGerenciaRegional.adicionarParametro(new ParametroSimples(FiltroGerenciaRegional.ID, form.getIdGerenciaRegional()));
Collection<GerenciaRegional> gerenciasRegional = Fachada.getInstancia().pesquisar(filtroGerenciaRegional, GerenciaRegional.class.getName());
GerenciaRegional gerenciaRegional = (GerenciaRegional) Util.retonarObjetoDeColecao(gerenciasRegional);
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(FiltroUnidadeNegocio.ID, form.getIdUnidadeNegocio()));
Collection<UnidadeNegocio> unidadeNegocios = Fachada.getInstancia().pesquisar(filtroUnidadeNegocio, UnidadeNegocio.class.getName());
UnidadeNegocio unidadeNegocio = (UnidadeNegocio) Util.retonarObjetoDeColecao(unidadeNegocios);
try{
filtro.setOpcaoOSCobranca(form.getOpcaoRelatorio());
filtro.setDataReferencia(form.getDataReferencia());
filtro.setIdEmpresa(Integer.valueOf(form.getIdEmpresa()));
filtro.setSituacaoOS(form.getSituacaoOS());
filtro.setIdGrupoCobranca(Integer.valueOf(form.getIdGrupoCobranca()));
filtro.setUnidadeNegocio(unidadeNegocio);
filtro.setOpcaoOSCobranca(form.getOpcaoOSCobranca());
filtro.setGerenciaRegional(gerenciaRegional);
filtro.setOpcaoRelatorio(form.getOpcaoRelatorio());
}catch (NumberFormatException e) {
throw new ActionServletException("atencao.data_inicio_contrato_invalida");
}
RelatorioOSSituacaoHelper helper = Fachada.getInstancia().filtrarRelatorioOSSituacao(filtro);
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
FiltroEmpresa filtroEmpresa = new FiltroEmpresa();
filtroEmpresa.adicionarParametro(new ParametroSimples(FiltroEmpresa.ID, form.getIdEmpresa()));
Collection<Empresa> empresas = Fachada.getInstancia().pesquisar(filtroEmpresa, Empresa.class.getName());
Empresa empresa = (Empresa)Util.retonarObjetoDeColecao(empresas);
FiltroCobrancaGrupo filtroCobrancaGrupo = new FiltroCobrancaGrupo();
filtroCobrancaGrupo.adicionarParametro(new ParametroSimples(FiltroCobrancaGrupo.ID, form.getIdGrupoCobranca()));
filtroCobrancaGrupo.adicionarCaminhoParaCarregamentoEntidade(FiltroCobrancaGrupo.CONTRATO_EMPRESA_SERVICO);
Collection<CobrancaGrupo> cobrancasGrupo = Fachada.getInstancia().pesquisar(filtroCobrancaGrupo, CobrancaGrupo.class.getName());
CobrancaGrupo cobrancaGrupo = (CobrancaGrupo) Util.retonarObjetoDeColecao(cobrancasGrupo);
String numeroContrato = null;
String strCobrancaGrupo = null;
if(cobrancaGrupo != null){
FiltroContratoEmpresaServico filtroContratoEmpresa = new FiltroContratoEmpresaServico();
filtroContratoEmpresa.adicionarParametro(new ParametroSimples(FiltroContratoEmpresaServico.ID,
cobrancaGrupo.getContratoEmpresaServico().getId()));
Collection<ContratoEmpresaServico> contratosEmpresa = Fachada.getInstancia().pesquisar(filtroContratoEmpresa, ContratoEmpresaServico.class.getName());
numeroContrato = (String) ((ContratoEmpresaServico)(Util.retonarObjetoDeColecao(contratosEmpresa))).getDescricaoContrato();
strCobrancaGrupo = cobrancaGrupo.getDescricao();
}
httpServletRequest.setAttribute( "telaSucessoRelatorio", "sim" );
relatorioOSSituacao.addParametro("dataReferencia", form.getDataReferencia());
relatorioOSSituacao.addParametro("tipoFormatoRelatorio", Integer.parseInt(tipoRelatorio));
relatorioOSSituacao.addParametro("dadosRelatorio", helper);
relatorioOSSituacao.addParametro("situacaoOS", form.getSituacaoOS());
relatorioOSSituacao.addParametro("descricaoEmpresa", empresa.getDescricao());
relatorioOSSituacao.addParametro("numeroContrato", numeroContrato);
relatorioOSSituacao.addParametro("cobrancaGrupo", strCobrancaGrupo);
if(form.getOpcaoRelatorio().equalsIgnoreCase("1")){
relatorioOSSituacao.addParametro("tipoRelatorio", "Anal�tico");
}else if(form.getOpcaoRelatorio().equalsIgnoreCase("2")){
relatorioOSSituacao.addParametro("tipoRelatorio", "Sint�tico");
}
try {
retorno = processarExibicaoRelatorio(relatorioOSSituacao, tipoRelatorio, httpServletRequest, httpServletResponse, actionMapping);
} catch (RelatorioVazioException ex) {
// manda o erro para a p�gina no request atual
reportarErros(httpServletRequest, "atencao.relatorio.vazio");
// seta o mapeamento de retorno para a tela de aten��o de popup
retorno = actionMapping.findForward("telaAtencaoPopup");
}
return retorno;
}
}