package br.com.ec.controller;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.file.UploadedFile;
import org.springframework.context.annotation.Scope;
import br.com.ec.controller.consultademanda.AvaliacaoConsultaPorDemanda;
import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.AvaliacaoDTO;
import br.com.ec.domain.dto.ParcelaDTO;
import br.com.ec.domain.dto.ValeTransporteDTO;
import br.com.ec.domain.dto.ValeTransporteFuncionarioDTO;
import br.com.ec.domain.dto.ValeTransporteFuncionarioExtraidoDTO;
import br.com.ec.domain.dto.VigenciaDTO;
import br.com.ec.domain.model.Avaliacao;
import br.com.ec.domain.model.tipos.TipoSituacoesVigencia;
import br.com.ec.domain.service.AvaliacaoService;
import br.com.ec.domain.service.ParcelaService;
import br.com.ec.domain.service.ValeTransporteService;
import br.com.ec.domain.service.VigenciaService;
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;
import br.com.ec.web.util.TipoOperacao;
@Named
@Scope
("view")
public class ValeTransporteBean
extends AbstractBean
<Avaliacao
> implements Serializable {
private static final long serialVersionUID = 1L
;
private ValeTransporteDTO valeTransporteDTO
;
private VigenciaDTO vigenciaSelecionada
;
private ValeTransporteService valeTransporteService
;
private VigenciaService vigenciaService
;
private AvaliacaoService avaliacaoService
;
private UploadedFile arquivoParaImportacao
;
private Date dataPagamento =
new Date();
private ParcelaService parcelaService
;
private AvaliacaoConsultaPorDemanda lazy
;
private ParametrosConsulta
<Avaliacao
> parametrosConsultaAvaliacao
;
@Inject
public ValeTransporteBean
(AvaliacaoConsultaPorDemanda lazy, ValeTransporteService valeTransporteService,
VigenciaService vigenciaService, AvaliacaoService avaliacaoService, ParcelaService parcelaService
) {
this.
lazy = lazy
;
this.
valeTransporteService = valeTransporteService
;
this.
vigenciaService= vigenciaService
;
this.
avaliacaoService = avaliacaoService
;
this.
parcelaService = parcelaService
;
}
@
Override
public void preCarregamento
() {
parametrosConsultaAvaliacao =
new ParametrosConsulta
<Avaliacao
>();
parametrosConsultaAvaliacao.
setEntidade(new Avaliacao
());
prepararConsultaDemanda
();
limparEntidade
();
}
@PostConstruct
private void posCarregamento
() {
if (VerificadorUtil.
naoEstaNulo(getParametro
("vigencia"))) {
setVigenciaSelecionada
(vigenciaService.
consultarVigencia(new Long(getParametro
("vigencia").
toString())));
if (VerificadorUtil.
naoEstaNulo(getVigenciaSelecionada
())) {
detalharValeTransporte
();
}
}
}
private void detalharValeTransporte
() {
AvaliacaoDTO avaliacaoDTO = avaliacaoService.
consultarAvaliacao(getVigenciaSelecionada
().
getSequencial());
if (VerificadorUtil.
naoEstaNulo(avaliacaoDTO
)) {
setValeTransporteDTO
(valeTransporteService.
detalharValeTransporte(avaliacaoDTO
));
}
}
@
Override
public void limparEntidade
() {
setEntidade
(new Avaliacao
());
}
@
Override
public GenericService
<Avaliacao
> getService
() {
return valeTransporteService
;
}
@
Override
public Avaliacao getEntidade
() {
return entidade
;
}
@
Override
public void preConsultar
() {
setTipoOperacao
(TipoOperacao.
CONSULTAR);
}
@
Override
public void preAlterar
(Avaliacao avaliacao
) {
super.
preAlterar(avaliacao
);
setValeTransporteDTO
(valeTransporteService.
detalharValeTransporte(new AvaliacaoDTO
(avaliacao.
getSequencial(), avaliacao.
getSequencialDaVigencia(), avaliacao.
getDescricaoDaVigencia())));
}
@
Override
public Avaliacao getId
() {
return getEntidade
();
}
public AvaliacaoConsultaPorDemanda getLazy
() {
return lazy
;
}
public void setLazy
(AvaliacaoConsultaPorDemanda lazy
) {
this.
lazy = lazy
;
}
public void prepararConsultaDemanda
() {
lazy.
setarParametrosConsulta(getParametrosConsultaAvaliacao
());
}
public ParametrosConsulta
<Avaliacao
> getParametrosConsultaAvaliacao
() {
return parametrosConsultaAvaliacao
;
}
public void setParametrosConsultaAvaliacao
(ParametrosConsulta
<Avaliacao
> parametrosConsultaAvaliacao
) {
this.
parametrosConsultaAvaliacao = parametrosConsultaAvaliacao
;
}
public ValeTransporteDTO getValeTransporteDTO
() {
return valeTransporteDTO
;
}
public void setValeTransporteDTO
(ValeTransporteDTO valeTransporteDTO
) {
this.
valeTransporteDTO = valeTransporteDTO
;
}
public VigenciaDTO getVigenciaSelecionada
() {
return vigenciaSelecionada
;
}
public void setVigenciaSelecionada
(VigenciaDTO vigenciaSelecionada
) {
this.
vigenciaSelecionada = vigenciaSelecionada
;
}
public UploadedFile getArquivoParaImportacao
() {
return arquivoParaImportacao
;
}
public void setArquivoParaImportacao
(UploadedFile arquivoParaImportacao
) {
this.
arquivoParaImportacao = arquivoParaImportacao
;
}
public Date getDataPagamento
() {
return dataPagamento
;
}
public void setDataPagamento
(Date dataPagamento
) {
this.
dataPagamento = dataPagamento
;
}
public List<ValeTransporteFuncionarioExtraidoDTO
> funcionariosExtraidosForaDaAvaliacao
() {
Double valorTotalForaDaAvaliacao =
new Double(0.0);
List<ValeTransporteFuncionarioExtraidoDTO
> extraidosForaDaAvaliacao =
new ArrayList<ValeTransporteFuncionarioExtraidoDTO
>();
if (VerificadorUtil.
naoEstaNuloOuVazio(getValeTransporteDTO
())) {
if (VerificadorUtil.
naoEstaNuloOuVazio(getValeTransporteDTO
().
getFuncionariosExtraidos())) {
for (ValeTransporteFuncionarioExtraidoDTO extraido : getValeTransporteDTO
().
getFuncionariosExtraidos()) {
if (!extraido.
getAdicionado()) {
valorTotalForaDaAvaliacao += extraido.
getValorVencimentos();
extraidosForaDaAvaliacao.
add(extraido
);
}
}
}
}
return extraidosForaDaAvaliacao
;
}
public Double valorTotalImportadoSemAusentes
() {
Double valorTotalForaDaAvaliacao =
new Double(0.0);
List<ValeTransporteFuncionarioExtraidoDTO
> extraidosForaDaAvaliacao =
new ArrayList<ValeTransporteFuncionarioExtraidoDTO
>();
if (VerificadorUtil.
naoEstaNuloOuVazio(getValeTransporteDTO
().
getFuncionariosExtraidos())) {
for (ValeTransporteFuncionarioExtraidoDTO extraido : getValeTransporteDTO
().
getFuncionariosExtraidos()) {
if (!extraido.
getAdicionado()) {
valorTotalForaDaAvaliacao += extraido.
getValorVencimentos();
extraidosForaDaAvaliacao.
add(extraido
);
}
}
return getValeTransporteDTO
().
getValorTotalImportado() - valorTotalForaDaAvaliacao
;
}
return valorTotalForaDaAvaliacao
;
}
/**************************************************/
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 uploadArquivoFlash
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setValeTransporteDTO
(valeTransporteService.
importarValeTransporte(getArquivoParaImportacao
().
getContent(), getValeTransporteDTO
()));
LancadorMensagem.
lancarSucesso("ARQUIVO FLASH IMPORTADO COM SUCESSO!");
}
});
}
public void atualizarValoresImportados
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (ValeTransporteFuncionarioDTO valeTransporteFuncionario : getValeTransporteDTO
().
getFuncionarios()) {
if (VerificadorUtil.
naoEstaNulo(valeTransporteFuncionario.
getValorValeTransporteImportado()) &&
!VerificadorUtil.
isListaNulaOuVazia(valeTransporteFuncionario.
getParcelas())) {
valeTransporteFuncionario.
getParcelas().
get(0).
setValor(valeTransporteFuncionario.
getValorValeTransporteImportado());
valeTransporteService.
atualizarValorParcela(valeTransporteFuncionario.
getParcelas().
get(0));
}
}
LancadorMensagem.
lancarSucesso("VALORES ATUALIZADOS COM SUCESSO");
}
});
}
public void atualizarCentrosDeCustos
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (ValeTransporteFuncionarioDTO valeTransporteFuncionario : getValeTransporteDTO
().
getFuncionarios()) {
if (!VerificadorUtil.
isListaNulaOuVazia(valeTransporteFuncionario.
getParcelas())) {
if (VerificadorUtil.
naoEstaNulo(valeTransporteFuncionario.
getParcelas().
get(0))) {
ParcelaDTO parcela = valeTransporteFuncionario.
getParcelas().
get(0);
Long sequencialConta = parcela.
getContaDTO().
getSequencial();
valeTransporteService.
atualizarCentroDeCustos(sequencialConta, valeTransporteFuncionario.
getAvaliacaoFuncionarioDTO().
getSequencialDaLoja());
}
}
}
detalharValeTransporte
();
setArquivoParaImportacao
(null);
LancadorMensagem.
lancarSucesso("CENTROS DE CUSTOS ATUALIZADOS COM SUCESSO");
}
});
}
public void efetuarPagamentos
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (ValeTransporteFuncionarioDTO valeTransporteFuncionario : getValeTransporteDTO
().
getFuncionarios()) {
if (!VerificadorUtil.
isListaNulaOuVazia(valeTransporteFuncionario.
getParcelas())) {
parcelaService.
efetuarPagamentoRecebimento(valeTransporteFuncionario.
getParcelas().
get(0), getDataPagamento
());
vigenciaService.
alterarSituacaoFolha(getVigenciaSelecionada
().
getSequencial(), TipoSituacoesVigencia.
EM_ANDAMENTO_A.
getValor());
}
}
detalharValeTransporte
();
setArquivoParaImportacao
(null);
LancadorMensagem.
lancarSucesso("PAGAMENTOS EFETUADOS COM SUCESSO");
}
});
}
public void finalizarValeTransporte
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
vigenciaService.
alterarSituacaoValeTransporte(getVigenciaSelecionada
().
getSequencial(), TipoSituacoesVigencia.
FINALIZADO_F.
getValor());
setArquivoParaImportacao
(null);
redirecionarGestaoMensal
();
LancadorMensagem.
lancarSucesso("VALE TRANSPORTE FINALIZADA COM SUCESSO");
}
});
}
}