View Javadoc

1   /*
2    * Criado em 21/12/2004
3    */
4   package ecar.dao;
5   
6   import java.util.ArrayList;
7   import java.util.Iterator;
8   import java.util.List;
9   
10  import javax.servlet.http.HttpServletRequest;
11  
12  import org.hibernate.HibernateException;
13  import org.hibernate.Query;
14  import org.hibernate.Transaction;
15  
16  import comum.database.Dao;
17  import comum.util.Data;
18  import comum.util.Pagina;
19  import comum.util.Util;
20  
21  import ecar.exception.ECARException;
22  import ecar.pojo.EfIettFonTotRevEfieftr;
23  import ecar.pojo.EfIettPrevisaoRevEfiepr;
24  import ecar.pojo.EfIettPrevisaoRevEfieprPK;
25  import ecar.pojo.ExercicioExe;
26  import ecar.pojo.FonteRecursoFonr;
27  import ecar.pojo.ItemEstruturarevisaoIettrev;
28  import ecar.pojo.RecursoRec;
29  
30  /**
31   * @author felipev
32   */
33  public class ItemEstruturaPrevisaoRevDao extends Dao {
34  
35    public ItemEstruturaPrevisaoRevDao(HttpServletRequest request) {
36      super();
37      this.request = request;
38    }
39  
40    /**
41     * Retorna um objeto EfItemEstPrevisaoEfiep a partir do código do Item da
42     * Estrutura, do código do exercício e do código do Recurso e do Código da
43     * Fonte de Recurso
44     * @param codItemEstrutura
45     * @param codBeneficiario
46     * @return
47     * @throws ECARException
48     */
49    public EfIettPrevisaoRevEfiepr buscar(Long codItemEstrutura, Long codFonteRecurso, Long codRecurso, Long codExercicio) throws ECARException {
50      EfIettPrevisaoRevEfieprPK comp_id = new EfIettPrevisaoRevEfieprPK();
51      comp_id.setCodFonr(codFonteRecurso);
52      comp_id.setCodExe(codExercicio);
53      comp_id.setCodIettrev(codItemEstrutura);
54      comp_id.setCodRec(codRecurso);
55      return (EfIettPrevisaoRevEfiepr) super.buscar(EfIettPrevisaoRevEfiepr.class, comp_id);
56    }
57  
58    /**
59     * Retorna um objeto EfItemEstPrevisaoEfiep a partir do código do Item da
60     * Estrutura, do código do exercício e do Código da Fonte de Recurso
61     * @param codItemEstrutura
62     * @param codBeneficiario
63     * @return
64     * @throws ECARException
65     * @throws HibernateException
66     */
67    public EfIettPrevisaoRevEfiepr buscar(Integer codItemEstrutura, Long codFonteRecurso, Long codExercicio) throws ECARException, HibernateException {
68      Query query = session.createQuery("from EfIettPrevisaoRevEfiepr efiepr " + "where efiepr.exercicioExe.codExe = :codExe " + "and efiepr.itemEstruturarevisaoIettrev.codIettrev = :codIettRev " + "and efiepr.fonteRecursoFonr.codFonr = :codFonr " + "order by efiepr.fonteRecursoFonr.nomeFonr, efiepr.recursoRec.nomeRec");
69  
70      query.setLong("codExe", codExercicio.longValue());
71      query.setInteger("codIettRev", codItemEstrutura.intValue());
72      query.setLong("codFonr", codFonteRecurso.longValue());
73  
74      List lista = query.list();
75      if (lista != null && lista.size() > 0) {
76        return (EfIettPrevisaoRevEfiepr) lista.iterator().next();
77      }
78      else {
79        return null;
80      }
81    }
82  
83    /**
84     * Método utilizado para setar os valores da PK da classe
85     * EfItemEstPrevisaoEfiep
86     * @param itemEstruturaRecurso
87     */
88    public void setPK(EfIettPrevisaoRevEfiepr itemEstruturaRecurso) {
89      EfIettPrevisaoRevEfieprPK comp_id = new EfIettPrevisaoRevEfieprPK();
90      comp_id.setCodExe(Long.valueOf(itemEstruturaRecurso.getExercicioExe().getCodExe().intValue()));
91      comp_id.setCodFonr(Long.valueOf(itemEstruturaRecurso.getFonteRecursoFonr().getCodFonr().intValue()));
92      comp_id.setCodIettrev(itemEstruturaRecurso.getItemEstruturarevisaoIettrev().getCodIettrev());
93      comp_id.setCodRec(Long.valueOf(itemEstruturaRecurso.getRecursoRec().getCodRec().intValue()));
94      itemEstruturaRecurso.setComp_id(comp_id);
95    }
96  
97    /**
98     * Cria um objeto EfItemEstPrevisaoEfiep a partir de parâmetros passados no
99     * objeto request
100    * @param request
101    * @param EfIettFonteTotEfieft
102    * @throws ECARException
103    */
104   public void setItemEstruturaPrevisao(HttpServletRequest request, EfIettPrevisaoRevEfiepr itemEstruturaRecurso) throws ECARException {
105     ItemEstruturarevisaoIettrev itemEstrutura = (ItemEstruturarevisaoIettrev) this.buscar(ItemEstruturarevisaoIettrev.class, Integer.valueOf(Pagina.getParamStr(request, "codIettrev")));
106     // Campo retirado
107     // itemEstruturaRecurso.setDataValorEfiep(Pagina.getParamDataBanco(
108     // request, "dataValorEfiep"));
109     itemEstruturaRecurso.setExercicioExe((ExercicioExe) super.buscar(ExercicioExe.class, Long.valueOf(Pagina.getParamStr(request, "codExe"))));
110     itemEstruturaRecurso.setFonteRecursoFonr((FonteRecursoFonr) super.buscar(FonteRecursoFonr.class, Long.valueOf(Pagina.getParamStr(request, "codFonr"))));
111     itemEstruturaRecurso.setIndAtivoEfiepr("S");
112     itemEstruturaRecurso.setItemEstruturarevisaoIettrev(itemEstrutura);
113     itemEstruturaRecurso.setRecursoRec((RecursoRec) super.buscar(RecursoRec.class, Long.valueOf(Pagina.getParamStr(request, "codRec"))));
114     itemEstruturaRecurso.setValorAprovadoEfiepr(Double.valueOf(Util.formataNumero(Pagina.getParamStr(request, "valorAprovadoEfiepr"))));
115     itemEstruturaRecurso.setValorRevisadoEfiepr(Double.valueOf(Util.formataNumero(Pagina.getParamStr(request, "valorRevisadoEfiepr"))));
116   }
117 
118   /**
119    * Grava uma relação entre itemEstrutura e Recurso
120    * @param itemEstruturaRecurso
121    * @throws ECARException
122    */
123   public void salvar(EfIettPrevisaoRevEfiepr itemEstruturaRecurso) throws ECARException {
124     setPK(itemEstruturaRecurso);
125     itemEstruturaRecurso.setDataInclusaoEfiepr(Data.getDataAtual());
126     try {
127       if (buscar(itemEstruturaRecurso.getItemEstruturarevisaoIettrev().getCodIettrev(), Long.valueOf(itemEstruturaRecurso.getFonteRecursoFonr().getCodFonr().intValue()), Long.valueOf(itemEstruturaRecurso.getRecursoRec().getCodRec().intValue()), Long.valueOf(itemEstruturaRecurso.getExercicioExe().getCodExe().intValue())) != null)
128         throw new ECARException("itemEstrutura.recurso.inclusao.jaExiste");
129     } catch (ECARException e) {
130       this.logger.error(e);
131       if (e.getMessageKey().equalsIgnoreCase("erro.objectNotFound")) {
132         super.salvar(itemEstruturaRecurso);
133       }
134       else
135         /* joga para frente a inclusao.jaExiste */
136         throw e;
137     }
138   }
139 
140   /**
141    * Exclui todos os recursos de uma fonteRecurso
142    * @param fonteRecurso
143    * @throws ECARException
144    */
145   public void excluirRecursos(EfIettFonTotRevEfieftr fonteRecurso) throws ECARException {
146     Transaction tx = null;
147 
148     try {
149       ArrayList objetos = new ArrayList();
150 
151       super.inicializarLogBean();
152 
153       tx = session.beginTransaction();
154 
155       List recursos = getRecursosByFonteRecurso(fonteRecurso.getFonteRecursoFonr().getCodFonr(), fonteRecurso.getItemEstruturarevisaoIettrev().getCodIettrev());
156       if (recursos != null) {
157         Iterator it = recursos.iterator();
158         while (it.hasNext()) {
159           EfIettPrevisaoRevEfiepr recurso = (EfIettPrevisaoRevEfiepr) it.next();
160           session.delete(recurso);
161           objetos.add(recurso);
162         }
163       }
164 
165       tx.commit();
166 
167       if (super.logBean != null) {
168         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
169         super.logBean.setOperacao("EXC");
170         Iterator itObj = objetos.iterator();
171 
172         while (itObj.hasNext()) {
173           super.logBean.setObj(itObj.next());
174           super.loggerAuditoria.info(logBean.toString());
175         }
176       }
177     } catch (HibernateException e) {
178       if (tx != null)
179         try {
180           tx.rollback();
181         } catch (HibernateException r) {
182           this.logger.error(r);
183           throw new ECARException("erro.hibernateException");
184         }
185       this.logger.error(e);
186       throw new ECARException("erro.hibernateException");
187     }
188   }
189 
190   /**
191    * Recebe um código de item estrutura e um array contendo códigos de
192    * exercícios, fontes de recurso e recurso. Cada conjunto desses códigos
193    * representa um registro de Recurso de um Item. O processo de Exclusão é o
194    * seguinte: Para cada Recurso do Item encontrado verifica se existe conta de
195    * orçamento cadastrada para este recurso. (1) Se encontrar conta, o recurso
196    * não poderá ser excluído fisicamente mas ele e as contas dependentes
197    * encontradas serão desativadas (2) Se não encontrar conta, exclui
198    * fisicamente o recurso (3)
199    * @param codigosParaExcluir
200    * @param codItemEstrutura
201    * @throws ECARException
202    */
203   public void excluir(String[] codigosParaExcluir, Long codItemEstrutura) throws ECARException {
204     Transaction tx = null;
205 
206     try {
207       ArrayList objetos = new ArrayList();
208 
209       super.inicializarLogBean();
210 
211       tx = session.beginTransaction();
212 
213       for (int i = 0; i < codigosParaExcluir.length; i++) {
214         String[] codigos = codigosParaExcluir[i].split(",");
215         EfIettPrevisaoRevEfiepr itemEstruturaRecurso = buscar(codItemEstrutura, Long.valueOf(codigos[0]), Long.valueOf(codigos[1]), Long.valueOf(codigos[2]));
216 
217         session.delete(itemEstruturaRecurso);
218         objetos.add(itemEstruturaRecurso);
219 
220       }
221 
222       tx.commit();
223 
224       if (super.logBean != null) {
225         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
226         super.logBean.setOperacao("EXC");
227         Iterator itObj = objetos.iterator();
228 
229         while (itObj.hasNext()) {
230           super.logBean.setObj(itObj.next());
231           super.loggerAuditoria.info(logBean.toString());
232         }
233       }
234     } catch (HibernateException e) {
235       if (tx != null)
236         try {
237           tx.rollback();
238         } catch (HibernateException r) {
239           this.logger.error(r);
240           throw new ECARException("erro.hibernateException");
241         }
242       this.logger.error(e);
243       throw new ECARException("erro.hibernateException");
244     }
245   }
246 
247   /**
248    * Devolve objetos EfItemEstPrevisaoEfiep ( recurso de um item Estrutura ) a
249    * partir do Código da Fonte de Recurso e código do Exercício
250    * @param codFonteRecurso
251    * @param codExercicio
252    * @return
253    * @throws ECARException
254    */
255   public List getRecursosByFonteRecurso(Long codFonteRecurso, Long codItemEstrutura) throws ECARException {
256     EfIettPrevisaoRevEfiepr itemEstruturaRecurso = new EfIettPrevisaoRevEfiepr();
257     itemEstruturaRecurso.setFonteRecursoFonr((FonteRecursoFonr) super.buscar(FonteRecursoFonr.class, codFonteRecurso));
258     itemEstruturaRecurso.setItemEstruturarevisaoIettrev((ItemEstruturarevisaoIettrev) super.buscar(ItemEstruturarevisaoIettrev.class, codItemEstrutura));
259     itemEstruturaRecurso.setIndAtivoEfiepr("S");
260     return super.pesquisar(itemEstruturaRecurso, null);
261   }
262 
263   public List getRecursosDistintosByFonteRecurso(Long codFonteRecurso, Integer codItemEstrutura) throws ECARException {
264     try {
265       StringBuilder sql = new StringBuilder();
266 
267       sql.append("select distinct recurso from RecursoRec as recurso ");
268       sql.append("join recurso.efIettPrevisaoRevEfieprs as ieRecurso ");
269       sql.append("where ieRecurso.itemEstruturarevisaoIettrev.codIettrev = :item ");
270       sql.append("and ieRecurso.fonteRecursoFonr.codFonr = :fonte ");
271 
272       Query query = this.getSession().createQuery(sql.toString());
273 
274       query.setLong("item", codItemEstrutura.intValue());
275       query.setLong("fonte", codFonteRecurso.longValue());
276 
277       return query.list();
278     } catch (HibernateException e) {
279       this.logger.error(e);
280       throw new ECARException(e);
281     }
282   }
283 
284   /**
285    * Retorna uma lista com os recursos cadastradas para um item em uma Fonte de
286    * Recurso e em um Exercício
287    * @param itemEstrutura
288    * @param exercicio
289    * @return
290    * @throws ECARException
291    */
292   public List getRecursosByFonteRecursoExercicio(ItemEstruturarevisaoIettrev itemEstrutura, ExercicioExe exercicio, FonteRecursoFonr fonte) throws ECARException {
293     List retorno = new ArrayList();
294     EfIettPrevisaoRevEfiepr recurso = new EfIettPrevisaoRevEfiepr();
295     recurso.setItemEstruturarevisaoIettrev(itemEstrutura);
296     recurso.setExercicioExe(exercicio);
297     recurso.setFonteRecursoFonr(fonte);
298     recurso.setIndAtivoEfiepr("S");
299     List ieRec = super.pesquisar(recurso, null);
300     if (ieRec != null) {
301       Iterator it = ieRec.iterator();
302       while (it.hasNext()) {
303         retorno.add(((EfIettPrevisaoRevEfiepr) it.next()).getRecursoRec());
304       }
305     }
306     return retorno;
307 
308   }
309 
310   /**
311    * Devolve uma lista com todos os Recursos que possuem o item, o exercício e a
312    * fonte de recursos infomados como parâmetro
313    * @param itemEstrutura
314    * @param exercicio
315    * @param fonte
316    * @return
317    * @throws ECARException
318    */
319   public List getRecursosByFonteRecursoExercicio(Integer itemEstrutura, Long exercicio, Long fonte) throws ECARException {
320     ItemEstruturarevisaoIettrev item = (ItemEstruturarevisaoIettrev) this.buscar(ItemEstruturarevisaoIettrev.class, itemEstrutura);
321     ExercicioExe exercicioExe = (ExercicioExe) this.buscar(ExercicioExe.class, exercicio);
322     FonteRecursoFonr fonteRec = (FonteRecursoFonr) this.buscar(FonteRecursoFonr.class, fonte);
323     return this.getRecursosByFonteRecursoExercicio(item, exercicioExe, fonteRec);
324   }
325 
326   /**
327    * Devolve uma lista de ItemEstruturaPrevisaoEfiep para um dado exercicio e
328    * item.
329    * @param ItemEstruturaIett item
330    * @param ExercicioExe exercicio
331    * @return List ItemEstruturaPrevisaoEfiep
332    * @throws ECARException
333    */
334   public List getListaItemEstruturaPrevisao(ItemEstruturarevisaoIettrev item, ExercicioExe exercicio) throws ECARException {
335     List lista = new ArrayList();
336 
337     try {
338 
339       Query query = session.createQuery("from EfIettPrevisaoRevEfiepr efiepr " + "where efiepr.exercicioExe.codExe = :codExe " + "and efiepr.itemEstruturarevisaoIettrev.codIettrev = :codIettrev " + "order by efiepr.fonteRecursoFonr.nomeFonr, efiep.recursoRec.nomeRec");
340 
341       query.setLong("codExe", exercicio.getCodExe().longValue());
342       query.setInteger("codIettrev", item.getCodIettrev().intValue());
343       lista = query.list();
344     } catch (HibernateException e) {
345       this.logger.error(e);
346       throw new ECARException("erro.hibernateException");
347     }
348     return lista;
349   }
350 
351 }