Subversion Repositories Integrator Subversion

Rev

Rev 195 | Rev 318 | 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
 
304 espaco 146
                texto = replaceTexto(texto, "#DEFICIENCIA_MOTORA_SIM", pessoa.getPessoaDeficienteMotora()? "X" : " ");
147
                texto = replaceTexto(texto, "#DEFICIENCIA_MOTORA_NAO", !pessoa.getPessoaDeficienteMotora()? "X" : " ");
148
 
149
                texto = replaceTexto(texto, "#DEFICIENCIA_VISUAL_SIM", pessoa.getPessoaDeficienteMotora()? "X" : " ");
150
                texto = replaceTexto(texto, "#DEFICIENCIA_VISUAL_NAO", !pessoa.getPessoaDeficienteMotora()? "X" : " ");
151
 
152
                texto = replaceTexto(texto, "#DEFICIENCIA_AUDITIVA_SIM", pessoa.getPessoaDeficienteAuditiva()? "X" : " ");
153
                texto = replaceTexto(texto, "#DEFICIENCIA_AUDITIVA_NAO", !pessoa.getPessoaDeficienteAuditiva()? "X" : " ");
154
 
155
                texto = replaceTexto(texto, "#REABILITADO_SIM", pessoa.getPessoaReabilitado()? "X" : " ");
156
                texto = replaceTexto(texto, "#REABILITADO_NAO", !pessoa.getPessoaReabilitado()? "X" : " ");
157
 
158
                texto = replaceTexto(texto, "#DEFICIENCIA_OBSERVACOES", pessoa.getPessoaDeficienteObservacao());
159
                texto = replaceTexto(texto, "#DEPENDENTES_DADOS", pessoa.getDadosDependentes());
160
 
161
                texto = replaceTexto(texto, "#DEPENDENTES_IRRF_SIM", pessoa.getDependentesFinsIRRF()? "X" : " ");
162
                texto = replaceTexto(texto, "#DEPENDENTES_IRRF_NAO", !pessoa.getDependentesFinsIRRF()? "X" : " ");
163
 
164
                texto = replaceTexto(texto, "#DEPENDENTES_SAL_FAMILIA_SIM", pessoa.getDependentesFinsSalarioFamilia()? "X" : " ");
165
                texto = replaceTexto(texto, "#DEPENDENTES_SAL_FAMILIA_NAO", !pessoa.getDependentesFinsSalarioFamilia()? "X" : " ");
166
 
106 espaco 167
                for (TipoEstadoCivil estadoCivil : TipoEstadoCivil.values()) {
168
                        texto = replaceTexto(texto, "#ESTADOCIVIL[" + estadoCivil.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEstadoCivil())?
169
                                        pessoa.getTipoEstadoCivil().equals(estadoCivil.getValor())? "X" : " " : " ");
170
                }
171
 
172
                for (TipoSexo sexo : TipoSexo.values()) {
173
                        texto = replaceTexto(texto, "#SEXO[" + sexo.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getSexo())?
174
                                        pessoa.getSexo().equals(sexo.getValor())? "X" : " " : " ");
175
                }
176
 
177
                for (TipoRacaCor racaCor : TipoRacaCor.values()) {
178
                        texto = replaceTexto(texto, "#RACA_" + racaCor.getValor(), VerificadorUtil.naoEstaNulo(pessoa.getTipoRacaCor())?
179
                                        pessoa.getTipoRacaCor().equals(racaCor.getValor())? "X" : " " : " ");
180
                }
181
 
182
                for (TipoEscolaridade escolaridade : TipoEscolaridade.values()) {
183
                        texto = replaceTexto(texto, "#ESCOLARIDADE[" + escolaridade.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEscolaridade())?
184
                                        pessoa.getTipoEscolaridade().equals(escolaridade.getValor())? "X" : " " : " ");
185
                }
186
 
304 espaco 187
                for (TipoDependentes tipoDependente : TipoDependentes.values()) {
188
                        texto = replaceTexto(texto, "#TIPO_DEPENDENTE[" + tipoDependente.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoDependendes())?
189
                                        pessoa.getTipoDependendes().equals(tipoDependente.getValor())? "X" : " " : " ");
190
                }
191
 
106 espaco 192
                if (VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal())) {
193
                        texto = replaceTexto(texto, "#ENDERECO_LOGRADOURO", pessoa.getEnderecoPrincipal().getLogradouro());
194
                        texto = replaceTexto(texto, "#ENDERECO_NUMERO", pessoa.getEnderecoPrincipal().getNumero());
195
                        texto = replaceTexto(texto, "#ENDERECO_BAIRRO", pessoa.getEnderecoPrincipal().getBairro());
196
                        texto = replaceTexto(texto, "#ENDERECO_COMPLEMENTO", pessoa.getEnderecoPrincipal().getComplemento());
197
                        texto = replaceTexto(texto, "#ENDERECO_CIDADE", pessoa.getEnderecoPrincipal().getMunicipio());
198
                        texto = replaceTexto(texto, "#ENDERECO_CEP", pessoa.getEnderecoPrincipal().getCepFormatado());
199
                        texto = replaceTexto(texto, "#ENDERECO_PAIS", "BRASIL");
200
                        texto = replaceTexto(texto, "#ENDERECO_PROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
201
                                        pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
202
                        texto = replaceTexto(texto, "#ENDERECO_NAOPROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
203
                                        !pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
204
                        texto = replaceTexto(texto, "#ENDERECO_COM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
205
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
206
                        texto = replaceTexto(texto, "#ENDERECO_SEM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
207
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
208
                }
209
 
210
                if (VerificadorUtil.naoEstaNulo(funcionario)) {
211
                        texto = replaceTexto(texto, "#PIS", funcionario.getPis());
212
                        texto = replaceTexto(texto, "#CTPS_NUMERO", funcionario.getCtps());
213
                        texto = replaceTexto(texto, "#CTPS_SERIE", funcionario.getCtpsSerie());
214
                        texto = replaceTexto(texto, "#CTPS_UF", funcionario.getCtpsUf());
304 espaco 215
 
216
                        texto = replaceTexto(texto, "#PRIMEIRO_EMPREGO_SIM", funcionario.getPrimeiroEmprego()? "X" : " ");
217
                        texto = replaceTexto(texto, "#PRIMEIRO_EMPREGO_NAO", !funcionario.getPrimeiroEmprego()? "X" : " ");
218
 
219
                        texto = replaceTexto(texto, "#OPTANTE_FGTS_SIM", funcionario.getOptantePeloFGTS()? "X" : " ");
220
                        texto = replaceTexto(texto, "#OPTANTE_FGTS_NAO", !funcionario.getOptantePeloFGTS()? "X" : " ");
106 espaco 221
                }
222
                return texto;
223
        }
224
 
225
        private String replaceTexto(String texto, String codigo, String campo) {
226
                if (texto != null && texto.contains(codigo)) {
227
                        if (VerificadorUtil.naoEstaNulo(campo)) {
228
                                return texto.replace(codigo, campo);
229
                        } else {
230
                                return texto.replace(codigo, " ");
231
                        }
232
        }
233
                return texto;
234
        }
235
 
236
}