Subversion Repositories Integrator Subversion

Rev

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

package br.com.ec.domain.service.impl;

import java.util.List;

import org.primefaces.event.FlowEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.PessoaDTO;
import br.com.ec.domain.model.Endereco;
import br.com.ec.domain.model.Funcionario;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.tipos.TipoComissionamento;
import br.com.ec.domain.service.FuncionarioService;
import br.com.ec.domain.service.PessoaService;
import br.com.ec.repository.PessoaRepository;

@Service
public class PessoaServiceImpl extends AbstractService<Pessoa> implements PessoaService {
       
        private FuncionarioService funcionarioService;
        private PessoaRepository pessoaRepository;

        @Autowired
        public PessoaServiceImpl(Validador validador, PessoaRepository pessoaRepository, FuncionarioService funcionarioService) {
                super(validador);
                this.pessoaRepository = pessoaRepository;
                this.funcionarioService = funcionarioService;
        }

        @Override
        protected GenericRepository<Pessoa> getRepository() {
                return pessoaRepository;
        }
       
        @Override
        protected void regrasNegocioCadastrar(Pessoa pessoa) {
                if (VerificadorUtil.estaNulo(pessoa.getCadastroFinalizado())) {
                        pessoa.setCadastroFinalizado(true);
                }
                pessoa.setAtivo(true);
        }
       
        @Override
        public List<PessoaDTO> consultarPessoasJuridicas(String cnpj) {
                return pessoaRepository.consultarPessoasJuridicas(cnpj);
        }
       
        @Override
        public Pessoa consultarPessoaPorCpfOuCpnj(String cpfCnpj) {
                return pessoaRepository.consultarPessoaPorCpfOuCpnj(cpfCnpj);
        }
       
        @Override
        public Pessoa cadastroExterno(FlowEvent evento, Pessoa pessoa, Funcionario funcionario, Endereco endereco) {
                if (VerificadorUtil.estaNulo(evento)) {
                        Pessoa pessoaConsultada = consultarPessoaPorCpfOuCpnj(StringUtil.retornarApenasNumeros(pessoa.getCpfCnpj()));
                        if (VerificadorUtil.estaNulo(pessoaConsultada)) {
                                pessoa.setCadastroFinalizado(false);
                                this.cadastrar(pessoa);
                                Funcionario funcionarioNovo = new Funcionario(pessoa, TipoComissionamento.COMISSSIONAMENTO_ESPACO_CASE.getValor(), true);
                                funcionarioService.cadastrar(funcionarioNovo);
                                pessoa.setFuncionario(funcionarioNovo);
                                return pessoa;
                        }
                        Funcionario funcionarioPessoa = funcionarioService.consultarFuncionarioPelaPessoa(pessoa.getSequencial());
                        if (VerificadorUtil.estaNulo(funcionarioPessoa)) {
                                Funcionario funcionarioNovo = new Funcionario(pessoaConsultada, TipoComissionamento.COMISSSIONAMENTO_ESPACO_CASE.getValor(), true);
                                funcionarioService.cadastrar(funcionarioNovo);
                                pessoaConsultada.setFuncionario(funcionarioNovo);
                        } else {
                                pessoaConsultada.setFuncionario(funcionarioPessoa);
                        }
                        if (pessoaConsultada.getCadastroFinalizado()) {
                                throw new NegocioException("CADASTRO INDISPONÍVEL");
                        }
                        return pessoaConsultada;
                }
                if (VerificadorUtil.naoEstaNulo(endereco)) {
                        if (VerificadorUtil.naoEstaNuloOuVazio(endereco.getCep())) {
                                pessoa.atualizarEndereco(endereco);
                        }
                }
                this.alterar(pessoa);
                funcionario.setPessoa(pessoa);
                funcionarioService.alterar(funcionario);
                pessoa = detalharPessoa(pessoa.getSequencial());
                pessoa.setFuncionario(funcionarioService.consultarFuncionarioPelaPessoa(pessoa.getSequencial()));
                return pessoa;
        }
       
