Subversion Repositories Integrator Subversion

Rev

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;
304 espaco 24
import br.com.ec.domain.model.tipos.TipoDependentes;
106 espaco 25
import br.com.ec.domain.model.tipos.TipoEscolaridade;
26
import br.com.ec.domain.model.tipos.TipoEstadoCivil;
27
import br.com.ec.domain.model.tipos.TipoRacaCor;
28
import br.com.ec.domain.model.tipos.TipoSexo;
29
import br.com.ec.domain.service.funcionario.FuncionarioService;
30
import br.com.ec.domain.service.pessoa.PessoaService;
31
import br.com.ec.infrastructure.repository.PessoaRepository;
32
 
33
@Service
34
public class PessoaServiceImpl extends AbstractService<Pessoa> implements PessoaService {
35
 
36
        private FuncionarioService funcionarioService;
37
        private PessoaRepository pessoaRepository;
38
 
39
        @Autowired
40
        public PessoaServiceImpl(Validador validador, PessoaRepository pessoaRepository, FuncionarioService funcionarioService) {
41
                super(validador);
42
                this.pessoaRepository = pessoaRepository;
43
                this.funcionarioService = funcionarioService;
44
        }
45
 
46
        @Override
47
        protected GenericRepository<Pessoa> getRepository() {
48
                return pessoaRepository;
49
        }
50
 
51
        @Override
52
        protected void regrasNegocioCadastrar(Pessoa pessoa) {
304 espaco 53
                pessoa.setCadastroFinalizado(true);
106 espaco 54
                pessoa.setAtivo(true);
55
        }
170 espaco 56
 
106 espaco 57
        @Override
58
        public Pessoa detalharPessoa(Pessoa pessoa) {
59
                return pessoaRepository.detalharPessoa(pessoa);
60
        }
61
 
62
        @Override
63
        public List<Pessoa> consultarPessoasJuridicas() {
64
                return pessoaRepository.consultarPessoasJuridicas();
65
        }
66
 
67
        @Override
68
        public byte[] emitirFichaColaboradorEsocial(ServletContext contexto, Pessoa pessoa) {
69
                return replaceTextosArquivos("/arquivos/modelos/modelo_formulario_esocial.doc", contexto, pessoa);
70
        }
71
 
72
        @Override
73
        public byte[] emitirTermoAdmissional(ServletContext contexto, Pessoa pessoa) {
74
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_admissional.docx", contexto, pessoa);
75
        }
76
 
77
        @Override
78
        public byte[] emitirTermoDemissional(ServletContext contexto, Pessoa pessoa) {
79
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_demissional.docx", contexto, pessoa);
80
        }
81
 
82
        @SuppressWarnings("resource")
83
        private byte[] replaceTextosArquivos(String caminhoArquivo, ServletContext contexto, Pessoa pessoa) {
84
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
85
                XWPFDocument doc;
86
        try {
87
                Funcionario funcionario = funcionarioService.consultarFuncionarioPorPessoa(pessoa);
88
                        doc = new XWPFDocument(OPCPackage.open(contexto.getResourceAsStream(caminhoArquivo)));
89
                        for (XWPFParagraph paragrafo : doc.getParagraphs()) {
90
                                replaceParagrafo(pessoa, funcionario, paragrafo);
91
                        }
92
                        for (XWPFTable tbl : doc.getTables()) {
93
                                for (XWPFTableRow row : tbl.getRows()) {
94
                                        for (XWPFTableCell cell : row.getTableCells()) {
95
                                                for (XWPFParagraph p : cell.getParagraphs()) {
96
                                                        replaceParagrafo(pessoa, funcionario, p);
97
                                                }
98
                                        }
99
                                }
100
                        }
101
                doc.write(baos);
102
                return baos.toByteArray();
103
                } catch (Exception e) {
104
                        e.printStackTrace();
105
                }
106
        return null;
107
        }
108
 
109
        private void replaceParagrafo(Pessoa pessoa, Funcionario funcionario, XWPFParagraph paragrafo) {
110
                String textoParagrafo = "";
111
                Integer posicao = 0;
112
                for (XWPFRun r : paragrafo.getRuns()) {
113
                        if (VerificadorUtil.naoEstaNuloOuVazio(r.text())) {
114
                                textoParagrafo = textoParagrafo + r.text();
115
                        }
116
                        posicao++;
117
                }
118
                posicao = 0;
119
                if (textoParagrafo.contains("#")) {
120
                        for (XWPFRun r : paragrafo.getRuns()) {
121
                                if (posicao == 0) {
122
                                        r.setText(replaceTextos(textoParagrafo, pessoa, funcionario), 0);
123
                                } else {
124
                                        r.setText("", 0);
125
                                }
126
                                posicao++;
127
                        }
128
                }
129
        }
130
 
131
        private String replaceTextos(String texto, Pessoa pessoa, Funcionario funcionario) {
132
                texto = replaceTexto(texto, "#NOME", pessoa.getNome());
133
                texto = replaceTexto(texto, "#CPF", pessoa.getCpfCnpjFormatado());
134
                texto = replaceTexto(texto, "#RG_NUMERO", pessoa.getRg());
135
                texto = replaceTexto(texto, "#RG_DATAEXPEDICAO", pessoa.getRgDataExpedicaoFormatada());
136
                texto = replaceTexto(texto, "#RG_ORGAOEMISSOR", pessoa.getRgOrgaoEmissor());
137
                texto = replaceTexto(texto, "#NACIONALIDADE", pessoa.getNacionalidade());
138
                texto = replaceTexto(texto, "#PAI_NOME", pessoa.getNomePai());
139
                texto = replaceTexto(texto, "#MAE_NOME", pessoa.getNomeMae());
140
                texto = replaceTexto(texto, "#NASCIMENTO_DATA", pessoa.getDataNascimentoFormatada());
141
                texto = replaceTexto(texto, "#NASCIMENTO_LOCAL", pessoa.getLocalNascimento());
142
                texto = replaceTexto(texto, "#NASCIMENTO_UF", pessoa.getUfNascimento());
143
                texto = replaceTexto(texto, "#EMAIL", pessoa.getEmail());
144
                texto = replaceTexto(texto, "#TELEFONE", pessoa.getTelefone());
145
 
318 espaco 146
                texto = replaceTexto(texto, "#DEFICIENCIA_MOTORA_SIM", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())?
147
                                pessoa.getPessoaDeficienteMotora()? "X" : " " : " ");
148
                texto = replaceTexto(texto, "#DEFICIENCIA_MOTORA_NAO", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())?
149
                                !pessoa.getPessoaDeficienteMotora()? "X" : " " : " ");
