private void eMailVenctoPontoCritico (Date dataCorrente, ConfigMailCfgm configMailCfgm, String dataLimiteSeNula) throws ECARException, Exception {
try {
PontoCriticoDao ptcDAO = new PontoCriticoDao(null);
TfuncacompConfigmailTfacfgmDAO tfuncacompConfigmailTfacfgmDAO = new TfuncacompConfigmailTfacfgmDAO();
UsuarioDao usuDAO = new UsuarioDao();
ItemEstruturaIett iett = null;
List listItens = null;
String dataCompStr = null;
Iterator itPontos = null;
String corRelogio = null;
Set datasLimite = null;
/* --
* Por Rog�rio (26/02/2007)
* Otimiza��o da query, visando buscar apenas os pontos criticos ativos.
listItens = itemDAO.listar(PontoCriticoPtc.class, new String[]{"codPtc","ASC"});
itPontos = listItens.iterator();
-- */
listItens = ptcDAO.listarPontoCriticoAtivoNExcluidoNSolucionado("S", "S");
if( listItens != null ) itPontos = listItens.iterator();
/* -- Final da otimiza��o -- */
while( itPontos != null && itPontos.hasNext() ){
PontoCriticoPtc ptc = (PontoCriticoPtc) itPontos.next();
iett= null;
//Data Limite do ponto Critico a ser usada para comparacao com
//as outras obtidas atrav�s da frequencia e antecedencia
Date dataComparacao = ptc.getDataLimitePtc();
if(dataComparacao != null)
dataCompStr = Data.parseDate(dataComparacao);
int diasAntecedencia;
int frequencia;
// Se a data for igual � data limite, � enviado e-mail contendo
// o relogio quebrado (PretoFixo)
if (dataCompStr!= null && dataCorrente != null && dataCompStr.equals(Data.parseDate(dataCorrente)))
{
corRelogio = "PretoFixo";
datasLimite = new HashSet();
datasLimite.add(dataCompStr);
}
// Caso contr�rio, itera-se buscando qual o per�odo de envio
// visando descobrir qual o per�odo mais 'grave' que se encaixa
// nos dias de anteced�ncia que restam
else
{
// Ordena-se o set de PtcCor de maneira a obter uma lista de dias de antecedencia
// crescente. Isto �, primeiro testa-se a menor antecedencia, buscando trabalhar com
// o mais urgente que se enquadra na data atual
List listPtcCor = null;
if(ptc.getPontoCriticoCorPtccores() != null)
listPtcCor = ptcDAO.ordenaSet(ptc.getPontoCriticoCorPtccores(), "this.antecedenciaPrimEmailPtccor", "asc");
Iterator itPtcCor = null;
if(listPtcCor!= null)
itPtcCor = listPtcCor.iterator();
boolean encontrouLimite = false;
while(( itPtcCor != null && itPtcCor.hasNext()) && (!encontrouLimite))
{
PontocriticoCorPtccor ptcCor = (PontocriticoCorPtccor) itPtcCor.next();
// Caso a antecedencia seja nula, define-se como 0 (zero)
if (ptcCor.getAntecedenciaPrimEmailPtccor() == null)
diasAntecedencia = 0;
else
diasAntecedencia = ptcCor.getAntecedenciaPrimEmailPtccor().intValue();
// Caso a frequencia seja nula, define-se como 0 (zero)
if (ptcCor.getFrequenciaEnvioEmailPtccor() == null)
frequencia = 0;
else
frequencia = ptcCor.getFrequenciaEnvioEmailPtccor().intValue();
Date dataLimite = Data.addDias(diasAntecedencia, dataCorrente);
String dataLimStr = Data.parseDate(dataLimite);
// Ap�s definir qual � a data que ser� comparada, verifica-se
// se esta se enquadra no PtcCor atual. Caso positivo, define-se a data
// e as subsequentes (de acordo com a frequencia)
// O loop while � interrompido quando isto � feito.
if ( (dataLimite != null && dataComparacao != null && dataLimStr != null && dataCompStr != null) &&
(dataLimite.after(dataComparacao)) || (dataLimStr.equals(dataCompStr)))
{
datasLimite = new HashSet();
if (diasAntecedencia > 0)
{
if ("S".equals(ptcCor.getIndAtivoEnvioEmailPtccor()))
{
datasLimite.add(dataLimStr);
if (frequencia > 0)
{
while (diasAntecedencia > 0)
{
diasAntecedencia = diasAntecedencia - frequencia;
dataLimStr = new String(Data.parseDate(Data.addDias(diasAntecedencia, dataCorrente)));
datasLimite.add(dataLimStr);
}
}
corRelogio = ptcCor.getCor().getNomeCor();
}
encontrouLimite = true;
}
}
}
}
iett = (ItemEstruturaIett) ptc.getItemEstruturaIett();
// S� manda email para os itens ativos
if( (datasLimite != null && datasLimite.contains(dataCompStr)) && (iett != null && "S".equals(iett.getIndAtivoIett()))) {
List usuariosEmailEnviado = new ArrayList();
Iterator itList = null;
List listIett = null;
if (iett.getItemEstUsutpfuacIettutfas() != null)
listIett = new ArrayList(iett.getItemEstUsutpfuacIettutfas());
if(listIett!=null) {
itList = listIett.iterator();
while( itList != null && itList.hasNext() ) {
ItemEstUsutpfuacIettutfa itemEstUsutpfacIetutfa = (ItemEstUsutpfuacIettutfa) itList.next();
TfuncacompConfigmailTfacfgmPK tfcfgmPK = new TfuncacompConfigmailTfacfgmPK();
tfcfgmPK.setCodCfgm(configMailCfgm.getCodCfgm());
if(itemEstUsutpfacIetutfa.getTipoFuncAcompTpfa() != null)
tfcfgmPK.setCodTpfa(itemEstUsutpfacIetutfa.getTipoFuncAcompTpfa().getCodTpfa());
TfuncacompConfigmailTfacfgm tfcfm = null;
try {
tfcfm = (TfuncacompConfigmailTfacfgm) tfuncacompConfigmailTfacfgmDAO.buscar(TfuncacompConfigmailTfacfgm.class, tfcfgmPK);
} catch(Exception e) {
tfcfm = null;
}
if (tfcfm != null && "S".equals(tfcfm.getEnviaMailTfacfgm())) {