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.bean.IettArfBean;
27 import ecar.dao.AcompRealFisicoDao;
28 import ecar.dao.AcompReferenciaDao;
29 import ecar.dao.AcompReferenciaItemDao;
30 import ecar.dao.ConfigRelatorioCfgrelDAO;
31 import ecar.dao.ConfiguracaoDao;
32 import ecar.dao.CorDao;
33 import ecar.dao.EmpresaDao;
34 import ecar.dao.EstruturaAtributoDao;
35 import ecar.dao.EstruturaDao;
36 import ecar.dao.EstruturaFuncaoDao;
37 import ecar.dao.ExercicioDao;
38 import ecar.dao.ItemEstrtIndResulDao;
39 import ecar.dao.ItemEstruturaContaOrcamentoDao;
40 import ecar.dao.ItemEstruturaDao;
41 import ecar.dao.ItemEstruturaPrevisaoDao;
42 import ecar.dao.ItemEstruturaRealizadoDao;
43 import ecar.dao.ModeloRelatorioMrelDAO;
44 import ecar.exception.ECARException;
45 import ecar.login.SegurancaECAR;
46 import ecar.permissao.ValidaPermissao;
47 import ecar.pojo.AcompRealFisicoArf;
48 import ecar.pojo.AcompReferenciaAref;
49 import ecar.pojo.AcompReferenciaItemAri;
50 import ecar.pojo.AcompRelatorioArel;
51 import ecar.pojo.ConfigRelatorioCfgrel;
52 import ecar.pojo.ConfiguracaoCfg;
53 import ecar.pojo.EfItemEstContaEfiec;
54 import ecar.pojo.EfItemEstPrevisaoEfiep;
55 import ecar.pojo.EmpresaEmp;
56 import ecar.pojo.EstruturaEtt;
57 import ecar.pojo.ExercicioExe;
58 import ecar.pojo.ItemEstUsutpfuacIettutfa;
59 import ecar.pojo.ItemEstrutAcaoIetta;
60 import ecar.pojo.ItemEstruturaIett;
61 import ecar.pojo.ModeloRelatorioMrel;
62 import ecar.pojo.ObjetoEstrutura;
63 import ecar.pojo.TipoAcompanhamentoTa;
64 import ecar.pojo.UsuarioUsu;
65 import ecar.util.Dominios;
66
67
68
69
70
71
72
73
74
75
76
77 public class RelatorioAcompanhamento extends AbstractServletReportXmlXsl {
78
79
80
81
82 private static final long serialVersionUID = 2395457474744685932L;
83
84 private static final String MODELO_ESTRUTURA = "ECAR-001C";
85
86 private HttpServletRequest request;
87 private ConfiguracaoDao configDao;
88 private ConfiguracaoCfg config;
89 private AcompReferenciaDao acompReferenciaDao;
90 private AcompReferenciaItemDao acompReferenciaItemDao;
91 private AcompRealFisicoDao acompRealFisicoDao;
92 private CorDao corDao;
93 private ConfigRelatorioCfgrel configRel;
94 private ConfigRelatorioCfgrelDAO configRelDao;
95 private String pathEcar;
96 private String modelo;
97 private String pathRaiz;
98 private EstruturaDao estruturaDao;
99 private EstruturaAtributoDao estAtribDao;
100 private EstruturaFuncaoDao estFuncDao;
101 private ItemEstruturaDao itemEstruturaDao;
102 private ItemEstruturaPrevisaoDao itemEstPrevDao;
103 private ItemEstruturaRealizadoDao itemEstRealizadoDao;
104 private ItemEstruturaContaOrcamentoDao itemEstContaOrcDao;
105 private ItemEstrtIndResulDao itemEstrtIndResulDao;
106
107 private String tipoAcomp;
108 private String exigeLiberarAcompanhamento;
109
110
111
112
113
114
115
116
117
118
119
120 public StringBuffer getXml(HttpServletRequest request) throws ECARException{
121 XmlBuilder builder = new XmlBuilder();
122
123 acompReferenciaDao = new AcompReferenciaDao(request);
124 acompReferenciaItemDao = new AcompReferenciaItemDao(request);
125 acompRealFisicoDao = new AcompRealFisicoDao(request);
126 configDao = new ConfiguracaoDao(request);
127 corDao = new CorDao(request);
128 configRelDao = new ConfigRelatorioCfgrelDAO(request);
129 estruturaDao = new EstruturaDao(request);
130 estAtribDao = new EstruturaAtributoDao(request);
131 estFuncDao = new EstruturaFuncaoDao(request);
132 itemEstruturaDao = new ItemEstruturaDao(request);
133 itemEstPrevDao = new ItemEstruturaPrevisaoDao(request);
134 itemEstRealizadoDao = new ItemEstruturaRealizadoDao(request);
135 itemEstContaOrcDao = new ItemEstruturaContaOrcamentoDao(request);
136 itemEstrtIndResulDao = new ItemEstrtIndResulDao(request);
137
138 this.request = request;
139 config = configDao.getConfiguracao();
140 pathEcar = request.getContextPath();
141 configRel = configRelDao.getConfigRelatorioCfgrel();
142 pathRaiz = config.getRaizUpload();
143
144 EmpresaDao empresaDao = new EmpresaDao(request);
145 List confg = empresaDao.listar(EmpresaEmp.class, null);
146 EmpresaEmp empresa = new EmpresaEmp();
147 if(confg != null && confg.size() > 0){
148 empresa = (EmpresaEmp) confg.iterator().next();
149 }
150
151 String opcaoModelo = Pagina.getParamStr(request, "opcaoModelo");
152 ModeloRelatorioMrel mrel = new ModeloRelatorioMrelDAO(request).getModeloRelatorioByCodAlfa(opcaoModelo);
153
154 AcompReferenciaAref mesReferencia = (AcompReferenciaAref) acompReferenciaDao.buscar(AcompReferenciaAref.class, Long.valueOf(Pagina.getParamStr(request, "mesReferencia")));
155 this.tipoAcomp = mesReferencia.getTipoAcompanhamentoTa().getDescricaoTa();
156 this.exigeLiberarAcompanhamento = mesReferencia.getTipoAcompanhamentoTa().getIndLiberarAcompTa();
157
158
159 String titulo = "";
160 if(!"".equals(Pagina.getParamStr(request, "tituloCustomizado")))
161 titulo = Pagina.getParamStr(request, "tituloCustomizado");
162 else {
163 if(configRel != null && !"".equals(configRel.getTituloCfgrel()))
164 titulo = configRel.getTituloCfgrel();
165 else
166 titulo = config.getTituloSistema();
167
168 }
169
170
171 String rodape = geraDataRodape();
172 if(!"".equals(Pagina.getParamStr(request, "rodapeCustomizado")))
173 rodape += " - " + Pagina.getParamStr(request, "rodapeCustomizado");
174 else {
175 if(configRel != null && configRel.getNotaRodapeCfgrel() != null && !"".equals(configRel.getNotaRodapeCfgrel()))
176 rodape += " - " + configRel.getNotaRodapeCfgrel();
177 }
178
179 String arisSelecionados = Pagina.getParamStr(request, "arisSelecionados");
180
181
182
183
184
185
186
187
188
189
190 List codArisSelecionados = new ArrayList();
191
192 if(!"".equals(arisSelecionados)){
193 String[] codAris = arisSelecionados.split(";");
194 for(int i = 0; i < codAris.length; i++){
195 if(!"".equals(codAris[i]) && !";".equals(codAris[i])){
196 codArisSelecionados.add(Long.valueOf(codAris[i]));
197 }
198 }
199 }
200
201 List arels = acompReferenciaItemDao.getAcompRelatorioAcompanhamentoByAris(codArisSelecionados, mesReferencia, opcaoModelo, Pagina.getParamStr(request, "chaveEscolhida"), Pagina.getParamStr(request, "tipoFuncAcompTpfa"));
202
203 Util.liberarImagem();
204
205
206
207 builder.addNode("relatorio",
208 " titulo=\"" + builder.normalize(titulo) + "\"" +
209 " mesReferencia=\"" + builder.normalize(mesReferencia.getNomeAref()) + "\"" +
210 " codModelo=\"" + builder.normalize(mrel.getCodAlfaMrel() + " - " + mrel.getClassifMrel()) + "\"" +
211 " rodape=\"" + builder.normalize(rodape) + "\"" +
212 " caminhoImagemCab=\"" + builder.normalize(pathRaiz + empresa.getLogotipoRelatorioEmp()) + "\"" +
213 "");
214
215 modelo = mrel.getCodAlfaMrel();
216
217 geraXmlPrincipal(builder, arels);
218
219 builder.closeNode("relatorio");
220 return builder.toStringBuffer();
221 }
222
223
224
225
226
227
228
229
230
231
232
233 private void geraXmlPrincipal(XmlBuilder builder, List arels) throws ECARException{
234 builder.addNode("principal");
235
236 if(arels != null && !arels.isEmpty()){
237 Iterator it = arels.iterator();
238 boolean primeiroItem = true;
239 String siglaOrgaoImpresso = "";
240
241 long codIett = -1;
242 int indice = 0;
243 Set ascendentes = new HashSet();
244
245 SegurancaECAR seguranca = (SegurancaECAR) request.getSession().getAttribute("seguranca");
246 ValidaPermissao validaPermissao = new ValidaPermissao();
247
248 while(it.hasNext()){
249 AcompRelatorioArel arel = (AcompRelatorioArel) it.next();
250
251 List listaPermissaoTpfa = validaPermissao.permissaoVisualizarPareceres(arel.getAcompReferenciaItemAri().getAcompReferenciaAref().getTipoAcompanhamentoTa(),seguranca.getGruposAcesso());
252 if(listaPermissaoTpfa.contains(arel.getTipoFuncAcompTpfa())){
253
254
255 if("S".equals(this.exigeLiberarAcompanhamento) && !"S".equals(arel.getIndLiberadoArel())){
256 continue;
257 }
258
259 String siglaOrg = "";
260
261 if(arel.getAcompReferenciaItemAri().getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett() != null){
262 siglaOrg = arel.getAcompReferenciaItemAri().getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg();
263 }
264 else {
265 siglaOrg = "Órgão não informado";
266 }
267
268 String siglaOrgItem = "";
269 if(MODELO_ESTRUTURA.equals(modelo)){
270 if(arel.getAcompReferenciaItemAri().getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett() != null){
271 siglaOrgItem = arel.getAcompReferenciaItemAri().getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg();
272 }
273 else {
274 siglaOrgItem = "Órgão não informado";
275 }
276 }
277
278 if(!siglaOrgaoImpresso.equals(siglaOrg)){
279 siglaOrgaoImpresso = siglaOrg;
280 if(!primeiroItem){
281 builder.closeNode("itens");
282 }
283
284 String exibirOrgao = "S";
285 String quebrarPaginaItens = "S";
286 if(MODELO_ESTRUTURA.equals(modelo)){
287 exibirOrgao = "N";
288 quebrarPaginaItens = "N";
289 }
290 builder.addNode("itens", "orgao=\"" + builder.normalize(siglaOrgaoImpresso) + "\" exibirOrgao=\"" + builder.normalize(exibirOrgao) + "\" quebrarPaginaItens=\"" + builder.normalize(quebrarPaginaItens) + "\"");
291 }
292
293
294 if(codIett != arel.getAcompReferenciaItemAri().getItemEstruturaIett().getCodIett().longValue()){
295 boolean geraHierarquia = primeiroItem || (ascendentes != null && !ascendentes.containsAll(itemEstruturaDao.getAscendentes(arel.getAcompReferenciaItemAri().getItemEstruturaIett())));
296 codIett = arel.getAcompReferenciaItemAri().getItemEstruturaIett().getCodIett().longValue();
297
298
299 String exibirEncaminhamentos = "S";
300 if((indice + 1) < arels.size() || (indice == arels.size() - 1)){
301 int proximo = indice + 1;
302
303 try{
304 AcompRelatorioArel proximoArel = (AcompRelatorioArel) arels.get(proximo);
305 if(codIett == proximoArel.getAcompReferenciaItemAri().getItemEstruturaIett().getCodIett().longValue())
306 exibirEncaminhamentos = "N";
307 }
308 catch (IndexOutOfBoundsException e) {
309
310 exibirEncaminhamentos = "S";
311 }
312 }
313
314 ascendentes.addAll(geraXmlItens(builder, arel, estAtribDao.getDescricaoItemByAtributo(arel.getAcompReferenciaItemAri().getItemEstruturaIett(), arel.getAcompReferenciaItemAri().getAcompReferenciaAref().getTipoAcompanhamentoTa()), true, geraHierarquia, siglaOrgItem, primeiroItem, exibirEncaminhamentos));
315 }
316 else {
317 boolean exibirComplemento = false;
318 String exibirEncaminhamentos = "S";
319 if((indice + 1) < arels.size() || (indice == arels.size() - 1)){
320 int proximo = indice + 1;
321
322 try{
323 AcompRelatorioArel proximoArel = (AcompRelatorioArel) arels.get(proximo);
324 exibirComplemento = !arel.getAcompReferenciaItemAri().equals(proximoArel.getAcompReferenciaItemAri());
325 }
326 catch (IndexOutOfBoundsException e) {
327
328 exibirComplemento = true;
329 exibirEncaminhamentos = "S";
330 }
331 }
332
333 geraXmlItens(builder, arel, "", exibirComplemento, false, siglaOrgItem, primeiroItem, exibirEncaminhamentos);
334 }
335 indice++;
336 primeiroItem = false;
337 }
338 }
339 builder.closeNode("itens");
340 }
341 else {
342 builder.addClosedNode("semItens");
343 }
344
345 builder.closeNode("principal");
346 }
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365 private List geraXmlItens(XmlBuilder builder, AcompRelatorioArel arel,
366 String nomeItem, boolean exibirComplemento, boolean gerarHierarquia, String orgao,
367 boolean primeiroItem, String exibirEncaminhamentos) throws ECARException{
368
369 if(!MODELO_ESTRUTURA.equals(modelo)){
370 orgao = "";
371 }
372
373
374 String labelDR1 = "";
375 String valorDR1 = "";
376 String labelDR4 = "";
377 String valorDR4 = "";
378 String labelOrigemIett = "";
379 String valorOrigemIett = "";
380 String labelRespTecnicoIett = "";
381 String valorRespTecnicoIett = "";
382
383 String labelEncaminhamentos = "";
384 String ehPPA = (tipoAcomp.contains("PPA")) ? "S" : "N";
385
386
387 if(!tipoAcomp.contains("PPA")){
388 labelEncaminhamentos = "Encaminhamentos";
389 }
390
391 if(!"".equals(nomeItem)){
392 ItemEstruturaIett item = arel.getAcompReferenciaItemAri().getItemEstruturaIett();
393 EstruturaEtt estrutura = item.getEstruturaEtt();
394
395
396
397
398 if(!tipoAcomp.contains("PPA")){
399
400 labelDR1 = estAtribDao.getLabelAtributoEstrutura("descricaoR1", estrutura);
401
402 valorDR1 = "";
403 if(!pathEcar.contains("prve")) {
404 valorDR1 = item.getDescricaoR1();
405 }
406
407
408
409
410
411
412 labelDR4 = estAtribDao.getLabelAtributoEstrutura("descricaoR4", estrutura);
413 valorDR4 = item.getDescricaoR4();
414
415
416 labelOrigemIett = estAtribDao.getLabelAtributoEstrutura("origemIett", estrutura);
417 valorOrigemIett = item.getOrigemIett();
418 }
419
420
421 Iterator itTpfas = item.getItemEstUsutpfuacIettutfas().iterator();
422 while(itTpfas.hasNext()){
423 ItemEstUsutpfuacIettutfa utfa = (ItemEstUsutpfuacIettutfa) itTpfas.next();
424 if((!tipoAcomp.contains("PPA") && utfa.getTipoFuncAcompTpfa().getCodTpfa().longValue() == 2)
425 || (tipoAcomp.contains("PPA") && utfa.getTipoFuncAcompTpfa().getCodTpfa().longValue() == 3))
426 {
427 String nomeUsu = "";
428 String emailUsu = "";
429 String telefone = "";
430 if (utfa.getUsuarioUsu() != null){
431 UsuarioUsu respTecnico = utfa.getUsuarioUsu();
432 nomeUsu = respTecnico.getNomeUsu();
433 emailUsu = respTecnico.getEmail1Usu();
434 telefone = "";
435 if(respTecnico.getComercDddUsu() != null && !"".equals(respTecnico.getComercDddUsu())){
436 telefone += "(" + respTecnico.getComercDddUsu() + ") ";
437 }
438
439 if(respTecnico.getComercTelefoneUsu() != null && !"".equals(respTecnico.getComercTelefoneUsu())){
440 telefone += respTecnico.getComercTelefoneUsu();
441 telefone = " - " + telefone;
442 }
443
444 } else if (utfa.getSisAtributoSatb() != null){
445 nomeUsu = utfa.getSisAtributoSatb().getDescricaoSatb();
446 }
447
448 labelRespTecnicoIett = utfa.getTipoFuncAcompTpfa().getLabelTpfa().toUpperCase() + ": ";
449 valorRespTecnicoIett = nomeUsu + " (" + emailUsu + telefone.trim() + ")";
450 break;
451 }
452 }
453 }
454
455
456 labelEncaminhamentos = "";
457
458
459
460
461 builder.addNode("item",
462 "nomeItem=\"" + builder.normalize(Util.normalizaCaracterMarcador(nomeItem)) + "\"" +
463 " orgaoItem=\"" + builder.normalize(Util.normalizaCaracterMarcador(orgao)) + "\"" +
464 " labelDR1=\"" + builder.normalize(Util.normalizaCaracterMarcador(labelDR1)) + "\"" +
465 " valorDR1=\"" + builder.normalize(Util.normalizaCaracterMarcador(valorDR1)) + "\"" +
466 " labelDR4=\"" + builder.normalize(Util.normalizaCaracterMarcador(labelDR4)) + "\"" +
467 " valorDR4=\"" + builder.normalize(Util.normalizaCaracterMarcador(valorDR4)) + "\"" +
468 " labelOrigemIett=\"" + builder.normalize(Util.normalizaCaracterMarcador(labelOrigemIett)) + "\"" +
469 " valorOrigemIett=\"" + builder.normalize(Util.normalizaCaracterMarcador(valorOrigemIett)) + "\"" +
470 " labelRespTecnicoIett=\"" + builder.normalize(Util.normalizaCaracterMarcador(labelRespTecnicoIett)) + "\"" +
471 " valorRespTecnicoIett=\"" + builder.normalize(Util.normalizaCaracterMarcador(valorRespTecnicoIett)) + "\"" +
472 " exibirEncaminhamentos=\"" + builder.normalize(Util.normalizaCaracterMarcador(exibirEncaminhamentos)) + "\"" +
473 " labelEncaminhamentos=\"" + builder.normalize(Util.normalizaCaracterMarcador(labelEncaminhamentos)) + "\"" +
474 " ehPPA=\"" + builder.normalize(ehPPA) + "\"" +
475 "");
476 List retorno = new ArrayList();
477
478 if(MODELO_ESTRUTURA.equals(modelo) && gerarHierarquia){
479 boolean quebrarPagina = true;
480
481 if(primeiroItem)
482 quebrarPagina = false;
483
484 retorno = geraXmlHierarquia(builder, arel.getAcompReferenciaItemAri().getItemEstruturaIett(), quebrarPagina);
485 }
486
487 String labelParecer = arel.getTipoFuncAcompTpfa().getLabelPosicaoTpfa();
488 String caminhoImagem = pathEcar + "/images/relAcomp/" + corDao.getImagemRelatorio(arel.getCor(), arel.getTipoFuncAcompTpfa());
489 String descricao = Util.normalizaCaracterMarcador(Util.stripHTML(arel.getDescricaoArel()));
490 String observacoes = Util.normalizaCaracterMarcador(arel.getComplementoArel());
491 String dataUltParecer = "";
492 String situacaoParecer = "";
493
494 if(arel.getDataUltManutArel() != null)
495 dataUltParecer = " (" + Data.parseDate(arel.getDataUltManutArel()) + ")";
496 else
497 dataUltParecer = " (" + Data.parseDate(arel.getDataInclusaoArel()) + ")";
498
499 if(!(descricao != null && !"".equals(descricao))){
500 descricao = "Sem Itens de Parecer Cadastrados.";
501 }
502
503 if(arel.getSituacaoSit() != null){
504 situacaoParecer = arel.getSituacaoSit().getDescricaoSit();
505 }
506
507 String ocultarObservacoesParecer = new ConfiguracaoDao(request).getConfiguracao().getIndOcultarObservacoesParecer();
508 String labelSituacaoParecer = new ConfiguracaoDao(request).getConfiguracao().getLabelSituacaoParecer();
509
510 if (ocultarObservacoesParecer == null || ocultarObservacoesParecer.equals("N")){
511
512 builder.addClosedNode("parecer",
513 " caminhoImagem=\"" + builder.normalize(caminhoImagem) + "\"" +
514 " labelParecer=\"" + builder.normalize(labelParecer) + "\"" +
515 " descricao=\"" + builder.normalize(descricao) + "\"" +
516 " observacoes=\"" + builder.normalize(observacoes) + "\"" +
517 " dataUltParecer=\"" + builder.normalize(dataUltParecer) + "\"" +
518 " labelSituacaoParecer=\"" + builder.normalize(labelSituacaoParecer) + "\"" +
519 " situacaoParecer=\"" + builder.normalize(situacaoParecer) + "\"" +
520 "");
521 }
522 else{
523
524 builder.addClosedNode("parecer",
525 " caminhoImagem=\"" + builder.normalize(caminhoImagem) + "\"" +
526 " labelParecer=\"" + builder.normalize(labelParecer) + "\"" +
527 " descricao=\"" + builder.normalize(descricao) + "\"" +
528 " dataUltParecer=\"" + builder.normalize(dataUltParecer) + "\"" +
529 " labelSituacaoParecer=\"" + builder.normalize(labelSituacaoParecer) + "\"" +
530 " situacaoParecer=\"" + builder.normalize(situacaoParecer) + "\"" +
531 "");
532 }
533
534 if(exibirComplemento){
535
536 String arisSelecionados = Pagina.getParamStr(request, "arisSelecionados");
537 List codArisSelecionados = new ArrayList();
538
539 if(!"".equals(arisSelecionados)){
540 String[] codAris = arisSelecionados.split(";");
541 for(int i = 0; i < codAris.length; i++){
542 if(!"".equals(codAris[i]) && !";".equals(codAris[i])){
543 codArisSelecionados.add(Long.valueOf(codAris[i]));
544 }
545 }
546 }
547
548 if("S".equals(Pagina.getParamStr(request, "indResultado")) && !"".equals(nomeItem)){
549 geraXMLIndicadores(builder, arel.getAcompReferenciaItemAri(), false);
550 }
551
552 if("S".equals(Pagina.getParamStr(request, "evolucaoFinanceira")))
553 geraXmlEvolucaoFinanceira(builder, arel.getAcompReferenciaItemAri());
554
555 geraXMLEtapas(builder, arel);
556
557 if(!"".equals(nomeItem)){
558 geraXMLOcorrencias(builder, arel.getAcompReferenciaItemAri());
559 }
560
561 if("S".equals(Pagina.getParamStr(request, "indResultado"))){
562 geraXmlItensFilhos(builder, arel, codArisSelecionados);
563 }
564
565 }
566
567 builder.closeNode("item");
568 return retorno;
569 }
570
571
572
573
574
575
576
577
578
579
580
581 private void geraXmlItensFilhos(XmlBuilder builder, AcompRelatorioArel arel, List codArisSelecionados) throws ECARException{
582 builder.addNode("itensFilhos");
583
584 ItemEstruturaIett itemPai = arel.getAcompReferenciaItemAri().getItemEstruturaIett();
585 TipoAcompanhamentoTa tipoAcompanhamento = arel.getAcompReferenciaItemAri().getAcompReferenciaAref().getTipoAcompanhamentoTa();
586 Long mes = Long.valueOf(arel.getAcompReferenciaItemAri().getAcompReferenciaAref().getMesAref());
587 Long ano = Long.valueOf(arel.getAcompReferenciaItemAri().getAcompReferenciaAref().getAnoAref());
588 List descendentes = acompRealFisicoDao.getArfsByIettAndTipoAcomp(itemPai, tipoAcompanhamento, config, null, mes, ano);
589
590
591
592 Collections.sort(descendentes, new Comparator(){
593 public int compare(Object arg0, Object arg1) {
594 IettArfBean ia1 = (IettArfBean) arg0;
595 IettArfBean ia2 = (IettArfBean) arg1;
596
597 ItemEstruturaIett i1 = ia1.getItem();
598 ItemEstruturaIett i2 = ia2.getItem();
599
600 String ord1 = i1.getEstruturaEtt().getNomeEtt() + " " + i1.getNomeIett();
601 String ord2 = i2.getEstruturaEtt().getNomeEtt() + " " + i2.getNomeIett();
602
603
604 return ord1.compareTo(ord2);
605 }
606 });
607
608 Iterator itDes = descendentes.iterator();
609 long codEtt = -1;
610 while(itDes.hasNext()){
611
612 IettArfBean iaBean = (IettArfBean) itDes.next();
613 ItemEstruturaIett item = iaBean.getItem();
614
615 if(item.equals(itemPai)){
616 continue;
617 }
618
619 AcompReferenciaItemAri acompanhamentoFilho = acompReferenciaItemDao.getAcompReferenciaItemByItemEstruturaIett(arel.getAcompReferenciaItemAri().getAcompReferenciaAref(), item);
620 if(acompanhamentoFilho != null && !codArisSelecionados.contains(acompanhamentoFilho.getCodAri().toString())) {
621
622
623 List listARF = acompRealFisicoDao.buscarPorIett(
624 acompanhamentoFilho.getItemEstruturaIett().getCodIett(),
625 Long.valueOf(acompanhamentoFilho.getAcompReferenciaAref().getMesAref()),
626 Long.valueOf(acompanhamentoFilho.getAcompReferenciaAref().getAnoAref()));
627 if(listARF != null && !listARF.isEmpty()){
628 String nomeEstrutura = "";
629
630 if(codEtt != item.getEstruturaEtt().getCodEtt().longValue()){
631 codEtt = item.getEstruturaEtt().getCodEtt().longValue();
632 nomeEstrutura = item.getEstruturaEtt().getNomeEtt();
633 }
634
635 geraXMLIndicadoresFilhos(builder, acompanhamentoFilho, nomeEstrutura);
636 }
637 }
638 }
639 builder.closeNode("itensFilhos");
640 }
641
642
643
644
645
646
647
648
649
650
651
652
653
654 private List geraXmlHierarquia(XmlBuilder builder, ItemEstruturaIett item, boolean quebrarPagina) throws ECARException{
655 List ascendentes = itemEstruturaDao.getAscendentes(item);
656
657 if(ascendentes != null && !ascendentes.isEmpty()){
658 if(quebrarPagina)
659 builder.addNode("hierarquia", "quebrarPagina=\"S\"");
660 else
661 builder.addNode("hierarquia", "quebrarPagina=\"N\"");
662
663 Iterator it = ascendentes.iterator();
664 while(it.hasNext()){
665 ItemEstruturaIett iettAsc = (ItemEstruturaIett) it.next();
666
667 String nomeItem = "";
668 if(iettAsc.getSiglaIett() != null)
669 nomeItem += "- ";
670 nomeItem += iettAsc.getNomeIett();
671
672 String siglaItem = iettAsc.getSiglaIett();
673
674 builder.addClosedNode("itemHierarquia", "nomeItem=\"" + builder.normalize(nomeItem) + "\" nivel=\"" + builder.normalize(iettAsc.getNivelIett().toString()) + "\" sigla=\"" + builder.normalize(siglaItem) + "\"");
675 }
676 builder.closeNode("hierarquia");
677 }
678 return ascendentes;
679 }
680
681
682
683
684
685
686
687
688
689
690 private String geraDataRodape(){
691 Date dataAtual = Data.getDataAtual();
692 String dia = String.valueOf(Data.getDia(dataAtual));
693 String mes = Data.getNomeMesExtenso(Data.getMes(dataAtual) + 1).toLowerCase();
694 String ano = String.valueOf(Data.getAno(dataAtual));
695 String hora = Data.getHorario(dataAtual);
696
697 return Data.getDiaSemanaNomeExtenso(dataAtual) + ", " + dia + " de " + mes + " de " + ano + ", às " + hora;
698 }
699
700
701
702
703
704
705
706
707
708 public String getXslFileName() {
709 return "relatorioAcompanhamento.xsl";
710 }
711
712
713
714
715
716
717
718
719
720
721
722 public String getErrorPage(HttpServletRequest request, String mensagem){
723 String errorPage = "relAcompanhamento\\listaRelAcomp.jsp?msgOperacao=" + mensagem;
724 return errorPage;
725 }
726
727
728
729
730
731
732
733
734
735
736
737 private void geraXmlEvolucaoFinanceira(XmlBuilder builder, AcompReferenciaItemAri itemAri) throws ECARException{
738 try{
739 List listaExercicios = itemEstPrevDao.getListaExerciciosItemEstruturaPrevisao(itemAri.getItemEstruturaIett());
740
741
742
743
744 List lista = itemEstPrevDao.getListaItemEstruturaPrevisao(itemAri.getItemEstruturaIett(), null);
745 Iterator it = lista.iterator();
746
747 EfItemEstPrevisaoEfiep itemEstPrev = new EfItemEstPrevisaoEfiep();
748
749
750
751
752
753
754
755 boolean possuiValores = false;
756 while(it.hasNext()){
757 itemEstPrev = (EfItemEstPrevisaoEfiep) it.next();
758
759
760 EfItemEstContaEfiec itemEstConta =
761 itemEstContaOrcDao.getItemEstruturaConta(
762 itemAri.getItemEstruturaIett(),
763 itemEstPrev.getExercicioExe(),
764 itemEstPrev.getFonteRecursoFonr(),
765 itemEstPrev.getRecursoRec());
766
767
768 Double[] valores = itemEstRealizadoDao.getSomaItemEstruturaRealizado(
769 itemEstConta,
770 itemEstPrev.getExercicioExe());
771
772 if(itemEstPrev.getValorAprovadoEfiep() != null && itemEstPrev.getValorAprovadoEfiep().doubleValue() > 0){
773 possuiValores = true;
774 }
775 if(itemEstPrev.getValorRevisadoEfiep() != null && itemEstPrev.getValorRevisadoEfiep().doubleValue() > 0){
776 possuiValores = true;
777 }
778
779 for(int i = 0; i < 6; i++){
780 if(valores[i] != null && valores[i].doubleValue() > 0){
781 possuiValores = true;
782 }
783 }
784 }
785
786
787
788
789 if (possuiValores){
790
791 int colunas = 0;
792 int numeroColunasExibidas = 0;
793
794 String descFinanceiro[] = new String[3];
795 boolean mostrarDescFinanceiro[] = new boolean[3];
796 descFinanceiro[0] = config.getRecursoDescValor1Cfg();
797 descFinanceiro[1] = config.getRecursoDescValor2Cfg();
798 descFinanceiro[2] = config.getRecursoDescValor3Cfg();
799
800 boolean mostrarValores[] = new boolean[6];
801
802 String descricoes[] = new String[6];
803 descricoes[0] = config.getFinanceiroDescValor1Cfg();
804 descricoes[1] = config.getFinanceiroDescValor2Cfg();
805 descricoes[2] = config.getFinanceiroDescValor3Cfg();
806 descricoes[3] = config.getFinanceiroDescValor4Cfg();
807 descricoes[4] = config.getFinanceiroDescValor5Cfg();
808 descricoes[5] = config.getFinanceiroDescValor6Cfg();
809
810 for(int i = 0; i < 6; i++){
811 mostrarValores[i] = itemEstRealizadoDao.getVerificarMostrarValorByPosicaoCfg(i);
812 if(mostrarValores[i]){
813 colunas++;
814 }
815 }
816
817 builder.addNode("evolucaoFinanceira", "nenhumValor='N' colunasRealizadas=\"" + builder.normalize(String.valueOf(colunas)) + "\"");
818
819
820 builder.addNode("colunas");
821
822 builder.addClosedNode("coluna", "nome=\"Categoria Econômica\"");
823 builder.addClosedNode("coluna", "nome=\"Fonte\"");
824
825
826
827
828 for(int i = 0; i < 3; i++){
829 mostrarDescFinanceiro[i] = itemEstRealizadoDao.getVerificarMostrarRecursoByPosicaoCfg(i);
830 if(mostrarDescFinanceiro[i]){
831 builder.addClosedNode("coluna", "nome=\"" + builder.normalize(descFinanceiro[i]) + "\"");
832 numeroColunasExibidas++;
833 }
834 }
835
836 for(int i = 0; i < 6; i++){
837 mostrarValores[i] = itemEstRealizadoDao.getVerificarMostrarValorByPosicaoCfg(i);
838 if(mostrarValores[i]){
839 builder.addClosedNode("coluna", "nome=\"" + builder.normalize(descricoes[i]) + "\"");
840 numeroColunasExibidas++;
841 }
842 }
843
844 builder.closeNode("colunas");
845
846
847
848
849
850 double t = 22.50;
851 String tam = String.valueOf(t/numeroColunasExibidas) + "cm";
852
853 builder.addNode("colunasHeader");
854 for(int x = 1; x <= numeroColunasExibidas; x++){
855 builder.addClosedNode("colunaHeader", "tamanho=\"" + builder.normalize(tam) + "\"");
856 }
857 builder.closeNode("colunasHeader");
858
859 double totFonAprovado = 0, totFonRevisado = 0;
860 double totGerAprovado = 0, totGerRevisado = 0;
861 double[] totFonValor = new double[6];
862 double[] totGerValor = new double[6];
863
864
865 for(int i = 0; i < 6; i++){
866 totFonValor[i] = 0;
867 totGerValor[i] = 0;
868 }
869
870
871 Iterator itExe = listaExercicios.iterator();
872 while(itExe.hasNext()){
873 ExercicioExe exercicio = (ExercicioExe) itExe.next();
874 String exercicioDesc = exercicio.getDescricaoExe();
875 String exercicioDescTotal = exercicioDesc;
876 double totExeAprovado = 0, totExeRevisado = 0;
877 double[] totExeValor = new double[6];
878
879
880 for(int i = 0; i < 6; i++){
881 totExeValor[i] = 0;
882 }
883
884
885 lista = itemEstPrevDao.getListaItemEstruturaPrevisao(itemAri.getItemEstruturaIett(), exercicio);
886 it = lista.iterator();
887 long codFonte = -1;
888 while(it.hasNext()){
889 itemEstPrev = (EfItemEstPrevisaoEfiep) it.next();
890
891
892 EfItemEstContaEfiec itemEstConta =
893 itemEstContaOrcDao.getItemEstruturaConta(
894 itemAri.getItemEstruturaIett(),
895 exercicio,
896 itemEstPrev.getFonteRecursoFonr(),
897 itemEstPrev.getRecursoRec());
898
899
900 Double[] valores = itemEstRealizadoDao.getSomaItemEstruturaRealizado(
901 itemEstConta,
902 exercicio);
903
904
905 if(codFonte != itemEstPrev.getFonteRecursoFonr().getCodFonr().longValue()){
906
907 if(codFonte != -1){
908
909 builder.closeNode("fonte");
910
911
912 totFonAprovado = 0;
913 totFonRevisado = 0;
914
915 for(int i = 0; i < 6; i++){
916 totFonValor[i] = 0;
917 }
918 }
919
920 codFonte = itemEstPrev.getFonteRecursoFonr().getCodFonr().longValue();
921
922 builder.addNode("fonte", "nome=\"" + builder.normalize(itemEstPrev.getFonteRecursoFonr().getNomeFonr()) + "\" exercicio=\"" + builder.normalize(exercicioDesc) + "\"");
923 exercicioDesc = "";
924 }
925
926
927 if(itemEstPrev.getValorAprovadoEfiep() != null){
928 totFonAprovado = totFonAprovado + itemEstPrev.getValorAprovadoEfiep().doubleValue();
929 totExeAprovado = totExeAprovado + itemEstPrev.getValorAprovadoEfiep().doubleValue();
930 }
931 if(itemEstPrev.getValorRevisadoEfiep() != null){
932 totFonRevisado = totFonRevisado + itemEstPrev.getValorRevisadoEfiep().doubleValue();
933 totExeRevisado = totExeRevisado + itemEstPrev.getValorRevisadoEfiep().doubleValue();
934 }
935
936 for(int i = 0; i < 6; i++){
937 if(mostrarValores[i]){
938 totFonValor[i] = totFonValor[i] + valores[i].doubleValue();
939 totExeValor[i] = totExeValor[i] + valores[i].doubleValue();
940 }
941 }
942
943
944 builder.addNode("recurso", "nome=\"" + builder.normalize(itemEstPrev.getRecursoRec().getNomeRec()) + "\"");
945
946
947
948 for(int i = 0; i < 3; i++){
949 if(mostrarDescFinanceiro[i]){
950 if(i == 0)
951 builder.addClosedNode("rec", "valor=\"" + builder.normalize(Pagina.trocaNullNumeroSemDecimal(itemEstPrev.getValorAprovadoEfiep())) + "\"");
952 if(i == 1)
953 builder.addClosedNode("rec", "valor=\"" + builder.normalize(Pagina.trocaNullNumeroSemDecimal(itemEstPrev.getValorRevisadoEfiep())) + "\"");
954 }
955 }
956
957 for(int i = 0; i < 6; i++){
958 if(mostrarValores[i])
959 builder.addClosedNode("rec", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(valores[i].doubleValue()))+ "\"");
960 }
961 builder.closeNode("recurso");
962 }
963
964
965
966
967 totGerAprovado = totGerAprovado + totExeAprovado;
968 totGerRevisado = totGerRevisado + totExeRevisado;
969
970 for(int i = 0; i < 6; i++){
971 if(mostrarValores[i])
972 totGerValor[i] = totGerValor[i] + totExeValor[i];
973 }
974
975
976
977 builder.addNode("totalEvolucaoFinanceiraExercicio", "exercicio=\"" + builder.normalize(exercicioDescTotal) + "\"");
978
979
980
981 for(int i = 0; i < 3; i++){
982 if(mostrarDescFinanceiro[i]){
983 if(i == 0)
984 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totExeAprovado))+ "\"");
985 if(i == 1)
986 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totExeRevisado))+ "\"");
987 }
988 }
989
990 for(int i = 0; i < 6; i++){
991 if(mostrarValores[i])
992 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totExeValor[i]))+ "\"");
993 }
994 builder.closeNode("totalEvolucaoFinanceiraExercicio");
995
996 builder.closeNode("fonte");
997 }
998
999
1000 builder.addNode("totalEvolucaoFinanceira");
1001
1002
1003
1004 for(int i = 0; i < 3; i++){
1005 if(mostrarDescFinanceiro[i]){
1006 if(i == 0)
1007 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totGerAprovado))+ "\"");
1008 if(i == 1)
1009 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totGerRevisado))+ "\"");
1010 }
1011 }
1012
1013 for(int i = 0; i < 6; i++){
1014 if(mostrarValores[i])
1015 builder.addClosedNode("total", "valor=\"" + builder.normalize(Util.formataNumeroSemDecimal(totGerValor[i]))+ "\"");
1016 }
1017 builder.closeNode("totalEvolucaoFinanceira");
1018
1019 builder.closeNode("evolucaoFinanceira");
1020 }
1021 else {
1022 builder.addClosedNode("evolucaoFinanceira", "nenhumValor='S' colunasRealizadas='0'");
1023 }
1024 } catch (HibernateException e){
1025 this.logger.error(e);
1026 throw new ECARException("Erro na criação do relatório: Evolução Financeira - " + e.getMessage());
1027 }
1028 }
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040 private void geraXMLIndicadores(XmlBuilder builder, AcompReferenciaItemAri itemAri, boolean filho) throws ECARException{
1041 try {
1042 if(itemAri != null) {
1043
1044 String mostrarProjecao = ("S".equals(Pagina.getParamStr(request, "indProjecao"))) ? "S" : "N";
1045 String itemFilho = filho ? "S" : "N";
1046
1047
1048
1049
1050
1051
1052
1053 List<ExercicioExe> todosExercicios = new ExercicioDao(null).getExeByPerExe(itemAri.getAcompReferenciaAref().getExercicioExe());
1054 List<ExercicioExe> exercicios = new ArrayList<ExercicioExe>();
1055
1056 if(todosExercicios == null || todosExercicios.isEmpty()) {
1057 throw new Exception("Não existe exercícios cadastrado");
1058 }
1059
1060 int qtdeAnos = 4;
1061 if(todosExercicios.size() < qtdeAnos) {
1062 qtdeAnos = todosExercicios.size();
1063 }
1064 exercicios.addAll(todosExercicios.subList(0, qtdeAnos));
1065
1066
1067 Collections.reverse(exercicios);
1068
1069 List indResultados = acompRealFisicoDao.getIndResulByAcompRefItemBySituacao(itemAri, Dominios.TODOS, true);
1070 if(indResultados != null && indResultados.size() > 0){
1071
1072 builder.addNode("indicadores",
1073 "labelFuncao=\"" + builder.normalize(estFuncDao.getLabelIndicadoresResultado(itemAri.getItemEstruturaIett().getEstruturaEtt())) +
1074 "\" mostrarProjecao=\"" + builder.normalize(mostrarProjecao) +
1075 "\" filho=\"" + builder.normalize(itemFilho) + "\"");
1076
1077 int numeroExercicios = 0;
1078 for(ExercicioExe exercicio : exercicios){
1079 builder.addClosedNode("columnExercicio", "ano=\"" + builder.normalize(exercicio.getDescricaoExe()) + "\"");
1080 builder.addClosedNode("indExercicio", "exercicio=\"" + builder.normalize(exercicio.getDescricaoExe()) + "\"");
1081 numeroExercicios++;
1082 }
1083
1084 Iterator itIndResult = indResultados.iterator();
1085 String grupoIndicador = "Indicador";
1086 String exibirGrupoIndicador = "N";
1087 while(itIndResult.hasNext()){
1088 AcompRealFisicoArf indicador = (AcompRealFisicoArf) itIndResult.next();
1089 String tipoQtde = indicador.getItemEstrtIndResulIettr().getIndTipoQtde();
1090 String situacao = "";
1091
1092 exibirGrupoIndicador = "N";
1093 if(config.getSisGrupoAtributoSgaByCodSgaGrAtrMetasFisicas() != null){
1094 if(indicador.getItemEstrtIndResulIettr().getSisAtributoSatb() != null && !grupoIndicador.equals(indicador.getItemEstrtIndResulIettr().getSisAtributoSatb().getDescricaoSatb())){
1095 grupoIndicador = indicador.getItemEstrtIndResulIettr().getSisAtributoSatb().getDescricaoSatb();
1096 exibirGrupoIndicador = "S";
1097 }
1098 else if(indicador.getItemEstrtIndResulIettr().getSisAtributoSatb() == null && !"".equals(grupoIndicador)) {
1099 exibirGrupoIndicador = "S";
1100 }
1101 }
1102
1103
1104 if(indicador.getSituacaoSit()!=null) {
1105 situacao = indicador.getSituacaoSit().getDescricaoSit();
1106 }
1107
1108 double totalRealizado = 0;
1109 double totalPrevisto = 0;
1110
1111 builder.addNode("indicador",
1112
1113 "nome=\"" + builder.normalize(indicador.getItemEstrtIndResulIettr().getNomeIettir() + " (" + indicador.getItemEstrtIndResulIettr().getUnidMedidaIettr()) + ")" + "\"" +
1114 " situacao=\"" + builder.normalize(situacao) + "\"" +
1115
1116 " realizadoNoMes=\"" + builder.normalize(Pagina.trocaNullNumeroSemDecimal(indicador.getQtdRealizadaArf())) + "\"" +
1117 " numeroExercicios=\"" + builder.normalize(String.valueOf(numeroExercicios)) + "\"" +
1118 " mostrarProjecao=\"" + builder.normalize(mostrarProjecao) + "\"" +
1119 " grupoIndicador=\"" + builder.normalize(grupoIndicador) + "\"" +
1120 " exibirGrupoIndicador=\"" + builder.normalize(exibirGrupoIndicador) + "\"" +
1121 " numeroExe=\"" + builder.normalize(String.valueOf(numeroExercicios)) + "\""
1122 );
1123
1124 if(indicador.getItemEstrtIndResulIettr().getSisAtributoSatb() == null && !"".equals(grupoIndicador)) {
1125 grupoIndicador = "";
1126 }
1127
1128 List valoresR = new ArrayList();
1129 List valoresP = new ArrayList();
1130
1131 for(ExercicioExe exercicio : exercicios){
1132 double realizadoNoExercicio = 0;
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159 if("S".equals(indicador.getItemEstrtIndResulIettr().getIndAcumulavelIettr())){
1160 realizadoNoExercicio = acompRealFisicoDao.getQtdRealizadaExercicio(exercicio, indicador.getItemEstrtIndResulIettr(), itemAri.getAcompReferenciaAref());
1161 } else {
1162 realizadoNoExercicio = acompRealFisicoDao.getQtdRealizadaExercicioNaoAcumulavel(exercicio, indicador.getItemEstrtIndResulIettr(), itemAri.getAcompReferenciaAref());
1163 }
1164
1165 double previstoNoExercicio = new ItemEstrtIndResulDao(null).getQtdPrevistoExercicio(indicador.getItemEstrtIndResulIettr(), exercicio);
1166 if("S".equals(indicador.getItemEstrtIndResulIettr().getIndAcumulavelIettr())){
1167 totalRealizado += realizadoNoExercicio;
1168 totalPrevisto += previstoNoExercicio;
1169 }else{
1170 totalRealizado = realizadoNoExercicio;
1171 totalPrevisto = previstoNoExercicio;
1172 }
1173
1174 valoresR.add(realizadoNoExercicio);
1175 valoresP.add(previstoNoExercicio);
1176
1177 String strPrevistoExe = "";
1178 String strRealizadoExe = "";
1179 if ("Q".equalsIgnoreCase(tipoQtde)){
1180 strPrevistoExe = Pagina.trocaNullNumeroSemDecimal(previstoNoExercicio);
1181 strRealizadoExe = Pagina.trocaNullNumeroSemDecimal(realizadoNoExercicio);
1182 }
1183 else {
1184 strPrevistoExe = Pagina.trocaNullMoeda(previstoNoExercicio);
1185 strRealizadoExe = Pagina.trocaNullMoeda(realizadoNoExercicio);
1186 }
1187
1188 builder.addClosedNode("valorExercicio",
1189 "exercicio=\"" + builder.normalize(exercicio.getDescricaoExe()) + "\"" +
1190
1191
1192 " valorPrevisto=\"" + builder.normalize(strPrevistoExe) + "\"" +
1193 " valorRealizado=\"" + builder.normalize(strRealizadoExe) + "\"");
1194 }
1195
1196 Collections.reverse(valoresR);
1197 Collections.reverse(valoresP);
1198
1199 totalPrevisto = acompRealFisicoDao.getSomaValoresArfs(indicador.getItemEstrtIndResulIettr(), valoresP).doubleValue();
1200 totalRealizado = acompRealFisicoDao.getSomaValoresArfs(indicador.getItemEstrtIndResulIettr(), valoresR).doubleValue();
1201
1202 double realizadoPrevisto = 0;
1203 if(totalPrevisto > 0) {
1204 realizadoPrevisto = ((totalRealizado/totalPrevisto) * 100);
1205 }
1206
1207 String strTotalPrevisto = "";
1208 String strTotalRealizado = "";
1209 if ("Q".equalsIgnoreCase(tipoQtde)){
1210 strTotalPrevisto = Pagina.trocaNullNumeroSemDecimal(totalPrevisto);
1211 strTotalRealizado = Pagina.trocaNullNumeroSemDecimal(totalRealizado);
1212 }
1213 else {
1214 strTotalPrevisto = Pagina.trocaNullMoeda(totalPrevisto);
1215 strTotalRealizado = Pagina.trocaNullMoeda(totalRealizado);
1216 }
1217
1218 builder.addClosedNode("valorTotal",
1219 " percentualRealizadoPrevisto=\"" + builder.normalize(Pagina.trocaNullNumeroDecimalSemMilhar(new Double((realizadoPrevisto)))) + "\"" +
1220
1221
1222 " totalPrevisto=\"" + builder.normalize(strTotalPrevisto) + "\"" +
1223 " totalRealizado=\"" + builder.normalize(strTotalRealizado) + "\""
1224 );
1225
1226
1227 String strProjecao = "";
1228 String imagemProjecao = "";
1229 String strPorcentual = "-";
1230
1231 if("S".equals(indicador.getItemEstrtIndResulIettr().getIndProjecaoIettr()) && totalRealizado > 0){
1232 double resultado = acompReferenciaItemDao.calculoProjecao(indicador.getItemEstrtIndResulIettr(), itemAri);
1233 ExercicioExe exercicioPrevisto = itemEstrtIndResulDao.getMaiorExercicioIndicador(indicador.getItemEstrtIndResulIettr());
1234 double qtdePrevista = itemEstrtIndResulDao.getQtdPrevistoExercicio(indicador.getItemEstrtIndResulIettr(), exercicioPrevisto);
1235
1236 Mensagem msg = new Mensagem(this.request.getSession().getServletContext());
1237
1238 if(resultado == qtdePrevista){
1239 strProjecao = msg.getMensagem("acompRelatorio.indicadorResultado.projecao.seraAtingida");
1240 imagemProjecao = pathEcar + "/images/relAcomp/previsto_emtempo.gif";
1241 }
1242 if(resultado > qtdePrevista){
1243 strProjecao = msg.getMensagem("acompRelatorio.indicadorResultado.projecao.seraAtingidaAntes");
1244 imagemProjecao = pathEcar + "/images/relAcomp/previsto_antestempo.gif";
1245 }
1246 if(resultado < qtdePrevista){
1247 strProjecao = msg.getMensagem("acompRelatorio.indicadorResultado.projecao.naoSeraAtingida");
1248 imagemProjecao = pathEcar + "/images/relAcomp/previsto_depoistempo.gif";
1249 }
1250
1251 Double porcentagem = new Double((resultado/qtdePrevista) * 100);
1252
1253 strPorcentual = Pagina.trocaNullNumeroDecimalSemMilhar(porcentagem);
1254 } else {
1255 if(totalRealizado == 0){
1256 strProjecao = "Não é possível realizar projeção sem informação de quantidades realizadas.";
1257 imagemProjecao = pathEcar + "/images/relAcomp/previsto_semquantidades.gif";
1258 } else {
1259 strProjecao = "N/A";
1260 imagemProjecao = pathEcar + "/images/relAcomp/previsto_naopermite.gif";
1261 }
1262 }
1263
1264 builder.addClosedNode("valorProjecao",
1265 " projecao=\"" + builder.normalize(strProjecao) + "\"" +
1266 " imagemProjecao=\"" + builder.normalize(imagemProjecao) + "\"" +
1267 " mostrarProjecao=\"" + builder.normalize(mostrarProjecao) + "\"" +
1268 " percentual=\"" + builder.normalize(strPorcentual) + "\"" +
1269 " situacao=\"" + builder.normalize(situacao) + "\""
1270 );
1271
1272
1273 builder.closeNode("indicador");
1274
1275 }
1276
1277 geraXMLLegendaIndicadores(builder, new Mensagem(this.request.getSession().getServletContext()));
1278
1279 builder.closeNode("indicadores");
1280 }
1281 }
1282
1283 } catch(Exception e){
1284 this.logger.error(e);
1285 throw new ECARException("Erro na criação do relatório: Indicadores - " + e.getMessage());
1286 }
1287 }
1288
1289 public void geraXMLLegendaIndicadores(XmlBuilder builder, Mensagem msg){
1290 builder.addNode("legendaIndicadores");
1291
1292 builder.addClosedNode("legenda",
1293 "imagem=\"" + builder.normalize(pathEcar + "/images/relAcomp/previsto_antestempo.gif") + "\"" +
1294 " descricao=\"" + builder.normalize(msg.getMensagem("acompRelatorio.indicadorResultado.projecao.seraAtingidaAntes")) + "\"" +
1295 "");
1296 builder.addClosedNode("legenda",
1297 "imagem=\"" + builder.normalize(pathEcar + "/images/relAcomp/previsto_emtempo.gif") + "\"" +
1298 " descricao=\"" + builder.normalize(msg.getMensagem("acompRelatorio.indicadorResultado.projecao.seraAtingida")) + "\"" +
1299 "");
1300 builder.addClosedNode("legenda",
1301 "imagem=\"" + builder.normalize(pathEcar + "/images/relAcomp/previsto_depoistempo.gif") + "\"" +
1302 " descricao=\"" + builder.normalize(msg.getMensagem("acompRelatorio.indicadorResultado.projecao.naoSeraAtingida")) + "\"" +
1303 "");
1304 builder.addClosedNode("legenda",
1305 "imagem=\"" + builder.normalize(pathEcar + "/images/relAcomp/previsto_semquantidades.gif") + "\"" +
1306 " descricao=\"" + builder.normalize("Não é possível realizar projeção sem informação de quantidades realizadas.") + "\"" +
1307 "");
1308 builder.addClosedNode("legenda",
1309 "imagem=\"" + builder.normalize(pathEcar + "/images/relAcomp/previsto_naopermite.gif") + "\"" +
1310 " descricao=\"" + builder.normalize("Não permite projeção") + "\"" +
1311 "");
1312 builder.closeNode("legendaIndicadores");
1313 }
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326 private void geraXMLIndicadoresFilhos(XmlBuilder builder, AcompReferenciaItemAri itemAri, String nomeEstrutura) throws ECARException{
1327 try {
1328 String nomeItem = itemAri.getItemEstruturaIett().getNomeIett();
1329 String siglaOrg = "";
1330
1331 if(itemAri.getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett() != null){
1332 siglaOrg = itemAri.getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg();
1333 }
1334 else {
1335 siglaOrg = "Órgão não informado";
1336 }
1337
1338 builder.addNode("itemFilho",
1339 "nomeItem=\"" + builder.normalize(nomeItem) + "\"" +
1340 " orgaoItem=\"" + builder.normalize(siglaOrg) + "\"" +
1341 " estruturaItem=\"" + builder.normalize(nomeEstrutura) + "\"" +
1342 "");
1343 geraXMLIndicadores(builder, itemAri, true);
1344 builder.closeNode("itemFilho");
1345
1346 } catch(Exception e){
1347 this.logger.error(e);
1348 throw new ECARException("Erro na criação do relatório: IndicadoresFilhos - " + e.getMessage());
1349 }
1350 }
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364 private void geraXMLOcorrencias(XmlBuilder builder, AcompReferenciaItemAri itemAri) throws ECARException{
1365 try {
1366
1367 List<ItemEstrutAcaoIetta> ocorrencias = new ArrayList(itemAri.getItemEstruturaIett().getItemEstrutAcaoIettas());
1368 if(ocorrencias != null && !ocorrencias.isEmpty()){
1369
1370 Collections.sort(ocorrencias, new Comparator(){
1371
1372 public int compare(Object arg0, Object arg1) {
1373 ItemEstrutAcaoIetta i1 = (ItemEstrutAcaoIetta) arg0;
1374 ItemEstrutAcaoIetta i2 = (ItemEstrutAcaoIetta) arg1;
1375
1376 if(i1.getDataIetta() == null && i2.getDataIetta() == null)
1377 return 0;
1378 if(i1.getDataIetta() != null && i2.getDataIetta() == null)
1379 return -1;
1380 if(i1.getDataIetta() == null && i2.getDataIetta() != null)
1381 return 1;
1382
1383 return i1.getDataIetta().compareTo(i2.getDataIetta());
1384 }
1385
1386 });
1387
1388 Collections.reverse(ocorrencias);
1389
1390 builder.addNode("ocorrencias", "labelFuncao=\"" + builder.normalize(estFuncDao.getLabelOcorrencias(itemAri.getItemEstruturaIett().getEstruturaEtt())) + "\"");
1391 for(ItemEstrutAcaoIetta ocorrencia : ocorrencias){
1392
1393 if(Dominios.NAO.equals(ocorrencia.getIndAtivoIetta())) {
1394 continue;
1395 }
1396 String data = Data.parseDate(ocorrencia.getDataIetta());
1397 String descricao = ocorrencia.getDescricaoIetta();
1398 builder.addClosedNode("ocorrencia",
1399 "data=\"" + builder.normalize(data) + "\"" +
1400 " descricao=\"" + builder.normalize(descricao) + "\""
1401 );
1402 }
1403 builder.closeNode("ocorrencias");
1404 }
1405
1406 } catch(Exception e){
1407 this.logger.error(e);
1408 throw new ECARException("Erro na criação do relatório: Ocorrencias - " + e.getMessage());
1409 }
1410 }
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422 private void geraXMLEtapas(XmlBuilder builder, AcompRelatorioArel arel) throws ECARException{
1423
1424 ItemEstruturaIett item = arel.getAcompReferenciaItemAri().getItemEstruturaIett();
1425
1426 List ettEtapas = estruturaDao.getEstruturasEtapas(item.getEstruturaEtt());
1427
1428 String labelFuncao = "";
1429 if(ettEtapas != null && ettEtapas.size() > 1){
1430 labelFuncao = "Etapas:";
1431 }
1432
1433 builder.addNode("etapas",
1434 "labelFuncao=\"" + builder.normalize(labelFuncao) + "\"");
1435 if(ettEtapas != null && !ettEtapas.isEmpty()){
1436 Iterator itEttEtapas = ettEtapas.iterator();
1437 while(itEttEtapas.hasNext()){
1438 EstruturaEtt ettEtapa = (EstruturaEtt) itEttEtapas.next();
1439
1440 List etapas = new ArrayList();
1441 List colunas = estruturaDao.getAtributosAcessoEstrutura(ettEtapa);
1442
1443 if(colunas != null && colunas.size() > 0) {
1444
1445 etapas = itemEstruturaDao.getItensFilho(item, ettEtapa, colunas);
1446 }
1447 else {
1448 etapas = itemEstruturaDao.getItensFilho(item, ettEtapa, "");
1449 }
1450
1451 if(etapas != null && !etapas.isEmpty()){
1452
1453
1454
1455
1456 boolean apresentarEtapa = false;
1457 for(Iterator it = etapas.iterator(); it.hasNext();){
1458 ItemEstruturaIett etapa = (ItemEstruturaIett) it.next();
1459 if(etapa.getEstruturaEtt().equals(ettEtapa)){
1460 apresentarEtapa = true;
1461 }
1462 }
1463
1464 if(!apresentarEtapa){
1465 continue;
1466 }
1467
1468 builder.addNode("etapa", "nomeEtapa=\"" + builder.normalize(ettEtapa.getNomeEtt()) + "\"");
1469
1470 geraXMLColunasEtapa(builder, colunas);
1471 if(colunas != null && !colunas.isEmpty()){
1472 Iterator itEtapa = etapas.iterator();
1473 String corFundo = "#EEE9E9";
1474 while(itEtapa.hasNext()){
1475 ItemEstruturaIett etapa = (ItemEstruturaIett) itEtapa.next();
1476 if(etapa.getEstruturaEtt().equals(ettEtapa)){
1477 geraXMLValoresEtapa(builder, etapa, colunas, corFundo);
1478
1479 if(!"".equals(corFundo)){
1480 corFundo = "";
1481 }
1482 else {
1483 corFundo = "#EEE9E9";
1484 }
1485 }
1486 }
1487 }
1488 builder.closeNode("etapa");
1489 }
1490 }
1491 }
1492
1493 builder.closeNode("etapas");
1494 }
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505 public void geraXMLColunasEtapa(XmlBuilder builder, List colunas) throws ECARException{
1506 if(colunas != null && !colunas.isEmpty()){
1507 Iterator itColunas = colunas.iterator();
1508 while (itColunas.hasNext()){
1509 ObjetoEstrutura coluna = (ObjetoEstrutura) itColunas.next();
1510
1511 double larguraReal = ((250 * coluna.iGetLargura().intValue()) / (100));
1512 String largura = String.valueOf(larguraReal) + "mm";
1513 String label = coluna.iGetLabel();
1514
1515 builder.addClosedNode("etapasColunaHeader", "largura=\"" + builder.normalize(largura) + "\"");
1516 builder.addClosedNode("etapasColuna", "label=\"" + builder.normalize(label) + "\"");
1517 }
1518 }
1519 }
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531 public void geraXMLValoresEtapa(XmlBuilder builder, ItemEstruturaIett etapa, List colunas, String corFundo) throws ECARException{
1532 if(colunas != null && !colunas.isEmpty()){
1533 builder.addNode("itemEtapa", "corFundo=\"" + builder.normalize(corFundo) + "\"");
1534 Iterator itColunas = colunas.iterator();
1535 while (itColunas.hasNext()){
1536 ObjetoEstrutura coluna = (ObjetoEstrutura) itColunas.next();
1537 builder.addClosedNode("etapasValor", "valor=\"" + builder.normalize(coluna.iGetValor(etapa)) + "\"");
1538 }
1539 builder.closeNode("itemEtapa");
1540 }
1541 }
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553 private boolean verificaEtapa(EstruturaEtt ettEtapa, List etapas){
1554 if(etapas != null && !etapas.isEmpty()){
1555 Iterator itEtapa = etapas.iterator();
1556 while(itEtapa.hasNext()){
1557 ItemEstruturaIett etapa = (ItemEstruturaIett) itEtapa.next();
1558 if(etapa.getEstruturaEtt().equals(ettEtapa)){
1559 return true;
1560 }
1561 }
1562 }
1563 return false;
1564 }
1565 }