package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.context.annotation.Scope;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Pendencia;
import br.com.ec.domain.model.Perfil;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.UsuarioPerfil;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.pendencia.PendenciaService;
import br.com.ec.domain.service.seguranca.ContextoSeguranca;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.edu.cesmac.core.consulta.ParametrosConsulta;
import br.edu.cesmac.core.generic.GenericService;
import br.edu.cesmac.core.util.DataUtils;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.web.exception.VerificadorLancamentoException;
import br.edu.cesmac.web.exception.VerificadorLancamentoException.CommandBean;
import br.edu.cesmac.web.generic.AbstractBean;
import br.edu.cesmac.web.message.LancadorMensagem;
@Named
@Scope
("view")
public class PendenciaBean
extends AbstractBean
<Pendencia
> implements Serializable {
private static final long serialVersionUID = 1L
;
private List<Pendencia
> pendencias
;
private List<Pendencia
> pendenciasUltimasFinalizadas
;
private Integer quantidadePendencias
;
private PendenciaService pendenciaService
;
private LojaService lojaService
;
private Pendencia pendenciaSelecionado
;
private Loja lojaSelecionada
;
private String senhaUsuario
;
private UsuarioService usuarioService
;
private ContextoSeguranca contextoSeguranca
;
@Inject
public PendenciaBean
(PendenciaService pendenciaService, LojaService lojaService, UsuarioService usuarioService, ContextoSeguranca contextoSeguranca
) {
this.
pendenciaService = pendenciaService
;
this.
lojaService = lojaService
;
this.
usuarioService = usuarioService
;
this.
contextoSeguranca = contextoSeguranca
;
}
@
Override
public void preCarregamento
() {
entidade =
new Pendencia
();
entidade.
setLoja(getLojaSelecionada
());
entidade.
setIndicadorFinalizado(false);
parametrosConsulta =
new ParametrosConsulta
<Pendencia
>();
parametrosConsulta.
setEntidade(entidade
);
}
@
Override
public void limparEntidade
() {
setEntidade
(new Pendencia
());
}
@
Override
public GenericService
<Pendencia
> getService
() {
return pendenciaService
;
}
@
Override
public Pendencia getEntidade
() {
return entidade
;
}
@
Override
public Pendencia getId
() {
return getEntidade
();
}
public List<Pendencia
> getPendencias
() {
if (VerificadorUtil.
estaNulo(pendencias
)) {
consultarPendencias
();
}
return pendencias
;
}
public void setPendencias
(List<Pendencia
> pendencias
) {
this.
pendencias = pendencias
;
}
public void consultarPendencias
() {
List<Perfil
> perfis =
new ArrayList<Perfil
>();
Boolean perfilAdministrador =
false;
Usuario solicitante = contextoSeguranca.
obterUsuario();
for (UsuarioPerfil usuarioPerfil : solicitante.
getPerfis()) {
if (usuarioPerfil.
getPerfil().
getCodigo().
equals(ConstantesSEC.
PERFIL_ADMINISTRADOR_1)) {
perfilAdministrador =
true;
}
if (!perfilAdministrador
) {
perfis.
add(usuarioPerfil.
getPerfil());
}
}
parametrosConsulta.
getEntidade().
setPerfisConsulta(perfis
);
parametrosConsulta.
getEntidade().
setUsuario(solicitante
);
setPendencias
(pendenciaService.
consultarPassandoEntidade(parametrosConsulta.
getEntidade(),
0, pendenciaService.
obterQuantidadeDeRegistrosPassandoEntidade(parametrosConsulta.
getEntidade())));
Pendencia pendenciaFinalizada = parametrosConsulta.
getEntidade();
pendenciaFinalizada.
setIndicadorFinalizado(true);
pendenciaFinalizada.
setUsuario(solicitante
);
setPendenciasUltimasFinalizadas
(pendenciaService.
consultarPassandoEntidade(pendenciaFinalizada,
0,
20));
}
public List<Pendencia
> getPendenciasUltimasFinalizadas
() {
return pendenciasUltimasFinalizadas
;
}
public void setPendenciasUltimasFinalizadas
(List<Pendencia
> pendenciasUltimasFinalizadas
) {
this.
pendenciasUltimasFinalizadas = pendenciasUltimasFinalizadas
;
}
public Pendencia getPendenciaSelecionado
() {
return pendenciaSelecionado
;
}
public void setPendenciaSelecionado
(Pendencia pendenciaSelecionado
) {
this.
pendenciaSelecionado = pendenciaSelecionado
;
}
public Loja getLojaSelecionada
() {
if (VerificadorUtil.
estaNulo(lojaSelecionada
)) {
if (VerificadorUtil.
naoEstaNulo(getParametro
("sequencialLoja"))) {
Loja loja =
new Loja
();
loja.
setSequencial(new Long(getParametro
("sequencialLoja").
toString()));
lojaSelecionada = lojaService.
consultarPorId(loja
);
}
}
return lojaSelecionada
;
}
public void setLojaSelecionada
(Loja lojaSelecionada
) {
this.
lojaSelecionada = lojaSelecionada
;
}
public Integer quantidadePendenciasNaoFinalizadas
(Loja loja
) {
return pendenciaService.
quantidadePendenciasNaoFinalizadas(loja
);
}
public String getSenhaUsuario
() {
return senhaUsuario
;
}
public void setSenhaUsuario
(String senhaUsuario
) {
this.
senhaUsuario = senhaUsuario
;
}
@
Override
public void cadastrar
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
naoEstaNulo(getLojaSelecionada
())) {
getEntidade
().
setLoja(getLojaSelecionada
());
}
Usuario usuario = verificarSenhaUsuario
();
getEntidade
().
setUsuario(usuario
);
setSenhaUsuario
("");
}
});
super.
cadastrar();
consultarPendencias
();
}
private Usuario verificarSenhaUsuario
() {
return usuarioService.
consultarUsuarioPorSenha(getSenhaUsuario
());
}
@
Override
public void alterar
() {
super.
alterar();
consultarPendencias
();
}
public void finalizar
(final Pendencia pendencia
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
pendencia.
setDataFinalizado(DataUtils.
getDataAtual());
getService
().
alterar(pendencia
);
consultarPendencias
();
LancadorMensagem.
lancarSucesso("Pendência finalizada com sucesso!");
}
});
}
public void aguardar
(final Pendencia pendencia
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
pendencia.
setIndicadorFinalizado(false);
getService
().
alterar(pendencia
);
consultarPendencias
();
LancadorMensagem.
lancarSucesso("Pendência ativa novamente!");
}
});
}
public void excluir
(final Pendencia pendencia
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getService
().
excluir(pendencia
);
consultarPendencias
();
LancadorMensagem.
lancarSucesso("Pendência excluída com sucesso!");
}
});
}
public Integer getQuantidadePendencias
() {
if (VerificadorUtil.
estaNulo(quantidadePendencias
)) {
List<Perfil
> perfis =
new ArrayList<Perfil
>();
Usuario solicitante = contextoSeguranca.
obterUsuario();
if (VerificadorUtil.
naoEstaNulo(solicitante
)) {
for (UsuarioPerfil usuarioPerfil : solicitante.
getPerfis()) {
perfis.
add(usuarioPerfil.
getPerfil());
}
}
parametrosConsulta.
getEntidade().
setPerfisConsulta(perfis
);
setQuantidadePendencias
(pendenciaService.
obterQuantidadeDeRegistrosPassandoEntidade(parametrosConsulta.
getEntidade()));
}
return quantidadePendencias
;
}
public void setQuantidadePendencias
(Integer quantidadePendencias
) {
this.
quantidadePendencias = quantidadePendencias
;
}
}