1
2
3
4
5 package ecar.servlet.relatorio;
6
7 import java.util.ArrayList;
8 import java.util.Collections;
9 import java.util.Comparator;
10 import java.util.Iterator;
11 import java.util.List;
12 import java.util.Set;
13
14 import javax.servlet.http.HttpServletRequest;
15
16 import comum.util.Data;
17 import comum.util.Pagina;
18 import comum.util.Util;
19 import comum.util.XmlBuilder;
20
21 import ecar.bean.FonteRecursosPPA;
22 import ecar.bean.TotalizadorRelatorios;
23 import ecar.dao.ItemEstruturaDao;
24 import ecar.exception.ECARException;
25 import ecar.pojo.ItemEstruturaIett;
26 import ecar.pojo.ItemEstruturarevisaoIettrev;
27
28
29
30
31
32 public class RelatorioApendiceTres extends AbstractServletReportXmlXsl {
33
34
35
36
37 private static final long serialVersionUID = 2395457474744685932L;
38 private static final int nivelPrograma = 2;
39 private static final int nivelAcao = 3;
40 private static final int nivelProduto = 4;
41
42 private ItemEstruturaDao itemEstruturaDao;
43
44 private String periodoIni;
45 private String periodoFim;
46 private int paginaInicial;
47 private String titulo;
48 private List todosItens;
49 private String tipoRelatorio;
50 private String tipoValor;
51
52 private List idsEstrutura;
53 private List totalizadorEstrutura;
54 private List totalizadorValores;
55
56 private double totalGeralProgramas;
57 private double totalGeralAcoes;
58
59
60
61
62
63
64
65
66
67
68
69 public StringBuffer getXml(HttpServletRequest request) throws ECARException{
70 XmlBuilder builder = new XmlBuilder();
71 itemEstruturaDao = new ItemEstruturaDao(request);
72
73 idsEstrutura = new ArrayList();
74 totalizadorEstrutura = new ArrayList();
75 totalizadorValores = new ArrayList();
76
77 totalGeralAcoes = 0;
78 totalGeralProgramas = 0;
79
80 periodoIni = Pagina.getParamStr(request, "periodoIni");
81 periodoFim = Pagina.getParamStr(request, "periodoFim");
82 paginaInicial = Pagina.getParamInt(request, "paginaInicial");
83 tipoRelatorio = Pagina.getParamStr(request, "indTipoRelatorio");
84 tipoValor = Pagina.getParamStr(request, "indTipoValor");
85
86 titulo = "ESTADO DO PARANÁ - PPA " + periodoIni + "/" + periodoFim + " - Atualizado";
87
88 Util.liberarImagem();
89
90 String nomeRelatorio = "";
91 String valorRelatorio = "";
92 if("A".equals(tipoValor)){
93 valorRelatorio = " - Valores Aprovados (Histórico)";
94 }
95 String indMostrarTotalizador = Pagina.getParamStr(request, "indMostrarTotalizador");
96
97 nomeRelatorio = "REVISÃO DO PPA " + periodoIni + "-" + periodoFim + " - PPA ATUALIZADO";
98
99 String mesAnoGeracao = Data.getNomeMesExtenso(Data.getMes(Data.getDataAtual()) + 1).toUpperCase() + " " + String.valueOf(Data.getAno(Data.getDataAtual()));
100
101 builder.addNode("relatorio",
102 " titulo=\"" + builder.normalize(titulo) + "\"" +
103 " capa=\"" + builder.normalize(String.valueOf(paginaInicial)) + "\"" +
104 " paginaInicial=\"" + builder.normalize(String.valueOf(paginaInicial+1)) + "\"" +
105 " nomeRelatorio=\"" + builder.normalize(nomeRelatorio) + "\"" +
106 " nomeRelatorioRodape=\"" + builder.normalize(valorRelatorio) + "\"" +
107 " tipo=\"" + builder.normalize(tipoRelatorio) + "\"" +
108 " anoIni=\"" + builder.normalize(periodoIni) + "\"" +
109 " anoFim=\"" + builder.normalize(periodoFim) + "\"" +
110 " valores=\"" + builder.normalize(tipoValor) + "\"" +
111 " mesAnoGeracao=\"" + builder.normalize(mesAnoGeracao) + "\"" +
112 " mostrarTotalizador=\"" + builder.normalize(indMostrarTotalizador) + "\"");
113
114 todosItens = new ArrayList(itemEstruturaDao.getArvoreItensIettComRevisao(tipoRelatorio, periodoIni, periodoFim));
115
116 geraXMLItens(builder);
117
118 geraXMLTotalizador(builder);
119
120 builder.closeNode("relatorio");
121 return builder.toStringBuffer();
122 }
123
124
125
126
127
128
129
130
131
132
133 public String getXslFileName() {
134 return "relatorioApendice.xsl";
135 }
136
137
138
139
140
141
142
143
144
145
146
147 public String getErrorPage(HttpServletRequest request, String mensagem){
148 String errorPage = "rel_ppa.jsp?msgOperacao=" + mensagem;
149 return errorPage;
150 }
151
152
153
154
155
156
157
158
159
160
161 public void geraXMLItens (XmlBuilder builder) throws ECARException {
162 List itens = new ArrayList(todosItens);
163
164 if(itens != null){
165 Iterator itItens = itens.iterator();
166 while(itItens.hasNext()){
167 ItemEstruturaIett iett = (ItemEstruturaIett) itItens.next();
168
169 if(iett.getNivelIett().intValue() == nivelPrograma){
170 geraXMLPrograma(builder, iett);
171 }
172 }
173 }
174 }
175
176
177
178
179
180
181
182
183
184
185
186
187 public void geraXMLPrograma(XmlBuilder builder, ItemEstruturaIett item) throws ECARException{
188
189
190
191 String nomePrograma = item.getNomeIett();
192 String codigoPrograma = item.getSiglaIett();
193
194 builder.addNode("programa",
195 "nome=\"" + builder.normalize(nomePrograma) + "\"" +
196 " codigo=\"" + builder.normalize(codigoPrograma) + "\"");
197
198 geraXMLDadosPrograma(builder, item);
199
200 builder.addNode("acao",
201 "periodo=\"" + builder.normalize(periodoIni + "-" + periodoFim) + "\"" +
202 " tipoApendice=\"" + builder.normalize(tipoRelatorio) + "\"");
203
204
205 List itensAcao = new ArrayList(todosItens);
206 Iterator itAcao = itensAcao.iterator();
207 boolean gerouAcao = false;
208 while(itAcao.hasNext()){
209 ItemEstruturaIett iettAcao = (ItemEstruturaIett) itAcao.next();
210 if(iettAcao.getNivelIett().intValue() == nivelAcao && item.equals(iettAcao.getItemEstruturaIett())){
211 boolean aux = geraXMLAcao(builder, iettAcao);
212 gerouAcao = gerouAcao || aux;
213
214
215
216
217
218 }
219 }
220
221 if(gerouAcao)
222 this.incrementarTotalizadorEstrutura(item.getEstruturaEtt().getCodEtt(), "Programas Considerados");
223
224 builder.closeNode("acao");
225
226 builder.closeNode("programa");
227 }
228
229
230
231
232
233
234
235
236
237
238
239 public void geraXMLDadosPrograma(XmlBuilder builder, ItemEstruturaIett item) throws ECARException{
240 builder.addNode("dados");
241 String orgao = "";
242 if(item.getOrgaoOrgByCodOrgaoResponsavel2Iett() != null)
243 orgao = item.getOrgaoOrgByCodOrgaoResponsavel2Iett().getDescricaoOrg();
244
245 builder.addClosedNode("campo", "label=\"Órgão Resp.\" valor=\"" + builder.normalize(orgao) + "\"");
246 builder.closeNode("dados");
247 }
248
249
250
251
252
253
254
255
256
257
258
259
260 public boolean geraXMLAcao(XmlBuilder builder, ItemEstruturaIett item) throws ECARException{
261
262 String situacaoAcao = "";
263 String tipoSituacaoAcao = "";
264 String justificativa = "";
265 String nome = "";
266
267 boolean acaoExcluida = false;
268 boolean gerouAcao = false;
269
270 if(item.getItemEstruturarevisaoIettrevs() != null && item.getItemEstruturarevisaoIettrevs().size() > 0){
271 ItemEstruturarevisaoIettrev ultRevAcao = getUltimaRevisaoIett(item.getItemEstruturarevisaoIettrevs());
272 if(ultRevAcao != null){
273 tipoSituacaoAcao = ultRevAcao.getSituacaoIettrev();
274
275 if(ultRevAcao.getDescricaoR3rev() != null && !"".equals(ultRevAcao.getDescricaoR3rev()))
276 nome = ultRevAcao.getDescricaoR3rev();
277 else
278 nome = ultRevAcao.getNomeIettrev();
279
280 if("E".equals(tipoSituacaoAcao)){
281 situacaoAcao = " (Ação Excluída)";
282 acaoExcluida = true;
283 justificativa = ultRevAcao.getJustificativaIettrev();
284 }
285 }
286 }
287
288
289 boolean gerarAcao = acaoExcluida;
290
291 if(!acaoExcluida){
292 gerarAcao = verificarProdutosExcluidos(item);
293 }
294
295 if(gerarAcao){
296
297 if("".equals(nome)){
298 if(item.getDescricaoR3() != null && !"".equals(item.getDescricaoR3()))
299 nome = item.getDescricaoR3();
300 else
301 nome = item.getNomeIett();
302 }
303
304 builder.addNode("itemAcao",
305
306 "nome=\"" + builder.normalize(nome.toUpperCase()) + "\"" +
307 " codigo=\"" + builder.normalize(item.getSiglaIett()) + "\"" +
308 " valorTotal=\"\"" +
309 " tipoSituacaoAcao=\"" + builder.normalize(tipoSituacaoAcao) + "\"" +
310 " situacaoAcao=\"" + builder.normalize(situacaoAcao) + "\"" +
311 " justificativa=\"" + builder.normalize(justificativa) + "\"" +
312 " larguraColAcao=\"13.5cm\"" +
313 " larguraColAux=\"1cm\"");
314
315 gerouAcao = true;
316 this.incrementarTotalizadorEstrutura(item.getEstruturaEtt().getCodEtt(), "Quantidade de Ações Excluídas");
317
318
319 List itensProduto = new ArrayList(todosItens);
320 Iterator itProduto = itensProduto.iterator();
321 boolean gerouProduto = false;
322 while(itProduto.hasNext()){
323 ItemEstruturaIett iettProduto = (ItemEstruturaIett) itProduto.next();
324 if(iettProduto.getNivelIett().intValue() == nivelProduto && item.equals(iettProduto.getItemEstruturaIett())){
325 boolean aux = geraXMLProduto(builder, iettProduto, acaoExcluida);
326 gerouProduto = gerouProduto || aux;
327
328
329
330
331
332
333 }
334 }
335
336
337
338
339
340
341
342 builder.closeNode("itemAcao");
343 }
344
345 return gerouAcao;
346 }
347
348
349
350
351
352
353
354
355
356
357 public boolean verificarProdutosExcluidos(ItemEstruturaIett acao){
358 List itensProduto = new ArrayList(todosItens);
359 Iterator itProduto = itensProduto.iterator();
360 while(itProduto.hasNext()){
361 ItemEstruturaIett produto = (ItemEstruturaIett) itProduto.next();
362 if(produto.getNivelIett().intValue() == nivelProduto && acao.equals(produto.getItemEstruturaIett())){
363 if(produto.getItemEstruturarevisaoIettrevs() != null && produto.getItemEstruturarevisaoIettrevs().size() > 0){
364 Iterator itRevisoesProduto = produto.getItemEstruturarevisaoIettrevs().iterator();
365 while(itRevisoesProduto.hasNext()){
366 ItemEstruturarevisaoIettrev revProduto = (ItemEstruturarevisaoIettrev) itRevisoesProduto.next();
367 if("E".equals(revProduto.getSituacaoIettrev())){
368 return true;
369 }
370 }
371 }
372 }
373 }
374 return false;
375 }
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390 public boolean geraXMLProduto(XmlBuilder builder, ItemEstruturaIett item, boolean produtoAcaoExcluida) throws ECARException{
391 boolean gerouProduto = false;
392 String nome = "";
393 String tipoSituacao = "";
394 String justificativa = "";
395
396 List revisoes = new ArrayList(item.getItemEstruturarevisaoIettrevs());
397 Iterator itRevisoes = revisoes.iterator();
398 while(itRevisoes.hasNext()){
399 ItemEstruturarevisaoIettrev iettRev = (ItemEstruturarevisaoIettrev) itRevisoes.next();
400
401 nome = "";
402 if(iettRev.getDescricaoR3rev() != null && !"".equals(iettRev.getDescricaoR3rev()))
403 nome = iettRev.getDescricaoR3rev();
404 else
405 nome = iettRev.getNomeIettrev();
406
407 if("".equals(nome)){
408 if(item.getDescricaoR3() != null && !"".equals(item.getDescricaoR3()))
409 nome = item.getDescricaoR3();
410 else
411 nome = item.getNomeIett();
412 }
413
414
415
416
417
418
419 if(produtoAcaoExcluida)
420 justificativa = "";
421 else
422 justificativa = iettRev.getJustificativaIettrev();
423
424 tipoSituacao = iettRev.getSituacaoIettrev();
425
426 if(produtoAcaoExcluida)
427 tipoSituacao = "E";
428
429 if("E".equals(tipoSituacao)){
430 geraXMLItemProduto(builder, item, nome, "", "", tipoSituacao, "", "", justificativa);
431 gerouProduto = true;
432 }
433 }
434
435 return gerouProduto;
436 }
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454 public void geraXMLItemProduto(XmlBuilder builder, ItemEstruturaIett item, String nome,
455 String tipo, String unidade, String tipoSituacao, String regiao, String valor, String justificativa){
456 String situacao = "";
457 if("E".equals(tipoSituacao)){
458 situacao = "(Excluído)";
459 }
460
461 this.incrementarTotalizadorEstrutura(item.getEstruturaEtt().getCodEtt(), "Quantidade de Produtos Excluídos");
462
463 builder.addClosedNode("produto",
464 "nome=\"" + builder.normalize(nome) + "\" " +
465 "tipo=\"" + builder.normalize(tipo) + "\" " +
466 "unidade=\"" + builder.normalize(unidade) + "\" " +
467 "situacao=\"" + builder.normalize(situacao) + "\" " +
468 "tipoSituacao=\"" + builder.normalize(tipoSituacao) + "\" " +
469 "regiao=\"" + builder.normalize(regiao) + "\" " +
470 "valor=\"" + builder.normalize(valor) + "\" " +
471 "justificativa=\"" + builder.normalize(justificativa) + "\" " +
472 "tipoRelatorio=\"" + builder.normalize(tipoRelatorio) + "\"");
473 }
474
475
476
477
478
479
480
481
482
483
484 public ItemEstruturarevisaoIettrev getUltimaRevisaoIett(Set listaRevisoes){
485 ItemEstruturarevisaoIettrev retorno = null;
486 if(listaRevisoes != null && listaRevisoes.size() > 0){
487 List revisoes = new ArrayList(listaRevisoes);
488 Collections.sort(revisoes,
489 new Comparator(){
490 public int compare(Object o1, Object o2) {
491 ItemEstruturarevisaoIettrev iett1 = (ItemEstruturarevisaoIettrev) o1;
492 ItemEstruturarevisaoIettrev iett2 = (ItemEstruturarevisaoIettrev) o2;
493
494
495
496
497
498
499
500
501
502
503 return iett1.getDataInclusaoIettrev().compareTo(iett2.getDataInclusaoIettrev());
504 }
505 }
506 );
507 ItemEstruturarevisaoIettrev ultimoIettRev = (ItemEstruturarevisaoIettrev) revisoes.get(revisoes.size() - 1);
508 retorno = ultimoIettRev;
509 }
510
511 return retorno;
512 }
513
514
515
516
517
518
519
520
521
522
523 private void incrementarTotalizadorEstrutura(Long idEstrutura, String nomeEstrutura){
524 if(!idsEstrutura.contains(idEstrutura)){
525 TotalizadorRelatorios totalizador = new TotalizadorRelatorios();
526 totalizador.setId(idEstrutura);
527 totalizador.setEstrutura(nomeEstrutura);
528 totalizador.setTotal(1);
529
530 idsEstrutura.add(idEstrutura);
531 totalizadorEstrutura.add(totalizador);
532 }
533 else {
534 Iterator itTotalizadores = totalizadorEstrutura.iterator();
535 while(itTotalizadores.hasNext()){
536 TotalizadorRelatorios totalizador = (TotalizadorRelatorios) itTotalizadores.next();
537
538 if(idEstrutura.equals(totalizador.getId())){
539 totalizador.incrementeTotal();
540 break;
541 }
542 }
543 }
544 }
545
546
547
548
549
550
551
552
553
554
555 public void geraXMLTotalizador(XmlBuilder builder) throws ECARException{
556 try{
557 int total = 0;
558 builder.addNode("totalizadores");
559 Iterator itTotalizadores = totalizadorEstrutura.iterator();
560 while(itTotalizadores.hasNext()){
561 TotalizadorRelatorios tr = (TotalizadorRelatorios) itTotalizadores.next();
562 String nome = tr.getEstrutura();
563 String valor = "" + tr.getTotal();
564 total += tr.getTotal();
565 builder.addClosedNode("totalizador",
566 "nome=\"" + builder.normalize(nome) + "\"" +
567 " valor=\"" + builder.normalize(valor) + "\"");
568 }
569 builder.addClosedNode("total",
570 "nome=\"Total:\"" +
571 " valor=\"" + builder.normalize(String.valueOf(total)) + "\"");
572 builder.closeNode("totalizadores");
573 } catch(Exception e){
574 this.logger.error(e);
575 throw new ECARException("Erro na criação do relatório: Totalizadores");
576 }
577 }
578
579
580
581
582
583
584
585
586
587
588 public void geraXMLTotalizadorValores(XmlBuilder builder) throws ECARException{
589 try{
590
591 builder.addNode("totalizadorValores");
592
593 Iterator itTotalizadores = totalizadorValores.iterator();
594 while(itTotalizadores.hasNext()){
595 FonteRecursosPPA tr = (FonteRecursosPPA) itTotalizadores.next();
596 String nome = tr.getLabel();
597 String valor = Util.formataMoeda(tr.getValor());
598
599
600 builder.addClosedNode("totalizador",
601 "nome=\"" + builder.normalize(nome) + "\"" +
602 " valor=\"" + builder.normalize(valor) + "\"");
603 }
604
605 builder.addClosedNode("totalizador",
606 "nome=\"Total Geral dos Programas\"" +
607 " valor=\"" + builder.normalize(Util.formataMoeda(totalGeralProgramas)) + "\"");
608
609 builder.addClosedNode("totalizador",
610 "nome=\"Total Geral das Ações\"" +
611 " valor=\"" + builder.normalize(Util.formataMoeda(totalGeralAcoes)) + "\"");
612
613 builder.closeNode("totalizadorValores");
614 } catch(Exception e){
615 this.logger.error(e);
616 throw new ECARException("Erro na criação do relatório: TotalizadorValores");
617 }
618 }
619 }