Subversion Repositories Integrator Subversion

Rev

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

Rev Author Line No. Line
357 espaco 1
package br.com.ec.domain.service.impl;
2
 
654 blopes 3
import java.util.ArrayList;
357 espaco 4
import java.util.List;
5
 
6
import org.springframework.beans.factory.annotation.Autowired;
7
import org.springframework.stereotype.Service;
8
 
9
import br.com.ec.core.exception.NegocioException;
10
import br.com.ec.core.generic.AbstractService;
11
import br.com.ec.core.generic.GenericRepository;
12
import br.com.ec.core.util.VerificadorUtil;
13
import br.com.ec.core.validador.Validador;
648 blopes 14
import br.com.ec.domain.dto.AvaliacaoDTO;
650 blopes 15
import br.com.ec.domain.dto.AvaliacaoFuncionarioDTO;
16
import br.com.ec.domain.dto.AvaliacaoLojaDTO;
654 blopes 17
import br.com.ec.domain.dto.AvaliacaoLojaFuncionarioDTO;
18
import br.com.ec.domain.dto.FuncionarioDTO;
722 blopes 19
import br.com.ec.domain.dto.LojaDTO;
20
import br.com.ec.domain.dto.VigenciaDTO;
357 espaco 21
import br.com.ec.domain.model.Avaliacao;
722 blopes 22
import br.com.ec.domain.model.AvaliacaoFuncionario;
724 blopes 23
import br.com.ec.domain.model.AvaliacaoFuncionarioId;
722 blopes 24
import br.com.ec.domain.model.AvaliacaoLoja;
357 espaco 25
import br.com.ec.domain.model.AvaliacaoProduto;
722 blopes 26
import br.com.ec.domain.model.Funcionario;
27
import br.com.ec.domain.model.Loja;
357 espaco 28
import br.com.ec.domain.model.Produto;
722 blopes 29
import br.com.ec.domain.model.Vigencia;
650 blopes 30
import br.com.ec.domain.service.AvaliacaoFuncionarioService;
31
import br.com.ec.domain.service.AvaliacaoLojaService;
357 espaco 32
import br.com.ec.domain.service.AvaliacaoProdutoService;
33
import br.com.ec.domain.service.AvaliacaoService;
654 blopes 34
import br.com.ec.domain.service.FuncionarioService;
722 blopes 35
import br.com.ec.domain.service.LojaService;
357 espaco 36
import br.com.ec.domain.service.ProdutoService;
37
import br.com.ec.repository.AvaliacaoRepository;
38
 
