Subversion Repositories Integrator Subversion

Rev

Rev 241 | 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.Date;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;

import org.springframework.context.annotation.Scope;

import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.PendenciaDTO;
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.UsuarioLoja;
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.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.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> pendenciasSolicitadas;
        private List<PendenciaDTO> pendenciasNaoLidasDTO;
        private List<PendenciaDTO> pendenciasUltimasFinalizadasDTO;
        private Integer quantidadePendencias;
        private Integer quantidadePendenciasRespondidas;
       
        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() {
                limparEntidade();
        }
       
        @Override
        public void limparEntidade() {
                entidade = new Pendencia();
                entidade.setLoja(getLojaSelecionada());
                entidade.setIndicadorFinalizado(false);
                parametrosConsulta = new ParametrosConsulta<Pendencia>();
                parametrosConsulta.setEntidade(entidade);
        }

        @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() {
                Usuario solicitante = contextoSeguranca.obterUsuario();
               
                Pendencia entidadeParaConsulta = preencherEntidadeParaConsulta(solicitante);
                setPendencias(pendenciaService.consultarPassandoEntidade(entidadeParaConsulta, 0, pendenciaService.obterQuantidadeDeRegistrosPassandoEntidade(entidadeParaConsulta)));

                entidadeParaConsulta.setPerfisConsulta(null);
                entidadeParaConsulta.setUsuario(solicitante);
                setPendenciasSolicitadas(pendenciaService.consultarPassandoEntidade(entidadeParaConsulta, 0, pendenciaService.obterQuantidadeDeRegistrosPassandoEntidade(entidadeParaConsulta)));
               
                setPendenciasNaoLidasDTO(pendenciaService.consultarPendenciasNaoLidas(entidadeParaConsulta));
               
                entidadeParaConsulta.setIndicadorFinalizado(true);
                setPendenciasUltimasFinalizadasDTO(pendenciaService.consultarUltimasPendenciasAtendidas(entidadeParaConsulta));
        }
       
        private Pendencia preencherEntidadeParaConsulta(Usuario solicitante) {
                Pendencia entidadeParaConsulta = new Pendencia();
                List<Perfil> perfisConsulta = new ArrayList<Perfil>();
                List<Loja> lojasConsulta = new ArrayList<Loja>();
                for (UsuarioPerfil usuarioPerfil : solicitante.getPerfis()) {
                        if (usuarioPerfil.getPerfil().getCodigo().equals(ConstantesSEC.PERFIL_ADMINISTRADOR_1)) {
                                entidadeParaConsulta.setPerfilAdministradorConsulta(true);
                                break;
                        } else if (!usuarioPerfil.getPerfil().getCodigo().equals(ConstantesSEC.PERFIL_LOJA_9)){
                                perfisConsulta.add(usuarioPerfil.getPerfil());
                        }
                        if (usuarioPerfil.getPerfil().getCodigo().equals(ConstantesSEC.PERFIL_VENDEDOR_5) ||
                                        usuarioPerfil.getPerfil().getCodigo().equals(ConstantesSEC.PERFIL_LOJA_9)) {
                                for (UsuarioLoja usuarioLoja : solicitante.getLojas()) {
                                        lojasConsulta.add(usuarioLoja.getLoja());
                                }
                                if (usuarioPerfil.getPerfil().getCodigo().equals(ConstantesSEC.PERFIL_LOJA_9)) {
                                        perfisConsulta.add(new Perfil(ConstantesSEC.PERFIL_VENDEDOR_5));
                                }
                        }
                }
                entidadeParaConsulta.setDescricao(getEntidade().getDescricao());
                entidadeParaConsulta.setData(getEntidade().getData());
                entidadeParaConsulta.setIndicadorFinalizado(getEntidade().getIndicadorFinalizado());
                entidadeParaConsulta.setLoja(getEntidade().getLoja());
                entidadeParaConsulta.setPerfil(getEntidade().getPerfil());
               
                entidadeParaConsulta.setPerfisConsulta(perfisConsulta);
                entidadeParaConsulta.setLojasConsulta(lojasConsulta);
                return entidadeParaConsulta;
        }
       
        public List<Pendencia> getPendenciasSolicitadas() {
                return pendenciasSolicitadas;
        }
        public void setPendenciasSolicitadas(List<Pendencia> pendenciasSolicitadas) {
                this.pendenciasSolicitadas = pendenciasSolicitadas;
        }
       
        public List<PendenciaDTO> getPendenciasNaoLidasDTO() {
                return pendenciasNaoLidasDTO;
        }
        public void setPendenciasNaoLidasDTO(List<PendenciaDTO> pendenciasNaoLidasDTO) {
                this.pendenciasNaoLidasDTO = pendenciasNaoLidasDTO;
        }
       
        public List<PendenciaDTO> getPendenciasUltimasFinalizadasDTO() {
                return pendenciasUltimasFinalizadasDTO;
        }
        public void setPendenciasUltimasFinalizadasDTO(List<PendenciaDTO> pendenciasUltimasFinalizadasDTO) {
                this.pendenciasUltimasFinalizadasDTO = pendenciasUltimasFinalizadasDTO;
        }
       
        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();
                                usuarioService.naoPermitirPerfilLoja(usuario);
                                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());
                                Usuario usuarioResposta = verificarSenhaUsuario();
                                usuarioService.naoPermitirPerfilLoja(usuarioResposta);
                                pendencia.setUsuarioResposta(usuarioResposta);
                                setSenhaUsuario("");
                                getService().alterar(pendencia);
                                limparEntidade();
                                consultarPendencias();
                                LancadorMensagem.lancarSucesso("Pendência finalizada com sucesso!");
                        }
                });
        }

        public void reativar(final Long sequenciaPendencia) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                Pendencia pendencia = new Pendencia();
                                pendencia.setSequencial(sequenciaPendencia);
                                pendencia = getService().consultarPorId(pendencia);
                                pendencia.setDescricao("REATIVADA: " + pendencia.getDescricao());
                                pendencia.setIndicadorFinalizado(false);
                                pendencia.setDataFinalizado(null);
                                pendencia.setUsuarioResposta(null);
                                pendencia.setResposta(null);
                                getService().alterar(pendencia);
                                consultarPendencias();
                                LancadorMensagem.lancarSucesso("Pendência solicitada 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 void lerPendencia(final Long sequencialPendencia) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                pendenciaService.lerRepostaPendencia(sequencialPendencia);
                                consultarPendencias();
                                LancadorMensagem.lancarSucesso("Resposta de pendência lida com sucesso!");
                        }
                });
        }
       
        public Integer getQuantidadePendencias() {
                if (VerificadorUtil.estaNulo(quantidadePendencias)) {
                        Usuario solicitante = contextoSeguranca.obterUsuario();
                        Pendencia entidadeParaConsulta = preencherEntidadeParaConsulta(solicitante);
                        if (entidadeParaConsulta.getPerfisConsulta().isEmpty()) {
                                for (UsuarioPerfil usuarioPerfil : solicitante.getPerfis()) {
                                        if (usuarioPerfil.getPerfil().getCodigo().equals(ConstantesSEC.PERFIL_ADMINISTRADOR_1)) {
                                                entidadeParaConsulta.getPerfisConsulta().add(usuarioPerfil.getPerfil());
                                                entidadeParaConsulta.setPerfilAdministradorConsulta(true);
                                                break;
                                        }
                                }
                        }
                       
                        entidadeParaConsulta.setUsuario(null);
                        entidadeParaConsulta.setIndicadorFinalizado(false);
                        setQuantidadePendencias(pendenciaService.obterQuantidadeDeRegistrosPassandoEntidade(entidadeParaConsulta));
                }
                return quantidadePendencias;
        }
        public void setQuantidadePendencias(Integer quantidadePendencias) {
                this.quantidadePendencias = quantidadePendencias;
        }
       
        public Integer getQuantidadePendenciasRespondidas() {
                if (VerificadorUtil.estaNulo(quantidadePendenciasRespondidas)) {
                        Usuario solicitante = contextoSeguranca.obterUsuario();
                        Date dataFinalizacao = DataUtils.acrescentarDias(DataUtils.getDataAtual(), -7);
                        setQuantidadePendenciasRespondidas(pendenciaService.obterQuantidadePendenciasRespondidasNaoLidas(solicitante, dataFinalizacao));
                }
                return quantidadePendenciasRespondidas;
        }
        public void setQuantidadePendenciasRespondidas(Integer quantidadePendenciasRespondidas) {
                this.quantidadePendenciasRespondidas = quantidadePendenciasRespondidas;
        }
       
}