Subversion Repositories Integrator Subversion

Rev

Rev 170 | Rev 304 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
106 espaco 1
package br.com.ec.domain.service.pessoa.impl;
2
 
3
import java.io.ByteArrayOutputStream;
4
import java.util.List;
5
 
6
import javax.servlet.ServletContext;
7
 
8
import org.apache.poi.openxml4j.opc.OPCPackage;
9
import org.apache.poi.xwpf.usermodel.XWPFDocument;
10
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
11
import org.apache.poi.xwpf.usermodel.XWPFRun;
12
import org.apache.poi.xwpf.usermodel.XWPFTable;
13
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
14
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.stereotype.Service;
17
 
195 espaco 18
import br.com.ec.core.generic.AbstractService;
19
import br.com.ec.core.generic.GenericRepository;
20
import br.com.ec.core.util.VerificadorUtil;
21
import br.com.ec.core.validador.Validador;
106 espaco 22
import br.com.ec.domain.model.Funcionario;
23
import br.com.ec.domain.model.Pessoa;
24
import br.com.ec.domain.model.tipos.TipoEscolaridade;
25
import br.com.ec.domain.model.tipos.TipoEstadoCivil;
26
import br.com.ec.domain.model.tipos.TipoRacaCor;
27
import br.com.ec.domain.model.tipos.TipoSexo;
28
import br.com.ec.domain.service.funcionario.FuncionarioService;
29
import br.com.ec.domain.service.pessoa.PessoaService;
30
import br.com.ec.infrastructure.repository.PessoaRepository;
31
 
32
@Service
33
public class PessoaServiceImpl extends AbstractService<Pessoa> implements PessoaService {
34
 
35
        private FuncionarioService funcionarioService;
36
        private PessoaRepository pessoaRepository;
37
 
38
        @Autowired
39
        public PessoaServiceImpl(Validador validador, PessoaRepository pessoaRepository, FuncionarioService funcionarioService) {
40
                super(validador);
41
                this.pessoaRepository = pessoaRepository;
42
                this.funcionarioService = funcionarioService;
43
        }
44
 
45
        @Override
46
        protected GenericRepository<Pessoa> getRepository() {
47
                return pessoaRepository;
48
        }
49
 
50
        @Override
51
        protected void regrasNegocioCadastrar(Pessoa pessoa) {
52
                pessoa.setAtivo(true);
53
        }
170 espaco 54
 
106 espaco 55
        @Override
56
        public Pessoa detalharPessoa(Pessoa pessoa) {
57
                return pessoaRepository.detalharPessoa(pessoa);
58
        }
59
 
60
        @Override
61
        public List<Pessoa> consultarPessoasJuridicas() {
62
                return pessoaRepository.consultarPessoasJuridicas();
63
        }
64
 
65
        @Override
66
        public byte[] emitirFichaColaboradorEsocial(ServletContext contexto, Pessoa pessoa) {
67
                return replaceTextosArquivos("/arquivos/modelos/modelo_formulario_esocial.doc", contexto, pessoa);
68
        }
69
 
70
        @Override
71
        public byte[] emitirTermoAdmissional(ServletContext contexto, Pessoa pessoa) {
72
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_admissional.docx", contexto, pessoa);
73
        }
74
 
75
        @Override
76
        public byte[] emitirTermoDemissional(ServletContext contexto, Pessoa pessoa) {
77
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_demissional.docx", contexto, pessoa);
78
        }
79
 
80
        @SuppressWarnings("resource")
81
        private byte[] replaceTextosArquivos(String caminhoArquivo, ServletContext contexto, Pessoa pessoa) {
82
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
83
                XWPFDocument doc;
84
        try {
85
                Funcionario funcionario = funcionarioService.consultarFuncionarioPorPessoa(pessoa);
86
                        doc = new XWPFDocument(OPCPackage.open(contexto.getResourceAsStream(caminhoArquivo)));
87
                        for (XWPFParagraph paragrafo : doc.getParagraphs()) {
88
                                replaceParagrafo(pessoa, funcionario, paragrafo);
89
                        }
90
                        for (XWPFTable tbl : doc.getTables()) {
91
                                for (XWPFTableRow row : tbl.getRows()) {
92
                                        for (XWPFTableCell cell : row.getTableCells()) {
93
                                                for (XWPFParagraph p : cell.getParagraphs()) {
94
                                                        replaceParagrafo(pessoa, funcionario, p);
95
                                                }
96
                                        }
97
                                }
98
                        }
99
                doc.write(baos);
100
                return baos.toByteArray();
101
                } catch (Exception e) {
102
                        e.printStackTrace();
103
                }
104
        return null;
105
        }
106
 
107
        private void replaceParagrafo(Pessoa pessoa, Funcionario funcionario, XWPFParagraph paragrafo) {
108
                String textoParagrafo = "";
109
                Integer posicao = 0;
110
                for (XWPFRun r : paragrafo.getRuns()) {
111
                        if (VerificadorUtil.naoEstaNuloOuVazio(r.text())) {
112
                                textoParagrafo = textoParagrafo + r.text();
113
                        }
114
                        posicao++;
115
                }
116
                posicao = 0;
117
                if (textoParagrafo.contains("#")) {
118
                        for (XWPFRun r : paragrafo.getRuns()) {
119
                                if (posicao == 0) {
120
                                        r.setText(replaceTextos(textoParagrafo, pessoa, funcionario), 0);
121
                                } else {
122
                                        r.setText("", 0);
123
                                }
124
                                posicao++;
125
                        }
126
                }
127
        }
128
 
129
        private String replaceTextos(String texto, Pessoa pessoa, Funcionario funcionario) {
130
                texto = replaceTexto(texto, "#NOME", pessoa.getNome());
131
                texto = replaceTexto(texto, "#CPF", pessoa.getCpfCnpjFormatado());
132
                texto = replaceTexto(texto, "#RG_NUMERO", pessoa.getRg());
133
                texto = replaceTexto(texto, "#RG_DATAEXPEDICAO", pessoa.getRgDataExpedicaoFormatada());
134
                texto = replaceTexto(texto, "#RG_ORGAOEMISSOR", pessoa.getRgOrgaoEmissor());
135
                texto = replaceTexto(texto, "#NACIONALIDADE", pessoa.getNacionalidade());
136
                texto = replaceTexto(texto, "#PAI_NOME", pessoa.getNomePai());
137
                texto = replaceTexto(texto, "#MAE_NOME", pessoa.getNomeMae());
138
                texto = replaceTexto(texto, "#NASCIMENTO_DATA", pessoa.getDataNascimentoFormatada());
139
                texto = replaceTexto(texto, "#NASCIMENTO_LOCAL", pessoa.getLocalNascimento());
140
                texto = replaceTexto(texto, "#NASCIMENTO_UF", pessoa.getUfNascimento());
141
                texto = replaceTexto(texto, "#EMAIL", pessoa.getEmail());
142
                texto = replaceTexto(texto, "#TELEFONE", pessoa.getTelefone());
143
 
144
                for (TipoEstadoCivil estadoCivil : TipoEstadoCivil.values()) {
145
                        texto = replaceTexto(texto, "#ESTADOCIVIL[" + estadoCivil.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEstadoCivil())?
146
                                        pessoa.getTipoEstadoCivil().equals(estadoCivil.getValor())? "X" : " " : " ");
147
                }
148
 
149
                for (TipoSexo sexo : TipoSexo.values()) {
150
                        texto = replaceTexto(texto, "#SEXO[" + sexo.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getSexo())?
151
                                        pessoa.getSexo().equals(sexo.getValor())? "X" : " " : " ");
152
                }
