Subversion Repositories Integrator Subversion

Rev

Rev 125 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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, 10));
        }
       
        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;
        }
       
}