1
2
3
4 package ecar.dao;
5
6 import java.util.ArrayList;
7 import java.util.Calendar;
8 import java.util.List;
9
10 import javax.servlet.http.HttpServletRequest;
11
12 import org.hibernate.HibernateException;
13 import org.hibernate.Query;
14
15 import comum.database.Dao;
16 import comum.util.Data;
17
18 import ecar.exception.ECARException;
19 import ecar.pojo.AcompRealFisicoArf;
20 import ecar.pojo.ExercicioExe;
21 import ecar.pojo.ItemEstruturaIett;
22
23
24
25
26 public class ExercicioDao extends Dao {
27
28
29
30
31 public ExercicioDao(HttpServletRequest request) {
32 super();
33 this.request = request;
34 }
35
36
37
38
39
40
41
42 public void excluir(ExercicioExe exercicio) throws ECARException {
43 boolean excluir = true;
44 if (contar(exercicio.getEfItemEstContaEfiecs()) > 0) {
45 excluir = false;
46 throw new ECARException("exercicio.exclusao.erro.efItemEstContaEfiecs");
47 }
48 if (contar(exercicio.getEfItemEstPrevisaoEfieps()) > 0) {
49 excluir = false;
50 throw new ECARException("exercicio.exclusao.erro.efItemEstPrevisaoEfieps");
51 }
52 if (contar(exercicio.getItemEstrutFisicoIettfs()) > 0) {
53 excluir = false;
54 throw new ECARException("exercicio.exclusao.erro.itemEstrutFisicoIettfs");
55 }
56
57
58
59
60
61
62 if (contar(exercicio.getAcompReferenciaArefs()) > 0) {
63 excluir = false;
64 throw new ECARException("exercicio.exclusao.erro.acompReferenciaArefs");
65 }
66 if (excluir)
67 super.excluir(exercicio);
68 }
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 public List getExerciciosComSobreposicaoData(ExercicioExe exercicio) throws ECARException {
94 List resultado = new ArrayList();
95
96 try {
97 String select = "from ExercicioExe e " + " where not (:dataFinal < e.dataInicialExe or :dataInicial > e.dataFinalExe)";
98
99 if (exercicio.getCodExe() != null)
100 select += " and e.codExe <> :codExe";
101
102 Query q = this.session.createQuery(select);
103
104 q.setDate("dataFinal", exercicio.getDataFinalExe());
105 q.setDate("dataInicial", exercicio.getDataInicialExe());
106
107 if (exercicio.getCodExe() != null)
108 q.setLong("codExe", exercicio.getCodExe().longValue());
109
110 resultado = q.list();
111 } catch (HibernateException e) {
112 this.logger.error(e);
113 throw new ECARException("erro.hibernateException");
114 }
115
116 return (resultado);
117 }
118
119
120
121
122
123
124
125 public void salvar(ExercicioExe exercicio) throws ECARException {
126 if (pesquisarDuplos(exercicio, new String[] { "descricaoExe" }, "codExe").size() > 0)
127 throw new ECARException("exercicio.validacao.registroDuplicado");
128
129 List lExercicios = getExerciciosComSobreposicaoData(exercicio);
130 if (lExercicios != null && lExercicios.size() > 0) {
131 throw new ECARException("exercicio.validacao.erroSobreposicao");
132 }
133 else {
134 super.salvar(exercicio);
135 }
136 }
137
138
139
140
141
142
143
144
145 public void alterar(ExercicioExe exercicio) throws ECARException {
146 if (pesquisarDuplos(exercicio, new String[] { "descricaoExe" }, "codExe").size() > 0)
147 throw new ECARException("exercicio.validacao.registroDuplicado");
148
149 List lExercicios = getExerciciosComSobreposicaoData(exercicio);
150 if (lExercicios != null && lExercicios.size() > 0) {
151 throw new ECARException("exercicio.validacao.erroSobreposicao");
152 }
153 else {
154 super.alterar(exercicio);
155 }
156 }
157
158
159
160
161
162
163
164 public List getExerciciosAnteriores(ExercicioExe exercicio) throws ECARException {
165 List resultado = new ArrayList();
166
167 try {
168 String select = "from ExercicioExe e where e.dataFinalExe < :dataFinal order by e.dataInicialExe";
169
170 Query q = this.session.createQuery(select);
171
172 q.setDate("dataFinal", exercicio.getDataInicialExe());
173
174 resultado = q.list();
175 } catch (HibernateException e) {
176 this.logger.error(e);
177 throw new ECARException("erro.hibernateException");
178 }
179
180 return (resultado);
181 }
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203 public List getExerciciosProjecao(Long codIett) throws ECARException {
204 AcompRealFisicoDao acompRealFisicoDao = new AcompRealFisicoDao(null);
205 AcompReferenciaDao acompReferenciaDao = new AcompReferenciaDao(null);
206 ItemEstruturaDao estruturaDao = new ItemEstruturaDao(null);
207
208 List resultado = new ArrayList();
209
210 try {
211 String queryExeIndicadores = "select distinct ieFisico.exercicioExe from ItemEstrutFisicoIettf ieFisico" + " where ieFisico.itemEstrtIndResulIettr.itemEstruturaIett.codIett = :codIett" + " and ieFisico.itemEstrtIndResulIettr.itemEstruturaIett.indAtivoIett = 'S'" + " order by ieFisico.exercicioExe.dataFinalExe";
212
213 Query q = this.getSession().createQuery(queryExeIndicadores);
214
215 q.setLong("codIett", codIett.longValue());
216
217 ItemEstruturaIett item = (ItemEstruturaIett) estruturaDao.buscar(ItemEstruturaIett.class, codIett);
218
219 if (item != null) {
220
221
222 long anoMesArfMaisRecente = 0;
223 long anoMesArfMaisAntigo = 0;
224
225 AcompRealFisicoArf arfMaisRecente = acompRealFisicoDao.getArfMaisRecenteItem(item);
226 if (arfMaisRecente != null) {
227 String mesAux = arfMaisRecente.getMesArf().toString();
228 if (arfMaisRecente.getMesArf().longValue() < 10) {
229 mesAux = "0" + mesAux;
230 }
231 anoMesArfMaisRecente = Long.parseLong(arfMaisRecente.getAnoArf().toString() + mesAux);
232 }
233 AcompRealFisicoArf arfMaisAntigo = acompRealFisicoDao.getArfMaisAntigoItem(item);
234 if (arfMaisAntigo != null) {
235 String mesAux = arfMaisAntigo.getMesArf().toString();
236 if (arfMaisAntigo.getMesArf().longValue() < 10) {
237 mesAux = "0" + mesAux;
238 }
239 anoMesArfMaisAntigo = Long.parseLong(arfMaisAntigo.getAnoArf().toString() + mesAux);
240 }
241
242
243
244 if (item.getDataInicioIett() == null && item.getDataTerminoIett() == null) {
245 resultado = q.list();
246 }
247 else {
248 int mes = 0;
249 int ano = 0;
250 int mesFinal = 0;
251 int anoFinal = 0;
252
253
254 if (item.getDataInicioIett() != null && item.getDataTerminoIett() != null) {
255 mes = Data.getMes(item.getDataInicioIett()) + 1;
256 ano = Data.getAno(item.getDataInicioIett());
257 mesFinal = Data.getMes(item.getDataTerminoIett()) + 1;
258 anoFinal = Data.getAno(item.getDataTerminoIett());
259 }
260
261 else if (item.getDataInicioIett() != null && item.getDataTerminoIett() == null) {
262
263 mes = Data.getMes(item.getDataInicioIett()) + 1;
264 ano = Data.getAno(item.getDataInicioIett());
265 mesFinal = 0;
266 anoFinal = 0;
267
268 List exerciciosTemp = q.list();
269
270 if (exerciciosTemp != null && exerciciosTemp.size() > 0) {
271 ExercicioExe exercicioFinal = (ExercicioExe) exerciciosTemp.get(exerciciosTemp.size() - 1);
272 mesFinal = Data.getMes(exercicioFinal.getDataFinalExe());
273 anoFinal = Data.getAno(exercicioFinal.getDataFinalExe());
274 }
275 }
276
277 else {
278 mes = Data.getMes(item.getDataTerminoIett()) + 2;
279
280
281
282
283
284 ano = Data.getAno(item.getDataTerminoIett()) + 1;
285
286
287
288
289
290 mesFinal = Data.getMes(item.getDataTerminoIett()) + 1;
291 anoFinal = Data.getAno(item.getDataTerminoIett());
292
293 List exerciciosTemp = q.list();
294
295 if (exerciciosTemp != null && exerciciosTemp.size() > 0) {
296 ExercicioExe exercicioInicial = (ExercicioExe) exerciciosTemp.get(0);
297 mes = Data.getMes(exercicioInicial.getDataInicialExe());
298 ano = Data.getAno(exercicioInicial.getDataInicialExe());
299 }
300 }
301
302
303 String mesAux = String.valueOf(mes);
304 if (mes < 10) {
305 mesAux = "0" + mesAux;
306 }
307 long anoMesItemInicio = Long.parseLong(String.valueOf(ano) + mesAux);
308
309 mesAux = String.valueOf(mesFinal);
310 if (mesFinal < 10) {
311 mesAux = "0" + mesAux;
312 }
313 long anoMesItemFim = Long.parseLong(String.valueOf(anoFinal) + mesAux);
314
315 if (anoMesArfMaisAntigo > 0 && anoMesArfMaisAntigo < anoMesItemInicio) {
316 mes = arfMaisAntigo.getMesArf().intValue();
317 ano = arfMaisAntigo.getAnoArf().intValue();
318 }
319 if (anoMesArfMaisRecente > 0 && anoMesArfMaisRecente > anoMesItemFim) {
320 mesFinal = arfMaisRecente.getMesArf().intValue();
321 anoFinal = arfMaisRecente.getAnoArf().intValue();
322 }
323
324
325 while (ano < anoFinal || (ano == anoFinal && mes <= mesFinal)) {
326 ExercicioExe exercicio = acompReferenciaDao.getExercicio(String.valueOf(ano), String.valueOf(mes));
327 if (exercicio != null && !resultado.contains(exercicio)) {
328 resultado.add(exercicio);
329 }
330
331 mes++;
332 if (mes > 12) {
333 mes = 1;
334 ano++;
335 }
336 }
337 }
338 }
339
340 else {
341 resultado = q.list();
342 }
343 } catch (HibernateException e) {
344 this.logger.error(e);
345 throw new ECARException("erro.hibernateException");
346 }
347
348 return (resultado);
349 }
350
351
352
353
354
355
356
357 public List getExerciciosPosteriores(ExercicioExe exercicio) throws ECARException {
358 List resultado = new ArrayList();
359
360 try {
361 String select = "from ExercicioExe e where e.dataFinalExe > :dataInicial order by e.dataInicialExe";
362
363 Query q = this.getSession().createQuery(select);
364
365 q.setDate("dataInicial", exercicio.getDataInicialExe());
366
367 resultado = q.list();
368 } catch (HibernateException e) {
369 this.logger.error(e);
370 throw new ECARException("erro.hibernateException");
371 }
372
373 return (resultado);
374 }
375
376
377
378
379
380
381
382 public List getMesesDentroDoExercicio(ExercicioExe exercicio) {
383
384 List retorno = new ArrayList();
385 Calendar dataInicialExe = Data.getCalendar(exercicio.getDataInicialExe());
386 Calendar dataFinalExe = Data.getCalendar(exercicio.getDataFinalExe());
387
388 int anoInicial = dataInicialExe.get(Calendar.YEAR);
389 int anoFinal = dataFinalExe.get(Calendar.YEAR);
390 int mesInicial = dataInicialExe.get(Calendar.MONTH) + 1;
391 int mesFinal = dataFinalExe.get(Calendar.MONTH) + 1;
392
393 while ((anoInicial != anoFinal) || (mesInicial != mesFinal && anoInicial == anoFinal)) {
394 retorno.add(mesInicial + "-" + anoInicial);
395 mesInicial++;
396 if (mesInicial == 13) {
397 mesInicial = 1;
398 anoInicial++;
399 }
400 }
401 retorno.add(mesInicial + "-" + anoInicial);
402
403 return retorno;
404 }
405
406
407
408
409
410
411
412 public List getMesesDentroDoExercicio(ExercicioExe exercicio, int mes, int ano) {
413
414 List retorno = new ArrayList();
415 Calendar dataInicialExe = Data.getCalendar(exercicio.getDataInicialExe());
416
417
418 int anoInicial = dataInicialExe.get(Calendar.YEAR);
419 int anoFinal = ano;
420 int mesInicial = dataInicialExe.get(Calendar.MONTH) + 1;
421 int mesFinal = mes;
422
423 while ((anoInicial != anoFinal) || (mesInicial != mesFinal && anoInicial == anoFinal)) {
424 retorno.add(mesInicial + "-" + anoInicial);
425 mesInicial++;
426 if (mesInicial == 13) {
427 mesInicial = 1;
428 anoInicial++;
429 }
430 }
431 retorno.add(mesInicial + "-" + anoInicial);
432
433 return retorno;
434 }
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454 public List getExerciciosValidos(Long codIett) throws ECARException {
455 AcompReferenciaDao acompReferenciaDao = new AcompReferenciaDao(null);
456 ItemEstruturaDao estruturaDao = new ItemEstruturaDao(null);
457
458 List resultado = new ArrayList();
459
460 String queryExercicios = "from ExercicioExe exercicio" + " order by exercicio.dataFinalExe";
461
462 try {
463
464 ItemEstruturaIett item = (ItemEstruturaIett) estruturaDao.buscar(ItemEstruturaIett.class, codIett);
465
466 if (item != null) {
467 if (item.getDataInicioIett() == null && item.getDataTerminoIett() == null) {
468
469
470
471
472
473 resultado = session.createQuery(queryExercicios).list();
474 }
475 else {
476 int mes = 0;
477 int ano = 0;
478 int mesFinal = 0;
479 int anoFinal = 0;
480
481
482
483
484
485
486
487
488 if (item.getDataInicioIett() != null && item.getDataTerminoIett() != null) {
489
490 mes = Data.getMes(item.getDataInicioIett()) + 1;
491 ano = Data.getAno(item.getDataInicioIett());
492 mesFinal = Data.getMes(item.getDataTerminoIett()) + 1;
493 anoFinal = Data.getAno(item.getDataTerminoIett());
494
495 }
496
497
498
499
500
501
502 else if (item.getDataInicioIett() != null && item.getDataTerminoIett() == null) {
503
504 mes = Data.getMes(item.getDataInicioIett()) + 1;
505 ano = Data.getAno(item.getDataInicioIett());
506 mesFinal = 0;
507 anoFinal = 0;
508
509 List exerciciosTemp = session.createQuery(queryExercicios).list();
510
511 if (exerciciosTemp != null && exerciciosTemp.size() > 0) {
512 ExercicioExe exercicioFinal = (ExercicioExe) exerciciosTemp.get(exerciciosTemp.size() - 1);
513 mesFinal = Data.getMes(exercicioFinal.getDataFinalExe());
514 anoFinal = Data.getAno(exercicioFinal.getDataFinalExe());
515 }
516
517 }
518
519
520
521
522
523
524 else {
525 mes = Data.getMes(item.getDataTerminoIett()) + 2;
526
527
528
529
530
531 ano = Data.getAno(item.getDataTerminoIett()) + 1;
532
533
534
535
536
537 mesFinal = Data.getMes(item.getDataTerminoIett()) + 1;
538 anoFinal = Data.getAno(item.getDataTerminoIett());
539
540 List exerciciosTemp = session.createQuery(queryExercicios).list();
541
542 if (exerciciosTemp != null && exerciciosTemp.size() > 0) {
543 ExercicioExe exercicioInicial = (ExercicioExe) exerciciosTemp.get(0);
544 mes = Data.getMes(exercicioInicial.getDataInicialExe());
545 ano = Data.getAno(exercicioInicial.getDataInicialExe());
546 }
547 }
548
549 while (ano < anoFinal || (ano == anoFinal && mes <= mesFinal)) {
550 ExercicioExe exercicio = acompReferenciaDao.getExercicio(String.valueOf(ano), String.valueOf(mes));
551 if (exercicio != null && !resultado.contains(exercicio)) {
552 resultado.add(exercicio);
553 }
554
555 mes++;
556 if (mes > 12) {
557 mes = 1;
558 ano++;
559 }
560 }
561 }
562 }
563 else {
564
565
566
567
568
569 resultado = session.createQuery(queryExercicios).list();
570 }
571
572 } catch (HibernateException e) {
573 this.logger.error(e);
574 throw new ECARException("erro.hibernateException");
575 }
576
577 return (resultado);
578 }
579
580 public List getExeByPerExe(ExercicioExe exeReferencia) throws ECARException {
581
582 List retorno = new ArrayList();
583
584 try {
585 StringBuilder select = new StringBuilder();
586 select.append("select exe from ExercicioExe exe");
587
588 if (exeReferencia != null && exeReferencia.getPeriodoExercicioPerExe() != null) {
589 select.append(" where exe.periodoExercicioPerExe.codPerExe = :codPerExe");
590 }
591
592 select.append(" order by exe.dataInicialExe desc");
593
594 Query q = this.session.createQuery(select.toString());
595
596 if (exeReferencia != null && exeReferencia.getPeriodoExercicioPerExe() != null) {
597 q.setLong("codPerExe", exeReferencia.getPeriodoExercicioPerExe().getCodPerExe().longValue());
598 }
599
600 retorno = q.list();
601
602 if (retorno == null || (retorno != null && retorno.isEmpty()))
603 retorno = new ArrayList();
604
605 } catch (HibernateException he) {
606 this.logger.error(he);
607 throw new ECARException("erro.hibernateException");
608 }
609
610 return retorno;
611 }
612
613
614
615
616
617
618 public List getExercicioByPeriodicidade(Long codPerExe) throws ECARException {
619
620 try {
621 StringBuilder qry = new StringBuilder("from ExercicioExe as ex").append(" where ex.periodoExercicioPerExe.codPerExe = :codigo").append(" order by ex.dataFinalExe");
622
623 Query q = this.session.createQuery(qry.toString());
624 q.setLong("codigo", codPerExe.longValue());
625
626 return q.list();
627
628 } catch (HibernateException e) {
629 this.logger.error(e);
630 throw new ECARException("erro.hibernateException");
631 }
632
633 }
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655 public List getExerciciosProjecaoByExercicio(Long codIett, Long codExe) throws ECARException {
656 AcompRealFisicoDao acompRealFisicoDao = new AcompRealFisicoDao(null);
657 AcompReferenciaDao acompReferenciaDao = new AcompReferenciaDao(null);
658 ItemEstruturaDao estruturaDao = new ItemEstruturaDao(null);
659
660 List resultado = new ArrayList();
661
662 try {
663 String queryExeIndicadores = "select distinct ieFisico.exercicioExe from ItemEstrutFisicoIettf ieFisico" + " where ieFisico.itemEstrtIndResulIettr.itemEstruturaIett.codIett = :codIett" + " and ieFisico.itemEstrtIndResulIettr.itemEstruturaIett.indAtivoIett = 'S'" + " and ieFisico.exercicioExe.codExe = :codExe" + " order by ieFisico.exercicioExe.dataFinalExe";
664
665 Query q = this.getSession().createQuery(queryExeIndicadores);
666
667 q.setLong("codIett", codIett.longValue());
668 q.setLong("codExe", codExe);
669
670 ItemEstruturaIett item = (ItemEstruturaIett) estruturaDao.buscar(ItemEstruturaIett.class, codIett);
671
672 if (item != null) {
673
674 long anoMesArfMaisRecente = 0;
675 long anoMesArfMaisAntigo = 0;
676
677 AcompRealFisicoArf arfMaisRecente = acompRealFisicoDao.getArfMaisRecenteItem(item);
678 if (arfMaisRecente != null) {
679 String mesAux = arfMaisRecente.getMesArf().toString();
680 if (arfMaisRecente.getMesArf().longValue() < 10) {
681 mesAux = "0" + mesAux;
682 }
683 anoMesArfMaisRecente = Long.parseLong(arfMaisRecente.getAnoArf().toString() + mesAux);
684 }
685 AcompRealFisicoArf arfMaisAntigo = acompRealFisicoDao.getArfMaisAntigoItem(item);
686 if (arfMaisAntigo != null) {
687 String mesAux = arfMaisAntigo.getMesArf().toString();
688 if (arfMaisAntigo.getMesArf().longValue() < 10) {
689 mesAux = "0" + mesAux;
690 }
691 anoMesArfMaisAntigo = Long.parseLong(arfMaisAntigo.getAnoArf().toString() + mesAux);
692 }
693
694
695 if (item.getDataInicioIett() == null && item.getDataTerminoIett() == null) {
696 resultado = q.list();
697 }
698 else {
699 int mes = 0;
700 int ano = 0;
701 int mesFinal = 0;
702 int anoFinal = 0;
703
704
705 if (item.getDataInicioIett() != null && item.getDataTerminoIett() != null) {
706 mes = Data.getMes(item.getDataInicioIett()) + 1;
707 ano = Data.getAno(item.getDataInicioIett());
708 mesFinal = Data.getMes(item.getDataTerminoIett()) + 1;
709 anoFinal = Data.getAno(item.getDataTerminoIett());
710 }
711
712 else if (item.getDataInicioIett() != null && item.getDataTerminoIett() == null) {
713
714 mes = Data.getMes(item.getDataInicioIett()) + 1;
715 ano = Data.getAno(item.getDataInicioIett());
716 mesFinal = 0;
717 anoFinal = 0;
718
719 List exerciciosTemp = q.list();
720
721 if (exerciciosTemp != null && exerciciosTemp.size() > 0) {
722 ExercicioExe exercicioFinal = (ExercicioExe) exerciciosTemp.get(exerciciosTemp.size() - 1);
723 mesFinal = Data.getMes(exercicioFinal.getDataFinalExe());
724 anoFinal = Data.getAno(exercicioFinal.getDataFinalExe());
725 }
726 }
727
728 else {
729 mes = Data.getMes(item.getDataTerminoIett()) + 2;
730
731
732
733
734
735 ano = Data.getAno(item.getDataTerminoIett()) + 1;
736
737
738
739
740
741 mesFinal = Data.getMes(item.getDataTerminoIett()) + 1;
742 anoFinal = Data.getAno(item.getDataTerminoIett());
743
744 List exerciciosTemp = q.list();
745
746 if (exerciciosTemp != null && exerciciosTemp.size() > 0) {
747 ExercicioExe exercicioInicial = (ExercicioExe) exerciciosTemp.get(0);
748 mes = Data.getMes(exercicioInicial.getDataInicialExe());
749 ano = Data.getAno(exercicioInicial.getDataInicialExe());
750 }
751 }
752
753 String mesAux = String.valueOf(mes);
754 if (mes < 10) {
755 mesAux = "0" + mesAux;
756 }
757 long anoMesItemInicio = Long.parseLong(String.valueOf(ano) + mesAux);
758
759 mesAux = String.valueOf(mesFinal);
760 if (mesFinal < 10) {
761 mesAux = "0" + mesAux;
762 }
763 long anoMesItemFim = Long.parseLong(String.valueOf(anoFinal) + mesAux);
764
765 if (anoMesArfMaisAntigo > 0 && anoMesArfMaisAntigo < anoMesItemInicio) {
766 mes = arfMaisAntigo.getMesArf().intValue();
767 ano = arfMaisAntigo.getAnoArf().intValue();
768 }
769 if (anoMesArfMaisRecente > 0 && anoMesArfMaisRecente > anoMesItemFim) {
770 mesFinal = arfMaisRecente.getMesArf().intValue();
771 anoFinal = arfMaisRecente.getAnoArf().intValue();
772 }
773
774 while (ano < anoFinal || (ano == anoFinal && mes <= mesFinal)) {
775 ExercicioExe exercicio = acompReferenciaDao.getExercicio(String.valueOf(ano), String.valueOf(mes));
776 if (exercicio != null && !resultado.contains(exercicio)) {
777 resultado.add(exercicio);
778 }
779
780 mes++;
781 if (mes > 12) {
782 mes = 1;
783 ano++;
784 }
785 }
786 }
787 }
788
789 else {
790 resultado = q.list();
791 }
792 } catch (HibernateException e) {
793 this.logger.error(e);
794 throw new ECARException("erro.hibernateException");
795 }
796
797 return (resultado);
798 }
799
800 }