153
 
154
                for (TipoRacaCor racaCor : TipoRacaCor.values()) {
155
                        texto = replaceTexto(texto, "#RACA_" + racaCor.getValor(), VerificadorUtil.naoEstaNulo(pessoa.getTipoRacaCor())?
156
                                        pessoa.getTipoRacaCor().equals(racaCor.getValor())? "X" : " " : " ");
157
                }
158
 
159
                for (TipoEscolaridade escolaridade : TipoEscolaridade.values()) {
160
                        texto = replaceTexto(texto, "#ESCOLARIDADE[" + escolaridade.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEscolaridade())?
161
                                        pessoa.getTipoEscolaridade().equals(escolaridade.getValor())? "X" : " " : " ");
162
                }
163
 
164
                if (VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal())) {
165
                        texto = replaceTexto(texto, "#ENDERECO_LOGRADOURO", pessoa.getEnderecoPrincipal().getLogradouro());
166
                        texto = replaceTexto(texto, "#ENDERECO_NUMERO", pessoa.getEnderecoPrincipal().getNumero());
167
                        texto = replaceTexto(texto, "#ENDERECO_BAIRRO", pessoa.getEnderecoPrincipal().getBairro());
168
                        texto = replaceTexto(texto, "#ENDERECO_COMPLEMENTO", pessoa.getEnderecoPrincipal().getComplemento());
169
                        texto = replaceTexto(texto, "#ENDERECO_CIDADE", pessoa.getEnderecoPrincipal().getMunicipio());
170
                        texto = replaceTexto(texto, "#ENDERECO_CEP", pessoa.getEnderecoPrincipal().getCepFormatado());
171
                        texto = replaceTexto(texto, "#ENDERECO_PAIS", "BRASIL");
172
                        texto = replaceTexto(texto, "#ENDERECO_PROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
173
                                        pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
174
                        texto = replaceTexto(texto, "#ENDERECO_NAOPROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
175
                                        !pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
176
                        texto = replaceTexto(texto, "#ENDERECO_COM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
177
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
178
                        texto = replaceTexto(texto, "#ENDERECO_SEM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
179
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
180
                }
181
 
182
                if (VerificadorUtil.naoEstaNulo(funcionario)) {
183
                        texto = replaceTexto(texto, "#PIS", funcionario.getPis());
184
                        texto = replaceTexto(texto, "#CTPS_NUMERO", funcionario.getCtps());
185
                        texto = replaceTexto(texto, "#CTPS_SERIE", funcionario.getCtpsSerie());
186
                        texto = replaceTexto(texto, "#CTPS_UF", funcionario.getCtpsUf());
187
                }
188
                return texto;
189
        }
190
 
191
        private String replaceTexto(String texto, String codigo, String campo) {
192
                if (texto != null && texto.contains(codigo)) {
193
                        if (VerificadorUtil.naoEstaNulo(campo)) {
194
                                return texto.replace(codigo, campo);
195
                        } else {
196
                                return texto.replace(codigo, " ");
197
                        }
198
        }
199
                return texto;
200
        }
201
 
202
}