package Controle;
import DAO.ControleRmpDao;
import DAO.RmdDao;
import DAO.RmpDao;
import DAO.RmqDao;
import DAO.UsuarioDAO;
import Entidade.ControleRelatoDeMelhoria;
import Entidade.RelatoDeMelhoria;
import Entidade.RelatoDeMelhoriaDestino;
import Entidade.RelatoDeMelhoriaQualidade;
import Entidade.StatusRelatoDeMelhoria;
import Entidade.Unidade;
import Entidade.Usuario;
import Util.Email;
import Util.Entradas;
import Util.EnumAcaoImediata;
import Util.RefreshTela;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.el.ELContext;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;
import org.primefaces.context.RequestContext;
@ManagedBean
@ViewScoped
public class ControleRmp implements Serializable {
RelatoDeMelhoria rmp = new RelatoDeMelhoria();
RelatoDeMelhoriaDestino rmd = new RelatoDeMelhoriaDestino();
RelatoDeMelhoriaQualidade rmq = new RelatoDeMelhoriaQualidade();
ControleRelatoDeMelhoria crmp = new ControleRelatoDeMelhoria();
Usuario user = new Usuario();
private boolean renderizar = true;
private List<RelatoDeMelhoria> rmps;
private List<RelatoDeMelhoria> rmpsEnviadas;
private List<RelatoDeMelhoria> minhasRmpsEnviadas;
private List<RelatoDeMelhoria> rmpsPendentesRD;
private List<RelatoDeMelhoria> selectedRmpRD;
private List<RelatoDeMelhoria> minhasRmps;
private List<Entradas> entradas;
private Entradas entrada;
private List<EnumAcaoImediata> acoesImediatas;
private EnumAcaoImediata acaoImediata;
private RelatoDeMelhoria rmpSelecionada;
RmpDao rmpDao = new RmpDao();
RmqDao rmqDao = new RmqDao();
RmdDao rmdDao = new RmdDao();
ControleRmpDao crmpDao = new ControleRmpDao();
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
ControleSessaoUsuario loginBean = (ControleSessaoUsuario) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "controleSessaoUsuario");
@PostConstruct
public void init() {
rmps = getListaRmpsSalvas();
rmpsPendentesRD = getListaRmpsPendentesRD();
//rmpsEnviadas = getListaRmpsEnviadas();
}
public List<EnumAcaoImediata> getAcoesImediatas() {
return Arrays.asList(EnumAcaoImediata.values());
}
public void setAcoesImediatas(List<EnumAcaoImediata> acoesImediatas) {
this.acoesImediatas = acoesImediatas;
}
public EnumAcaoImediata getAcaoImediata() {
return acaoImediata;
}
public void setAcaoImediata(EnumAcaoImediata acaoImediata) {
this.acaoImediata = acaoImediata;
}
public List<Entradas> getEntradas() {
return Arrays.asList(Entradas.values());
}
public void setEntradas(List<Entradas> entradas) {
this.entradas = entradas;
}
public Entradas getEntrada() {
return entrada;
}
public void setEntrada(Entradas entrada) {
this.entrada = entrada;
}
public List<RelatoDeMelhoria> getMinhasRmps() {
return minhasRmps;
}
public void setMinhasRmps(List<RelatoDeMelhoria> minhasRmps) {
this.minhasRmps = minhasRmps;
}
public List<RelatoDeMelhoria> getSelectedRmpRD() {
return selectedRmpRD;
}
public void setSelectedRmpRD(List<RelatoDeMelhoria> selectedRmpRD) {
this.selectedRmpRD = selectedRmpRD;
this.aprovarRmpRD();
}
public RelatoDeMelhoria getRmpSelecionada() {
return rmpSelecionada;
}
public void setRmpSelecionada(RelatoDeMelhoria rmpSelecionada) {
this.rmpSelecionada = rmpSelecionada;
}
public List<RelatoDeMelhoria> getRmps() {
return rmps;
}
public void setRmps(List<RelatoDeMelhoria> rmps) {
this.rmps = rmps;
}
public List<RelatoDeMelhoria> getRmpsEnviadas() {
return rmpsEnviadas;
}
public void setRmpsEnviadas(List<RelatoDeMelhoria> rmpsEnviadas) {
this.rmpsEnviadas = rmpsEnviadas;
}
public List<RelatoDeMelhoria> getMinhasRmpsEnviadas() {
return minhasRmpsEnviadas;
}
public void setMinhasRmpsEnviadas(List<RelatoDeMelhoria> minhasRmpsEnviadas) {
this.minhasRmpsEnviadas = minhasRmpsEnviadas;
}
public List<RelatoDeMelhoria> getRmpsPendentesRD() {
return rmpsPendentesRD;
}
public void setRmpsPendentesRD(List<RelatoDeMelhoria> rmpsPendentesRD) {
this.rmpsPendentesRD = rmpsPendentesRD;
}
public RelatoDeMelhoria getRmp() {
return rmp;
}
public void setRmp(RelatoDeMelhoria rmp) {
this.rmp = rmp;
}
public boolean isRenderizar() {
return renderizar;
}
public void setRenderizar(boolean renderizar) {
this.renderizar = renderizar;
}
//------- MÉTODOS --------------------------------------------------------------
public void monstrarLinha(AjaxBehaviorEvent event) {
if (rmp.getRmpTpEntrada().equals("OUTROS")) {
renderizar = false;
} else {
renderizar = true;
}
}
public void salvarRmp() {
Date data = new Date();
this.rmp.setUsuCodResponsavel(loginBean.usuarioConsultado1);
this.rmp.setUniCodUnidaderelatora(loginBean.usuarioConsultado1.getUniCodigo());
this.rmp.setRmpDtAbertura(data);
rmpDao.salvar(this.rmp);
rmp = new RelatoDeMelhoria();//cria um novo objeto para limpar os dados do RMP em tela
getListaRmpsSalvas();//busca novamente RMP's salvas para exibir atualizado na tela
FacesMessage msg = new FacesMessage("O RMP foi arquivado, alterações poderão ser realizadas através da tabela abaixo até o envio do mesmo.", "");
FacesContext.getCurrentInstance().addMessage("msgUpdate", msg);
}
public void salvarEnviarRmp() {
StatusRelatoDeMelhoria srmp = new StatusRelatoDeMelhoria();
Date data = new Date();
this.rmp.setRmpDtAbertura(data);
this.rmp.setUsuCodResponsavel(loginBean.usuarioConsultado1);
this.rmp.setUniCodUnidaderelatora(loginBean.usuarioConsultado1.getUniCodigo());
srmp.setStsCodigo(6);
rmpDao.salvar(this.rmp); //salva na tabela de relato de melhoria
getListaRmpsSalvas();//busca novamente RMP's salvas para exibir atualizado na tela
if (loginBean.controlePar.getParametros().getParSnAprovaRmp() ) {
if (validarSalvarEnviarRmp(this.rmp)){
RelatoDeMelhoriaQualidade rmqNew = new RelatoDeMelhoriaQualidade();
rmqNew.setRmpCodigo(rmp);
rmqNew.setRmqDtRecebimento(data);
rmqDao.salvar(rmqNew);
//this.rmq.setRmpCodigo(rmp);
//this.rmq.setRmqDtRecebimento(data);
//rmqDao.salvar(this.rmq);
getListaRmpsSalvas();//busca novamente RMP's salvas para exibir atualizado na tela
this.crmp.setCrmpDtOcorrencia(this.rmp.getRmpDtOcorrencia());
this.crmp.setCrmpTpEncaminhamento("RD");
this.crmp.setRmpCodigo(this.rmp);
this.crmp.setStsCodigo(srmp);
crmpDao.salvar(this.crmp);
getListaRmpsSalvas();
FacesMessage msg = new FacesMessage("O RMP foi enviado ao RD para aprovação.", "");
FacesContext.getCurrentInstance().addMessage("growlUpdate", msg);
} else{
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Você deve preencher todos os campos para poder enviar o RMP", "");
FacesContext.getCurrentInstance().addMessage("growlUpdate", msg);
}
} else {
if (validarSalvarEnviarRmp(this.rmp)){
this.rmp.setRmpDtRelato(data);
this.rmd.setRmpCodigo(this.rmp);
this.rmd.setRmdDtRecebimento(data);
this.rmd.setUsuCodResponsavel(loginBean.usuarioConsultado1);
this.rmd.setRmdSnPlanoacao(false);
rmdDao.salvar(this.rmd);
this.crmp.setCrmpDtOcorrencia(this.rmp.getRmpDtOcorrencia());
this.crmp.setCrmpTpEncaminhamento("UNIDADE");
this.crmp.setRmpCodigo(this.rmp);
this.crmp.setStsCodigo(srmp);
crmpDao.salvar(this.crmp);
getListaRmpsSalvas();//busca novamente RMP's salvas para exibir atualizado na tela
this.buscarEEnviarEmails(rmp.getUniCodUnidadedestino());
FacesMessage msg = new FacesMessage("O RMP e um e-mail foram enviados ao setor destino.", "");
FacesContext.getCurrentInstance().addMessage("growlUpdate", msg);
} else {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Você deve preencher todos os campos para poder enviar o RMP", "");
FacesContext.getCurrentInstance().addMessage("growlUpdate", msg);
}
}
}
public void buscarEEnviarEmails(Unidade unidade) {
Email dispararEmail = new Email();
UsuarioDAO usuDao = new UsuarioDAO();
List<Usuario> usuarios = usuDao.listarUsuariosPorUnidade(unidade);
int cont = 0;
if (!usuarios.isEmpty()) {
while (!usuarios.isEmpty()) {
user = (Usuario) usuarios.get(cont);
usuarios.remove(cont);
dispararEmail.enviarEmail(user.getUsuDscEmail());
}
}
}
public List<RelatoDeMelhoria> getListaRmpsSalvas() {
Integer codigoUsuario = loginBean.usuarioConsultado1.getUsuCodigo();
rmps = new RmpDao().listarRmpsSalvas(codigoUsuario);
return rmps;
}
public List<RelatoDeMelhoria> getListaRmpsEnviadas() {
Integer codigoUsuario = loginBean.usuarioConsultado1.getUsuCodigo();
rmps = new RmpDao().listarRmpsEnviadas(codigoUsuario);
return rmps;
}
public List<RelatoDeMelhoria> getListaRmpsPendentesRD() {
rmpsPendentesRD = new RmpDao().listarRmpsPendendesRD();
return rmpsPendentesRD;
}
public void aprovarRmpRD() {
Date data = new Date();
int contador = 0;
while (!selectedRmpRD.isEmpty()) {
rmp = selectedRmpRD.get(contador);
rmp.setRmpDtRelato(data);
rmq = (RelatoDeMelhoriaQualidade) rmp.getRelatoDeMelhoriaQualidade();
this.rmq.setRmqSnAprovado(true);
this.rmq.setRmqDtEncaminhamento(data);
rmqDao.salvar(rmq);
this.rmd.setRmpCodigo(this.rmp);
this.rmd.setRmdDtRecebimento(data);
this.rmd.setUsuCodResponsavel(loginBean.usuarioConsultado1);
this.rmd.setRmdSnPlanoacao(false);
rmdDao.salvar(this.rmd);
selectedRmpRD.remove(rmp);
buscarEEnviarEmails(rmp.getUniCodUnidadedestino());
}
RefreshTela rt = new RefreshTela(); //atributo Update do prime não atualiza a page então criei esse método.
rt.atualizarTela();
FacesMessage msg = new FacesMessage("O RMP foi aprovado e um e-mail foi enviado à Unidade destino", "");
FacesContext.getCurrentInstance().addMessage("growlUpdate", msg);
}
public void rejeitarRmpRD() {
Date data = new Date();
rmpSelecionada.getRelatoDeMelhoriaQualidade().setRmqSnAprovado(false);
rmpSelecionada.getRelatoDeMelhoriaQualidade().setUsuCodResponsavel(loginBean.usuarioConsultado1);
rmpSelecionada.getRelatoDeMelhoriaQualidade().setRmqDtEncaminhamento(data);
rmq = (RelatoDeMelhoriaQualidade) rmpSelecionada.getRelatoDeMelhoriaQualidade();
rmqDao.salvar(rmq);
RefreshTela rt = new RefreshTela(); //atributo Update do prime não atualiza a page então criei esse método.
rt.atualizarTela();
FacesMessage msg = new FacesMessage("O RMP foi rejeitado", "");
FacesContext.getCurrentInstance().addMessage("growlUpdate", msg);
}
public boolean validarSalvarEnviarRmp(RelatoDeMelhoria rmpTestada){
if (rmpTestada.getRmpDtOcorrencia() != null &&
rmpTestada.getUniCodUnidadedestino() != null &&
!rmpTestada.getRmpTpEntrada().equals("") &&
!rmpTestada.getRmpDscRelato().equals("") &&
rmpTestada.getRmpTpAcaoimediata() != null &&
!rmpTestada.getRmpDscAcaorealizada().equals("")) {
return true;
} else {
return false;
}
}
}