View Javadoc

1   /*
2    * Created on 19/05/2006
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   * @author aleixo
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  	 * Gera XML.<br>
61  	 * 
62  	 * @author N/C
63       * @since N/C
64       * @version N/C
65  	 * @param HttpServletRequest request
66  	 * @return StringBuffer
67  	 * @throws ECARException
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 = ""; //A = Valores Aprovados, R = Valores Revisados (Não aparece este último pq é o oficial
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 	 * Pega o nome do arquivo xsl.<br>
127 	 * 
128 	 * @author N/C
129      * @since N/C
130      * @version N/C
131 	 * @return String
132 	 */
133     public String getXslFileName() {
134         return "relatorioApendice.xsl";
135     }
136     
137     /**
138      * Pega o erro de pagina.<br>
139      * 
140      * @author N/C
141      * @since N/C
142      * @version N/C
143      * @param HttpServletRequestrequest
144      * @param String mensagem
145      * @return String
146      */
147     public String getErrorPage(HttpServletRequest request, String mensagem){        
148         String errorPage = "rel_ppa.jsp?msgOperacao=" + mensagem; 
149         return errorPage;
150     }
151     
152     /**
153      * Gera itens xml.<br>
154      * 
155      * @author N/C
156      * @since N/C
157      * @version N/C
158      * @param XmlBuilder builder
159      * @throws ECARException
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      * Gera tag Programa no XML.<br>
178      * 
179      * @author N/C
180      * @since N/C
181      * @version N/C
182      * @param XmlBuilder builder
183      * @param ItemEstruturaIett item
184      * @throws ECARException
185      */
186     
187     public void geraXMLPrograma(XmlBuilder builder, ItemEstruturaIett item) throws ECARException{
188     	
189     	//this.incrementarTotalizadorEstrutura(item.getEstruturaEtt().getCodEtt(), "Programas Considerados");
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     	//Para cada Programa, gerar as ações...
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     			 * Foi necessário criar uma variavel, pois se fizer:
215     			 * gerouAcao = gerouAcao || geraXMLAcao() e gerouAcao for setada como true,
216     			 * nas próximas vezes o método que gera as ações nem é executado.
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      * Gera dados programa xml.<br>
231      * 
232      * @author N/C
233      * @since N/C
234      * @version N/C
235      * @param XmlBuilder builder
236      * @param ItemEstruturaIett item
237      * @throws ECARException
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      * Gera tag Ação no XMl.<br>
251      * 
252      * @author N/C
253      * @since N/C
254      * @version N/C
255      * @param XmlBuilder builder
256      * @param ItemEstruturaIett item
257      * @return boolean
258      * @throws ECARException
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 	    			//"nome=\"" + builder.normalize(item.getNomeIett()) + "\"" +
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 	    	//Para cada Ação, gerar os produtos...
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 	    			 * Foi necessário criar uma variavel, pois se fizer:
329 	    			 * gerouProduto = gerouProduto || geraXMLProduto() e gerouProduto for setada como true,
330 	    			 * nas próximas vezes o método que gera os produtos nem é executado.
331 	    			 */
332 	    			
333 	    		}
334 	    	}
335 	    	
336 	    	/*
337 	    	gerouAcao = gerouProduto;
338 	    	
339 	    	if(gerouAcao)
340 	    		this.incrementarTotalizadorEstrutura(item.getEstruturaEtt().getCodEtt(), "Quantidade de Ações Excluídas");
341 	    	*/
342 	    	builder.closeNode("itemAcao");
343 		}
344 		
345 		return gerouAcao;
346     }
347     
348     /**
349      * Verifica produtos Excluidos.<br>
350      * 
351      * @author N/C
352      * @since N/C
353      * @version N/C
354      * @param ItemEstruturaIettacao
355      * @return boolean
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      * Gera tag Produto no XML.<br>
379      * 
380      * @author N/C
381      * @since N/C
382      * @version N/C
383      * @param XmlBuilder builder
384      * @param ItemEstruturaIett item
385      * @param boolean produtoAcaoExcluida
386      * @return boolean
387      * @throws ECARException
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 = ""; //Este campo só será usado no apendice3
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(); //NomePPA
410 				else
411 					nome = item.getNomeIett();
412 			}
413 			
414 			/*
415 			 * Ref. mantis 6097: 
416 			 * 4) Quando uma exclusão aconteceu em nível de ação, apresentar apenas a
417 			 * justificativa da ação; a justificativa dos produtos ficará em branco.
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      * Gera item produto xml.<br>
440      * 
441      * @author N/C
442      * @since N/C
443      * @version N/C
444      * @param XmlBuilder builder
445      * @param ItemEstruturaIett item
446      * @param String nome
447      * @param String tipo
448      * @param String unidade
449      * @param String tipoSituacao
450      * @param String regiao
451      * @param String valor
452      * @param String justificativa
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      * Pega ultima revisão iett.<br>
477      * 
478      * @author N/C
479      * @since N/C
480      * @version N/C
481      * @param Set listaRevisoes
482      * @return ItemEstruturarevisaoIettrev 
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 						String data1 = Data.parseDate(iett1.getDataInclusaoIettrev());
496 						String data2 = Data.parseDate(iett2.getDataInclusaoIettrev());
497 						
498 						//dd/mm/yyyy -> yyyymmaa
499 						data1 = data1.substring(6) + data1.substring(3, 5) + data1.substring(0, 2);
500 						data2 = data2.substring(6) + data2.substring(3, 5) + data2.substring(0, 2);
501 						
502 						return data1.compareTo(data2);*/
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      * Incrementa totalizador estrutura.<br>
516      * 
517      * @author N/C
518      * @since N/C
519      * @version N/C
520      * @param Long idEstrutura
521      * @param String nomeEstrutura
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      * Gera totalizador xml.<br>
548      * 
549      * @author N/C
550      * @since N/C
551      * @version N/C
552      * @param XmlBuilder builder
553      * @throws ECARException
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      * Gera totalizador de valores xml.<br>
581      * 
582      * @author N/C
583      * @since N/C
584      * @version N/C
585      * @param XmlBuilder builder
586      * @throws ECARException
587      */
588     public void geraXMLTotalizadorValores(XmlBuilder builder) throws ECARException{
589         try{
590         	//int total = 0;
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             	//total += tr.getTotal();
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 }