View Javadoc

1   package ecar.taglib.util;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.Iterator;
6   import java.util.List;
7   import java.util.Map;
8   
9   import javax.servlet.http.HttpServletRequest;
10  import javax.servlet.jsp.JspException;
11  import javax.servlet.jsp.JspWriter;
12  import javax.servlet.jsp.tagext.Tag;
13  import javax.servlet.jsp.tagext.TagSupport;
14  
15  import org.apache.log4j.Logger;
16  
17  import ecar.bean.NomeImgsNivelPlanejamentoBean;
18  import ecar.dao.AcompReferenciaDao;
19  import ecar.dao.AcompReferenciaItemDao;
20  import ecar.dao.CorDao;
21  import ecar.dao.ItemEstUsutpfuacDao;
22  import ecar.dao.ItemEstrutMarcadorDao;
23  import ecar.dao.ItemEstruturaDao;
24  import ecar.dao.TipoFuncAcompDao;
25  import ecar.exception.ECARException;
26  import ecar.login.SegurancaECAR;
27  import ecar.pojo.AcompReferenciaAref;
28  import ecar.pojo.AcompReferenciaItemAri;
29  import ecar.pojo.AcompRelatorioArel;
30  import ecar.pojo.Cor;
31  import ecar.pojo.ItemEstUsutpfuacIettutfa;
32  import ecar.pojo.ItemEstrutMarcadorIettm;
33  import ecar.pojo.ItemEstruturaIett;
34  import ecar.pojo.StatusRelatorioSrl;
35  import ecar.pojo.TipoAcompFuncAcompTafc;
36  import ecar.pojo.TipoFuncAcompTpfa;
37  import ecar.pojo.UsuarioAtributoUsua;
38  import ecar.pojo.UsuarioUsu;
39  import ecar.util.Dominios;
40  
41  /**
42   * @author BarbaraSiqueira
43   * @since 28/11/2007
44   */
45  public class ArvoreFilhosItemEstruturaTag extends TagSupport {
46  
47  	private static final long serialVersionUID = 6791633584021020042L;
48  	
49  	// atributos da tag
50  	private ItemEstruturaIett itemEstrutura;
51  	private UsuarioUsu usuario;
52  	private StatusRelatorioSrl statusLiberado;
53  	private List<ItemEstruturaIett> colecaoItens;
54  	private Collection<AcompReferenciaAref> periodosConsiderados;
55  	
56  	private List tpfaOrdenadosPorEstrutura;
57  	
58  	private String status;
59  	private String idPagina;
60  	private String pathEcar;
61  	private String caminhoUrl;
62  	private String codTipoAcompanhamento;
63  	private String exigeLiberarAcompanhamento;
64  	private String codAref;
65  		
66  	private HttpServletRequest request;
67  	private SegurancaECAR seguranca;
68  	private boolean permissaoAdministradorAcompanhamento;
69  	
70  	private List itensSessao;
71  	private List itensSessaoVisualizar;
72  	private boolean usuarioLogadoEmiteParecer;
73  	/**
74       * Inicializa a montagem da tag para ser adicionada na tela de HTML.<br>
75       * 
76  	 * @return int
77  	 * @throws JspException
78       */
79      public int doStartTag() throws JspException {
80      	
81          JspWriter writer = this.pageContext.getOut();                
82          try {        	       	        	
83          	TipoFuncAcompDao tipoFuncAcompDao = new TipoFuncAcompDao();
84          	
85              StringBuffer s = new StringBuffer();
86              if(tpfaOrdenadosPorEstrutura==null)
87              	tpfaOrdenadosPorEstrutura = tipoFuncAcompDao.getFuncaoAcompOrderByEstruturas(); 
88  
89              s = imprimeColunasDoItem(getItemEstrutura());
90  			
91              writer.print(s.toString());
92          } catch (Exception e) {
93          	Logger.getLogger(this.getClass()).error(e);
94          	e.printStackTrace();
95          }
96          return Tag.SKIP_BODY;
97      }
98      
99      private StringBuffer imprimeColunasDoItem(ItemEstruturaIett pItemEstrutura) {
100     	StringBuffer retorno = new StringBuffer();
101     	StringBuffer imprimeFilhos = new StringBuffer();
102 
103     	if(request.getAttribute("itensSessao")!=null)
104     		itensSessao = (List)request.getAttribute("itensSessao");
105     	if(request.getAttribute("itensSessaoVisualizar")!=null)
106     		itensSessaoVisualizar = (List)request.getAttribute("itensSessaoVisualizar");
107 
108     	//Verficar se tem filhos e se tiver deverá gerar o link para a arvore deles
109     	String linkAbrirArvoreIettComeco = "";
110     	String linkAbrirArvoreIettFim = "";
111     	ItemEstruturaDao itemDao = new ItemEstruturaDao(getRequest());
112     	List<ItemEstruturaIett> filhosExibir = new ArrayList<ItemEstruturaIett>();
113 		List<ItemEstruturaIett> filhos = new ArrayList<ItemEstruturaIett>();
114 		try {
115 			filhos = itemDao.getDescendentesViaQry(pItemEstrutura);
116 		} catch(ECARException e) {
117 			Logger.getLogger(this.getClass()).error(e);
118 			e.printStackTrace();
119 		}
120 		if(filhos != null && filhos.size() > 0){
121 			Iterator<ItemEstruturaIett> itFilhos = filhos.iterator();
122 			int contadorFilhos = 1;
123 			while(itFilhos.hasNext()){
124 				ItemEstruturaIett filho = (ItemEstruturaIett) itFilhos.next();
125 				if(getColecaoItens().contains(filho)){
126 					//monta a árvore de filhos
127 					imprimeFilhos.append("</tr>");
128 					imprimeFilhos.append("<tr id=\"itensFilhoDoItem"+pItemEstrutura.getCodIett()+"Filho"+contadorFilhos+"\" style=\"display:none\" class=\"cor_sim\"");
129 					imprimeFilhos.append("onmouseover=\"javascript:destacaLinha(this,'over','')\" onmouseout=\"javascript: destacaLinha(this,'out','cor_sim')\"");
130 					imprimeFilhos.append("onClick=\"javascript:destacaLinha(this,'click','cor_sim')\" bgcolor=\""+filho.getEstruturaEtt().getCodCor3Ett()+"\">");
131 					imprimeFilhos.append(imprimeColunasDoItem(filho));
132 					contadorFilhos++;
133 					if(!getIdPagina().equals("proximosItens")) {
134 						//criação do link para abrir a arvore de itens do item
135 						linkAbrirArvoreIettComeco = "<a href=\"javascript:abrirItem(form, '" + pItemEstrutura.getCodIett() + "', '" + status + "',"+filhos.size()+")\">";
136 						linkAbrirArvoreIettFim = "</a>";
137 					}
138 				} 
139 			}
140 		}
141     	
142     	//System.out.println(">>>>>>>>>> comeca a imprimir "+ System.currentTimeMillis());
143     	retorno.append(imprimeColunaDoMarcador(pItemEstrutura));
144     	retorno.append(imprimeColunaIdentacaoNivel(pItemEstrutura, linkAbrirArvoreIettComeco, linkAbrirArvoreIettFim));
145     	retorno.append(imprimeColunaImagemNivel(pItemEstrutura));
146     	retorno.append(imprimeColunaOrgaoResponsavel(pItemEstrutura));
147     	retorno.append(imprimeColunaImagemAnotacao(pItemEstrutura));
148     	retorno.append(imprimeColunaPareceres(pItemEstrutura));
149     	//System.out.println(">>>>>>>>>> termina de imprimir "+ System.currentTimeMillis());
150 
151     	//monta a árvore de filhos
152     	retorno.append(imprimeFilhos);
153 		
154     	return retorno;
155     }
156 	
157     /*
158      * Método que imprime a primeira coluna da linha do item: coluna do marcador se tiver anotação
159      */
160     private StringBuffer imprimeColunaDoMarcador(ItemEstruturaIett pItemEstrutura) {
161     	StringBuffer retorno = new StringBuffer();
162     	String caminhoEcar = getPathEcar();
163     	ItemEstruturaIett item = pItemEstrutura;
164     	ItemEstrutMarcadorDao marcadorDao = new ItemEstrutMarcadorDao(getRequest());
165 
166         retorno.append("<td>");
167 		if(!getStatus().equals("true")){
168 			try {
169 				ItemEstrutMarcadorIettm marcador = marcadorDao.getUltimoMarcador(item, getUsuario());
170 				if(marcador != null){
171 					retorno.append("<a href=\"javascript:abrirPopUpListaAnotacao("+item.getCodIett()+")\">");
172 					if(marcador.getCor() != null) { 
173 						retorno.append("<img src='" + caminhoEcar + "/images/relAcomp/"+marcador.getCor().getNomeCor().toLowerCase()+"_inf.png' border='0' alt=\"\">");
174 					} else {
175 						retorno.append("<img src='" + caminhoEcar + "/images/relAcomp/branco_inf.png' border='0' alt=\"\">");
176 					}
177 					retorno.append("</a>");
178 				}
179 			} catch(ECARException ecarex) {
180 				Logger.getLogger(this.getClass()).error(ecarex);
181 				ecarex.printStackTrace();
182 			}
183 		}
184 		retorno.append("</td>");
185 		return retorno;
186     }
187     
188     /*
189      * Método que imprime a segunda coluna da linha do item: coluna da identação pelo nivel 
190      */
191     private StringBuffer imprimeColunaIdentacaoNivel(ItemEstruturaIett pItemEstrutura, 
192     		String linkComeco, String linkFim) {
193     	
194     	StringBuffer retorno = new StringBuffer();
195     	ItemEstruturaIett item = pItemEstrutura;
196     	
197     	retorno.append("<td>");
198     	retorno.append("<table>");
199     	retorno.append("<tr bgcolor=\""+item.getEstruturaEtt().getCodCor3Ett()+"\">");
200     	retorno.append("<td nowrap>&nbsp;");
201 		int nivel = item.getNivelIett().intValue();
202 		for(int i = 1; i < nivel;i++) {
203 			retorno.append("<img src=\""+getRequest().getContextPath()+"/images/pixel.gif\" width=\"22\" height=\"9\" alt=\"\">");
204 		}
205 		retorno.append("</td>");
206 		
207 		// Verificar se a imagem é de + ou -							
208 		String caminhoImagem = "";
209 		if(linkFim.equals("")) {
210 			//Quando nao puder expandir o item, a imagem mostrada sera a de -
211 			caminhoImagem = "/images/expanded_button.gif";
212 		} else {
213 			//Quando puder expandir o item, a imagem mostrada sera a de +
214 			caminhoImagem = "/images/collapsed_button.gif";
215 		}
216 		
217        //retorno.append("<td valign=\"top\">"+linkComeco+"<img src=\""+getPathEcar()+"/images/icon_bullet_seta.png\" alt=\"\" border=\"0\">"+linkFim+"</td>");
218 		retorno.append("<td valign=\"top\">"+linkComeco+"<img src=\""+getPathEcar()+caminhoImagem+ "\" alt=\"\" border=\"0\">"+linkFim+"</td>");
219 		retorno.append("<td title=\""+item.getEstruturaEtt().getNomeEtt().trim()+"\">");
220 		retorno.append("<td colspan=\"3\">"+item.getNomeIett()+"</td>");
221 		retorno.append("</font>");
222 		retorno.append("</td>");
223 		retorno.append("</tr>");
224 		retorno.append("</table>");
225 		retorno.append("</td>");
226 		
227     	return retorno;
228     }
229     
230     /*
231      * Método que imprime a terceira coluna da linha do item: imagem nivel planejamento 
232      */
233     private StringBuffer imprimeColunaImagemNivel(ItemEstruturaIett pItemEstrutura) {
234     	StringBuffer retorno = new StringBuffer();
235     	ItemEstruturaDao itemDao = new ItemEstruturaDao(getRequest());
236     	
237     	//imagem nivel planejamento
238     	retorno.append("<td nowrap>");
239     	Iterator<NomeImgsNivelPlanejamentoBean> itNiveis = itemDao.getNomeImgsNivelPlanejamentoItemAgrupado(pItemEstrutura).iterator();
240 		while(itNiveis.hasNext()){
241 			NomeImgsNivelPlanejamentoBean imagemNivelPlanejamento = (NomeImgsNivelPlanejamentoBean) itNiveis.next();
242 			retorno.append(imagemNivelPlanejamento.geraHtmlImg(getRequest()));
243 		}
244 		retorno.append("</td>");
245 
246     	return retorno;
247     }
248     
249     /*
250      * Método que imprime a quarta coluna da linha do item: nome do Órgao Responsável 
251      */
252     private StringBuffer imprimeColunaOrgaoResponsavel(ItemEstruturaIett pItemEstrutura) {
253     	StringBuffer retorno = new StringBuffer();
254     	ItemEstruturaIett item = pItemEstrutura;
255     	
256     	retorno.append("<td align=\"center\">");
257 		if(item.getOrgaoOrgByCodOrgaoResponsavel1Iett() != null){
258 			if(item.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg() != null)
259 				retorno.append(item.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg());	
260 			else
261 				retorno.append(item.getOrgaoOrgByCodOrgaoResponsavel1Iett().getDescricaoOrg());	
262 		} else {
263 			//Se não possuir orgao procura orgao do pai
264 			ItemEstruturaIett itemAux = item;
265 			while(itemAux != null && itemAux.getOrgaoOrgByCodOrgaoResponsavel1Iett() == null && itemAux.getItemEstruturaIett() != null){
266 				itemAux = itemAux.getItemEstruturaIett();
267 			}
268 			if(itemAux != null && itemAux.getOrgaoOrgByCodOrgaoResponsavel1Iett() != null){
269 				if(itemAux.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg() != null)
270 					retorno.append(itemAux.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg());	
271 				else
272 					retorno.append(itemAux.getOrgaoOrgByCodOrgaoResponsavel1Iett().getDescricaoOrg());											
273 			}
274 		}
275 		retorno.append("</td>");
276     	
277     	return retorno;
278     }
279     
280     /*
281      * Método que imprime a quinta coluna da linha do item: imagem inserir anotação 
282      */
283     private StringBuffer imprimeColunaImagemAnotacao(ItemEstruturaIett pItemEstrutura) {
284     	StringBuffer retorno = new StringBuffer();
285 
286 		//criação do link para detalhamento do item 
287 		String linkAbrirIettComeco = "<a href=\"javascript:detalharItemEstrutura(form, '" + pItemEstrutura.getCodIett() + "', '" + status + "')\" title=\"Ação\">";
288     	
289 		//imagem inserir anotação
290 		retorno.append("<td>");
291 		if(!getStatus().equals("true")){
292 			retorno.append("<a href=\"javascript:abrirPopUpInserirAnotacao("+pItemEstrutura.getCodIett()+")\" title=\"Inserir anotação\"> ");
293 			retorno.append("<img src=\""+getPathEcar()+"/images/relAcomp/icon_anotacoes.png\" border=\"0\" alt=\"\"> </a>");
294 		}
295 		retorno.append("</td>");
296 	
297 		// ADICIONAR A IMAGEM PARA EDITAR				
298 		usuarioLogadoEmiteParecer = false;		
299 		boolean permissaoLapis = false;
300 		
301 		if(permissaoAdministradorAcompanhamento){
302 			permissaoLapis = true;
303 		}																				
304 		
305 		TipoFuncAcompDao tipoFuncAcompDao = new TipoFuncAcompDao();
306 		ItemEstUsutpfuacDao itemEstUsuDao = new ItemEstUsutpfuacDao(request);
307 		AcompReferenciaItemDao acompReferenciaItemDao = new AcompReferenciaItemDao(request);
308 		AcompReferenciaDao acompReferenciaDao = new AcompReferenciaDao(request);
309 		//List tpfaOrdenadosPorEstrutura = null;
310 		Map  mapAcao = null;
311 		Iterator itPeriodosAcao = periodosConsiderados.iterator();		
312 
313 		try {
314 			//tpfaOrdenadosPorEstrutura = tipoFuncAcompDao.getFuncaoAcompOrderByEstruturas();
315 			mapAcao = acompReferenciaItemDao.criarMapPeriodoAri(periodosConsiderados, itemEstrutura);
316 		} catch(ECARException ecarex) {
317 			Logger.getLogger(this.getClass()).error(ecarex);
318 			ecarex.printStackTrace();
319 		}
320 
321 		if(itPeriodosAcao.hasNext()) {
322 			AcompReferenciaAref acompReferencia = (AcompReferenciaAref) itPeriodosAcao.next();
323 			if(!mapAcao.isEmpty() && mapAcao.containsKey(acompReferencia)) {
324 				AcompReferenciaItemAri ariAcao = (AcompReferenciaItemAri) mapAcao.get(acompReferencia);
325 				List relatorios = null;
326 				try{
327 					relatorios = acompReferenciaItemDao.getAcompRelatorioArelOrderByFuncaoAcomp(ariAcao, tpfaOrdenadosPorEstrutura);
328 				} catch(ECARException ecarex) {
329 					Logger.getLogger(this.getClass()).error(ecarex);
330 					ecarex.printStackTrace();
331 				}
332 				Iterator itRelatorios = relatorios.iterator();
333 				
334 				while(itRelatorios.hasNext()){												
335 					AcompRelatorioArel relatorio = (AcompRelatorioArel) itRelatorios.next();										
336 					ItemEstUsutpfuacIettutfa itemEstUsu = null;
337 					try{
338 						itemEstUsu = itemEstUsuDao.buscar(itemEstrutura.getCodIett(), relatorio.getTipoFuncAcompTpfa().getCodTpfa());
339 					} catch(ECARException ecarex) {
340 						Logger.getLogger(this.getClass()).error(ecarex);
341 						ecarex.printStackTrace();
342 					}
343 					 
344 					//Verifica se a permissão é de grupo ou usuário							 							
345 					if (itemEstUsu.getUsuarioUsu() != null) {
346 						usuarioLogadoEmiteParecer = itemEstUsu.getUsuarioUsu().getCodUsu().equals(usuario.getCodUsu());
347 					} else if (itemEstUsu.getSisAtributoSatb() != null) {
348 						if (itemEstUsu.getSisAtributoSatb().getUsuarioAtributoUsuas() != null) {
349 							Iterator itUsuarios = itemEstUsu.getSisAtributoSatb().getUsuarioAtributoUsuas().iterator();
350 							while (itUsuarios.hasNext()) {
351 								UsuarioAtributoUsua usuarioAtributoUsua = (UsuarioAtributoUsua) itUsuarios.next();
352 								if (usuarioAtributoUsua.getUsuarioUsu().getCodUsu().equals(usuario.getCodUsu())){
353 									usuarioLogadoEmiteParecer = true;
354 									break;
355 								}
356 							}
357 						}
358 					}
359 					if(usuarioLogadoEmiteParecer==true)
360 						break;											
361 				}//fecha while relatórios																
362 			}
363 		}
364 														
365 		retorno.append("<td align=\"center\">");
366 		
367 		AcompReferenciaAref arefSelecionada = null;   
368 		AcompReferenciaItemAri acompAri = null;
369 
370 		try {
371 			arefSelecionada = (AcompReferenciaAref) acompReferenciaDao.buscar(AcompReferenciaAref.class, Long.valueOf(getCodAref()));   
372 			acompAri = acompReferenciaItemDao.getAcompReferenciaItemByItemEstruturaIett(arefSelecionada,pItemEstrutura);
373 		} catch(ECARException ecarex) {
374 			Logger.getLogger(this.getClass()).error(ecarex);
375 			ecarex.printStackTrace();
376 		}
377 		
378 		if((usuarioLogadoEmiteParecer || permissaoLapis) && acompAri != null) {
379 			retorno.append(linkAbrirIettComeco+"<img src=\""+getPathEcar()+"/images/icon_alterar.png\" border=\"0\" alt=\"\"></a>");
380 		}
381 		retorno.append("</td>");
382     	return retorno;
383     }
384     
385     /*
386      * Método que imprime a sexta coluna da linha do item: pareceres 
387      */
388     private StringBuffer imprimeColunaPareceres(ItemEstruturaIett pItemEstrutura) {
389     	StringBuffer retorno = new StringBuffer();
390     	ItemEstruturaIett item = pItemEstrutura;
391     	Iterator<AcompReferenciaAref> itPeriodos = getPeriodosConsiderados().iterator();
392     	
393     	AcompReferenciaItemDao acompReferenciaItemDao = new AcompReferenciaItemDao(getRequest());
394     	CorDao corDao = new CorDao(getRequest());
395     	
396     	TipoFuncAcompDao tipoFuncAcompDao = new TipoFuncAcompDao(getRequest());
397     	try {
398 	    	//List tpfaOrdenadosPorEstrutura = tipoFuncAcompDao.getFuncaoAcompOrderByEstruturas();
399 			
400 	    	Map  map = acompReferenciaItemDao.criarMapPeriodoAri(getPeriodosConsiderados(), item);
401 			
402 			while(itPeriodos.hasNext()) { 
403 				AcompReferenciaAref acompReferencia = (AcompReferenciaAref) itPeriodos.next();
404 				if(map.isEmpty()) {
405 					retorno.append("<td align=\"center\">&nbsp;</td>");
406 				} else if(!map.containsKey(acompReferencia)) {
407 					retorno.append("<td align=\"center\" valign=\"middle\">");
408 					retorno.append("<p title=\"Não foi solicitado acompanhamento\">N/A</p>");
409 					retorno.append("</td>");
410 				} else {
411 					AcompReferenciaItemAri ari = (AcompReferenciaItemAri) map.get(acompReferencia);										
412 					retorno.append("<td align=\"center\" nowrap>");
413 					if((Dominios.NAO).equals(getExigeLiberarAcompanhamento()) || ari.getStatusRelatorioSrl().equals(getStatusLiberado())) {
414 						if(!"true".equals(status)){
415 							retorno.append("<a name=\"ancora"+ari.getItemEstruturaIett().getCodIett()+"\" href=\"#\" onclick=\"javascript:aoClicarConsultar(form, "+ari.getCodAri()+", "+ ari.getItemEstruturaIett().getCodIett()+ ")\">");							
416 							itensSessaoVisualizar.add(ari.getCodAri().toString());
417 							request.setAttribute("itensSessaoVisualizar",itensSessaoVisualizar );							
418 							if(usuarioLogadoEmiteParecer || permissaoAdministradorAcompanhamento) {
419 								itensSessao.add(ari.getCodAri().toString());
420 								request.setAttribute("itensSessao",itensSessao );
421 							}
422 						}
423 						List<AcompRelatorioArel> relatorios = acompReferenciaItemDao.getAcompRelatorioArelOrderByFuncaoAcomp(ari, tpfaOrdenadosPorEstrutura);
424 						Iterator<AcompRelatorioArel> itRelatorios = relatorios.iterator();
425 	
426 						String imagePath = "";
427 						String aval = "";
428 						while(itRelatorios.hasNext()){												
429 							AcompRelatorioArel relatorio = (AcompRelatorioArel) itRelatorios.next();																																													
430 							boolean imageError = false;
431 							if( (Dominios.SIM).equals(relatorio.getIndLiberadoArel()) ) {
432 								Cor cor = ( relatorio.getCor()!=null ? relatorio.getCor() : null );
433 								TipoFuncAcompTpfa tpfa = ( relatorio.getTipoFuncAcompTpfa() != null ? relatorio.getTipoFuncAcompTpfa() : null );
434 																						
435 								imagePath = corDao.getImagemPersonalizada(cor, tpfa, "L");
436 								
437 								if( imagePath != null ) {
438 								    aval += "<img border=\"0\" src=\"" + request.getContextPath() + "/DownloadFile?tipo=open&RemoteFile=";
439 								    aval += imagePath + "\" style=\"width: 23px; height: 23px;\" title=\"" + relatorio.getTipoFuncAcompTpfa().getLabelTpfa() + "\">";
440 								} else {
441 									if( relatorio.getCor() != null && relatorio.getCor().getCodCor() != null ) { 
442 										aval += "<img border=\"0\" src=\"" + getPathEcar() + "/images/relAcomp/";
443 										aval += corDao.getImagemRelatorio(relatorio.getCor(), relatorio.getTipoFuncAcompTpfa()) + "\" title=\"";
444 										aval += relatorio.getTipoFuncAcompTpfa().getLabelTpfa() + "\" >";
445 									} else {
446 										imageError = true;
447 									}
448 								}
449 							} else {
450 								imageError = true;
451 							}
452 																					
453 							// Verifica se o parecer é obrigatorio ou opcional
454 							List<TipoAcompFuncAcompTafc> listTipoAcompFuncAcomp = new ArrayList<TipoAcompFuncAcompTafc>(acompReferencia.getTipoAcompanhamentoTa().getTipoAcompFuncAcompTafcs());
455 							boolean ehObrigatorio = true;
456 							if(listTipoAcompFuncAcomp != null) {
457 								Iterator<TipoAcompFuncAcompTafc> tipoFuncAcompIt = listTipoAcompFuncAcomp.iterator();
458 								while(tipoFuncAcompIt.hasNext()) {
459 									TipoAcompFuncAcompTafc tipoAcompFuncAcompTafc = (TipoAcompFuncAcompTafc)tipoFuncAcompIt.next();
460 									if(	relatorio.getTipoFuncAcompTpfa().getCodTpfa().equals(tipoAcompFuncAcompTafc.getTipoFuncAcompTpfa().getCodTpfa())
461 										&& tipoAcompFuncAcompTafc.getIndRegistroPosicaoTafc() != null 
462 										&& tipoAcompFuncAcompTafc.getIndRegistroPosicaoTafc().equals(Dominios.OPCIONAL)) {
463 										ehObrigatorio = false;
464 									}
465 								}
466 							}
467 							
468 							if( imageError && ehObrigatorio) {
469 								aval += "<img border=\"0\" src=\"" + getPathEcar() + "/images/relAcomp/";
470 								aval += corDao.getImagemRelatorio(null, relatorio.getTipoFuncAcompTpfa()) + "\" title=\"";
471 								aval += relatorio.getTipoFuncAcompTpfa().getLabelTpfa() + "\" >";
472 							}
473 						}
474 						
475 						retorno.append(aval);
476 																			
477 						if(!"true".equals(status)){
478 							retorno.append("</a>");
479 						}
480 					} else {
481 						if((Dominios.NAO).equals(getExigeLiberarAcompanhamento()) || (ari.getAcompRelatorioArels() != null && ari.getAcompRelatorioArels().size() > 0)) {
482 							if(!"true".equals(status)){
483 								retorno.append("<a name=\"ancora<%=ari.getItemEstruturaIett().getCodIett()%>\" href=\"#\" onclick=\"javascript:aoClicarConsultar(form, "+ari.getCodAri()+", "+ ari.getItemEstruturaIett().getCodIett()+ ")\">");								
484 								itensSessaoVisualizar.add(ari.getCodAri().toString());
485 								request.setAttribute("itensSessaoVisualizar",itensSessaoVisualizar );							
486 								if(usuarioLogadoEmiteParecer || permissaoAdministradorAcompanhamento) {
487 									itensSessao.add(ari.getCodAri().toString());
488 									request.setAttribute("itensSessao",itensSessao );
489 								}
490 							}  
491 							retorno.append("<p title=\"Não liberado\">N/L</p>"); 
492 							if(!"true".equals(status)){ 
493 								retorno.append("</a>");
494 							}
495 						} else {
496 							retorno.append("&nbsp;");
497 						}
498 					}
499 					retorno.append("</td>");
500 				}
501 			}
502     	} catch(ECARException ecarEx) {
503     		Logger.getLogger(this.getClass()).error(ecarEx);
504 			ecarEx.printStackTrace();
505     	}
506     	return retorno;
507     }
508     
509     /**
510      * Encerra Tag.<br>
511      * 
512 	 * @return int
513 	 * @throws JspException
514      */
515     public int doEndTag() throws JspException {
516         /* processa o restante da página jsp */
517         return Tag.EVAL_PAGE;
518     }
519 	
520 	public String getCodAref() {
521 		return codAref;
522 	}
523 
524 	public void setCodAref(String codAref) {
525 		this.codAref = codAref;
526 	}
527 
528 	public ItemEstruturaIett getItemEstrutura() {
529 		return itemEstrutura;
530 	}
531 	public void setItemEstrutura(ItemEstruturaIett itemEstrutura) {
532 		this.itemEstrutura = itemEstrutura;
533 	}
534 	
535 	public UsuarioUsu getUsuario() {
536 		return usuario;
537 	}
538 	public void setUsuario(UsuarioUsu usuario) {
539 		this.usuario = usuario;
540 	}
541 	
542 	public StatusRelatorioSrl getStatusLiberado() {
543 		return statusLiberado;
544 	}
545 
546 	public void setStatusLiberado(StatusRelatorioSrl statusLiberado) {
547 		this.statusLiberado = statusLiberado;
548 	}
549 
550 	public List<ItemEstruturaIett> getColecaoItens() {
551 		return colecaoItens;
552 	}
553 
554 	public void setColecaoItens(List<ItemEstruturaIett> colecaoItens) {
555 		this.colecaoItens = colecaoItens;
556 	}
557 
558 	public Collection<AcompReferenciaAref> getPeriodosConsiderados() {
559 		return periodosConsiderados;
560 	}
561 
562 	public void setPeriodosConsiderados(Collection<AcompReferenciaAref> periodosConsiderados) {
563 		this.periodosConsiderados = periodosConsiderados;
564 	}
565 
566 	public String getStatus() {
567 		return status;
568 	}
569 	public void setStatus(String status) {
570 		this.status = status;
571 	}
572 	
573 	public String getIdPagina() {
574 		return idPagina;
575 	}
576 
577 	public void setIdPagina(String idPagina) {
578 		this.idPagina = idPagina;
579 	}
580 
581 	public String getPathEcar() {
582 		return pathEcar;
583 	}
584 	public void setPathEcar(String pathEcar) {
585 		this.pathEcar = pathEcar;
586 	}
587 	
588 	public String getCaminhoUrl() {
589 		return caminhoUrl;
590 	}
591 	public void setCaminhoUrl(String caminhoUrl) {
592 		this.caminhoUrl = caminhoUrl;
593 	}
594 	
595 	public String getCodTipoAcompanhamento() {
596 		return codTipoAcompanhamento;
597 	}
598 	public void setCodTipoAcompanhamento(String codTipoAcompanhamento) {
599 		this.codTipoAcompanhamento = codTipoAcompanhamento;
600 	}
601 	
602 	public String getExigeLiberarAcompanhamento() {
603 		return exigeLiberarAcompanhamento;
604 	}
605 
606 	public void setExigeLiberarAcompanhamento(String exigeLiberarAcompanhamento) {
607 		this.exigeLiberarAcompanhamento = exigeLiberarAcompanhamento;
608 	}
609 
610 	public HttpServletRequest getRequest() {
611 		return request;
612 	}
613 	public void setRequest(HttpServletRequest request) {
614 		this.request = request;
615 	}
616 
617 	public List getTpfaOrdenadosPorEstrutura() {
618 		return tpfaOrdenadosPorEstrutura;
619 	}
620 
621 	public void setTpfaOrdenadosPorEstrutura(List tpfaOrdenadosPorEstrutura) {
622 		this.tpfaOrdenadosPorEstrutura = tpfaOrdenadosPorEstrutura;
623 	}
624 
625 	public SegurancaECAR getSeguranca() {
626 		return seguranca;
627 	}
628 
629 	public void setSeguranca(SegurancaECAR seguranca) {
630 		this.seguranca = seguranca;
631 	}
632 
633 	public boolean isPermissaoAdministradorAcompanhamento() {
634 		return permissaoAdministradorAcompanhamento;
635 	}
636 
637 	public void setPermissaoAdministradorAcompanhamento(
638 			boolean permissaoAdministradorAcompanhamento) {
639 		this.permissaoAdministradorAcompanhamento = permissaoAdministradorAcompanhamento;
640 	}
641 	
642 }