Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
695 blopes 1
package br.com.ec.domain.service.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.primefaces.event.FlowEvent;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.stereotype.Service;
18
 
19
import br.com.ec.core.exception.NegocioException;
20
import br.com.ec.core.generic.AbstractService;
21
import br.com.ec.core.generic.GenericRepository;
22
import br.com.ec.core.util.StringUtil;
23
import br.com.ec.core.util.VerificadorUtil;
24
import br.com.ec.core.validador.Validador;
25
import br.com.ec.domain.dto.PessoaDTO;
26
import br.com.ec.domain.model.Endereco;
27
import br.com.ec.domain.model.Funcionario;
28
import br.com.ec.domain.model.Pessoa;
29
import br.com.ec.domain.model.tipos.TipoComissionamento;
30
import br.com.ec.domain.model.tipos.TipoDependentes;
31
import br.com.ec.domain.model.tipos.TipoEscolaridade;
32
import br.com.ec.domain.model.tipos.TipoEstadoCivil;
33
import br.com.ec.domain.model.tipos.TipoRacaCor;
34
import br.com.ec.domain.model.tipos.TipoSexo;
35
import br.com.ec.domain.service.FuncionarioService;
36
import br.com.ec.domain.service.PessoaService;
37
import br.com.ec.repository.PessoaRepository;
38
 
