Subversion Repositories Integrator Subversion

Rev

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

package br.com.ec.controller;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.ServletContext;

import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.springframework.context.annotation.Scope;

import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.ArquivoUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.AvaliacaoDTO;
import br.com.ec.domain.dto.AvaliacaoFuncionarioDTO;
import br.com.ec.domain.dto.AvaliacaoLojaDTO;
import br.com.ec.domain.dto.AvaliacaoLojaFuncionarioDTO;
import br.com.ec.domain.dto.FuncionarioDTO;
import br.com.ec.domain.dto.LojaDTO;
import br.com.ec.domain.dto.UsuarioDTO;
import br.com.ec.domain.dto.VendedorDTO;
import br.com.ec.domain.dto.VigenciaDTO;
import br.com.ec.domain.dto.consulta.ParametrosConsultaVendasDTO;
import br.com.ec.domain.dto.consulta.ParametrosPeriodoDTO;
import br.com.ec.domain.model.Avaliacao;
import br.com.ec.domain.model.AvaliacaoFuncionario;
import br.com.ec.domain.model.AvaliacaoFuncionarioId;
import br.com.ec.domain.model.AvaliacaoLoja;
import br.com.ec.domain.model.AvaliacaoLojaId;
import br.com.ec.domain.model.tipos.TipoComissionamento;
import br.com.ec.domain.model.tipos.TipoFaixaComissao;
import br.com.ec.domain.service.AvaliacaoFuncionarioService;
import br.com.ec.domain.service.AvaliacaoLojaService;
import br.com.ec.domain.service.AvaliacaoService;
import br.com.ec.domain.service.LojaService;
import br.com.ec.domain.service.UsuarioService;
import br.com.ec.domain.service.VendaService;
import br.com.ec.domain.service.VendedorService;
import br.com.ec.domain.service.VigenciaService;
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.exception.VerificadorLancamentoException.CommandRelatorioStreamedContent;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
import br.com.ec.web.util.TipoOperacao;

