1 package ecar.servlet.relatorio.PPA;
2
3 import java.math.BigDecimal;
4 import java.util.ArrayList;
5 import java.util.Collection;
6 import java.util.Iterator;
7 import java.util.Set;
8 import java.util.TreeSet;
9
10 import javax.servlet.http.HttpServletRequest;
11
12 import org.apache.log4j.Logger;
13
14 import comum.util.Util;
15
16 import ecar.exception.ECARException;
17 import ecar.pojo.ItemEstrtIndResulIettr;
18 import ecar.pojo.ItemEstrutFisicoIettf;
19 import ecar.pojo.ItemEstruturaIettPPA;
20 import ecar.pojo.ItemEstruturaSisAtributoIettSatb;
21 import ecar.pojo.UsuarioUsu;
22 import ecar.servlet.relatorio.PPA.bean.AcaoBean;
23 import ecar.servlet.relatorio.PPA.bean.IndicadorBean;
24 import ecar.servlet.relatorio.PPA.bean.ProdutoBean;
25 import ecar.servlet.relatorio.PPA.bean.ProgramaBean;
26 import ecar.servlet.relatorio.PPA.bean.RelatorioPPABean;
27 import ecar.servlet.relatorio.PPA.bean.comparator.ItemEstruturaComparatorNome;
28 import ecar.servlet.relatorio.PPA.bean.comparator.ItemEstruturaComparatorSiglaNumero;
29 import ecar.servlet.relatorio.PPA.bean.comparator.ProdutoBeanComparatorDescricao;
30 import ecar.servlet.relatorio.PPA_Util.CalcularTotalVisitor;
31
32
33
34
35
36
37
38
39 public class RelatorioPPAService {
40
41
42
43
44 private Logger logger = Logger.getLogger(this.getClass());
45
46
47
48
49 private HttpServletRequest request;
50
51
52
53
54 private ArrayList<RelatorioPPABean> dados;
55
56
57
58
59 private final CalcularTotalVisitor calcularTotal = new CalcularTotalVisitor();
60
61 private RelatorioParametro buscarItensService;
62
63 private CalcularPrevisaoService calcularPrevisaoService;
64
65 CarregaItensCompleto itensService = null;
66
67 private final String CONSTANTE_LINHA_ACAO_OBRIGACOES_ESPECIAIS = "99";
68
69
70
71
72 private RelatorioPPAService() {
73 dados = new ArrayList<RelatorioPPABean>();
74 }
75
76
77
78
79
80
81
82
83
84
85
86 public static RelatorioPPAService getInstance(
87 HttpServletRequest paramRequest) {
88 RelatorioPPAService objeto = new RelatorioPPAService();
89 objeto.request = paramRequest;
90
91 return objeto;
92 }
93
94
95
96
97
98
99 public ArrayList<RelatorioPPABean> generatePPA(String tipoParametro,
100 ArrayList<String> programa, String orgao,
101 ArrayList<String> listaCriteriosCom,
102 ArrayList<String> listaCriteriosSem) throws ECARException {
103
104 try {
105 calcularPrevisaoService = new CalcularPrevisaoService(request);
106
107 testParametros(tipoParametro, programa, orgao, listaCriteriosCom,
108 listaCriteriosSem);
109 logger.info("Carregando dados de linhas de acao...");
110 ArrayList<ItemEstruturaIettPPA> itens = buscarItensService.execute(
111 programa, Long.valueOf(orgao), listaCriteriosCom,
112 listaCriteriosSem);
113
114 if (buscarItensService.getTipo().equals(
115 TipoPesquisaRelatorio.TIPO_1)
116 || buscarItensService.getTipo().equals(
117 TipoPesquisaRelatorio.TIPO_2)) {
118 getDados(itens);
119 }
120
121 } catch (Exception e) {
122 e.printStackTrace(System.out);
123 logger.error(e);
124 throw new ECARException(
125 "Nao foi possivel carregar dados do relatorio");
126 }
127
128 return dados == null ? new ArrayList<RelatorioPPABean>() : dados;
129
130 }
131
132
133
134
135
136
137
138
139
140
141
142 private void testParametros(String tipoParametro, ArrayList programa,
143 String orgao, ArrayList listaCriteriosCom,
144 ArrayList listaCriteriosSem) {
145
146 final String PPA_COMPLETO = "completo";
147 final String PPA_ORGAO = "orgao";
148 final String PPA_PROGRAMA = "programa";
149
150 if (PPA_COMPLETO.equalsIgnoreCase(tipoParametro)) {
151
152 if (listaCriteriosCom.isEmpty() && listaCriteriosSem.isEmpty()) {
153 logger.info("Carregando relatorio PPA Projeto de Lei:::: Parametro:Completo sem criterios");
154 buscarItensService = RelatorioParametroFactory.getPesquisa(
155 request, TipoPesquisaRelatorio.TIPO_1);
156 } else {
157 logger.info("Carregando relatorio PPA Projeto de Lei:::: Parametro:Completo com filtro de criterios");
158 buscarItensService = RelatorioParametroFactory.getPesquisa(
159 request, TipoPesquisaRelatorio.TIPO_2);
160 }
161
162 }
163
164
165 if (buscarItensService == null) {
166 buscarItensService = RelatorioParametroFactory.getPesquisa(request,
167 TipoPesquisaRelatorio.TIPO_1);
168 }
169
170 }
171
172
173
174
175
176
177 private void getDados(ArrayList<ItemEstruturaIettPPA> itensLinhaAcao) {
178
179 boolean vazio = true;
180 try {
181
182
183
184 TipoPesquisaRelatorio tipoRelatorio = buscarItensService.getTipo();
185
186 if ( tipoRelatorio.equals(TipoPesquisaRelatorio.TIPO_1)){
187 itensService = new CarregaItensCompleto(request, false);
188 }else{
189 itensService = new CarregaItensCompleto(request, true);
190 }
191 itensService.initPrevisao(request);
192
193 dados = new ArrayList<RelatorioPPABean>();
194
195 for (Iterator<ItemEstruturaIettPPA> iter = itensLinhaAcao.iterator(); iter
196 .hasNext();) {
197 ItemEstruturaIettPPA iett = iter.next();
198
199 boolean check99 = "99".equals( iett.getSiglaIett() )?false:true;
200
201 vazio = false;
202
203 RelatorioPPABean linha = new RelatorioPPABean();
204 linha.setCodigo(iett.getSiglaIett());
205 linha.setNome(iett.getNomeIett());
206 linha.setDescricao( iett.getDescricaoIett() );
207 logger.info("Carregando dados de programa da linha de acao::" + linha.getNome());
208
209
210 linha.setProgramas(generateBeanPrograma( iett.getItemEstruturaIetts() , check99 ) );
211
212 dados.add(linha);
213
214 }
215
216 if (vazio) {
217 logger.info("Nao existe item de nivelprograma na estrutura no periodo estipulado!!!");
218 }
219
220 } catch (Exception e) {
221 logger.error("Nao foi possivel carregar dados", e);
222 }
223 }
224
225
226
227
228
229
230
231
232
233 private ArrayList<ProgramaBean> generateBeanPrograma(
234 Set<ItemEstruturaIettPPA> programas, boolean bean99 ) throws Exception {
235
236 ArrayList<ProgramaBean> progs = new ArrayList<ProgramaBean>();
237
238 for (Iterator iter = reordenarPorNome(programas).iterator(); iter
239 .hasNext();) {
240 ItemEstruturaIettPPA programa = (ItemEstruturaIettPPA) iter.next();
241
242 if ("S".equalsIgnoreCase(programa.getIndAtivoIett())) {
243
244 ProgramaBean item = geraPrograma(programa,bean99);
245
246 if ( bean99 ){
247 geraPrevisao(item, programa);
248 calcularTotal.visit(item);
249 }else{
250 item.setTotalGeralRecursoTot( new BigDecimal(-1) );
251 }
252
253 progs.add(item);
254
255 }
256
257 }
258
259 return progs;
260
261 }
262
263
264
265
266
267
268
269
270 private Set reordenarPorSiglaNumero(Collection list) {
271 TreeSet<ItemEstruturaIettPPA> novalista = new TreeSet<ItemEstruturaIettPPA>(
272 new ItemEstruturaComparatorSiglaNumero());
273 for (Iterator iter = list.iterator(); iter.hasNext();) {
274 ItemEstruturaIettPPA item = (ItemEstruturaIettPPA) iter.next();
275 novalista.add(item);
276
277 }
278 return novalista;
279 }
280
281
282
283
284
285
286
287
288
289 private Set reordenarPorNome(Collection list) {
290 TreeSet<ItemEstruturaIettPPA> novalista = new TreeSet<ItemEstruturaIettPPA>(
291 new ItemEstruturaComparatorNome());
292 for (Iterator iter = list.iterator(); iter.hasNext();) {
293 ItemEstruturaIettPPA item = (ItemEstruturaIettPPA) iter.next();
294 novalista.add(item);
295
296 }
297 return novalista;
298 }
299
300
301
302
303
304
305
306
307
308
309
310 private void geraPrevisao(ProgramaBean item, ItemEstruturaIettPPA itemPrograma)
311 throws ECARException {
312 BigDecimal[] previsoes = calcularPrevisaoService.calcularPrevisao((itemPrograma));
313 final BigDecimal ZERO = new BigDecimal(0);
314
315 if (previsoes != null && previsoes.length == 24) {
316 item.setValor1(previsoes[0] == null ? ZERO : previsoes[0]);
317 item.setValor2(previsoes[1] == null ? ZERO : previsoes[1]);
318 item.setValor3(previsoes[2] == null ? ZERO : previsoes[2]);
319 item.setValor4(previsoes[3] == null ? ZERO : previsoes[3]);
320 item.setValor5(previsoes[4] == null ? ZERO : previsoes[4]);
321 item.setValor6(previsoes[5] == null ? ZERO : previsoes[5]);
322 item.setValor7(previsoes[6] == null ? ZERO : previsoes[6]);
323 item.setValor8(previsoes[7] == null ? ZERO : previsoes[7]);
324
325 item.setValor9(previsoes[8] == null ? ZERO : previsoes[8]);
326 item.setValor10(previsoes[9] == null ? ZERO : previsoes[9]);
327 item.setValor11(previsoes[10] == null ? ZERO : previsoes[10]);
328 item.setValor12(previsoes[11] == null ? ZERO : previsoes[11]);
329 item.setValor13(previsoes[12] == null ? ZERO : previsoes[12]);
330 item.setValor14(previsoes[13] == null ? ZERO : previsoes[13]);
331 item.setValor15(previsoes[14] == null ? ZERO : previsoes[14]);
332 item.setValor16(previsoes[15] == null ? ZERO : previsoes[15]);
333
334 item.setValor17(previsoes[16] == null ? ZERO : previsoes[16]);
335 item.setValor18(previsoes[17] == null ? ZERO : previsoes[17]);
336 item.setValor19(previsoes[18] == null ? ZERO : previsoes[18]);
337 item.setValor20(previsoes[19] == null ? ZERO : previsoes[19]);
338 item.setValor21(previsoes[20] == null ? ZERO : previsoes[20]);
339 item.setValor22(previsoes[21] == null ? ZERO : previsoes[21]);
340 item.setValor23(previsoes[22] == null ? ZERO : previsoes[22]);
341 item.setValor24(previsoes[23] == null ? ZERO : previsoes[23]);
342
343 } else {
344
345 item.setValor1(ZERO);
346 item.setValor2(ZERO);
347 item.setValor3(ZERO);
348 item.setValor4(ZERO);
349 item.setValor5(ZERO);
350 item.setValor6(ZERO);
351 item.setValor7(ZERO);
352 item.setValor8(ZERO);
353
354 item.setValor9(ZERO);
355 item.setValor10(ZERO);
356 item.setValor11(ZERO);
357 item.setValor12(ZERO);
358 item.setValor13(ZERO);
359 item.setValor14(ZERO);
360 item.setValor15(ZERO);
361 item.setValor16(ZERO);
362
363 item.setValor17(ZERO);
364 item.setValor18(ZERO);
365 item.setValor19(ZERO);
366 item.setValor20(ZERO);
367 item.setValor21(ZERO);
368 item.setValor22(ZERO);
369 item.setValor23(ZERO);
370 item.setValor24(ZERO);
371 }
372
373 }
374
375
376
377
378
379
380
381
382
383
384 private void geraPrevisao(AcaoBean acao, ItemEstruturaIettPPA item)
385 throws ECARException {
386 BigDecimal[] previsoes = calcularPrevisaoService.calcularPrevisaoSemIntegralizacao((item));
387 final BigDecimal ZERO = new BigDecimal(0);
388
389 if (previsoes != null && previsoes.length == 24) {
390 acao.setValor1(previsoes[0] == null ? ZERO : previsoes[0]);
391 acao.setValor2(previsoes[1] == null ? ZERO : previsoes[1]);
392 acao.setValor3(previsoes[2] == null ? ZERO : previsoes[2]);
393 acao.setValor4(previsoes[3] == null ? ZERO : previsoes[3]);
394 acao.setValor5(previsoes[4] == null ? ZERO : previsoes[4]);
395 acao.setValor6(previsoes[5] == null ? ZERO : previsoes[5]);
396 acao.setValor7(previsoes[6] == null ? ZERO : previsoes[6]);
397 acao.setValor8(previsoes[7] == null ? ZERO : previsoes[7]);
398
399 acao.setValor9(previsoes[8] == null ? ZERO : previsoes[8]);
400 acao.setValor10(previsoes[9] == null ? ZERO : previsoes[9]);
401 acao.setValor11(previsoes[10] == null ? ZERO : previsoes[10]);
402 acao.setValor12(previsoes[11] == null ? ZERO : previsoes[11]);
403 acao.setValor13(previsoes[12] == null ? ZERO : previsoes[12]);
404 acao.setValor14(previsoes[13] == null ? ZERO : previsoes[13]);
405 acao.setValor15(previsoes[14] == null ? ZERO : previsoes[14]);
406 acao.setValor16(previsoes[15] == null ? ZERO : previsoes[15]);
407
408 acao.setValor17(previsoes[16] == null ? ZERO : previsoes[16]);
409 acao.setValor18(previsoes[17] == null ? ZERO : previsoes[17]);
410 acao.setValor19(previsoes[18] == null ? ZERO : previsoes[18]);
411 acao.setValor20(previsoes[19] == null ? ZERO : previsoes[19]);
412 acao.setValor21(previsoes[20] == null ? ZERO : previsoes[20]);
413 acao.setValor22(previsoes[21] == null ? ZERO : previsoes[21]);
414 acao.setValor23(previsoes[22] == null ? ZERO : previsoes[22]);
415 acao.setValor24(previsoes[23] == null ? ZERO : previsoes[23]);
416
417 } else {
418
419 acao.setValor1(ZERO);
420 acao.setValor2(ZERO);
421 acao.setValor3(ZERO);
422 acao.setValor4(ZERO);
423 acao.setValor5(ZERO);
424 acao.setValor6(ZERO);
425 acao.setValor7(ZERO);
426 acao.setValor8(ZERO);
427
428 acao.setValor9(ZERO);
429 acao.setValor10(ZERO);
430 acao.setValor11(ZERO);
431 acao.setValor12(ZERO);
432 acao.setValor13(ZERO);
433 acao.setValor14(ZERO);
434 acao.setValor15(ZERO);
435 acao.setValor16(ZERO);
436
437 acao.setValor17(ZERO);
438 acao.setValor18(ZERO);
439 acao.setValor19(ZERO);
440 acao.setValor20(ZERO);
441 acao.setValor21(ZERO);
442 acao.setValor22(ZERO);
443 acao.setValor23(ZERO);
444 acao.setValor24(ZERO);
445 }
446
447 }
448
449
450
451
452
453
454 private ProgramaBean geraPrograma(ItemEstruturaIettPPA itemPrograma, boolean bean99 )
455 throws ECARException {
456
457 ProgramaBean programa = new ProgramaBean();
458
459
460 if ( bean99 ){
461 programa.setCodigo(itemPrograma.getSiglaIett());
462 programa.setNome(itemPrograma.getNomeIett());
463 programa.setJustificativa(Util.normalizaCaracterMarcador(itemPrograma.getDescricaoIett()));
464 programa.setObjetivo(Util.normalizaCaracterMarcador(itemPrograma.getObjetivoEspecificoIett()));
465 programa.setEstrategiaImpl(Util.normalizaCaracterMarcador(itemPrograma.getObjetivoGeralIett()));
466 programa.setOrgao(itemPrograma.getOrgaoOrgByCodOrgaoResponsavel1Iett()
467 .getDescricaoOrg());
468
469 Set usuarioOrgao = itemPrograma.getOrgaoOrgByCodOrgaoResponsavel1Iett()
470 .getUsuarioUsus();
471 String usrTmp = "";
472 for (Iterator iter = usuarioOrgao.iterator(); iter.hasNext();) {
473 UsuarioUsu element = (UsuarioUsu) iter.next();
474 usrTmp = element.getNomeUsu();
475 }
476
477 programa.setGestorPrograma(usrTmp);
478 programa.setInicio(itemPrograma.getDataInicioIett());
479 programa.setFim(itemPrograma.getDataTerminoIett());
480 programa.setPublicoAlvo(Util.normalizaCaracterMarcador(itemPrograma.getDescricaoR2()));
481
482 Set atributos = itemPrograma.getItemEstruturaSisAtributoIettSatbs();
483 String tipoAcao = null;
484
485 for (Iterator iter = atributos.iterator(); iter.hasNext();) {
486 ItemEstruturaSisAtributoIettSatb atributo = (ItemEstruturaSisAtributoIettSatb) iter
487 .next();
488 if ( atributo.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().longValue() == 15L ){
489 tipoAcao = atributo.getSisAtributoSatb().getDescricaoSatb();
490 break;
491 }
492
493 }
494 programa.setTipoAcao(tipoAcao == null ? "" : tipoAcao);
495
496
497
498
499
500
501
502 ArrayList<IndicadorBean> indicadores = generateIndicadores(itemPrograma.getItemEstrtIndResulIettrs());
503
504 programa.setIndicadores(indicadores);
505
506
507
508
509 }
510
511 ArrayList<AcaoBean> ItensAcao = generateAcaoBean( itemPrograma.getItemEstruturaIetts() );
512
513 programa.setAcoes(ItensAcao);
514
515 return programa;
516
517 }
518
519 private ArrayList<IndicadorBean> generateIndicadores(Set indicadores)
520 throws ECARException {
521
522 IndicadorBean bean = null;
523
524 ArrayList<IndicadorBean> retorno = new ArrayList<IndicadorBean>();
525
526 for (Iterator iter = indicadores.iterator(); iter.hasNext();) {
527 ItemEstrtIndResulIettr ind = (ItemEstrtIndResulIettr) iter.next();
528
529 if ( ind.getIndAtivoIettr()!=null && "S".equalsIgnoreCase(ind.getIndAtivoIettr())) {
530
531 bean = new IndicadorBean();
532
533 bean.setNome(ind.getNomeIettir());
534 bean.setUnidade(ind.getUnidMedidaIettr());
535 bean.setPeriodicidade(ind.getPeriodicidadePrdc() != null ? ind
536 .getPeriodicidadePrdc().getDescricaoPrdc() : "");
537 bean.setFonte(ind.getFonteIettr());
538 bean.setIndiceRecente(ind.getIndiceMaisRecenteIettr());
539 bean.setDataApuracao(ind.getDataApuracaoIettr());
540
541 Set fisico = ind.getItemEstrutFisicoIettfs();
542 for (Iterator iterator = fisico.iterator(); iterator.hasNext();) {
543 ItemEstrutFisicoIettf elemento = (ItemEstrutFisicoIettf) iterator
544 .next();
545
546 if (elemento.getExercicioExe().getDescricaoExe()
547 .equalsIgnoreCase("2008")) {
548 bean.setIndiceDt1(elemento.getQtdPrevistaIettf());
549
550 }
551 if (elemento.getExercicioExe().getDescricaoExe()
552 .equalsIgnoreCase("2009")) {
553 bean.setIndiceDt2(elemento.getQtdPrevistaIettf());
554
555 }
556 if (elemento.getExercicioExe().getDescricaoExe()
557 .equalsIgnoreCase("2010")) {
558 bean.setIndiceDt3(elemento.getQtdPrevistaIettf());
559
560 }
561
562 if (elemento.getExercicioExe().getDescricaoExe()
563 .equalsIgnoreCase("2011")) {
564 bean.setIndiceDt4(elemento.getQtdPrevistaIettf());
565
566 }
567
568 }
569
570 retorno.add(bean);
571 }
572 }
573
574 return contadorIndicador(retorno);
575
576 }
577
578 private ArrayList<IndicadorBean> contadorIndicador(ArrayList<IndicadorBean> list){
579
580
581 int cont =0;
582 for (Iterator iter = list.iterator(); iter.hasNext();) {
583 IndicadorBean element = (IndicadorBean) iter.next();
584 element.setIndice(new Integer(cont));
585 cont++;
586
587 }
588 return list;
589 }
590
591
592
593
594
595
596
597
598
599
600 private ArrayList<AcaoBean> generateAcaoBean(Set acoesParam)
601 throws ECARException {
602
603 try {
604 AcaoBean beanTmp = new AcaoBean();
605 ArrayList<AcaoBean> acoes = new ArrayList<AcaoBean>();
606 for (Iterator iterAcao = reordenarPorSiglaNumero(acoesParam)
607 .iterator(); iterAcao.hasNext();) {
608 ItemEstruturaIettPPA itemAcao = (ItemEstruturaIettPPA) iterAcao.next();
609
610 if ("S".equalsIgnoreCase(itemAcao.getIndAtivoIett())) {
611
612 beanTmp = new AcaoBean();
613
614 beanTmp.setCodigo(itemAcao.getSiglaIett());
615 beanTmp.setNome(itemAcao.getNomeIett());
616 beanTmp.setOrgao(itemAcao.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg());
617
618
619 if ( itemAcao.getItemEstruturaIett().getSiglaIett().equalsIgnoreCase( CONSTANTE_LINHA_ACAO_OBRIGACOES_ESPECIAIS ) ){
620 beanTmp.setFinalidade( null );
621 beanTmp.setDescricao( null );
622 }else{
623 beanTmp.setFinalidade( itemAcao.getObjetivoGeralIett() );
624 beanTmp.setDescricao( itemAcao.getDescricaoIett() );
625 }
626
627
628 geraPrevisao(beanTmp, itemAcao);
629 calcularTotal.visit(beanTmp);
630
631
632
633
634
635 Set produtos = itemAcao.getItemEstruturaIetts();
636
637 if ( produtos!=null && !produtos.isEmpty()){
638 ArrayList<ProdutoBean> prod = itensService.generateProdutoPPA(produtos);
639 beanTmp.setProdutos( contadorProduto(reordenarProduto(prod)) );
640
641 }
642
643 acoes.add(beanTmp);
644
645 }
646
647 }
648
649 return acoes;
650 } catch (Exception e) {
651 e.printStackTrace(System.out);
652 logger.error(e);
653 throw new ECARException("Nao foi possivel gerar bean de acao", e);
654 }
655
656 }
657
658
659 private TreeSet<ProdutoBean> reordenarProduto(ArrayList<ProdutoBean> colecao){
660 TreeSet<ProdutoBean> novaColecao = new TreeSet<ProdutoBean>( new ProdutoBeanComparatorDescricao() );
661 for (Iterator iter = colecao.iterator(); iter.hasNext();) {
662 ProdutoBean prod = (ProdutoBean) iter.next();
663 novaColecao.add( prod );
664 }
665 return novaColecao;
666 }
667
668
669 private TreeSet<ProdutoBean> contadorProduto(TreeSet<ProdutoBean> colecao){
670 int cont = 0;
671 for (Iterator iter = colecao.iterator(); iter.hasNext();) {
672 ProdutoBean prod = (ProdutoBean) iter.next();
673 prod.setIndice( new Integer(cont) );
674 cont++;
675 }
676 return colecao;
677 }
678
679
680
681 }