View Javadoc

1   /*
2    * Criado em 19/05/2006
3    */
4   package ecar.dao;
5   
6   import java.util.ArrayList;
7   import java.util.Collections;
8   import java.util.Comparator;
9   import java.util.HashSet;
10  import java.util.Iterator;
11  import java.util.List;
12  import java.util.Set;
13  
14  import javax.print.PrintException;
15  import javax.servlet.http.HttpServletRequest;
16  
17  import org.apache.log4j.Logger;
18  import org.hibernate.HibernateException;
19  import org.hibernate.Transaction;
20  
21  import comum.database.Dao;
22  import comum.util.Data;
23  import comum.util.Pagina;
24  
25  import ecar.exception.ECARException;
26  import ecar.login.SegurancaECAR;
27  import ecar.permissao.ValidaPermissao;
28  import ecar.pojo.AcompReferenciaAref;
29  import ecar.pojo.EstAtribTipoAcompEata;
30  import ecar.pojo.EstruturaEtt;
31  import ecar.pojo.OrgaoOrg;
32  import ecar.pojo.SisAtributoSatb;
33  import ecar.pojo.SituacaoSit;
34  import ecar.pojo.TipoAcompFuncAcompPK;
35  import ecar.pojo.TipoAcompFuncAcompTafc;
36  import ecar.pojo.TipoAcompanhamentoTa;
37  import ecar.pojo.TipoFuncAcompTpfa;
38  import ecar.util.Dominios;
39  
40  /**
41   * @author evandro
42   */
43  public class TipoAcompanhamentoDao extends Dao {
44  
45    public TipoAcompanhamentoDao() {
46      super();
47    }
48  
49    /**
50     * Construtor. Chama o Session factory do Hibernate
51     */
52    public TipoAcompanhamentoDao(HttpServletRequest request) {
53      super();
54      this.request = request;
55    }
56  
57    /**
58     * Obtem os tipos de acompanhamentos ativos ordenados pela sequencia de
59     * apresentação
60     * @return List de TipoAcompanhamentoTa
61     * @throws ECARException
62     */
63    public List getTipoAcompanhamentoAtivosBySeqApresentacao() throws ECARException {
64      List retorno = new ArrayList();
65  
66      TipoAcompanhamentoTa ta = new TipoAcompanhamentoTa();
67  
68      ta.setIndAtivoTa("S");
69  
70      retorno = this.pesquisar(ta, new String[] { "seqApresentacaoTa", "asc" });
71  
72      return retorno;
73  
74    }
75  
76    /**
77     * Método que realiza o Set no TipoAcompanhamentoTa por request de acordo com
78     * os dados preenchidos
79     * @param tipoAcomp
80     * @param request
81     * @throws NumberFormatException
82     * @throws ECARException
83     */
84    public void setTipoAcompanhamento(HttpServletRequest request, TipoAcompanhamentoTa tipoAcomp, boolean usarGetParamStr) throws NumberFormatException, ECARException {
85  
86      if (usarGetParamStr) {
87        tipoAcomp.setDescricaoTa(Pagina.getParamStr(request, "descricaoTa").trim());
88        // Caso seja vazio, setar IndMonitoramentoTa como 'N'. Isso é preciso, já
89        // que o check box
90        // da interface gráfica só retorna valor para 'S'.
91        if (!Pagina.getParamStr(request, "indMonitoramentoTa").trim().equals("")) {
92          tipoAcomp.setIndMonitoramentoTa(Pagina.getParamStr(request, "indMonitoramentoTa").trim());
93        }
94        else {
95          tipoAcomp.setIndMonitoramentoTa(Pagina.NAO);
96        }
97        if (!Pagina.getParamStr(request, "indNaoMonitoramentoTa").trim().equals("")) {
98          tipoAcomp.setIndNaoMonitoramentoTa(Pagina.getParamStr(request, "indNaoMonitoramentoTa").trim());
99        }
100       else {
101         tipoAcomp.setIndNaoMonitoramentoTa(Pagina.NAO);
102       }
103       if (!Pagina.getParamStr(request, "indSepararOrgaoTa").trim().equals("")) {
104         tipoAcomp.setIndSepararOrgaoTa(Pagina.getParamStr(request, "indSepararOrgaoTa").trim());
105       }
106       else {
107         tipoAcomp.setIndSepararOrgaoTa(Pagina.NAO);
108       }
109       if (!Pagina.getParamStr(request, "indAtivoTa").trim().equals("")) {
110         tipoAcomp.setIndAtivoTa(Pagina.getParamStr(request, "indAtivoTa").trim());
111       }
112       else {
113         tipoAcomp.setIndAtivoTa(Pagina.NAO);
114       }
115       if (!Pagina.getParamStr(request, "indLiberarAcompTa").trim().equals("")) {
116         tipoAcomp.setIndLiberarAcompTa(Pagina.getParamStr(request, "indLiberarAcompTa").trim());
117       }
118       else {
119         tipoAcomp.setIndLiberarAcompTa(Pagina.NAO);
120       }
121     }
122     else {
123       tipoAcomp.setDescricaoTa(Pagina.getParam(request, "descricaoTa"));
124       tipoAcomp.setIndMonitoramentoTa(Pagina.getParam(request, "indMonitoramentoTa"));
125       tipoAcomp.setIndNaoMonitoramentoTa(Pagina.getParam(request, "indNaoMonitoramentoTa"));
126       tipoAcomp.setIndSepararOrgaoTa(Pagina.getParam(request, "indSepararOrgaoTa"));
127       tipoAcomp.setIndAtivoTa(Pagina.getParam(request, "indAtivoTa"));
128       tipoAcomp.setIndLiberarAcompTa(Pagina.getParam(request, "indLiberarAcompTa"));
129     }
130 
131     if (Pagina.getParam(request, "seqApresentacaoTa") != null)
132       tipoAcomp.setSeqApresentacaoTa(Long.valueOf(Pagina.getParamLong(request, "seqApresentacaoTa")));
133     else
134       tipoAcomp.setSeqApresentacaoTa(null);
135 
136     if (Pagina.getParam(request, "estruturaEtt") != null) {
137       EstruturaEtt menorEtt = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(Pagina.getParamStr(request, "estruturaEtt")));
138       tipoAcomp.setEstruturaEtt(menorEtt);
139     }
140     else
141       tipoAcomp.setEstruturaEtt(null);
142 
143     if (Pagina.getParam(request, "estruturaEttAcomp") != null) {
144       EstruturaEtt estruturaEttAcomp = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(Pagina.getParamStr(request, "estruturaEttAcomp")));
145       tipoAcomp.setEstruturaNivelGeracaoTa(estruturaEttAcomp);
146     }
147     else
148       tipoAcomp.setEstruturaNivelGeracaoTa(null);
149 
150     setSituacaoSits(tipoAcomp, request);
151 
152     setNiveisPlanejamento(tipoAcomp, request);
153   }
154 
155   /**
156    * Método que realiza o Set de SisAtributoSatbs no TipoAcompanhamentoTa por
157    * request de acordo com os dados preenchidos
158    * @param tipoAcomp
159    * @param request
160    * @throws NumberFormatException
161    * @throws ECARException
162    */
163   public void setNiveisPlanejamento(TipoAcompanhamentoTa tipoAcomp, HttpServletRequest request) throws NumberFormatException, ECARException {
164     String[] niveis = request.getParameterValues("nivel");
165     tipoAcomp.setSisAtributoSatbs(new HashSet());
166     List lista = new ArrayList();
167 
168     if (niveis != null) {
169       for (int i = 0; i < niveis.length; i++) {
170         SisAtributoSatb nivel = (SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(niveis[i]));
171         lista.add(nivel);
172       }
173     }
174 
175     tipoAcomp.getSisAtributoSatbs().addAll(lista);
176   }
177 
178   /**
179    * Método que realiza o Set de TipoAcompanhamentoSituacaoTasit request de
180    * acordo com os dados preenchidos
181    * @param tipoAcomp
182    * @param request
183    * @throws NumberFormatException
184    * @throws ECARException
185    */
186   public void setSituacaoSits(TipoAcompanhamentoTa tipoAcomp, HttpServletRequest request) throws NumberFormatException, ECARException {
187     String[] situacoes = request.getParameterValues("situacao");
188     tipoAcomp.setSituacaoSits(new HashSet());
189     List lista = new ArrayList();
190 
191     if (situacoes != null) {
192       for (int i = 0; i < situacoes.length; i++) {
193         SituacaoSit situacaoSit = (SituacaoSit) this.buscar(SituacaoSit.class, Long.valueOf(situacoes[i]));
194         lista.add(situacaoSit);
195       }
196     }
197     tipoAcomp.getSituacaoSits().addAll(lista);
198   }
199 
200   /**
201    * Método que realiza o Set de TipoAcompFuncAcompTafcs no TipoAcompanhamentoTa
202    * por request de acordo com os dados preenchidos, utilizado somente na
203    * Pesquisa
204    * @param tipoAcomp
205    * @param request
206    * @throws NumberFormatException
207    * @throws ECARException
208    */
209   public void setTpFuncAcompanhamento(TipoAcompanhamentoTa tipoAcomp, HttpServletRequest request) throws NumberFormatException, ECARException {
210     TipoFuncAcompDao tipoFuncAcompDao = new TipoFuncAcompDao(request);
211     List lFuncAcomp = tipoFuncAcompDao.getTipoFuncAcompEmitePosicao();
212     List lista = new ArrayList();
213     tipoAcomp.setTipoAcompFuncAcompTafcs(new HashSet());
214 
215     for (Iterator itFuncAcomp = lFuncAcomp.iterator(); itFuncAcomp.hasNext();) {
216 
217       TipoFuncAcompTpfa funcao = (TipoFuncAcompTpfa) itFuncAcomp.next();
218       /*
219        * if ("S".equals(Pagina.getParamStr(request, "indObrigatorio" +
220        * funcao.getCodTpfa())) || "S".equals(Pagina.getParamStr(request,
221        * "indOpcional" + funcao.getCodTpfa()))) {
222        */
223       if ("OBR".equals(Pagina.getParamStr(request, "indObrigatorioOpcional" + funcao.getCodTpfa())) || "OPC".equals(Pagina.getParamStr(request, "indObrigatorioOpcional" + funcao.getCodTpfa()))) {
224 
225         TipoAcompFuncAcompPK chave = new TipoAcompFuncAcompPK();
226         chave.setCodTpfa(funcao.getCodTpfa());
227         TipoAcompFuncAcompTafc tafc = new TipoAcompFuncAcompTafc();
228         tafc.setComp_id(chave);
229 
230         /*
231          * if ("S".equals(Pagina.getParamStr(request, "indObrigatorio" +
232          * funcao.getCodTpfa()))) { tafc.setIndObrigatorio("S"); } else {
233          * tafc.setIndObrigatorio("N"); } if
234          * ("S".equals(Pagina.getParamStr(request, "indOpcional" +
235          * funcao.getCodTpfa()))) { tafc.setIndOpcional("S"); } else {
236          * tafc.setIndOpcional("N"); }
237          */
238 
239         if ("OBR".equals(Pagina.getParamStr(request, "indObrigatorioOpcional" + funcao.getCodTpfa()))) {
240           tafc.setIndObrigatorio("S");
241         }
242         else {
243           tafc.setIndObrigatorio("N");
244         }
245         if ("OPC".equals(Pagina.getParamStr(request, "indObrigatorioOpcional" + funcao.getCodTpfa()))) {
246           tafc.setIndOpcional("S");
247         }
248         else {
249           tafc.setIndOpcional("N");
250         }
251         if (!"".equals(Pagina.getParamStr(request, "indRegistroPosicao" + funcao.getCodTpfa()))) {
252           tafc.setIndRegistroPosicaoTafc(Pagina.getParamStr(request, "indRegistroPosicao" + funcao.getCodTpfa()));
253 
254         }
255         else {
256           tafc.setIndRegistroPosicaoTafc(null);
257         }
258 
259         lista.add(tafc);
260       }
261     }
262 
263     tipoAcomp.getTipoAcompFuncAcompTafcs().addAll(lista);
264   }
265 
266   /**
267    * Retorna a lista de TipoAcompFuncAcompTafcs de acordo com as opções
268    * selecionadas
269    * @param tipoAcomp
270    * @param request
271    * @return
272    * @throws NumberFormatException
273    * @throws ECARException
274    */
275   public List getTpFuncAcompanhamento(TipoAcompanhamentoTa tipoAcomp, HttpServletRequest request) throws NumberFormatException, ECARException {
276     TipoFuncAcompDao tipoFuncAcompDao = new TipoFuncAcompDao(request);
277     List lFuncAcomp = tipoFuncAcompDao.getTipoFuncAcompEmitePosicao();
278     List lista = new ArrayList();
279 
280     for (Iterator itFuncAcomp = lFuncAcomp.iterator(); itFuncAcomp.hasNext();) {
281       TipoFuncAcompTpfa funcao = (TipoFuncAcompTpfa) itFuncAcomp.next();
282       /*
283        * if ("S".equals(Pagina.getParamStr(request, "indObrigatorio" +
284        * funcao.getCodTpfa())) || "S".equals(Pagina.getParamStr(request,
285        * "indOpcional" + funcao.getCodTpfa()))) {
286        */
287 
288       TipoAcompFuncAcompPK chave = new TipoAcompFuncAcompPK();
289       chave.setCodTpfa(funcao.getCodTpfa());
290       TipoAcompFuncAcompTafc tafc = new TipoAcompFuncAcompTafc();
291       tafc.setComp_id(chave);
292 
293       if ("OBR".equals(Pagina.getParamStr(request, "indObrigatorioOpcional" + funcao.getCodTpfa()))) {
294         tafc.setIndObrigatorio("S");
295       }
296       else {
297         tafc.setIndObrigatorio("N");
298       }
299       if ("OPC".equals(Pagina.getParamStr(request, "indObrigatorioOpcional" + funcao.getCodTpfa()))) {
300         tafc.setIndOpcional("S");
301       }
302       else {
303         tafc.setIndOpcional("N");
304       }
305 
306       if ("OBR".equals(Pagina.getParamStr(request, "indObrigatorioOpcional" + funcao.getCodTpfa())) || "OPC".equals(Pagina.getParamStr(request, "indObrigatorioOpcional" + funcao.getCodTpfa()))) {
307 
308         if (!"".equals(Pagina.getParamStr(request, "indRegistroPosicao" + funcao.getCodTpfa()))) {
309           tafc.setIndRegistroPosicaoTafc(Pagina.getParamStr(request, "indRegistroPosicao" + funcao.getCodTpfa()));
310 
311         }
312         else {
313           tafc.setIndRegistroPosicaoTafc(null);
314         }
315       }
316       lista.add(tafc);
317     }
318 
319     return lista;
320   }
321 
322   /**
323    * Lista os niveis de planejamento
324    * @param request
325    * @return List
326    * @throws NumberFormatException
327    * @throws ECARException
328    */
329   public List getNiveisPlanejamento(HttpServletRequest request) throws NumberFormatException, ECARException {
330     String[] niveis = request.getParameterValues("nivel");
331     List lista = new ArrayList();
332 
333     for (int i = 0; i < niveis.length; i++) {
334       SisAtributoSatb nivel = (SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(niveis[i]));
335       lista.add(nivel);
336     }
337 
338     return lista;
339   }
340 
341   /**
342    * Verifica depois exclui
343    * @param tipoAcomp
344    * @throws ECARException
345    */
346   public void excluir(TipoAcompanhamentoTa tipoAcomp) throws ECARException {
347     Transaction tx = null;
348 
349     try {
350       boolean excluir = true;
351 
352       if (contarLong(tipoAcomp.getAcompReferenciaArefs()) > 0) {
353         excluir = false;
354         AcompReferenciaAref ocorrencia = (AcompReferenciaAref) new ArrayList(tipoAcomp.getAcompReferenciaArefs()).get(0);
355         throw new ECARException("tipoAcompanhamento.exclusao.erro.existeAref", null, new String[] { ocorrencia.getNomeAref() });
356       }
357 
358       if (contarLong(tipoAcomp.getEstAtribTipoAcompEatas()) > 0) {
359         excluir = false;
360         EstAtribTipoAcompEata estAtribTipoAcompEata = (EstAtribTipoAcompEata) new ArrayList(tipoAcomp.getEstAtribTipoAcompEatas()).get(0);
361         throw new ECARException("tipoAcompanhamento.exclusao.erro.existeEata", null, new String[] {});
362       }
363 
364       if (excluir) {
365         ArrayList objetos = new ArrayList();
366         super.inicializarLogBean();
367 
368         tx = session.beginTransaction();
369 
370         for (Iterator itEXC = tipoAcomp.getTipoAcompFuncAcompTafcs().iterator(); itEXC.hasNext();) {
371           TipoAcompFuncAcompTafc tafc = (TipoAcompFuncAcompTafc) itEXC.next();
372           session.delete(tafc);
373           objetos.add(tafc);
374         }
375         // Deleta as ocorrencias de Estrutura Atributo Tipo Acompanhamento
376         // relacionadas ao TipoAcompanhamento.
377         // for (Iterator itEXC =
378         // tipoAcomp.getEstAtribTipoAcompEatas().iterator(); itEXC.hasNext();) {
379         // EstAtribTipoAcompEata eata = (EstAtribTipoAcompEata) itEXC.next();
380         // session.delete(eata);
381         // objetos.add(eata);
382         // }
383 
384         session.delete(tipoAcomp);
385         objetos.add(tipoAcomp);
386 
387         tx.commit();
388 
389         if (super.logBean != null) {
390           super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
391           super.logBean.setOperacao("EXC");
392 
393           for (Iterator itObj = objetos.iterator(); itObj.hasNext();) {
394             super.logBean.setObj(itObj.next());
395             super.loggerAuditoria.info(logBean.toString());
396           }
397         }
398       }
399     } catch (HibernateException he) {
400       if (tx != null)
401         try {
402           tx.rollback();
403         } catch (HibernateException r) {
404           this.logger.error(r);
405           throw new ECARException("erro.hibernateException");
406         }
407       this.logger.error(he);
408       throw new ECARException("erro.hibernateException");
409     }
410   }
411 
412   /**
413    * Obtem os tipos de função de acompanhamento de um tipo de acompanhamento
414    * @param ta TipoAcompanhamentoTa ta
415    * @return List de TipoFuncAcompTpfa
416    * @throws ECARException
417    */
418   public List getTipoFuncaoAcompanhamento(TipoAcompanhamentoTa ta) throws ECARException {
419     List retorno = new ArrayList();
420 
421     if (ta.getTipoAcompFuncAcompTafcs() != null) {
422 
423       for (Iterator it = ta.getTipoAcompFuncAcompTafcs().iterator(); it.hasNext();) {
424         TipoAcompFuncAcompTafc tafc = (TipoAcompFuncAcompTafc) it.next();
425         retorno.add(tafc.getTipoFuncAcompTpfa());
426       }
427     }
428 
429     return retorno;
430   }
431 
432   /**
433    * Verifica depois salva
434    * @param tipoAcomp
435    * @param listaTafc
436    * @throws ECARException
437    */
438   public void salvar(TipoAcompanhamentoTa tipoAcomp, List listaTafc) throws ECARException {
439     Transaction tx = null;
440     try {
441       ArrayList objetos = new ArrayList();
442       super.inicializarLogBean();
443 
444       tx = session.beginTransaction();
445 
446       session.save(tipoAcomp);
447       objetos.add(tipoAcomp);
448 
449       for (Iterator it = listaTafc.iterator(); it.hasNext();) {
450         TipoAcompFuncAcompTafc tafc = (TipoAcompFuncAcompTafc) it.next();
451         tafc.getComp_id().setCodTa(tipoAcomp.getCodTa());
452         session.save(tafc);
453         objetos.add(tafc);
454       }
455 
456       tx.commit();
457 
458       if (super.logBean != null) {
459         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
460         super.logBean.setOperacao("INC");
461 
462         for (Iterator itObj = objetos.iterator(); itObj.hasNext();) {
463           super.logBean.setObj(itObj.next());
464           super.loggerAuditoria.info(logBean.toString());
465         }
466       }
467     } catch (HibernateException he) {
468       if (tx != null)
469         try {
470           tx.rollback();
471         } catch (HibernateException r) {
472           this.logger.error(r);
473           throw new ECARException("erro.hibernateException");
474         }
475       this.logger.error(he);
476       throw new ECARException("erro.hibernateException");
477     }
478   }
479 
480   /**
481    * Verifica depois altera
482    * @param tipoAcomp
483    * @param listaTafc
484    * @throws ECARException
485    */
486   public void alterar(TipoAcompanhamentoTa tipoAcomp, List listaTafc) throws ECARException {
487     Transaction tx = null;
488     try {
489       ArrayList objetos = new ArrayList();
490       super.inicializarLogBean();
491 
492       tx = session.beginTransaction();
493 
494       session.update(tipoAcomp);
495       objetos.add(tipoAcomp);
496 
497       for (Iterator itEXC = tipoAcomp.getTipoAcompFuncAcompTafcs().iterator(); itEXC.hasNext();) {
498         TipoAcompFuncAcompTafc tafc = (TipoAcompFuncAcompTafc) itEXC.next();
499         session.delete(tafc);
500         objetos.add(tafc);
501       }
502 
503       for (Iterator itTafc = listaTafc.iterator(); itTafc.hasNext();) {
504         TipoAcompFuncAcompTafc tafc = (TipoAcompFuncAcompTafc) itTafc.next();
505         tafc.getComp_id().setCodTa(tipoAcomp.getCodTa());
506         session.save(tafc);
507         objetos.add(tafc);
508       }
509 
510       tx.commit();
511 
512       if (super.logBean != null) {
513         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
514         super.logBean.setOperacao("INC_ALT_EXC");
515 
516         for (Iterator itObj = objetos.iterator(); itObj.hasNext();) {
517           super.logBean.setObj(itObj.next());
518           super.loggerAuditoria.info(logBean.toString());
519         }
520       }
521     } catch (HibernateException he) {
522       if (tx != null)
523         try {
524           tx.rollback();
525         } catch (HibernateException r) {
526           this.logger.error(r);
527           throw new ECARException("erro.hibernateException");
528         }
529       this.logger.error(he);
530       throw new ECARException("erro.hibernateException");
531     }
532   }
533 
534   /**
535    * Pesquisa ...
536    * @param tipoAcomp
537    * @return lista
538    * @throws ECARException
539    */
540   public List pesquisar(TipoAcompanhamentoTa tipoAcomp) throws ECARException {
541     Set setResultadoParcial = new HashSet();
542     Set setResultadoFinal = new HashSet();
543     Set setResultadoSituacao = new HashSet();
544 
545     /* REALIZA A PESQUISA PELO OBJETO TipoAcompanhamentoTa */
546     List pesquisa = super.pesquisar(tipoAcomp, null);
547 
548     /*
549      * -- por Thaise Correção na tela de alteração de Configuração Sistema >
550      * Config. Estrutura > Tipo Acompanhamento Está trazendo o tipoAcmp como
551      * null
552      */
553     /* VERIFICA SE O TipoAcompanhamentoTa POSSUI UM DOS niveis SELECIONADOS */
554     if (tipoAcomp != null && tipoAcomp.getSisAtributoSatbs() != null && tipoAcomp.getSisAtributoSatbs().size() > 0) {
555 
556       for (Iterator itPes = pesquisa.iterator(); itPes.hasNext();) {
557         TipoAcompanhamentoTa tipoAcompPes = (TipoAcompanhamentoTa) itPes.next();
558 
559         for (Iterator itSisAt = tipoAcomp.getSisAtributoSatbs().iterator(); itSisAt.hasNext();) {
560           SisAtributoSatb sisAt = (SisAtributoSatb) itSisAt.next();
561           if (tipoAcompPes.getSisAtributoSatbs().contains(sisAt)) {
562             setResultadoParcial.add(tipoAcompPes);
563           }
564         }
565       }
566     }
567     else {
568       /* Não selecionou nenhum nivel para pesquisa adicionar todo o resultado */
569       setResultadoParcial.addAll(pesquisa);
570     }
571 
572     /* VERIFICA SE O TipoAcompanhamentoTa POSSUI ALGUMA SITUAÇÃO SELECIONADA */
573     if (tipoAcomp.getSituacaoSits() != null && tipoAcomp.getSituacaoSits().size() > 0) {
574 
575       for (Iterator itPes = setResultadoParcial.iterator(); itPes.hasNext();) {
576         TipoAcompanhamentoTa tipoAcompPes = (TipoAcompanhamentoTa) itPes.next();
577 
578         for (Iterator itSit = tipoAcomp.getSituacaoSits().iterator(); itSit.hasNext();) {
579           SituacaoSit situacaoSit = (SituacaoSit) itSit.next();
580           if (tipoAcompPes.getSituacaoSits().contains(situacaoSit)) {
581             setResultadoSituacao.add(tipoAcompPes);
582           }
583         }
584       }
585       setResultadoParcial = setResultadoSituacao;
586     }
587 
588     /* VERIFICA SE O TipoAcompanhamentoTa POSSUI A função SELECIONADA */
589     if (tipoAcomp.getTipoAcompFuncAcompTafcs() != null && tipoAcomp.getTipoAcompFuncAcompTafcs().size() > 0) {
590 
591       for (Iterator itRes = setResultadoParcial.iterator(); itRes.hasNext();) {
592         TipoAcompanhamentoTa tipoAcompRes = (TipoAcompanhamentoTa) itRes.next();
593         // verificar se tem função
594         if (tipoAcompRes.getTipoAcompFuncAcompTafcs().size() > 0) {
595 
596           for (Iterator itTaFuncRes = tipoAcompRes.getTipoAcompFuncAcompTafcs().iterator(); itTaFuncRes.hasNext();) {
597             TipoAcompFuncAcompTafc taFuncaoRes = (TipoAcompFuncAcompTafc) itTaFuncRes.next();
598 
599             for (Iterator itTaFuncPesq = tipoAcomp.getTipoAcompFuncAcompTafcs().iterator(); itTaFuncPesq.hasNext();) {
600               TipoAcompFuncAcompTafc taFuncaoPes = (TipoAcompFuncAcompTafc) itTaFuncPesq.next();
601 
602               // batendo pesquisa com resultado, adiciona em resultado final
603               if (taFuncaoRes.getTipoFuncAcompTpfa().getCodTpfa().equals(taFuncaoPes.getComp_id().getCodTpfa()) && taFuncaoRes.getIndObrigatorio().equals(taFuncaoPes.getIndObrigatorio()) && taFuncaoRes.getIndOpcional().equals(taFuncaoPes.getIndOpcional())) {
604                 setResultadoFinal.add(tipoAcompRes);
605               }
606             }
607           }
608         }
609       }
610     }
611     else {
612       setResultadoFinal.addAll(setResultadoParcial);
613     }
614 
615     List resultado = new ArrayList();
616     resultado.addAll(setResultadoFinal);
617 
618     /* Ordenar por codTa */
619     Collections.sort(resultado, new Comparator() {
620       public int compare(Object o1, Object o2) {
621         return ((TipoAcompanhamentoTa) o1).getCodTa().compareTo(((TipoAcompanhamentoTa) o2).getCodTa());
622       }
623     });
624 
625     return resultado;
626   }
627 
628   /**
629    * Obtem os tipos de acompanhamentos ativos ordenados pela sequencia de
630    * apresentação que possuem acompanhamento (Aref)
631    * @return List de TipoAcompanhamentoTa
632    * @throws ECARException
633    * @throws ECARException
634    */
635   public List getTipoAcompanhamentoAtivosComAcompanhamentoBySeqApresentacao() throws ECARException {
636     try {
637       return this.getSession().
638       createQuery("select distinct ta from TipoAcompanhamentoTa ta " + "join ta.acompReferenciaArefs " + "where ta.indAtivoTa = :ativo " + "order by ta.seqApresentacaoTa")
639       .setString("ativo", Dominios.ATIVO)
640       .list();
641     
642     }catch (Exception e) {
643     	  this.logger.error(e);
644           throw new ECARException(e);  
645     }
646   }
647 
648   /**
649    * @author Robson
650    * @return List
651    * @throws ECARException
652    * @since 22/11/2007
653    */
654   public List getTipoAcompanhamentoAtivosByDescricao() throws ECARException {
655 
656     TipoAcompanhamentoTa ta = new TipoAcompanhamentoTa();
657 
658     ta.setIndAtivoTa(Dominios.ATIVO);
659 
660     return this.pesquisar(ta, new String[] { "descricaoTa", "asc" });
661   }
662 
663   /**
664    * @author Robson
665    * @return List<TipoAcompanhamentoTa>
666    * @throws ECARException
667    * @since 27/11/2007
668    */
669   public List getTipoAcompanhamentoComAcesso(SegurancaECAR seguranca) throws ECARException {
670     try {
671       return this.getSession()
672       .createQuery("select distinct ta " + "from TipoAcompanhamentoTa ta " + "join ta.tipoAcompGrpAcessos taa " + "where taa.acessoInclusao = :inclusao " + "and ta.indAtivoTa = :ativo " + "and taa.sisAtributoSatb in (:gruposUsuario) " + "order by ta.descricaoTa")
673       .setString("inclusao", Dominios.COM_ACESSO_INCLUSAO)
674       .setString("ativo", Dominios.ATIVO)
675       .setParameterList("gruposUsuario", seguranca.getGruposAcesso())
676       .list();
677       
678     } catch (HibernateException e) {
679       this.logger.error(e);
680       throw new ECARException(e);
681     }
682   }
683 
684   public List getOrgaosAcessoUsuario(SegurancaECAR seguranca) throws ECARException {
685     ValidaPermissao validaPermissao = new ValidaPermissao();
686 
687     List secretarias = new ArrayList();
688 
689     if (validaPermissao.permissaoAcessoSecretariasUsuario(seguranca.getGruposAcesso(), Dominios.SEPARAR_ORGAO_TODOS))
690       secretarias.addAll(new OrgaoDao(null).listar(OrgaoOrg.class, new String[] { "siglaOrg", "asc" }));
691 
692     else if (validaPermissao.permissaoAcessoSecretariasUsuario(seguranca.getGruposAcesso(), Dominios.SEPARAR_ORGAO_USUARIO)) {
693       secretarias.addAll(seguranca.getUsuario().getOrgaoOrgs());
694     }
695     else if (validaPermissao.permissaoAcessoSecretariasUsuario(seguranca.getGruposAcesso(), Dominios.SEPARAR_ORGAO_RESPONSABILIDADE)) {
696 
697       List<Long> listaCods = new ArrayList<Long>();
698       for (Iterator it = seguranca.getGruposAcesso().iterator(); it.hasNext();) {
699         SisAtributoSatb satb = (SisAtributoSatb) it.next();
700         listaCods.add(satb.getCodSatb());
701       }
702       
703       return this.getSession()
704       .createQuery("select orgao " + "from OrgaoOrg orgao " + "join orgao.itemEstruturaIettsByCodOrgaoResponsavel1Iett iett " + "join iett.itemEstrutUsuarioIettusesByCodIett iettus " + "where iettus.usuarioUsu.codUsu in (:lista) " + "and orgao.indAtivoOrg = :ativoOrg " + "and iett.indAtivoIett = :ativoIett " + "and iettus.indLeituraParecerIettus = :leituraIettus " + "order by orgao.siglaOrg ")
705       .setParameterList("lista", listaCods)
706       .setString("ativoOrg", Dominios.ATIVO)
707       .setString("ativoIett", Dominios.ATIVO)
708       .setString("indLeituraParecerIettus", Dominios.COM_ACESSO_LEITURA)
709       .list();
710     }
711 
712     return secretarias;
713   }
714 
715   /**
716    * Verifica se existe alguma aba configurada para o tipo de acompanhamento
717    * passado como parametro .<br>
718    * @author N/C
719    * @since N/C
720    * @version N/C
721    * @param TipoAcompanhamentoTa ta
722    * @return boolean existe
723    * @throws ECARException
724    */
725   public boolean existeAbaConfiguradaTipoAcompanhamento(TipoAcompanhamentoTa ta, Set gruposUsuario) throws ECARException {
726 
727     boolean existe = true;
728     List listAbasComAcesso = null;
729 
730     AbaDao abaDao = new AbaDao(this.request);
731 
732     // vai buscar as abas com acesso
733     if (ta != null && gruposUsuario != null)
734       listAbasComAcesso = abaDao.getListaAbasComAcesso(ta, gruposUsuario);
735 
736     // resumo hoje é fixo, mas quando estiver configuravel deve ser alterado o
737     // valor
738     if (listAbasComAcesso != null && listAbasComAcesso.size() < 1)
739       existe = false;
740 
741     return existe;
742   }
743 
744 }