View Javadoc

1   /*
2    * Criado em 21/12/2004
3    */
4   package ecar.dao;
5   
6   import java.math.BigDecimal;
7   import java.text.DecimalFormat;
8   import java.util.ArrayList;
9   import java.util.Date;
10  import java.util.HashSet;
11  import java.util.Iterator;
12  import java.util.List;
13  import java.util.Set;
14  
15  import javax.servlet.http.HttpServletRequest;
16  
17  import org.hibernate.HibernateException;
18  import org.hibernate.Query;
19  import org.hibernate.Transaction;
20  
21  import comum.database.Dao;
22  import comum.util.Data;
23  import comum.util.Pagina;
24  import comum.util.Util;
25  
26  import ecar.exception.ECARException;
27  import ecar.pojo.AcompRealFisicoArf;
28  import ecar.pojo.ConfiguracaoCfg;
29  import ecar.pojo.Cor;
30  import ecar.pojo.EstruturaFuncaoEttf;
31  import ecar.pojo.ExercicioExe;
32  import ecar.pojo.HistoricoIettfH;
33  import ecar.pojo.HistoricoIettrH;
34  import ecar.pojo.HistoricoMaster;
35  import ecar.pojo.HistoricoMotivo;
36  import ecar.pojo.ItemEstrtIndResulCorIettrcor;
37  import ecar.pojo.ItemEstrtIndResulIettr;
38  import ecar.pojo.ItemEstrutFisicoIettf;
39  import ecar.pojo.ItemEstrutFisicoIettfPK;
40  import ecar.pojo.ItemEstruturaIett;
41  import ecar.pojo.PaiFilho;
42  import ecar.pojo.PeriodicidadePrdc;
43  import ecar.pojo.ServicoSer;
44  import ecar.pojo.SisAtributoSatb;
45  import ecar.pojo.SisGrupoAtributoSga;
46  import ecar.pojo.UsuarioUsu;
47  import ecar.taglib.util.Input;
48  import ecar.util.Dominios;
49  
50  /**
51   * @author evandrO
52   */
53  public class ItemEstrtIndResulDao extends Dao {
54    /**
55     * Construtor. Chama o Session factory do Hibernate
56     */
57    public ItemEstrtIndResulDao(HttpServletRequest request) {
58      super();
59      this.request = request;
60    }
61  
62    /**
63     * Cria um objeto itemEstrtIndResul a partir de parâmetros passados no objeto
64     * request
65     * @param request
66     * @param itemEstrtIndResul
67     * @throws ECARException
68     */
69    public void setItemEstrtIndResul(HttpServletRequest request, ItemEstrtIndResulIettr itemEstrtIndResul) throws ECARException {
70  
71      SisGrupoAtributoSga grupoMetas = new ConfiguracaoDao(request).getConfiguracao().getSisGrupoAtributoSgaByCodSgaGrAtrMetasFisicas();
72  
73      itemEstrtIndResul.setItemEstruturaIett((ItemEstruturaIett) this.buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett"))));
74      itemEstrtIndResul.setNomeIettir(Pagina.getParamStr(request, "nomeIettir"));
75      itemEstrtIndResul.setDescricaoIettir(Pagina.getParamStr(request, "descricaoIettir"));
76      itemEstrtIndResul.setIndProjecaoIettr(Pagina.getParamStr(request, "indProjecaoIettr"));
77      itemEstrtIndResul.setIndAcumulavelIettr(Pagina.getParamStr(request, "indAcumulavelIettr"));
78      itemEstrtIndResul.setIndPublicoIettr(Pagina.getParamStr(request, "indPublicoIettr"));
79  
80      itemEstrtIndResul.setFonteIettr(Pagina.getParamStr(request, "fonteIettr"));
81      itemEstrtIndResul.setFormulaIettr(Pagina.getParamStr(request, "formulaIettr"));
82  
83      // Mantis 12390
84      itemEstrtIndResul.setIndAtivoIettr(Dominios.SIM);
85  
86      if (!"".equals(Pagina.getParamStr(request, "dataApuracaoIettr"))) {
87        itemEstrtIndResul.setDataApuracaoIettr(Data.parseDate(Pagina.getParamStr(request, "dataApuracaoIettr")));
88      }
89      else {
90        itemEstrtIndResul.setDataApuracaoIettr(null);
91      }
92  
93      if (!"".equals(Pagina.getParamStr(request, "periodicidadePrdc"))) {
94        itemEstrtIndResul.setPeriodicidadePrdc((PeriodicidadePrdc) this.buscar(PeriodicidadePrdc.class, Long.valueOf(Pagina.getParamStr(request, "periodicidadePrdc"))));
95      }
96      else {
97        itemEstrtIndResul.setPeriodicidadePrdc(null);
98      }
99  
100     if (!"".equals(Pagina.getParamStr(request, "indiceMaisRecenteIettr"))) {
101       DecimalFormat dff = (DecimalFormat) DecimalFormat.getInstance();
102       Double indiceMaisRecente = new Double("0");
103       String indiceMaisRecenteString = Pagina.getParamStr(request, "indiceMaisRecenteIettr");
104 
105       try {
106         indiceMaisRecente = dff.parse(indiceMaisRecenteString).doubleValue();
107       } catch (Exception e) {
108         // Não precisa lançar exceção aqui.
109       }
110 
111       itemEstrtIndResul.setIndiceMaisRecenteIettr(indiceMaisRecente);
112     }
113     else {
114       itemEstrtIndResul.setIndiceMaisRecenteIettr(null);
115     }
116 
117     // alteracao nova tela MANTIS #0011576
118 
119     String indPrevPorLocal = Pagina.getParamStr(request, "indPrevPorLocal");
120     if ("".equals(indPrevPorLocal.trim()))
121       indPrevPorLocal = "N";
122     itemEstrtIndResul.setIndPrevPorLocal(indPrevPorLocal);
123 
124     // alteracao nova tela MANTIS #0011576
125 
126     String indRealPorLocal = Pagina.getParamStr(request, "indRealPorLocal");
127     if ("".equals(indRealPorLocal.trim()))
128       indRealPorLocal = "N";
129     itemEstrtIndResul.setIndRealPorLocal(indRealPorLocal);
130 
131     itemEstrtIndResul.setIndTipoQtde(Pagina.getParamStr(request, "indTipoQtde"));
132 
133     if (!"".equals(Pagina.getParamStr(request, "indValorFinalIettr"))) {
134       itemEstrtIndResul.setIndValorFinalIettr(Pagina.getParamStr(request, "indValorFinalIettr"));
135     }
136     else {
137       itemEstrtIndResul.setIndValorFinalIettr(null);
138     }
139 
140     if (grupoMetas != null) {
141       String nomeCampo = "a" + grupoMetas.getCodSga().toString();
142       if (!"".equals(Pagina.getParamStr(request, nomeCampo))) {
143         itemEstrtIndResul.setSisAtributoSatb((SisAtributoSatb) new SisAtributoDao(null).buscar(SisAtributoSatb.class, Long.valueOf(Pagina.getParamStr(request, nomeCampo))));
144       }
145     }
146     /*
147      * Se a configuração do sistema está setada para trabalhar com um grupo de
148      * unidades, o valor selecionado na tela deve ser gravada na variável
149      * CodUnidMedidaIettr. Senão, o valor digitado será guardado na variavel
150      * unidMedidaIettr.
151      */
152     SisGrupoAtributoSga grupoUnidades = new ConfiguracaoDao(request).getConfiguracao().getSisGrupoAtributoSgaByUnidMedida();
153 
154     if (grupoUnidades != null) {
155       String nomeCampo = "a" + grupoUnidades.getCodSga().toString();
156       if (!"".equals(Pagina.getParamStr(request, nomeCampo))) {
157         if (grupoUnidades.getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.TEXT)) || grupoUnidades.getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.TEXTAREA)) || grupoUnidades.getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.MULTITEXTO)) || grupoUnidades.getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.VALIDACAO))) {
158 
159           itemEstrtIndResul.setCodUnidMedidaIettr((SisAtributoSatb) new SisAtributoDao(null).buscar(SisAtributoSatb.class, Long.valueOf(Pagina.getParamStr(request, "codigoSisAtbUnidadeMedida"))));
160         }
161         else {
162           // Caso de Combo, Check, Radio, etc..
163           itemEstrtIndResul.setCodUnidMedidaIettr((SisAtributoSatb) new SisAtributoDao(null).buscar(SisAtributoSatb.class, Long.valueOf(Pagina.getParamStr(request, nomeCampo))));
164         }
165       }
166       itemEstrtIndResul.setUnidMedidaIettr("");
167     }
168     else {
169       itemEstrtIndResul.setUnidMedidaIettr(Pagina.getParamStr(request, "unidMedidaIettr"));
170       itemEstrtIndResul.setCodUnidMedidaIettr(null);
171     }
172 
173     // Gráfico de Grupo
174     if (!"".equals(Pagina.getParamStr(request, "labelGraficoGrupoIettir"))) {
175       itemEstrtIndResul.setLabelGraficoGrupoIettir(Pagina.getParamStr(request, "labelGraficoGrupoIettir").toUpperCase());
176     }
177     else {
178       itemEstrtIndResul.setLabelGraficoGrupoIettir(null);
179     }
180 
181     // Utiliza Sinalização
182     if (!"".equals(Pagina.getParamStr(request, "ind_sinalizacao"))) {
183       itemEstrtIndResul.setIndSinalizacaoIettr(Pagina.getParamStr(request, "ind_sinalizacao"));
184     }
185     else {
186       itemEstrtIndResul.setIndSinalizacaoIettr(null);
187     }
188 
189     // No caso de inserção de uma nova meta/indicador
190     // Recupera do request os ItemEstrtIndResulCorIettrcores e seta o
191     // "itemEstrtIndResul"com esses valores.
192     if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() == null) {
193       this.setItemEstrtIndResulCorIettrcor(request, itemEstrtIndResul);
194     }
195 
196     // Tipo de atualização automática ou manual
197     itemEstrtIndResul.setIndTipoAtualizacaoPrevisto(Pagina.getParamStr(request, "indTipoAtualizacaoPrevisto"));
198     itemEstrtIndResul.setIndTipoAtualizacaoRealizado(Pagina.getParamStr(request, "indTipoAtualizacaoRealizado"));
199 
200     // Valor Previsto
201     if (!"".equals(Pagina.getParamStr(request, "previstoServicoSer"))) {
202       itemEstrtIndResul.setPrevistoServicoSer((ServicoSer) ((ServicoSer) this.buscar(ServicoSer.class, Long.valueOf(Pagina.getParamStr(request, "previstoServicoSer")))));
203     }
204     else {
205       itemEstrtIndResul.setPrevistoServicoSer(null);
206     }
207 
208     // Valor Realizado
209     if (!"".equals(Pagina.getParamStr(request, "realizadoServicoSer"))) {
210       itemEstrtIndResul.setRealizadoServicoSer((ServicoSer) ((ServicoSer) this.buscar(ServicoSer.class, Long.valueOf(Pagina.getParamStr(request, "realizadoServicoSer")))));
211     }
212     else {
213       itemEstrtIndResul.setRealizadoServicoSer(null);
214     }
215   }
216 
217   public void setItemEstrtIndResulCorIettrcor(HttpServletRequest request, ItemEstrtIndResulIettr itemEstrtIndResul) throws ECARException {
218 
219     ItemEstrtIndResulCorIettrcor iettrCor = null;
220     int quantidadeCores = 0;
221     if (Pagina.getParamStr(request, "quantidadeCores") != null && !Pagina.getParamStr(request, "quantidadeCores").equals("")) {
222       quantidadeCores = Integer.valueOf(Pagina.getParamStr(request, "quantidadeCores"));
223     }
224 
225     for (int count = 1; count <= quantidadeCores; count++) {
226 
227       if (Pagina.getParamStr(request, "cor_" + count) != null && !Pagina.getParamStr(request, "cor_" + count).equals("")) {
228 
229         iettrCor = new ItemEstrtIndResulCorIettrcor();
230 
231         iettrCor.setCor((Cor) new CorDao(request).buscar(Cor.class, Long.valueOf(Pagina.getParamStr(request, "cor_" + count))));
232 
233         iettrCor.setItemEstrtIndResulIettr(itemEstrtIndResul);
234 
235         if (!Pagina.getParamStr(request, "valor_" + count).equals("") && !Pagina.getParamStr(request, "valor_" + count).equals("Maior Valor")) {
236           iettrCor.setValorPrimEmailIettrcor(new BigDecimal(Double.valueOf(Util.formataNumero(Pagina.getParamStr(request, "valor_" + count))).doubleValue()));
237         }
238         else if (Pagina.getParamStr(request, "valor_" + count).equals("Maior Valor")) {
239           iettrCor.setValorPrimEmailIettrcor(null);
240           iettrCor.setIndMaiorValorIettrcor("S");
241         }
242         else {
243           iettrCor.setValorPrimEmailIettrcor(null);
244           iettrCor.setIndMaiorValorIettrcor("N");
245         }
246 
247         if (count == 1) {
248           iettrCor.setIndMenorValorIettrcor("S");
249         }
250         else {
251           iettrCor.setIndMenorValorIettrcor("N");
252         }
253 
254         iettrCor.setFrequenciaEnvioEmailIettrcor(Integer.valueOf(Pagina.getParamInt(request, "freq_" + count)));
255         iettrCor.setIndAtivoEnvioEmailIettrcor("S".equals(Pagina.getParamStr(request, "ativo[" + count + "]").trim()) ? "S" : "N");
256 
257         iettrCor.setSequenciaIettrcor(Integer.valueOf(count));
258 
259         if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() == null)
260           itemEstrtIndResul.setItemEstrtIndResulCorIettrcores(new HashSet());
261         itemEstrtIndResul.getItemEstrtIndResulCorIettrcores().add(iettrCor);
262 
263       }
264     }
265 
266     // System.out.println();
267 
268   }
269 
270   /**
271    * Recebe um array contendo códigos de IndResultado e exclui todos os
272    * registros
273    * @param codigosParaExcluir
274    * @throws ECARException
275    */
276   public void excluir(String[] codigosParaExcluir, UsuarioUsu usuario) throws ECARException {
277 
278     Transaction tx = null;
279     List<ItemEstrtIndResulIettr> indicadoresParaExcluir = new ArrayList<ItemEstrtIndResulIettr>();
280 
281     try {
282 
283       tx = session.beginTransaction();
284 
285       for (int i = 0; i < codigosParaExcluir.length; i++) {
286 
287         ItemEstrtIndResulIettr itemEstrtIndResul = (ItemEstrtIndResulIettr) buscar(ItemEstrtIndResulIettr.class, Long.valueOf(codigosParaExcluir[i]));
288 
289         if (verificarExistenciaEmAcompRealFisicoArf(itemEstrtIndResul))
290           throw new ECARException("itemEstrutura.indResultado.exclusao.exiteEmArf", null, new String[] { itemEstrtIndResul.getNomeIettir() });
291 
292         ConfiguracaoDao dao = new ConfiguracaoDao(request);
293         ConfiguracaoCfg config = dao.getConfiguracao();
294 
295         HistoricoMaster historicoMaster = new HistoricoMaster();
296 
297         if ("S".equals(config.getIndGerarHistoricoCfg())) {
298 
299           historicoMaster.setDataHoraHistorico(new Date());
300           historicoMaster.setUsuManutencao(usuario);
301           historicoMaster.setCodReferenciaGeral(itemEstrtIndResul.getItemEstruturaIett().getCodIett());
302           historicoMaster.setHistoricoMotivo((HistoricoMotivo) super.buscar(HistoricoMotivo.class, Long.valueOf(24)));
303           session.save(historicoMaster);
304 
305           HistoricoIettrH iettrh = new HistoricoIettrH();
306           ItemEstrtIndResulIettr iettrhAntesAlteracao = (ItemEstrtIndResulIettr) super.buscar(ItemEstrtIndResulIettr.class, itemEstrtIndResul.getCodIettir());
307           iettrh.setItemEstruturaIett(iettrhAntesAlteracao.getItemEstruturaIett());
308           iettrh.setUnidMedidaIettr(iettrhAntesAlteracao.getUnidMedidaIettr());
309           iettrh.setDescricaoIettir(iettrhAntesAlteracao.getDescricaoIettir());
310           iettrh.setNomeIettir(iettrhAntesAlteracao.getNomeIettir());
311           iettrh.setIndProjecaoIettr(iettrhAntesAlteracao.getIndProjecaoIettr());
312           iettrh.setIndAcumulavelIettr(iettrhAntesAlteracao.getIndAcumulavelIettr());
313           iettrh.setIndTipoQtde(iettrhAntesAlteracao.getIndTipoQtde());
314           iettrh.setIndValorFinalIettr(iettrhAntesAlteracao.getIndValorFinalIettr());
315           iettrh.setIndRealPorLocal(iettrhAntesAlteracao.getIndRealPorLocal());
316           iettrh.setIndPublicoIettr(iettrhAntesAlteracao.getIndPublicoIettr());
317 
318           // alteracao nova tela
319           iettrh.setIndPrevPorLocal(iettrhAntesAlteracao.getIndPrevPorLocal());
320           // alteracao nova tela
321 
322           iettrh.setSisAtributoSatb(iettrhAntesAlteracao.getSisAtributoSatb());
323           iettrh.setFonteIettr(iettrhAntesAlteracao.getFonteIettr());
324           iettrh.setIndiceMaisRecenteIettr(iettrhAntesAlteracao.getIndiceMaisRecenteIettr());
325           iettrh.setDataApuracaoIettr(iettrhAntesAlteracao.getDataApuracaoIettr());
326           iettrh.setFormulaIettr(iettrhAntesAlteracao.getFormulaIettr());
327           iettrh.setPeriodicidadePrdc(iettrhAntesAlteracao.getPeriodicidadePrdc());
328           iettrh.setUsuarioUsuManutencao(usuario);
329           iettrh.setDataUltManutencao(itemEstrtIndResul.getDataUltManutencao());
330           iettrh.setHistoricoMaster(historicoMaster);
331 
332           session.save(iettrh);
333         }
334 
335         indicadoresParaExcluir.add(itemEstrtIndResul);
336 
337         // excluir todas as quantidades previstas
338         List listaAux = new ArrayList();
339         listaAux.addAll(itemEstrtIndResul.getItemEstrutFisicoIettfs());
340 
341         Iterator itAux = listaAux.iterator();
342         while (itAux.hasNext()) {
343           ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itAux.next();
344           itemEstrutFisico.setDataUltManutencao(Data.getDataAtual());
345           itemEstrutFisico.setUsuarioUsuManutencao(usuario);
346 
347           if ("S".equals(config.getIndGerarHistoricoCfg())) {
348 
349             HistoricoIettfH iettfh = new HistoricoIettfH();
350             iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
351             iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
352             iettfh.setItemEstrtIndResulIettr(itemEstrutFisico.getItemEstrtIndResulIettr());
353             iettfh.setExercicioExe(itemEstrutFisico.getExercicioExe());
354             iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
355             iettfh.setUsuManutencao(usuario);
356             iettfh.setIndAtivoIettf(Dominios.NAO);
357             iettfh.setHistoricoMaster(historicoMaster);
358             session.save(iettfh);
359           }
360 
361           session.delete(itemEstrutFisico);
362         }
363 
364       }
365 
366       for (ItemEstrtIndResulIettr obj : indicadoresParaExcluir) {
367         obj.setUsuarioUsuManutencao(usuario);
368         obj.setDataUltManutencao(new Date());
369         obj.setIndAtivoIettr(Dominios.NAO);
370         session.update(obj);
371       }
372       tx.commit();
373 
374     } catch (HibernateException e) {
375       if (tx != null)
376         try {
377           tx.rollback();
378         } catch (HibernateException r) {
379           this.logger.error(r);
380           throw new ECARException("erro.hibernateException");
381         }
382       this.logger.error(e);
383       throw new ECARException(e.getMessage());
384     }
385 
386   }
387 
388   /**
389    * Soma o valor de todos as quantidades de um Indicador de Resultado onde
390    * IndAtivo = 'S'
391    * @param itemEstrtIndResul
392    * @return
393    * @throws ECARException
394    */
395   /*
396    * Comentado: Utilizar método abaixo: getSomaQuantidadePrevista public double
397    * getSomaQuantidades(ItemEstrtIndResulIettr itemEstrtIndResul) throws
398    * ECARException { double total = 0; if
399    * (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) { Iterator it =
400    * itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator(); while
401    * (it.hasNext()) { ItemEstrutFisicoIettf itemEstrutFisico =
402    * (ItemEstrutFisicoIettf) it.next();
403    * if("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) total +=
404    * itemEstrutFisico.getQtdPrevistaIettf().doubleValue(); } } return total; }
405    */
406   /**
407    * Se Indicador de Resultado é Acumulável soma o valor de todos as quantidades
408    * onde IndAtivo = 'S', o retorno é em string; Senão retorna "Não se aplica"
409    * @param itemEstrtIndResul
410    * @return
411    * @throws ECARException
412    */
413   public String getSomaQuantidadePrevista(ItemEstrtIndResulIettr itemEstrtIndResul) throws ECARException {
414     try {
415       String retorno = "0";
416       double total = 0;
417 
418       if ("S".equals(itemEstrtIndResul.getIndAcumulavelIettr())) {
419         if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
420           Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
421           while (it.hasNext()) {
422             ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
423             if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf()))
424               total += itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
425           }
426           retorno = Util.formataMoeda(total);
427         }
428       }
429       else {
430 
431         /*
432          * Anotação ref. Mantis 5016: - Maior: obter o maior valor de
433          * ItemEstrutFisicoIettf - Último: obter valor do último exercício
434          * informado de ItemEstrutFisicoIettf - Não se aplica: soma total
435          * ItemEstrutFisicoIettf
436          */
437 
438         if ("M".equals(itemEstrtIndResul.getIndValorFinalIettr())) { // Maior
439           if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
440             Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
441             double maior = 0;
442             while (it.hasNext()) {
443               ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
444               if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) {
445                 if (itemEstrutFisico.getQtdPrevistaIettf().doubleValue() > maior) {
446                   maior = itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
447                 }
448                 total = maior;
449               }
450             }
451             retorno = Util.formataMoeda(total);
452           }
453         }
454         else if ("U".equals(itemEstrtIndResul.getIndValorFinalIettr())) { // Ultimo
455           double ultimo = 0;
456           ExercicioExe ultimoExe = getMaiorExercicioIndicador(itemEstrtIndResul);
457 
458           if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
459             Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
460             while (it.hasNext()) {
461               ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
462               if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) {
463                 if (itemEstrutFisico.getExercicioExe().getCodExe().equals(ultimoExe.getCodExe())) {
464                   ultimo = itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
465                   break;
466                 }
467               }
468             }
469           }
470           retorno = Util.formataMoeda(ultimo);
471         }
472         else if ("N".equals(itemEstrtIndResul.getIndValorFinalIettr())) { // Não
473                                                                           // se
474                                                                           // aplica
475           /*
476            * if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
477            * Iterator it =
478            * itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator(); while
479            * (it.hasNext()) { ItemEstrutFisicoIettf itemEstrutFisico =
480            * (ItemEstrutFisicoIettf) it.next();
481            * if("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) total
482            * += itemEstrutFisico.getQtdPrevistaIettf().doubleValue(); } retorno
483            * = Util.formataNumeroSemDecimal(total); }
484            */
485           retorno = "";
486         }
487       }
488 
489       return retorno;
490     } catch (Exception e) {
491       this.logger.error(e);
492       throw new ECARException(e);
493     }
494   }
495 
496   /**
497    * Método que retorna a Quantidade Prevista de um Indicador de Resultado em um
498    * Exercício.
499    * @param indResul
500    * @param exercicio
501    * @return
502    * @throws NumberFormatException
503    * @throws ECARException
504    */
505   public double getQtdPrevistoExercicio(ItemEstrtIndResulIettr indResul, ExercicioExe exercicio) {
506     double quant = 0;
507 
508     try {
509       ItemEstrutFisicoIettf qtdPrevista = new ItemEstrutFisicoDao(request).buscar(indResul.getCodIettir(), exercicio.getCodExe());
510 
511       if (qtdPrevista != null) {
512         if ("S".equalsIgnoreCase(qtdPrevista.getIndAtivoIettf())) {
513           quant = qtdPrevista.getQtdPrevistaIettf().doubleValue();
514         }
515       }
516     } catch (Exception e) {
517       /* não realiza nada e devolve quant = 0 */
518     }
519 
520     return quant;
521   }
522 
523   /**
524    * Devolve o maior exercício em que foi cadastrada uma quantidade prevista
525    * para um indicador de resultado
526    * @param indResul
527    * @return
528    * @throws ECARException
529    */
530   public ExercicioExe getMaiorExercicioIndicador(ItemEstrtIndResulIettr indResul) throws ECARException {
531     try {
532       Query q = this.getSession().createQuery("select ieFisico.exercicioExe from ItemEstrutFisicoIettf ieFisico" + " where ieFisico.itemEstrtIndResulIettr.codIettir = ? " + " order by ieFisico.exercicioExe.dataFinalExe desc");
533       q.setLong(0, indResul.getCodIettir().longValue());
534       q.setMaxResults(1);
535       return (ExercicioExe) q.uniqueResult();
536     } catch (HibernateException e) {
537       this.logger.error(e);
538       throw new ECARException(e);
539     }
540   }
541 
542   /**
543    * @author n/c
544    * @param indicativoResultado
545    * @return List
546    * @throws ECARException
547    */
548   public List getExerciosCadastroPermitidos(ItemEstrtIndResulIettr indicativoResultado) throws ECARException {
549     List exercicios = new ExercicioDao(request).listar(ExercicioExe.class, new String[] { "descricaoExe", Dao.ORDEM_ASC });
550     Set quantidades = indicativoResultado.getItemEstrutFisicoIettfs();
551     Iterator it = quantidades.iterator();
552     while (it.hasNext()) {
553       ItemEstrutFisicoIettf ieFisico = (ItemEstrutFisicoIettf) it.next();
554       ExercicioExe exercicioCadastrado = ieFisico.getExercicioExe();
555       exercicios.remove(exercicioCadastrado);
556     }
557     return exercicios;
558   }
559 
560   /**
561    * retorna lista variável de quantidade prevista preenchidas de acordo com os
562    * exercícios
563    * @param request
564    * @return List
565    * @throws ECARException
566    */
567   public List getListaQuantidadePrevista(HttpServletRequest request) throws ECARException {
568     ExercicioDao exercicioDao = new ExercicioDao(request);
569     List listaExercicio = exercicioDao.getExerciciosValidos(Long.valueOf(Pagina.getParamStr(request, "codIett")));
570     Iterator itExercicio = listaExercicio.iterator();
571 
572     List listaQtd = new ArrayList();
573 
574     while (itExercicio.hasNext()) {
575       ExercicioExe exercicio = (ExercicioExe) itExercicio.next();
576 
577       if (!"".equals(Pagina.getParamStr(request, "qtdPrevistaIettf" + exercicio.getCodExe()))) {
578         ItemEstrutFisicoIettf itemEstrutFisico = new ItemEstrutFisicoIettf();
579         ItemEstrutFisicoIettfPK chave = new ItemEstrutFisicoIettfPK();
580 
581         chave.setCodExe(exercicio.getCodExe());
582         itemEstrutFisico.setComp_id(chave);
583         String qtdePrevista = Pagina.getParamStr(request, "qtdPrevistaIettf" + exercicio.getCodExe());
584         if (qtdePrevista == null) {
585           String hideqtde = Pagina.getParamStr(request, "hideqtdPrevistaIettf" + exercicio.getCodExe());
586           itemEstrutFisico.setQtdPrevistaIettf(Double.valueOf(Util.formataNumero(hideqtde)));
587         }
588         else {
589           itemEstrutFisico.setQtdPrevistaIettf(Double.valueOf(Util.formataNumero(qtdePrevista)));
590         }
591 
592         itemEstrutFisico.setIndAtivoIettf("S");
593         itemEstrutFisico.setDataInclusaoIettf(Data.getDataAtual());
594 
595         listaQtd.add(itemEstrutFisico);
596       }
597     }
598 
599     return listaQtd;
600   }
601 
602   /**
603    * @author n/c
604    * @param itemEstrtIndResul
605    * @param listaQtd
606    * @throws ECARException
607    */
608   public void salvar(ItemEstrtIndResulIettr itemEstrtIndResul, List listaQtd, UsuarioUsu usuario) throws ECARException {
609     inicializarLogBean();
610     Transaction tx = null;
611     try {
612       ArrayList objetosInseridos = new ArrayList();
613       tx = session.beginTransaction();
614 
615       // salva o pai
616       session.save(itemEstrtIndResul);
617       objetosInseridos.add(itemEstrtIndResul);
618 
619       Iterator itQtd = listaQtd.iterator();
620       while (itQtd.hasNext()) {
621         ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itQtd.next();
622         itemEstrutFisico.getComp_id().setCodIettir(itemEstrtIndResul.getCodIettir());
623 
624         itemEstrutFisico.setDataUltManutencao(new Date());
625         itemEstrutFisico.setUsuarioUsuManutencao(usuario);
626 
627         session.save(itemEstrutFisico);
628         objetosInseridos.add(itemEstrutFisico);
629       }
630 
631       List listaIettrCor = new ArrayList();
632       if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() != null)
633         listaIettrCor.addAll(itemEstrtIndResul.getItemEstrtIndResulCorIettrcores());
634 
635       Iterator itListaIettrCor = listaIettrCor.iterator();
636       while (itListaIettrCor.hasNext()) {
637         PaiFilho object = (PaiFilho) itListaIettrCor.next();
638         object.atribuirPKPai();
639         // salva os filhos
640         session.save(object);
641         objetosInseridos.add(object);
642       }
643 
644       tx.commit();
645 
646       if (logBean != null) {
647         logBean.setCodigoTransacao(Data.getHoraAtual(false));
648         logBean.setOperacao("INC");
649         Iterator it2 = objetosInseridos.iterator();
650 
651         while (it2.hasNext()) {
652           logBean.setObj(it2.next());
653           loggerAuditoria.info(logBean.toString());
654         }
655       }
656     } catch (HibernateException e) {
657       if (tx != null)
658         try {
659           tx.rollback();
660         } catch (HibernateException r) {
661           this.logger.error(r);
662           throw new ECARException("erro.hibernateException");
663         }
664       this.logger.error(e);
665       throw new ECARException("erro.hibernateException");
666     }
667   }
668 
669   /**
670    * @param itemEstrtIndResul
671    * @param listaQtd
672    * @throws ECARException
673    */
674   public void alterar(ItemEstrtIndResulIettr itemEstrtIndResul, List listaQtd) throws ECARException {
675     Boolean qtdPrevistaBloqueado = false;
676     ItemEstruturaIett itemEstrutura = itemEstrtIndResul.getItemEstruturaIett();
677     if (itemEstrutura.getIndBloqPlanejamentoIett() != null && itemEstrutura.getIndBloqPlanejamentoIett().equals("S")) {
678       EstruturaFuncaoDao estruturaFuncaoDao = new EstruturaFuncaoDao(request);
679       EstruturaFuncaoEttf estruturaFuncaoQtdePrevista = new EstruturaFuncaoEttf();
680       estruturaFuncaoQtdePrevista = (EstruturaFuncaoEttf) estruturaFuncaoDao.getQuantidadesPrevistas(itemEstrutura.getEstruturaEtt());
681       if (estruturaFuncaoQtdePrevista.getIndPodeBloquearEttf().equals("S")) {
682         qtdPrevistaBloqueado = true;
683       }
684     }
685 
686     inicializarLogBean();
687     Transaction tx = null;
688 
689     try {
690 
691       ArrayList objetosInseridos = new ArrayList();
692       ArrayList objetosExcluidos = new ArrayList();
693       tx = session.beginTransaction();
694 
695       // Atualizando a lista de ItemEstrtIndResulCorIettrcor
696 
697       /* apaga os filhos para serem gravados novamente */
698       if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() != null) {
699         Iterator itAtb = itemEstrtIndResul.getItemEstrtIndResulCorIettrcores().iterator();
700         while (itAtb.hasNext()) {
701           ItemEstrtIndResulCorIettrcor iettrCor = (ItemEstrtIndResulCorIettrcor) itAtb.next();
702           session.delete(iettrCor);
703           // objetos.add(iettrCor);
704         }
705       }
706       itemEstrtIndResul.setItemEstrtIndResulCorIettrcores(null);
707       this.setItemEstrtIndResulCorIettrcor(request, itemEstrtIndResul);
708 
709       List filhos = new ArrayList();
710       if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() != null)
711         filhos.addAll(itemEstrtIndResul.getItemEstrtIndResulCorIettrcores());
712 
713       Iterator iterator = filhos.iterator();
714 
715       // salva os filhos
716       while (iterator.hasNext()) {
717         PaiFilho object = (PaiFilho) iterator.next();
718         object.atribuirPKPai();
719         session.save(object);
720       }
721 
722       // *************
723 
724       ConfiguracaoDao dao = new ConfiguracaoDao(request);
725       ConfiguracaoCfg config = dao.getConfiguracao();
726 
727       HistoricoMaster historicoMaster = new HistoricoMaster();
728 
729       if ("S".equals(config.getIndGerarHistoricoCfg())) {
730 
731         historicoMaster.setDataHoraHistorico(new Date());
732         historicoMaster.setUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
733         historicoMaster.setCodReferenciaGeral(itemEstrtIndResul.getItemEstruturaIett().getCodIett());
734         historicoMaster.setHistoricoMotivo((HistoricoMotivo) super.buscar(HistoricoMotivo.class, Long.valueOf(23)));
735         session.save(historicoMaster);
736 
737         HistoricoIettrH iettrh = new HistoricoIettrH();
738         ItemEstrtIndResulIettr iettrhAntesAlteracao = (ItemEstrtIndResulIettr) super.buscar(ItemEstrtIndResulIettr.class, itemEstrtIndResul.getCodIettir());
739         iettrh.setItemEstruturaIett(iettrhAntesAlteracao.getItemEstruturaIett());
740         iettrh.setUnidMedidaIettr(iettrhAntesAlteracao.getUnidMedidaIettr());
741         iettrh.setCodUnidMedidaIettr(iettrhAntesAlteracao.getCodUnidMedidaIettr());
742         iettrh.setDescricaoIettir(iettrhAntesAlteracao.getDescricaoIettir());
743         iettrh.setNomeIettir(iettrhAntesAlteracao.getNomeIettir());
744         iettrh.setIndProjecaoIettr(iettrhAntesAlteracao.getIndProjecaoIettr());
745         iettrh.setIndAcumulavelIettr(iettrhAntesAlteracao.getIndAcumulavelIettr());
746         iettrh.setIndPublicoIettr(iettrhAntesAlteracao.getIndPublicoIettr());
747         iettrh.setIndTipoQtde(iettrhAntesAlteracao.getIndTipoQtde());
748         iettrh.setIndValorFinalIettr(iettrhAntesAlteracao.getIndValorFinalIettr());
749         iettrh.setIndRealPorLocal(iettrhAntesAlteracao.getIndRealPorLocal());
750 
751         // alteracao nova tela
752         iettrh.setIndPrevPorLocal(iettrhAntesAlteracao.getIndPrevPorLocal());
753         // alteracao nova tela
754 
755         iettrh.setSisAtributoSatb(iettrhAntesAlteracao.getSisAtributoSatb());
756         iettrh.setFonteIettr(iettrhAntesAlteracao.getFonteIettr());
757         iettrh.setIndiceMaisRecenteIettr(iettrhAntesAlteracao.getIndiceMaisRecenteIettr());
758         iettrh.setDataApuracaoIettr(iettrhAntesAlteracao.getDataApuracaoIettr());
759         iettrh.setFormulaIettr(iettrhAntesAlteracao.getFormulaIettr());
760         iettrh.setPeriodicidadePrdc(iettrhAntesAlteracao.getPeriodicidadePrdc());
761         iettrh.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
762         iettrh.setDataUltManutencao(itemEstrtIndResul.getDataUltManutencao());
763         iettrh.setHistoricoMaster(historicoMaster);
764 
765         session.save(iettrh);
766       }
767 
768       if (!qtdPrevistaBloqueado) {
769         // excluir todas as quantidades previstas
770         List listaAux = new ArrayList();
771         listaAux.addAll(itemEstrtIndResul.getItemEstrutFisicoIettfs());
772 
773         Iterator itAux = listaAux.iterator();
774 
775         while (itAux.hasNext()) {
776           ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itAux.next();
777           itemEstrutFisico.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
778           itemEstrutFisico.setDataUltManutencao(new Date());
779 
780           if ("S".equals(config.getIndGerarHistoricoCfg())) {
781 
782             HistoricoIettfH iettfh = new HistoricoIettfH();
783 
784             iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
785             iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
786             iettfh.setItemEstrtIndResulIettr(itemEstrutFisico.getItemEstrtIndResulIettr());
787             iettfh.setExercicioExe(itemEstrutFisico.getExercicioExe());
788             iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
789             iettfh.setUsuManutencao(itemEstrutFisico.getUsuarioUsuManutencao());
790             iettfh.setIndAtivoIettf(Dominios.NAO);
791             iettfh.setHistoricoMaster(historicoMaster);
792             session.save(iettfh);
793           }
794 
795           objetosExcluidos.add(itemEstrutFisico);
796 
797           session.delete(itemEstrutFisico);
798         }
799       }
800 
801       if (logBean != null) {
802         logBean.setCodigoTransacao(Data.getHoraAtual(false));
803         logBean.setOperacao("EXC");
804         Iterator it = objetosExcluidos.iterator();
805 
806         while (it.hasNext()) {
807           logBean.setObj(it.next());
808           loggerAuditoria.info(logBean.toString());
809         }
810       }
811 
812       // salva o pai
813       session.update(itemEstrtIndResul);
814 
815       if (logBean != null) {
816         logBean.setCodigoTransacao(Data.getHoraAtual(false));
817         logBean.setObj(itemEstrtIndResul);
818         logBean.setOperacao("ALT");
819         loggerAuditoria.info(logBean.toString());
820       }
821 
822       if (!qtdPrevistaBloqueado) {
823         Iterator itQtd = listaQtd.iterator();
824         while (itQtd.hasNext()) {
825           ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itQtd.next();
826           itemEstrutFisico.getComp_id().setCodIettir(itemEstrtIndResul.getCodIettir());
827           itemEstrutFisico.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
828           itemEstrutFisico.setDataUltManutencao(new Date());
829           // itemEstrutFisico.setIndExclusaoPosHistorico(Boolean.FALSE);
830           session.save(itemEstrutFisico);
831 
832           if ("S".equals(config.getIndGerarHistoricoCfg())) {
833 
834             HistoricoIettfH iettfh = new HistoricoIettfH();
835             iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
836             iettfh.setItemEstrtIndResulIettr((ItemEstrtIndResulIettr) this.buscar(ItemEstrtIndResulIettr.class, itemEstrutFisico.getComp_id().getCodIettir()));
837             iettfh.setExercicioExe((ExercicioExe) this.buscar(ExercicioExe.class, itemEstrutFisico.getComp_id().getCodExe()));
838             iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
839             iettfh.setUsuManutencao(itemEstrutFisico.getUsuarioUsuManutencao());
840             iettfh.setIndAtivoIettf(itemEstrutFisico.getIndAtivoIettf());
841             iettfh.setHistoricoMaster(historicoMaster);
842             iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
843             session.save(iettfh);
844           }
845 
846           objetosInseridos.add(itemEstrutFisico);
847         }
848       }
849 
850       tx.commit();
851 
852       if (logBean != null) {
853         logBean.setCodigoTransacao(Data.getHoraAtual(false));
854         logBean.setOperacao("INC");
855         Iterator it2 = objetosInseridos.iterator();
856 
857         while (it2.hasNext()) {
858           logBean.setObj(it2.next());
859           loggerAuditoria.info(logBean.toString());
860         }
861       }
862     } catch (HibernateException e) {
863       if (tx != null)
864         try {
865           tx.rollback();
866         } catch (HibernateException r) {
867           this.logger.error(r);
868           throw new ECARException("erro.hibernateException");
869         }
870       this.logger.error(e);
871       throw new ECARException("erro.hibernateException");
872     }
873   }
874 
875   /**
876    * Sobrecarga do método "alterar"
877    * @param itemEstrtIndResul
878    * @param listaQtd
879    * @param iettrCor
880    * @throws ECARException
881    */
882   public void alterar(ItemEstrtIndResulIettr itemEstrtIndResul, List listaQtd, List iettrCor) throws ECARException {
883     Boolean qtdPrevistaBloqueado = false;
884     ItemEstruturaIett itemEstrutura = itemEstrtIndResul.getItemEstruturaIett();
885     if (itemEstrutura.getIndBloqPlanejamentoIett() != null && itemEstrutura.getIndBloqPlanejamentoIett().equals("S")) {
886       EstruturaFuncaoDao estruturaFuncaoDao = new EstruturaFuncaoDao(request);
887       EstruturaFuncaoEttf estruturaFuncaoQtdePrevista = new EstruturaFuncaoEttf();
888       estruturaFuncaoQtdePrevista = (EstruturaFuncaoEttf) estruturaFuncaoDao.getQuantidadesPrevistas(itemEstrutura.getEstruturaEtt());
889       if (estruturaFuncaoQtdePrevista.getIndPodeBloquearEttf().equals("S")) {
890         qtdPrevistaBloqueado = true;
891       }
892     }
893 
894     inicializarLogBean();
895     Transaction tx = null;
896 
897     try {
898 
899       ArrayList objetosInseridos = new ArrayList();
900       ArrayList objetosExcluidos = new ArrayList();
901       tx = session.beginTransaction();
902 
903       // Atualizando a lista de ItemEstrtIndResulCorIettrcor
904       List listIettrcor = new ArrayList();
905       if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() != null)
906         listIettrcor.addAll(itemEstrtIndResul.getItemEstrtIndResulCorIettrcores());
907 
908       Iterator itIettrcor = listIettrcor.iterator();
909       while (itIettrcor.hasNext()) {
910         ItemEstrtIndResulCorIettrcor iettrcor = (ItemEstrtIndResulCorIettrcor) itIettrcor.next();
911         session.update(iettrcor);
912       }
913 
914       ConfiguracaoDao dao = new ConfiguracaoDao(request);
915       ConfiguracaoCfg config = dao.getConfiguracao();
916 
917       HistoricoMaster historicoMaster = new HistoricoMaster();
918 
919       if ("S".equals(config.getIndGerarHistoricoCfg())) {
920 
921         historicoMaster.setDataHoraHistorico(new Date());
922         historicoMaster.setUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
923         historicoMaster.setCodReferenciaGeral(itemEstrtIndResul.getItemEstruturaIett().getCodIett());
924         historicoMaster.setHistoricoMotivo((HistoricoMotivo) super.buscar(HistoricoMotivo.class, Long.valueOf(23)));
925         session.save(historicoMaster);
926 
927         HistoricoIettrH iettrh = new HistoricoIettrH();
928         ItemEstrtIndResulIettr iettrhAntesAlteracao = (ItemEstrtIndResulIettr) super.buscar(ItemEstrtIndResulIettr.class, itemEstrtIndResul.getCodIettir());
929         iettrh.setItemEstruturaIett(iettrhAntesAlteracao.getItemEstruturaIett());
930         iettrh.setUnidMedidaIettr(iettrhAntesAlteracao.getUnidMedidaIettr());
931         iettrh.setCodUnidMedidaIettr(iettrhAntesAlteracao.getCodUnidMedidaIettr());
932         iettrh.setDescricaoIettir(iettrhAntesAlteracao.getDescricaoIettir());
933         iettrh.setNomeIettir(iettrhAntesAlteracao.getNomeIettir());
934         iettrh.setIndProjecaoIettr(iettrhAntesAlteracao.getIndProjecaoIettr());
935         iettrh.setIndAcumulavelIettr(iettrhAntesAlteracao.getIndAcumulavelIettr());
936         iettrh.setIndPublicoIettr(iettrhAntesAlteracao.getIndPublicoIettr());
937         iettrh.setIndTipoQtde(iettrhAntesAlteracao.getIndTipoQtde());
938         iettrh.setIndValorFinalIettr(iettrhAntesAlteracao.getIndValorFinalIettr());
939         iettrh.setIndRealPorLocal(iettrhAntesAlteracao.getIndRealPorLocal());
940 
941         // alteracao nova tela
942         iettrh.setIndPrevPorLocal(iettrhAntesAlteracao.getIndPrevPorLocal());
943         // alteracao nova tela
944 
945         iettrh.setSisAtributoSatb(iettrhAntesAlteracao.getSisAtributoSatb());
946         iettrh.setFonteIettr(iettrhAntesAlteracao.getFonteIettr());
947         iettrh.setIndiceMaisRecenteIettr(iettrhAntesAlteracao.getIndiceMaisRecenteIettr());
948         iettrh.setDataApuracaoIettr(iettrhAntesAlteracao.getDataApuracaoIettr());
949         iettrh.setFormulaIettr(iettrhAntesAlteracao.getFormulaIettr());
950         iettrh.setPeriodicidadePrdc(iettrhAntesAlteracao.getPeriodicidadePrdc());
951         iettrh.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
952         iettrh.setDataUltManutencao(itemEstrtIndResul.getDataUltManutencao());
953         iettrh.setHistoricoMaster(historicoMaster);
954 
955         session.save(iettrh);
956       }
957 
958       if (!qtdPrevistaBloqueado) {
959         // excluir todas as quantidades previstas
960         List listaAux = new ArrayList();
961         listaAux.addAll(itemEstrtIndResul.getItemEstrutFisicoIettfs());
962 
963         Iterator itAux = listaAux.iterator();
964 
965         while (itAux.hasNext()) {
966           ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itAux.next();
967           itemEstrutFisico.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
968           itemEstrutFisico.setDataUltManutencao(new Date());
969 
970           if ("S".equals(config.getIndGerarHistoricoCfg())) {
971 
972             HistoricoIettfH iettfh = new HistoricoIettfH();
973 
974             iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
975             iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
976             iettfh.setItemEstrtIndResulIettr(itemEstrutFisico.getItemEstrtIndResulIettr());
977             iettfh.setExercicioExe(itemEstrutFisico.getExercicioExe());
978             iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
979             iettfh.setUsuManutencao(itemEstrutFisico.getUsuarioUsuManutencao());
980             iettfh.setIndAtivoIettf(Dominios.NAO);
981             iettfh.setHistoricoMaster(historicoMaster);
982             session.save(iettfh);
983           }
984 
985           objetosExcluidos.add(itemEstrutFisico);
986 
987           session.delete(itemEstrutFisico);
988         }
989       }
990 
991       if (logBean != null) {
992         logBean.setCodigoTransacao(Data.getHoraAtual(false));
993         logBean.setOperacao("EXC");
994         Iterator it = objetosExcluidos.iterator();
995 
996         while (it.hasNext()) {
997           logBean.setObj(it.next());
998           loggerAuditoria.info(logBean.toString());
999         }
1000       }
1001 
1002       // salva o pai
1003       session.update(itemEstrtIndResul);
1004 
1005       if (logBean != null) {
1006         logBean.setCodigoTransacao(Data.getHoraAtual(false));
1007         logBean.setObj(itemEstrtIndResul);
1008         logBean.setOperacao("ALT");
1009         loggerAuditoria.info(logBean.toString());
1010       }
1011 
1012       if (!qtdPrevistaBloqueado) {
1013         Iterator itQtd = listaQtd.iterator();
1014         while (itQtd.hasNext()) {
1015           ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itQtd.next();
1016           itemEstrutFisico.getComp_id().setCodIettir(itemEstrtIndResul.getCodIettir());
1017           itemEstrutFisico.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
1018           itemEstrutFisico.setDataUltManutencao(new Date());
1019           // itemEstrutFisico.setIndExclusaoPosHistorico(Boolean.FALSE);
1020           session.save(itemEstrutFisico);
1021 
1022           HistoricoIettfH iettfh = new HistoricoIettfH();
1023           iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
1024           iettfh.setItemEstrtIndResulIettr((ItemEstrtIndResulIettr) this.buscar(ItemEstrtIndResulIettr.class, itemEstrutFisico.getComp_id().getCodIettir()));
1025           iettfh.setExercicioExe((ExercicioExe) this.buscar(ExercicioExe.class, itemEstrutFisico.getComp_id().getCodExe()));
1026           iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
1027           iettfh.setUsuManutencao(itemEstrutFisico.getUsuarioUsuManutencao());
1028           iettfh.setIndAtivoIettf(itemEstrutFisico.getIndAtivoIettf());
1029           iettfh.setHistoricoMaster(historicoMaster);
1030           iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
1031           session.save(iettfh);
1032 
1033           objetosInseridos.add(itemEstrutFisico);
1034         }
1035       }
1036 
1037       tx.commit();
1038 
1039       if (logBean != null) {
1040         logBean.setCodigoTransacao(Data.getHoraAtual(false));
1041         logBean.setOperacao("INC");
1042         Iterator it2 = objetosInseridos.iterator();
1043 
1044         while (it2.hasNext()) {
1045           logBean.setObj(it2.next());
1046           loggerAuditoria.info(logBean.toString());
1047         }
1048       }
1049     } catch (HibernateException e) {
1050       if (tx != null)
1051         try {
1052           tx.rollback();
1053         } catch (HibernateException r) {
1054           this.logger.error(r);
1055           throw new ECARException("erro.hibernateException");
1056         }
1057       this.logger.error(e);
1058       throw new ECARException("erro.hibernateException");
1059     }
1060   }
1061 
1062   /**
1063    * Verifica se o indicador existe em algum objeto AcompRealFisicoArf
1064    * @param ItemEstrtIndResulIettr indicador
1065    * @return boolean (true - existe/false - não existe)
1066    */
1067   public boolean verificarExistenciaEmAcompRealFisicoArf(ItemEstrtIndResulIettr indicador) {
1068     boolean existe = false;
1069 
1070     if (indicador.getAcompRealFisicoArfs() != null && !indicador.getAcompRealFisicoArfs().isEmpty()) {
1071       Iterator it = indicador.getAcompRealFisicoArfs().iterator();
1072 
1073       while (it.hasNext()) {
1074         AcompRealFisicoArf arf = (AcompRealFisicoArf) it.next();
1075 
1076         if (arf.getQtdRealizadaArf() != null && arf.getQtdRealizadaArf().doubleValue() > 0) {
1077           return true;
1078         }
1079       }
1080     }
1081 
1082     return existe;
1083   }
1084 
1085   public String getUnidadeUsada(ItemEstrtIndResulIettr itemEstrtIndResul) {
1086     if (itemEstrtIndResul != null) {
1087       if (itemEstrtIndResul.getCodUnidMedidaIettr() != null) {
1088         return itemEstrtIndResul.getCodUnidMedidaIettr().getDescricaoSatb();
1089       }
1090       else {
1091         return itemEstrtIndResul.getUnidMedidaIettr();
1092       }
1093     }
1094     return "";
1095   }
1096 
1097   /**
1098    * Retorna os nomes dos Gráficos de Grupo de um determinado ItemEstrutura e os
1099    * públicos definidos pelo sistema.
1100    * @param itemEstrtIndResul
1101    * @return
1102    */
1103   public List retornaNomesGraficoGrupo(ItemEstruturaIett iett) throws ECARException {
1104     List retorno = new ArrayList();
1105 
1106     if (iett != null) {
1107       try {
1108         Query q = this.getSession().createQuery("select distinct iettIndRes.labelGraficoGrupoIettir from ItemEstrtIndResulIettr iettIndRes " + "where (iettIndRes.itemEstruturaIett.codIett = :codIett or iettIndRes.indPublicoIettr like :indPublico) " + "and iettIndRes.labelGraficoGrupoIettir is not null " + "and iettIndRes.indAtivoIettr like :indAtivo");
1109         q.setLong("codIett", iett.getCodIett().longValue());
1110         q.setString("indPublico", "S");
1111         q.setString("indAtivo", "S");
1112 
1113         retorno = q.list();
1114       } catch (HibernateException e) {
1115         this.logger.error(e);
1116         throw new ECARException(e);
1117       }
1118     }
1119 
1120     return retorno;
1121   }
1122 
1123   /**
1124    * Retorna todos os indicadores do item que pertencem ao mesmo
1125    * "Grupo de Gráfico do Indicador" e todos os indicadores que, apesar de não
1126    * serem do mesmo item foram definidos como públicos e pertencem ao mesmo
1127    * "Grupo de Gráfico do Indicador".
1128    * @param itemEstrtIndResulIettr
1129    * @return
1130    * @throws ECARException
1131    */
1132   public List retornaIndicadoresGraficoGrupo(ItemEstrtIndResulIettr itemEstrtIndResulIettr) throws ECARException {
1133     List retorno = new ArrayList();
1134 
1135     if (itemEstrtIndResulIettr != null && itemEstrtIndResulIettr.getItemEstruturaIett() != null) {
1136       try {
1137         Query q = this.getSession().createQuery("select distinct iettIndRes from ItemEstrtIndResulIettr iettIndRes " + "where (iettIndRes.itemEstruturaIett.codIett = :codIett or iettIndRes.indPublicoIettr like :indPublico) " + "and iettIndRes.labelGraficoGrupoIettir like :labelGrupo " + "and iettIndRes.indAtivoIettr like :indAtivo");
1138         q.setLong("codIett", itemEstrtIndResulIettr.getItemEstruturaIett().getCodIett().longValue());
1139         q.setString("indPublico", "S");
1140         q.setString("labelGrupo", itemEstrtIndResulIettr.getLabelGraficoGrupoIettir());
1141         q.setString("indAtivo", "S");
1142 
1143         retorno = q.list();
1144       } catch (HibernateException e) {
1145         this.logger.error(e);
1146         throw new ECARException(e);
1147       }
1148     }
1149     return retorno;
1150   }
1151 
1152   /**
1153    * Verifica no banco a existência de algum indicador com o nome e grupo
1154    * passado como parâmetro e retorna o código iett.
1155    * @param nomeIettir
1156    * @param labelGraficoGrupoIettir
1157    * @return Retorna o código iett do item encontrado.
1158    * @throws ECARException
1159    */
1160   public long verificarExistenciaNomeIndicadorGraficoGrupo(String nomeIettir, String labelGraficoGrupoIettir) throws ECARException {
1161     List indicadoresGrafico = new ArrayList();
1162 
1163     try {
1164       Query q = this.getSession().createQuery("select distinct iettIndRes from ItemEstrtIndResulIettr iettIndRes " + "where (upper(iettIndRes.nomeIettir) = upper(:nomeIettir) and " + "		upper(iettIndRes.labelGraficoGrupoIettir) = upper(:labelGraficoGrupoIettir) and" + "		iettIndRes.indAtivoIettr = :indAtivo)");
1165       q.setString("nomeIettir", nomeIettir);
1166       q.setString("labelGraficoGrupoIettir", labelGraficoGrupoIettir);
1167       q.setString("indAtivo", "S");
1168 
1169       indicadoresGrafico = q.list();
1170 
1171       if (indicadoresGrafico.size() > 0) {
1172         ItemEstrtIndResulIettr indResul = (ItemEstrtIndResulIettr) indicadoresGrafico.get(0);
1173         return indResul.getCodIettir();
1174       }
1175 
1176       // Retorna -1 caso nenhum indicador seja encontrado.
1177       return -1;
1178 
1179     } catch (HibernateException e) {
1180       this.logger.error(e);
1181       throw new ECARException(e);
1182     }
1183   }
1184 
1185 }// fim classe