package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.FiltroOrdemServico;
import gcom.atendimentopublico.ordemservico.FiltroServicoTipo;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.ServicoTipo;
import gcom.atendimentopublico.registroatendimento.AtendimentoMotivoEncerramento;
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.cobranca.CobrancaGrupo;
import gcom.cobranca.FiltroCobrancaGrupo;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
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;
/**
* [UC ] Gerar Os Seletiva de Fiscaliza��o
* @author Vivianne Sousa
* @date 20/05/2011
*/
public class ExibirGerarOSSeletivaFiscalizacaoAction extends
GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("exibirGerarOSSeletivaFiscalizacao");
Fachada fachada = Fachada.getInstancia();
GerarOSSeletivaFiscalizacaoActionForm form = (GerarOSSeletivaFiscalizacaoActionForm) actionForm;
HttpSession sessao = httpServletRequest.getSession(false);
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
// if(sistemaParametro.getQtdeDiasEncerraOSFiscalizacao()== null){
//
// }
if(httpServletRequest.getParameter("menu") != null){
limparForm(form,sistemaParametro,httpServletRequest);
}
// Grupo de Cobran�a
pesquisarGrupoCobranca(fachada, sessao);
// Ger�ncia Regional
pesquisarGerenciaRegional(fachada, sessao);
// Unidade de Neg�cio
pesquisarUnidadeNegocio(fachada, sessao, form);
//Localidade Inicial
String idLocalidadeInicio = pesquisarLocalidadeInicial(httpServletRequest, fachada, form);
// Localidade Final
pesquisarLocalidadeFinal(httpServletRequest, fachada, form, idLocalidadeInicio);
// Servi�o Tipo
pesquisarServicoTipo(fachada, form);
pesquisarordemServico(fachada, form, sistemaParametro,httpServletRequest);
if(httpServletRequest.getParameter("pesquisar") != null){
form.setQtdeOSEncerradasComConclusao("");
form.setQtdeOSEncerradasSemConclusao("");
// form.setPercentualOSgeradas("2,00");
httpServletRequest.setAttribute("habilitaBtGerar",2);
if(form.getQtdeDiasEncerramentoOS() == null ||
form.getQtdeDiasEncerramentoOS().equals("")){
throw new ActionServletException("atencao.campo.informado", null, "Quantidade de Dias de Encerramento da OS");
}
Integer qtdeDiasEncerramentoOS = new Integer(form.getQtdeDiasEncerramentoOS());
if(qtdeDiasEncerramentoOS.equals(new Integer("0")) ||
qtdeDiasEncerramentoOS.compareTo(sistemaParametro.getQtdeDiasEncerraOSFiscalizacao()) == 1){
throw new ActionServletException("atencao.quantidade_dias_encerramento_os_maior_zero",
null, sistemaParametro.getQtdeDiasEncerraOSFiscalizacao().toString());
}
//bot�o pesquisar
Integer idOrdemServico = null;
Integer idGrupoCobranca = null;
Integer idGerencia = null;
Integer idUnidade = null;
Integer idLocalidadeInicial = null;
Integer idLocalidadeFinal = null;
Integer idTipoServico = null;
if(form.getIdOrdemServico() != null && !form.getIdOrdemServico().equals("")){
idOrdemServico = new Integer(form.getIdOrdemServico());
//[SB0002] � Verificar Ordem Servi�o
Integer idMotivoMotivoEncerramentoOS = fachada.pesquisarIdMotivoEncerramentoOS(idOrdemServico);
if(idMotivoMotivoEncerramentoOS.equals(AtendimentoMotivoEncerramento.CONCLUSAO_SERVICO)){
form.setQtdeOSEncerradasComConclusao("1");
form.setQtdeOSEncerradasSemConclusao("0");
}else{
form.setQtdeOSEncerradasComConclusao("0");
form.setQtdeOSEncerradasSemConclusao("1");
}
httpServletRequest.setAttribute("habilitaBtGerar",1);
}else{
if(form.getGrupoCobranca() != null && !form.getGrupoCobranca().equals("")
&& !form.getGrupoCobranca().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
idGrupoCobranca = new Integer(form.getGrupoCobranca());
}else{
throw new ActionServletException("atencao.campo.informado", null, "Ordem de Servi�o ou Grupo de Cobran�a");
}
if(form.getGerenciaRegional() != null && !form.getGerenciaRegional().equals("")
&& !form.getGerenciaRegional().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
idGerencia = new Integer(form.getGerenciaRegional());
}
if(form.getUnidadeNegocio() != null && !form.getUnidadeNegocio().equals("")
&& !form.getUnidadeNegocio().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
idUnidade = new Integer(form.getUnidadeNegocio());
}
if(form.getIdLocalidadeInicial() != null && !form.getIdLocalidadeInicial().equals("")){
idLocalidadeInicial = new Integer(form.getIdLocalidadeInicial());
if(form.getIdLocalidadeFinal() != null && !form.getIdLocalidadeFinal().equals("")){
idLocalidadeFinal = new Integer(form.getIdLocalidadeFinal());
}else{
idLocalidadeFinal = idLocalidadeInicial;
}
}
if(form.getIdServicoTipo() != null && !form.getIdServicoTipo().equals("")){
idTipoServico = new Integer(form.getIdServicoTipo());
}
if(form.getQtdeDiasEncerramentoOS() != null && !form.getQtdeDiasEncerramentoOS().equals("")){
qtdeDiasEncerramentoOS = new Integer(form.getQtdeDiasEncerramentoOS());
}
Map qtdeOs = fachada.recuperaQtdeOSEncerrada(idGrupoCobranca,idGerencia,
idUnidade,idLocalidadeInicial,idLocalidadeFinal,idTipoServico,qtdeDiasEncerramentoOS);
Integer qtdeOSConclusaoServico = (Integer)qtdeOs.get("qtdeOSConclusaoServico");
Integer qtdeOSSemConclusaoServico = (Integer)qtdeOs.get("qtdeOSSemConclusaoServico");
if(qtdeOSConclusaoServico.equals(new Integer("0")) &&
qtdeOSSemConclusaoServico.equals(new Integer("0"))){
//Caso a sele��o para o filtro informado n�o tenha retornado dados, o sistema exibe a msg
//'Pesquisa n�o encontrou ordens de servi�o para fiscaliza��o que atendam ao filtro informado�
throw new ActionServletException("atencao.pesquisa_nao_encontrou_os");
}
form.setQtdeOSEncerradasComConclusao(qtdeOSConclusaoServico.toString());
form.setQtdeOSEncerradasSemConclusao(qtdeOSSemConclusaoServico.toString());
httpServletRequest.setAttribute("habilitaBtGerar",1);
}
}
return retorno;
}
private void limparForm(GerarOSSeletivaFiscalizacaoActionForm form,
SistemaParametro sistemaParametro,HttpServletRequest httpServletRequest) {
form.setIdLocalidadeInicial("");
form.setDescricaoLocalidadeInicial("");
form.setIdLocalidadeFinal("");
form.setDescricaoLocalidadeFinal("");
form.setIdServicoTipo("");
form.setDescricaoServicoTipo("");
form.setGrupoCobranca("");
form.setGerenciaRegional("");
form.setUnidadeNegocio("");
form.setQtdeDiasEncerramentoOS(sistemaParametro.getQtdeDiasEncerraOSFiscalizacao().toString());
form.setQtdeOSEncerradasComConclusao("");
form.setQtdeOSEncerradasSemConclusao("");
form.setPercentualOSgeradas("2");
form.setIdOrdemServico("");
form.setNomeOrdemServico("");
httpServletRequest.setAttribute("habilitaBtGerar",2);
}
private void pesquisarServicoTipo(Fachada fachada, GerarOSSeletivaFiscalizacaoActionForm form) {
if (form.getIdServicoTipo() != null && !form.getIdServicoTipo().equals("")) {
FiltroServicoTipo filtroServicoTipo = new FiltroServicoTipo();
filtroServicoTipo.adicionarParametro(new ParametroSimples(
FiltroServicoTipo.ID, new Integer(form.getIdServicoTipo())));
Collection colecaoServicoTipo = fachada.pesquisar(filtroServicoTipo, ServicoTipo.class.getName());
if (colecaoServicoTipo != null && !colecaoServicoTipo.isEmpty()) {
ServicoTipo servicoTipo = (ServicoTipo) Util.retonarObjetoDeColecao(colecaoServicoTipo);
form.setDescricaoServicoTipo(servicoTipo.getDescricao());
} else {
form.setIdServicoTipo("");
form.setDescricaoServicoTipo("TIPO DE SERVI�O INEXISTENTE");
}
}
}
private String pesquisarLocalidadeInicial(HttpServletRequest httpServletRequest, Fachada fachada, GerarOSSeletivaFiscalizacaoActionForm form) {
String idLocalidadeInicial = form.getIdLocalidadeInicial();
Localidade localidadeInicial = null;
if (idLocalidadeInicial != null && !idLocalidadeInicial.trim().equals("")) {
FiltroLocalidade filtroLocalidadeInicial = new FiltroLocalidade();
filtroLocalidadeInicial.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, idLocalidadeInicial));
Collection colecaoLocalidadeInicial = fachada.pesquisar(
filtroLocalidadeInicial, Localidade.class.getName());
if (colecaoLocalidadeInicial != null && !colecaoLocalidadeInicial.isEmpty()) {
localidadeInicial = (Localidade) colecaoLocalidadeInicial.iterator().next();
form.setDescricaoLocalidadeInicial(localidadeInicial.getDescricao());
} else {
httpServletRequest.setAttribute("localidadeInicialInexistente","true");
form.setIdLocalidadeInicial("");
form.setDescricaoLocalidadeInicial("LOCALIDADE INEXISTENTE");
}
} else {
form.setDescricaoLocalidadeInicial("");
}
return idLocalidadeInicial;
}
private void pesquisarLocalidadeFinal(HttpServletRequest httpServletRequest, Fachada fachada, GerarOSSeletivaFiscalizacaoActionForm form, String idLocalidadeInicial) {
String idLocalidadeFinal = form.getIdLocalidadeFinal();
Localidade localidadeFinal = null;
if (idLocalidadeFinal != null && !idLocalidadeFinal.trim().equals("")) {
if (idLocalidadeInicial != null && !idLocalidadeInicial.trim().equals("")) {
if ((new Integer(idLocalidadeInicial)).compareTo(new Integer(idLocalidadeFinal)) > 0) {
throw new ActionServletException("atencao.localidade.final.maior.localidade.inicial");
}
}
FiltroLocalidade filtroLocalidadeFinal = new FiltroLocalidade();
filtroLocalidadeFinal.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, idLocalidadeFinal));
Collection colecaoLocalidadeFinal = fachada.pesquisar(
filtroLocalidadeFinal, Localidade.class.getName());
if (colecaoLocalidadeFinal != null && !colecaoLocalidadeFinal.isEmpty()) {
localidadeFinal = (Localidade) colecaoLocalidadeFinal.iterator().next();
form.setDescricaoLocalidadeFinal(localidadeFinal.getDescricao());
} else {
httpServletRequest.setAttribute("localidadeFinalInexistente","true");
form.setIdLocalidadeFinal("");
form.setDescricaoLocalidadeFinal("LOCALIDADE INEXISTENTE");
}
} else {
form.setDescricaoLocalidadeFinal("");
}
}
private void pesquisarGrupoCobranca(Fachada fachada,HttpSession sessao) {
if(sessao.getAttribute("collectionCobrancaGrupo") == null){
FiltroCobrancaGrupo filtroCobrancaGrupo = new FiltroCobrancaGrupo();
filtroCobrancaGrupo.setCampoOrderBy(FiltroCobrancaGrupo.DESCRICAO_ABREVIADA);
Collection<CobrancaGrupo> collectionCobrancaGrupo =
fachada.pesquisar(filtroCobrancaGrupo, CobrancaGrupo.class.getName());
if (collectionCobrancaGrupo == null || collectionCobrancaGrupo.isEmpty()) {
throw new ActionServletException("atencao.naocadastrado", null,
"Grupo de Cobran�a");
} else {
sessao.setAttribute("collectionCobrancaGrupo", collectionCobrancaGrupo);
}
}
}
private void pesquisarUnidadeNegocio(Fachada fachada, HttpSession sessao,
GerarOSSeletivaFiscalizacaoActionForm form) {
if(sessao.getAttribute("colecaoUnidadeNegocio") == null){
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(
FiltroUnidadeNegocio.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
if(form.getGerenciaRegional() != null &&
!form.getGerenciaRegional().equals("") &&
!form.getGerenciaRegional().equals(""+ConstantesSistema.NUMERO_NAO_INFORMADO)){
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(FiltroUnidadeNegocio.ID_GERENCIA,
form.getGerenciaRegional()));
}
Collection colecaoUnidadeNegocio = fachada.pesquisar(filtroUnidadeNegocio,
UnidadeNegocio.class.getName());
if (colecaoUnidadeNegocio == null || colecaoUnidadeNegocio.isEmpty()) {
throw new ActionServletException("atencao.naocadastrado", null,
"Unidade de Neg�cio");
} else {
sessao.setAttribute("colecaoUnidadeNegocio", colecaoUnidadeNegocio);
}
}
}
private void pesquisarGerenciaRegional(Fachada fachada, HttpSession sessao) {
if(sessao.getAttribute("gerenciasRegionais") == null){
FiltroGerenciaRegional filtroGerenciaRegional = new FiltroGerenciaRegional();
filtroGerenciaRegional.adicionarParametro(new ParametroSimples(
FiltroGerenciaRegional.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
Collection gerenciasRegionais = fachada.pesquisar(filtroGerenciaRegional,
GerenciaRegional.class.getName());
if (gerenciasRegionais == null || gerenciasRegionais.isEmpty()) {
throw new ActionServletException("atencao.naocadastrado", null,"Ger�ncia Regional");
} else {
sessao.setAttribute("gerenciasRegionais", gerenciasRegionais);
}
}
}
private void pesquisarordemServico(Fachada fachada, GerarOSSeletivaFiscalizacaoActionForm form,
SistemaParametro sistemaParametro,HttpServletRequest httpServletRequest) {
if (form.getIdOrdemServico() != null && !form.getIdOrdemServico().equals("")) {
FiltroOrdemServico filtroOrdemServico = new FiltroOrdemServico();
filtroOrdemServico.adicionarParametro(new ParametroSimples(FiltroOrdemServico.ID,new Integer(form.getIdOrdemServico())));
// filtroOrdemServico.adicionarCaminhoParaCarregamentoEntidade(FiltroOrdemServico.SOLICITACAO_TIPO_ESPECIFICACAO);
Collection colecaoOrdemServico = fachada.pesquisar(filtroOrdemServico,OrdemServico.class.getName());
if(colecaoOrdemServico != null && !colecaoOrdemServico.isEmpty()){
OrdemServico ordemServico = (OrdemServico) colecaoOrdemServico.iterator().next();
// form.setNomeOrdemServico(ordemServico.getServicoTipo().getDescricao());
form.setNomeOrdemServico("");
//[FS0001] � Validar Ordem de Servi�o.
if (ordemServico.getAtendimentoMotivoEncerramento() != null &&
ordemServico.getAtendimentoMotivoEncerramento().getId()
.equals(new Integer(AtendimentoMotivoEncerramento.CANCELADO_POR_DERCURSO_DE_PRAZO))) {
form.setIdOrdemServico("");
throw new ActionServletException("atencao.os.cancelada.decurso.prazo");
}
if(ordemServico.getDataEncerramento() != null){
Integer qtdeDias = 0;
if(sistemaParametro.getQtdeDiasEncerraOSFiscalizacao() != null){
qtdeDias = sistemaParametro.getQtdeDiasEncerraOSFiscalizacao();
}
Date dataEncerramentoMaisDiasLimite = Util.adicionarNumeroDiasDeUmaData(ordemServico.getDataEncerramento(), qtdeDias);
if(dataEncerramentoMaisDiasLimite.compareTo(new Date()) == -1){
form.setIdOrdemServico("");
throw new ActionServletException("atencao.quantidade_dias_os_encerrada_maior");
}
}
if (ordemServico.getServicoTipo() != null && ordemServico.getServicoTipo().getId() != null
&& ordemServico.getServicoTipo().getId().equals(ServicoTipo.TIPO_FISCALIZACAO)){
form.setIdOrdemServico("");
throw new ActionServletException("atencao.tipo_servico_associado_os_fiscalizacao");
}
Integer idOsPendente = fachada.pesquisarOSFiscalizacaoPendente(ordemServico.getId());
if(idOsPendente != null){
form.setIdOrdemServico("");
throw new ActionServletException("atencao.existe_os_fiscalizacao_pendente");
}
} else {
form.setIdOrdemServico("");
form.setNomeOrdemServico("Ordem de Servi�o n�o cadastrada");
httpServletRequest.setAttribute("OrdemServioInexistente", true);
throw new ActionServletException("atencao.os.inexistente");
}
}
}
}