Subversion Repositories Integrator Subversion

Rev

Rev 106 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
106 espaco 1
package br.com.ec.domain.service.arquivo.impl;
2
 
3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.IOException;
6
import java.util.List;
7
import java.util.zip.ZipEntry;
8
import java.util.zip.ZipOutputStream;
9
 
10
import javax.inject.Inject;
11
import javax.servlet.ServletContext;
12
 
13
import org.primefaces.model.DefaultStreamedContent;
14
import org.primefaces.model.StreamedContent;
15
import org.springframework.stereotype.Service;
16
 
17
import br.com.ec.controller.util.PdfUtil;
195 espaco 18
import br.com.ec.core.exception.NegocioException;
19
import br.com.ec.core.generic.AbstractService;
20
import br.com.ec.core.generic.GenericRepository;
21
import br.com.ec.core.util.TipoExtensao;
22
import br.com.ec.core.util.VerificadorUtil;
23
import br.com.ec.core.validador.Validador;
106 espaco 24
import br.com.ec.domain.dto.ArquivoDTO;
25
import br.com.ec.domain.dto.ArquivoFuncionarioDTO;
26
import br.com.ec.domain.model.Funcionario;
27
import br.com.ec.domain.service.arquivo.ArquivoService;
28
import br.com.ec.domain.service.email.impl.GerenciadorEmailImpl;
29
import br.com.ec.domain.service.funcionario.FuncionarioService;
30
 
