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;
}
*/
}