View Javadoc

1   /*
2    * Created on 20/04/2005
3    */
4   package ecar.dao;
5   
6   import java.text.SimpleDateFormat;
7   import java.util.ArrayList;
8   import java.util.Calendar;
9   import java.util.Collections;
10  import java.util.Date;
11  import java.util.Iterator;
12  import java.util.List;
13  
14  import javax.servlet.http.HttpServletRequest;
15  
16  import org.hibernate.Criteria;
17  import org.hibernate.HibernateException;
18  import org.hibernate.Query;
19  import org.hibernate.Transaction;
20  import org.hibernate.criterion.Restrictions;
21  
22  import comum.database.Dao;
23  import comum.util.Data;
24  import comum.util.Pagina;
25  
26  import ecar.bean.DetalhamentoTotaisConta;
27  import ecar.exception.ECARException;
28  import ecar.login.SegurancaECAR;
29  import ecar.pojo.ConfigExecFinanCef;
30  import ecar.pojo.ConfigSisExecFinanCsef;
31  import ecar.pojo.ConfigSisExecFinanCsefv;
32  import ecar.pojo.ConfiguracaoCfg;
33  import ecar.pojo.EfItemEstContaEfiec;
34  import ecar.pojo.EfItemEstRealizadoEfier;
35  import ecar.pojo.ExercicioExe;
36  import gov.pr.celepar.framework.exception.ApplicationException;
37  
38  /**
39   * @author garten
40   */
41  public class ItemEstruturaRealizadoDao extends Dao {
42  
43    public ItemEstruturaRealizadoDao(HttpServletRequest request) {
44      super();
45      this.request = request;
46    }
47  
48    /**
49     * @param item
50     * @param request
51     * @throws ECARException
52     */
53    public void setEfItemEstRealizadoEfier(EfItemEstRealizadoEfier item, HttpServletRequest request) throws ECARException {
54      ConfigSisExecFinanCsefvDao versaoDao = new ConfigSisExecFinanCsefvDao(null);
55      ItemEstruturaContaOrcamentoDao itemEstContaDao = new ItemEstruturaContaOrcamentoDao(null);
56  
57      SegurancaECAR usuarioLogado = (SegurancaECAR) request.getSession().getAttribute("seguranca");
58  
59      Long anoReferencia = Long.valueOf(Pagina.getParamStr(request, "anoReferenciaEfier"));
60      Long mesReferencia = Long.valueOf(Pagina.getParamStr(request, "mesReferenciaEfier"));
61  
62      item.setAnoReferenciaEfier(anoReferencia);
63      item.setMesReferenciaEfier(mesReferencia);
64  
65      ConfigSisExecFinanCsefv versao = (ConfigSisExecFinanCsefv) versaoDao.buscar(ConfigSisExecFinanCsefv.class, Long.valueOf(Pagina.getParamStr(request, "codVersaoEscolhida")));
66      if (versao == null)
67        throw new ECARException("integracaoFinanceira.manual.inclusao.versaoInexistente");
68  
69      // TODO MANTIS 0011017
70      // INICIO - MANTIS 0011017
71      item.setConfigSisExecFinanCsefv(versao);
72      // FIM - MANTIS 0011017
73  
74      // Verificar se o sistema permite inclusão manual
75      // ConfigSisExecFinanCsef sistema = (ConfigSisExecFinanCsef) new
76      // ConfigSisExecFinanDao(request).buscar(ConfigSisExecFinanCsef.class,
77      // Long.valueOf(Pagina.getParamStr(request, "configSisExecFinanCsef")));
78      ConfigSisExecFinanCsef sistema = versao.getConfigSisExecFinanCsef();
79      if (!"S".equals(sistema.getIndPermiteValormanualorcCsef()))
80        throw new ECARException("integracaoFinanceira.manual.inclusao.naoPermiteManual");
81  
82      List estruturasContabil = new ConfigExecFinanDao(request).getConfigExecFinanByVersao(versao);
83      String estrutura = "";
84      if (estruturasContabil != null) {
85  
86        Iterator it = estruturasContabil.iterator();
87        while (it.hasNext()) {
88          ConfigExecFinanCef estruturaContabil = (ConfigExecFinanCef) it.next();
89          if (estrutura.length() > 0)
90            estrutura += " ";
91          // estrutura += Pagina.getParamStr(request, "e" +
92          // estruturaContabil.getCodCef().toString() + mes + ano + verSistema);
93          estrutura += Pagina.getParamStr(request, "e" + estruturaContabil.getCodCef().toString() + String.valueOf(versao.getCodCsefv()));
94        }
95        /*
96         * Por causa destes ifs neste método os valores da Estrutura não são
97         * perdidos na alteração. Motivo: na tela de alterar conta todos os
98         * campos, com a exceção do Acumulado estão desabilitados e por isso não
99         * são enviados por request. Quando faço essa comparação, ao verificar que
100        * estes campos estão vazios, mantenho os valores existentes originalmente
101        * no objeto conta ( no caso são os valores que vieram do banco ) e por
102        * isso não são perdidos mesmo que venha vazio no request.
103        */
104       if (!"".equals(estrutura)) {
105         List contasOrcamentarias = itemEstContaDao.listar(EfItemEstContaEfiec.class, new String[] { "contaSistemaOrcEfiec", "asc" });
106         estrutura = estrutura.trim();
107         boolean existeConta = false;
108         Iterator itConta = contasOrcamentarias.iterator();
109         while (itConta.hasNext()) {
110           EfItemEstContaEfiec con = (EfItemEstContaEfiec) itConta.next();
111           if (estrutura.equals(con.getContaSistemaOrcEfiec())) {
112             existeConta = true;
113             break;
114           }
115         }
116 
117         if (!existeConta) {
118           // throw new
119           // ECARException("integracaoFinanceira.manual.inclusao.contaInexistente");
120         }
121 
122         item.setContaSistemaOrcEfier(estrutura.toUpperCase());
123       }
124     }
125 
126     item.setDataHoraInfoEfier(Data.getDataAtual());
127 
128     if (item.getDataInclusaoEfier() == null)
129       item.setDataInclusaoEfier(Data.getDataAtual());
130 
131     item.setIndContabilidadeEfier("A");
132     item.setIndManualEfier(Pagina.getParamStr(request, "indManualEfier"));
133 
134     item.setUsuarioUsu(usuarioLogado.getUsuario());
135 
136     String valor1 = Pagina.getParamStr(request, "valor1Efier");
137     if (!"".equals(valor1)) {
138       item.setValor1Efier(new Double(valor1.replaceAll(",", ".")));
139     }
140 
141     String valor2 = Pagina.getParamStr(request, "valor2Efier");
142     if (!"".equals(valor2)) {
143       item.setValor2Efier(new Double(valor2.replaceAll(",", ".")));
144     }
145 
146     String valor3 = Pagina.getParamStr(request, "valor3Efier");
147     if (!"".equals(valor3)) {
148       item.setValor3Efier(new Double(valor3.replaceAll(",", ".")));
149     }
150 
151     String valor4 = Pagina.getParamStr(request, "valor4Efier");
152     if (!"".equals(valor4)) {
153       item.setValor4Efier(new Double(valor4.replaceAll(",", ".")));
154     }
155 
156     String valor5 = Pagina.getParamStr(request, "valor5Efier");
157     if (!"".equals(valor5)) {
158       item.setValor5Efier(new Double(valor5.replaceAll(",", ".")));
159     }
160 
161     String valor6 = Pagina.getParamStr(request, "valor6Efier");
162     if (!"".equals(valor6)) {
163       item.setValor6Efier(new Double(valor6.replaceAll(",", ".")));
164     }
165 
166   }
167 
168   /**
169    * @param item
170    * @param request
171    * @param iteracao numero da iteracao para inserção de multiplos parametros
172    * @throws ECARException
173    */
174   public void setEfItemEstRealizadoEfier(EfItemEstRealizadoEfier item, HttpServletRequest request, int iteracao) throws ECARException {
175     ConfigSisExecFinanCsefvDao versaoDao = new ConfigSisExecFinanCsefvDao(null);
176     ItemEstruturaContaOrcamentoDao itemEstContaDao = new ItemEstruturaContaOrcamentoDao(null);
177 
178     SegurancaECAR usuarioLogado = (SegurancaECAR) request.getSession().getAttribute("seguranca");
179 
180     Long anoReferencia = Long.valueOf(Pagina.getParamStr(request, "anoReferenciaEfier"));
181     Long mesReferencia = Long.valueOf(Pagina.getParamStr(request, "mesReferenciaEfier"));
182 
183     item.setAnoReferenciaEfier(anoReferencia);
184     item.setMesReferenciaEfier(mesReferencia);
185 
186     ConfigSisExecFinanCsefv versao = (ConfigSisExecFinanCsefv) versaoDao.buscar(ConfigSisExecFinanCsefv.class, Long.valueOf(Pagina.getParamStr(request, "codVersaoEscolhida")));
187     if (versao == null)
188       throw new ECARException("integracaoFinanceira.manual.inclusao.versaoInexistente");
189 
190     // TODO MANTIS 0011017
191     // INICIO - MANTIS 0011017
192     item.setConfigSisExecFinanCsefv(versao);
193     // FIM - MANTIS 0011017
194 
195     // Verificar se o sistema permite inclusão manual
196     // ConfigSisExecFinanCsef sistema = (ConfigSisExecFinanCsef) new
197     // ConfigSisExecFinanDao(request).buscar(ConfigSisExecFinanCsef.class,
198     // Long.valueOf(Pagina.getParamStr(request, "configSisExecFinanCsef")));
199     ConfigSisExecFinanCsef sistema = versao.getConfigSisExecFinanCsef();
200     if (!"S".equals(sistema.getIndPermiteValormanualorcCsef()))
201       throw new ECARException("integracaoFinanceira.manual.inclusao.naoPermiteManual");
202 
203     List estruturasContabil = new ConfigExecFinanDao(request).getConfigExecFinanByVersao(versao);
204     String estrutura = "";
205     if (estruturasContabil != null) {
206 
207       Iterator it = estruturasContabil.iterator();
208       while (it.hasNext()) {
209         ConfigExecFinanCef estruturaContabil = (ConfigExecFinanCef) it.next();
210         if (estrutura.length() > 0)
211           estrutura += " ";
212         // estrutura += Pagina.getParamStr(request, "e" +
213         // estruturaContabil.getCodCef().toString() + mes + ano + verSistema);
214         // estrutura += Pagina.getParamStr(request, "e" +
215         // estruturaContabil.getCodCef().toString() +
216         // String.valueOf(versao.getCodCsefv()));
217         estrutura += request.getParameterValues("e" + estruturaContabil.getCodCef().toString() + String.valueOf(versao.getCodCsefv()))[iteracao - 1];
218       }
219       /*
220        * Por causa destes ifs neste método os valores da Estrutura não são
221        * perdidos na alteração. Motivo: na tela de alterar conta todos os
222        * campos, com a exceção do Acumulado estão desabilitados e por isso não
223        * são enviados por request. Quando faço essa comparação, ao verificar que
224        * estes campos estão vazios, mantenho os valores existentes originalmente
225        * no objeto conta ( no caso são os valores que vieram do banco ) e por
226        * isso não são perdidos mesmo que venha vazio no request.
227        */
228       if (!"".equals(estrutura)) {
229         List contasOrcamentarias = itemEstContaDao.listar(EfItemEstContaEfiec.class, new String[] { "contaSistemaOrcEfiec", "asc" });
230         estrutura = estrutura.trim();
231         boolean existeConta = false;
232         Iterator itConta = contasOrcamentarias.iterator();
233         while (itConta.hasNext()) {
234           EfItemEstContaEfiec con = (EfItemEstContaEfiec) itConta.next();
235           if (estrutura.equals(con.getContaSistemaOrcEfiec())) {
236             existeConta = true;
237             break;
238           }
239         }
240 
241         if (!existeConta) {
242           // throw new
243           // ECARException("integracaoFinanceira.manual.inclusao.contaInexistente");
244         }
245 
246         item.setContaSistemaOrcEfier(estrutura.toUpperCase());
247       }
248     }
249 
250     item.setDataHoraInfoEfier(Data.getDataAtual());
251 
252     if (item.getDataInclusaoEfier() == null)
253       item.setDataInclusaoEfier(Data.getDataAtual());
254 
255     item.setIndContabilidadeEfier("A");
256     item.setIndManualEfier(Pagina.getParamStr(request, "indManualEfier"));
257 
258     item.setUsuarioUsu(usuarioLogado.getUsuario());
259 
260     String valor1 = Pagina.getParamStr(request, "valor" + iteracao + "_1Efier");
261     if (!"".equals(valor1)) {
262       item.setValor1Efier(new Double(valor1.replaceAll(",", ".")));
263     }
264 
265     String valor2 = Pagina.getParamStr(request, "valor" + iteracao + "_2Efier");
266     if (!"".equals(valor2)) {
267       item.setValor2Efier(new Double(valor2.replaceAll(",", ".")));
268     }
269 
270     String valor3 = Pagina.getParamStr(request, "valor" + iteracao + "_3Efier");
271     if (!"".equals(valor3)) {
272       item.setValor3Efier(new Double(valor3.replaceAll(",", ".")));
273     }
274 
275     String valor4 = Pagina.getParamStr(request, "valor" + iteracao + "_4Efier");
276     if (!"".equals(valor4)) {
277       item.setValor4Efier(new Double(valor4.replaceAll(",", ".")));
278     }
279 
280     String valor5 = Pagina.getParamStr(request, "valor" + iteracao + "_5Efier");
281     if (!"".equals(valor5)) {
282       item.setValor5Efier(new Double(valor5.replaceAll(",", ".")));
283     }
284 
285     String valor6 = Pagina.getParamStr(request, "valor" + iteracao + "_6Efier");
286     if (!"".equals(valor6)) {
287       item.setValor6Efier(new Double(valor6.replaceAll(",", ".")));
288     }
289   }
290 
291   public void gravar(EfItemEstRealizadoEfier efier, Transaction tx) throws ECARException {
292     Long mes = efier.getMesReferenciaEfier();
293     Long ano = efier.getAnoReferenciaEfier();
294     String conta = efier.getContaSistemaOrcEfier();
295 
296     try {
297       StringBuilder sql = new StringBuilder("from EfItemEstRealizadoEfier efier").append(" where efier.mesReferenciaEfier = :mes").append(" and efier.anoReferenciaEfier = :ano").append(" and efier.contaSistemaOrcEfier = :conta");
298 
299       Query q = this.session.createQuery(sql.toString());
300       q.setLong("mes", mes.longValue());
301       q.setLong("ano", ano.longValue());
302       q.setString("conta", conta);
303 
304       List lista = q.list();
305 
306       if (lista != null && !lista.isEmpty()) {
307         throw new ECARException("integracaoFinanceira.manual.inclusao.contaCadastrada");
308       }
309 
310       if (tx != null) {
311         session.save(efier);
312       }
313       else {
314         super.salvar(efier);
315       }
316     } catch (HibernateException e) {
317       this.logger.error(e);
318       throw new ECARException("integracaoFinanceira.manual.inclusao.erro");
319     }
320   }
321 
322   public void alterar(EfItemEstRealizadoEfier efier) throws ECARException {
323     super.alterar(efier);
324   }
325 
326   public void excluir(String[] codigosParaExcluir) throws ECARException, HibernateException {
327     Transaction tx = null;
328     try {
329       tx = this.session.beginTransaction();
330       for (int i = 0; i < codigosParaExcluir.length; i++) {
331         EfItemEstRealizadoEfier efier = (EfItemEstRealizadoEfier) buscar(EfItemEstRealizadoEfier.class, Long.valueOf(codigosParaExcluir[i]));
332         session.delete(efier);
333       }
334       tx.commit();
335     } catch (Exception e) {
336       if (tx != null)
337         tx.rollback();
338       this.logger.error(e);
339       throw new ECARException("integracaoFinanceira.manual.exclusao.erro");
340     }
341   }
342 
343   /**
344    * Devolve um array de 6 posicoes com a soma dos valores de um
345    * ItemEstruturaRealizadoDao Se por algum motivo esse método mudar sua forma
346    * de consulta, então analisar a possibilidade também de alterar o método
347    * "getSomaDetalhadaItemEstruturaRealizado()", que é praticamente um clone
348    * desse método, mudando apenas a forma de retorno das informações. clausula
349    * where da query montada, período trabalhado somente em cima de Mês e Ano
350    * pois no HQL do hibernate não encontramos alternativa para data AnoX = Ano
351    * Referência AnoI = Ano de Início do Exercício AnoF = Ano Fim do Exercício
352    * MexX = Mês Referência MesI = Mês de Início do Exercício MesF = Mês Fim do
353    * Exercício ((AnoX = AnoI E MesX >= MesI) OU (AnoX > AnoI) E ((AnoX = AnoF E
354    * MesX <= MesF) OU (AnoX < AnoF) explicação: Quando Ano Referência igual ao
355    * Inicial, o Mês deve ser maior ou igual Quando Ano Referência maior que o
356    * Inicial, o Mês não importa Quando Ano Referência igual ao Final, o Mês deve
357    * ser menor ou igual Quando Ano Referência menor que o Final, o Mês não
358    * importa
359    * @param conta
360    * @param exercicio
361    * @return Double[]
362    * @throws ECARException
363    * @throws HibernateException
364    */
365   public Double[] getSomaItemEstruturaRealizado(EfItemEstContaEfiec efItem, ExercicioExe exercicio) throws ECARException, HibernateException {
366 
367     try {
368 
369       StringBuilder baseQuery = new StringBuilder();
370       StringBuilder where = new StringBuilder();
371       Double[] efier = new Double[] { new Double(0), new Double(0), new Double(0), new Double(0), new Double(0), new Double(0) };
372 
373       if (efItem.getIndAcumuladoEfiec() == null || "".equals(efItem.getIndAcumuladoEfiec().trim())) {
374         return efier;
375       }
376 
377       Calendar dataIniExe = Data.getGregorianCalendar(exercicio.getDataInicialExe());
378       Calendar dataFimExe = Data.getGregorianCalendar(exercicio.getDataFinalExe());
379 
380       /* O Calendar retorna os meses de 0 a 11 */
381       /* e para comparar no HQL soma-se 1 */
382       int mesIniExe = dataIniExe.get(Calendar.MONTH) + 1;
383       int mesFimExe = dataFimExe.get(Calendar.MONTH) + 1;
384 
385       Query query = null;
386 
387       if ("S".equals(efItem.getIndAcumuladoEfiec())) {
388 
389         baseQuery.append("select itemEstRealizado.valor1Efier, ").append("itemEstRealizado.valor2Efier,").append("itemEstRealizado.valor3Efier,").append("itemEstRealizado.valor4Efier,").append("itemEstRealizado.valor5Efier,").append("itemEstRealizado.valor6Efier ").append("from EfItemEstRealizadoEfier itemEstRealizado ");
390 
391         where.append(" where itemEstRealizado.contaSistemaOrcEfier = :conta ").append(" and (((itemEstRealizado.anoReferenciaEfier = :anoIni and itemEstRealizado.mesReferenciaEfier >= :mesIni)").append(" or itemEstRealizado.anoReferenciaEfier > :anoIni )").append(" and ((itemEstRealizado.anoReferenciaEfier = :anoFim and itemEstRealizado.mesReferenciaEfier <= :mesFim)").append(" or itemEstRealizado.anoReferenciaEfier < :anoFim))").append(" order by itemEstRealizado.anoReferenciaEfier desc, itemEstRealizado.mesReferenciaEfier desc");
392 
393       }
394       else if ("N".equals(efItem.getIndAcumuladoEfiec())) {
395 
396         baseQuery.append("select sum(itemEstRealizado.valor1Efier), ").append("sum(itemEstRealizado.valor2Efier),").append("sum(itemEstRealizado.valor3Efier),").append("sum(itemEstRealizado.valor4Efier),").append("sum(itemEstRealizado.valor5Efier),").append("sum(itemEstRealizado.valor6Efier)").append("from EfItemEstRealizadoEfier itemEstRealizado ");
397 
398         where.append(" where itemEstRealizado.contaSistemaOrcEfier = :conta ").append(" and (((itemEstRealizado.anoReferenciaEfier = :anoIni and itemEstRealizado.mesReferenciaEfier >= :mesIni)").append(" or itemEstRealizado.anoReferenciaEfier > :anoIni )").append(" and ((itemEstRealizado.anoReferenciaEfier = :anoFim and itemEstRealizado.mesReferenciaEfier <= :mesFim)").append(" or itemEstRealizado.anoReferenciaEfier < :anoFim))");
399 
400       }
401 
402       query = this.getSession().createQuery(baseQuery.toString() + where);
403       query.setString("conta", efItem.getContaSistemaOrcEfiec());
404       query.setLong("anoIni", Long.parseLong(String.valueOf(dataIniExe.get(Calendar.YEAR))));
405       query.setLong("mesIni", Long.parseLong(String.valueOf(mesIniExe)));
406       query.setLong("anoFim", Long.parseLong(String.valueOf(dataFimExe.get(Calendar.YEAR))));
407       query.setLong("mesFim", Long.parseLong(String.valueOf(mesFimExe)));
408 
409       List lista = query.list();
410 
411       Iterator it = lista.iterator();
412 
413       /* Única forma que funcionou, receber o objeto e depois CAST p/ Double */
414       if (it.hasNext()) {
415         Object aux[] = (Object[]) it.next();
416 
417         if (aux[0] != null)
418           efier[0] = (Double) aux[0];
419         if (aux[1] != null)
420           efier[1] = (Double) aux[1];
421         if (aux[2] != null)
422           efier[2] = (Double) aux[2];
423         if (aux[3] != null)
424           efier[3] = (Double) aux[3];
425         if (aux[4] != null)
426           efier[4] = (Double) aux[4];
427         if (aux[5] != null)
428           efier[5] = (Double) aux[5];
429       }
430 
431       return (efier);
432 
433     } catch (Exception e) {
434       this.logger.error(e);
435       throw new ECARException("relAcompanhamento.financeiro.consulta.erro");
436     }
437   }
438 
439   /**
440    * Retorna os totais da contas detalhadas em inserções manuais e via
441    * importação de arquivo txt.
442    * @param conta
443    * @param exercicio
444    * @return DetalhamentoTotaisConta
445    * @throws ECARException
446    * @throws HibernateException
447    */
448   public DetalhamentoTotaisConta getSomaDetalhadaItemEstruturaRealizado(EfItemEstContaEfiec efItem, ExercicioExe exercicio) throws ECARException, HibernateException {
449 
450     try {
451 
452       StringBuilder baseQuery = new StringBuilder();
453       StringBuilder where = new StringBuilder();
454 
455       DetalhamentoTotaisConta detalheConta = new DetalhamentoTotaisConta();
456 
457       if (efItem.getIndAcumuladoEfiec() == null || "".equals(efItem.getIndAcumuladoEfiec().trim())) {
458         return detalheConta;
459       }
460 
461       Calendar dataIniExe = Data.getGregorianCalendar(exercicio.getDataInicialExe());
462       Calendar dataFimExe = Data.getGregorianCalendar(exercicio.getDataFinalExe());
463 
464       /* O Calendar retorna os meses de 0 a 11 */
465       /* e para comparar no HQL soma-se 1 */
466       int mesIniExe = dataIniExe.get(Calendar.MONTH) + 1;
467       int mesFimExe = dataFimExe.get(Calendar.MONTH) + 1;
468 
469       Query query = null;
470       String indManual = "N";
471       List lista = new ArrayList();
472 
473       if ("S".equals(efItem.getIndAcumuladoEfiec())) {
474 
475         for (int i = 0; i <= 1; i++) {
476 
477           baseQuery.append("select itemEstRealizado.valor1Efier, ").append("itemEstRealizado.valor2Efier,").append("itemEstRealizado.valor3Efier,").append("itemEstRealizado.valor4Efier,").append("itemEstRealizado.valor5Efier,").append("itemEstRealizado.valor6Efier,").append("itemEstRealizado.indManualEfier ").append("from EfItemEstRealizadoEfier itemEstRealizado ");
478 
479           where.append(" where itemEstRealizado.contaSistemaOrcEfier like :conta ").append(" and (((itemEstRealizado.anoReferenciaEfier = :anoIni and itemEstRealizado.mesReferenciaEfier >= :mesIni)").append(" or itemEstRealizado.anoReferenciaEfier > :anoIni )").append(" and ((itemEstRealizado.anoReferenciaEfier = :anoFim and itemEstRealizado.mesReferenciaEfier <= :mesFim)").append(" or itemEstRealizado.anoReferenciaEfier < :anoFim))").append(" and itemEstRealizado.indManualEfier = :indManualEfier))").append(" order by itemEstRealizado.anoReferenciaEfier desc, itemEstRealizado.mesReferenciaEfier desc");
480 
481           query = this.getSession().createQuery(baseQuery.toString() + where);
482           // Não apagar essas linhas de forma nenhuma.
483           // query.setString("conta", efItem.getContaSistemaOrcEfiec());
484           String[] parametros = efItem.getContaSistemaOrcEfiec().split(" ");
485           query.setString("conta", parametros[0] + "%" + parametros[2] + " " + parametros[3]);
486           query.setLong("anoIni", Long.parseLong(String.valueOf(dataIniExe.get(Calendar.YEAR))));
487           query.setLong("mesIni", Long.parseLong(String.valueOf(mesIniExe)));
488           query.setLong("anoFim", Long.parseLong(String.valueOf(dataFimExe.get(Calendar.YEAR))));
489           query.setLong("mesFim", Long.parseLong(String.valueOf(mesFimExe)));
490           query.setString("indManualEfier", indManual);
491 
492           query.setMaxResults(1);
493           lista.addAll(query.list());
494 
495           if ("S".equals(indManual)) {
496             indManual = "S";
497           }
498         }
499 
500       }
501       else if ("N".equals(efItem.getIndAcumuladoEfiec())) {
502 
503         baseQuery.append("select sum(itemEstRealizado.valor1Efier), ").append("sum(itemEstRealizado.valor2Efier),").append("sum(itemEstRealizado.valor3Efier),").append("sum(itemEstRealizado.valor4Efier),").append("sum(itemEstRealizado.valor5Efier),").append("sum(itemEstRealizado.valor6Efier),").append("itemEstRealizado.indManualEfier ").append("from EfItemEstRealizadoEfier itemEstRealizado ");
504 
505         where.append(" where itemEstRealizado.contaSistemaOrcEfier like :conta ").append(" and (((itemEstRealizado.anoReferenciaEfier = :anoIni and itemEstRealizado.mesReferenciaEfier >= :mesIni)").append(" or itemEstRealizado.anoReferenciaEfier > :anoIni )").append(" and ((itemEstRealizado.anoReferenciaEfier = :anoFim and itemEstRealizado.mesReferenciaEfier <= :mesFim)").append(" or itemEstRealizado.anoReferenciaEfier < :anoFim))").append(" group by itemEstRealizado.indManualEfier").append(" order by itemEstRealizado.indManualEfier asc");
506 
507         query = this.getSession().createQuery(baseQuery.toString() + where);
508         // Não apagar essas linhas de forma nenhuma.
509         // query.setString("conta", efItem.getContaSistemaOrcEfiec());
510         String[] parametros = efItem.getContaSistemaOrcEfiec().split(" ");
511         query.setString("conta", parametros[0] + "%" + parametros[2] + " " + parametros[3]);
512         query.setLong("anoIni", Long.parseLong(String.valueOf(dataIniExe.get(Calendar.YEAR))));
513         query.setLong("mesIni", Long.parseLong(String.valueOf(mesIniExe)));
514         query.setLong("anoFim", Long.parseLong(String.valueOf(dataFimExe.get(Calendar.YEAR))));
515         query.setLong("mesFim", Long.parseLong(String.valueOf(mesFimExe)));
516 
517         lista.addAll(query.list());
518       }
519 
520       Iterator it = lista.iterator();
521 
522       Double[][] arrayDetalhesContas = detalheConta.getDetalhesContas();
523 
524       int linha = 0;
525       while (it.hasNext()) {
526 
527         Object aux[] = (Object[]) it.next();
528 
529         if ((aux[6] != null) && ("S".equals((String) aux[6])) && (linha == 0))
530           linha++;
531 
532         if (aux[0] != null)
533           arrayDetalhesContas[linha][0] = (Double) aux[0];
534         if (aux[1] != null)
535           arrayDetalhesContas[linha][1] = (Double) aux[1];
536         if (aux[2] != null)
537           arrayDetalhesContas[linha][2] = (Double) aux[2];
538         if (aux[3] != null)
539           arrayDetalhesContas[linha][3] = (Double) aux[3];
540         if (aux[4] != null)
541           arrayDetalhesContas[linha][4] = (Double) aux[4];
542         if (aux[5] != null)
543           arrayDetalhesContas[linha][5] = (Double) aux[5];
544 
545         linha++;
546       }
547 
548       return (detalheConta);
549 
550     } catch (Exception e) {
551       this.logger.error(e);
552       throw new ECARException("relAcompanhamento.financeiro.consulta.erro");
553     }
554   }
555 
556   /**
557    * Método que verifica se é para apresentar o valor na devida posição,
558    * conforme a configuração. O Critério para apresentar o valor ou não, depende
559    * se existe conteúdo no campo financeiroDescValor<posicao>Cfg. Ex.: Se
560    * existir conteúdo em ConfiguracaoCfg.getFinanceiroDescValor1Cfg(), então
561    * deve mostrar o valor1Efier. Obs.: O parâmetro "posicao" é verificado em um
562    * array, portanto, para o valor1Efier, deve-se passar posicao=0, para
563    * valor2Efier deve-se passar posicao=1, e assim por diante.
564    * @param posicao
565    * @return
566    * @throws ECARException
567    */
568   public boolean getVerificarMostrarValorByPosicaoCfg(int posicao) throws ECARException {
569     ConfiguracaoCfg cfg = (new ConfiguracaoDao(null)).getConfiguracao();
570     posicao++; // Incremento a posição porque ela é passada em
571                // array[0,1,2,3,4,5]
572     boolean retorno = false;
573 
574     switch (posicao) {
575     case 1: {
576       if (cfg.getFinanceiroDescValor1Cfg() != null && !"".equals(cfg.getFinanceiroDescValor1Cfg().trim()))
577         retorno = true;
578       break;
579     }
580     case 2: {
581       if (cfg.getFinanceiroDescValor2Cfg() != null && !"".equals(cfg.getFinanceiroDescValor2Cfg().trim()))
582         retorno = true;
583       break;
584     }
585     case 3: {
586       if (cfg.getFinanceiroDescValor3Cfg() != null && !"".equals(cfg.getFinanceiroDescValor3Cfg().trim()))
587         retorno = true;
588       break;
589     }
590     case 4: {
591       if (cfg.getFinanceiroDescValor4Cfg() != null && !"".equals(cfg.getFinanceiroDescValor4Cfg().trim()))
592         retorno = true;
593       break;
594     }
595     case 5: {
596       if (cfg.getFinanceiroDescValor5Cfg() != null && !"".equals(cfg.getFinanceiroDescValor5Cfg().trim()))
597         retorno = true;
598       break;
599     }
600     case 6: {
601       if (cfg.getFinanceiroDescValor6Cfg() != null && !"".equals(cfg.getFinanceiroDescValor6Cfg().trim()))
602         retorno = true;
603       break;
604     }
605 
606     default:
607       break;
608     }
609     return retorno;
610   }
611 
612   /**
613    * Verifica na configuração se é para mostrar o campo recursoDescValor1,
614    * recursoDescValor2 ou recursoDescValor3.
615    * @author aleixo
616    * @version 0.1 - 26/03/2007
617    * @param posicao
618    * @return boolean
619    * @throws ECARException
620    */
621   public boolean getVerificarMostrarRecursoByPosicaoCfg(int posicao) throws ECARException {
622     ConfiguracaoCfg cfg = (new ConfiguracaoDao(null)).getConfiguracao();
623     posicao++; // Incremento a posição porque ela é passada em
624                // array[0,1,2,3,4,5]
625     boolean retorno = false;
626 
627     switch (posicao) {
628     case 1: {
629       if (cfg.getRecursoDescValor1Cfg() != null && !"".equals(cfg.getRecursoDescValor1Cfg().trim()))
630         retorno = true;
631       break;
632     }
633     case 2: {
634       if (cfg.getRecursoDescValor2Cfg() != null && !"".equals(cfg.getRecursoDescValor2Cfg().trim()))
635         retorno = true;
636       break;
637     }
638     case 3: {
639       if (cfg.getRecursoDescValor3Cfg() != null && !"".equals(cfg.getRecursoDescValor3Cfg().trim()))
640         retorno = true;
641       break;
642     }
643 
644     default:
645       break;
646     }
647     return retorno;
648   }
649 
650   /**
651    * Retorna os valores (registros) das contas para o arquivo de exportação
652    * @param mesIni
653    * @param anoIni
654    * @param mesFim
655    * @param anoFim
656    * @return Lista de contas
657    */
658   public List getValoresParaExportacao(String mesIni, String anoIni, String mesFim, String anoFim) throws ECARException, HibernateException {
659     try {
660       StringBuilder baseQuery = new StringBuilder("from EfItemEstRealizadoEfier itemEstRealizado ").append(" where (((itemEstRealizado.anoReferenciaEfier = :anoIni and itemEstRealizado.mesReferenciaEfier >= :mesIni)").append(" or itemEstRealizado.anoReferenciaEfier > :anoIni)").append(" and ((itemEstRealizado.anoReferenciaEfier = :anoFim and itemEstRealizado.mesReferenciaEfier <= :mesFim)").append(" or itemEstRealizado.anoReferenciaEfier < :anoFim))");
661 
662       Query objQuery = this.getSession().createQuery(baseQuery.toString());
663 
664       objQuery.setLong("mesIni", Long.valueOf(mesIni).longValue());
665       objQuery.setLong("anoIni", Long.valueOf(anoIni).longValue());
666       objQuery.setLong("mesFim", Long.valueOf(mesFim).longValue());
667       objQuery.setLong("anoFim", Long.valueOf(anoFim).longValue());
668 
669       return objQuery.list();
670     } catch (Exception e) {
671       this.logger.error(e);
672       throw new ECARException("integracaoFinanceira.exportarArquivo.consultaDados.erro");
673     }
674   }
675 
676   /**
677    * Retorna uma lista de EfItemEstRealizadoEfier referente à conta/mes/ano.
678    * @param conta
679    * @param mes
680    * @param ano
681    * @return
682    * @throws ECARException
683    */
684   public List getItemEstRealizadoEfierToImportacao(String conta, Long mes, Long ano) throws ECARException {
685     try {
686       StringBuilder baseQuery = new StringBuilder("from EfItemEstRealizadoEfier itemEstRealizado ").append(" where itemEstRealizado.anoReferenciaEfier = :ano").append("   and itemEstRealizado.mesReferenciaEfier = :mes").append("   and itemEstRealizado.contaSistemaOrcEfier = :conta");
687 
688       Query objQuery = this.getSession().createQuery(baseQuery.toString());
689 
690       objQuery.setString("conta", conta);
691       objQuery.setLong("ano", ano.longValue());
692       objQuery.setLong("mes", mes.longValue());
693 
694       return objQuery.list();
695     } catch (HibernateException e) {
696       this.logger.error(e);
697       throw new ECARException("integracaoFinanceira.importarArquivo.importacao.erro");
698     }
699   }
700 
701   /**
702    * Retorna uma lista de EfItemEstRealizadoEfier referente à Ano Inicio e Mês
703    * Inicio/Ano Fim Mês Fim. Onde itemEstRealizado não seja entrada manual.
704    * @author carlos
705    * @since 16/04/2007
706    * @param mes
707    * @param ano
708    * @return List
709    * @throws ECARException
710    */
711   public List getItemEstRealizadoEfierToImportacao(Date inicio, Date fim, ConfigSisExecFinanCsef sistema) throws ECARException {
712 
713     Long anoIni = Long.valueOf(new SimpleDateFormat("yyyy").format(inicio));
714     Long mesIni = Long.valueOf(new SimpleDateFormat("MM").format(inicio));
715     Long anoFim = Long.valueOf(new SimpleDateFormat("yyyy").format(fim));
716     Long mesFim = Long.valueOf(new SimpleDateFormat("MM").format(fim));
717 
718     try {
719       StringBuilder baseQuery = new StringBuilder("from EfItemEstRealizadoEfier itemEstRealizado ").append(" where itemEstRealizado.indManualEfier = 'N'").append(" and (itemEstRealizado.anoReferenciaEfier >= :anoIni and itemEstRealizado.anoReferenciaEfier <= :anoFim)").append(" and (itemEstRealizado.mesReferenciaEfier >= :mesIni and itemEstRealizado.mesReferenciaEfier <= :mesFim)").append(" and itemEstRealizado.configSisExecFinanCsefv.configSisExecFinanCsef.codCsef = :codSistema");
720 
721       Query objQuery = this.getSession().createQuery(baseQuery.toString());
722       objQuery.setLong("anoIni", anoIni.longValue());
723       objQuery.setLong("mesIni", mesIni.longValue());
724       objQuery.setLong("anoFim", anoFim.longValue());
725       objQuery.setLong("mesFim", mesFim.longValue());
726       objQuery.setLong("codSistema", sistema.getCodCsef());
727 
728       return objQuery.list();
729     } catch (HibernateException e) {
730       this.logger.error(e);
731       throw new ECARException("integracaoFinanceira.importarArquivo.importacao.erro");
732     }
733   }
734 
735   /**
736    * Retorna uma lista de EfItemEstRealizadoEfier
737    * @return
738    * @throws ECARException
739    */
740   public List getItemEstRealizadoEfier(String conta, String mes, String ano, String codSistema, String indManualEfier) throws ECARException {
741 
742     try {
743 
744       Criteria crits = session.createCriteria(EfItemEstRealizadoEfier.class);
745 
746       if (!"".equals(conta.trim()))
747         crits.add(Restrictions.eq("contaSistemaOrcEfier", conta));
748 
749       if (!"".equals(mes.trim()))
750         crits.add(Restrictions.eq("mesReferenciaEfier", Long.valueOf(mes).longValue()));
751 
752       if (!"".equals(ano.trim()))
753         crits.add(Restrictions.eq("anoReferenciaEfier", Long.valueOf(ano).longValue()));
754 
755       if (!"".equals(indManualEfier.trim()))
756         crits.add(Restrictions.eq("indManualEfier", indManualEfier));
757 
758       if (!"".equals(codSistema.trim())) {
759         Criteria crits2 = crits.createCriteria("configSisExecFinanCsefv");
760         crits2.add(Restrictions.eq("configSisExecFinanCsef.codCsef", Long.valueOf(codSistema).longValue()));
761       }
762 
763       return crits.list();
764 
765     } catch (Exception e) {
766       this.logger.error(e);
767       throw new ECARException("integracaoFinanceira.manual.buscar.erro");
768     }
769   }
770 }