Package br.gov.serpro.ouvidoria.struts.action.andamento

Source Code of br.gov.serpro.ouvidoria.struts.action.andamento.ConsultarAndamentoSolucaoAction

/*
* Sistema de Ouvidoria: um canal através do qual os usuários
* podem encaminhar suas reclamações, elogios e sugestões.
*
* Copyright (C) 2011 SERPRO
*
* Este programa é software livre; você pode redistribuí-lo e/ou
* modificá-lo sob os termos da Licença Pública Geral GNU, conforme
* publicada pela Free Software Foundation; tanto a versão 2 da
* Licença como (a seu critério) qualquer versão mais nova.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM
* QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
* PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
* detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU,
* sob o título "LICENCA.txt", junto com esse programa. Se não,
* acesse o Portal do Software Público Brasileiro no endereço
* http://www.softwarepublico.gov.br/ ou escreva para a Fundação do
* Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
* MA 02111-1301, USA.
*
* Contatos através do seguinte endereço internet:
* http://www.serpro.gov.br/sistemaouvidoria/
*/
package br.gov.serpro.ouvidoria.struts.action.andamento;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

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;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
import org.hibernate.Query;
import org.hibernate.Session;

import br.gov.serpro.ouvidoria.controller.AcionamentoCtrl;
import br.gov.serpro.ouvidoria.controller.gerencial.administracao.FuncionarioCtrl;
import br.gov.serpro.ouvidoria.dao.DaoException;
import br.gov.serpro.ouvidoria.dao.hibernate.HibernateDao;
import br.gov.serpro.ouvidoria.model.Acionamento;
import br.gov.serpro.ouvidoria.model.ConsultaAndamento;
import br.gov.serpro.ouvidoria.model.Funcionario;
import br.gov.serpro.ouvidoria.model.Orgao;
import br.gov.serpro.ouvidoria.struts.ActionSupport;
import br.gov.serpro.ouvidoria.util.Constants;
import br.gov.serpro.ouvidoria.util.HibernateSessionFactory;
import br.gov.serpro.ouvidoria.util.Utilitario;

/**
* Objetivo: Ouvidor Geral e Ouvidor Assistente solicita consultar o andamento de uma
* mensagem. Para isso ele informa um ou mais dos itens abaixo:
* <ul>
* <li>O tipo da mensagem</li>
* <li>Tipo do assunto</li>
* <li>O número do protocolo</li>
* <li>Palavras chaves para busca</li>
* <li>Período de cadastramento</li>
* </ul>
*
* @author SERPRO
* @version $Revision: 1.1.2.4 $, $Date: 2011/11/11 21:09:55 $
* @version 0.1, 2004/12/15
*/
public class ConsultarAndamentoSolucaoAction extends ActionSupport {
   
 
    private List filtrarPalavraChave(List lstAcionamento,String palavraChave)
    {
      Iterator iterator = lstAcionamento.iterator();
      ArrayList list = new ArrayList();
     
         while (iterator.hasNext())
         {
           ConsultaAndamento consultaAndamento = (ConsultaAndamento)iterator.next();
          
             if (((consultaAndamento.getTitulo()!=null) && (consultaAndamento.getTitulo().trim()!= "")) ||
               ((consultaAndamento.getDescricao()!=null) && (consultaAndamento.getDescricao().trim()!= "")))
             {
              String tituloDec = new String(Utilitario.decrypt(Constants.DES_KEY, consultaAndamento.getTitulo()));
              String textoDec  = new String(Utilitario.decrypt(Constants.DES_KEY, consultaAndamento.getDescricao()));             

              String titulo    = new String(tituloDec==null?"":tituloDec);
                String texto     = new String(textoDec==null?"":textoDec);                
                String chave     = titulo + texto;
               
                  if  (chave.toLowerCase().indexOf(palavraChave.toLowerCase())==-1)
                   list.add(consultaAndamento);
             }
             else
             list.add(consultaAndamento);  
         }
     
      lstAcionamento.removeAll(list);
        
      return lstAcionamento;
    }
 
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
       
        ActionMessages errors = new ActionMessages();
       
