package br.com.ec.controller.managedbean;
import java.io.ByteArrayInputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
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.controller.managedbean.consultademanda.PessoaConsultaPorDemanda;
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.ParametrosConsultaPessoaDTO;
import br.com.ec.domain.model.DadosBancarios;
import br.com.ec.domain.model.Endereco;
import br.com.ec.domain.model.Fornecedor;
import br.com.ec.domain.model.Funcionario;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Papel;
import br.com.ec.domain.model.Perfil;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.PessoaPapel;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.UsuarioLoja;
import br.com.ec.domain.model.UsuarioPerfil;
import br.com.ec.domain.model.Vendedor;
import br.com.ec.domain.model.tipos.TipoComissionamento;
import br.com.ec.domain.model.tipos.TipoEscolaridade;
import br.com.ec.domain.model.tipos.TipoEstadoCivil;
import br.com.ec.domain.model.tipos.TipoRacaCor;
import br.com.ec.domain.model.tipos.TipoRegimeTributario;
import br.com.ec.domain.service.fornecedor.FornecedorService;
import br.com.ec.domain.service.funcionario.FuncionarioService;
import br.com.ec.domain.service.pessoa.PessoaService;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.domain.service.vendedor.VendedorService;
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 PessoaBean
extends AbstractBean
<Pessoa
> implements Serializable {
private static final long serialVersionUID = 1L
;
private ParametrosConsultaPessoaDTO parametrosConsultaPessoaDTO
;
private PessoaConsultaPorDemanda lazy
;
private PessoaService pessoaService
;
private UsuarioService usuarioService
;
private FuncionarioService funcionarioService
;
private VendedorService vendedorService
;
private FornecedorService fornecedorService
;
private Endereco endereco
;
private List<Endereco
> enderecos
;
private DadosBancarios dadosBancarios
;
private List<DadosBancarios
> listaDadosBancarios
;
private Usuario usuario
;
private Perfil perfilSelecionado
;
private Papel papelSelecionado
;
private Loja lojaSelecionada
;
private Funcionario funcionario
;
private Vendedor vendedor
;
private Fornecedor fornecedor
;
private List<Pessoa
> listaPessoasJuridicas
;
@Inject
public PessoaBean
(PessoaConsultaPorDemanda lazy, PessoaService pessoaService, UsuarioService usuarioService,
FuncionarioService funcionarioService, VendedorService vendedorService, FornecedorService fornecedorService
) {
this.
lazy = lazy
;
this.
pessoaService = pessoaService
;
this.
usuarioService = usuarioService
;
this.
funcionarioService = funcionarioService
;
this.
vendedorService = vendedorService
;
this.
fornecedorService = fornecedorService
;
}
@
Override
public void preCarregamento
() {
parametrosConsultaPessoaDTO =
new ParametrosConsultaPessoaDTO
();
parametrosConsultaPessoaDTO.
setEntidade(new Pessoa
());
prepararConsultaDemanda
();
limparEntidade
();
}
@
Override
public void limparEntidade
() {
Pessoa pessoa =
new Pessoa
();
setEnderecos
(new ArrayList<Endereco
>());
setListaDadosBancarios
(new ArrayList<DadosBancarios
>());
setEntidade
(pessoa
);
setUsuario
(null);
setFuncionario
(null);
setVendedor
(null);
setFornecedor
(null);
}
@
Override
public GenericService
<Pessoa
> getService
() {
return pessoaService
;
}
@
Override
public Pessoa getEntidade
() {
return entidade
;
}
@
Override
public void preConsultar
() {
setTipoOperacao
(TipoOperacao.
CONSULTAR);
}
@
Override
public Pessoa getId
() {
return getEntidade
();
}
public TipoRegimeTributario
[] getTiposRegimeTributario
() {
return TipoRegimeTributario.
values();
}
public TipoComissionamento
[] getTiposComissionamento
() {
return TipoComissionamento.
values();
}
public TipoEstadoCivil
[] getTiposEstadoCivil
() {
return TipoEstadoCivil.
values();
}
public TipoRacaCor
[] getTiposRacaCor
() {
return TipoRacaCor.
values();
}
public TipoEscolaridade
[] getTiposEscolaridade
() {
return TipoEscolaridade.
values();
}
public Endereco getEndereco
() {
return endereco
;
}
public void setEndereco
(Endereco endereco
) {
this.
endereco = endereco
;
}
public List<Endereco
> getEnderecos
() {
return enderecos
;
}
public void setEnderecos
(List<Endereco
> enderecos
) {
this.
enderecos = enderecos
;
}
public DadosBancarios getDadosBancarios
() {
return dadosBancarios
;
}
public void setDadosBancarios
(DadosBancarios dadosBancarios
) {
this.
dadosBancarios = dadosBancarios
;
}
public List<DadosBancarios
> getListaDadosBancarios
() {
return listaDadosBancarios
;
}
public void setListaDadosBancarios
(List<DadosBancarios
> listaDadosBancarios
) {
this.
listaDadosBancarios = listaDadosBancarios
;
}
public Usuario getUsuario
() {
return usuario
;
}
public void setUsuario
(Usuario usuario
) {
this.
usuario = usuario
;
}
public Perfil getPerfilSelecionado
() {
return perfilSelecionado
;
}
public void setPerfilSelecionado
(Perfil perfilSelecionado
) {
this.
perfilSelecionado = perfilSelecionado
;
}
public Papel getPapelSelecionado
() {
return papelSelecionado
;
}
public void setPapelSelecionado
(Papel papelSelecionado
) {
this.
papelSelecionado = papelSelecionado
;
}
public Loja getLojaSelecionada
() {
return lojaSelecionada
;
}
public void setLojaSelecionada
(Loja lojaSelecionada
) {
this.
lojaSelecionada = lojaSelecionada
;
}
public Funcionario getFuncionario
() {
return funcionario
;
}
public void setFuncionario
(Funcionario funcionario
) {
this.
funcionario = funcionario
;
}
public Vendedor getVendedor
() {
return vendedor
;
}
public void setVendedor
(Vendedor vendedor
) {
this.
vendedor = vendedor
;
}
public Fornecedor getFornecedor
() {
return fornecedor
;
}
public void setFornecedor
(Fornecedor fornecedor
) {
this.
fornecedor = fornecedor
;
}
public ParametrosConsultaPessoaDTO getParametrosConsultaPessoaDTO
() {
return parametrosConsultaPessoaDTO
;
}
public void setParametrosConsultaPessoaDTO
(ParametrosConsultaPessoaDTO parametrosConsultaPessoaDTO
) {
this.
parametrosConsultaPessoaDTO = parametrosConsultaPessoaDTO
;
}
public PessoaConsultaPorDemanda getLazy
() {
return lazy
;
}
public void setLazy
(PessoaConsultaPorDemanda lazy
) {
this.
lazy = lazy
;
}
public void prepararConsultaDemanda
() {
lazy.
setarParametrosConsulta(getParametrosConsultaPessoaDTO
());
}
public List<Pessoa
> getListaPessoasJuridicas
() {
if (VerificadorUtil.
estaNuloOuVazio(listaPessoasJuridicas
)) {
setListaPessoasJuridicas
(pessoaService.
consultarPessoasJuridicas());
}
return listaPessoasJuridicas
;
}
public void setListaPessoasJuridicas
(List<Pessoa
> listaPessoasJuridicas
) {
this.
listaPessoasJuridicas = listaPessoasJuridicas
;
}
@
Override
protected void modificarEntidadeAntesDaOperacao
() {
getEntidade
().
setEnderecos(new HashSet<Endereco
>(getEnderecos
()));
getEntidade
().
setDadosBancarios(new HashSet<DadosBancarios
>(getListaDadosBancarios
()));
}
@
Override
public void cadastrar
(final Pessoa pessoa
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
modificarEntidadeAntesDaOperacao
();
getService
().
cadastrar(pessoa
);
persistirUsuario
(pessoa
);
persistirFuncionario
(pessoa
);
persistirVendedor
(pessoa
);
persistirFornecedor
(pessoa
);
limparEntidade
();
modificarEntidadeDepoisDaOperacao
();
LancadorMensagem.
lancarSucesso(getMensagens
().
get(IDENTIFICADOR_MENSAGEM_CADASTRADO_COM_SUCESSO
));
}
});
}
@
Override
public void alterar
(final Pessoa pessoa
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
modificarEntidadeAntesDaOperacao
();
getService
().
alterar(pessoa
);
persistirUsuario
(pessoa
);
persistirFuncionario
(pessoa
);
persistirVendedor
(pessoa
);
persistirFornecedor
(pessoa
);
limparEntidade
();
modificarEntidadeDepoisDaOperacao
();
LancadorMensagem.
lancarSucesso(getMensagens
().
get(IDENTIFICADOR_MENSAGEM_CADASTRADO_COM_SUCESSO
));
}
});
}
private void persistirUsuario
(Pessoa pessoa
) {
if (VerificadorUtil.
naoEstaNulo(getUsuario
())) {
if (VerificadorUtil.
estaNulo(getUsuario
().
getSequencial())) {
getUsuario
().
setPessoa(pessoa
);
getUsuario
().
setAtivo(true);
usuarioService.
cadastrar(getUsuario
());
} else {
usuarioService.
alterar(getUsuario
());
}
}
}
private void persistirFuncionario
(Pessoa pessoa
) {
if (VerificadorUtil.
naoEstaNulo(getFuncionario
())) {
if (VerificadorUtil.
estaNulo(getFuncionario
().
getSequencial())) {
getFuncionario
().
setPessoa(pessoa
);
getFuncionario
().
setAtivo(true);
funcionarioService.
cadastrar(getFuncionario
());
} else {
funcionarioService.
alterar(getFuncionario
());
}
}
}
private void persistirVendedor
(Pessoa pessoa
) {
if (VerificadorUtil.
naoEstaNulo(getVendedor
())) {
if (VerificadorUtil.
estaNulo(getVendedor
().
getSequencial())) {
getVendedor
().
setPessoa(pessoa
);
getVendedor
().
setAtivo(true);
vendedorService.
cadastrar(getVendedor
());
} else {
vendedorService.
alterar(getVendedor
());
}
}
}
private void persistirFornecedor
(Pessoa pessoa
) {
if (VerificadorUtil.
naoEstaNulo(getFornecedor
())) {
if (VerificadorUtil.
estaNulo(getFornecedor
().
getSequencial())) {
getFornecedor
().
setPessoa(pessoa
);
getFornecedor
().
setAtivo(true);
fornecedorService.
cadastrar(getFornecedor
());
} else {
fornecedorService.
alterar(getFornecedor
());
}
}
}
/***************************************************************/
@
Override
public void preDetalhar
(Pessoa pessoa
) {
detalharPessoa
(pessoa
);
setTipoOperacao
(TipoOperacao.
DETALHAR);
}
@
Override
public void preAlterar
(Pessoa pessoa
) {
detalharPessoa
(pessoa
);
setTipoOperacao
(TipoOperacao.
ALTERAR);
}
public void detalharPessoa
(Pessoa pessoa
) {
limparEntidade
();
setEntidade
(pessoaService.
detalharPessoa(pessoa
));
setEnderecos
(new ArrayList<>(getEntidade
().
getEnderecos()));
setListaDadosBancarios
(new ArrayList<>(getEntidade
().
getDadosBancarios()));
try {setUsuario
(usuarioService.
consultarUsuarioPorPessoa(pessoa
));} catch (Exception e
) {}
try {setFuncionario
(funcionarioService.
consultarFuncionarioPorPessoa(pessoa
));} catch (Exception e
) {}
try {setVendedor
(vendedorService.
consultarVendedorPorPessoa(pessoa
));} catch (Exception e
) {}
try {setFornecedor
(fornecedorService.
consultarFornecedorPorPessoa(pessoa
));} catch (Exception e
) {}
}
public void limparEndereco
() {
setEndereco
(new Endereco
());
}
public void limparDadoBancario
() {
setDadosBancarios
(new DadosBancarios
());
}
public void cadastrarEndereco
() {
getEndereco
().
setPessoa(getEntidade
());
getEndereco
().
setAtivo(true);
getEnderecos
().
add(getEndereco
());
adicionandoParametroArgsConfirmandoAcao
(true);
}
public void alterarEndereco
() {
removerEndereco
(getEndereco
());
getEnderecos
().
add(getEndereco
());
adicionandoParametroArgsConfirmandoAcao
(true);
}
public void removerEndereco
(Endereco endereco
) {
getEnderecos
().
remove(getEnderecos
().
indexOf(endereco
));
}
public void cadastrarDadosBancarios
() {
getDadosBancarios
().
setPessoa(getEntidade
());
getDadosBancarios
().
setAtivo(true);
getListaDadosBancarios
().
add(getDadosBancarios
());
adicionandoParametroArgsConfirmandoAcao
(true);
}
public void alterarDadosBancarios
() {
removerDadosBancarios
(getDadosBancarios
());
getListaDadosBancarios
().
add(getDadosBancarios
());
adicionandoParametroArgsConfirmandoAcao
(true);
}
public void removerDadosBancarios
(DadosBancarios dadosBancarios
) {
getListaDadosBancarios
().
remove(getListaDadosBancarios
().
indexOf(dadosBancarios
));
}
public void limparPapel
() {
setPapelSelecionado
(null);
}
public void limparPerfil
() {
setPerfilSelecionado
(null);
}
public void adicionarPapel
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
estaNulo(getPapelSelecionado
())) {
throw new NegocioException
("Selecione o papel");
}
PessoaPapel pessoaPapel =
new PessoaPapel
();
pessoaPapel.
setPessoa(getEntidade
());
pessoaPapel.
setPapel(getPapelSelecionado
());
if (VerificadorUtil.
estaNulo(getEntidade
().
getPapeis())) {
getEntidade
().
setPapeis(new HashSet<PessoaPapel
>());
}
getEntidade
().
getPapeis().
add(pessoaPapel
);
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void removerPapel
(PessoaPapel pessoaPapel
) {
getEntidade
().
getPapeis().
remove(pessoaPapel
);
}
public void adicionarPerfil
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
estaNulo(getPerfilSelecionado
())) {
throw new NegocioException
("Selecione o perfil");
}
UsuarioPerfil usuarioPerfil =
new UsuarioPerfil
();
usuarioPerfil.
setPerfil(getPerfilSelecionado
());
usuarioPerfil.
setUsuario(getUsuario
());
if (VerificadorUtil.
estaNulo(getUsuario
().
getPerfis())) {
getUsuario
().
setPerfis(new HashSet<UsuarioPerfil
>());
}
getUsuario
().
getPerfis().
add(usuarioPerfil
);
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void removerPerfil
(UsuarioPerfil usuarioPerfil
) {
getUsuario
().
getPerfis().
remove(usuarioPerfil
);
}
public void adicionarLoja
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
estaNulo(getLojaSelecionada
())) {
throw new NegocioException
("Selecione a loja");
}
UsuarioLoja usuarioLoja =
new UsuarioLoja
();
usuarioLoja.
setLoja(getLojaSelecionada
());
usuarioLoja.
setUsuario(getUsuario
());
if (VerificadorUtil.
estaNulo(getUsuario
().
getLojas())) {
getUsuario
().
setLojas(new HashSet<UsuarioLoja
>());
}
getUsuario
().
getLojas().
add(usuarioLoja
);
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void removerLoja
(UsuarioLoja usuarioLoja
) {
getUsuario
().
getLojas().
remove(usuarioLoja
);
}
public void limparLoja
() {
setLojaSelecionada
(null);
}
public void alterarSenhaUsuario
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
usuarioService.
alterarSenhaUsuario(getUsuario
());
LancadorMensagem.
lancarSucesso("SENHA ALTERADA COM SUCESSO");
}
});
}
public void iniciarUsuario
() {
setUsuario
(new Usuario
());
}
public void iniciarFuncionario
() {
setFuncionario
(new Funcionario
());
}
public void iniciarVendedor
() {
setVendedor
(new Vendedor
());
}
public void iniciarFornecedor
() {
setFornecedor
(new Fornecedor
());
}
public Funcionario consultarFuncionarioPorPessoa
(Pessoa pessoa
) {
return funcionarioService.
consultarFuncionarioPorPessoa(pessoa
);
}
public StreamedContent emitirFichaColaboradorEsocial
() throws Exception {
ByteArrayInputStream input =
new ByteArrayInputStream(pessoaService.
emitirFichaColaboradorEsocial((ServletContext
)FacesContext.
getCurrentInstance().
getExternalContext().
getContext(), getEntidade
()));
return new DefaultStreamedContent
(input, ArquivoUtil.
retornarContentTypeArquivo("doc"),
"formulario_esocial.doc");
}
public StreamedContent emitirSolicitacaoExameAdmissional
() throws Exception {
ByteArrayInputStream input =
new ByteArrayInputStream(pessoaService.
emitirSolicitacaoExameAdmissional((ServletContext
)FacesContext.
getCurrentInstance().
getExternalContext().
getContext(), getEntidade
()));
return new DefaultStreamedContent
(input, ArquivoUtil.
retornarContentTypeArquivo("docx"),
"exameAdmissional.docx");
}
public StreamedContent emitirSolicitacaoExameDemissional
() throws Exception {
ByteArrayInputStream input =
new ByteArrayInputStream(pessoaService.
emitirSolicitacaoExameDemissional((ServletContext
)FacesContext.
getCurrentInstance().
getExternalContext().
getContext(), getEntidade
()));
return new DefaultStreamedContent
(input, ArquivoUtil.
retornarContentTypeArquivo("docx"),
"exameDemissional.docx");
}
public StreamedContent emitirSolicitacaoExamePeriodico
() throws Exception {
ByteArrayInputStream input =
new ByteArrayInputStream(pessoaService.
emitirSolicitacaoExamePeriodico((ServletContext
)FacesContext.
getCurrentInstance().
getExternalContext().
getContext(), getEntidade
()));
return new DefaultStreamedContent
(input, ArquivoUtil.
retornarContentTypeArquivo("docx"),
"examePeriodico.docx");
}
public StreamedContent emitirSolicitacaoAberturaContaBancaria
() throws Exception {
ByteArrayInputStream input =
new ByteArrayInputStream(pessoaService.
emitirSolicitacaoAberturaContaBancaria((ServletContext
)FacesContext.
getCurrentInstance().
getExternalContext().
getContext(), getEntidade
()));
return new DefaultStreamedContent
(input, ArquivoUtil.
retornarContentTypeArquivo("docx"),
"aberturaContaBancaria.docx");
}
public StreamedContent emitirAdesaoValeTransporte
() throws Exception {
ByteArrayInputStream input =
new ByteArrayInputStream(pessoaService.
emitirAdesaoValeTransporte((ServletContext
)FacesContext.
getCurrentInstance().
getExternalContext().
getContext(), getEntidade
()));
return new DefaultStreamedContent
(input, ArquivoUtil.
retornarContentTypeArquivo("docx"),
"adesaoValeTransporte.docx");
}
}