Subversion Repositories Integrator Subversion

Rev

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