package br.com.ec.controller;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.charts.bar.BarChartModel;
import org.primefaces.model.charts.pie.PieChartModel;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.domain.dto.AtestadoFuncionarioDTO;
import br.com.ec.domain.dto.AvaliacaoFuncionarioDTO;
import br.com.ec.domain.dto.ExameFuncionarioDTO;
import br.com.ec.domain.dto.FuncionarioFeriasDTO;
import br.com.ec.domain.dto.FormaPagamentoDTO;
import br.com.ec.domain.dto.FuncionarioDTO;
import br.com.ec.domain.dto.LojaDTO;
import br.com.ec.domain.dto.PessoaDTO;
import br.com.ec.domain.dto.PontoDTO;
import br.com.ec.domain.dto.consulta.ParametrosConsultaVendasDTO;
import br.com.ec.domain.dto.consulta.ParametrosPeriodoDTO;
import br.com.ec.domain.dto.grafico.GraficoBarraDTO;
import br.com.ec.domain.model.tipos.TipoProduto;
import br.com.ec.domain.service.AvaliacaoFuncionarioService;
import br.com.ec.domain.service.FuncionarioService;
import br.com.ec.domain.service.GraficoService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
@Named
@Scope
("view")
public class RelatorioAnaliticoBean
extends AbstractBean
<FuncionarioDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private FuncionarioService funcionarioService
;
private GraficoService graficoService
;
private AvaliacaoFuncionarioService avaliacaoFuncionarioService
;
private List<FuncionarioDTO
> listaFuncionariosDTO
;
private Long sequencialFuncionarioSelecionado
;
private FuncionarioDTO funcionarioSelecionado
;
private ParametrosPeriodoDTO parametrosPeriodoDTO
;
private Boolean graficoConsultado
;
private GraficoBarraDTO graficoVendas
;
private GraficoBarraDTO graficoPercentuaisMeta
;
private AvaliacaoFuncionarioDTO avaliacaoFuncionarioSelecionada
;
@Inject
public RelatorioAnaliticoBean
(FuncionarioService funcionarioService, GraficoService graficoService, AvaliacaoFuncionarioService avaliacaoFuncionarioService
) {
this.
funcionarioService = funcionarioService
;
this.
graficoService = graficoService
;
this.
avaliacaoFuncionarioService = avaliacaoFuncionarioService
;
}
@
Override
public GenericService
<FuncionarioDTO
> getService
() {
return null;
}
@
Override
public FuncionarioDTO getId
() {
return null;
}
@
Override
public void preCarregamento
() {
limparEntidade
();
consultarFuncionariosAdmitidos
();
}
@
Override
public void limparEntidade
() {
setEntidade
(new FuncionarioDTO
());
setParametrosPeriodoDTO
(new ParametrosPeriodoDTO
());
setFuncionarioSelecionado
(null);
setGraficoConsultado
(false);
}
public TipoProduto
[] getTiposProduto
() {
return TipoProduto.
values();
}
public List<FuncionarioDTO
> getListaFuncionariosDTO
() {
return listaFuncionariosDTO
;
}
public void setListaFuncionariosDTO
(List<FuncionarioDTO
> listaFuncionariosDTO
) {
this.
listaFuncionariosDTO = listaFuncionariosDTO
;
}
public Long getSequencialFuncionarioSelecionado
() {
return sequencialFuncionarioSelecionado
;
}
public void setSequencialFuncionarioSelecionado
(Long sequencialFuncionarioSelecionado
) {
this.
sequencialFuncionarioSelecionado = sequencialFuncionarioSelecionado
;
}
public FuncionarioDTO getFuncionarioSelecionado
() {
return funcionarioSelecionado
;
}
public void setFuncionarioSelecionado
(FuncionarioDTO funcionarioSelecionado
) {
this.
funcionarioSelecionado = funcionarioSelecionado
;
}
public ParametrosPeriodoDTO getParametrosPeriodoDTO
() {
return parametrosPeriodoDTO
;
}
public void setParametrosPeriodoDTO
(ParametrosPeriodoDTO parametrosPeriodoDTO
) {
this.
parametrosPeriodoDTO = parametrosPeriodoDTO
;
}
public Boolean getGraficoConsultado
() {
return graficoConsultado
;
}
public void setGraficoConsultado
(Boolean graficoConsultado
) {
this.
graficoConsultado = graficoConsultado
;
}
public GraficoBarraDTO getGraficoVendas
() {
return graficoVendas
;
}
public void setGraficoVendas
(GraficoBarraDTO graficoVendas
) {
this.
graficoVendas = graficoVendas
;
}
public GraficoBarraDTO getGraficoPercentuaisMeta
() {
return graficoPercentuaisMeta
;
}
public void setGraficoPercentuaisMeta
(GraficoBarraDTO graficoPercentuaisMeta
) {
this.
graficoPercentuaisMeta = graficoPercentuaisMeta
;
}
public AvaliacaoFuncionarioDTO getAvaliacaoFuncionarioSelecionada
() {
return avaliacaoFuncionarioSelecionada
;
}
public void setAvaliacaoFuncionarioSelecionada
(AvaliacaoFuncionarioDTO avaliacaoFuncionarioSelecionada
) {
this.
avaliacaoFuncionarioSelecionada = avaliacaoFuncionarioSelecionada
;
}
/**********************************/
public void consultarFuncionariosAdmitidos
() {
setListaFuncionariosDTO
(funcionarioService.
consultarFuncionariosAdmitidos());
}
public void analisarFuncionario
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
FuncionarioDTO funcionarioDTO = funcionarioService.
analisarFuncionario(getFuncionarioSelecionado
());
setFuncionarioSelecionado
(funcionarioDTO
);
}
});
}
public void gerarGraficosFuncionario
() {
setGraficoConsultado
(true);
ParametrosConsultaVendasDTO parametrosConsulta =
new ParametrosConsultaVendasDTO
();
parametrosConsulta.
setParametrosPeriodoDTO(getParametrosPeriodoDTO
());
parametrosConsulta.
setVendedorSelecionado(getFuncionarioSelecionado
().
getVendedorDTO());
parametrosConsulta.
setFormasDePagamentoDTO(new FormaPagamentoDTO
[0]);
setGraficoVendas
(new GraficoBarraDTO
(parametrosConsulta
));
setGraficoVendas
(graficoService.
gerarGraficoVendas(getGraficoVendas
().
getParametrosConsulta(),
null));
setGraficoPercentuaisMeta
(graficoService.
gerarGraficoPercentuaisMeta(getGraficoVendas
().
getParametrosConsulta()));
/*********************/
BarChartModel graficoComparativoCustosLucro = funcionarioService.
consultarGraficoComparativoCustosLucro(getFuncionarioSelecionado
().
getSequencialFuncionario(), getParametrosPeriodoDTO
());
getFuncionarioSelecionado
().
setGraficoComparativoCustosLucro(graficoComparativoCustosLucro
);
PieChartModel graficoTiposProdutos = funcionarioService.
consultarGraficoTiposProdutos(getFuncionarioSelecionado
().
getSequencialFuncionario(), getParametrosPeriodoDTO
(),
Arrays.
asList(getTiposProduto
()));
getFuncionarioSelecionado
().
setGraficoTiposProdutos(graficoTiposProdutos
);
PieChartModel graficoFormasPagamento = funcionarioService.
consultarGraficoFormasPagamento(getFuncionarioSelecionado
().
getSequencialFuncionario(), getParametrosPeriodoDTO
());
getFuncionarioSelecionado
().
setGraficoFormasPagamento(graficoFormasPagamento
);
}
public void consultarAvaliacoes
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getFuncionarioSelecionado
().
setAvaliacoesDTO(avaliacaoFuncionarioService.
consultarAvaliacoesFuncionario(getFuncionarioSelecionado
().
getSequencialFuncionario()));
}
});
}
public void detalharAvaliacao
(final AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
avaliacaoFuncionarioDTO.
setItensAvaliacao(avaliacaoFuncionarioService.
consultarItensDaAvaliacao(avaliacaoFuncionarioDTO.
getSequencialFuncionario(), avaliacaoFuncionarioDTO.
getSequencialAvaliacao()));
setAvaliacaoFuncionarioSelecionada
(avaliacaoFuncionarioDTO
);
}
});
}
// TODO: IMPLEMENTAÇÃO PENDENTE
public void consultarFerias
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
List<FuncionarioFeriasDTO
> feriasDTO =
new ArrayList<FuncionarioFeriasDTO
>();
FuncionarioFeriasDTO funcionarioFeriasDTO =
new FuncionarioFeriasDTO
();
funcionarioFeriasDTO.
setDataInicio(DataUtils.
converterStringParaData("01/09/2021"));
funcionarioFeriasDTO.
setDataFim(DataUtils.
converterStringParaData("30/09/2021"));
funcionarioFeriasDTO.
setDataInicioAquisicao(DataUtils.
converterStringParaData("02/07/2019"));
funcionarioFeriasDTO.
setDataFimAquisicao(DataUtils.
converterStringParaData("01/07/2020"));
funcionarioFeriasDTO.
setConfirmada(true);
funcionarioFeriasDTO.
setObservacao("");
feriasDTO.
add(funcionarioFeriasDTO
);
funcionarioFeriasDTO =
new FuncionarioFeriasDTO
();
funcionarioFeriasDTO.
setDataInicio(DataUtils.
converterStringParaData("01/10/2019"));
funcionarioFeriasDTO.
setDataFim(DataUtils.
converterStringParaData("30/10/2019"));
funcionarioFeriasDTO.
setDataInicioAquisicao(DataUtils.
converterStringParaData("02/07/2018"));
funcionarioFeriasDTO.
setDataFimAquisicao(DataUtils.
converterStringParaData("01/07/2019"));
funcionarioFeriasDTO.
setConfirmada(true);
funcionarioFeriasDTO.
setObservacao("");
feriasDTO.
add(funcionarioFeriasDTO
);
getFuncionarioSelecionado
().
setFeriasDTO(feriasDTO
);
}
});
}
// TODO: IMPLEMENTAÇÃO PENDENTE
public void consultarExames
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
List<ExameFuncionarioDTO
> examesDTO =
new ArrayList<ExameFuncionarioDTO
>();
ExameFuncionarioDTO exameDTO =
new ExameFuncionarioDTO
();
exameDTO.
setDataPrevista(DataUtils.
converterStringParaData("01/05/2021"));
exameDTO.
setTipoExame("P");
examesDTO.
add(exameDTO
);
exameDTO =
new ExameFuncionarioDTO
();
exameDTO.
setDataPrevista(DataUtils.
converterStringParaData("01/05/2020"));
exameDTO.
setDataRealizada(DataUtils.
converterStringParaData("01/05/2020"));
exameDTO.
setTipoExame("P");
examesDTO.
add(exameDTO
);
exameDTO =
new ExameFuncionarioDTO
();
exameDTO.
setDataRealizada(DataUtils.
converterStringParaData("01/05/2019"));
exameDTO.
setTipoExame("A");
examesDTO.
add(exameDTO
);
getFuncionarioSelecionado
().
setExamesDTO(examesDTO
);
}
});
}
// TODO: IMPLEMENTAÇÃO PENDENTE
public void consultarAtestados
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
List<AtestadoFuncionarioDTO
> atestadosDTO =
new ArrayList<AtestadoFuncionarioDTO
>();
AtestadoFuncionarioDTO atestadoDTO =
new AtestadoFuncionarioDTO
();
atestadoDTO.
setDataAtestado(DataUtils.
converterStringParaData("01/11/2020"));
atestadoDTO.
setQuantidadeDias(new Long(15));
atestadoDTO.
setCodigoCid("Y71");
atestadoDTO.
setObservacao("COVID");
atestadosDTO.
add(atestadoDTO
);
atestadoDTO =
new AtestadoFuncionarioDTO
();
atestadoDTO.
setDataAtestado(DataUtils.
converterStringParaData("01/09/2020"));
atestadoDTO.
setQuantidadeDias(new Long(3));
atestadoDTO.
setCodigoCid("Y59");
atestadoDTO.
setObservacao("");
atestadosDTO.
add(atestadoDTO
);
getFuncionarioSelecionado
().
setAtestadosDTO(atestadosDTO
);
}
});
}
// TODO: IMPLEMENTAÇÃO PENDENTE
public void consultarPontoEletronico
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
List<PontoDTO
> pontosDTO =
new ArrayList<PontoDTO
>();
PontoDTO pontoDTO =
new PontoDTO
();
LojaDTO lojaDTO =
new LojaDTO
();
lojaDTO.
setDescricao("QUIOSQUE BIG GRUTA");
pontoDTO.
setLojaDTO(lojaDTO
);
PessoaDTO pessoaDTO =
new PessoaDTO
();
pessoaDTO.
setNome(getFuncionarioSelecionado
().
getNome());
pontoDTO.
setPessoaDTO(pessoaDTO
);
pontoDTO.
setDataPonto(DataUtils.
converterStringParaData("13/08/2021"));
pontoDTO.
setDataHoraPontoInicio(DataUtils.
converterStringParaDataComHorario("13/08/2021 16:00:00"));
pontoDTO.
setDataHoraPontoFim(DataUtils.
converterStringParaDataComHorario("13/08/2021 16:00:00"));
pontoDTO.
setDataHoraIntervaloInicio(DataUtils.
converterStringParaDataComHorario("13/08/2021 16:00:00"));
pontoDTO.
setDataHoraIntervaloFim(DataUtils.
converterStringParaDataComHorario("13/08/2021 16:00:00"));
pontoDTO.
setObservacao("");
pontosDTO.
add(pontoDTO
);
getFuncionarioSelecionado
().
setPontosDTO(pontosDTO
);
}
});
}
}