31
@Service
32
public class ArquivoServiceImpl extends AbstractService<ArquivoDTO> implements ArquivoService {
33
 
34
        private FuncionarioService funcionarioService;
35
 
36
        @Inject
37
        public ArquivoServiceImpl(Validador validador, FuncionarioService funcionarioService) {
38
                super(validador);
39
                this.funcionarioService = funcionarioService;
40
        }
41
 
42
        @Override
43
        protected GenericRepository<ArquivoDTO> getRepository() {
44
                return null;
45
        }
46
 
47
        @Override
48
        public StreamedContent gerarRecibos(ArquivoDTO arquivoDTO, ServletContext contexto) {
49
                ByteArrayInputStream input = new ByteArrayInputStream(gerarAquivos(arquivoDTO, contexto));
50
                return new DefaultStreamedContent(input, "application/zip", "recibos.zip");
51
        }
52
 
53
        private byte[] gerarAquivos(ArquivoDTO arquivoDTO, ServletContext contexto) {
54
                ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
55
                ZipOutputStream out = new ZipOutputStream(bytesOut);
56
                try {
57
                        List<byte[]> arquivos = PdfUtil.separarPDF(arquivoDTO.getArquivo());
58
                        int numeroArquivo = 1;
59
                        for (byte[] arquivo : arquivos) {
60
                                adicionarPaginaNoZip(arquivo, "recibo_" + numeroArquivo, ".pdf", out);
61
                                numeroArquivo++;
62
                        }
63
                } catch (IOException e) {
64
                        e.printStackTrace();
65
                } finally {
66
                        try {
67
                                out.close();
68
                        } catch (IOException e) {
69
                                e.printStackTrace();
70
                        }
71
        }
72
                return bytesOut.toByteArray();
73
        }
74
 
75
        private void adicionarPaginaNoZip(byte[] input, String nomeArquivo, String extensaoArquivo, ZipOutputStream out) {
76
                try {
77
                        ZipEntry newEntry = new ZipEntry(nomeArquivo + extensaoArquivo);
78
                out.putNextEntry(newEntry);
79
                out.write(input, 0, input.length);
80
                out.closeEntry();
81
                } catch (Exception e) {
82
                        e.printStackTrace();
83
                }
84
        }
85
 
86
        @Override
87
        public ArquivoDTO separarRecibos(ArquivoDTO arquivoDTO, String empresa, ServletContext servletContext) {
88
                List<byte[]> arquivos;
89
                try {
90
                        if (VerificadorUtil.estaNulo(empresa)) {
91
                                throw new NegocioException("SELECIONE A EMPRESA");
92
                        }
93
                        arquivos = PdfUtil.separarPDF(arquivoDTO.getArquivo());
94
                        int i = 1;
95
                        for (byte[] arquivo : arquivos) {
96
                                Funcionario funcionario = funcionarioService.consultarPorCodigoContabilidade(recuperarCodigoContabilidadeEmTexto(arquivo), empresa);
97
                                if (VerificadorUtil.naoEstaNulo(funcionario)) {
98
                                        funcionario.setValorLiquido(recuperarValorLiquidoEmTexto(arquivo));
99
                                        ArquivoFuncionarioDTO arquivoFuncionarioDTO = new ArquivoFuncionarioDTO();
100
                                        arquivoFuncionarioDTO.setArquivo(arquivo);
101
                                        arquivoFuncionarioDTO.setExtensao(TipoExtensao.PDF.getValue());
102
                                        arquivoFuncionarioDTO.setFuncionario(funcionario);
103
                                        arquivoDTO.getArquivosFuncionarios().add(arquivoFuncionarioDTO);
104
                                }
105
                                i++;
106
                        }
107
                } catch (IOException e) {
108
                        e.printStackTrace();
109
                        throw new NegocioException(e.getMessage());
110
                }
111
                return arquivoDTO;
112
        }
113
 
114
        @Override
115
        public void enviarRecibos(ArquivoDTO arquivoDTO, String empresa, ServletContext servletContext) {
116
                for (ArquivoFuncionarioDTO arquivoFuncionario : arquivoDTO.getArquivosFuncionarios()) {
117
                        Funcionario funcionario = funcionarioService.consultarPorCodigoContabilidade(recuperarCodigoContabilidadeEmTexto(arquivoFuncionario.getArquivo()), empresa);
118
                        if (VerificadorUtil.naoEstaNulo(funcionario) && arquivoFuncionario.getEnviarEmail()) {
119
                                if (VerificadorUtil.naoEstaNuloOuVazio(funcionario.getEmailDaPessoa())) {
120
                                        new GerenciadorEmailImpl()
121
                                                .comEmailsDestino(funcionario.getEmailDaPessoa())
122
                                                .comAssunto(arquivoDTO.getTituloEmail())
123
                                                .comConteudoHtml("RECIBO DE PAGAMENTO EM ANEXO.")
124
                                                .adicionarAnexo("Recibo de Pagamento - " + funcionario.getNomeDaPessoa() + "." + TipoExtensao.PDF.getValue(), arquivoFuncionario.getArquivo(), arquivoFuncionario.getExtensao())
125
                                                .enviar();
126
//                                      GerenciadorEmailImpl gerenciadorEmail = new GerenciadorEmailImpl();
127
//                                      gerenciadorEmail.setDestinatarios(funcionario.getEmailDaPessoa());
128
//                                      gerenciadorEmail.setAssunto(arquivoDTO.getTituloEmail());
129
//                                      gerenciadorEmail.setConteudo("Em anexo.");
130
//                                      gerenciadorEmail.setNomeArquivo("Recibo de Pagamento - " + funcionario.getNomeDaPessoa() + "." + TipoExtensao.PDF.getValue());
131
//                                      gerenciadorEmail.setArquivoAnexo(arquivoFuncionario.getArquivo());
132
//                                      gerenciadorEmail.setContentTypeAnexo(arquivoFuncionario.getExtensao());
133
//                                      gerenciadorEmail.enviarEmail();
134
                                }
135
                        }
136
                }
137
        }
138
 
139
        @Override
140
        public void separarEnviarRecibos(ArquivoDTO arquivoDTO, String empresa, ServletContext servletContext) {
141
                List<byte[]> arquivos;
142
                try {
143
                        arquivos = PdfUtil.separarPDF(arquivoDTO.getArquivo());
144
                        int i = 1;
145
                        for (byte[] arquivo : arquivos) {
146
                                Funcionario funcionario = funcionarioService.consultarPorCodigoContabilidade(recuperarCodigoContabilidadeEmTexto(arquivo), empresa);
147
                                if (VerificadorUtil.naoEstaNulo(funcionario)) {
148
                                        if (VerificadorUtil.naoEstaNuloOuVazio(funcionario.getEmailDaPessoa())) {
149
                                                // enviarEmailComArquivoEmAnexo
150
                                                System.out.println(funcionario.getNomeDaPessoa());
151
                                                System.out.println(funcionario.getEmailDaPessoa());
152
                                        }
153
                                }
154
                                i++;
155
                        }
156
                } catch (IOException e) {
157
                        e.printStackTrace();
158
                }
159
        }
160
 
161
        private Integer recuperarCodigoContabilidadeEmTexto(byte[] arquivo) {
162
                String codigo = recuperarTexto("CC:", arquivo);
163
                return VerificadorUtil.naoEstaNuloOuVazio(codigo)? new Integer(codigo) : null;
164
        }
165
 
166
        private Double recuperarValorLiquidoEmTexto(byte[] arquivo) {
167
                try {
168
                        String valorLiquido = recuperarTexto(3, arquivo);
169
                        valorLiquido = valorLiquido.replace(".", "").replace(",", ".");
170
                        return Double.parseDouble(valorLiquido);
171
                } catch (Exception e) {}
172
                return null;
173
        }
174
 
175
        private String recuperarNomeEmTexto(byte[] arquivo) {
176
                return recuperarTexto("Código", arquivo);
177
        }
178
 
179
        private String recuperarTexto(Integer capturarLinha, byte[] arquivo) {
180
                try {
181
                        Integer numeroLinha = 1;
182
                        String[] linhas = PdfUtil.extrairPDFEmLinhas(arquivo);
183
                        for (String linha : linhas) {
184
                                if (capturarLinha == numeroLinha) {
185
                                        return linha.trim();
186
                                }
187
                                numeroLinha++;
188
                        }
189
                } catch (IOException e) {
190
                        e.printStackTrace();
191
                }
192
                return "";
193
        }
194
 
195
        private String recuperarTexto(String contemLinha, byte[] arquivo) {
196
                try {
197
                        String[] linhas = PdfUtil.extrairPDFEmLinhas(arquivo);
198
                        boolean capturar = false;
199
                        for (String linha : linhas) {
200
                                if (capturar) {
201
                                        return linha.trim();
202
                                }
203
                                if (linha.contains(contemLinha)) {
204
                                        capturar = true;
205
                                }
206
                        }
207
                } catch (IOException e) {
208
                        e.printStackTrace();
209
                }
210
                return "";
211
        }
212
 
213
}