39
@Service
40
public class PessoaServiceImpl extends AbstractService<Pessoa> implements PessoaService {
41
 
42
        private FuncionarioService funcionarioService;
43
        private PessoaRepository pessoaRepository;
44
 
45
        @Autowired
46
        public PessoaServiceImpl(Validador validador, PessoaRepository pessoaRepository, FuncionarioService funcionarioService) {
47
                super(validador);
48
                this.pessoaRepository = pessoaRepository;
49
                this.funcionarioService = funcionarioService;
50
        }
51
 
52
        @Override
53
        protected GenericRepository<Pessoa> getRepository() {
54
                return pessoaRepository;
55
        }
56
 
57
        @Override
58
        protected void regrasNegocioCadastrar(Pessoa pessoa) {
59
                if (VerificadorUtil.estaNulo(pessoa.getCadastroFinalizado())) {
60
                        pessoa.setCadastroFinalizado(true);
61
                }
62
                pessoa.setAtivo(true);
63
        }
64
 
65
        @Override
66
        public List<PessoaDTO> consultarPessoasJuridicas(String cnpj) {
67
                return pessoaRepository.consultarPessoasJuridicas(cnpj);
68
        }
69
 
70
        @Override
71
        public Pessoa consultarPessoaPorCpfOuCpnj(String cpfCnpj) {
72
                return pessoaRepository.consultarPessoaPorCpfOuCpnj(cpfCnpj);
73
        }
74
 
75
        @Override
76
        public Pessoa cadastroExterno(FlowEvent evento, Pessoa pessoa, Funcionario funcionario, Endereco endereco) {
77
                if (VerificadorUtil.estaNulo(evento)) {
78
                        pessoa.setCpfCnpj(StringUtil.retornarApenasNumeros(pessoa.getCpfCnpj()));
79
                        Pessoa pessoaConsultada = consultarPessoaPorCpfOuCpnj(StringUtil.retornarApenasNumeros(pessoa.getCpfCnpj()));
80
                        if (VerificadorUtil.estaNulo(pessoaConsultada)) {
81
                                pessoa.setCadastroFinalizado(false);
82
                                this.cadastrar(pessoa);
83
                                Funcionario funcionarioNovo = new Funcionario(pessoa, TipoComissionamento.COMISSSIONAMENTO_ESPACO_CASE.getValor(), true);
84
                                funcionarioService.cadastrar(funcionarioNovo);
85
                                pessoa.setFuncionario(funcionarioNovo);
86
                                this.alterar(pessoa);
87
                                return pessoa;
88
                        }
89
                        Funcionario funcionarioPessoa = funcionarioService.consultarFuncionarioPelaPessoa(pessoaConsultada.getSequencial());
90
                        if (VerificadorUtil.estaNulo(funcionarioPessoa)) {
91
                                Funcionario funcionarioNovo = new Funcionario(pessoaConsultada, TipoComissionamento.COMISSSIONAMENTO_ESPACO_CASE.getValor(), true);
92
                                funcionarioService.cadastrar(funcionarioNovo);
93
                                pessoaConsultada.setFuncionario(funcionarioNovo);
94
                        } else {
95
                                pessoaConsultada.setFuncionario(funcionarioPessoa);
96
                        }
97
                        if (pessoaConsultada.getCadastroFinalizado()) {
98
                                throw new NegocioException("CADASTRO INDISPONÍVEL");
99
                        }
100
                        return pessoaConsultada;
101
                }
102
                if (VerificadorUtil.naoEstaNulo(endereco)) {
103
                        if (VerificadorUtil.naoEstaNuloOuVazio(endereco.getCep())) {
104
                                pessoa.atualizarEndereco(endereco);
105
                        }
106
                }
107
                this.alterar(pessoa);
108
                funcionario.setPessoa(pessoa);
109
                funcionarioService.alterar(funcionario);
110
                pessoa = detalharPessoa(pessoa.getSequencial());
111
                pessoa.setFuncionario(funcionarioService.consultarFuncionarioPelaPessoa(pessoa.getSequencial()));
112
                return pessoa;
113
        }
114
 
115
        @Override
116
        public Pessoa detalharPessoa(Long sequencialPessoa) {
117
                return pessoaRepository.detalharPessoa(sequencialPessoa);
118
        }
119
 
120
        @Override
121
        public byte[] emitirFichaColaboradorEsocial(ServletContext contexto, Long sequencialPessoa) {
122
                Pessoa pessoa = pessoaRepository.detalharPessoa(sequencialPessoa);
123
                return replaceTextosArquivos("/arquivos/modelos/modelo_formulario_esocial.doc", contexto, pessoa);
124
        }
125
 
126
        @Override
127
        public byte[] emitirSolicitacaoExameAdmissional(ServletContext contexto, Long sequencialPessoa) {
128
                Pessoa pessoa = pessoaRepository.detalharPessoa(sequencialPessoa);
129
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_admissional.docx", contexto, pessoa);
130
        }
131
 
132
        @Override
133
        public byte[] emitirSolicitacaoExameDemissional(ServletContext contexto, Long sequencialPessoa) {
134
                Pessoa pessoa = pessoaRepository.detalharPessoa(sequencialPessoa);
135
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_demissional.docx", contexto, pessoa);
136
        }
137
 
138
        @Override
139
        public byte[] emitirSolicitacaoExamePeriodico(ServletContext contexto, Long sequencialPessoa) {
140
                Pessoa pessoa = pessoaRepository.detalharPessoa(sequencialPessoa);
141
                return replaceTextosArquivos("/arquivos/modelos/modelo_exame_periodico.docx", contexto, pessoa);
142
        }
143
 
144
        @Override
145
        public byte[] emitirSolicitacaoAberturaContaBancaria(ServletContext contexto, Long sequencialPessoa) {
146
                Pessoa pessoa = pessoaRepository.detalharPessoa(sequencialPessoa);
147
                return replaceTextosArquivos("/arquivos/modelos/modelo_abertura_conta.docx", contexto, pessoa);
148
        }
149
 
150
        @Override
151
        public byte[] emitirAdesaoValeTransporte(ServletContext contexto, Long sequencialPessoa) {
152
                Pessoa pessoa = pessoaRepository.detalharPessoa(sequencialPessoa);
153
                return replaceTextosArquivos("/arquivos/modelos/modelo_adesao_vale_transporte.docx", contexto, pessoa);
154
        }
155
 
156
        @SuppressWarnings("resource")
157
        private byte[] replaceTextosArquivos(String caminhoArquivo, ServletContext contexto, Pessoa pessoa) {
158
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
159
                XWPFDocument doc;
160
        try {
161
                Funcionario funcionario = funcionarioService.consultarFuncionarioPelaPessoa(pessoa.getSequencial());
162
                        doc = new XWPFDocument(OPCPackage.open(contexto.getResourceAsStream(caminhoArquivo)));
163
                        for (XWPFParagraph paragrafo : doc.getParagraphs()) {
164
                                replaceParagrafo(pessoa, funcionario, paragrafo);
165
                        }
166
                        for (XWPFTable tbl : doc.getTables()) {
167
                                for (XWPFTableRow row : tbl.getRows()) {
168
                                        for (XWPFTableCell cell : row.getTableCells()) {
169
                                                for (XWPFParagraph p : cell.getParagraphs()) {
170
                                                        replaceParagrafo(pessoa, funcionario, p);
171
                                                }
172
                                        }
173
                                }
174
                        }
175
                doc.write(baos);
176
                return baos.toByteArray();
177
                } catch (Exception e) {
178
                        e.printStackTrace();
179
                }
180
        return null;
181
        }
182
 
183
        private void replaceParagrafo(Pessoa pessoa, Funcionario funcionario, XWPFParagraph paragrafo) {
184
                String textoParagrafo = "";
185
                Integer posicao = 0;
186
                for (XWPFRun r : paragrafo.getRuns()) {
187
                        if (VerificadorUtil.naoEstaNuloOuVazio(r.text())) {
188
                                textoParagrafo = textoParagrafo + r.text();
189
                        }
190
                        posicao++;
191
                }
192
                posicao = 0;
193
                if (textoParagrafo.contains("#")) {
194
                        for (XWPFRun r : paragrafo.getRuns()) {
195
                                if (posicao == 0) {
196
                                        r.setText(replaceTextos(textoParagrafo, pessoa, funcionario), 0);
197
                                } else {
198
                                        r.setText("", 0);
199
                                }
200
                                posicao++;
201
                        }
202
                }
203
        }
204
 
205
        private String replaceTextos(String texto, Pessoa pessoa, Funcionario funcionario) {
206
                texto = replaceTexto(texto, "#NOME", pessoa.getNome());
207
                texto = replaceTexto(texto, "#CPF", pessoa.getCpfCnpjFormatado());
208
                texto = replaceTexto(texto, "#RG_NUMERO", pessoa.getRg());
209
                texto = replaceTexto(texto, "#RG_DATAEXPEDICAO", pessoa.getRgDataExpedicaoFormatada());
210
                texto = replaceTexto(texto, "#RG_ORGAOEMISSOR", pessoa.getRgOrgaoEmissor());
211
                texto = replaceTexto(texto, "#NACIONALIDADE", pessoa.getNacionalidade());
212
                texto = replaceTexto(texto, "#PAI_NOME", pessoa.getNomePai());
213
                texto = replaceTexto(texto, "#MAE_NOME", pessoa.getNomeMae());
214
                texto = replaceTexto(texto, "#NASCIMENTO_DATA", pessoa.getDataNascimentoFormatada());
215
                texto = replaceTexto(texto, "#NASCIMENTO_LOCAL", pessoa.getLocalNascimento());
216
                texto = replaceTexto(texto, "#NASCIMENTO_UF", pessoa.getUfNascimento());
217
                texto = replaceTexto(texto, "#EMAIL", pessoa.getEmail());
218
                texto = replaceTexto(texto, "#TELEFONE", pessoa.getTelefone());
219
 
220
                texto = replaceTexto(texto, "#DEFICIENCIA_MOTORA_SIM", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())? pessoa.getPessoaDeficienteMotora()? "X" : " " : " ");
221
                texto = replaceTexto(texto, "#DEFICIENCIA_MOTORA_NAO", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())? !pessoa.getPessoaDeficienteMotora()? "X" : " " : " ");
