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.Date;
11 import java.util.HashSet;
12 import java.util.Iterator;
13 import java.util.List;
14 import java.util.Set;
15
16 import javax.servlet.http.HttpServletRequest;
17
18 import org.hibernate.HibernateException;
19
20 import comum.util.Data;
21 import comum.util.Mensagem;
22 import comum.util.Pagina;
23 import comum.util.Util;
24 import comum.util.XmlBuilder;
25
26 import ecar.dao.AcompRealFisicoDao;
27 import ecar.dao.AcompReferenciaDao;
28 import ecar.dao.AcompReferenciaItemDao;
29 import ecar.dao.ConfigRelatorioCfgrelDAO;
30 import ecar.dao.ConfiguracaoDao;
31 import ecar.dao.CorDao;
32 import ecar.dao.EstruturaAtributoDao;
33 import ecar.dao.EstruturaFuncaoDao;
34 import ecar.dao.ExercicioDao;
35 import ecar.dao.ItemEstrtIndResulDao;
36 import ecar.dao.ItemEstruturaContaOrcamentoDao;
37 import ecar.dao.ItemEstruturaDao;
38 import ecar.dao.ItemEstruturaPrevisaoDao;
39 import ecar.dao.ItemEstruturaRealizadoDao;
40 import ecar.dao.ModeloRelatorioMrelDAO;
41 import ecar.exception.ECARException;
42 import ecar.pojo.AcompRealFisicoArf;
43 import ecar.pojo.AcompReferenciaAref;
44 import ecar.pojo.AcompReferenciaItemAri;
45 import ecar.pojo.AcompRelatorioArel;
46 import ecar.pojo.ConfigRelatorioCfgrel;
47 import ecar.pojo.ConfiguracaoCfg;
48 import ecar.pojo.EfItemEstContaEfiec;
49 import ecar.pojo.EfItemEstPrevisaoEfiep;
50 import ecar.pojo.ExercicioExe;
51 import ecar.pojo.ItemEstruturaIett;
52 import ecar.pojo.ModeloRelatorioMrel;
53 import ecar.util.Dominios;
54
55
56
57
58
59
60
61
62
63
64 public class RelatorioAcompanhamento_BKP_07032007 extends AbstractServletReportXmlXsl {
65
66
67
68
69 private static final long serialVersionUID = 2395457474744685932L;
70
71 private static final String MODELO_ESTRUTURA = "ECAR-001C";
72
73 private HttpServletRequest request;
74 private ConfiguracaoDao configDao;
75 private ConfiguracaoCfg config;
76 private AcompReferenciaDao acompReferenciaDao;
77 private AcompReferenciaItemDao acompReferenciaItemDao;
78 private AcompRealFisicoDao acompRealFisicoDao;
79 private CorDao corDao;
80 private ConfigRelatorioCfgrel configRel;
81 private ConfigRelatorioCfgrelDAO configRelDao;
82 private String pathEcar;
83 private String modelo;
84 private EstruturaAtributoDao estAtribDao;
85 private EstruturaFuncaoDao estFuncDao;
86 private ItemEstruturaDao itemEstruturaDao;
87 private ItemEstruturaPrevisaoDao itemEstPrevDao;
88 private ItemEstruturaRealizadoDao itemEstRealizadoDao;
89 private ItemEstruturaContaOrcamentoDao itemEstContaOrcDao;
90 private ItemEstrtIndResulDao itemEstrtIndResulDao;
91
92
93
94
95
96
97
98
99
100
101
102 public StringBuffer getXml(HttpServletRequest request) throws ECARException{
103 XmlBuilder builder = new XmlBuilder();
104
105 Util.liberarImagem();
106
107 acompReferenciaDao = new AcompReferenciaDao(request);
108 acompReferenciaItemDao = new AcompReferenciaItemDao(request);
109 acompRealFisicoDao = new AcompRealFisicoDao(request);
110 configDao = new ConfiguracaoDao(request);
111 corDao = new CorDao(request);
112 configRelDao = new ConfigRelatorioCfgrelDAO(request);
113 estAtribDao = new EstruturaAtributoDao(request);
114 estFuncDao = new EstruturaFuncaoDao(request);
115 itemEstruturaDao = new ItemEstruturaDao(request);
116 itemEstPrevDao = new ItemEstruturaPrevisaoDao(request);
117 itemEstRealizadoDao = new ItemEstruturaRealizadoDao(request);
118 itemEstContaOrcDao = new ItemEstruturaContaOrcamentoDao(request);
119 itemEstrtIndResulDao = new ItemEstrtIndResulDao(request);
120
121 this.request = request;
122 config = configDao.getConfiguracao();
123 pathEcar = request.getContextPath();
124 configRel = configRelDao.getConfigRelatorioCfgrel();
125
126 String opcaoModelo = Pagina.getParamStr(request, "opcaoModelo");
127 ModeloRelatorioMrel mrel = new ModeloRelatorioMrelDAO(request).getModeloRelatorioByCodAlfa(opcaoModelo);
128
129 AcompReferenciaAref mesReferencia = (AcompReferenciaAref) acompReferenciaDao.buscar(AcompReferenciaAref.class, Long.valueOf(Pagina.getParamStr(request, "mesReferencia")));
130
131
132 String titulo = "";
133 if(!"".equals(Pagina.getParamStr(request, "tituloCustomizado")))
134 titulo = Pagina.getParamStr(request, "tituloCustomizado");
135 else {
136 if(configRel != null && !"".equals(configRel.getTituloCfgrel()))
137 titulo = configRel.getTituloCfgrel();
138 else
139 titulo = config.getTituloSistema();
140
141 }
142
143
144 String rodape = geraDataRodape();
145 if(!"".equals(Pagina.getParamStr(request, "rodapeCustomizado")))
146 rodape += " - " + Pagina.getParamStr(request, "rodapeCustomizado");
147 else {
148 if(configRel != null && configRel.getNotaRodapeCfgrel() != null && !"".equals(configRel.getNotaRodapeCfgrel()))
149 rodape += " - " + configRel.getNotaRodapeCfgrel();
150 }
151
152 String arisSelecionados = Pagina.getParamStr(request, "arisSelecionados");
153
154
155
156
157
158
159
160
161
162
163 List codArisSelecionados = new ArrayList();
164
165 if(!"".equals(arisSelecionados)){
166 String[] codAris = arisSelecionados.split(";");
167 for(int i = 0; i < codAris.length; i++){
168 if(!"".equals(codAris[i]) && !";".equals(codAris[i])){
169 codArisSelecionados.add(Long.valueOf(codAris[i]));
170 }
171 }
172 }
173
174 List arels = acompReferenciaItemDao.getAcompRelatorioAcompanhamentoByAris(codArisSelecionados, mesReferencia, opcaoModelo, Pagina.getParamStr(request, "chaveEscolhida"), Pagina.getParamStr(request, "tipoFuncAcompTpfa"));
175
176
177 builder.addNode("relatorio",
178 " titulo=\"" + builder.normalize(titulo) + "\"" +
179 " mesReferencia=\"" + builder.normalize(mesReferencia.getNomeAref()) + "\"" +
180 " codModelo=\"" + builder.normalize(mrel.getCodAlfaMrel() + " - " + mrel.getClassifMrel()) + "\"" +
181 " rodape=\"" + builder.normalize(rodape) + "\"" +
182 "");
183
184 modelo = mrel.getCodAlfaMrel();
185
186 geraXmlPrincipal(builder, arels);
187
188 builder.closeNode("relatorio");
189 return builder.toStringBuffer();
190 }
191
192
193
194
195
196
197
198
199
200
201
202 private void geraXmlPrincipal(XmlBuilder builder, List arels) throws ECARException{
203 builder.addNode("principal");
204
205 if(arels != null && !arels.isEmpty()){
206 Iterator it = arels.iterator();
207 boolean primeiroItem = true;
208 String siglaOrgaoImpresso = "";
209
210 long codIett = -1;
211 int indice = 0;
212 Set ascendentes = new HashSet();
213 while(it.hasNext()){
214 AcompRelatorioArel arel = (AcompRelatorioArel) it.next();
215
216 String siglaOrg = "";
217
218 if(arel.getAcompReferenciaItemAri().getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett() != null){
219 siglaOrg = arel.getAcompReferenciaItemAri().getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg();
220 }
221 else {
222 siglaOrg = "Órgão não informado";
223 }
224
225 String siglaOrgItem = "";
226 if(MODELO_ESTRUTURA.equals(modelo)){
227 if(arel.getAcompReferenciaItemAri().getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett() != null){
228 siglaOrgItem = arel.getAcompReferenciaItemAri().getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg();
229 }
230 else {
231 siglaOrgItem = "Órgão não informado";
232 }
233 }
234
235 if(!siglaOrgaoImpresso.equals(siglaOrg)){
236 siglaOrgaoImpresso = siglaOrg;
237 if(!primeiroItem){
238 builder.closeNode("itens");
239 }
240
241 String exibirOrgao = "S";
242 String quebrarPaginaItens = "S";
243 if(MODELO_ESTRUTURA.equals(modelo)){
244 exibirOrgao = "N";
245 quebrarPaginaItens = "N";
246 }
247 builder.addNode("itens", "orgao=\"" + builder.normalize(siglaOrgaoImpresso) + "\" exibirOrgao=\"" + builder.normalize(exibirOrgao) + "\" quebrarPaginaItens=\"" + builder.normalize(quebrarPaginaItens) + "\"");
248 }
249
250
251 if(codIett != arel.getAcompReferenciaItemAri().getItemEstruturaIett().getCodIett().longValue()){
252 boolean geraHierarquia = primeiroItem || (ascendentes != null && !ascendentes.containsAll(itemEstruturaDao.getAscendentes(arel.getAcompReferenciaItemAri().getItemEstruturaIett())));
253 codIett = arel.getAcompReferenciaItemAri().getItemEstruturaIett().getCodIett().longValue();
254 ascendentes.addAll(geraXmlItens(builder, arel, estAtribDao.getDescricaoItemByAtributo(arel.getAcompReferenciaItemAri().getItemEstruturaIett(), arel.getAcompReferenciaItemAri().getAcompReferenciaAref().getTipoAcompanhamentoTa()), false, geraHierarquia, siglaOrgItem, primeiroItem));
255
256 }
257 else {
258 boolean exibirComplemento = false;
259 if((indice + 1) < arels.size() || (indice == arels.size() - 1)){
260 int proximo = indice + 1;
261
262 try{
263 AcompRelatorioArel proximoArel = (AcompRelatorioArel) arels.get(proximo);
264 exibirComplemento = !arel.getAcompReferenciaItemAri().equals(proximoArel.getAcompReferenciaItemAri());
265 }
266 catch (IndexOutOfBoundsException e) {
267
268 exibirComplemento = true;
269 }
270 }
271
272 geraXmlItens(builder, arel, "", exibirComplemento, false, siglaOrgItem, primeiroItem);
273 }
274 indice++;
275 primeiroItem = false;
276
277 }
278 builder.closeNode("itens");
279 }
280 else {
281 builder.addClosedNode("semItens");
282 }
283
284 builder.closeNode("principal");
285 }
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303 private List geraXmlItens(XmlBuilder builder, AcompRelatorioArel arel, String nomeItem,
304 boolean exibirComplemento, boolean gerarHierarquia, String orgao, boolean primeiroItem) throws ECARException{
305
306 if(!MODELO_ESTRUTURA.equals(modelo)){
307 orgao = "";
308 }
309
310 builder.addNode("item", "nomeItem=\"" + builder.normalize(nomeItem) + "\" orgaoItem=\"" + builder.normalize(orgao) + "\"");
311 List retorno = new ArrayList();
312
313 if(MODELO_ESTRUTURA.equals(modelo) && gerarHierarquia){
314 boolean quebrarPagina = true;
315
316 if(primeiroItem)
317 quebrarPagina = false;
318
319 retorno = geraXmlHierarquia(builder, arel.getAcompReferenciaItemAri().getItemEstruturaIett(), quebrarPagina);
320 }
321
322 String caminhoImagem = pathEcar + "/images/relAcomp/" + corDao.getImagemRelatorio(arel.getCor(), arel.getTipoFuncAcompTpfa());
323 String descricao = Util.normalizaCaracterMarcador(arel.getDescricaoArel());
324 String observacoes = Util.normalizaCaracterMarcador(arel.getComplementoArel());
325
326 String ocultarObservacoesParecer = new ConfiguracaoDao(request).getConfiguracao().getIndOcultarObservacoesParecer();
327
328 if(descricao != null && !"".equals(descricao)){
329 if (ocultarObservacoesParecer == null || ocultarObservacoesParecer.equals("N")){
330
331 builder.addClosedNode("parecer",
332 " caminhoImagem=\"" + builder.normalize(caminhoImagem) + "\"" +
333 " descricao=\"" + builder.normalize(descricao) + "\"" +
334 " observacoes=\"" + builder.normalize(observacoes) + "\"" +
335 "");
336 }
337 else{
338
339 builder.addClosedNode("parecer",
340 " caminhoImagem=\"" + builder.normalize(caminhoImagem) + "\"" +
341 " descricao=\"" + builder.normalize(descricao) + "\"" +
342 "");
343 }
344 }
345 else{
346 if (ocultarObservacoesParecer == null || ocultarObservacoesParecer.equals("N")){
347
348 builder.addClosedNode("parecer",
349 " caminhoImagem=\"" + builder.normalize(caminhoImagem) + "\"" +
350 " descricao=\"" + builder.normalize("Sem itens de parecer cadastrados") + "\"" +
351 " observacoes=\"\"" +
352 "");
353 }
354 else{
355
356 builder.addClosedNode("parecer",
357 " caminhoImagem=\"" + builder.normalize(caminhoImagem) + "\"" +
358 " descricao=\"" + builder.normalize("Sem itens de parecer cadastrados") + "\"" +
359 "");
360 }
361 }
362
363 if(exibirComplemento){
364 if("S".equals(Pagina.getParamStr(request, "indResultado"))){
365 geraXMLIndicadores(builder, arel.getAcompReferenciaItemAri());
366
367 String arisSelecionados = Pagina.getParamStr(request, "arisSelecionados");
368 List codArisSelecionados = new ArrayList();
369
370 if(!"".equals(arisSelecionados)){
371 String[] codAris = arisSelecionados.split(";");
372 for(int i = 0; i < codAris.length; i++){
373 if(!"".equals(codAris[i]) && !";".equals(codAris[i])){
374 codArisSelecionados.add(Long.valueOf(codAris[i]));
375 }
376 }
377 }
378
379 builder.addNode("itensFilhos");
380 List descendentes = new ItemEstruturaDao(request).getDescendentes(arel.getAcompReferenciaItemAri().getItemEstruturaIett(), true);
381 Iterator itDes = descendentes.iterator();
382 while(itDes.hasNext()){
383 ItemEstruturaIett item = (ItemEstruturaIett) itDes.next();
384 AcompReferenciaItemAri acompanhamentoFilho = acompReferenciaItemDao.getAcompReferenciaItemByItemEstruturaIett(arel.getAcompReferenciaItemAri().getAcompReferenciaAref(), item);
385 if(acompanhamentoFilho != null && !codArisSelecionados.contains(acompanhamentoFilho.getCodAri().toString())) {
386
387
388 List listARF = acompRealFisicoDao.buscarPorIett(
389 acompanhamentoFilho.getItemEstruturaIett().getCodIett(),
390 Long.valueOf(acompanhamentoFilho.getAcompReferenciaAref().getMesAref()),
391 Long.valueOf(acompanhamentoFilho.getAcompReferenciaAref().getAnoAref()));
392 if(listARF != null && !listARF.isEmpty()){
393 geraXMLIndicadoresFilhos(builder, acompanhamentoFilho);
394 }
395 }
396 }
397 builder.closeNode("itensFilhos");
398
399 }
400 if("S".equals(Pagina.getParamStr(request, "evolucaoFinanceira")))
401 geraXmlEvolucaoFinanceira(builder, arel.getAcompReferenciaItemAri());
402 }
403
404 builder.closeNode("item");
405 return retorno;
406 }
407
408
409
410
411
412
413
414
415
416
417
418
419
420 private List geraXmlHierarquia(XmlBuilder builder, ItemEstruturaIett item, boolean quebrarPagina) throws ECARException{
421 List ascendentes = itemEstruturaDao.getAscendentes(item);
422
423 if(ascendentes != null && !ascendentes.isEmpty()){
424 if(quebrarPagina)
425 builder.addNode("hierarquia", "quebrarPagina=\"S\"");
426 else
427 builder.addNode("hierarquia", "quebrarPagina=\"N\"");
428
429 Iterator it = ascendentes.iterator();
430 while(it.hasNext()){
431 ItemEstruturaIett iettAsc = (ItemEstruturaIett) it.next();
432
433 String nomeItem = "";
434 if(iettAsc.getSiglaIett() != null)
435 nomeItem += "- ";
436 nomeItem += iettAsc.getNomeIett();
437
438 String siglaItem = iettAsc.getSiglaIett();
439
440 builder.addClosedNode("itemHierarquia", "nomeItem=\"" + builder.normalize(nomeItem) + "\" nivel=\"" + builder.normalize(iettAsc.getNivelIett().toString()) + "\" sigla=\"" + builder.normalize(siglaItem) + "\"");
441 }
442 builder.closeNode("hierarquia");
443 }
444 return ascendentes;
445 }
446
447
448
449
450
451
452
453
454
455
456 private String geraDataRodape(){
457 Date dataAtual = Data.getDataAtual();
458 String dia = String.valueOf(Data.getDia(dataAtual));
459 String mes = Data.getNomeMesExtenso(Data.getMes(dataAtual) + 1).toLowerCase();
460 String ano = String.valueOf(Data.getAno(dataAtual));
461 String hora = Data.getHorario(dataAtual);
462
463 return Data.getDiaSemanaNomeExtenso(dataAtual) + ", " + dia + " de " + mes + " de " + ano + ", às " + hora;
464 }
465
466
467
468
469
470
471
472
473
474 public String getXslFileName() {
475 return "relatorioAcompanhamento.xsl";
476 }
477
478
479
480
481
482
483
484
485
486
487
488 public String getErrorPage(HttpServletRequest request, String mensagem){
489 String errorPage = "listaRelAcomp.jsp?msgOperacao=" + mensagem;
490 return errorPage;
491 }
492
493
494
495
496
497
498
499
500
501
502
503 private void geraXmlEvolucaoFinanceira(XmlBuilder builder, AcompReferenciaItemAri itemAri) throws ECARException{
504 try{
505 List lista = itemEstPrevDao.getListaItemEstruturaPrevisao(itemAri.getItemEstruturaIett(), itemAri.getAcompReferenciaAref().getExercicioExe());
506 Iterator it = lista.iterator();
507
508 EfItemEstPrevisaoEfiep itemEstPrev = new EfItemEstPrevisaoEfiep();
509
510 if (it.hasNext()){
511
512 int colunas = 0;
513
514 boolean mostrarValores[] = new boolean[6];
515
516 String descricoes[] = new String[6];
517 descricoes[0] = config.getFinanceiroDescValor1Cfg();
518 descricoes[1] = config.getFinanceiroDescValor2Cfg();
519 descricoes[2] = config.getFinanceiroDescValor3Cfg();
520 descricoes[3] = config.getFinanceiroDescValor4Cfg();
521 descricoes[4] = config.getFinanceiroDescValor5Cfg();
522 descricoes[5] = config.getFinanceiroDescValor6Cfg();
523
524 for(int i = 0; i < 6; i++){
525 mostrarValores[i] = itemEstRealizadoDao.getVerificarMostrarValorByPosicaoCfg(i);
526 if(mostrarValores[i]){
527 colunas++;
528 }
529 }
530
531 builder.addNode("evolucaoFinanceira", "colunasRealizadas=\"" + builder.normalize(String.valueOf(colunas)) + "\"");
532
533
534 builder.addNode("colunas");
535
536 builder.addClosedNode("coluna", "nome=\"\"");
537 builder.addClosedNode("coluna", "nome=\"\"");
538 builder.addClosedNode("coluna", "nome=\"Aprovado\"");
539 builder.addClosedNode("coluna", "nome=\"Revisado\"");
540 int numeroColunasExibidas = 2;
541
542 for(int i = 0; i < 6; i++){
543 mostrarValores[i] = itemEstRealizadoDao.getVerificarMostrarValorByPosicaoCfg(i);
544 if(mostrarValores[i]){
545 builder.addClosedNode("coluna", "nome=\"" + builder.normalize(descricoes[i]) + "\"");
546 numeroColunasExibidas++;
547 }
548 }
549
550 builder.closeNode("colunas");
551
552
553
554
555
556 double t = 22.50;
557 String tam = String.valueOf(t/numeroColunasExibidas) + "cm";
558
559 builder.addNode("colunasHeader");
560 for(int x = 1; x <= numeroColunasExibidas; x++){
561 builder.addClosedNode("colunaHeader", "tamanho=\"" + builder.normalize(tam) + "\"");
562 }
563 builder.closeNode("colunasHeader");
564
565 double totFonAprovado = 0, totFonRevisado = 0;
566 double totGerAprovado = 0, totGerRevisado = 0;
567 double[] totFonValor = new double[6];
568 double[] totGerValor = new double[6];
569
570
571 for(int i = 0; i < 6; i++){
572 totFonValor[i] = 0;
573 totGerValor[i] = 0;
574 }
575
576 long codFonte = -1;
577 while(it.hasNext()){
578 itemEstPrev = (EfItemEstPrevisaoEfiep) it.next();
579
580
581 EfItemEstContaEfiec itemEstConta =
582 itemEstContaOrcDao.getItemEstruturaConta(
583 itemAri.getItemEstruturaIett(),
584 itemAri.getAcompReferenciaAref().getExercicioExe(),
585 itemEstPrev.getFonteRecursoFonr(),
586 itemEstPrev.getRecursoRec());
587
588
589 Double[] valores = itemEstRealizadoDao.getSomaItemEstruturaRealizado(
590 itemEstConta,
591 itemAri.getAcompReferenciaAref().getExercicioExe());
592
593
594 if(codFonte != itemEstPrev.getFonteRecursoFonr().getCodFonr().longValue()){
595
596 if(codFonte != -1){
597
598 builder.closeNode("fonte");
599
600
601 totGerAprovado = totGerAprovado + totFonAprovado;
602 totGerRevisado = totGerRevisado + totFonRevisado;
603
604 for(int i = 0; i < 6; i++){
605 if(mostrarValores[i])
606 totGerValor[i] = totGerValor[i] + totFonValor[i];
607 }
608
609
610 totFonAprovado = 0;
611 totFonRevisado = 0;
612
613 for(int i = 0; i < 6; i++){
614 totFonValor[i] = 0;
615 }
616 }
617
618 codFonte = itemEstPrev.getFonteRecursoFonr().getCodFonr().longValue();
619
620 builder.addNode("fonte", "nome=\"" + builder.normalize(itemEstPrev.getFonteRecursoFonr().getNomeFonr()) + "\"");
621 }
622
623
624 totFonAprovado = totFonAprovado + itemEstPrev.getValorAprovadoEfiep().doubleValue();
625 totFonRevisado = totFonRevisado + itemEstPrev.getValorRevisadoEfiep().doubleValue();
626
627 for(int i = 0; i < 6; i++){
628 if(mostrarValores[i])
629 totFonValor[i] = totFonValor[i] + valores[i].doubleValue();
630 }
631
632
633 builder.addNode("recurso", "nome=\"" + builder.normalize(itemEstPrev.getRecursoRec().getNomeRec()) + "\"");
634 builder.addClosedNode("rec", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(itemEstPrev.getValorAprovadoEfiep().doubleValue()))+ "\"");
635 builder.addClosedNode("rec", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(itemEstPrev.getValorRevisadoEfiep().doubleValue()))+ "\"");
636 for(int i = 0; i < 6; i++){
637 if(mostrarValores[i])
638 builder.addClosedNode("rec", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(valores[i].doubleValue()))+ "\"");
639 }
640 builder.closeNode("recurso");
641 }
642
643 builder.closeNode("fonte");
644
645
646 totGerAprovado = totGerAprovado + totFonAprovado;
647 totGerRevisado = totGerRevisado + totFonRevisado;
648
649 for(int i = 0; i < 6; i++){
650 if(mostrarValores[i])
651 totGerValor[i] = totGerValor[i] + totFonValor[i];
652 }
653
654
655 builder.addNode("totalEvolucaoFinanceira");
656 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totGerAprovado))+ "\"");
657 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totGerRevisado))+ "\"");
658 for(int i = 0; i < 6; i++){
659 if(mostrarValores[i])
660 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totGerValor[i]))+ "\"");
661 }
662 builder.closeNode("totalEvolucaoFinanceira");
663
664 builder.closeNode("evolucaoFinanceira");
665 }
666 } catch (HibernateException e){
667 this.logger.error(e);
668 throw new ECARException("Erro na criação do relatório: Evolução Financeira - " + e.getMessage());
669 }
670 }
671
672
673
674
675
676
677
678
679
680
681
682 private void geraXMLIndicadores(XmlBuilder builder, AcompReferenciaItemAri itemAri) throws ECARException{
683 try {
684 if(itemAri != null) {
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842 String mostrarProjecao = ("S".equals(Pagina.getParamStr(request, "indProjecao"))) ? "S" : "N";
843
844
845
846 List<ExercicioExe> todosExercicios = new ExercicioDao(null).listar(ExercicioExe.class, new String[] {"dataInicialExe","desc"});
847 List<ExercicioExe> exercicios = new ArrayList<ExercicioExe>();
848
849 if(todosExercicios == null || todosExercicios.isEmpty()) {
850 throw new Exception("Não existe exercícios cadastrado");
851 }
852
853 int qtdeAnos = 4;
854 if(todosExercicios.size() < qtdeAnos) {
855 qtdeAnos = todosExercicios.size();
856 }
857 exercicios.addAll(todosExercicios.subList(0, qtdeAnos));
858
859
860 Collections.reverse(exercicios);
861
862 List indResultados = acompRealFisicoDao.getIndResulByAcompRefItemBySituacao(itemAri, Dominios.TODOS, true);
863 if(indResultados != null && indResultados.size() > 0){
864
865 builder.addNode("indicadores", "labelFuncao=\"" + builder.normalize(estFuncDao.getLabelIndicadoresResultado(itemAri.getItemEstruturaIett().getEstruturaEtt())) + "\" mostrarProjecao=\"" + builder.normalize(mostrarProjecao) + "\"");
866
867 int numeroExercicios = 0;
868 for(ExercicioExe exercicio : exercicios){
869 builder.addClosedNode("columnExercicio", "ano=\"" + builder.normalize(exercicio.getDescricaoExe()) + "\"");
870 builder.addClosedNode("indExercicio", "exercicio=\"" + builder.normalize(exercicio.getDescricaoExe()) + "\"");
871 numeroExercicios++;
872 }
873
874 Iterator itIndResult = indResultados.iterator();
875 while(itIndResult.hasNext()){
876 AcompRealFisicoArf indicador = (AcompRealFisicoArf) itIndResult.next();
877
878 String situacao = "";
879 if(indicador.getSituacaoSit()!=null) {
880 situacao = indicador.getSituacaoSit().getDescricaoSit();
881 }
882
883 double totalRealizado = 0;
884 double totalPrevisto = 0;
885
886 builder.addNode("indicador",
887 "nome=\"" + builder.normalize(indicador.getItemEstrtIndResulIettr().getNomeIettir()) + "\"" +
888 " situacao=\"" + builder.normalize(situacao) + "\"" +
889 " realizadoNoMes=\"" + builder.normalize(Pagina.trocaNullMoeda(indicador.getQtdRealizadaArf()) + " " + indicador.getItemEstrtIndResulIettr().getUnidMedidaIettr()) + "\"" +
890 " numeroExercicios=\"" + builder.normalize(String.valueOf(numeroExercicios)) + "\"" +
891 " mostrarProjecao=\"" + builder.normalize(mostrarProjecao) + "\""
892 );
893
894
895 for(ExercicioExe exercicio : exercicios){
896 double realizadoNoExercicio = 0;
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918 if("S".equals(indicador.getItemEstrtIndResulIettr().getIndAcumulavelIettr())){
919 realizadoNoExercicio = acompRealFisicoDao.getQtdRealizadaExercicio(exercicio, indicador.getItemEstrtIndResulIettr(), itemAri.getAcompReferenciaAref());
920 } else {
921 realizadoNoExercicio = acompRealFisicoDao.getQtdRealizadaExercicioNaoAcumulavel(exercicio, indicador.getItemEstrtIndResulIettr(), itemAri.getAcompReferenciaAref());
922 }
923
924
925 double previstoNoExercicio = new ItemEstrtIndResulDao(null).getQtdPrevistoExercicio(indicador.getItemEstrtIndResulIettr(), exercicio);
926 if("S".equals(indicador.getItemEstrtIndResulIettr().getIndAcumulavelIettr())){
927 totalRealizado += realizadoNoExercicio;
928 totalPrevisto += previstoNoExercicio;
929 }else{
930 totalRealizado = realizadoNoExercicio;
931 totalPrevisto = previstoNoExercicio;
932 }
933
934 builder.addClosedNode("valorExercicio",
935 "exercicio=\"" + builder.normalize(exercicio.getDescricaoExe()) + "\"" +
936 " valorPrevisto=\"" + builder.normalize(Pagina.trocaNullMoeda(previstoNoExercicio)) + "\"" +
937 " valorRealizado=\"" + builder.normalize(Pagina.trocaNullMoeda(realizadoNoExercicio)) + "\"");
938 }
939
940 double realizadoPrevisto = 0;
941 if(totalPrevisto > 0) {
942 realizadoPrevisto = ((totalRealizado/totalPrevisto) * 100);
943 }
944 builder.addClosedNode("valorTotal",
945 " percentualRealizadoPrevisto=\"" + builder.normalize(Pagina.trocaNullNumeroDecimalSemMilhar(new Double((realizadoPrevisto)))) + "\"" +
946 " totalPrevisto=\"" + builder.normalize(Pagina.trocaNullMoeda(new Double(totalPrevisto))) + "\"" +
947 " totalRealizado=\"" + builder.normalize(Pagina.trocaNullMoeda(new Double(totalRealizado))) + "\""
948 );
949
950
951 String strProjecao = "";
952 String strPorcentual = "-";
953
954 if("S".equals(indicador.getItemEstrtIndResulIettr().getIndProjecaoIettr()) && totalRealizado > 0){
955 double resultado = acompReferenciaItemDao.calculoProjecao(indicador.getItemEstrtIndResulIettr(), itemAri);
956 ExercicioExe exercicioPrevisto = itemEstrtIndResulDao.getMaiorExercicioIndicador(indicador.getItemEstrtIndResulIettr());
957 double qtdePrevista = itemEstrtIndResulDao.getQtdPrevistoExercicio(indicador.getItemEstrtIndResulIettr(), exercicioPrevisto);
958
959 Mensagem msg = new Mensagem(this.request.getSession().getServletContext());
960
961 if(resultado == qtdePrevista)
962 strProjecao = msg.getMensagem("acompRelatorio.indicadorResultado.projecao.seraAtingida");
963 if(resultado > qtdePrevista)
964 strProjecao = msg.getMensagem("acompRelatorio.indicadorResultado.projecao.seraAtingidaAntes");
965 if(resultado < qtdePrevista){
966 strProjecao = msg.getMensagem("acompRelatorio.indicadorResultado.projecao.naoSeraAtingida");
967 }
968
969 Double porcentagem = new Double((resultado/qtdePrevista) * 100);
970
971 strPorcentual = Pagina.trocaNullNumeroDecimalSemMilhar(porcentagem);
972 } else {
973 if(totalRealizado == 0){
974 strProjecao = "Não é possível realizar projeção sem informação de quantidades realizadas.";
975 } else {
976 strProjecao = "N/A";
977 }
978 }
979
980 builder.addClosedNode("valorProjecao",
981 " projecao=\"" + builder.normalize(strProjecao) + "\"" +
982 " mostrarProjecao=\"" + builder.normalize(mostrarProjecao) + "\"" +
983 " percentual=\"" + builder.normalize(strPorcentual) + "\"" +
984 " situacao=\"" + builder.normalize(situacao) + "\""
985 );
986
987
988 builder.closeNode("indicador");
989
990 }
991 builder.closeNode("indicadores");
992 }
993 }
994
995 } catch(Exception e){
996 this.logger.error(e);
997 throw new ECARException("Erro na criação do relatório: Indicadores - " + e.getMessage());
998 }
999 }
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011 private void geraXMLIndicadoresFilhos(XmlBuilder builder, AcompReferenciaItemAri itemAri) throws ECARException{
1012 try {
1013 String nomeItem = itemAri.getItemEstruturaIett().getNomeIett();
1014 String siglaOrg = "";
1015
1016 if(itemAri.getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett() != null){
1017 siglaOrg = itemAri.getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg();
1018 }
1019 else {
1020 siglaOrg = "Órgão não informado";
1021 }
1022
1023 builder.addNode("itemFilho", "nomeItem=\"" + builder.normalize(nomeItem) + "\" orgaoItem=\"" + builder.normalize(siglaOrg) + "\"");
1024 geraXMLIndicadores(builder, itemAri);
1025 builder.closeNode("itemFilho");
1026
1027 } catch(Exception e){
1028 this.logger.error(e);
1029 throw new ECARException("Erro na criação do relatório: IndicadoresFilhos - " + e.getMessage());
1030 }
1031 }
1032 }