Subversion Repositories Integrator Subversion

Rev

Rev 594 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.controller.managedbean;

import java.io.Serializable;
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.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.RankingControleTrafegoDTO;
import br.com.ec.domain.dto.RankingControleTrafegoGeralDTO;
import br.com.ec.domain.model.ControleTrafego;
import br.com.ec.domain.model.Cupom;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.SubtipoProduto;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.Vendedor;
import br.com.ec.domain.model.tipos.TipoGenero;
import br.com.ec.domain.model.tipos.TipoMotivoAtendimento;
import br.com.ec.domain.model.tipos.TipoPeriodoConsulta;
import br.com.ec.domain.service.controletrafego.ControleTrafegoService;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.seguranca.ContextoSeguranca;
import br.com.ec.domain.service.subtipoproduto.SubtipoProdutoService;
import br.com.ec.domain.service.usuario.UsuarioService;
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 ControleTrafegoBean extends AbstractBean<ControleTrafego> implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private String senhaUsuario;
        private String cpfCliente;
       
        private ControleTrafegoService controleTrafegoService;
        private UsuarioService usuarioService;
        private LojaService lojaService;
        private SubtipoProdutoService subtipoProdutoService;
        private ContextoSeguranca contextoSeguranca;
       
        private Vendedor vendedorSelecionado;
        private RankingControleTrafegoGeralDTO rankingControleTrafegoGeral;
        private List<ControleTrafego> listaControleTrafego;
        private List<ControleTrafego> listaControleTrafegoSemOpcoes;
        private List<RankingControleTrafegoDTO> rankingControleTrafegoUnissex;
        private List<RankingControleTrafegoDTO> rankingControleTrafegoMasculinos;
        private List<RankingControleTrafegoDTO> rankingControleTrafegoFemininos;

        private String tipoPeriodoConsulta;
        private Date dataInicial;
        private Date dataFinal;
       
        private List<SubtipoProduto> listaSubtipos;
       
        @Inject
        public ControleTrafegoBean(ControleTrafegoService controleTrafegoService, UsuarioService usuarioService, LojaService lojaService,
                        SubtipoProdutoService subtipoProdutoService, ContextoSeguranca contextoSeguranca) {
                this.controleTrafegoService = controleTrafegoService;
                this.usuarioService = usuarioService;
                this.lojaService = lojaService;
                this.subtipoProdutoService = subtipoProdutoService;
                this.contextoSeguranca = contextoSeguranca;
        }
       
        public Vendedor getVendedorSelecionado() {
                return vendedorSelecionado;
        }
        public void setVendedorSelecionado(Vendedor vendedorSelecionado) {
                this.vendedorSelecionado = vendedorSelecionado;
        }
       
        public RankingControleTrafegoGeralDTO getRankingControleTrafegoGeral() {
                return rankingControleTrafegoGeral;
        }
        public void setRankingControleTrafegoGeral(RankingControleTrafegoGeralDTO rankingControleTrafegoGeral) {
                this.rankingControleTrafegoGeral = rankingControleTrafegoGeral;
        }
       
        public List<ControleTrafego> getListaControleTrafego() {
                return listaControleTrafego;
        }
        public void setListaControleTrafego(List<ControleTrafego> listaControleTrafego) {
                this.listaControleTrafego = listaControleTrafego;
        }
       
        public List<ControleTrafego> getListaControleTrafegoSemOpcoes() {
                return listaControleTrafegoSemOpcoes;
        }
        public void setListaControleTrafegoSemOpcoes(List<ControleTrafego> listaControleTrafegoSemOpcoes) {
                this.listaControleTrafegoSemOpcoes = listaControleTrafegoSemOpcoes;
        }
       
        public List<RankingControleTrafegoDTO> getRankingControleTrafegoUnissex() {
                return rankingControleTrafegoUnissex;
        }
        public void setRankingControleTrafegoUnissex(List<RankingControleTrafegoDTO> rankingControleTrafegoUnissex) {
                this.rankingControleTrafegoUnissex = rankingControleTrafegoUnissex;
        }
       
        public List<RankingControleTrafegoDTO> getRankingControleTrafegoMasculinos() {
                return rankingControleTrafegoMasculinos;
        }
        public void setRankingControleTrafegoMasculinos(List<RankingControleTrafegoDTO> rankingControleTrafegoMasculinos) {
                this.rankingControleTrafegoMasculinos = rankingControleTrafegoMasculinos;
        }
       
        public List<RankingControleTrafegoDTO> getRankingControleTrafegoFemininos() {
                return rankingControleTrafegoFemininos;
        }
        public void setRankingControleTrafegoFemininos(List<RankingControleTrafegoDTO> rankingControleTrafegoFemininos) {
                this.rankingControleTrafegoFemininos = rankingControleTrafegoFemininos;
        }
       
        public TipoPeriodoConsulta[] getTiposPeriodoConsulta() {
                return TipoPeriodoConsulta.values();
        }
       
        public String getTipoPeriodoConsulta() {
                return tipoPeriodoConsulta;
        }
        public void setTipoPeriodoConsulta(String tipoPeriodoConsulta) {
                this.tipoPeriodoConsulta = tipoPeriodoConsulta;
        }
       
        public Date getDataInicial() {
                return dataInicial;
        }
        public void setDataInicial(Date dataInicial) {
                this.dataInicial = dataInicial;
        }
       
        public Date getDataFinal() {
                return dataFinal;
        }
        public void setDataFinal(Date dataFinal) {
                this.dataFinal = dataFinal;
        }
       
        public List<SubtipoProduto> getListaSubtipos() {
                if (VerificadorUtil.estaNulo(listaSubtipos)) {
                        setListaSubtipos(subtipoProdutoService.consultarTodosAtivos());
                }
                return listaSubtipos;
        }
        public void setListaSubtipos(List<SubtipoProduto> listaSubtipos) {
                this.listaSubtipos = listaSubtipos;
        }
       
        public Boolean ehTipoPeriodoEspecifico() {
                return getTipoPeriodoConsulta().equals(TipoPeriodoConsulta.PERIODO_ESPECIFICO.getValor());
        }
       
        public void atualizarPeriodo() {
                if (getTipoPeriodoConsulta().equals(TipoPeriodoConsulta.ULTIMOS_7_DIAS.getValor())) {
                        setDataInicial(new DataUtils().getDataComHorarioMinimo(DataUtils.acrescentarDias(DataUtils.getDataAtual(), -7)));
                        setDataFinal(new DataUtils().getDataComHorarioMaximo(DataUtils.getDataAtual()));
                }
                if (getTipoPeriodoConsulta().equals(TipoPeriodoConsulta.ULTIMOS_15_DIAS.getValor())) {
                        setDataInicial(new DataUtils().getDataComHorarioMinimo(DataUtils.acrescentarDias(DataUtils.getDataAtual(), -15)));
                        setDataFinal(new DataUtils().getDataComHorarioMaximo(DataUtils.getDataAtual()));
                }
                if (getTipoPeriodoConsulta().equals(TipoPeriodoConsulta.ULTIMOS_30_DIAS.getValor())) {
                        setDataInicial(new DataUtils().getDataComHorarioMinimo(DataUtils.acrescentarDias(DataUtils.getDataAtual(), -30)));
                        setDataFinal(new DataUtils().getDataComHorarioMaximo(DataUtils.getDataAtual()));
                }
                if (getTipoPeriodoConsulta().equals(TipoPeriodoConsulta.ULTIMOS_60_DIAS.getValor())) {
                        setDataInicial(new DataUtils().getDataComHorarioMinimo(DataUtils.acrescentarDias(DataUtils.getDataAtual(), -60)));
                        setDataFinal(new DataUtils().getDataComHorarioMaximo(DataUtils.getDataAtual()));
                }
                if (getTipoPeriodoConsulta().equals(TipoPeriodoConsulta.ULTIMOS_90_DIAS.getValor())) {
                        setDataInicial(new DataUtils().getDataComHorarioMinimo(DataUtils.acrescentarDias(DataUtils.getDataAtual(), -90)));
                        setDataFinal(new DataUtils().getDataComHorarioMaximo(DataUtils.getDataAtual()));
                }
                if (getTipoPeriodoConsulta().equals(TipoPeriodoConsulta.MES_ATUAL.getValor())) {
                        setDataInicial(new DataUtils().getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()));
                        setDataFinal(new DataUtils().getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()));
                }
        }
       
        @Override
        public void preCarregamento() {
                limparEntidade();
                setListaControleTrafegoSemOpcoes(controleTrafegoService.consultarControleTrafegoSemOpcoesParaValidar());
        }
       
        public void preencherRankings() throws CloneNotSupportedException {
                ControleTrafego controleTrafego = getEntidade().clone();
                if (VerificadorUtil.naoEstaNulo(getVendedorSelecionado())) {
                        Usuario usuario = new Usuario();
                        usuario.setPessoa(getVendedorSelecionado().getPessoa());
                        controleTrafego.setUsuario(usuario);
                }
                setRankingControleTrafegoGeral(controleTrafegoService.consultarRankingControleTrafegoGeral(getDataInicial(), getDataFinal(), controleTrafego));
                getRankingControleTrafegoGeral().preencherDadosPie();
                controleTrafego.setGeneroProduto(null);
                controleTrafego.setTipoMotivo(null);
                setListaControleTrafego(controleTrafegoService.consultarControleTrafego(getDataInicial(), getDataFinal(), controleTrafego));
               
                controleTrafego.setTipoMotivo(TipoMotivoAtendimento.SEM_OPCOES.getValor());
                controleTrafego.setGeneroProduto(TipoGenero.UNISSEX.getValor());
                setRankingControleTrafegoUnissex(controleTrafegoService.consultarRankingControleTrafegoResumido(getDataInicial(), getDataFinal(), controleTrafego));
                controleTrafego.setGeneroProduto(TipoGenero.MASCULINO.getValor());
                setRankingControleTrafegoMasculinos(controleTrafegoService.consultarRankingControleTrafegoResumido(getDataInicial(), getDataFinal(), controleTrafego));
                controleTrafego.setGeneroProduto(TipoGenero.FEMININO.getValor());
                setRankingControleTrafegoFemininos(controleTrafegoService.consultarRankingControleTrafegoResumido(getDataInicial(), getDataFinal(), controleTrafego));
               
                setListaControleTrafegoSemOpcoes(controleTrafegoService.consultarControleTrafegoSemOpcoesParaValidar());
        }

        @Override
        public void limparEntidade() {
                entidade = new ControleTrafego();
                if (VerificadorUtil.naoEstaNulo(getParametro("sequencialLoja"))) {
                        Loja loja = new Loja();
                        loja.setSequencial(new Long(getParametro("sequencialLoja").toString()));
                        entidade.setLoja(lojaService.consultarPorId(loja));
                }
                setSenhaUsuario("");
                this.setTipoPeriodoConsulta(TipoPeriodoConsulta.MES_ATUAL.getValor());
                atualizarPeriodo();
        }

        @Override
        public GenericService<ControleTrafego> getService() {
                return controleTrafegoService;
        }
       
        @Override
        public ControleTrafego getEntidade() {
                return entidade;
        }

        @Override
        public ControleTrafego getId() {
                return getEntidade();
        }
       
        public String getSenhaUsuario() {
                return senhaUsuario;
        }
        public void setSenhaUsuario(String senhaUsuario) {
                this.senhaUsuario = senhaUsuario;
        }
       
        public String getCpfCliente() {
                return VerificadorUtil.naoEstaNulo(cpfCliente)? cpfCliente.replace(".", "").replace("-", "") : cpfCliente;
        }
        public void setCpfCliente(String cpfCliente) {
                this.cpfCliente = cpfCliente;
        }
       
        public TipoMotivoAtendimento[] getTiposMotivoAtendimento() {
                return TipoMotivoAtendimento.values();
        }
       
        /***************************************************************/
       
        @Override
        public void cadastrar() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                Loja lojaSelecionada = getEntidade().getLoja();
                                controleTrafegoService.adicionarAtendimento(getEntidade(), senhaUsuario);
                                limparEntidade();
                                entidade.setLoja(lojaSelecionada);
                                LancadorMensagem.lancarSucesso("ATENDIMENTO ADICIONADO COM SUCESSO!");
                        }
                });
        }
       
        @Override
        public void alterar() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                /*
                                getEntidade().setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
                                getEntidade().setUsuarioAtendimento(usuarioService.consultarUsuarioPorSenha(senhaUsuario));
                                if (VerificadorUtil.naoEstaNulo(getEntidade().getProduto())) {
                                        getEntidade().setModelo(getEntidade().getProduto().getModelo());
                                        getEntidade().setGenero(getEntidade().getProduto().getGenero());
                                }
                                alterar(getEntidade());
                                */

                        }
                });
        }
       
        public void salvarValidacoes() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                for (ControleTrafego controleTrafego : getListaControleTrafegoSemOpcoes()) {
                                        if (controleTrafego.getValidar()) {
                                                controleTrafego.setDataVerificacao(DataUtils.getDataAtual());
                                                controleTrafego.setUsuarioVerificacao(contextoSeguranca.obterUsuario());
                                                controleTrafegoService.alterar(controleTrafego);
                                        }
                                }
                                setListaControleTrafegoSemOpcoes(controleTrafegoService.consultarControleTrafegoSemOpcoesParaValidar());
                                LancadorMensagem.lancarSucesso("VALIDAÇÕES SALVAS COM SUCESSO!");
                        }
                });
        }
       
        public void consultarSubtipos() {
                SubtipoProduto subtipoProduto = new SubtipoProduto();
                if (VerificadorUtil.naoEstaNuloOuVazio(getEntidade().getTipoProduto())) {
                        subtipoProduto.setTipo(getEntidade().getTipoProduto());
                }
                subtipoProduto.setAtivo(true);
                setListaSubtipos(subtipoProdutoService.consultar(subtipoProduto));
        }
       
        public void excluirAtendimento(final ControleTrafego controleTrafego) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                controleTrafegoService.excluir(controleTrafego);
                                adicionandoParametroArgsConfirmandoAcao(true);
                                setListaControleTrafegoSemOpcoes(controleTrafegoService.consultarControleTrafegoSemOpcoesParaValidar());
                                LancadorMensagem.lancarSucesso("ATENDIMENTO EXCLUÍDO COM SUCESSO");
                        }
                });
        }
       
       
}