        @Override
        public Pessoa detalharPessoa(Long sequencialPessoa) {
                return pessoaRepository.detalharPessoa(sequencialPessoa);
        }
        /*
       
        @Override
        public List<Pessoa> consultarPessoasJuridicas() {
                return pessoaRepository.consultarPessoasJuridicas();
        }
       
        @Override
        public byte[] emitirFichaColaboradorEsocial(ServletContext contexto, Pessoa pessoa) {
                return replaceTextosArquivos("/arquivos/modelos/modelo_formulario_esocial.doc", contexto, pessoa);
        }
       
        @Override
        public byte[] emitirTermoAdmissional(ServletContext contexto, Pessoa pessoa) {
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_admissional.docx", contexto, pessoa);
        }
       
        @Override
        public byte[] emitirTermoDemissional(ServletContext contexto, Pessoa pessoa) {
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_demissional.docx", contexto, pessoa);
        }
       
        @SuppressWarnings("resource")
        private byte[] replaceTextosArquivos(String caminhoArquivo, ServletContext contexto, Pessoa pessoa) {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                XWPFDocument doc;
        try {
                Funcionario funcionario = funcionarioService.consultarFuncionarioPorPessoa(pessoa);
                        doc = new XWPFDocument(OPCPackage.open(contexto.getResourceAsStream(caminhoArquivo)));
                        for (XWPFParagraph paragrafo : doc.getParagraphs()) {
                                replaceParagrafo(pessoa, funcionario, paragrafo);
                        }
                        for (XWPFTable tbl : doc.getTables()) {
                                for (XWPFTableRow row : tbl.getRows()) {
                                        for (XWPFTableCell cell : row.getTableCells()) {
                                                for (XWPFParagraph p : cell.getParagraphs()) {
                                                        replaceParagrafo(pessoa, funcionario, p);
                                                }
                                        }
                                }
                        }
                doc.write(baos);
                return baos.toByteArray();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        return null;
        }

        private void replaceParagrafo(Pessoa pessoa, Funcionario funcionario, XWPFParagraph paragrafo) {
                String textoParagrafo = "";
                Integer posicao = 0;
                for (XWPFRun r : paragrafo.getRuns()) {
                        if (VerificadorUtil.naoEstaNuloOuVazio(r.text())) {
                                textoParagrafo = textoParagrafo + r.text();
                        }
                        posicao++;
                }
                posicao = 0;
                if (textoParagrafo.contains("#")) {
                        for (XWPFRun r : paragrafo.getRuns()) {
                                if (posicao == 0) {
                                        r.setText(replaceTextos(textoParagrafo, pessoa, funcionario), 0);
                                } else {
                                        r.setText("", 0);
                                }
                                posicao++;
                        }
                }
        }
       
        private String replaceTextos(String texto, Pessoa pessoa, Funcionario funcionario) {
                texto = replaceTexto(texto, "#NOME", pessoa.getNome());
                texto = replaceTexto(texto, "#CPF", pessoa.getCpfCnpjFormatado());
                texto = replaceTexto(texto, "#RG_NUMERO", pessoa.getRg());
                texto = replaceTexto(texto, "#RG_DATAEXPEDICAO", pessoa.getRgDataExpedicaoFormatada());
                texto = replaceTexto(texto, "#RG_ORGAOEMISSOR", pessoa.getRgOrgaoEmissor());
                texto = replaceTexto(texto, "#NACIONALIDADE", pessoa.getNacionalidade());
                texto = replaceTexto(texto, "#PAI_NOME", pessoa.getNomePai());
                texto = replaceTexto(texto, "#MAE_NOME", pessoa.getNomeMae());
                texto = replaceTexto(texto, "#NASCIMENTO_DATA", pessoa.getDataNascimentoFormatada());
                texto = replaceTexto(texto, "#NASCIMENTO_LOCAL", pessoa.getLocalNascimento());
                texto = replaceTexto(texto, "#NASCIMENTO_UF", pessoa.getUfNascimento());
                texto = replaceTexto(texto, "#EMAIL", pessoa.getEmail());
                texto = replaceTexto(texto, "#TELEFONE", pessoa.getTelefone());
               
                for (TipoEstadoCivil estadoCivil : TipoEstadoCivil.values()) {
                        texto = replaceTexto(texto, "#ESTADOCIVIL[" + estadoCivil.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEstadoCivil())?
                                        pessoa.getTipoEstadoCivil().equals(estadoCivil.getValor())? "X" : " " : " ");
                }

                for (TipoSexo sexo : TipoSexo.values()) {
                        texto = replaceTexto(texto, "#SEXO[" + sexo.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getSexo())?
                                        pessoa.getSexo().equals(sexo.getValor())? "X" : " " : " ");
                }

                for (TipoRacaCor racaCor : TipoRacaCor.values()) {
                        texto = replaceTexto(texto, "#RACA_" + racaCor.getValor(), VerificadorUtil.naoEstaNulo(pessoa.getTipoRacaCor())?
                                        pessoa.getTipoRacaCor().equals(racaCor.getValor())? "X" : " " : " ");
                }
               
                for (TipoEscolaridade escolaridade : TipoEscolaridade.values()) {
                        texto = replaceTexto(texto, "#ESCOLARIDADE[" + escolaridade.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEscolaridade())?
                                        pessoa.getTipoEscolaridade().equals(escolaridade.getValor())? "X" : " " : " ");
                }
               
                if (VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal())) {
                        texto = replaceTexto(texto, "#ENDERECO_LOGRADOURO", pessoa.getEnderecoPrincipal().getLogradouro());
                        texto = replaceTexto(texto, "#ENDERECO_NUMERO", pessoa.getEnderecoPrincipal().getNumero());
                        texto = replaceTexto(texto, "#ENDERECO_BAIRRO", pessoa.getEnderecoPrincipal().getBairro());
                        texto = replaceTexto(texto, "#ENDERECO_COMPLEMENTO", pessoa.getEnderecoPrincipal().getComplemento());
                        texto = replaceTexto(texto, "#ENDERECO_CIDADE", pessoa.getEnderecoPrincipal().getMunicipio());
                        texto = replaceTexto(texto, "#ENDERECO_CEP", pessoa.getEnderecoPrincipal().getCepFormatado());
                        texto = replaceTexto(texto, "#ENDERECO_PAIS", "BRASIL");
                        texto = replaceTexto(texto, "#ENDERECO_PROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
                                        pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
                        texto = replaceTexto(texto, "#ENDERECO_NAOPROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
                                        !pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
                        texto = replaceTexto(texto, "#ENDERECO_COM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
                        texto = replaceTexto(texto, "#ENDERECO_SEM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
                }
               
                if (VerificadorUtil.naoEstaNulo(funcionario)) {
                        texto = replaceTexto(texto, "#PIS", funcionario.getPis());
                        texto = replaceTexto(texto, "#CTPS_NUMERO", funcionario.getCtps());
                        texto = replaceTexto(texto, "#CTPS_SERIE", funcionario.getCtpsSerie());
                        texto = replaceTexto(texto, "#CTPS_UF", funcionario.getCtpsUf());
                }
                return texto;
        }

        private String replaceTexto(String texto, String codigo, String campo) {
                if (texto != null && texto.contains(codigo)) {
                        if (VerificadorUtil.naoEstaNulo(campo)) {
                                return texto.replace(codigo, campo);
                        } else {
                                return texto.replace(codigo, " ");
                        }
        }
                return texto;
        }
        */

}