Subversion Repositories Integrator Subversion

Rev

Rev 195 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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