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
());
}
});
}
}