View Javadoc

1   
2   package ecar.email;
3   
4   import java.lang.reflect.InvocationTargetException;
5   import java.util.ArrayList;
6   import java.util.Calendar;
7   import java.util.Date;
8   import java.util.GregorianCalendar;
9   import java.util.HashSet;
10  import java.util.Iterator;
11  import java.util.List;
12  import java.util.Set;
13  import java.util.Timer;
14  import java.util.TimerTask;
15  
16  import javax.mail.MessagingException;
17  import javax.mail.internet.AddressException;
18  
19  import comum.database.HibernateUtil;
20  import comum.util.Data;
21  import comum.util.Pagina;
22  import comum.util.Util;
23  
24  import ecar.dao.AcompRealFisicoDao;
25  import ecar.dao.AcompReferenciaItemDao;
26  import ecar.dao.AcompRelatorioDao;
27  import ecar.dao.ConfigMailCfgmDAO;
28  import ecar.dao.ConfiguracaoDao;
29  import ecar.dao.EmpresaDao;
30  import ecar.dao.ItemEstruturaDao;
31  import ecar.dao.PontoCriticoDao;
32  import ecar.dao.ServicoDao;
33  import ecar.dao.TfuncacompConfigmailTfacfgmDAO;
34  import ecar.dao.UsuarioDao;
35  import ecar.exception.ECARException;
36  import ecar.pojo.AcompRealFisicoArf;
37  import ecar.pojo.AcompRefItemLimitesArli;
38  import ecar.pojo.AcompReferenciaItemAri;
39  import ecar.pojo.AcompRelatorioArel;
40  import ecar.pojo.ConfigMailCfgm;
41  import ecar.pojo.ConfiguracaoCfg;
42  import ecar.pojo.EmpresaEmp;
43  import ecar.pojo.ItemEstUsutpfuacIettutfa;
44  import ecar.pojo.ItemEstrtIndResulIettr;
45  import ecar.pojo.ItemEstruturaIett;
46  import ecar.pojo.PontoCriticoPtc;
47  import ecar.pojo.PontocriticoCorPtccor;
48  import ecar.pojo.ServicoSer;
49  import ecar.pojo.TfuncacompConfigmailTfacfgm;
50  import ecar.pojo.TfuncacompConfigmailTfacfgmPK;
51  import ecar.pojo.TipoFuncAcompTpfa;
52  import ecar.pojo.UsuarioUsu;
53  import ecar.util.Dominios;
54  
55  /**
56   * @author N/C
57   * @since N/C
58   * @version N/C
59   */
60  public class AgendadorEmail extends TimerTask {
61  	
62  	private static AgendadorEmail instance = null;
63  	private final static long INTERVALO = 1000*60*60*24;//a cada 24 horas ...
64  	
65  	private Timer timer = null;	
66  	private Date dataAtual;
67  	private String hora = "03:00";
68  	
69  	private String nomeSistema = "";
70  	private String contextPath = "";
71  	private String cabecalho = "";
72  	//private String emailContatoEmpresa = "";
73  	private String emailErroEmpresa = "";
74  	
75  	public final static String LABEL_WHO_CHANGE_ALTERACAO = "Alteração efetuada por:";
76  	public final static String LABEL_WHO_CHANGE_LIBERACAO = "Liberação de acompanhamento efetuada por:";
77  	public final static String LABEL_WHO_CHANGE_RECUPERACAO = "Recuperação de acompanhamento efetuada por:";
78  	
79  	public AgendadorEmail()	{}
80  	
81  
82  	/**
83  	 * Singleton!
84  	 * 
85  	 * @author N/C
86  	 * @since N/C
87  	 * @version N/C
88  	 * @return AgendadorEmail
89  	 */
90  	// Singleton!
91  	public static AgendadorEmail getInstance() {
92  		if(instance == null) {
93  		   instance = new AgendadorEmail();
94  		}
95  		return instance;		
96  	}
97  	
98  	/**
99  	 * Atualiza cabecalho de email.<br>
100 	 * 
101 	 * @author N/C
102 	 * @since N/C
103 	 * @version N/C
104 	 * @throws ECARException
105 	 */
106 	private void atualizaCabecalhos() throws ECARException {
107 		
108 		ConfiguracaoCfg configCfg = new ConfiguracaoDao(null).getConfiguracao();
109 		
110 		// Configuracoes gerais dos e-mails (cabecalho, figuras, nome do sistema...)
111 		this.nomeSistema = "Sistema " + configCfg.getTituloSistema();
112 		this.contextPath = configCfg.getContextPath();
113 		//this.emailContatoEmpresa = "";
114 		
115 		String logotipo = "";
116 		List listEmpresa = new ArrayList();
117 		listEmpresa = new EmpresaDao(null).listar(EmpresaEmp.class, null);
118 		if(listEmpresa != null && !listEmpresa.isEmpty()){
119 			EmpresaEmp emp = (EmpresaEmp) listEmpresa.iterator().next();
120 			logotipo = emp.getLogotipoEmailEmp();
121 			//this.emailContatoEmpresa = emp.getEmailContatoEmp(); 
122 			this.emailErroEmpresa = emp.getEmailErrosEmp(); 
123 		}
124 				
125 		this.cabecalho = contextPath + "/DownloadFile?tipo=open&downloadEmail=S&RemoteFile=" +  configCfg.getRaizUpload() + logotipo;
126 	}
127 
128 	/**
129 	 * Método chamado pelo Agendador Listener para que tudo comece.<br>
130 	 * 
131 	 * @author N/C
132 	 * @since N/C
133 	 * @version N/C
134 	 */
135 	public void disparaTimer(){
136 		try {
137 			ConfiguracaoCfg configCfg = new ConfiguracaoDao(null).getConfiguracao();
138 			
139 			this.atualizaCabecalhos();
140 		
141     		if(configCfg.getEmailServer() != null && !"".equals(configCfg.getEmailServer().trim())) {
142 				if (configCfg.getHoraEnvioMailCfg() == null)
143 					this.hora = "03:00";
144 				else
145 					this.hora = configCfg.getHoraEnvioMailCfg().trim();
146 
147 				this.dataAtual = Data.getDataAtual();
148 				String data = Data.parseDateHour(this.dataAtual).substring(0,10) + " " + this.hora + ":00:000";
149 				Date dataExecucao;
150 				if (Data.isPassado(Data.parseDateHour(data)))
151 					dataExecucao = Data.addDias(1, this.dataAtual);
152 				else
153 					dataExecucao = this.dataAtual;
154 					
155 				data = Data.parseDateHour(dataExecucao);
156 				data = data.substring(0,10) + " " + this.hora + ":00:000";
157 				
158 				dataExecucao = Data.parseDateHour(data);
159 				
160 				/* ----Igor!----
161 				 * Deixa o timer como uma espécie de "singleton". Isto permite que usemos
162 				 * um só timer, que pode ter sua hora alterada na próxima iteração do run()
163 				 */
164 				if (timer == null)
165 					timer = new Timer();
166 		
167 				/* Chama o agendador, iniciando em dataAtual e repetindo a cada INTERVALO de tempo
168 				   Em nosso caso, a data de inicio seria no dia seguinte, no horario cadastrado
169 				   nas configuracoes, repetindo a cada 24 hs...
170 				 */	
171 				timer.scheduleAtFixedRate(this, dataExecucao, AgendadorEmail.INTERVALO);
172 			} else {
173     			throw new ECARException("erro.servidor.email.invalido");
174 			}
175 		} catch (Exception e){
176 			org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
177 			this.enviarEmailExcecao("AgendadorEmail.disparaTimer()", e);
178 		} finally {
179 			try {
180 				// fechar a sessão
181 				HibernateUtil.closeSession();
182 			} catch (Exception e) {
183 				org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
184 				this.enviarEmailExcecao("AgendadorEmail.disparaTimer() - HibernateUtil.closeSession()", e);
185 			}
186 		}
187 		
188 	}
189 
190 	/**
191 	 * Implementação do Método run() da classe abstrata TimerTask.<br>
192 	 * 
193 	 * @author N/C
194 	 * @since N/C
195 	 * @version N/C
196 	 */
197 	public void run() {
198 		org.apache.log4j.Logger.getLogger(this.getClass()).info("Enviando e-mails em " + Data.getDataAtual() + " " + Data.getHoraAtual(true));
199 		
200 		
201 		try {
202 			ConfiguracaoDao confDao = new ConfiguracaoDao(null);
203 			ConfiguracaoCfg configuracao =  confDao.getConfiguracao();			
204 			ConfigMailCfgmDAO configMailCfgmDAO = new ConfigMailCfgmDAO();
205 			List listConfigMailCfgm = configMailCfgmDAO.getMailsAtivos();
206 			
207 			this.atualizaCabecalhos();
208 			
209 			/*			
210  			// Acertar a hora de envio de acordo com as configuracoes gerais
211 			// se este foi alterado após a última execução.
212 			if (!this.hora.equals(configuracao.getHoraEnvioMailCfg()))
213 			{
214 				this.dataAtual = Data.getDataAtual();
215 				String data = Data.parseDateHour(this.dataAtual).substring(0,10) + " " + this.hora + ":00:000";
216 				Date dataExecucao;
217 				if (Data.isPassado(Data.parseDateHour(data)))
218 					dataExecucao = Data.addDias(1, this.dataAtual);
219 				else
220 					dataExecucao = this.dataAtual;
221 					
222 				data = Data.parseDateHour(dataExecucao);
223 				data = data.substring(0,10) + " " + this.hora + ":00:000";
224 				
225 				dataExecucao = Data.parseDateHour(data);
226 
227 				timer = null;
228 				timer = new Timer();
229 				timer.scheduleAtFixedRate(this, dataExecucao, AgendadorEmail.INTERVALO);
230 			}
231 			*/	
232 			
233 			Long diasAnt;
234 			Iterator it = listConfigMailCfgm.iterator();
235 		
236 			String dataLimStr = null;
237 						
238 			while( it.hasNext() ) {
239 				ConfigMailCfgm configMailCfgm = (ConfigMailCfgm) it.next();
240 				Date dataCorr = Data.addDias(0, configuracao.getUltimoEnvioEmailCfg());
241 				
242 				if ((configuracao.getDiasAntecedenciaMailCfg().intValue() <= 0) 
243 						|| ("".equals(configuracao.getDiasAntecedenciaMailCfg().toString()))
244 						|| (configuracao.getDiasAntecedenciaMailCfg() == null))
245 				{
246 					diasAnt = Long.valueOf("1");
247 				}
248 				else
249 				{
250 					diasAnt = configMailCfgm.getConfiguracaoCfg().getDiasAntecedenciaMailCfg();
251 				}
252 						
253 				Date data = Data.parseDateHour(Data.parseDateHour(Data.getDataAtual()).substring(0,10) + " 00:00:00:000");
254 				
255 				
256 				while (dataCorr.compareTo(data) < 0)
257 				{
258 					dataCorr = Data.addDias(1, dataCorr);
259 					Date dataLim = Data.addDias(diasAnt.intValue(), dataCorr);
260 					dataLimStr = Data.parseDate(dataLim);
261 				
262 					switch( configMailCfgm.getCodCfgm().intValue() ) {
263 						case 4: // vcto limite fisico					
264 							eMailVenctoLimiteFisico(dataLimStr, configMailCfgm);
265 							break;
266 						case 5: // vcto limite parecer										
267 							eMailVenctoParecer(dataLimStr, configMailCfgm);
268 							break;
269 						case 6: // vcto limite ponto critico			
270 							eMailVenctoPontoCritico(dataCorr, configMailCfgm, dataLimStr);
271 							break;
272 						//case 27: // status indicador resultado			
273 							//eMailStatusIndicadorResultado(dataCorr, configMailCfgm);
274 						//	break;	
275 							
276 					} // fim switch
277 					
278 					/* -- Trata dos tipo de 7 a 13 -- */
279 					if( configMailCfgm.getCodCfgm().intValue() > 6 && configMailCfgm.getCodCfgm().intValue() < 14 ) {
280 						eMailDataItem(dataLimStr, configMailCfgm);
281 					}
282 
283 				} // fim do while (dias)
284 			}
285 			configuracao.setUltimoEnvioEmailCfg(Data.getDataAtual());		
286 			confDao.alterar(configuracao);
287 			org.apache.log4j.Logger.getLogger(this.getClass()).info("E-mails enviados em " + Data.getDataAtual() + " " + Data.getHoraAtual(true));
288 		} catch(Exception e) {
289 			org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
290 			this.enviarEmailExcecao("AgendadorEmail.run()", e);
291 		} finally {	
292 			try {
293 				// fechar a sessão
294 				HibernateUtil.closeSession();
295 			} catch(Exception e) {
296 				org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
297 				this.enviarEmailExcecao("AgendadorEmail.run() - HibernateUtil.closeSession()", e);
298 			}
299 		}
300 	}	
301 	
302 	/**
303 	 * Monta E-mail.<br>
304 	 * 
305 	 * @author N/C
306 	 * @since N/C
307 	 * @version N/C
308 	 * @param String textoEmail
309 	 * @param String nomeResp
310 	 * @param Long item
311 	 * @param String dataLimite
312 	 * @param String tipoAcompanhamento
313 	 * @return StringBuffer
314 	 * @throws ECARException
315 	 */
316 	public StringBuffer montaEmail(String textoEmail, String nomeResp, Long item, String dataLimite, 
317 			String tipoAcompanhamento) throws ECARException {
318 		/* --
319 		 * Utilizado por: AgendadorEmail.java (envio automatico)
320 		 * -- */
321 		ItemEstruturaDao iettDao = new ItemEstruturaDao(null);
322 		ItemEstruturaIett iett = (ItemEstruturaIett) iettDao.buscar(ItemEstruturaIett.class, item);
323 		return this.makeMail(nomeResp, textoEmail, null, dataLimite, null, null, iett, null, tipoAcompanhamento);
324 	}
325 
326 	/**
327 	 * 
328 	 * Monta E-mail.<br>
329 	 * 
330 	 * @author N/C
331 	 * @since N/C
332 	 * @version N/C
333 	 * @param String textoEmail
334 	 * @param String nomeResp
335 	 * @param String quemAlterou
336 	 * @param Long item
337 	 * @param String descEvent
338 	 * @param String anterior
339 	 * @param String atual
340 	 * @param String labelQuemAlterou
341 	 * @param String tipoAcompanhamento
342 	 * @return StringBuffer
343 	 * @throws ECARException
344 	 */
345 	public StringBuffer montaEmail(String textoEmail, String nomeResp, String quemAlterou, Long item, 
346 			String descEvent, String anterior, String atual, String labelQuemAlterou, String tipoAcompanhamento) throws ECARException {
347 		/* --
348 		 * Utilizado por: ctrlDatasLimites.jsp
349 		 * -- */
350 		ItemEstruturaDao iettDao = new ItemEstruturaDao(null);
351 		ItemEstruturaIett iett = (ItemEstruturaIett) iettDao.buscar(ItemEstruturaIett.class, item);
352 		return this.makeMail(nomeResp, textoEmail, quemAlterou, anterior, atual, descEvent, iett, labelQuemAlterou, tipoAcompanhamento);
353 	}
354 	
355 	/**
356 	 * Monta o cabeçalho padrão do e-mail.<br>
357 	 * 
358 	 * @author N/C
359 	 * @since N/C
360 	 * @version N/C
361 	 * @param String nameTo - nome do responsável que receberá o e-mail
362 	 * @return String HTML
363 	 */
364 	private String makeHeaderMail(String nameTo) throws ECARException{
365 		String header = new String();
366 		header = "<html><head><title>E-Mail Automatico</title></head><body style=\"{font-family: verdana, arial; font-size: 10px; color: #000;}\">";
367 		header = header + "<img src=\""+ this.cabecalho + "\">";
368 		header = header + "<p>Caro Sr(a). " + nameTo + ",</p><br>";
369 		
370 		return header;
371 	}
372 	
373 	/**
374 	 * Monta o rodapé padrão do e-mail.<br>
375 	 * 
376 	 * @author N/C
377 	 * @since N/C
378 	 * @version N/C
379 	 * @param String eventDesc
380 	 * @return String - (HTML)
381 	 * @throws ECARException
382 	 */
383 	private String makeFooterMail(String eventDesc) throws ECARException{
384 		String footer = new String();
385 	
386 		footer = "<p><i>Esta mensagem foi gerada automaticamente pelo " + this.nomeSistema + ", <b>favor não responder</b>.";
387 		if( eventDesc != null ) 
388 			footer = footer + " (" + eventDesc + ")";
389 		footer = footer + "</i></p>";
390 		footer = footer + "</body></html>";
391 		
392 		return footer;
393 	}
394 	
395 	/**
396 	 * Monta o e-mail completo, conforme os dados que são passados.<br>
397 	 * 
398 	 * @author N/C
399 	 * @since N/C
400 	 * @version N/C
401 	 * @param String nameTo 			- Nome de quem receberá o e-mail
402 	 * @param String bodyText 			- Texto padrão (TextoSite)
403 	 * @param String whoChange 			- Nome de quem alterou o item 
404 	 * @param String original			- Data de referência
405 	 * @param String novo				- Nova data de referência (caso seja uma alteração de data)
406 	 * @param String eventDesc			- Descrição do evento
407 	 * @param ItemEstruturaIett iett	- Item que foi alterado
408 	 * @param String labelWhoChange		- Label a ser adicionado antes do nome de quem alterou
409 	 * @param String tipoAcompanhamento
410 	 * @return StringBuffer - (String HTML 	- para ser enviado por e-mail)
411 	 * @throws ECARException
412 	 */
413 	private StringBuffer makeMail(String nameTo, String bodyText, String whoChange, 
414 								  String original, String novo, String eventDesc, 
415 								  ItemEstruturaIett iett, String labelWhoChange, String tipoAcompanhamento) throws ECARException {
416 		this.atualizaCabecalhos();
417 		StringBuffer html = new StringBuffer();
418 		
419 		html.append(this.makeHeaderMail(nameTo));
420 		html.append("<p>").append(bodyText).append("</p>");
421 		html.append("<p>");
422 		
423 		if( original != null && novo != null )
424 			html.append("Anterior: ").append(original).append(" / Novo: ").append(novo).append("<br><br>");
425 		else if( original != null ) 
426 			html.append("Referência: ").append(original).append("<br><br>");
427 		if( tipoAcompanhamento != null && !"".equals(tipoAcompanhamento.trim())) 
428 			html.append("Tipo do acompanhamento: ").append(tipoAcompanhamento).append("<br><br>");
429 		if( labelWhoChange != null && whoChange != null ) 
430 			html.append(labelWhoChange).append(" ").append(whoChange).append("<br><br>");
431 		if( iett != null ) {
432 			ItemEstruturaDao itemEstruturaDAO = new ItemEstruturaDao(null);
433 			
434 			List listAscendentes = itemEstruturaDAO.getAscendentes(iett);
435 			listAscendentes.add(iett);
436 			Iterator it = listAscendentes.iterator();
437 			
438 			while( it.hasNext() ) {
439 				ItemEstruturaIett itemIett = (ItemEstruturaIett) it.next();
440 				
441 				/* Identação pelo nível do item */
442 				for(int i = 1; i < itemIett.getNivelIett().intValue(); i++){
443 					html.append("<img src=\"").append(this.contextPath).append("/images/pixel.gif\" width=\"22\" height=\"9\">");
444 				}
445 				
446 				html.append("<img src=\"").append(this.contextPath).append("/images/icon_seta_ident.gif\">");
447 				html.append(itemIett.getEstruturaEtt().getNomeEtt()).append(" - ").append(itemIett.getNomeIett());
448 				html.append("<br>");
449 			}
450 		}			
451 		html.append("</p>");
452 		html.append(this.makeFooterMail(eventDesc));
453 		
454 		return html;
455 	} 
456 	
457 	/**
458 	* Enviar um e-mail.<br>
459 	* 
460 	* @author Cristiano
461 	* @since 13/12/2006
462 	* @version N/C
463 	* @param String assunto				- Descrição do assunto para o e-mail
464 	* @param String remetente			- Remetente do e-mail
465 	* @param String texto				- Texto do conteúdo do e-mail
466 	* @param String destinatarioPara	- Destinatário(s) do e-mail (se tiver mais de um endereço separar entre vírgula)
467 	* @param String destinatarioCc		- Destinatário(s) que receberão cópia do e-mail (se tiver mais de um endereço separar entre vírgula)
468 	* @param String destinatarioBcc		- Destinatário(s) que receberão cópia oculta do e-mail (se tiver mais de um endereço separar entre vírgula)
469 	* @throws ECARException
470 	*/
471 	public void enviarEmail(String assunto, String remetente, String texto, String destinatarioPara, String destinatarioCc, String destinatarioBcc, UsuarioUsu usuario) throws ECARException{
472 		try {
473 			Util.enviarEmail(assunto, this.nomeSistema, remetente, texto, destinatarioPara, destinatarioCc, destinatarioBcc, usuario);
474 			
475     		org.apache.log4j.Logger.getLogger(this.getClass()).info(
476     				"E-mail enviado (" + 
477     				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
478     				" assunto: " + assunto + 
479     				" - remetente: " + remetente +
480     				" - destinatarioPara: " + destinatarioPara + 
481     				" - destinatarioCc: " + destinatarioCc +
482     				" - destinatarioBcc: " + destinatarioBcc
483     				);
484 		} catch (AddressException ae) {
485 			org.apache.log4j.Logger.getLogger(this.getClass()).error(ae);
486 			this.enviarEmailExcecao("AgendadorEmail.enviarEmail()", ae);
487 			throw new ECARException("erro.email.invalido", ae);
488 		} catch (MessagingException me) {
489 			org.apache.log4j.Logger.getLogger(this.getClass()).error(me);
490 			this.enviarEmailExcecao("AgendadorEmail.enviarEmail()", me);
491 			throw new ECARException("erro.envio.email", me);
492 		} catch (ECARException ec) {
493 			org.apache.log4j.Logger.getLogger(this.getClass()).error(ec);
494 			this.enviarEmailExcecao("AgendadorEmail.enviarEmail()", ec);
495 			throw new ECARException(ec.getMessageKey(), ec);
496 		} catch (Exception e) {
497 			org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
498 			this.enviarEmailExcecao("AgendadorEmail.enviarEmail()", e);
499 			throw new ECARException("erro.envio.email", e);
500 		}
501 	}
502 
503 	/**
504 	 * Envia e-mail avisando que o parecer esta vencendo.<br>
505 	 * 
506 	 * @author N/C
507 	 * @since N/C
508 	 * @version N/C
509 	 * @param String dataLimStr
510 	 * @param ConfigMailCfgm configMailCfgm
511 	 * @throws ECARException
512 	 * @throws Exception
513 	 */
514 	private void eMailVenctoParecer (String dataLimStr, ConfigMailCfgm configMailCfgm) throws ECARException, Exception {
515 		try {
516 			AcompReferenciaItemDao ariDAO = new AcompReferenciaItemDao(null);
517 			UsuarioDao usuDAO = new UsuarioDao();
518 			TfuncacompConfigmailTfacfgmDAO tfuncacompConfigmailTfacfgmDAO = new TfuncacompConfigmailTfacfgmDAO();
519 			AcompRelatorioDao acompRelatorioDao = new AcompRelatorioDao(null);
520 			
521 			List listItens     = null;
522 			String dataCompStr = null;
523 			Iterator itItem    = null;		
524 			
525 			/* --
526 			 * Por Rogério (26/02/2007)
527 			 * Otimização de query.
528 			 * listItens = ariDAO.listar(AcompRefItemLimitesArli.class, new String[]{"dataLimiteArli","ASC"});
529 			 * itItem = listItens.iterator();
530 			 * -- */
531 			
532 			listItens = ariDAO.listarAcompReferenciaItemLimitesPorVenctoParecer(dataLimStr);
533 			if( listItens != null ) itItem = listItens.iterator();
534 			
535 			/* -- OFinal da otimização -- */
536 			
537 			while( itItem.hasNext() ){
538 				AcompRefItemLimitesArli arli = (AcompRefItemLimitesArli) itItem.next();
539 				dataCompStr = Data.parseDate(arli.getDataLimiteArli());
540 
541 				if( dataLimStr.equals(dataCompStr) ) {
542 					AcompReferenciaItemAri ari = arli.getAcompReferenciaItemAri();
543 					
544 					List listAri = new ArrayList();
545 					if( ari.getItemEstruturaIett() != null && ari.getItemEstruturaIett().getItemEstUsutpfuacIettutfas() != null )
546 						listAri = new ArrayList(ari.getItemEstruturaIett().getItemEstUsutpfuacIettutfas());
547 					
548 					List usuariosEmailEnviado = new ArrayList();
549 										
550 					Iterator itList = listAri.iterator();
551 					while( itList.hasNext() ) {
552 						ItemEstUsutpfuacIettutfa itemEstUsutpfacIetutfa = (ItemEstUsutpfuacIettutfa) itList.next();
553 						TipoFuncAcompTpfa tipoFuncao = itemEstUsutpfacIetutfa.getTipoFuncAcompTpfa(); 
554 						TfuncacompConfigmailTfacfgmPK tfcfgmPK = new TfuncacompConfigmailTfacfgmPK();
555 						tfcfgmPK.setConfigMailCfgm(configMailCfgm);
556 						tfcfgmPK.setTipoFuncAcompTpfa(tipoFuncao);
557 						TfuncacompConfigmailTfacfgm tfcfm = (TfuncacompConfigmailTfacfgm) tfuncacompConfigmailTfacfgmDAO.buscar(TfuncacompConfigmailTfacfgm.class, tfcfgmPK);
558 	
559 						//Verificando se já existe posição liberada
560 						//Caso já exista (indLiberadoArel) , não precisa mandar e-mail
561 						AcompRelatorioArel acompRelatorio = acompRelatorioDao.getAcompRelatorio(tipoFuncao, ari); 
562 						if ( acompRelatorio != null && !"S".equals(acompRelatorio.getIndLiberadoArel()) ) {
563 							
564 							if ( itemEstUsutpfacIetutfa != null && itemEstUsutpfacIetutfa.getComp_id() != null && "S".equals(tfcfm.getEnviaMailTfacfgm()) ) {
565 								
566 	    						
567 								//UsuarioUsu usu = (UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getComp_id().getCodUsu());
568 								List usuarios = new ArrayList();
569 								if (itemEstUsutpfacIetutfa.getUsuarioUsu() != null) {
570 									usuarios.add((UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getUsuarioUsu().getCodUsu()));
571 								} else if (itemEstUsutpfacIetutfa.getSisAtributoSatb() != null){
572 									usuarios.addAll(usuDAO.getUsuariosBySisAtributoSatb(itemEstUsutpfacIetutfa.getSisAtributoSatb()));
573 								}
574 								
575 								Iterator itUsu = usuarios.iterator();
576 								
577 								while (itUsu.hasNext()){
578 								
579 									UsuarioUsu usu = (UsuarioUsu) itUsu.next();	
580 								
581 									if(!usuariosEmailEnviado.contains(usu)) {
582 										usuariosEmailEnviado.add(usu);
583 										
584 										Long codIett = Long.valueOf(0);
585 										String textoMail = "";
586 										String assunto   = "";
587 										String remetente = "";
588 									
589 										if( configMailCfgm.getTextosSiteMail() != null ) {
590 											textoMail = configMailCfgm.getTextosSiteMail().getTextoTxts();
591 											assunto   = configMailCfgm.getTextosSiteMail().getDescricaoUsoTxts();
592 											remetente = configMailCfgm.getTextosSiteMail().getEmailResponsavelTxts();
593 										}
594 									
595 										if( ari.getItemEstruturaIett() != null )
596 											codIett = ari.getItemEstruturaIett().getCodIett();
597 													
598 										try{
599 											String html = this.montaEmail(textoMail, usu.getNomeUsu(), codIett, dataLimStr, acompRelatorio.getAcompReferenciaItemAri().getAcompReferenciaAref().getTipoAcompanhamentoTa().getDescricaoTa()).toString();
600 											if ((usu.getEmail1Usu() != null) && (!"".equals(usu.getEmail1Usu()))) {
601 												Util.enviarEmail(assunto, this.nomeSistema, remetente, html, usu.getEmail1Usu(),"", "", usu);
602 																				
603 									    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
604 									    				"E-mail enviado (" + 
605 									    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
606 									    				" assunto: " + assunto + 
607 									    				" - remetente: " + remetente +
608 									    				" - destinatarioPara: " + usu.getEmail1Usu()
609 									    				);
610 											} else {
611 												String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
612 												Util.enviarEmail("[" + this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
613 									    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
614 									    				"E-mail enviado (" + 
615 									    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
616 									    				" assunto: " + assunto + 
617 									    				" - remetente: " + remetente +
618 									    				" - destinatarioPara: " + remetente
619 									    				);
620 											}					
621 										} catch (Exception e) {
622 											org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
623 											String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
624 											erro = erro + "<br>" + e.toString();
625 											Util.enviarEmail("[" + this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "",usu);
626 								    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
627 								    				"E-mail enviado (" + 
628 								    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
629 								    				" assunto: " + assunto + 
630 								    				" - remetente: " + remetente +
631 								    				" - destinatarioPara: " + remetente
632 								    				);
633 											this.enviarEmailExcecao("AgendadorEmail.eMailVenctoParecer() (1)", e);
634 										}
635 									}
636 								}
637 							}
638 							
639 							if ("S".equals(tfcfm.getEnviaSms())) {
640 								// envia sms
641 							}
642 						}
643 					}
644 					
645 				}
646 			}	
647 		} catch(Exception e) {
648 			this.enviarEmailExcecao("AgendadorEmail.eMailVenctoParecer() (2)", e);
649 			throw(e);
650 		}
651 	}
652 	
653 	/**
654 	 * Envia o e-mail para aviso do vencimento limite do parecer do realizado físico. <br>
655 	 * 
656 	 * @author n/c, rogerio
657 	 * @since 0.1, n/c
658 	 * @version 0.2, 23/02/2007
659 	 * @param String dataLimStr
660 	 * @param ConfigMailCfgm configMailCfgm
661 	 * @throws ECARException
662 	 * @throws Exception
663 	 */
664 	private void eMailVenctoLimiteFisico(String dataLimStr, ConfigMailCfgm configMailCfgm) throws ECARException, Exception {
665 		try {
666 			AcompReferenciaItemDao ariDAO = new AcompReferenciaItemDao(null);
667 			TfuncacompConfigmailTfacfgmDAO tfuncacompConfigmailTfacfgmDAO = new TfuncacompConfigmailTfacfgmDAO();
668 			AcompRealFisicoDao acompRealFisicoDao = new AcompRealFisicoDao(null);
669 			UsuarioDao usuDAO = new UsuarioDao();
670 			
671 			List listItens     = null;
672 			String dataCompStr = null;
673 			Iterator itItem    = null;				
674 	
675 			/* --
676 			 * Por Rogério (23/02/2007)
677 			 * Otimizado pela chamada específica abaixo.
678 			listItens = ariDAO.listar(AcompReferenciaItemAri.class, new String[]{"codAri","ASC"});
679 			itItem = listItens.iterator();
680 			-- */
681 			
682 			listItens = ariDAO.listarAcompReferenciaItemPorDataLimiteFisico(dataLimStr);
683 			if( listItens != null ) itItem = listItens.iterator();
684 			
685 			/* -- Fim da otimização -- */
686 			
687 			while( itItem.hasNext() ){
688 				AcompReferenciaItemAri ari = (AcompReferenciaItemAri) itItem.next();
689 	
690 				dataCompStr = Data.parseDate(ari.getDataLimiteAcompFisicoAri());
691 				if( dataLimStr.equals(dataCompStr) ) {
692 					List list = new ArrayList(ari.getItemEstruturaIett().getItemEstUsutpfuacIettutfas());
693 					
694 					List usuariosEmailEnviado = new ArrayList();
695 					Iterator itList = list.iterator();
696 					
697 					while( itList.hasNext() ) {
698 						ItemEstUsutpfuacIettutfa itemEstUsutpfacIetutfa = (ItemEstUsutpfuacIettutfa) itList.next();
699 						TfuncacompConfigmailTfacfgmPK tfcfgmPK = new TfuncacompConfigmailTfacfgmPK();
700 						tfcfgmPK.setConfigMailCfgm(configMailCfgm);
701 						tfcfgmPK.setTipoFuncAcompTpfa(itemEstUsutpfacIetutfa.getTipoFuncAcompTpfa());
702 						
703 						TfuncacompConfigmailTfacfgm tfcfm = (TfuncacompConfigmailTfacfgm) tfuncacompConfigmailTfacfgmDAO.buscar(TfuncacompConfigmailTfacfgm.class, tfcfgmPK);
704 	
705 						List acompRealFisicoList = acompRealFisicoDao.getIndResulByAcompRefItemBySituacao(ari, Dominios.TODOS, true);
706 						Iterator itArf = acompRealFisicoList.iterator();
707 						boolean faltaArf = false;
708 						while (itArf.hasNext())
709 						{
710 							AcompRealFisicoArf arf = (AcompRealFisicoArf) itArf.next();
711 							if (arf.getQtdRealizadaArf() == null)
712 								faltaArf = true;
713 						}
714 						
715 						List novosIndicadores = ariDAO.getNovosIndicadores(ari);
716 						Iterator itIndicadores = novosIndicadores.iterator();
717 						if(itIndicadores.hasNext()){
718 							faltaArf = true;
719 						}
720 						
721 						
722 						if (("S".equals(tfcfm.getEnviaMailTfacfgm())) && (faltaArf)) {
723 
724 							//UsuarioUsu usu = (UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getComp_id().getCodUsu());
725 														
726 							List usuarios = new ArrayList();
727 							if (itemEstUsutpfacIetutfa.getUsuarioUsu() != null) {
728 								usuarios.add((UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getUsuarioUsu().getCodUsu()));
729 							} else if (itemEstUsutpfacIetutfa.getSisAtributoSatb() != null){
730 								usuarios.addAll(usuDAO.getUsuariosBySisAtributoSatb(itemEstUsutpfacIetutfa.getSisAtributoSatb()));
731 							}
732 							
733 							Iterator itUsu = usuarios.iterator();
734 							
735 							while (itUsu.hasNext()){
736 							
737 								UsuarioUsu usu = (UsuarioUsu) itUsu.next();
738 							
739 						
740 								if(!usuariosEmailEnviado.contains(usu)) {
741 									usuariosEmailEnviado.add(usu);
742 	
743 									Long   codIett	 = Long.valueOf(0);
744 									String textoMail = "";
745 									String assunto   = "";
746 									String remetente = "";
747 								
748 									if( configMailCfgm.getTextosSiteMail() != null ) {
749 										textoMail = configMailCfgm.getTextosSiteMail().getTextoTxts();
750 										assunto   = configMailCfgm.getTextosSiteMail().getDescricaoUsoTxts();
751 										remetente = configMailCfgm.getTextosSiteMail().getEmailResponsavelTxts();
752 									}
753 								
754 									if( ari.getItemEstruturaIett() != null )
755 										codIett = ari.getItemEstruturaIett().getCodIett();
756 												
757 									try {
758 										String html = this.montaEmail(textoMail, usu.getNomeUsu(), codIett, dataLimStr, ari.getAcompReferenciaAref().getTipoAcompanhamentoTa().getDescricaoTa()).toString();
759 										if ((usu.getEmail1Usu() != null) && (!"".equals(usu.getEmail1Usu()))) {
760 											Util.enviarEmail(assunto, this.nomeSistema, remetente, html, usu.getEmail1Usu(),"", "", usu);
761 																		
762 								    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
763 								    				"E-mail enviado (" + 
764 								    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
765 								    				" assunto: " + assunto + 
766 								    				" - remetente: " + remetente +
767 								    				" - destinatarioPara: " + usu.getEmail1Usu()
768 								    				);
769 										} else {
770 											String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
771 											Util.enviarEmail("["+ this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
772 								    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
773 								    				"E-mail enviado (" + 
774 								    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
775 								    				" assunto: " + assunto + 
776 								    				" - remetente: " + remetente +
777 								    				" - destinatarioPara: " + remetente
778 								    				);
779 										}
780 									}catch (Exception e) {
781 										org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
782 										String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
783 										erro = erro + "<br>" + e.toString();
784 										Util.enviarEmail("["+ this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
785 							    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
786 							    				"E-mail enviado (" + 
787 							    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
788 							    				" assunto: " + assunto + 
789 							    				" - remetente: " + remetente +
790 							    				" - destinatarioPara: " + remetente
791 							    				);
792 										this.enviarEmailExcecao("AgendadorEmail.eMailVenctoLimiteFisico() (1)", e);
793 									}
794 								}
795 							}
796 						}
797 						
798 						if ("S".equals(tfcfm.getEnviaSms())) {
799 							// envia sms
800 						}
801 					}
802 				}
803 			}
804 		} catch(Exception e) {
805 			this.enviarEmailExcecao("AgendadorEmail.eMailVenctoLimiteFisico() (2)", e);
806 			throw(e);
807 		}
808 	}
809 		
810 //	/**
811 //	 * Envia o e-mail para aviso dos indicadores do projeto aos responsáveis
812 //	 * @param dataCorrente
813 //	 * @param configMailCfgm
814 //	 * @throws ECARException
815 //	 * @throws Exception
816 //	 */
817 //	private void eMailStatusIndicadorResultado (Date dataCorrente, ConfigMailCfgm configMailCfgm) throws ECARException, Exception {
818 //		try {
819 //			ItemEstrtIndResulDao iettrDao = new ItemEstrtIndResulDao(null);
820 //			ItemEstrtIndResulCorIettrcorDAO iettrcorDao = new ItemEstrtIndResulCorIettrcorDAO(null);
821 //			
822 //			TfuncacompConfigmailTfacfgmDAO tfuncacompConfigmailTfacfgmDAO = new TfuncacompConfigmailTfacfgmDAO();
823 //			
824 //			UsuarioDao usuDAO = new UsuarioDao();
825 //			
826 //			double valorIndicadorResultado = 500;
827 //			
828 //			List listItemEstrtIndResul = null;
829 //			//String dataCompStr = null;
830 //			Iterator itItemEstrtIndResul = null;
831 //			String corRelogio = null;
832 //			Set datasLimite = null;
833 //				
834 //			ItemEstrtIndResulIettr itemEstrtIndResulIettrFiltro = new ItemEstrtIndResulIettr();
835 //			itemEstrtIndResulIettrFiltro.setIndAtivoIettr("S");
836 //			itemEstrtIndResulIettrFiltro.setIndSinalizacaoIettr("S");
837 //			
838 //			
839 //			
840 //			listItemEstrtIndResul = iettrDao.pesquisar(itemEstrtIndResulIettrFiltro, null);
841 //			
842 //			if( listItemEstrtIndResul != null ){ 
843 //				itItemEstrtIndResul = listItemEstrtIndResul.iterator();
844 //									
845 //				while(itItemEstrtIndResul.hasNext() ){
846 //					ItemEstrtIndResulIettr iettr = (ItemEstrtIndResulIettr) itItemEstrtIndResul.next();
847 //					
848 //					List iettrCors = iettrcorDao.listarIettrcorAtivosPorIettrOrderByValorPrimEmailIettrcor(iettr);
849 //					 
850 //					if (iettrCors != null){
851 //						Iterator itIettrCors = iettrCors.iterator();
852 //						boolean ehPrimeiro = true;
853 //						
854 //						while (itIettrCors.hasNext()){
855 //							ItemEstrtIndResulCorIettrcor iettrcor = (ItemEstrtIndResulCorIettrcor) itIettrCors.next();
856 //							
857 //							if (valorIndicadorResultado <= iettrcor.getValorPrimEmailIettrcor().doubleValue() && ehPrimeiro){
858 //								
859 //								//*******************************************************************
860 //								//*************ROTINA DE ENVIO DE EMAIL******************************
861 //								//*******************************************************************
862 //								
863 //								ItemEstruturaIett iett = (ItemEstruturaIett) iettr.getItemEstruturaIett() ;
864 //								ehPrimeiro = false;
865 //								
866 //								if( (iett != null) ) {						
867 //														
868 //									List usuariosEmailEnviado = new ArrayList();
869 //					
870 //									List listIett = new ArrayList(iett.getItemEstUsutpfuacIettutfas());
871 //									
872 //									Iterator itList = listIett.iterator();
873 //									
874 //									while( itList.hasNext() ) {
875 //										ItemEstUsutpfuacIettutfa itemEstUsutpfacIetutfa = (ItemEstUsutpfuacIettutfa) itList.next();
876 //										
877 //										TfuncacompConfigmailTfacfgmPK tfcfgmPK = new TfuncacompConfigmailTfacfgmPK();
878 //										tfcfgmPK.setCodCfgm(configMailCfgm.getCodCfgm());
879 //										tfcfgmPK.setCodTpfa(itemEstUsutpfacIetutfa.getTipoFuncAcompTpfa().getCodTpfa());
880 //										
881 //										TfuncacompConfigmailTfacfgm tfcfm = (TfuncacompConfigmailTfacfgm) tfuncacompConfigmailTfacfgmDAO.buscar(TfuncacompConfigmailTfacfgm.class, tfcfgmPK);
882 //										
883 //										if ("S".equals(tfcfm.getEnviaMailTfacfgm())) {
884 //											
885 //											//UsuarioUsu usu = (UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getComp_id().getCodUsu());
886 //											
887 //											List usuarios = new ArrayList();
888 //											if (itemEstUsutpfacIetutfa.getUsuarioUsu() != null) {
889 //												usuarios.add((UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getUsuarioUsu().getCodUsu()));
890 //											} else if (itemEstUsutpfacIetutfa.getSisAtributoSatb() != null){
891 //												usuarios.addAll(usuDAO.getUsuariosBySisAtributoSatb(itemEstUsutpfacIetutfa.getSisAtributoSatb()));
892 //											}
893 //											
894 //											Iterator itUsu = usuarios.iterator();
895 //											
896 //											while (itUsu.hasNext()){
897 //											
898 //												UsuarioUsu usu = (UsuarioUsu) itUsu.next();
899 //											
900 //										
901 //												if(!usuariosEmailEnviado.contains(usu)) {
902 //													usuariosEmailEnviado.add(usu);
903 //					
904 //													Long   codIett = Long.valueOf(0);
905 //													String textoMail = "";
906 //													String assunto   = "";
907 //													String remetente = "";
908 //												
909 //													if( configMailCfgm.getTextosSiteMail() != null ) {
910 //														textoMail = configMailCfgm.getTextosSiteMail().getTextoTxts();
911 //														assunto   = configMailCfgm.getTextosSiteMail().getDescricaoUsoTxts();
912 //														remetente = configMailCfgm.getTextosSiteMail().getEmailResponsavelTxts();
913 //													}
914 //												
915 //													codIett = iett.getCodIett();
916 //																		
917 //													try {
918 //														String image = "";
919 //														if(iettrcor.getCor().getCaminhoImagemPontoCriticoCor()!=null){
920 //															image =" <img src=\"" + this.contextPath + "/DownloadFile?tipo=open&RemoteFile=" 
921 //																	+ iettrcor.getCor().getCaminhoImagemPontoCriticoCor() + "\">"; 
922 //														}
923 //														else {
924 //															image = "<img src=\"/images/pc"+iettrcor.getCor().getNomeCor()+"1.png\" title=\""+iettrcor.getCor().getSignificadoCor()+"\">";
925 //														}
926 //															
927 //														textoMail +=  "<br>" ;
928 //														textoMail +=  "Indicador: " + iettr.getNomeIettir() + "<br>";
929 //														textoMail +=  "Valor: " + valorIndicadorResultado + "<br>";
930 //														textoMail +=  "Status: " + iettrcor.getCor().getSignificadoCor() + image + "<br>";
931 //														
932 //														String html = this.montaEmail( textoMail, usu.getNomeUsu(), null, codIett,
933 //																"Alerta status indicadores.",
934 //																null, null, null, null).toString();
935 //														if ((usu.getEmail1Usu() != null) && (!"".equals(usu.getEmail1Usu())))
936 //														{
937 //															if ((assunto == null) || (assunto.length() <= 0)) {
938 //																assunto = "Alerta de status de Indicadores";
939 //															}
940 //																						
941 //															Util.enviarEmail(assunto, this.nomeSistema, remetente, html, usu.getEmail1Usu(),"", "", usu);
942 //												    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
943 //												    				"E-mail enviado (" + 
944 //												    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
945 //												    				" assunto: " + assunto + 
946 //												    				" - remetente: " + remetente +
947 //												    				" - destinatarioPara: " + usu.getEmail1Usu()
948 //												    				);
949 //														}	
950 //														else
951 //														{
952 //															String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
953 //															Util.enviarEmail("["+ this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
954 //												    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
955 //												    				"E-mail enviado (" + 
956 //												    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
957 //												    				" assunto: " + assunto + 
958 //												    				" - remetente: " + remetente +
959 //												    				" - destinatarioPara: " + remetente
960 //												    				);
961 //														}
962 //													}catch (Exception e) {
963 //														org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
964 //														String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
965 //														erro = erro + "<br>" + e.toString();
966 //														Util.enviarEmail("["+ this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
967 //											    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
968 //											    				"E-mail enviado (" + 
969 //											    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
970 //											    				" assunto: " + assunto + 
971 //											    				" - remetente: " + remetente +
972 //											    				" - destinatarioPara: " + remetente
973 //											    				);
974 //														this.enviarEmailExcecao("AgendadorEmail.eMailStatusIndicadorResultado() (1)", e);
975 //													}							
976 //												}
977 //											}
978 //										}
979 //										
980 //										if ("S".equals(tfcfm.getEnviaSms())) {
981 //											// envia sms
982 //										}
983 //									}
984 //									
985 //								}
986 //								
987 //								//*************FIM DA ROTINA DE ENVIO DE EMAIL******************************
988 //							}
989 //							
990 //						}
991 //					}
992 //				}
993 //			}
994 //		} catch(Exception e) {
995 //			this.enviarEmailExcecao("AgendadorEmail.eMailStatusIndicadorResultado() (2)", e);
996 //			throw(e);
997 //		}
998 //	}
999 					
1000 //	A gravação do valor preenchido neste campo de Realizado ocorrerá quando a 
1001 //	rotina (diária) de datas críticas que envia email for realizada.
1002 //	Para isto, deverá ser acrescentada a esta rotina a seguinte 
1003 //	verificação: a partir dos períodos de acompanhamento gerados, 
1004 //	verificar quais os que: 
1005 //		(*) têm a data limite para realizado físico igual a data de hoje, e 
1006 //		(**) quais os indicadores que estão cadastrados para o valor realizado ser automático. 
1007 //	Uma vez encontrados os indicadores que se encaixam nessa verificação, gravar o valor apurado pelo serviço.
1008 	
1009 	/**
1010 	 * Grava o valor realizado das metas/indicadores. <br>
1011 	 * 
1012 	 * @author 
1013 	 * @throws ECARException
1014 	 */
1015 	private void gravarValorRealizadoMetasIndicadores() throws ECARException, IllegalAccessException, NoSuchMethodException, InvocationTargetException{
1016 		AcompReferenciaItemAri ariFiltro = new AcompReferenciaItemAri();
1017 		ServicoDao servicoDao = new ServicoDao(null);
1018 		AcompRealFisicoDao acompRealFisicoDao = new AcompRealFisicoDao(null);
1019 		
1020 		Date dataAtual = Data.getDataAtual();
1021 		Calendar calendarDataAtual = Data.getCalendar(dataAtual);
1022 		Calendar calendarDataAtualSemHMS = new GregorianCalendar(calendarDataAtual.get(Calendar.YEAR), calendarDataAtual.get(Calendar.MONTH), calendarDataAtual.get(Calendar.DAY_OF_MONTH));
1023 		
1024 		Date dataOntem = Data.addDias(-1, calendarDataAtualSemHMS.getTime());	
1025 
1026 		ariFiltro.setDataLimiteAcompFisicoAri(dataOntem);
1027 		
1028 		List listAri = new AcompReferenciaItemDao(null).pesquisar(ariFiltro, null);
1029 
1030 		if (listAri != null){
1031 			Iterator itAri = listAri.iterator();
1032 			while (itAri.hasNext()){
1033 				AcompReferenciaItemAri ari = (AcompReferenciaItemAri) itAri.next();
1034 				if (ari.getItemEstruturaIett() != null && ari.getItemEstruturaIett().getIndAtivoIett().equals(Pagina.SIM)){
1035 					Set setIettrs = ari.getItemEstruturaIett().getItemEstrtIndResulIettrs();
1036 					if (setIettrs != null){
1037 						Iterator itIettrs = setIettrs.iterator();
1038 						while (itIettrs.hasNext()){
1039 							ItemEstrtIndResulIettr iettr = (ItemEstrtIndResulIettr) itIettrs.next();
1040 							if (iettr.getRealizadoServicoSer() != null 
1041 									&& iettr.getAcompRealFisicoArfs() != null
1042 									&& iettr.getIndRealPorLocal().equals(Pagina.NAO)
1043 									&& iettr.getIndTipoAtualizacaoRealizado() != null
1044 									&& iettr.getIndTipoAtualizacaoRealizado().equals(ServicoSer.TIPO_ATUALIZACAO_REALIZADO_AUTOMATICO)){
1045 								Set setAcompRealFisicoArf = iettr.getAcompRealFisicoArfs();
1046 								if (setAcompRealFisicoArf != null){
1047 									Iterator itAcompRealFisicoArf = setAcompRealFisicoArf.iterator();
1048 									while (itAcompRealFisicoArf.hasNext()){
1049 										AcompRealFisicoArf acompRealFisicoArf = (AcompRealFisicoArf) itAcompRealFisicoArf.next();
1050 										if (acompRealFisicoArf.getAnoArf().equals(Long.valueOf(ari.getAcompReferenciaAref().getAnoAref())) && acompRealFisicoArf.getMesArf().equals(Long.valueOf(ari.getAcompReferenciaAref().getMesAref()))){
1051 											String url = iettr.getRealizadoServicoSer().getUrlSer();
1052 											url = url.substring(0,1).toLowerCase() + url.substring(1);
1053 											Object[] parametros = new ServicoDao(null).getParametrosServico(iettr.getRealizadoServicoSer(), ari);
1054 											Double qtdRealizadoArf = (Double)(ServicoDao.class.getMethod(url, new Class[]{String.class, String.class}).invoke(servicoDao, parametros)); 					
1055 											acompRealFisicoArf.setQtdRealizadaArf(qtdRealizadoArf);
1056 											
1057 											acompRealFisicoDao.alterar(acompRealFisicoArf); 
1058 										}
1059 									}
1060 								}
1061 							}
1062 						}
1063 					}
1064 				}
1065 			}
1066 		}
1067 	}
1068 	
1069 	/**
1070 	 * Envia o e-mail para aviso dos pontos críticos do projeto aos responsáveis. <br>
1071 	 * 
1072 	 * @author ..., rogerio
1073 	 * @since N/C
1074 	 * @version 0.1, 26/02/2007
1075 	 * @param Date dataCorrente
1076 	 * @param ConfigMailCfgm configMailCfgm
1077 	 * @param String dataLimiteSeNula
1078 	 * @throws ECARException
1079 	 * @throws Exception
1080 	 */
1081 	private void eMailVenctoPontoCritico (Date dataCorrente, ConfigMailCfgm configMailCfgm, String dataLimiteSeNula) throws ECARException, Exception {
1082 		try {
1083 			gravarValorRealizadoMetasIndicadores();
1084 		} catch(Exception e) {
1085 			this.enviarEmailExcecao("AgendadorEmail.gravarValorRealizadoMetasIndicadores() ", e);
1086 			throw(e);
1087 		}
1088 		
1089 		try {
1090 			
1091 			PontoCriticoDao ptcDAO = new PontoCriticoDao(null);
1092 			TfuncacompConfigmailTfacfgmDAO tfuncacompConfigmailTfacfgmDAO = new TfuncacompConfigmailTfacfgmDAO();
1093 			UsuarioDao usuDAO = new UsuarioDao();
1094 			
1095 			List listItens = null;
1096 			String dataCompStr = null;
1097 			Iterator itPontos = null;
1098 			String corRelogio = null;
1099 			Set datasLimite = null;
1100 			
1101 			/* --
1102 			 * Por Rogério (26/02/2007)
1103 			 * Otimização da query, visando buscar apenas os pontos criticos ativos.
1104 			listItens = itemDAO.listar(PontoCriticoPtc.class, new String[]{"codPtc","ASC"});
1105 			itPontos = listItens.iterator();
1106 			-- */
1107 			
1108 			listItens = ptcDAO.listarPontoCriticoAtivoNExcluidoNSolucionado("S", "S");
1109 			
1110 			if( listItens != null ) itPontos = listItens.iterator();
1111 			
1112 			/* -- Final da otimização -- */
1113 			
1114 			while( itPontos.hasNext() ){
1115 				PontoCriticoPtc ptc = (PontoCriticoPtc) itPontos.next();
1116 	
1117 				// Comentado devido a otimização da query
1118 				//if (("S".equals(ptc.getIndAtivoPtc()))) {
1119 				
1120 				//Data Limite do ponto Critico a ser usada para comparacao com
1121 				//as outras obtidas através da frequencia e antecedencia
1122 				Date dataComparacao = ptc.getDataLimitePtc(); 
1123 				dataCompStr = Data.parseDate(dataComparacao);
1124 				
1125 				int diasAntecedencia;
1126 				int frequencia;
1127 				
1128 				// Se a data for igual à data limite, é enviado e-mail contendo
1129 				// o relogio quebrado (PretoFixo)
1130 				if (dataCompStr.equals(Data.parseDate(dataCorrente)))
1131 				{
1132 					corRelogio = "PretoFixo";
1133 					datasLimite = new HashSet();
1134 					datasLimite.add(dataCompStr);
1135 				}
1136 				
1137 				// Caso contrário, itera-se buscando qual o período de envio
1138 				// visando descobrir qual o período mais 'grave' que se encaixa
1139 				// nos dias de antecedência que restam
1140 				else
1141 				{
1142 					// Ordena-se o set de PtcCor de maneira a obter uma lista de dias de antecedencia
1143 					// crescente. Isto é, primeiro testa-se a menor antecedencia, buscando trabalhar com
1144 					// o mais urgente que se enquadra na data atual
1145 					List listPtcCor = ptcDAO.ordenaSet(ptc.getPontoCriticoCorPtccores(), "this.antecedenciaPrimEmailPtccor", "asc");
1146 					Iterator itPtcCor = listPtcCor.iterator();
1147 					boolean encontrouLimite = false;
1148 					while((itPtcCor.hasNext()) && (!encontrouLimite))
1149 					{	
1150 						PontocriticoCorPtccor ptcCor = (PontocriticoCorPtccor) itPtcCor.next();				
1151 						
1152 						// Caso a antecedencia seja nula, define-se como 0 (zero)
1153 						if (ptcCor.getAntecedenciaPrimEmailPtccor() == null)
1154 							diasAntecedencia = 0;
1155 						else
1156 							diasAntecedencia = ptcCor.getAntecedenciaPrimEmailPtccor().intValue();
1157 	
1158 						// Caso a frequencia seja nula, define-se como 0 (zero)
1159 						if (ptcCor.getFrequenciaEnvioEmailPtccor() == null)
1160 							frequencia = 0;
1161 						else
1162 							frequencia = ptcCor.getFrequenciaEnvioEmailPtccor().intValue();
1163 						
1164 						Date dataLimite = Data.addDias(diasAntecedencia, dataCorrente);
1165 						String dataLimStr = Data.parseDate(dataLimite);
1166 						
1167 						// Após definir qual é a data que será comparada, verifica-se
1168 						// se esta se enquadra no PtcCor atual. Caso positivo, define-se a data
1169 						// e as subsequentes (de acordo com a frequencia)
1170 						// O loop while é interrompido quando isto é feito.
1171 						if ((dataLimite.after(dataComparacao)) || (dataLimStr.equals(dataCompStr)))
1172 						{
1173 							datasLimite = new HashSet();
1174 							if (diasAntecedencia > 0)
1175 							{
1176 								if ("S".equals(ptcCor.getIndAtivoEnvioEmailPtccor()))
1177 								{
1178 									datasLimite.add(dataLimStr);
1179 									if (frequencia > 0)
1180 									{
1181 										while (diasAntecedencia > 0)
1182 										{
1183 											diasAntecedencia = diasAntecedencia - frequencia;
1184 											dataLimStr =  new String(Data.parseDate(Data.addDias(diasAntecedencia, dataCorrente)));
1185 											datasLimite.add(dataLimStr);
1186 										}
1187 									}
1188 									corRelogio = ptcCor.getCor().getNomeCor();
1189 								}
1190 								encontrouLimite = true;
1191 							}
1192 						}
1193 					}
1194 				}			
1195 						
1196 	
1197 				ItemEstruturaIett iett = (ItemEstruturaIett) ptc.getItemEstruturaIett();
1198 				
1199 				// Só manda email para os itens ativos
1200 				if( (datasLimite != null && datasLimite.contains(dataCompStr)) && (iett != null && iett.getIndAtivoIett().equals("S")) ) {						
1201 					List usuariosEmailEnviado = new ArrayList();
1202 	
1203 					List listIett = new ArrayList(iett.getItemEstUsutpfuacIettutfas());
1204 					
1205 					Iterator itList = listIett.iterator();
1206 					
1207 					while( itList.hasNext() ) {
1208 						ItemEstUsutpfuacIettutfa itemEstUsutpfacIetutfa = (ItemEstUsutpfuacIettutfa) itList.next();
1209 						
1210 						TfuncacompConfigmailTfacfgmPK tfcfgmPK = new TfuncacompConfigmailTfacfgmPK();
1211 						tfcfgmPK.setConfigMailCfgm(configMailCfgm);
1212 						tfcfgmPK.setTipoFuncAcompTpfa(itemEstUsutpfacIetutfa.getTipoFuncAcompTpfa());
1213 						
1214 						TfuncacompConfigmailTfacfgm tfcfm = (TfuncacompConfigmailTfacfgm) tfuncacompConfigmailTfacfgmDAO.buscar(TfuncacompConfigmailTfacfgm.class, tfcfgmPK);
1215 						
1216 						if ("S".equals(tfcfm.getEnviaMailTfacfgm())) {
1217 							
1218 							//UsuarioUsu usu = (UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getComp_id().getCodUsu());
1219 							
1220 							List usuarios = new ArrayList();
1221 							if (itemEstUsutpfacIetutfa.getUsuarioUsu() != null) {
1222 								usuarios.add((UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getUsuarioUsu().getCodUsu()));
1223 							} else if (itemEstUsutpfacIetutfa.getSisAtributoSatb() != null){
1224 								usuarios.addAll(usuDAO.getUsuariosBySisAtributoSatb(itemEstUsutpfacIetutfa.getSisAtributoSatb()));
1225 							}
1226 							
1227 							Iterator itUsu = usuarios.iterator();
1228 							
1229 							while (itUsu.hasNext()){
1230 							
1231 								UsuarioUsu usu = (UsuarioUsu) itUsu.next();
1232 							
1233 						
1234 								if(!usuariosEmailEnviado.contains(usu)) {
1235 									usuariosEmailEnviado.add(usu);
1236 	
1237 									Long   codIett = Long.valueOf(0);
1238 									String textoMail = "";
1239 									String assunto   = "";
1240 									String remetente = "";
1241 								
1242 									if( configMailCfgm.getTextosSiteMail() != null ) {
1243 										textoMail = configMailCfgm.getTextosSiteMail().getTextoTxts();
1244 										assunto   = configMailCfgm.getTextosSiteMail().getDescricaoUsoTxts();
1245 										remetente = configMailCfgm.getTextosSiteMail().getEmailResponsavelTxts();
1246 									}
1247 								
1248 									codIett = iett.getCodIett();
1249 														
1250 									try {
1251 										String html = this.montaEmail( textoMail, usu.getNomeUsu(), null, codIett,
1252 														"Alerta de criticidade de data: <img src=\""+this.contextPath+"/images/pc"+corRelogio+"1.png\">",
1253 														dataCompStr, null, null, null).toString();
1254 										if ((usu.getEmail1Usu() != null) && (!"".equals(usu.getEmail1Usu())))
1255 										{
1256 											if ((assunto == null) || (assunto.length() <= 0)) {
1257 												assunto = "Alerta de criticidade de data";
1258 											}
1259 																		
1260 											Util.enviarEmail(assunto, this.nomeSistema, remetente, html, usu.getEmail1Usu(),"", "", usu);
1261 								    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
1262 								    				"E-mail enviado (" + 
1263 								    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
1264 								    				" assunto: " + assunto + 
1265 								    				" - remetente: " + remetente +
1266 								    				" - destinatarioPara: " + usu.getEmail1Usu()
1267 								    				);
1268 										}	
1269 										else
1270 										{
1271 											String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
1272 											Util.enviarEmail("["+ this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
1273 								    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
1274 								    				"E-mail enviado (" + 
1275 								    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
1276 								    				" assunto: " + assunto + 
1277 								    				" - remetente: " + remetente +
1278 								    				" - destinatarioPara: " + remetente
1279 								    				);
1280 										}
1281 									}catch (Exception e) {
1282 										org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
1283 										String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
1284 										erro = erro + "<br>" + e.toString();
1285 										Util.enviarEmail("["+ this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
1286 							    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
1287 							    				"E-mail enviado (" + 
1288 							    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
1289 							    				" assunto: " + assunto + 
1290 							    				" - remetente: " + remetente +
1291 							    				" - destinatarioPara: " + remetente
1292 							    				);
1293 										this.enviarEmailExcecao("AgendadorEmail.eMailVenctoPontoCritico() (1)", e);
1294 									}							
1295 								}
1296 							}
1297 						}
1298 						
1299 						if ("S".equals(tfcfm.getEnviaSms())) {
1300 							// envia sms
1301 						}
1302 					}
1303 					
1304 				}
1305 			}
1306 		} catch(Exception e) {
1307 			this.enviarEmailExcecao("AgendadorEmail.eMailVenctoPontoCritico() (2)", e);
1308 			throw(e);
1309 		}
1310 		
1311 	} // fim eMailVenctoPontoCritico
1312 	
1313 	/**
1314 	 * Trata dos casos previstos entre os códigos de 7 até 13 da configuração de e-mail para envio. <br>
1315 	 * 
1316 	 * @author rogerio
1317 	 * @since  0.1, 09/02/2007
1318 	 * @version 0.1, 09/02/2007
1319 	 * @param String dataLimStr
1320 	 * @param ConfigMailCfgm configMailCfgm
1321 	 * @throws ECARException
1322 	 * @throws Exception
1323 	 */
1324 	private void eMailDataItem (String dataLimStr, ConfigMailCfgm configMailCfgm) throws ECARException, Exception	{
1325 		try {
1326 			Iterator itItem = null;		
1327 			
1328 			/* -- 
1329 			 * Rogério (23/02/2007)
1330 			 * Comentado devido a otimização de código na query. 
1331 			 * -- */
1332 			//itItem = new AcompReferenciaItemDao(null).listar(ItemEstruturaIett.class, new String[]{"codIett","ASC"}).iterator();
1333 			
1334 			List list = new ItemEstruturaDao(null).listarItemEstruturaPorDataLimite(dataLimStr);
1335 			if( list != null ) itItem = list.iterator();
1336 					
1337 			// Pra cada item, tratao código pra buscar a data 
1338 			while( itItem.hasNext() ){
1339 				ItemEstruturaIett iett = (ItemEstruturaIett) itItem.next();
1340 				String dataItemStr = null;
1341 				
1342 				switch(configMailCfgm.getCodCfgm().intValue()) {
1343 					case 7: // data termino item		
1344 						dataItemStr = Data.parseDate(iett.getDataTerminoIett());
1345 						break;
1346 					case 8: // data inicio item					
1347 						dataItemStr = Data.parseDate(iett.getDataInicioIett());				
1348 						break;
1349 					case 9: // data reserva 1					
1350 						dataItemStr = Data.parseDate(iett.getDataR1());
1351 						break;
1352 					case 10: // data reserva 2					
1353 						dataItemStr = Data.parseDate(iett.getDataR2());
1354 						break;
1355 					case 11: // data reserva 3					
1356 						dataItemStr = Data.parseDate(iett.getDataR3());
1357 						break;
1358 					case 12: // data reserva 4					
1359 						dataItemStr = Data.parseDate(iett.getDataR4());
1360 						break;
1361 					case 13: // data reserva 5
1362 						dataItemStr = Data.parseDate(iett.getDataR5());
1363 						break;
1364 				}
1365 				
1366 				eMailGenerico(dataLimStr, dataItemStr, configMailCfgm, iett);
1367 			}
1368 		} catch(Exception e) {
1369 			this.enviarEmailExcecao("AgendadorEmail.eMailDataItem()", e);
1370 			throw(e);
1371 		}
1372 
1373 	} // fim eMailDataItem
1374 	
1375 	/**
1376 	 * Obtem e trata os dados para envio de e-mails de acordo com os prazos limites. <br>
1377 	 * 
1378 	 * @author N/C
1379 	 * @since N/C
1380 	 * @version N/C
1381 	 * @param String dataLimStr
1382 	 * @param String dataCompStr
1383 	 * @param ConfigMailCfgm configMailCfgm
1384 	 * @param ItemEstruturaIett iett
1385 	 * @throws ECARException
1386 	 * @throws Exception
1387 	 */
1388 	private void eMailGenerico(String dataLimStr, String dataCompStr, ConfigMailCfgm configMailCfgm, ItemEstruturaIett iett) throws ECARException, Exception {
1389 		try {
1390 			TfuncacompConfigmailTfacfgmDAO tfuncacompConfigmailTfacfgmDAO = new TfuncacompConfigmailTfacfgmDAO();
1391 			UsuarioDao usuDAO = new UsuarioDao();
1392 			
1393 			if( dataLimStr.equals(dataCompStr) ) {						
1394 				List listIettutfas = new ArrayList(iett.getItemEstUsutpfuacIettutfas());
1395 				List usuariosEmailEnviado = new ArrayList();
1396 				Iterator itList = listIettutfas.iterator();
1397 				
1398 				while( itList.hasNext() ) {
1399 					ItemEstUsutpfuacIettutfa itemEstUsutpfacIetutfa = (ItemEstUsutpfuacIettutfa) itList.next();
1400 					
1401 					TfuncacompConfigmailTfacfgmPK tfcfgmPK = new TfuncacompConfigmailTfacfgmPK();
1402 					tfcfgmPK.setConfigMailCfgm(configMailCfgm);
1403 					tfcfgmPK.setTipoFuncAcompTpfa(itemEstUsutpfacIetutfa.getTipoFuncAcompTpfa());
1404 					
1405 					TfuncacompConfigmailTfacfgm tfcfm = (TfuncacompConfigmailTfacfgm) tfuncacompConfigmailTfacfgmDAO.
1406 								buscar(TfuncacompConfigmailTfacfgm.class, tfcfgmPK);
1407 					
1408 					if ("S".equals(tfcfm.getEnviaMailTfacfgm())) {
1409 						
1410 						//UsuarioUsu usu = (UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getComp_id().getCodUsu());
1411 						List usuarios = new ArrayList();
1412 						if (itemEstUsutpfacIetutfa.getUsuarioUsu() != null) {
1413 							usuarios.add((UsuarioUsu) usuDAO.buscar(UsuarioUsu.class, itemEstUsutpfacIetutfa.getUsuarioUsu().getCodUsu()));
1414 						} else if (itemEstUsutpfacIetutfa.getSisAtributoSatb() != null){
1415 							usuarios.addAll(usuDAO.getUsuariosBySisAtributoSatb(itemEstUsutpfacIetutfa.getSisAtributoSatb()));
1416 						}
1417 						
1418 						Iterator itUsu = usuarios.iterator();
1419 						
1420 						while (itUsu.hasNext()){
1421 						
1422 							UsuarioUsu usu = (UsuarioUsu) itUsu.next();
1423 					
1424 							if(!usuariosEmailEnviado.contains(usu)) {
1425 								usuariosEmailEnviado.add(usu);
1426 								Long codIett = Long.valueOf(0);
1427 								String textoMail = "";
1428 								String assunto   = "";
1429 								String remetente = "";
1430 							
1431 								if( configMailCfgm.getTextosSiteMail() != null ) {
1432 									textoMail = configMailCfgm.getTextosSiteMail().getTextoTxts();
1433 									assunto   = configMailCfgm.getTextosSiteMail().getDescricaoUsoTxts();
1434 									remetente = configMailCfgm.getTextosSiteMail().getEmailResponsavelTxts();
1435 								}
1436 							
1437 								codIett = iett.getCodIett();
1438 										
1439 								try {
1440 									String html = this.montaEmail(textoMail, usu.getNomeUsu(), codIett, dataLimStr, null).toString();
1441 									if ((usu.getEmail1Usu() != null) && (!"".equals(usu.getEmail1Usu()))) {
1442 										Util.enviarEmail(assunto, this.nomeSistema, remetente, html, usu.getEmail1Usu(),"", "", usu);
1443 							    		
1444 										org.apache.log4j.Logger.getLogger(this.getClass()).info(
1445 							    				"E-mail enviado (" + 
1446 							    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
1447 							    				" assunto: " + assunto + 
1448 							    				" - remetente: " + remetente +
1449 							    				" - destinatarioPara: " + usu.getEmail1Usu()
1450 							    				);
1451 									} else {
1452 										String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
1453 										Util.enviarEmail("["+ this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
1454 							    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
1455 							    				"E-mail enviado (" + 
1456 							    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
1457 							    				" assunto: " + assunto + 
1458 							    				" - remetente: " + remetente +
1459 							    				" - destinatarioPara: " + remetente
1460 							    				);
1461 									}			
1462 								}catch (Exception e) {
1463 									org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
1464 									String erro = "Erro na tentativa de enviar e-mail para o usuario " + usu.getNomeUsu() + "(Cod: " + usu.getCodUsu() + ")<br> Verifique o e-mail e o nome do mesmo no cadastro de usuarios";
1465 									erro = erro + "<br>" + e.toString();
1466 									Util.enviarEmail("["+ this.nomeSistema + "] Erro de Envio de Email", this.nomeSistema, remetente, erro, remetente, "", "", usu);
1467 						    		org.apache.log4j.Logger.getLogger(this.getClass()).info(
1468 						    				"E-mail enviado (" + 
1469 						    				Data.getDataAtual() + " " + Data.getHoraAtual(true) + "): " +
1470 						    				" assunto: " + assunto + 
1471 						    				" - remetente: " + remetente +
1472 						    				" - destinatarioPara: " + remetente
1473 						    				);
1474 									this.enviarEmailExcecao("AgendadorEmail.eMailGenerico() (1)", e);
1475 								}
1476 							}
1477 						}
1478 					}
1479 					
1480 					if ("S".equals(tfcfm.getEnviaSms())) {
1481 						// envia sms
1482 					}
1483 				}
1484 			}
1485 		} catch(Exception e) {
1486 			this.enviarEmailExcecao("AgendadorEmail.eMailGenerico() (2)", e);
1487 			throw(e);
1488 		}
1489 	}	
1490 	
1491 	/**
1492 	 * Envia e-mail de exceções para o e-mail de erros cadastrado na empresa. <br>
1493 	 * 
1494 	 * @author cristiano
1495 	 * @since 0.1, 06/03/2007
1496 	 * @version 0.2, 19/03/2007
1497 	 * @param String mensagem
1498 	 * @param Exception e
1499 	 * @throws ECARException
1500 	 * @throws Exception
1501 	 */
1502 	private void enviarEmailExcecao(String mensagem, Exception e) {
1503 		try {
1504 			StringBuffer sb = new StringBuffer();
1505 			sb.append(mensagem);
1506 			
1507 			if(e != null) {
1508 				sb.append("\n");
1509 				sb.append(e.getMessage());
1510 			}
1511 			
1512 			if(this.emailErroEmpresa != null && !"".equals(this.emailErroEmpresa)) {
1513 				Util.enviarEmail("[" + this.nomeSistema + "] ERRO - Agendador de Email", 
1514 						this.nomeSistema, 
1515 						this.emailErroEmpresa, 
1516 						sb.toString(), 
1517 						this.emailErroEmpresa, 
1518 						"", 
1519 						"", null);
1520 			}
1521 		} catch(Exception ex) {
1522 			org.apache.log4j.Logger.getLogger(this.getClass()).error(ex);
1523 		}
1524 	}
1525 } // fim class