39
@Service
40
public class AvaliacaoServiceImpl extends AbstractService<Avaliacao> implements AvaliacaoService {
41
 
42
        private AvaliacaoRepository avaliacaoRepository;
43
 
44
        private ProdutoService produtoService;
45
        private AvaliacaoProdutoService avaliacaoProdutoService;
650 blopes 46
        private AvaliacaoLojaService avaliacaoLojaService;
47
        private AvaliacaoFuncionarioService avaliacaoFuncionarioService;
654 blopes 48
        private FuncionarioService funcionarioService;
722 blopes 49
        private LojaService lojaService;
357 espaco 50
 
51
        @Autowired
654 blopes 52
        public AvaliacaoServiceImpl(Validador validador, AvaliacaoRepository avaliacaoRepository,
53
                        ProdutoService produtoService, AvaliacaoProdutoService avaliacaoProdutoService,
54
                        AvaliacaoLojaService avaliacaoLojaService, AvaliacaoFuncionarioService avaliacaoFuncionarioService,
722 blopes 55
                        FuncionarioService funcionarioService, LojaService lojaService) {
357 espaco 56
                super(validador);
57
                this.avaliacaoRepository = avaliacaoRepository;
58
                this.produtoService = produtoService;
59
                this.avaliacaoProdutoService = avaliacaoProdutoService;
650 blopes 60
                this.avaliacaoLojaService = avaliacaoLojaService;
61
                this.avaliacaoFuncionarioService = avaliacaoFuncionarioService;
654 blopes 62
                this.funcionarioService = funcionarioService;
722 blopes 63
                this.lojaService = lojaService;
357 espaco 64
        }
65
 
66
        @Override
67
        protected GenericRepository<Avaliacao> getRepository() {
68
                return avaliacaoRepository;
69
        }
70
 
71
        @Override
648 blopes 72
        public AvaliacaoDTO consultarAvaliacao(Long sequencialVigencia) {
73
                return avaliacaoRepository.consultarAvaliacao(sequencialVigencia);
74
        }
75
 
76
        @Override
357 espaco 77
        public List<AvaliacaoProduto> consultarProdutosPromocaoInterna(Long sequencialAvaliacao) {
78
                return avaliacaoRepository.consultarProdutosPromocaoInterna(sequencialAvaliacao);
79
        }
80
 
81
        @Override
82
        public void excluirProdutoPromocaoInterna(AvaliacaoProduto avaliacaoProduto) {
83
                avaliacaoRepository.excluirProdutoPromocaoInterna(avaliacaoProduto);
84
        }
85
 
86
        @Override
87
        public void cadastrarProdutoPromocaoInterna(Avaliacao avaliacao, String codigoProduto) {
88
                Produto produto = produtoService.consultarProdutoPorCodigo(codigoProduto);
89
                if (VerificadorUtil.estaNulo(produto)) {
90
                        throw new NegocioException("Produto não identificado");
91
                }
92
                AvaliacaoProduto avaliacaoProduto = new AvaliacaoProduto();
93
                avaliacaoProduto.setProduto(produto);
94
                avaliacaoProduto.setAvaliacao(avaliacaoRepository.consultarPorId(avaliacao));
95
                avaliacaoProdutoService.cadastrar(avaliacaoProduto);
96
        }
97
 
650 blopes 98
        @Override
99
        public AvaliacaoDTO consultarAvaliacaoCompleta(Long sequencialAvaliacao) {
654 blopes 100
                List<AvaliacaoLojaFuncionarioDTO> avaliacaoLojaFuncionarioDTOs = new ArrayList<AvaliacaoLojaFuncionarioDTO>();
650 blopes 101
                AvaliacaoDTO avaliacaoDetalhada = avaliacaoRepository.consultarAvaliacaoDetalhada(sequencialAvaliacao);
102
 
103
                // CONSULTAR AVALIAÇÕES DAS LOJAS
104
                List<AvaliacaoLojaDTO> avaliacoesLojas = avaliacaoLojaService.consultarAvaliacaoLojaDaAvaliacao(avaliacaoDetalhada.getSequencial());
105
 
106
                // CONSULTAR AVALIAÇÕES DOS FUNCIONÁRIOS
107
                for (AvaliacaoLojaDTO avaliacaoLojaDTO : avaliacoesLojas) {
654 blopes 108
                        AvaliacaoLojaFuncionarioDTO avaliacaoLojaFuncionarioDTO = new AvaliacaoLojaFuncionarioDTO();
109
                        avaliacaoLojaFuncionarioDTO.setLoja(avaliacaoLojaDTO);
660 blopes 110
                        avaliacaoLojaFuncionarioDTO.setObservacao(avaliacaoLojaDTO.getObservacao());
111
                        avaliacaoLojaFuncionarioDTO.setValorMetaMensal(avaliacaoLojaDTO.getValorMetaMensal());
112
                        avaliacaoLojaFuncionarioDTO.setValorMargemContribuicao(avaliacaoLojaDTO.getValorMargemContribuicao());
653 blopes 113
 
654 blopes 114
                        List<AvaliacaoFuncionarioDTO> avaliacaoFuncionarioDTOs = avaliacaoFuncionarioService.consultarAvaliacoesFuncionarioDaLoja(avaliacaoLojaDTO.getAvaliacaoDTO().getSequencial(), avaliacaoLojaDTO.getLojaDTO().getSequencial());
115
                        // CONSULTAR DADOS COMPLETOS (FUNCIONARIO E USUARIO)
116
                        for (AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO : avaliacaoFuncionarioDTOs) {
117
                                FuncionarioDTO funcionarioDTOConsultado = funcionarioService.consultar(avaliacaoFuncionarioDTO.getSequencialDoFuncionario());
118
                                avaliacaoFuncionarioDTO.setFuncionarioDTO(funcionarioDTOConsultado);
119
                        }
120
 
121
                        avaliacaoLojaFuncionarioDTO.setFuncionarios(avaliacaoFuncionarioDTOs);
122
                        avaliacaoLojaFuncionarioDTOs.add(avaliacaoLojaFuncionarioDTO);
650 blopes 123
                }
124
 
654 blopes 125
                avaliacaoDetalhada.setAvaliacoesLojas(avaliacaoLojaFuncionarioDTOs);
126
                return avaliacaoDetalhada;
650 blopes 127
        }
128
 
722 blopes 129
        @Override
130
        public void importarAvaliacaoAnterior(VigenciaDTO vigencia, VigenciaDTO vigenciaSelecionadaParaImportar) {
131
                Avaliacao avaliacaoNova = new Avaliacao();
132
                avaliacaoNova.setVigencia(new Vigencia(vigencia.getSequencial()));
133
                this.cadastrar(avaliacaoNova);
134
 
135
                AvaliacaoDTO avaliacaoAnterior = this.consultarAvaliacao(vigenciaSelecionadaParaImportar.getSequencial());
136
                avaliacaoAnterior = this.consultarAvaliacaoCompleta(avaliacaoAnterior.getSequencial());
137
 
138
                List<AvaliacaoLoja> lojasParticipantesNovas = new ArrayList<AvaliacaoLoja>();
139
                List<AvaliacaoFuncionario> participantesNovos = new ArrayList<AvaliacaoFuncionario>();
140
                for (AvaliacaoLojaFuncionarioDTO avaliacaoLojaFuncionarioDTO : avaliacaoAnterior.getAvaliacoesLojas()) {
141
                        AvaliacaoLoja avaliacaoLojaNovo = new AvaliacaoLoja();
142
                        avaliacaoLojaNovo.setAvaliacao(avaliacaoNova);
143
                        avaliacaoLojaNovo.setLoja(new Loja(avaliacaoLojaFuncionarioDTO.getLoja().getLojaDTO().getSequencial()));
144
                        avaliacaoLojaNovo.setValorMetaMensal(avaliacaoLojaFuncionarioDTO.getValorMetaMensal());
145
                        avaliacaoLojaNovo.setValorMargemContribuicao(avaliacaoLojaFuncionarioDTO.getValorMargemContribuicao());
146
                        lojasParticipantesNovas.add(avaliacaoLojaNovo);
147
                        for (AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO : avaliacaoLojaFuncionarioDTO.getFuncionarios()) {
148
                                AvaliacaoFuncionario avaliacaoFuncionarioNovo = new AvaliacaoFuncionario();
149
                                avaliacaoFuncionarioNovo.setAvaliacao(avaliacaoNova);
150
                                avaliacaoFuncionarioNovo.setFuncionario(new Funcionario(avaliacaoFuncionarioDTO.getSequencialDoFuncionario()));
151
                                avaliacaoFuncionarioNovo.setLoja(new Loja(avaliacaoFuncionarioDTO.getSequencialDaLoja()));
152
                                avaliacaoFuncionarioNovo.setValorMetaMensal(avaliacaoFuncionarioDTO.getValorMetaMensal());
153
                                participantesNovos.add(avaliacaoFuncionarioNovo);
154
                        }
155
                }
156
                avaliacaoNova.getParticipantes().addAll(participantesNovos);
157
                avaliacaoNova.getLojasParticipantes().addAll(lojasParticipantesNovas);
158
 
159
                this.alterar(avaliacaoNova);
160
        }
161
 
162
        @Override
163
        public void adicionarLojaNaAvaliacao(AvaliacaoDTO avaliacao, LojaDTO lojaParticipante) {
724 blopes 164
                // VERIFICAR SE LOJA JÁ CONTA NA AVALIAÇÃO
165
                for (AvaliacaoLojaFuncionarioDTO avaliacaoLojaFuncionarioDTO : avaliacao.getAvaliacoesLojas()) {
166
                        if (avaliacaoLojaFuncionarioDTO.getLoja().getLojaDTO().getSequencial().equals(lojaParticipante.getSequencial())) {
167
                                throw new NegocioException("LOJA JÁ PRESENTE NA AVALIAÇÃO");
168
                        }
169
                }
722 blopes 170
                AvaliacaoLoja avaliacaoLoja = new AvaliacaoLoja();
171
                avaliacaoLoja.setAvaliacao(consultarPorId(new Avaliacao(avaliacao.getSequencial())));
172
                avaliacaoLoja.setLoja(lojaService.consultarPorId(new Loja(lojaParticipante.getSequencial())));
173
                avaliacaoLojaService.cadastrar(avaliacaoLoja);
174
        }
175
 
724 blopes 176
        @Override
177
        public void removerLojaDaAvaliacao(AvaliacaoDTO avaliacao, LojaDTO lojaParticipante) {
178
                AvaliacaoLoja avaliacaoLoja = new AvaliacaoLoja();
179
                avaliacaoLoja.setAvaliacao(consultarPorId(new Avaliacao(avaliacao.getSequencial())));
180
                avaliacaoLoja.setLoja(lojaService.consultarPorId(new Loja(lojaParticipante.getSequencial())));
181
                avaliacaoLoja = avaliacaoLojaService.consultarPorId(avaliacaoLoja);
182
                avaliacaoLojaService.excluir(avaliacaoLoja);
183
        }
184
 
185
        @Override
186
        public void adicionarParticipanteNaAvaliacao(AvaliacaoDTO avaliacao, LojaDTO lojaParticipante, FuncionarioDTO funcionarioParticipante) {
187
                // VERIFICAR SE PARTICIPANTE JÁ CONTA NA AVALIAÇÃO
188
                for (AvaliacaoLojaFuncionarioDTO avaliacaoLojaFuncionarioDTO : avaliacao.getAvaliacoesLojas()) {
189
                        for (AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO : avaliacaoLojaFuncionarioDTO.getFuncionarios()) {
190
                                if (avaliacaoFuncionarioDTO.getFuncionarioDTO().getSequencialFuncionario().equals(funcionarioParticipante.getSequencialFuncionario())) {
191
                                        throw new NegocioException("FUNCIONÁRIO JÁ PRESENTE NA AVALIAÇÃO");
192
                                }
193
                        }
194
                }
195
                AvaliacaoFuncionario avaliacaoFuncionario = new AvaliacaoFuncionario();
196
                avaliacaoFuncionario.setAvaliacao(consultarPorId(new Avaliacao(avaliacao.getSequencial())));
197
                avaliacaoFuncionario.setLoja(lojaService.consultarPorId(new Loja(lojaParticipante.getSequencial())));
198
                Funcionario funcionario = new Funcionario(funcionarioParticipante.getSequencialFuncionario());
199
                avaliacaoFuncionario.setFuncionario(funcionarioService.consultarPorId(funcionario));
200
                avaliacaoFuncionarioService.cadastrar(avaliacaoFuncionario);
201
        }
202
 
203
        @Override
204
        public void removerParticipanteDaAvaliacao(AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO) {
205
                AvaliacaoFuncionarioId avaliacaoFuncionarioId = new AvaliacaoFuncionarioId();
206
                avaliacaoFuncionarioId.setSequencialAvaliacao(avaliacaoFuncionarioDTO.getSequencialDaAvaliacao());
207
                avaliacaoFuncionarioId.setSequencialFuncionario(avaliacaoFuncionarioDTO.getSequencialDoFuncionario());
208
                avaliacaoFuncionarioService.excluir(avaliacaoFuncionarioId);
209
        }
210
 
357 espaco 211
        /*
212
        @Override
213
        public Avaliacao detalhar(Avaliacao avaliacao) {
214
                return avaliacaoRepository.detalhar(avaliacao);
215
        }
216
 
217
        @Override
218
        public Avaliacao consultarAvaliacaoDaVigencia(Vigencia vigencia) {
219
                return avaliacaoRepository.consultarAvaliacaoDaVigencia(vigencia);
220
        }
221
 
222
        @Override
223
        public List<Avaliacao> consultarAvaliacoesDivulgadas() {
224
                return avaliacaoRepository.consultarAvaliacoesDivulgadas();
225
        }
226
 
227
        @Override
228
        public void solicitarReavaliacao(RankingVendedorDTO rankingVendedor, String solicitacao) {
229
                StringBuilder conteudo = new StringBuilder();
230
                conteudo.append("SOLICITANTE: " + rankingVendedor.getVendedor().getNomeDaPessoa() + "\n");
231
                conteudo.append("DATA DA SOLICITAÇÃO: " + DataUtil.retornarDataFormatadaEmFormatoTexto("dd/MM/yyyy 'às' HH:mm", DataUtils.getDataAtual()) + "\n");
232
                conteudo.append("OBSERVAÇÕES: \n");
233
                conteudo.append(solicitacao);
234
 
235
                Pendencia pendencia = new Pendencia();
236
                pendencia.setDescricao("SOLICITAÇÃO DE REAVALIAÇÃO: " + rankingVendedor.getVendedor().getNomeDaPessoa());
237
                pendencia.setUsuario(usuarioService.consultarUsuarioPorPessoa(rankingVendedor.getVendedor().getPessoa()));
238
                pendencia.setData(DataUtils.getDataAtual());
239
                if (VerificadorUtil.estaNulo(rankingVendedor.getVendedor().getLoja())) {
240
                        pendencia.setLoja(new Loja(ConstantesSEC.SEQUENCIAL_MATRIZ_ESTOQUE_9.longValue()));
241
                } else {
242
                        pendencia.setLoja(rankingVendedor.getVendedor().getLoja());
243
                }
244
                Perfil perfilRh = new Perfil();
245
                perfilRh.setCodigo(ConstantesSEC.PERFIL_RECURSOS_HUMANOS_11);
246
                pendencia.setPerfil(perfilRh);
247
                pendenciaService.cadastrar(pendencia);
248
 
249
                new GerenciadorEmailImpl()
250
                        .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_SUPERVISAO)
251
                        .comAssunto("SOLICITAÇÃO DE REAVALIAÇÃO")
252
                        .comConteudo(conteudo.toString())
253
                        .enviar();
254
        }
255
 
256
        @Override
257
        public byte[] emitirRelatorioImportacaoFolhaPagamento(ServletContext contexto, Avaliacao avaliacao, Long empresa) {
258
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
259
 
260
                try {
261
                        String caminhoArquivo = "/arquivos/modelos/Relatório de Importação - Folha de Pagamento Espaço Case.xls";
262
                        InputStream arquivo = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(caminhoArquivo);
263
                        HSSFWorkbook workbook = new HSSFWorkbook(arquivo);
264
                        HSSFSheet sheet = workbook.getSheetAt(0);
265
 
266
                        Iterator rowIterator = sheet.rowIterator();
267
                        while (rowIterator.hasNext()) {
268
                                Row row = (Row) rowIterator.next();
269
                                if (row.getRowNum() < 11) {
270
                                        continue;
271
                                } else {
272
                                        Iterator cellIterator = row.cellIterator();
273
                                        Integer codigoFolha = null;
274
                                        while (cellIterator.hasNext()) {
275
                                                Boolean atualizar = true;
276
                                                Cell cell = (Cell) cellIterator.next();
277
                                                switch (cell.getColumnIndex()) {
278
                                                        case 1:
279
                                                                Integer tipoCelula = cell.getCellType();
280
                                                                if (tipoCelula.equals(Cell.CELL_TYPE_NUMERIC)) {
281
                                                                        Double codigo = cell.getNumericCellValue();
282
                                                                        codigoFolha = codigo.intValue();
283
                                                                } else {
284
                                                                        atualizar = false;
285
                                                                }
286
                                                                break;
287
                                                        case 3:
288
                                                                if (atualizar) {
289
                                                                        for (AvaliacaoFuncionario avaliacaoFunc : avaliacao.getParticipantes()) {
290
                                                                                if (VerificadorUtil.estaNulo(avaliacaoFunc.getFuncionario().getCodigoContabilidade())) {
291
                                                                                        throw new NegocioException("Participante " + avaliacaoFunc.getFuncionario().getNomeDaPessoa() + " sem código contábil cadastrado");
292
                                                                                }
293
                                                                                if (avaliacaoFunc.getFuncionario().getTipoComissionamento().equals(TipoComissionamento.parse(empresa).getValor()) &&
294
                                                                                        avaliacaoFunc.getFuncionario().getCodigoContabilidade().equals(codigoFolha)) {
295
                                                                                        Double valorComissao = avaliacaoFunc.getValorComissao();
296
                                                                                        if (VerificadorUtil.estaNulo(valorComissao)) {
297
                                                                                                throw new NegocioException("Obrigatório informar todas as comissões");
298
                                                                                        }
299
                                                                                        String valor = StringUtil.formatarValorComDoisDigitos(valorComissao.toString());
300
                                                                                        cell.setCellValue(valor.replace(".", ","));
301
                                                                                        break;
302
                                                                                }
303
                                                                        }
304
                                                                }
305
                                                                break;
306
                                                }
307
                                        }
308
                                }
309
                        }
310
 
311
                        try {
312
                        workbook.write(baos);
313
                        return baos.toByteArray();
314
                } catch (FileNotFoundException e) {
315
                        e.printStackTrace();
316
                } catch (IOException e) {
317
                        e.printStackTrace();
318
                } finally {
319
                                baos.close();
320
                                arquivo.close();
321
                                workbook.close();
322
                        }
323
                } catch (FileNotFoundException e) {
324
                        e.printStackTrace();
325
                } catch (NegocioException ne) {
326
                        throw new NegocioException(ne.getMessage());
327
                } catch (Exception e) {
328
                        e.printStackTrace();
329
                }
330
 
331
        return null;
332
        }
333
        */
334
}