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.event.FileUploadEvent;
import org.primefaces.model.StreamedContent;
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.FolhaPagamentoDTO;
import br.com.ec.domain.dto.FolhaPagamentoFuncionarioDTO;
import br.com.ec.domain.dto.FolhaPagamentoFuncionarioExtraidoDTO;
import br.com.ec.domain.dto.ParcelaDTO;
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.FolhaPagamentoService;
import br.com.ec.domain.service.ParcelaService;
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.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 FolhaPagamentoBean
extends AbstractBean
<Avaliacao
> implements Serializable {
private static final long serialVersionUID = 1L
;
private FolhaPagamentoDTO folhaPagamentoDTO
;
private VigenciaDTO vigenciaSelecionada
;
private FolhaPagamentoService folhaPagamentoService
;
private VigenciaService vigenciaService
;
private AvaliacaoService avaliacaoService
;
private UploadedFile arquivoParaImportacao
;
private List<byte[]> arquivosImportados
;
private String tituloEmail =
"CONTRACHEQUE";
private Date dataPagamento =
new Date();
private ParcelaService parcelaService
;
private AvaliacaoConsultaPorDemanda lazy
;
private ParametrosConsulta
<Avaliacao
> parametrosConsultaAvaliacao
;
@Inject
public FolhaPagamentoBean
(AvaliacaoConsultaPorDemanda lazy, FolhaPagamentoService folhaPagamentoService, VigenciaService vigenciaService,
AvaliacaoService avaliacaoService, ParcelaService parcelaService
) {
this.
lazy = lazy
;
this.
folhaPagamentoService = folhaPagamentoService
;
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
())) {
detalharFolhaPagamento
();
}
}
}
private void detalharFolhaPagamento
() {
AvaliacaoDTO avaliacaoDTO = avaliacaoService.
consultarAvaliacao(getVigenciaSelecionada
().
getSequencial());
if (VerificadorUtil.
naoEstaNulo(avaliacaoDTO
)) {
setFolhaPagamentoDTO
(folhaPagamentoService.
detalharFolhaPagamento(avaliacaoDTO
));
}
if (VerificadorUtil.
naoEstaNuloOuVazio(getArquivosImportados
())) {
setFolhaPagamentoDTO
(folhaPagamentoService.
importarFolhaPagamento(getArquivosImportados
(), getFolhaPagamentoDTO
()));
}
}
@
Override
public void limparEntidade
() {
setEntidade
(new Avaliacao
());
}
@
Override
public GenericService
<Avaliacao
> getService
() {
return folhaPagamentoService
;
}
@
Override
public Avaliacao getEntidade
() {
return entidade
;
}
@
Override
public void preConsultar
() {
setTipoOperacao
(TipoOperacao.
CONSULTAR);
}
@
Override
public void preAlterar
(Avaliacao avaliacao
) {
super.
preAlterar(avaliacao
);
setFolhaPagamentoDTO
(folhaPagamentoService.
detalharFolhaPagamento(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 FolhaPagamentoDTO getFolhaPagamentoDTO
() {
return folhaPagamentoDTO
;
}
public void setFolhaPagamentoDTO
(FolhaPagamentoDTO folhaPagamentoDTO
) {
this.
folhaPagamentoDTO = folhaPagamentoDTO
;
}
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 List<byte[]> getArquivosImportados
() {
return arquivosImportados
;
}
public void setArquivosImportados
(List<byte[]> arquivosImportados
) {
this.
arquivosImportados = arquivosImportados
;
}
public String getTituloEmail
() {
return tituloEmail
;
}
public void setTituloEmail
(String tituloEmail
) {
this.
tituloEmail = tituloEmail
;
}
public Date getDataPagamento
() {
return dataPagamento
;
}
public void setDataPagamento
(Date dataPagamento
) {
this.
dataPagamento = dataPagamento
;
}
public List<FolhaPagamentoFuncionarioExtraidoDTO
> funcionariosExtraidosForaDaAvaliacao
() {
List<FolhaPagamentoFuncionarioExtraidoDTO
> extraidosForaDaAvaliacao =
new ArrayList<FolhaPagamentoFuncionarioExtraidoDTO
>();
if (VerificadorUtil.
naoEstaNuloOuVazio(getFolhaPagamentoDTO
())) {
if (VerificadorUtil.
naoEstaNuloOuVazio(getFolhaPagamentoDTO
().
getFuncionariosExtraidos())) {
for (FolhaPagamentoFuncionarioExtraidoDTO extraido : getFolhaPagamentoDTO
().
getFuncionariosExtraidos()) {
if (!extraido.
getAdicionado()) {
extraidosForaDaAvaliacao.
add(extraido
);
}
}
}
}
return extraidosForaDaAvaliacao
;
}
public Double valorTotalImportadoSemAusentes
() {
Double valorTotalForaDaAvaliacao =
new Double(0.0);
List<FolhaPagamentoFuncionarioExtraidoDTO
> extraidosForaDaAvaliacao =
new ArrayList<FolhaPagamentoFuncionarioExtraidoDTO
>();
if (VerificadorUtil.
naoEstaNuloOuVazio(getFolhaPagamentoDTO
().
getFuncionariosExtraidos())) {
for (FolhaPagamentoFuncionarioExtraidoDTO extraido : getFolhaPagamentoDTO
().
getFuncionariosExtraidos()) {
if (!extraido.
getAdicionado()) {
valorTotalForaDaAvaliacao += extraido.
getValorVencimentos();
extraidosForaDaAvaliacao.
add(extraido
);
}
}
return getFolhaPagamentoDTO
().
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 uploadArquivoEspacoCase
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setArquivosImportados
(folhaPagamentoService.
uploadArquivo(getArquivoParaImportacao
().
getContent()));
setFolhaPagamentoDTO
(folhaPagamentoService.
importarFolhaPagamento(getArquivosImportados
(), getFolhaPagamentoDTO
()));
setTituloEmail
(getTituloEmail
() +
" " + getFolhaPagamentoDTO
().
getAvaliacaoDTO().
getVigenciaDTO().
getDescricao());
LancadorMensagem.
lancarSucesso("ARQUIVO IMPORTADO COM SUCESSO!");
}
});
}
public void uploadArquivoEspacoCase
(final FileUploadEvent e
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setArquivosImportados
(folhaPagamentoService.
uploadArquivo(e.
getFile().
getContent()));
setFolhaPagamentoDTO
(folhaPagamentoService.
importarFolhaPagamento(getArquivosImportados
(), getFolhaPagamentoDTO
()));
}
});
}
public void selecionarTodosParaEnviarEmail
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (FolhaPagamentoFuncionarioDTO folhaPagamentoFuncionario : getFolhaPagamentoDTO
().
getFuncionarios()) {
if (folhaPagamentoFuncionario.
getEnviarEmail()) {
folhaPagamentoFuncionario.
setEnviarEmail(false);
} else {
folhaPagamentoFuncionario.
setEnviarEmail(true);
}
}
}
});
}
public void atualizarValoresImportados
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (FolhaPagamentoFuncionarioDTO folhaPagamentoFuncionario : getFolhaPagamentoDTO
().
getFuncionarios()) {
if (VerificadorUtil.
naoEstaNulo(folhaPagamentoFuncionario.
getValorSalarioImportado()) &&
!VerificadorUtil.
isListaNulaOuVazia(folhaPagamentoFuncionario.
getParcelas())) {
folhaPagamentoFuncionario.
getParcelas().
get(0).
setValor(folhaPagamentoFuncionario.
getValorSalarioImportado());
folhaPagamentoService.
atualizarValorParcela(folhaPagamentoFuncionario.
getParcelas().
get(0));
}
}
LancadorMensagem.
lancarSucesso("VALORES ATUALIZADOS COM SUCESSO");
}
});
}
public void atualizarCentrosDeCustos
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (FolhaPagamentoFuncionarioDTO folhaPagamentoFuncionario : getFolhaPagamentoDTO
().
getFuncionarios()) {
if (!VerificadorUtil.
isListaNulaOuVazia(folhaPagamentoFuncionario.
getParcelas())) {
if (VerificadorUtil.
naoEstaNulo(folhaPagamentoFuncionario.
getParcelas().
get(0))) {
ParcelaDTO parcela = folhaPagamentoFuncionario.
getParcelas().
get(0);
Long sequencialConta = parcela.
getContaDTO().
getSequencial();
folhaPagamentoService.
atualizarCentroDeCustos(sequencialConta, folhaPagamentoFuncionario.
getAvaliacaoFuncionarioDTO().
getSequencialDaLoja());
}
}
}
detalharFolhaPagamento
();
LancadorMensagem.
lancarSucesso("CENTROS DE CUSTOS ATUALIZADOS COM SUCESSO");
}
});
}
public void efetuarPagamentos
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (FolhaPagamentoFuncionarioDTO folhaPagamentoFuncionario : getFolhaPagamentoDTO
().
getFuncionarios()) {
if (!VerificadorUtil.
isListaNulaOuVazia(folhaPagamentoFuncionario.
getParcelas())) {
parcelaService.
efetuarPagamentoRecebimento(folhaPagamentoFuncionario.
getParcelas().
get(0), getDataPagamento
());
vigenciaService.
alterarSituacaoFolha(getVigenciaSelecionada
().
getSequencial(), TipoSituacoesVigencia.
EM_ANDAMENTO_A.
getValor());
}
}
detalharFolhaPagamento
();
LancadorMensagem.
lancarSucesso("PAGAMENTOS EFETUADOS COM SUCESSO");
}
});
}
public void finalizarFolhaPagamento
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
vigenciaService.
alterarSituacaoFolha(getVigenciaSelecionada
().
getSequencial(), TipoSituacoesVigencia.
FINALIZADO_F.
getValor());
setArquivoParaImportacao
(null);
redirecionarGestaoMensal
();
LancadorMensagem.
lancarSucesso("FOLHA DE PAGAMENTO FINALIZADA COM SUCESSO");
}
});
}
public StreamedContent downloadRecibos
() throws Exception {
return new VerificadorLancamentoException
().
verificarLancamentoException(new CommandRelatorioStreamedContent
() {
@
Override
public StreamedContent execute
() {
return folhaPagamentoService.
downloadRecibos(getFolhaPagamentoDTO
());
}
});
}
public void enviarRecibosSeparadamente
() throws Exception {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
folhaPagamentoService.
enviarRecibosPorEmail(getFolhaPagamentoDTO
(), getTituloEmail
());
LancadorMensagem.
lancarSucesso("RECIBOS ENVIADOS COM SUCESSO!");
}
});
}
public StreamedContent downloadArquivoFolhaBanco
(String codigoBanco
) throws Exception {
return new VerificadorLancamentoException
().
verificarLancamentoException(new CommandRelatorioStreamedContent
() {
@
Override
public StreamedContent execute
() {
return folhaPagamentoService.
downloadArquivoFolhaBanco(getFolhaPagamentoDTO
(), codigoBanco
);
}
});
}
}