222
 
223
                texto = replaceTexto(texto, "#DEFICIENCIA_VISUAL_SIM", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())? pessoa.getPessoaDeficienteVisual()? "X" : " " : " ");
224
                texto = replaceTexto(texto, "#DEFICIENCIA_VISUAL_NAO", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())? !pessoa.getPessoaDeficienteVisual()? "X" : " " : " ");
225
 
226
                texto = replaceTexto(texto, "#DEFICIENCIA_AUDITIVA_SIM", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())? pessoa.getPessoaDeficienteAuditiva()? "X" : " " : " ");
227
                texto = replaceTexto(texto, "#DEFICIENCIA_AUDITIVA_NAO", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())? !pessoa.getPessoaDeficienteAuditiva()? "X" : " " : " ");
228
 
229
                texto = replaceTexto(texto, "#REABILITADO_SIM", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())? pessoa.getPessoaReabilitado()? "X" : " " : " ");
230
                texto = replaceTexto(texto, "#REABILITADO_NAO", VerificadorUtil.naoEstaNulo(pessoa.getPessoaDeficienteMotora())? !pessoa.getPessoaReabilitado()? "X" : " " : " ");
231
 
232
                texto = replaceTexto(texto, "#DEFICIENCIA_OBSERVACOES", pessoa.getPessoaDeficienteObservacao());
