/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package br.edu.ifnmg.GerenciamentoEventos.Infraestrutura;
import br.edu.ifnmg.DomainModel.AreaConhecimento;
import br.edu.ifnmg.DomainModel.Perfil;
import br.edu.ifnmg.DomainModel.Pessoa;
import br.edu.ifnmg.DomainModel.Services.AreaConhecimentoRepositorio;
import br.edu.ifnmg.DomainModel.Services.ConfiguracaoService;
import br.edu.ifnmg.DomainModel.Services.LogService;
import br.edu.ifnmg.DomainModel.Services.MailService;
import br.edu.ifnmg.DomainModel.Services.PerfilRepositorio;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Evento;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Servicos.SubmissaoService;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Servicos.PessoaRepositorioLocal;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Servicos.SubmissaoRepositorio;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Submissao;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.SubmissaoStatus;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
/**
*
* @author petronio
*/
@Stateless
public class SubmissaoServiceImpl implements SubmissaoService {
@EJB
SubmissaoRepositorio daoSub;
@EJB
AreaConhecimentoRepositorio daoArea;
@EJB
PessoaRepositorioLocal daoPes;
@EJB
PerfilRepositorio daoPerfil;
@EJB
ConfiguracaoService configuracao;
@EJB
LogService log;
@EJB
MailService mail;
@Override
public void Distribuir(Evento e){
List<AreaConhecimento> areas = daoSub.AreasPorEvento(e, SubmissaoStatus.Pendente);
String textoMensagem = configuracao.get("MENSAGEMDISTRIBUICAOAVALIADOR");
String codperfil = configuracao.get("PERFILSELECAOAVALIADOR");
Perfil perfil = daoPerfil.Abrir(Long.parseLong(codperfil));
for(AreaConhecimento area : areas){
if (processarArea(e, area, perfil, textoMensagem)) {
continue;
}
}
}
protected boolean processarArea(Evento e, AreaConhecimento area, Perfil perfil, String textoMensagem) {
List<Submissao> submissoes = daoSub.Buscar(SubmissaoStatus.Pendente, e, null, area);
List<Pessoa> avaliadores = daoPes.BuscarAvaliadores(perfil, area);
int tcount = 0;
int tfalha = 0;
int count = 0;
int numaval = avaliadores.size();
if (numaval == 0 || submissoes.isEmpty()) {
return false;
}
for(Submissao s : submissoes){
Pessoa avaliador = null;
boolean check = true;
int cloop = 0;
while(check && cloop < 10){
avaliador = avaliadores.get(count % numaval);
if(s.getAutor1().toUpperCase().contains(avaliador.getNome().toUpperCase())
|| s.getAutor2().toUpperCase().contains(avaliador.getNome().toUpperCase())
|| s.getAutor3().toUpperCase().contains(avaliador.getNome().toUpperCase())
|| s.getAutor4().toUpperCase().contains(avaliador.getNome().toUpperCase())
|| s.getAutor5().toUpperCase().contains(avaliador.getNome().toUpperCase())){
check = true;
count = count + 1;
cloop = cloop + 1;
} else {
check = false;
}
}
count = count + 1;
if(check)
continue;
s.add(avaliador);
s.setStatus(SubmissaoStatus.Atribuido);
if(daoSub.Salvar(s)) {
String tmp = textoMensagem.replace("###TITULO###", s.getTitulo());
mail.enviar(avaliador.getEmail(), "[" + e.getNome() + "] Trabalho disponível para avaliação",tmp);
log.Append("Falha ao atribuir a submissão " + s.toString() + " ao avaliador " + avaliador.toString() );
tcount++;
} else {
log.Append("Falha ao atribuir a submissão " + s.toString() + " ao avaliador " + avaliador.toString() + ". " + daoSub.getErro().getMessage());
tfalha++;
}
}
log.Append("Atribuídas submissões para " + area.getNome() + ": Sucesso - " + tcount + " - Falha " + tfalha);
return true;
}
@Override
public void VerificarStatus(Evento e) {
for(Submissao s : daoSub.Join("inscricao", "i").IgualA("i.evento", e).Buscar()) {
s.verificarStatus();
daoSub.Salvar(s);
}
}
}