304 espaco 150
 
318 espaco 151
                texto = replaceTexto(texto, "#DEFICIENCIA_VISUAL_SIM", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteVisual())?
152
                                pessoa.getPessoaDeficienteVisual()? "X" : " " : " ");
153
                texto = replaceTexto(texto, "#DEFICIENCIA_VISUAL_NAO", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteVisual())?
154
                                !pessoa.getPessoaDeficienteVisual()? "X" : " " : " ");
304 espaco 155
 
318 espaco 156
                texto = replaceTexto(texto, "#DEFICIENCIA_AUDITIVA_SIM", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteAuditiva())?
157
                                pessoa.getPessoaDeficienteAuditiva()? "X" : " " : " ");
158
                texto = replaceTexto(texto, "#DEFICIENCIA_AUDITIVA_NAO", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteAuditiva())?
159
                                !pessoa.getPessoaDeficienteAuditiva()? "X" : " " : " ");
304 espaco 160
 
318 espaco 161
                texto = replaceTexto(texto, "#REABILITADO_SIM", VerificadorUtil.naoEstaNulo(pessoa.getPessoaReabilitado())?
162
                                pessoa.getPessoaReabilitado()? "X" : " " : " ");
163
                texto = replaceTexto(texto, "#REABILITADO_NAO", VerificadorUtil.naoEstaNulo(pessoa.getPessoaReabilitado())?
164
                                !pessoa.getPessoaReabilitado()? "X" : " " : " ");
304 espaco 165
 
166
                texto = replaceTexto(texto, "#DEFICIENCIA_OBSERVACOES", pessoa.getPessoaDeficienteObservacao());
167
                texto = replaceTexto(texto, "#DEPENDENTES_DADOS", pessoa.getDadosDependentes());
168
 
318 espaco 169
                texto = replaceTexto(texto, "#DEPENDENTES_IRRF_SIM", VerificadorUtil.naoEstaNulo(pessoa.getDependentesFinsIRRF())?
170
                                pessoa.getDependentesFinsIRRF()? "X" : " " : " ");
171
                texto = replaceTexto(texto, "#DEPENDENTES_IRRF_NAO", VerificadorUtil.naoEstaNulo(pessoa.getDependentesFinsIRRF())?
172
                                !pessoa.getDependentesFinsIRRF()? "X" : " " : " ");
304 espaco 173
 
318 espaco 174
                texto = replaceTexto(texto, "#DEPENDENTES_SAL_FAMILIA_SIM", VerificadorUtil.naoEstaNulo(pessoa.getDependentesFinsSalarioFamilia())?
175
                                pessoa.getDependentesFinsSalarioFamilia()? "X" : " " : " ");
176
                texto = replaceTexto(texto, "#DEPENDENTES_SAL_FAMILIA_NAO", VerificadorUtil.naoEstaNulo(pessoa.getDependentesFinsSalarioFamilia())?
177
                                !pessoa.getDependentesFinsSalarioFamilia()? "X" : " " : " ");
304 espaco 178
 
106 espaco 179
                for (TipoEstadoCivil estadoCivil : TipoEstadoCivil.values()) {
180
                        texto = replaceTexto(texto, "#ESTADOCIVIL[" + estadoCivil.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEstadoCivil())?
181
                                        pessoa.getTipoEstadoCivil().equals(estadoCivil.getValor())? "X" : " " : " ");