233
 
234
                for (TipoDependentes tipoDependente : TipoDependentes.values()) {
235
                        texto = replaceTexto(texto, "#TIPO_DEPENDENTE[" + tipoDependente.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEstadoCivil())?
236
                                        pessoa.getTipoEstadoCivil().equals(tipoDependente.getValor())? "X" : " " : " ");
237
                }
238
 
239
                texto = replaceTexto(texto, "#DEPENDENTES_DADOS", pessoa.getDadosDependentes());
240
 
241
                texto = replaceTexto(texto, "#DEPENDENTES_IRRF_SIM", VerificadorUtil.naoEstaNulo(pessoa.getDependentesFinsIRRF())? pessoa.getDependentesFinsIRRF()? "X" : " " : " ");
242
                texto = replaceTexto(texto, "#DEPENDENTES_IRRF_NAO", VerificadorUtil.naoEstaNulo(pessoa.getDependentesFinsIRRF())? !pessoa.getDependentesFinsIRRF()? "X" : " " : " ");
243
 
244
                texto = replaceTexto(texto, "#DEPENDENTES_SAL_FAMILIA_SIM", VerificadorUtil.naoEstaNulo(pessoa.getDependentesFinsSalarioFamilia())? pessoa.getDependentesFinsSalarioFamilia()? "X" : " " : " ");
245
                texto = replaceTexto(texto, "#DEPENDENTES_SAL_FAMILIA_NAO", VerificadorUtil.naoEstaNulo(pessoa.getDependentesFinsSalarioFamilia())? !pessoa.getDependentesFinsSalarioFamilia()? "X" : " " : " ");
246
 
247
                for (TipoEstadoCivil estadoCivil : TipoEstadoCivil.values()) {
248
                        texto = replaceTexto(texto, "#ESTADOCIVIL[" + estadoCivil.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEstadoCivil())?
249
                                        pessoa.getTipoEstadoCivil().equals(estadoCivil.getValor())? "X" : " " : " ");
250
                }
251
 
252
                for (TipoSexo sexo : TipoSexo.values()) {
253
                        texto = replaceTexto(texto, "#SEXO[" + sexo.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getSexo())?
254
                                        pessoa.getSexo().equals(sexo.getValor())? "X" : " " : " ");
255
                }
256
 
257
                for (TipoRacaCor racaCor : TipoRacaCor.values()) {
258
                        texto = replaceTexto(texto, "#RACA_" + racaCor.getValor(), VerificadorUtil.naoEstaNulo(pessoa.getTipoRacaCor())?
259
                                        pessoa.getTipoRacaCor().equals(racaCor.getValor())? "X" : " " : " ");
260
                }
261
 
262
                for (TipoEscolaridade escolaridade : TipoEscolaridade.values()) {
263
                        texto = replaceTexto(texto, "#ESCOLARIDADE[" + escolaridade.getValor() + "]", VerificadorUtil.naoEstaNulo(pessoa.getTipoEscolaridade())?
264
                                        pessoa.getTipoEscolaridade().equals(escolaridade.getValor())? "X" : " " : " ");
265
                }