@Named
@Scope("view")
public class MetasAvaliacoesBean extends AbstractBean<Avaliacao> implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private VigenciaDTO vigenciaSelecionada;
        private VigenciaDTO vigenciaSelecionadaParaImportar;
        private AvaliacaoDTO avaliacaoSelecionada;
       
        private AvaliacaoLoja avaliacaoLojaSelecionada;
        private AvaliacaoFuncionario participanteSelecionado;
        private UsuarioDTO usuarioParticipanteSelecionado;
        private LojaDTO lojaParticipanteSelecionado;
        private FuncionarioDTO funcionarioSelecionado;
        private Long sequencialLojaSelecionada;
       
        private VigenciaService vigenciaService;
        private AvaliacaoService avaliacaoService;
        private AvaliacaoLojaService avaliacaoLojaService;
        private AvaliacaoFuncionarioService avaliacaoFuncionarioService;
        private UsuarioService usuarioService;
        private LojaService lojaService;
        private VendaService vendaService;
        private VendedorService vendedorService;
       
        @Inject
        public MetasAvaliacoesBean(VigenciaService vigenciaService, AvaliacaoService avaliacaoService,
                        AvaliacaoLojaService avaliacaoLojaService, AvaliacaoFuncionarioService avaliacaoFuncionarioService,
                        UsuarioService usuarioService, LojaService lojaService, VendaService vendaService,
                        VendedorService vendedorService) {
                this.vigenciaService = vigenciaService;
                this.avaliacaoService = avaliacaoService;
                this.avaliacaoLojaService = avaliacaoLojaService;
                this.avaliacaoFuncionarioService = avaliacaoFuncionarioService;
                this.usuarioService = usuarioService;
                this.lojaService = lojaService;
                this.vendaService = vendaService;
                this.vendedorService = vendedorService;
        }
       
        @Override
        public void preCarregamento() {
                limparEntidade();
        }
       
        @PostConstruct
        private void posCarregamento() {
                consultarMetasAvaliacoes();
        }

        @Override
        public void limparEntidade() {
                setEntidade(new Avaliacao());
        }
       
        @Override
        public void alterar() {
                super.alterar();
                redirecionarGestaoMensal();
        }
       
        @Override
        public GenericService<Avaliacao> getService() {
                return avaliacaoService;
        }
       
        @Override
        public Avaliacao getEntidade() {
                return entidade;
        }
       
        @Override
        public void preConsultar() {
                setTipoOperacao(TipoOperacao.CONSULTAR);
        }

        @Override
        public Avaliacao getId() {
                return getEntidade();
        }
       
        public VigenciaDTO getVigenciaSelecionada() {
                return vigenciaSelecionada;
        }
        public void setVigenciaSelecionada(VigenciaDTO vigenciaSelecionada) {
                this.vigenciaSelecionada = vigenciaSelecionada;
        }
       
        public VigenciaDTO getVigenciaSelecionadaParaImportar() {
                return vigenciaSelecionadaParaImportar;
        }
        public void setVigenciaSelecionadaParaImportar(VigenciaDTO vigenciaSelecionadaParaImportar) {
                this.vigenciaSelecionadaParaImportar = vigenciaSelecionadaParaImportar;
        }
       
        public AvaliacaoDTO getAvaliacaoSelecionada() {
                return avaliacaoSelecionada;
        }
        public void setAvaliacaoSelecionada(AvaliacaoDTO avaliacaoSelecionada) {
                this.avaliacaoSelecionada = avaliacaoSelecionada;
        }
       
        public AvaliacaoLoja getAvaliacaoLojaSelecionada() {
                return avaliacaoLojaSelecionada;
        }
        public void setAvaliacaoLojaSelecionada(AvaliacaoLoja avaliacaoLojaSelecionada) {
                this.avaliacaoLojaSelecionada = avaliacaoLojaSelecionada;
        }

        public AvaliacaoFuncionario getParticipanteSelecionado() {
                return participanteSelecionado;
        }
        public void setParticipanteSelecionado(AvaliacaoFuncionario participanteSelecionado) {
                this.participanteSelecionado = participanteSelecionado;
        }
       
        public Long getSequencialLojaSelecionada() {
                return sequencialLojaSelecionada;
        }
        public void setSequencialLojaSelecionada(Long sequencialLojaSelecionada) {
                this.sequencialLojaSelecionada = sequencialLojaSelecionada;
        }
       
        public UsuarioDTO getUsuarioParticipanteSelecionado() {
                return usuarioParticipanteSelecionado;
        }
        public void setUsuarioParticipanteSelecionado(UsuarioDTO usuarioParticipanteSelecionado) {
                this.usuarioParticipanteSelecionado = usuarioParticipanteSelecionado;
        }
       
        public LojaDTO getLojaParticipanteSelecionado() {
                return lojaParticipanteSelecionado;
        }
        public void setLojaParticipanteSelecionado(LojaDTO lojaParticipanteSelecionado) {
                this.lojaParticipanteSelecionado = lojaParticipanteSelecionado;
        }
       
        public FuncionarioDTO getFuncionarioSelecionado() {
                return funcionarioSelecionado;
        }
        public void setFuncionarioSelecionado(FuncionarioDTO funcionarioSelecionado) {
                this.funcionarioSelecionado = funcionarioSelecionado;
        }
       
        /***************************************************************/
       
        public TipoFaixaComissao[] getTiposFaixaComissao() {
                return TipoFaixaComissao.values();
        }
       
        public void atualizarValorComissao() {
                if (VerificadorUtil.naoEstaNuloOuVazio(getParticipanteSelecionado().getPorcentagemComissao())) {
                        getParticipanteSelecionado().setValorComissao(consultarVendasDoPeriodo(getParticipanteSelecionado()) * getParticipanteSelecionado().getPorcentagemComissao() / 100);
                }
        }
       
        private Double consultarVendasDoPeriodo(AvaliacaoFuncionario avaliacaoFuncionario) {
                ParametrosConsultaVendasDTO parametrosConsultaVendasDTO = new ParametrosConsultaVendasDTO();
                VendedorDTO vendedorDTO = vendedorService.consultarVendedorPorPessoa(avaliacaoFuncionario.getFuncionario().getSequencialDaPessoa());
                parametrosConsultaVendasDTO.setSequencialVendedor(vendedorDTO.getSequencial());
                ParametrosPeriodoDTO parametrosPeriodoDTO = new ParametrosPeriodoDTO();
                parametrosPeriodoDTO.setDataInicial(avaliacaoFuncionario.getAvaliacao().getVigencia().getDataInicio());
                parametrosPeriodoDTO.setDataFinal(avaliacaoFuncionario.getAvaliacao().getVigencia().getDataFim());
                parametrosConsultaVendasDTO.setParametrosPeriodoDTO(parametrosPeriodoDTO);
                parametrosConsultaVendasDTO.setIndicadorComissionado(true);
                return vendaService.obterValorTotalBrutoDeVendasRetirandoValorCuponsUtilizados(parametrosConsultaVendasDTO);
        }
       
        private Double consultarVendasDoPeriodo(AvaliacaoLoja avaliacaoLoja) {
                ParametrosConsultaVendasDTO parametrosConsultaVendasDTO = new ParametrosConsultaVendasDTO();
                ParametrosPeriodoDTO parametrosPeriodoDTO = new ParametrosPeriodoDTO();
                parametrosPeriodoDTO.setDataInicial(avaliacaoLoja.getAvaliacao().getVigencia().getDataInicio());
                parametrosPeriodoDTO.setDataFinal(avaliacaoLoja.getAvaliacao().getVigencia().getDataFim());
                parametrosConsultaVendasDTO.setSequencialLoja(avaliacaoLoja.getSequencialDaLoja());
                parametrosConsultaVendasDTO.setParametrosPeriodoDTO(parametrosPeriodoDTO);
                parametrosConsultaVendasDTO.setIndicadorComissionado(true);
                return vendaService.obterValorTotalBrutoDeVendasRetirandoValorCuponsUtilizados(parametrosConsultaVendasDTO);
        }
       
        private void consultarMetasAvaliacoes() {
                if (VerificadorUtil.estaNulo(vigenciaSelecionada)) {
                        if (VerificadorUtil.naoEstaNulo(getParametro("vigencia"))) {
                                setVigenciaSelecionada(vigenciaService.consultarVigencia(new Long(getParametro("vigencia").toString())));
                        }
                }
               
                AvaliacaoDTO avaliacaoDTO = avaliacaoService.consultarAvaliacao(getVigenciaSelecionada().getSequencial());
                if (VerificadorUtil.naoEstaNulo(avaliacaoDTO)) {
                        VigenciaDTO vigenciaDetalhada = vigenciaService.consultarVigencia(avaliacaoDTO.getVigenciaDTO().getSequencial());
                        setVigenciaSelecionada(vigenciaDetalhada);
                        // DETALHAR AVALIAÇÃO COMPLETA
                        AvaliacaoDTO avaliacaoDetalhada = avaliacaoService.consultarAvaliacaoCompleta(avaliacaoDTO.getSequencial());
                        setAvaliacaoSelecionada(avaliacaoDetalhada);
                        Avaliacao avaliacao = avaliacaoService.consultarPorId(new Avaliacao(avaliacaoDTO.getSequencial()));
                        setEntidade(avaliacao);
                }
        }
       
        public void redirecionarGestaoMensal() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                try {
                                        LancadorMensagem.redirecionarTela("/sistema/gestao_mensal/gestao_mensal.xhtml");
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                });
        }
       
        public void selecionarLoja(AvaliacaoLojaDTO avaliacaoLojaDTO) {
                AvaliacaoLojaId avaliacaoLojaId = new AvaliacaoLojaId();
                avaliacaoLojaId.setSequencialAvaliacao(avaliacaoLojaDTO.getAvaliacaoDTO().getSequencial());
                avaliacaoLojaId.setSequencialLoja(avaliacaoLojaDTO.getLojaDTO().getSequencial());
               
                AvaliacaoLoja avaliacaoLoja = avaliacaoLojaService.detalhar(avaliacaoLojaId);
                avaliacaoLoja.setValorTotalVendido(consultarVendasDoPeriodo(avaliacaoLoja));
                setAvaliacaoLojaSelecionada(avaliacaoLoja);
        }
       
        public void selecionarParticipante(AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO) {
                AvaliacaoFuncionarioId avaliacaoFuncionarioId = new AvaliacaoFuncionarioId();
                avaliacaoFuncionarioId.setSequencialAvaliacao(avaliacaoFuncionarioDTO.getSequencialDaAvaliacao());
                avaliacaoFuncionarioId.setSequencialFuncionario(avaliacaoFuncionarioDTO.getSequencialDoFuncionario());

                AvaliacaoFuncionario avaliacaoFuncionario = avaliacaoFuncionarioService.detalhar(avaliacaoFuncionarioId);
                setParticipanteSelecionado(avaliacaoFuncionario);
                LojaDTO lojaParticipanteSelecionado = lojaService.consultarLojaPeloId(avaliacaoFuncionario.getSequencialDaLoja());
                setLojaParticipanteSelecionado(lojaParticipanteSelecionado);
                setUsuarioParticipanteSelecionado(usuarioService.consultarPorPessoa(avaliacaoFuncionario.getFuncionario().getSequencialDaPessoa()));
                getParticipanteSelecionado().setValorTotalVendido(consultarVendasDoPeriodo(getParticipanteSelecionado()));
//              setItemSelecionado(new AvaliacaoFuncionarioItemAvaliacao());
//              getParticipanteSelecionado().setValorTotalVendidoVivo(consultarVendasVivoDoPeriodo(getParticipanteSelecionado()));
        }
       
       
        public void alterarMetaAvaliacao() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                avaliacaoFuncionarioService.alterarMetaAvaliacao(getParticipanteSelecionado(), getLojaParticipanteSelecionado());
                                consultarMetasAvaliacoes();
                                LancadorMensagem.lancarSucesso("META/AVALIAÇÃO DO PARTICIPANTE ALTERADA COM SUCESSO");
                        }
                });
        }
       
        public void alterarMetaAvaliacaoLoja() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                avaliacaoLojaService.alterar(getAvaliacaoLojaSelecionada());
                                consultarMetasAvaliacoes();
                                LancadorMensagem.lancarSucesso("META DA LOJA ALTERADA COM SUCESSO");
                        }
                });
        }
       
        public void importarAvaliacaoAnterior() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                avaliacaoService.importarAvaliacaoAnterior(getVigenciaSelecionada(), getVigenciaSelecionadaParaImportar());
                                consultarMetasAvaliacoes();
                                LancadorMensagem.lancarSucesso("AVALIAÇÃO ANTERIOR IMPORTADA COM SUCESSO");
                        }
                });
        }
       
        public void adicionarLojaNaAvaliacao() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                avaliacaoService.adicionarLojaNaAvaliacao(getAvaliacaoSelecionada(), getLojaParticipanteSelecionado());
                                consultarMetasAvaliacoes();
                                LancadorMensagem.lancarSucesso("LOJA ADICIONADA NA AVALIAÇÃO COM SUCESSO");
                        }
                });
        }
       
        public void removerLojaDaAvaliacao(AvaliacaoLojaDTO avaliacaoLojaDTO) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                avaliacaoService.removerLojaDaAvaliacao(getAvaliacaoSelecionada(), avaliacaoLojaDTO.getLojaDTO());
                                consultarMetasAvaliacoes();
                                LancadorMensagem.lancarSucesso("LOJA REMOVIDA DA AVALIAÇÃO COM SUCESSO");
                        }
                });
        }
       
        public void adicionarParticipanteNaAvaliacao() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                avaliacaoService.adicionarParticipanteNaAvaliacao(getAvaliacaoSelecionada(), getLojaParticipanteSelecionado(), getFuncionarioSelecionado());
                                consultarMetasAvaliacoes();
                                LancadorMensagem.lancarSucesso("LOJA ADICIONADA NA AVALIAÇÃO COM SUCESSO");
                        }
                });
        }
       
        public void removerParticipanteDaAvaliacao(AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                avaliacaoService.removerParticipanteDaAvaliacao(avaliacaoFuncionarioDTO);
                                consultarMetasAvaliacoes();
                                LancadorMensagem.lancarSucesso("PARTICIPANTE REMOVIDO DA AVALIAÇÃO COM SUCESSO");
                        }
                });
        }
       
        public StreamedContent emitirRelatorioImportacaoFolhaPagamento() throws Exception {
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
                        @Override
                        public StreamedContent execute() {
                                return avaliacaoService.emitirRelatorioImportacaoFolhaPagamento(getAvaliacaoSelecionada());
                        }
                });
        }
       
}