182
                }
183
 
184
                for (TipoSexo sexo : TipoSexo.values()) {
185
                        texto = replaceTexto(texto, "#SEXO[" + sexo.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getSexo())?
186
                                        pessoa.getSexo().equals(sexo.getValor())? "X" : " " : " ");
187
                }
188
 
189
                for (TipoRacaCor racaCor : TipoRacaCor.values()) {
190
                        texto = replaceTexto(texto, "#RACA_" + racaCor.getValor(), VerificadorUtil.naoEstaNulo(pessoa.getTipoRacaCor())?
191
                                        pessoa.getTipoRacaCor().equals(racaCor.getValor())? "X" : " " : " ");
192
                }
193
 
194
                for (TipoEscolaridade escolaridade : TipoEscolaridade.values()) {
195
                        texto = replaceTexto(texto, "#ESCOLARIDADE[" + escolaridade.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEscolaridade())?
196
                                        pessoa.getTipoEscolaridade().equals(escolaridade.getValor())? "X" : " " : " ");
197
                }
198
 
304 espaco 199
                for (TipoDependentes tipoDependente : TipoDependentes.values()) {
200
                        texto = replaceTexto(texto, "#TIPO_DEPENDENTE[" + tipoDependente.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoDependendes())?
201
                                        pessoa.getTipoDependendes().equals(tipoDependente.getValor())? "X" : " " : " ");
202
                }
203
 
106 espaco 204
                if (VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal())) {
205
                        texto = replaceTexto(texto, "#ENDERECO_LOGRADOURO", pessoa.getEnderecoPrincipal().getLogradouro());
206
                        texto = replaceTexto(texto, "#ENDERECO_NUMERO", pessoa.getEnderecoPrincipal().getNumero());
207
                        texto = replaceTexto(texto, "#ENDERECO_BAIRRO", pessoa.getEnderecoPrincipal().getBairro());
208
                        texto = replaceTexto(texto, "#ENDERECO_COMPLEMENTO", pessoa.getEnderecoPrincipal().getComplemento());
209
                        texto = replaceTexto(texto, "#ENDERECO_CIDADE", pessoa.getEnderecoPrincipal().getMunicipio());
210
                        texto = replaceTexto(texto, "#ENDERECO_CEP", pessoa.getEnderecoPrincipal().getCepFormatado());
211
                        texto = replaceTexto(texto, "#ENDERECO_PAIS", "BRASIL");
212
                        texto = replaceTexto(texto, "#ENDERECO_PROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
213
                                        pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
214
                        texto = replaceTexto(texto, "#ENDERECO_NAOPROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
215
                                        !pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
216
                        texto = replaceTexto(texto, "#ENDERECO_COM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
217
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
218
                        texto = replaceTexto(texto, "#ENDERECO_SEM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
219
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
220
                }
221
 
222
                if (VerificadorUtil.naoEstaNulo(funcionario)) {
223
                        texto = replaceTexto(texto, "#PIS", funcionario.getPis());
224
                        texto = replaceTexto(texto, "#CTPS_NUMERO", funcionario.getCtps());
225
                        texto = replaceTexto(texto, "#CTPS_SERIE", funcionario.getCtpsSerie());
226
                        texto = replaceTexto(texto, "#CTPS_UF", funcionario.getCtpsUf());
304 espaco 227
 
318 espaco 228
                        texto = replaceTexto(texto, "#PRIMEIRO_EMPREGO_SIM", VerificadorUtil.naoEstaNulo(funcionario.getPrimeiroEmprego())?
229
                                        funcionario.getPrimeiroEmprego()? "X" : " " : " ");
230
                        texto = replaceTexto(texto, "#PRIMEIRO_EMPREGO_NAO", VerificadorUtil.naoEstaNulo(funcionario.getPrimeiroEmprego())?
231
                                        !funcionario.getPrimeiroEmprego()? "X" : " " : " ");
304 espaco 232
 
318 espaco 233
                        texto = replaceTexto(texto, "#OPTANTE_FGTS_SIM", VerificadorUtil.naoEstaNulo(funcionario.getOptantePeloFGTS())?
234
                                        funcionario.getOptantePeloFGTS()? "X" : " " : " ");
235
                        texto = replaceTexto(texto, "#OPTANTE_FGTS_NAO", VerificadorUtil.naoEstaNulo(funcionario.getOptantePeloFGTS())?
236
                                        !funcionario.getOptantePeloFGTS()? "X" : " " : " ");
106 espaco 237
                }
238
                return texto;
239
        }
240
 
241
        private String replaceTexto(String texto, String codigo, String campo) {
242
                if (texto != null && texto.contains(codigo)) {
243
                        if (VerificadorUtil.naoEstaNulo(campo)) {
244
                                return texto.replace(codigo, campo);
245
                        } else {
246
                                return texto.replace(codigo, " ");
247
                        }
248
        }
249
                return texto;
250
        }
251
 
252
}