package gcom.gui.relatorio.atendimentopublico;
import gcom.atendimentopublico.ordemservico.FiltroTipoServico;
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.FiltroSetorComercial;
import gcom.cadastro.localidade.FiltroUnidadeNegocio;
import gcom.cadastro.localidade.GerenciaRegional;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.localidade.SetorComercial;
import gcom.cadastro.localidade.UnidadeNegocio;
import gcom.cobranca.CobrancaBoletimMedicao;
import gcom.cobranca.CobrancaGrupo;
import gcom.cobranca.FiltroCobrancaBoletimMedicao;
import gcom.cobranca.FiltroCobrancaGrupo;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.FiltroOperacao;
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 javax.servlet.http.HttpSession;
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 carregar os dados para exibi��o
* da tela relatorio_os_situacao_gerar.jsp
*
* @author Diogo Peixoto
* @since 03/06/2011
*/
public class ExibirGerarRelatorioOSSituacaoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("exibirGerarRelatorioOSSituacao");
GerarRelatorioOSSituacaoActionForm form = (GerarRelatorioOSSituacaoActionForm) actionForm;
HttpSession sessao = httpServletRequest.getSession(false);
String voltouExcecaoCobrancaGrupo = httpServletRequest.getParameter("voltarGrupoCobranca");
String limparForm = httpServletRequest.getParameter("limparForm");
String pesquisarLocalidade = httpServletRequest.getParameter("pesquisarLocalidade");
String pesquisarSetorComercial = httpServletRequest.getParameter("pesquisarSetorComercial");
String pesquisarEloPolo = httpServletRequest.getParameter("pesquisarEloPolo");
String pesquisarTipoServico = httpServletRequest.getParameter("pesquisarTipoServico");
if(voltouExcecaoCobrancaGrupo == null){
// Pesquisando a Localidade pelo c�digo que o usu�rio digitou
if(Util.verificarNaoVazio(pesquisarLocalidade)){
String codigoLocalidade = form.getIdLocalidade();
if (codigoLocalidade != null && !codigoLocalidade.trim().equals("")) {
pesquisarLocalidade(httpServletRequest, form);
}
// Localidade
if (Util.verificarIdNaoVazio(form.getIdLocalidade())) {
httpServletRequest.setAttribute("localidadeEncontrada", true);
}
//Pesquisando o Setor Comercial pelo c�digo que o usu�rio digitou
}else if(Util.verificarNaoVazio(pesquisarSetorComercial)){
String codigoSetor = form.getIdSetorComercial();
if (Util.verificarIdNaoVazio(codigoSetor)){
pesquisarSetorComercial(httpServletRequest, form);
}
//Setor Comercial
if (Util.verificarIdNaoVazio(form.getIdSetorComercial()) && Util.verificarNaoVazio(form.getDescricaoSetorComercial())) {
httpServletRequest.setAttribute("setorComercialEncontrado", true);
}
}else if(Util.verificarNaoVazio(pesquisarEloPolo)){
String codigoEloPolo = form.getIdEloPolo();
if (Util.verificarIdNaoVazio(codigoEloPolo)){
pesquisarEloPolo(form);
}
//Setor Comercial
if (Util.verificarIdNaoVazio(form.getIdEloPolo()) && Util.verificarNaoVazio(form.getDescricaoEloPolo())) {
httpServletRequest.setAttribute("eloPoloEncontrado", true);
}
}else if(Util.verificarNaoVazio(pesquisarTipoServico)){
//Pesquisando o Setor Comercial pelo c�digo que o usu�rio digitou
String codigoTipoServico = form.getIdTipoServico();
if (Util.verificarIdNaoVazio(codigoTipoServico)){
pesquisarTipoServico(httpServletRequest, form);
}
//Tipo Servi�o
if (Util.verificarIdNaoVazio(form.getIdTipoServico()) && Util.verificarNaoVazio(form.getDescricaoTipoServico())) {
httpServletRequest.setAttribute("tipoServicoEncontrado", true);
}
}else if(Util.verificarNaoVazio(limparForm)){
form.setOpcaoRelatorio("");
form.setDataReferencia("");
form.setIdEmpresa("");
form.setSituacaoOS("");
form.setIdGrupoCobranca("");
form.setIdGerenciaRegional("");
form.setIdUnidadeNegocio("");
form.setIdLocalidade("");
form.setDescricaoLocalidade("");
form.setIdSetorComercial("");
form.setDescricaoSetorComercial("");
form.setIdQuadra("");
form.setOpcaoOSCobranca("");
form.setIdEloPolo("");
form.setDescricaoEloPolo("");
form.setIdTipoServico("");
form.setDescricaoTipoServico("");
sessao.removeAttribute("situacaoOSEncontrada");
sessao.removeAttribute("gruposCobranca");
}else{
String empresaSelecionada = httpServletRequest.getParameter("empresaSelecionada");
/*Caso o submit do form tenha vindo atrav�s da sele��o da empresa, n�o precisa
* carregar novamente todas as cole��es, basta apenas carregar o Cobran�aGrupo
* que depende da empresa selecionada.
*/
if(empresaSelecionada != null && empresaSelecionada.equalsIgnoreCase("sim")){
String idEmpresa = form.getIdEmpresa();
sessao.removeAttribute("gruposCobranca");
//Caso a empresa selecionada n�o seja a op��o "Branco (value = -1)"
if(!idEmpresa.equals("-1")){
FiltroCobrancaGrupo filtro = new FiltroCobrancaGrupo();
filtro.adicionarParametro(new ParametroSimples(FiltroCobrancaGrupo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtro.adicionarParametro(new ParametroSimples(FiltroCobrancaGrupo.EMPRESA_ID, idEmpresa));
filtro.setCampoOrderBy(FiltroCobrancaGrupo.ID);
Collection<CobrancaGrupo> colecaoCobrancaGrupo = this.getFachada().pesquisar(filtro, CobrancaGrupo.class.getName());
if (colecaoCobrancaGrupo == null || colecaoCobrancaGrupo.isEmpty()) {
throw new ActionServletException("atencao.naocadastrado", "exibirGerarRelatorioOSSituacaoAction.do?voltarGrupoCobranca=sim",
new ActionServletException("atencao.naocadastrado"), "Cobran�a Grupo");
} else {
sessao.setAttribute("gruposCobranca", true);
}
sessao.setAttribute("colecaoCobrancaGrupo", colecaoCobrancaGrupo);
}
sessao.removeAttribute("situacaoOSEncontrada");
sessao.removeAttribute("boletimGerado");
}else{
String grupoCobrancaSelecionado = httpServletRequest.getParameter("grupoCobrancaSelecionado");
if(grupoCobrancaSelecionado != null && grupoCobrancaSelecionado.equalsIgnoreCase("sim")){
String idGrupoCobranca = form.getIdGrupoCobranca();
/*
* Caso o submit do form tenha vindo atrav�s da sele��o do grupo de cobran�a
* verificar se o ano/m�s refer�ncia possui uma data v�lida e verificar qual
* os tipos de situa��o de OS que ser�o carregados.
*/
if(!idGrupoCobranca.equals("-1")){
if(Util.verificarNaoVazio(form.getDataReferencia())){
//Verifica se o grupo de cobran�a e o ano m�s j� foi gerado um boletim
Integer anoMes = Util.formatarMesAnoComBarraParaAnoMes(form.getDataReferencia());
FiltroCobrancaBoletimMedicao filtroMed = new FiltroCobrancaBoletimMedicao();
filtroMed.adicionarParametro(new ParametroSimples(FiltroCobrancaBoletimMedicao.COBRANCA_GRUPO_ID, idGrupoCobranca));
filtroMed.adicionarParametro(new ParametroSimples(FiltroCobrancaBoletimMedicao.ANO_MES_REFERENCIA, anoMes));
Collection<CobrancaBoletimMedicao> medicoes =
Fachada.getInstancia().pesquisar(filtroMed, CobrancaBoletimMedicao.class.getName());
//Caso o grupo de cobran�a com ano/m�s j� tenha sido gerado boletim
if(!Util.isVazioOrNulo(medicoes)){
sessao.setAttribute("boletimGerado", true);
}
sessao.setAttribute("situacaoOSEncontrada", true);
}
/*
* Caso o usu�rio tenha selecionado um grupo de cobran�a que seja o vazio, n�o procurar
* por situa��es de OS e remover o atributo situacaoOSEncontrada.
*/
}else{
sessao.removeAttribute("situacaoOSEncontrada");
sessao.removeAttribute("boletimGerado");
}
}else{
this.pesquisarEmpresa(sessao);
}
}
}
}
verificaObjetosPesquisarPeloUsuario(httpServletRequest, form);
//Gerencia Regional
FiltroGerenciaRegional filtroGerencia = new FiltroGerenciaRegional();
filtroGerencia.adicionarParametro(new ParametroSimples(FiltroGerenciaRegional.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroGerencia.setCampoOrderBy(FiltroGerenciaRegional.NOME);
Collection<GerenciaRegional> gerenciasRegionais = this.getFachada().pesquisar(filtroGerencia, GerenciaRegional.class.getName());
httpServletRequest.setAttribute("colecaoGerenciaRegional",gerenciasRegionais);
//Unidade de Negocio
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(FiltroUnidadeNegocio.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroUnidadeNegocio.setCampoOrderBy(FiltroUnidadeNegocio.NOME);
Collection<UnidadeNegocio> colecaoUnidadeNegocio = this.getFachada().pesquisar(filtroUnidadeNegocio, UnidadeNegocio.class.getName());
httpServletRequest.setAttribute("colecaoUnidadeNegocio", colecaoUnidadeNegocio);
//Por default a op��o � TODAS
form.setOpcaoOSCobranca("todas");
return retorno;
}
private void pesquisarEmpresa(HttpSession sessao){
FiltroEmpresa filtroEmpresa = new FiltroEmpresa();
filtroEmpresa.setConsultaSemLimites(true);
filtroEmpresa.adicionarParametro(new ParametroSimples(FiltroEmpresa.INDICADOR_EMPRESA_CONTRATADA_COBRANCA, new Short("1")));
filtroEmpresa.adicionarParametro(new ParametroSimples(FiltroEmpresa.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroEmpresa.setCampoOrderBy(FiltroOperacao.DESCRICAO);
Collection<Empresa> colecaoEmpresa = this.getFachada().pesquisar(filtroEmpresa, Empresa.class.getName());
if (colecaoEmpresa == null || colecaoEmpresa.isEmpty()) {
throw new ActionServletException("atencao.naocadastrado", null, "Empresa");
} else {
sessao.setAttribute("colecaoEmpresa", colecaoEmpresa);
}
}
//M�todos para carregar os dados que o usu�rio apertou ENTER
private void pesquisarLocalidade(HttpServletRequest request, GerarRelatorioOSSituacaoActionForm form) {
Fachada fachada = Fachada.getInstancia();
this.limparSetorComercial(form);
this.limparQuara(form);
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID, form.getIdLocalidade()));
Collection<Localidade> localidadePesquisada = fachada.pesquisar(filtroLocalidade, Localidade.class.getName());
if (localidadePesquisada != null && !localidadePesquisada.isEmpty()) {
Localidade localidade = (Localidade) Util.retonarObjetoDeColecao(localidadePesquisada);
form.setIdLocalidade(localidade.getId().toString());
form.setDescricaoLocalidade(localidade.getDescricao());
} else {
form.setIdLocalidade("");
form.setDescricaoLocalidade("Localidade Inexistente");
}
}
private void pesquisarSetorComercial(HttpServletRequest request, GerarRelatorioOSSituacaoActionForm form){
this.limparQuara(form);
if (Util.verificarNaoVazio(form.getIdLocalidade())) {
FiltroSetorComercial filtroSetorComercial = new FiltroSetorComercial();
filtroSetorComercial.limparListaParametros();
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.ID_LOCALIDADE, new Integer(form.getIdLocalidade())));
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.CODIGO_SETOR_COMERCIAL,new Integer(form.getIdSetorComercial())));
Collection<SetorComercial> setorComerciais;
setorComerciais = this.getFachada().pesquisar(filtroSetorComercial, SetorComercial.class.getName());
if (setorComerciais != null && !setorComerciais.isEmpty()) {
SetorComercial setorComercial = (SetorComercial) Util.retonarObjetoDeColecao(setorComerciais);
form.setIdSetorComercial(Util.adicionarZerosEsquedaNumero(3, new Integer(setorComercial.getCodigo()).toString()));
form.setDescricaoSetorComercial(setorComercial.getDescricao());
}else {
form.setIdSetorComercial("");
form.setDescricaoSetorComercial("Setor Comercial Inexistente");
}
}
}
private void pesquisarTipoServico(HttpServletRequest request, GerarRelatorioOSSituacaoActionForm form){
if (Util.verificarNaoVazio(form.getIdTipoServico())){
FiltroTipoServico filtroTipoServico = new FiltroTipoServico();
filtroTipoServico.adicionarParametro(new ParametroSimples(FiltroTipoServico.ID, form.getIdTipoServico()));
Collection<ServicoTipo> tiposServicos;
tiposServicos = this.getFachada().pesquisar(filtroTipoServico, ServicoTipo.class.getName());
if (!Util.isVazioOrNulo(tiposServicos)) {
ServicoTipo servicoTipo = (ServicoTipo) Util.retonarObjetoDeColecao(tiposServicos);
form.setIdTipoServico(servicoTipo.getId().toString());
form.setDescricaoTipoServico(servicoTipo.getDescricao());
}else {
form.setIdTipoServico("");
form.setDescricaoTipoServico("Servi�o Tipo Inexistente");
}
}
}
private void pesquisarEloPolo(GerarRelatorioOSSituacaoActionForm form) {
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID_ELO, form.getIdEloPolo()));
filtroLocalidade.adicionarCaminhoParaCarregamentoEntidade("localidade");
// Recupera Elo P�lo
Collection<Localidade> colecaoEloPolo = this.getFachada().pesquisar(filtroLocalidade, Localidade.class.getName());
if (colecaoEloPolo != null && !colecaoEloPolo.isEmpty()) {
Localidade localidade = (Localidade) Util.retonarObjetoDeColecao(colecaoEloPolo);
localidade = localidade.getLocalidade();
form.setIdEloPolo(localidade.getId().toString());
form.setDescricaoEloPolo(localidade.getDescricao());
} else {
form.setIdEloPolo(null);
form.setDescricaoEloPolo("Localidade inexistente");
}
}
/*M�todo respons�vel por manter as cores (vermelho - caso n�o existe, preto - caso exista
* dos objetos procurados pelo usu�rio (Localidade, Elo Polo e Seter Comercial)
*/
private void verificaObjetosPesquisarPeloUsuario(HttpServletRequest request, GerarRelatorioOSSituacaoActionForm form){
if(Util.verificarNaoVazio(form.getDescricaoLocalidade()) && Util.verificarIdNaoVazio(form.getIdLocalidade())){
request.setAttribute("localidadeEncontrada", true);
}
if(Util.verificarNaoVazio(form.getDescricaoEloPolo()) && Util.verificarIdNaoVazio(form.getIdEloPolo())){
request.setAttribute("eloPoloEncontrado", true);
}
if(Util.verificarNaoVazio(form.getDescricaoSetorComercial()) && Util.verificarIdNaoVazio(form.getIdSetorComercial())){
request.setAttribute("setorComercialEncontrado", true);
}
if(Util.verificarNaoVazio(form.getDescricaoTipoServico()) && Util.verificarIdNaoVazio(form.getIdTipoServico())){
request.setAttribute("tipoServicoEncontrado", true);
}
}
private void limparSetorComercial(GerarRelatorioOSSituacaoActionForm form){
form.setIdSetorComercial("");
form.setDescricaoSetorComercial("");
}
private void limparQuara(GerarRelatorioOSSituacaoActionForm form){
form.setIdQuadra("");
}
}