View Javadoc

1   /*
2    * Criado em 21/12/2004
3    */
4   package ecar.dao;
5   
6   import java.math.BigDecimal;
7   import java.util.ArrayList;
8   import java.util.Iterator;
9   import java.util.List;
10  import java.util.Set;
11  
12  import javax.servlet.http.HttpServletRequest;
13  
14  import org.hibernate.HibernateException;
15  import org.hibernate.Query;
16  import org.hibernate.Transaction;
17  
18  import comum.database.Dao;
19  import comum.util.Data;
20  import comum.util.Pagina;
21  import comum.util.Util;
22  
23  import ecar.exception.ECARException;
24  import ecar.pojo.EfIettFonteTotEfieft;
25  import ecar.pojo.EfItemEstContaEfiec;
26  import ecar.pojo.EfItemEstPrevisaoEfiep;
27  import ecar.pojo.EfItemEstPrevisaoEfiepPK;
28  import ecar.pojo.EspecieEsp;
29  import ecar.pojo.ExercicioExe;
30  import ecar.pojo.FonteFon;
31  import ecar.pojo.FonteRecursoFonr;
32  import ecar.pojo.ItemEstruturaIett;
33  import ecar.pojo.ItemEstruturaIettPPA;
34  import ecar.pojo.ItemEstruturaSisAtributoIettSatb;
35  import ecar.pojo.RecursoRec;
36  import ecar.util.Dominios;
37  
38  /**
39   * @author felipev
40   */
41  public class ItemEstruturaPrevisaoDao extends Dao {
42  
43    public ItemEstruturaPrevisaoDao(HttpServletRequest request) {
44      super();
45      this.request = request;
46    }
47  
48    /**
49     * Retorna um objeto EfItemEstPrevisaoEfiep a partir do código do Item da
50     * Estrutura, do código do exercício e do código do Recurso e do Código da
51     * Fonte de Recurso
52     * @param codItemEstrutura
53     * @param codBeneficiario
54     * @return
55     * @throws ECARException
56     */
57    public EfItemEstPrevisaoEfiep buscar(Long codItemEstrutura, Long codFonteRecurso, Long codRecurso, Long codExercicio) throws ECARException {
58  
59      /*
60       * EfItemEstPrevisaoEfiep efItemEstPrevisaoEfiep = null;
61       * EfItemEstPrevisaoEfiepPK comp_id = new EfItemEstPrevisaoEfiepPK();
62       * comp_id.setCodFonr(codFonteRecurso); comp_id.setCodExe(codExercicio);
63       * comp_id.setCodIett(codItemEstrutura); comp_id.setCodRec(codRecurso); try
64       * { efItemEstPrevisaoEfiep =
65       * (EfItemEstPrevisaoEfiep)super.buscar(EfItemEstPrevisaoEfiep.class,
66       * comp_id); }catch (org.hibernate.ObjectNotFoundException e) {
67       * efItemEstPrevisaoEfiep = new EfItemEstPrevisaoEfiep(); }
68       */
69  
70      try {
71        StringBuilder select = new StringBuilder();
72        select.append("select efiep from EfItemEstPrevisaoEfiep efiep");
73        select.append(" where efiep.itemEstruturaIett.codIett = :item and efiep.itemEstruturaIett.indAtivoIett = 'S'");
74        select.append(" and efiep.exercicioExe.codExe = :exe");
75        select.append(" and efiep.fonteRecursoFonr.codFonr = :fonr");
76        select.append(" and efiep.recursoRec.codRec = :rec");
77  
78        Query q = this.session.createQuery(select.toString());
79  
80        q.setLong("item", codItemEstrutura.longValue());
81        q.setLong("exe", codExercicio.longValue());
82        q.setLong("fonr", codFonteRecurso.longValue());
83        q.setLong("rec", codRecurso.longValue());
84  
85        q.setMaxResults(1);
86  
87        Object o = q.uniqueResult();
88  
89        return (o != null) ? (EfItemEstPrevisaoEfiep) o : new EfItemEstPrevisaoEfiep();
90      } catch (HibernateException e) {
91        this.logger.error(e);
92        throw new ECARException(e);
93      }
94    }
95  
96    /**
97     * Retorna um objeto EfItemEstPrevisaoEfiep a partir do código do Item da
98     * Estrutura, do código do exercício e do Código da Fonte de Recurso
99     * @param codItemEstrutura
100    * @param codBeneficiario
101    * @return
102    * @throws ECARException
103    * @throws HibernateException
104    */
105   public EfItemEstPrevisaoEfiep buscar(Long codItemEstrutura, Long codFonteRecurso, Long codExercicio) throws ECARException, HibernateException {
106     Query query = session.createQuery("from EfItemEstPrevisaoEfiep efiep " + "where efiep.exercicioExe.codExe = :codExe " + "and efiep.itemEstruturaIett.codIett = :codIett " + "and efiep.itemEstruturaIett.indAtivoIett = 'S' " + "and efiep.fonteRecursoFonr.codFonr = :codFonr " + "order by efiep.fonteRecursoFonr.nomeFonr, efiep.recursoRec.nomeRec");
107 
108     query.setLong("codExe", codExercicio.longValue());
109     query.setLong("codIett", codItemEstrutura.longValue());
110     query.setLong("codFonr", codFonteRecurso.longValue());
111 
112     List lista = query.list();
113     if (lista != null && lista.size() > 0) {
114       return (EfItemEstPrevisaoEfiep) lista.iterator().next();
115     }
116     else {
117       return null;
118     }
119   }
120 
121   /**
122    * Retorna soma de valor aprovado do item - com regra de negocio -
123    * integralização de capital e unidade de investimento
124    * @param codItem
125    * @param codExercicio
126    * @return
127    * @throws ECARException
128    * @throws HibernateException
129    */
130   public BigDecimal previsaoItemAcao(Long codItem, Long codExercicio) throws ECARException, HibernateException {
131 
132     final long INTEGRALIZACAO_CAPITAL_SIM = 53L;
133 
134     ArrayList<Long> integralizacaoCapital = new ArrayList<Long>();
135 
136     ItemEstruturaIettPPA itemAcao = (ItemEstruturaIettPPA) this.buscar(ItemEstruturaIettPPA.class, codItem);
137 
138     Set sisAtributoList = itemAcao.getItemEstruturaSisAtributoIettSatbs();
139     for (Iterator iterator = sisAtributoList.iterator(); iterator.hasNext();) {
140       ItemEstruturaSisAtributoIettSatb sis = (ItemEstruturaSisAtributoIettSatb) iterator.next();
141       if (sis.getSisAtributoSatb().getCodSatb().longValue() == INTEGRALIZACAO_CAPITAL_SIM) {
142         integralizacaoCapital.add(itemAcao.getCodIett());
143       }
144     }
145 
146     StringBuilder queryStr = new StringBuilder();
147 
148     queryStr.append("select sum(efiep.valorAprovadoEfiep) from EfItemEstPrevisaoEfiep efiep " + "where efiep.exercicioExe.codExe = :codExe " + "and efiep.itemEstruturaIett.codIett = :codIett " + "and efiep.itemEstruturaIett.indAtivoIett = 'S' ");
149 
150     if (!integralizacaoCapital.isEmpty()) {
151       // queryStr.append("and efiep.itemEstruturaIett.unidadeOrcamentariaUO.indTipoOrcamentoUo != :unidadeOrcTipoOrcamento ");
152       queryStr.append("and efiep.itemEstruturaIett.codIett not in (:listaIntegralizacao) ");
153     }
154 
155     Query query = session.createQuery(queryStr.toString());
156 
157     query.setLong("codExe", codExercicio.longValue());
158     query.setLong("codIett", codItem.longValue());
159 
160     if (!integralizacaoCapital.isEmpty()) {
161       query.setParameterList("listaIntegralizacao", integralizacaoCapital);
162       // query.setString("unidadeOrcTipoOrcamento" ,
163       // Dominios.TIPO_ORC_INVESTIMENTO );
164     }
165 
166     query.setMaxResults(1);
167 
168     return (BigDecimal) query.uniqueResult();
169 
170   }
171 
172   /**
173    * Retorna soma de valor aprovado do item - com regra de negocio -
174    * integralização de capital e unidade de investimento
175    * @param codItem
176    * @param codExercicio
177    * @return
178    * @throws ECARException
179    * @throws HibernateException
180    */
181   public BigDecimal previsaoItem(Long codItem, Long codExercicio) throws ECARException, HibernateException {
182 
183     final long INTEGRALIZACAO_CAPITAL_SIM = 53L;
184 
185     ArrayList<Long> integralizacaoCapital = new ArrayList<Long>();
186 
187     ItemEstruturaIettPPA itemPrograma = (ItemEstruturaIettPPA) this.buscar(ItemEstruturaIettPPA.class, codItem);
188     Set acoes = itemPrograma.getItemEstruturaIetts();
189     for (Iterator iter = acoes.iterator(); iter.hasNext();) {
190       ItemEstruturaIettPPA acao = (ItemEstruturaIettPPA) iter.next();
191 
192       Set sisAtributoList = acao.getItemEstruturaSisAtributoIettSatbs();
193       for (Iterator iterator = sisAtributoList.iterator(); iterator.hasNext();) {
194         ItemEstruturaSisAtributoIettSatb sis = (ItemEstruturaSisAtributoIettSatb) iterator.next();
195         if (sis.getSisAtributoSatb().getCodSatb().longValue() == INTEGRALIZACAO_CAPITAL_SIM) {
196           integralizacaoCapital.add(acao.getCodIett());
197         }
198       }
199 
200     }
201 
202     StringBuilder queryStr = new StringBuilder();
203 
204     queryStr.append("select sum(efiep.valorAprovadoEfiep) from EfItemEstPrevisaoEfiep efiep " + "where efiep.exercicioExe.codExe = :codExe " + "and efiep.itemEstruturaIett.itemEstruturaIett.codIett = :codIett " + "and efiep.itemEstruturaIett.indAtivoIett = 'S' ");
205 
206     if (!integralizacaoCapital.isEmpty()) {
207       queryStr.append("and efiep.itemEstruturaIett.codIett not in (:listaIntegralizacao) ");
208       // queryStr.append("and efiep.itemEstruturaIett.unidadeOrcamentariaUO.indTipoOrcamentoUo != :unidadeOrcTipoOrcamento ");
209     }
210 
211     Query query = session.createQuery(queryStr.toString());
212 
213     query.setLong("codExe", codExercicio.longValue());
214     query.setLong("codIett", codItem.longValue());
215 
216     if (!integralizacaoCapital.isEmpty()) {
217       query.setParameterList("listaIntegralizacao", integralizacaoCapital);
218       // query.setString("unidadeOrcTipoOrcamento" ,
219       // Dominios.TIPO_ORC_INVESTIMENTO );
220     }
221 
222     query.setMaxResults(1);
223 
224     return (BigDecimal) query.uniqueResult();
225 
226   }
227 
228   /**
229    * Retorna soma de valor aprovado do item
230    * @param codItem
231    * @param codFonteRecurso
232    * @param codExercicio
233    * @param codRecurso
234    * @return
235    * @throws ECARException
236    * @throws HibernateException
237    */
238   public BigDecimal previsaoItemSemIntegralizacao(Long codItem, Long codFonteRecurso, Long codExercicio, Long codRecurso) throws ECARException, HibernateException {
239     Query query = session.createQuery("select sum(efiep.valorAprovadoEfiep) from EfItemEstPrevisaoEfiep efiep " + "where efiep.exercicioExe.codExe = :codExe " + "and efiep.itemEstruturaIett.codIett = :codIett " + "and efiep.fonteRecursoFonr.codFonr = :codFonr " + "and efiep.recursoRec.codRec = :codRec " + "and efiep.itemEstruturaIett.indAtivoIett = 'S'");
240 
241     query.setLong("codExe", codExercicio.longValue());
242     query.setLong("codIett", codItem.longValue());
243     query.setLong("codFonr", codFonteRecurso.longValue());
244     query.setLong("codRec", codRecurso.longValue());
245     query.setMaxResults(1);
246 
247     return (BigDecimal) query.uniqueResult();
248 
249   }
250 
251   /**
252    * Retorna soma de valor aprovado do item
253    * @param codItem
254    * @param codFonteRecurso
255    * @param codExercicio
256    * @param codRecurso
257    * @return
258    * @throws ECARException
259    * @throws HibernateException
260    */
261   public BigDecimal previsaoItem(Long codItem, Long codFonteRecurso, Long codExercicio, Long codRecurso) throws ECARException, HibernateException {
262 
263     final long INTEGRALIZACAO_CAPITAL_SIM = 53L;
264 
265     ArrayList<Long> integralizacaoCapital = new ArrayList<Long>();
266 
267     ItemEstruturaIettPPA itemAcao = (ItemEstruturaIettPPA) this.buscar(ItemEstruturaIettPPA.class, codItem);
268 
269     Set sisAtributoList = itemAcao.getItemEstruturaSisAtributoIettSatbs();
270     for (Iterator iterator = sisAtributoList.iterator(); iterator.hasNext();) {
271       ItemEstruturaSisAtributoIettSatb sis = (ItemEstruturaSisAtributoIettSatb) iterator.next();
272       if (sis.getSisAtributoSatb().getCodSatb().longValue() == INTEGRALIZACAO_CAPITAL_SIM) {
273         integralizacaoCapital.add(itemAcao.getCodIett());
274       }
275     }
276 
277     StringBuilder queryStr = new StringBuilder();
278 
279     queryStr.append("select sum(efiep.valorAprovadoEfiep) from EfItemEstPrevisaoEfiep efiep " + "where efiep.exercicioExe.codExe = :codExe " + "and efiep.itemEstruturaIett.codIett = :codIett " + "and efiep.itemEstruturaIett.indAtivoIett = 'S' " + "and efiep.fonteRecursoFonr.codFonr = :codFonr " + "and efiep.recursoRec.codRec = :codRec ");
280 
281     if (!integralizacaoCapital.isEmpty()) {
282       queryStr.append("and efiep.itemEstruturaIett.codIett not in (:listaIntegralizacao) ");
283       // queryStr.append("and efiep.itemEstruturaIett.unidadeOrcamentariaUO.indTipoOrcamentoUo != :unidadeOrcTipoOrcamento ");
284     }
285 
286     Query query = session.createQuery(queryStr.toString());
287 
288     query.setLong("codExe", codExercicio.longValue());
289     query.setLong("codIett", codItem.longValue());
290     query.setLong("codFonr", codFonteRecurso.longValue());
291     query.setLong("codRec", codRecurso.longValue());
292 
293     if (!integralizacaoCapital.isEmpty()) {
294       query.setParameterList("listaIntegralizacao", integralizacaoCapital);
295       // query.setString("unidadeOrcTipoOrcamento" ,
296       // Dominios.TIPO_ORC_INVESTIMENTO );
297     }
298 
299     query.setMaxResults(1);
300 
301     return (BigDecimal) query.uniqueResult();
302 
303   }
304 
305   /**
306    * Retorna soma de todos os valores aprovados dos filhos do item
307    */
308   public BigDecimal previsaoSomaItensFilhosSemIntegralizacao(Long codItemEstruturaPai, Long codFonteRecurso, Long codExercicio, Long codRecurso) throws ECARException, HibernateException {
309     Query query = session.createQuery("select sum(efiep.valorAprovadoEfiep) from EfItemEstPrevisaoEfiep efiep " + "where efiep.exercicioExe.codExe = :codExe " + "and efiep.itemEstruturaIett.itemEstruturaIett.codIett = :codIett " + "and efiep.itemEstruturaIett.indAtivoIett = 'S' " + "and efiep.fonteRecursoFonr.codFonr = :codFonr " + "and efiep.recursoRec.codRec = :codRec ");
310 
311     query.setLong("codExe", codExercicio.longValue());
312     query.setLong("codIett", codItemEstruturaPai.longValue());
313     query.setLong("codFonr", codFonteRecurso.longValue());
314     query.setLong("codRec", codRecurso.longValue());
315     query.setMaxResults(1);
316 
317     return (BigDecimal) query.uniqueResult();
318   }
319 
320   /**
321    * Retorna soma de todos os valores aprovados dos filhos do item - com regra
322    * de negocio - integralização de capital e unidade de investimento
323    */
324   public BigDecimal previsaoSomaItensFilhos(Long codItemEstruturaPai, Long codFonteRecurso, Long codExercicio, Long codRecurso) throws ECARException, HibernateException {
325 
326     final long INTEGRALIZACAO_CAPITAL_SIM = 53L;
327 
328     ArrayList<Long> integralizacaoCapital = new ArrayList<Long>();
329 
330     ItemEstruturaIettPPA itemPrograma = (ItemEstruturaIettPPA) this.buscar(ItemEstruturaIettPPA.class, codItemEstruturaPai);
331     Set acoes = itemPrograma.getItemEstruturaIetts();
332     for (Iterator iter = acoes.iterator(); iter.hasNext();) {
333       ItemEstruturaIettPPA acao = (ItemEstruturaIettPPA) iter.next();
334 
335       Set sisAtributoList = acao.getItemEstruturaSisAtributoIettSatbs();
336       for (Iterator iterator = sisAtributoList.iterator(); iterator.hasNext();) {
337         ItemEstruturaSisAtributoIettSatb sis = (ItemEstruturaSisAtributoIettSatb) iterator.next();
338         if (sis.getSisAtributoSatb().getCodSatb().longValue() == INTEGRALIZACAO_CAPITAL_SIM) {
339           integralizacaoCapital.add(acao.getCodIett());
340         }
341       }
342 
343     }
344 
345     StringBuilder queryStr = new StringBuilder();
346 
347     queryStr.append("select sum(efiep.valorAprovadoEfiep) from EfItemEstPrevisaoEfiep efiep " + "where efiep.exercicioExe.codExe = :codExe " + "and efiep.itemEstruturaIett.itemEstruturaIett.codIett = :codIett " + "and efiep.itemEstruturaIett.indAtivoIett = 'S' " + "and efiep.fonteRecursoFonr.codFonr = :codFonr " + "and efiep.recursoRec.codRec = :codRec ");
348 
349     if (!integralizacaoCapital.isEmpty()) {
350       queryStr.append("and efiep.itemEstruturaIett.codIett not in (:listaIntegralizacao) ");
351       // queryStr.append("and efiep.itemEstruturaIett.unidadeOrcamentariaUO.indTipoOrcamentoUo != :unidadeOrcTipoOrcamento "
352       // );
353     }
354 
355     Query query = session.createQuery(queryStr.toString());
356 
357     query.setLong("codExe", codExercicio.longValue());
358     query.setLong("codIett", codItemEstruturaPai.longValue());
359     query.setLong("codFonr", codFonteRecurso.longValue());
360     query.setLong("codRec", codRecurso.longValue());
361 
362     if (!integralizacaoCapital.isEmpty()) {
363       query.setParameterList("listaIntegralizacao", integralizacaoCapital);
364       // query.setString("unidadeOrcTipoOrcamento" ,
365       // Dominios.TIPO_ORC_INVESTIMENTO );
366     }
367 
368     query.setMaxResults(1);
369 
370     return (BigDecimal) query.uniqueResult();
371   }
372 
373   /**
374    * Método utilizado para setar os valores da PK da classe
375    * EfItemEstPrevisaoEfiep
376    * @param itemEstruturaRecurso
377    */
378   public void setPK(EfItemEstPrevisaoEfiep itemEstruturaRecurso) {
379     EfItemEstPrevisaoEfiepPK comp_id = new EfItemEstPrevisaoEfiepPK();
380     comp_id.setCodExe(itemEstruturaRecurso.getExercicioExe().getCodExe());
381     comp_id.setCodFonr(itemEstruturaRecurso.getFonteRecursoFonr().getCodFonr());
382     comp_id.setCodIett(itemEstruturaRecurso.getItemEstruturaIett().getCodIett());
383     comp_id.setCodRec(itemEstruturaRecurso.getRecursoRec().getCodRec());
384 
385     // Retirado da chave primaria
386     itemEstruturaRecurso.setEspecieEsp(itemEstruturaRecurso.getEspecieEsp());
387     itemEstruturaRecurso.setFonteFon(itemEstruturaRecurso.getFonteFon());
388 
389     itemEstruturaRecurso.setComp_id(comp_id);
390   }
391 
392   /**
393    * Cria um objeto EfItemEstPrevisaoEfiep a partir de parâmetros passados no
394    * objeto request
395    * @param request
396    * @param EfIettFonteTotEfieft
397    * @throws ECARException
398    */
399   public void setItemEstruturaPrevisao(HttpServletRequest request, EfItemEstPrevisaoEfiep itemEstruturaRecurso) throws ECARException {
400     ItemEstruturaIett itemEstrutura = (ItemEstruturaIett) this.buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett")));
401     // TODO: Campo retirado
402     // itemEstruturaRecurso.setDataValorEfiep(Pagina.getParamDataBanco(
403     // request, "dataValorEfiep"));
404     itemEstruturaRecurso.setExercicioExe((ExercicioExe) super.buscar(ExercicioExe.class, Long.valueOf(Pagina.getParamStr(request, "codExe"))));
405     itemEstruturaRecurso.setFonteRecursoFonr((FonteRecursoFonr) super.buscar(FonteRecursoFonr.class, Long.valueOf(Pagina.getParamStr(request, "codFonr"))));
406     itemEstruturaRecurso.setIndAtivoEfiep("S");
407     itemEstruturaRecurso.setItemEstruturaIett(itemEstrutura);
408     itemEstruturaRecurso.setRecursoRec((RecursoRec) super.buscar(RecursoRec.class, Long.valueOf(Pagina.getParamStr(request, "codRec"))));
409     itemEstruturaRecurso.setValorAprovadoEfiep(new BigDecimal(Double.valueOf(Util.formataNumero(Pagina.getParamStr(request, "valorAprovadoEfiep"))).doubleValue()));
410     itemEstruturaRecurso.setValorRevisadoEfiep(new BigDecimal(Double.valueOf(Util.formataNumero(Pagina.getParamStr(request, "valorRevisadoEfiep"))).doubleValue()));
411   }
412 
413   /**
414    * Grava uma relação entre itemEstrutura e Recurso
415    * @param itemEstruturaRecurso
416    * @throws ECARException
417    */
418   public void salvar(EfItemEstPrevisaoEfiep itemEstruturaRecurso) throws ECARException {
419 
420     /*
421      * FIXME: Verificar esta regra Está fixo, pois falta fazer na tela para
422      * informar a espécie e a fonte rec 3 = fonte 49 rec 4 = fonte 50 rec 5 =
423      * fonte 51
424      */
425     // if(itemEstruturaRecurso.getEspecieEsp() == null){
426     // itemEstruturaRecurso.setEspecieEsp((EspecieEsp) buscar(EspecieEsp.class,
427     // Long.valueOf(0)));
428     // }
429     // if(itemEstruturaRecurso.getFonteFon() == null){
430     // if(itemEstruturaRecurso.getRecursoRec().getCodRec().longValue() == 3){
431     // itemEstruturaRecurso.setFonteFon((FonteFon) buscar(FonteFon.class,
432     // Long.valueOf(49)));
433     // }
434     // if(itemEstruturaRecurso.getRecursoRec().getCodRec().longValue() == 4){
435     // itemEstruturaRecurso.setFonteFon((FonteFon) buscar(FonteFon.class,
436     // Long.valueOf(50)));
437     // }
438     // if(itemEstruturaRecurso.getRecursoRec().getCodRec().longValue() == 5){
439     // itemEstruturaRecurso.setFonteFon((FonteFon) buscar(FonteFon.class,
440     // Long.valueOf(51)));
441     // }
442     // }
443 
444     setPK(itemEstruturaRecurso);
445     itemEstruturaRecurso.setDataInclusaoEfiep(Data.getDataAtual());
446     try {
447       if (buscar(itemEstruturaRecurso.getItemEstruturaIett().getCodIett(), itemEstruturaRecurso.getFonteRecursoFonr().getCodFonr(), itemEstruturaRecurso.getRecursoRec().getCodRec(), itemEstruturaRecurso.getExercicioExe().getCodExe()) != null)
448         throw new ECARException("itemEstrutura.recurso.inclusao.jaExiste");
449     } catch (ECARException e) {
450       this.logger.error(e);
451       if (e.getMessageKey().equalsIgnoreCase("erro.objectNotFound")) {
452         super.salvar(itemEstruturaRecurso);
453       }
454       else
455         /* joga para frente a inclusao.jaExiste */
456         throw e;
457     }
458   }
459 
460   /**
461    * Exclui todos os recursos de uma fonteRecurso
462    * @param fonteRecurso
463    * @throws ECARException
464    */
465   public void excluirRecursos(EfIettFonteTotEfieft fonteRecurso) throws ECARException {
466     Transaction tx = null;
467 
468     try {
469       ArrayList objetos = new ArrayList();
470 
471       super.inicializarLogBean();
472 
473       tx = session.beginTransaction();
474 
475       List recursos = getRecursosByFonteRecurso(fonteRecurso.getFonteRecursoFonr().getCodFonr(), fonteRecurso.getItemEstruturaIett().getCodIett(), "");
476       if (recursos != null) {
477         Iterator it = recursos.iterator();
478         while (it.hasNext()) {
479           EfItemEstPrevisaoEfiep recurso = (EfItemEstPrevisaoEfiep) it.next();
480           session.delete(recurso);
481           objetos.add(recurso);
482         }
483       }
484 
485       tx.commit();
486 
487       if (super.logBean != null) {
488         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
489         super.logBean.setOperacao("EXC");
490         Iterator itObj = objetos.iterator();
491 
492         while (itObj.hasNext()) {
493           super.logBean.setObj(itObj.next());
494           super.loggerAuditoria.info(logBean.toString());
495         }
496       }
497     } catch (HibernateException e) {
498       if (tx != null)
499         try {
500           tx.rollback();
501         } catch (HibernateException r) {
502           this.logger.error(r);
503           throw new ECARException("erro.hibernateException");
504         }
505       this.logger.error(e);
506       throw new ECARException("erro.hibernateException");
507     }
508   }
509 
510   /**
511    * Recebe um código de item estrutura e um array contendo códigos de
512    * exercícios, fontes de recurso e recurso. Cada conjunto desses códigos
513    * representa um registro de Recurso de um Item. O processo de Exclusão é o
514    * seguinte: Para cada Recurso do Item encontrado verifica se existe conta de
515    * orçamento cadastrada para este recurso. (1) Se encontrar conta, o recurso
516    * não poderá ser excluído fisicamente mas ele e as contas dependentes
517    * encontradas serão desativadas (2) Se não encontrar conta, exclui
518    * fisicamente o recurso (3)
519    * @param codigosParaExcluir
520    * @param codItemEstrutura
521    * @throws ECARException
522    */
523   public void excluir(String[] codigosParaExcluir, Long codItemEstrutura) throws ECARException {
524     Transaction tx = null;
525 
526     try {
527       ArrayList objetos = new ArrayList();
528 
529       super.inicializarLogBean();
530 
531       tx = session.beginTransaction();
532 
533       for (int i = 0; i < codigosParaExcluir.length; i++) {
534         String[] codigos = codigosParaExcluir[i].split(",");
535         EfItemEstPrevisaoEfiep itemEstruturaRecurso = buscar(codItemEstrutura, Long.valueOf(codigos[0]), Long.valueOf(codigos[1]), Long.valueOf(codigos[2]));
536 
537         /* (1) */
538         EfItemEstContaEfiec conta = new EfItemEstContaEfiec();
539         conta.setItemEstruturaIett(itemEstruturaRecurso.getItemEstruturaIett());
540         conta.setExercicioExe(itemEstruturaRecurso.getExercicioExe());
541         conta.setRecursoRec(itemEstruturaRecurso.getRecursoRec());
542         List dependentes = this.pesquisar(conta, null);
543         /* (1) */
544 
545         if (dependentes.size() > 0) {
546           /* (2) */
547           /* desativa o recurso no item */
548           itemEstruturaRecurso.setIndAtivoEfiep("N");
549           session.update(itemEstruturaRecurso);
550           objetos.add(itemEstruturaRecurso);
551           /* desativa as contas */
552           Iterator it = dependentes.iterator();
553           while (it.hasNext()) {
554             EfItemEstContaEfiec contaDependente = (EfItemEstContaEfiec) it.next();
555             contaDependente.setIndAtivoEfiec("N");
556             session.update(contaDependente);
557             objetos.add(contaDependente);
558             throw new ECARException("itemEstrutura.recurso.exclusao.possuiConta");
559           }
560           /* (2) */
561         }
562         else {
563           /* (3) */
564           session.delete(itemEstruturaRecurso);
565           objetos.add(itemEstruturaRecurso);
566           /* (3) */
567         }
568 
569       }
570 
571       tx.commit();
572 
573       if (super.logBean != null) {
574         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
575         super.logBean.setOperacao("ALT_EXC");
576         Iterator itObj = objetos.iterator();
577 
578         while (itObj.hasNext()) {
579           super.logBean.setObj(itObj.next());
580           super.loggerAuditoria.info(logBean.toString());
581         }
582       }
583     } catch (HibernateException e) {
584       if (tx != null)
585         try {
586           tx.rollback();
587         } catch (HibernateException r) {
588           this.logger.error(r);
589           throw new ECARException("erro.hibernateException");
590         }
591       this.logger.error(e);
592       throw new ECARException("erro.hibernateException");
593     }
594   }
595 
596   /**
597    * Devolve objetos EfItemEstPrevisaoEfiep ( recurso de um item Estrutura ) a
598    * partir do Código da Fonte de Recurso e código do Exercício
599    * @param codFonteRecurso
600    * @param codExercicio
601    * @return
602    * @throws ECARException
603    */
604   public List getRecursosByFonteRecurso(Long codFonteRecurso, Long codItemEstrutura, String ativo) throws ECARException {
605     EfItemEstPrevisaoEfiep itemEstruturaRecurso = new EfItemEstPrevisaoEfiep();
606     itemEstruturaRecurso.setFonteRecursoFonr((FonteRecursoFonr) super.buscar(FonteRecursoFonr.class, codFonteRecurso));
607     itemEstruturaRecurso.setItemEstruturaIett((ItemEstruturaIett) super.buscar(ItemEstruturaIett.class, codItemEstrutura));
608     if (!"".equals(ativo))
609       itemEstruturaRecurso.setIndAtivoEfiep(ativo);
610     return super.pesquisar(itemEstruturaRecurso, null);
611   }
612 
613   public List getRecursosDistintosByFonteRecurso(Long codFonteRecurso, Long codItemEstrutura) throws ECARException {
614     try {
615       StringBuilder sql = new StringBuilder();
616 
617       sql.append("select distinct recurso from RecursoRec as recurso ");
618       sql.append("join recurso.efItemEstPrevisaoEfieps as ieRecurso ");
619       sql.append("where ieRecurso.itemEstruturaIett.codIett = :item ");
620       sql.append("and ieRecurso.itemEstruturaIett.indAtivoIett = 'S'");
621       sql.append("and ieRecurso.fonteRecursoFonr.codFonr = :fonte ");
622       sql.append("order by recurso.sequenciaRec asc");
623 
624       Query query = this.getSession().createQuery(sql.toString());
625 
626       query.setLong("item", codItemEstrutura.longValue());
627       query.setLong("fonte", codFonteRecurso.longValue());
628 
629       return query.list();
630     } catch (HibernateException e) {
631       this.logger.error(e);
632       throw new ECARException(e);
633     }
634   }
635 
636   /**
637    * Retorna os Recursos que possuem valores (Aprovado/Revisado).
638    * @param codFonteRecurso
639    * @param codItemEstrutura
640    * @return List de RecursoRec
641    * @throws ECARException
642    */
643   public List getRecursosDistintosComValoresByFonteRecurso(Long codFonteRecurso, Long codItemEstrutura) throws ECARException {
644     try {
645       StringBuilder sql = new StringBuilder();
646 
647       sql.append("select distinct recurso from RecursoRec as recurso ");
648       sql.append("join recurso.efItemEstPrevisaoEfieps as ieRecurso ");
649       sql.append("where ieRecurso.itemEstruturaIett.codIett = :item ");
650       sql.append("and ieRecurso.itemEstruturaIett.indAtivoIett = 'S' ");
651       sql.append("and ieRecurso.fonteRecursoFonr.codFonr = :fonte ");
652       sql.append("and (ieRecurso.valorAprovadoEfiep > 0 or ieRecurso.valorRevisadoEfiep > 0)");
653       sql.append("order by recurso.sequenciaRec asc");
654 
655       Query query = this.getSession().createQuery(sql.toString());
656 
657       query.setLong("item", codItemEstrutura.longValue());
658       query.setLong("fonte", codFonteRecurso.longValue());
659 
660       return query.list();
661     } catch (HibernateException e) {
662       this.logger.error(e);
663       throw new ECARException(e);
664     }
665   }
666 
667   /**
668    * Retorna uma lista com os recursos cadastradas para um item em uma Fonte de
669    * Recurso e em um Exercício
670    * @param itemEstrutura
671    * @param exercicio
672    * @param fonteRecursoFonr
673    * @return
674    * @throws ECARException
675    */
676   public List getRecursosByFonteRecursoExercicio(ItemEstruturaIett itemEstrutura, ExercicioExe exercicio, FonteRecursoFonr fonte) throws ECARException {
677     List retorno = new ArrayList();
678     EfItemEstPrevisaoEfiep recurso = new EfItemEstPrevisaoEfiep();
679     recurso.setItemEstruturaIett(itemEstrutura);
680     recurso.setExercicioExe(exercicio);
681     recurso.setFonteRecursoFonr(fonte);
682     recurso.setIndAtivoEfiep("S");
683     List ieRec = super.pesquisar(recurso, null);
684     if (ieRec != null) {
685       Iterator it = ieRec.iterator();
686       while (it.hasNext()) {
687         retorno.add(((EfItemEstPrevisaoEfiep) it.next()).getRecursoRec());
688       }
689     }
690     return retorno;
691 
692   }
693 
694   /**
695    * Devolve uma lista com todos os Recursos que possuem o item, o exercício e a
696    * fonte de recursos infomados como parâmetro
697    * @param itemEstrutura
698    * @param exercicio
699    * @param fonte
700    * @return
701    * @throws ECARException
702    */
703   public List getRecursosByFonteRecursoExercicio(Long itemEstrutura, Long exercicio, Long fonte) throws ECARException {
704     ItemEstruturaIett item = (ItemEstruturaIett) this.buscar(ItemEstruturaIett.class, itemEstrutura);
705     ExercicioExe exercicioExe = (ExercicioExe) this.buscar(ExercicioExe.class, exercicio);
706     FonteRecursoFonr fonteRec = (FonteRecursoFonr) this.buscar(FonteRecursoFonr.class, fonte);
707     return this.getRecursosByFonteRecursoExercicio(item, exercicioExe, fonteRec);
708   }
709 
710   /**
711    * Devolve uma lista de ItemEstruturaPrevisaoEfiep para um dado exercicio e
712    * item, ordenados pela sequência de apresentação.
713    * @param ItemEstruturaIett item
714    * @param ExercicioExe exercicio
715    * @return List ItemEstruturaPrevisaoEfiep
716    * @throws ECARException
717    */
718   public List getListaItemEstruturaPrevisao(ItemEstruturaIett item, ExercicioExe exercicio) throws ECARException {
719     List lista = new ArrayList();
720 
721     try {
722 
723       StringBuilder sb = new StringBuilder();
724       sb.append("from EfItemEstPrevisaoEfiep efiep ");
725       sb.append(" where ");
726 
727       if (exercicio != null) {
728         sb.append("efiep.exercicioExe.codExe = :codExe and ");
729       }
730 
731       sb.append(" efiep.itemEstruturaIett.codIett = :codIett ");
732       sb.append(" and efiep.itemEstruturaIett.indAtivoIett = 'S' ");
733       sb.append("order by efiep.fonteRecursoFonr.sequenciaFonr, efiep.recursoRec.sequenciaRec");
734 
735       Query query = session.createQuery(sb.toString());
736 
737       if (exercicio != null)
738         query.setLong("codExe", exercicio.getCodExe().longValue());
739 
740       query.setLong("codIett", item.getCodIett().longValue());
741 
742       lista = query.list();
743     } catch (HibernateException e) {
744       this.logger.error(e);
745       throw new ECARException("erro.hibernateException");
746     }
747     return lista;
748   }
749 
750   /**
751    * @param item
752    * @return
753    * @throws ECARException
754    */
755   public List getListaExerciciosItemEstruturaPrevisao(ItemEstruturaIett item) throws ECARException {
756     List lista = new ArrayList();
757 
758     try {
759 
760       StringBuilder sb = new StringBuilder();
761       sb.append("select distinct efiep.exercicioExe from EfItemEstPrevisaoEfiep efiep ");
762       sb.append(" where ");
763       sb.append(" efiep.itemEstruturaIett.codIett = :codIett and ");
764       sb.append(" efiep.itemEstruturaIett.indAtivoIett = 'S' ");
765       sb.append("order by efiep.exercicioExe.dataInicialExe");
766 
767       Query query = session.createQuery(sb.toString());
768 
769       query.setLong("codIett", item.getCodIett().longValue());
770 
771       lista = query.list();
772     } catch (HibernateException e) {
773       this.logger.error(e);
774       throw new ECARException("erro.hibernateException");
775     }
776     return lista;
777   }
778 
779   /**
780    * @param codItem
781    * @param codFonteRecurso
782    * @param codExercicio
783    * @param codRecurso
784    * @param tipo
785    * @return
786    * @throws ECARException
787    * @throws HibernateException
788    */
789   public BigDecimal previsaoSomaValores(Long codItem, Long codFonteRecurso, Long codExercicio, Long codRecurso, String tipo) throws ECARException, HibernateException {
790 
791     StringBuilder select = new StringBuilder();
792 
793     if (Dominios.EFIEP_VALOR_APROVADO.equals(tipo)) {
794       select.append("select sum(efiep.valorAprovadoEfiep) from EfItemEstPrevisaoEfiep efiep ");
795     }
796     if (Dominios.EFIEP_VALOR_REVISADO.equals(tipo)) {
797       select.append("select sum(efiep.valorRevisadoEfiep) from EfItemEstPrevisaoEfiep efiep ");
798     }
799 
800     select.append("where efiep.exercicioExe.codExe = :codExe ");
801     select.append(" and efiep.itemEstruturaIett.codIett = :codIett ");
802     select.append(" and efiep.itemEstruturaIett.indAtivoIett = 'S' ");
803     select.append(" and efiep.fonteRecursoFonr.codFonr = :codFonr ");
804     select.append("and efiep.recursoRec.codRec = :codRec ");
805 
806     Query query = session.createQuery(select.toString());
807 
808     query.setLong("codExe", codExercicio.longValue());
809     query.setLong("codIett", codItem.longValue());
810     query.setLong("codFonr", codFonteRecurso.longValue());
811     query.setLong("codRec", codRecurso.longValue());
812     query.setMaxResults(1);
813 
814     return (BigDecimal) query.uniqueResult();
815   }
816 }