/*
* This file is part of SGEA - Sistema de Gestão de Eventos Acadêmicos - TADS IFNMG Campus Januária.
*
* SGEA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SGEA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with SGEA. If not, see <http://www.gnu.org/licenses/>.
*/
package br.edu.ifnmg.GerenciamentoEventos.Apresentacao;
import br.edu.ifnmg.DomainModel.AreaConhecimento;
import br.edu.ifnmg.DomainModel.Campus;
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.CampusRepositorio;
import br.edu.ifnmg.DomainModel.Services.HashService;
import br.edu.ifnmg.GerenciamentoEventos.Aplicacao.ControllerBaseEntidade;
import br.edu.ifnmg.DomainModel.Services.PerfilRepositorio;
import br.edu.ifnmg.DomainModel.Titulacao;
import br.edu.ifnmg.GerenciamentoEventos.Aplicacao.GenericDataModel;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Servicos.PessoaRepositorioLocal;
import javax.inject.Named;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
/**
*
* @author petronio
*/
@Named(value = "usuarioController")
@RequestScoped
public class PessoaController
extends ControllerBaseEntidade<Pessoa>
implements Serializable {
/**
* Creates a new instance of FuncionarioBean
*/
public PessoaController() {
}
@EJB
PessoaRepositorioLocal dao;
@EJB
PerfilRepositorio daoP;
@EJB
CampusRepositorio daoC;
@EJB
AreaConhecimentoRepositorio daoAC;
@Inject
HashService hash;
String senha1, senha2;
AreaConhecimento areaConhecimento;
@PostConstruct
public void init() {
setRepositorio(dao);
setPaginaEdicao("editarUsuario.xhtml");
setPaginaListagem("listagemUsuarios.xtml");
}
@Override
public Pessoa getFiltro() {
if (filtro == null) {
filtro = new Pessoa();
filtro.setPerfil((Perfil)getSessao("pctrl_perfil", daoP));
filtro.setNome(getSessao("pctrl_nome"));
filtro.setCpf(getSessao("pctrl_cpf"));
filtro.setEmail(getSessao("pctrl_email"));
filtro.setCampus((Campus)getSessao("pctrl_campus",daoC));
if(getSessao("pctrl_titulacao") != null && !getSessao("pctrl_titulacao").isEmpty())
filtro.setTitulacaoMaxima(Titulacao.valueOf(getSessao("pctrl_titulacao")));
}
return filtro;
}
@Override
public void setFiltro(Pessoa filtro) {
this.filtro = filtro;
if (filtro != null) {
setSessao("pctrl_perfil", filtro.getPerfil());
setSessao("pctrl_nome", filtro.getNome());
setSessao("pctrl_cpf", filtro.getCpf());
setSessao("pctrl_email", filtro.getEmail());
setSessao("pctrl_campus", filtro.getCampus());
if(filtro.getTitulacaoMaxima() != null)
setSessao("pctrl_titulacao", filtro.getTitulacaoMaxima().name());
}
}
@Override
public void salvar() {
if (senha1 != null && senha1.length() != 0) {
if (senha1.equals(senha2)) {
entidade.setSenha(hash.getMD5(senha1));
} else {
Mensagem("Erro", "As senhas não conferem!");
return;
}
}
SalvarEntidade();
// atualiza a listagem
filtrar();
}
@Override
public void limpar() {
setEntidade(new Pessoa());
}
public String getSenha1() {
return senha1;
}
public void setSenha1(String senha1) {
this.senha1 = senha1;
}
public String getSenha2() {
return senha2;
}
public void setSenha2(String senha2) {
this.senha2 = senha2;
}
public List<Pessoa> getPessoas() {
List<Pessoa> tmp = new ArrayList<>();
tmp.add(entidade);
return tmp;
}
public AreaConhecimento getAreaConhecimento() {
if(areaConhecimento == null)
areaConhecimento = (AreaConhecimento)getSessao("pctrl_ac",daoAC);
return areaConhecimento;
}
public void setAreaConhecimento(AreaConhecimento areaConhecimento) {
setSessao("pctrl_ac", areaConhecimento);
this.areaConhecimento = areaConhecimento;
}
public void addAreaConhecimento() {
getEntidade().add(areaConhecimento);
if(dao.Salvar(entidade))
Mensagem("Salvo com sucesso", "Salvo com sucesso");
else
Mensagem("Falha", "Falha ao salvar!");
areaConhecimento = null;
}
public void removeAreaConhecimento() {
getEntidade().remove(areaConhecimento);
dao.Salvar(entidade);
areaConhecimento = null;
}
@Override
public List<Pessoa> getListagem() {
if(getFiltro().getPerfil() != null)
return dao.Buscar(getFiltro());
else
return dao.BuscarTexto(getFiltro());
}
public List<Pessoa> getListagemAvaliadores() {
return dao
.IgualA("perfil", daoP.Abrir( Long.parseLong( getConfiguracao("PERFILSELECAOAVALIADOR") ) ))
.Like("nome", getFiltro().getNome())
.IgualA("campus", getFiltro().getCampus())
.IgualA("titulacaoMaxima", getFiltro().getTitulacaoMaxima())
.Join("areasConhecimento", "ac")
.IgualA("ac.id", areaConhecimento)
.Buscar();
}
public GenericDataModel getAvaliadoresDataModel() {
return new GenericDataModel<>(getListagemAvaliadores(), repositorio);
}
public void reindexarAreasConhecimento() {
for (Pessoa s : dao
.IgualA("perfil", daoP.Abrir( Long.parseLong( getConfiguracao("PERFILSELECAOAVALIADOR") ) ))
.Buscar()) {
if (!s.getAreasConhecimento().isEmpty()) {
List<AreaConhecimento> remover = new ArrayList<>();
List<AreaConhecimento> adicionar = new ArrayList<>();
for (AreaConhecimento a : s.getAreasConhecimento()) {
if (!a.isArea() && !a.isGrandeArea()) {
remover.add(a);
AreaConhecimento tmp = daoAC.Abrir(a.getAreaCodigo());
adicionar.add(tmp);
}
}
for (AreaConhecimento c : remover) {
s.remove(c);
}
for (AreaConhecimento c : adicionar) {
s.add(c);
}
if (!dao.Salvar(s)) {
AppendLog(dao.getErro().getMessage());
}
}
}
}
}