        try {
            //obter do Form os dados para pesquisa
            DynaActionForm _form = (DynaActionForm) form;
           
            String periodoI = _form.getString("txt_periodo_i");
            String periodoF = _form.getString("txt_periodo_f");
           
            String assuntoId = _form.getString("sel_assunto");
            String tipoMensagemId = _form.getString("sel_tipo_mensagem");
            String estadoAcionamento = _form.getString("sel_situacao_mensagem");
           
            String sProtocolo = _form.getString("txt_protocolo");
            String palavraChave = Utilitario.trataPlic(_form.getString("txt_palavra_chave"));
           
            //  Recupera o Funcionário logado
            Long funcionarioId = (Long) request.getSession().getAttribute(Constants.PA_FUNCIONARIO);
            FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(getDaoFactory());
            Funcionario func = (Funcionario) funcionarioCtrl.get(funcionarioId);
           
            // Recupera o órgão do funcionário
            Orgao orgao = getOrgao(request);
           
            //obter os assuntos sob a responsabilidade do funcionário
            Collection assuntosFuncionario = null;
            if ( func.getNivelAtuacao() == Funcionario.NA_SUB_ORGAO ) {
                assuntosFuncionario = func.getListaAssuntosComAtuacao("Ambos");
            } else if ( func.getNivelAtuacao() == Funcionario.NA_ORGAO ) {
                assuntosFuncionario = orgao.getListaTodosAssuntos();
            }
           
            /**
             * ESTE MÉTODO AINDA NÃO ESTÁ FUNCIONANDO 100%. INVESTIGAR PROBLEMA:
             *  Caused by: line 1:41: expecting EQ, found '.'
             * */
           
            //montar consulta HQL
      StringBuffer hql = new StringBuffer();
      hql.append("Select new br.gov.serpro.ouvidoria.model.ConsultaAndamento(a.id,");
      hql.append(" a.dataPrevistaResolucaoExterna, a.estadoAcionamento.descricao,");
      hql.append(" ass.descricao, a.numeroProtocolo,");
      hql.append(" a.dataPrevistaResolucaoInterna, a.funcionario.nome, a.estadoAcionamento.id ");
     
      // Caso o filtro tenha sido preenchido
      if (!palavraChave.trim().equals("")) {
        hql.append(", a.respostaAcionamento.titulo, a.respostaAcionamento.texto ) ");
          } else {
            hql.append(" )");
          }
                   
            hql.append(" from Acionamento as a ");
            hql.append(" inner join a.funcionario as f ");
            hql.append(" inner join a.mensagem as m ");
            hql.append(" inner join m.assunto as ass ");
            hql.append(" inner join a.estadoAcionamento as ea ");
           
            if (!palavraChave.trim().equals(""))
                hql.append(" left outer join a.respostaAcionamento as resp ");
                       
            hql.append(" where ass in (:assuntos) ");
           
            //assunto
            if ( assuntoId != null && !"".equals(assuntoId) && !"0".equals(assuntoId) ) {
                hql.append(" and ass.id = :assId ");
            }
           
            //tipo de mensagem
            if ( tipoMensagemId != null && !"".equals(tipoMensagemId) && !"0".equals(tipoMensagemId) ) {
                hql.append(" and m.tipoMensagem.id = :tipoMsgId ");
            }
           
            //período (data inicial e data final)
            if ( periodoI != null && !"".equals(periodoI) ) {
                hql.append(" and a.dataAcionamento >= :dataIni ");
            }
           
            if ( periodoF != null && !"".equals(periodoF) ) {
                hql.append(" and a.dataAcionamento <= :dataFim ");
            }
           
            //protocolo
            if ( sProtocolo != null && !"".equals(sProtocolo) && !"0".equals(sProtocolo) ) {
                hql.append(" and a.numeroProtocolo = :numProtoc ");
            }
           
            //estado da mensagem
            if ( !estadoAcionamento.equalsIgnoreCase("0") ) {
                hql.append(" and a.estadoAcionamento.id = :estadoId ");
            }                  
           
            // obter o objeto DAO
            HibernateDao acionamentoDao = (HibernateDao) getDaoFactory().create( Acionamento.class );
           
            // montar a query Hibernate
            Session session = HibernateSessionFactory.getFactory().getSession();
            Query query = session.createQuery( hql.toString() );
            SimpleDateFormat dateFormatter = new SimpleDateFormat( "dd/MM/yyyy HH:mm:ss" );
           
            //configurar os parâmetros da query
            query.setParameterList( "assuntos", assuntosFuncionario );
           
            if ( assuntoId != null && !"".equals(assuntoId) && !"0".equals(assuntoId) ) {
                //assunto
                query.setInteger( "assId", Integer.parseInt( assuntoId ) );
            }
            if ( tipoMensagemId != null && !"".equals(tipoMensagemId) && !"0".equals(tipoMensagemId) ) {
                //tipo de mensagem
                query.setInteger( "tipoMsgId", Integer.parseInt( tipoMensagemId ) );
            }
           
            if ( periodoI != null && !"".equals(periodoI) ) {
                //data inicial
                periodoI = periodoI +" 00:00:00";
              Date dataInit = dateFormatter.parse( periodoI );
                query.setTimestamp( "dataIni", dataInit );
            }
            if ( periodoF != null && !"".equals(periodoF) ) {
                //na data fim acrescentar a última hora do dia
               
                Date dataFim = dateFormatter.parse( periodoF+" 23:59:59");
               
                query.setTimestamp( "dataFim", dataFim);
            }
            if ( sProtocolo != null && !"".equals(sProtocolo) && !"0".equals(sProtocolo) ) {
                //protocolo
                query.setInteger( "numProtoc", Integer.parseInt( sProtocolo ) );
            }

            if ( !estadoAcionamento.equalsIgnoreCase("0") ) {
                //estado da mensagem
                query.setInteger( "estadoId", Integer.parseInt( estadoAcionamento ) );
            }
           
            // obter os acionamentos para atualizar seus estados
            List results = acionamentoDao.query( query );
           
              if (!palavraChave.trim().equals(""))
                results = filtrarPalavraChave(results, palavraChave);
            
            // atualizar os estados dos acionamentos
            AcionamentoCtrl acionCtrl = new AcionamentoCtrl( getDaoFactory() );
            boolean result = acionCtrl.atualizaEstadoAcionamentos(results);
           
            //verificar se houve erros na atualização de estado
            if (result == false) {
                errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
                        "error.acionamento.atualizaestado"));
            }
                                   
            //Remontar a query Hibernate
            session = HibernateSessionFactory.getFactory().getSession();
            query = session.createQuery( hql.toString() );
            dateFormatter = new SimpleDateFormat( "dd/MM/yyyy HH:mm:ss" );
           
            //configurar os parâmetros da query
            query.setParameterList( "assuntos", assuntosFuncionario );
           
            if ( assuntoId != null && !"".equals(assuntoId) && !"0".equals(assuntoId) ) {
                //assunto
                query.setInteger( "assId", Integer.parseInt( assuntoId ) );
            }
            if ( tipoMensagemId != null && !"".equals(tipoMensagemId) && !"0".equals(tipoMensagemId) ) {
                //tipo de mensagem
                query.setInteger( "tipoMsgId", Integer.parseInt( tipoMensagemId ) );
            }
           
            if ( periodoI != null && !"".equals(periodoI) ) {
                //data inicial
                periodoI = periodoI +" 00:00:00";
              Date dataInit = dateFormatter.parse( periodoI );
                query.setTimestamp( "dataIni", dataInit );
            }
            if ( periodoF != null && !"".equals(periodoF) ) {
                //na data fim acrescentar a última hora do dia
               
                Date dataFim = dateFormatter.parse( periodoF+" 23:59:59");
               
                query.setTimestamp( "dataFim", dataFim);
            }
            if ( sProtocolo != null && !"".equals(sProtocolo) && !"0".equals(sProtocolo) ) {
                //protocolo
                query.setInteger( "numProtoc", Integer.parseInt( sProtocolo ) );
            }

            if ( !estadoAcionamento.equalsIgnoreCase("0") ) {
                //estado da mensagem
                query.setInteger( "estadoId", Integer.parseInt( estadoAcionamento ) );
            }
           
            // obter o objeto DAO
            acionamentoDao = (HibernateDao) getDaoFactory().create( Acionamento.class );
           
            // obter os acionamentos da consulta após a atualização dos estados do acionamento
            results = acionamentoDao.query( query );
           
            if (!palavraChave.trim().equals(""))
              results = filtrarPalavraChave(results, palavraChave);
           
            request.setAttribute("CAS_RESULTS", results);
        } catch (DaoException e) {
            if (Constants.DEBUG) {
                e.printStackTrace();
            }
           
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.solucao.excecao"));
        }
       
        geraHistorico(request);
       
        if (errors.isEmpty()) {
            return mapping.findForward("success");
        }
       
        saveErrors(request, errors);
       
        return mapping.findForward("failure");
    }
   
}
TOP

Related Classes of br.gov.serpro.ouvidoria.struts.action.andamento.ConsultarAndamentoSolucaoAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.