266
 
267
                if (VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal())) {
268
                        texto = replaceTexto(texto, "#ENDERECO_LOGRADOURO", pessoa.getEnderecoPrincipal().getLogradouro());
269
                        texto = replaceTexto(texto, "#ENDERECO_NUMERO", pessoa.getEnderecoPrincipal().getNumero());
270
                        texto = replaceTexto(texto, "#ENDERECO_BAIRRO", pessoa.getEnderecoPrincipal().getBairro());
271
                        texto = replaceTexto(texto, "#ENDERECO_COMPLEMENTO", pessoa.getEnderecoPrincipal().getComplemento());
272
                        texto = replaceTexto(texto, "#ENDERECO_CIDADE", pessoa.getEnderecoPrincipal().getMunicipio());
273
                        texto = replaceTexto(texto, "#ENDERECO_CEP", pessoa.getEnderecoPrincipal().getCepFormatado());
274
                        texto = replaceTexto(texto, "#ENDERECO_PAIS", "BRASIL");
275
                        texto = replaceTexto(texto, "#ENDERECO_PROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
276
                                        pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
277
                        texto = replaceTexto(texto, "#ENDERECO_NAOPROPRIA", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorPropria())?
278
                                        !pessoa.getEnderecoPrincipal().getIndicadorPropria()? "X" : " " : " ");
279
                        texto = replaceTexto(texto, "#ENDERECO_COM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
280
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
281
                        texto = replaceTexto(texto, "#ENDERECO_SEM_FGTS", VerificadorUtil.naoEstaNulo(pessoa.getEnderecoPrincipal().getIndicadorUsoFgts())?
282
                                        !pessoa.getEnderecoPrincipal().getIndicadorUsoFgts()? "X" : " " : " ");
283
                }
284
 
285
                if (VerificadorUtil.naoEstaNulo(funcionario)) {
286
                        texto = replaceTexto(texto, "#PIS", funcionario.getPis());
287
                        texto = replaceTexto(texto, "#CTPS_NUMERO", funcionario.getCtps());
288
                        texto = replaceTexto(texto, "#CTPS_SERIE", funcionario.getCtpsSerie());
289
                        texto = replaceTexto(texto, "#CTPS_UF", funcionario.getCtpsUf());
290
 
291
                        texto = replaceTexto(texto, "#PRIMEIRO_EMPREGO_SIM", VerificadorUtil.naoEstaNulo(funcionario.getPrimeiroEmprego())? funcionario.getPrimeiroEmprego()? "X" : " " : " ");
292
                        texto = replaceTexto(texto, "#PRIMEIRO_EMPREGO_NAO", VerificadorUtil.naoEstaNulo(funcionario.getPrimeiroEmprego())? !funcionario.getPrimeiroEmprego()? "X" : " " : " ");
293
 
294
                        texto = replaceTexto(texto, "#OPTANTE_FGTS_SIM", VerificadorUtil.naoEstaNulo(funcionario.getOptantePeloFGTS())? funcionario.getOptantePeloFGTS()? "X" : " " : " ");
295
                        texto = replaceTexto(texto, "#OPTANTE_FGTS_NAO", VerificadorUtil.naoEstaNulo(funcionario.getOptantePeloFGTS())? !funcionario.getOptantePeloFGTS()? "X" : " " : " ");
296
                }
297
                return texto;
298
        }
299
 
300
        private String replaceTexto(String texto, String codigo, String campo) {
301
                if (texto != null && texto.contains(codigo)) {
302
                        if (VerificadorUtil.naoEstaNulo(campo)) {
303
                                return texto.replace(codigo, campo);
304
                        } else {
305
                                return texto.replace(codigo, " ");
306
                        }
307
        }
308
                return texto;
309
        }
310
 
311
        /*
312
        @Override
313
        public List<Pessoa> consultarPessoasJuridicas() {
314
                return pessoaRepository.consultarPessoasJuridicas();
315
        }
316
        */
317
}