Subversion Repositories Integrator Subversion

Rev

Rev 337 | 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.model;
2
 
3
import java.io.Serializable;
4
import java.util.ArrayList;
5
import java.util.List;
6
import java.util.Set;
7
 
8
import javax.persistence.CascadeType;
9
import javax.persistence.Column;
10
import javax.persistence.EmbeddedId;
11
import javax.persistence.Entity;
12
import javax.persistence.JoinColumn;
13
import javax.persistence.ManyToOne;
14
import javax.persistence.MapsId;
15
import javax.persistence.OneToMany;
16
import javax.persistence.Table;
17
import javax.persistence.Transient;
18
import javax.validation.constraints.Size;
19
 
20
import org.hibernate.annotations.ForeignKey;
21
 
195 espaco 22
import br.com.ec.core.exception.NegocioException;
23
import br.com.ec.core.generic.identidade.Identidade;
24
import br.com.ec.core.util.StringUtil;
25
import br.com.ec.core.util.VerificadorUtil;
106 espaco 26
import br.com.ec.domain.model.tipos.TipoComissionamento;
27
 
28
@Entity
29
@Table(name="sec_avaliacao_funcionario", schema="sc_sec")
30
public class AvaliacaoFuncionario implements Serializable, Identidade {
31
 
32
        private static final long serialVersionUID = 1L;
33
 
34
        private AvaliacaoFuncionarioId avaliacaoFuncionarioId;
35
        private Funcionario funcionario;
36
        private Avaliacao avaliacao;
651 blopes 37
        private Loja loja;
106 espaco 38
        private String observacao;
39
        private Double porcentagemComissao;
40
        private Integer quantidadeHorasExtras50;
41
        private Integer quantidadeHorasExtras100;
42
        private Double valorMetaMensal;
43
        private Double valorMetaMensalVivo;
333 espaco 44
        private Double valorMetaTicketMedio;
106 espaco 45
        private Double valorComissao;
337 espaco 46
        private Double pontuacaoMeta;
106 espaco 47
 
48
        private Double valorTotalVendido;
49
        private Double valorTotalVendidoVivo;
50
 
51
        private List<AvaliacaoFuncionarioItemAvaliacao> itens;
52
 
53
        public AvaliacaoFuncionario() {
54
                this.avaliacaoFuncionarioId = new AvaliacaoFuncionarioId();
55
        }
56
 
57
        public AvaliacaoFuncionario(AvaliacaoFuncionarioId avalicaoFuncionarioId) {
58
                this.avaliacaoFuncionarioId = avalicaoFuncionarioId;
59
        }
60
 
651 blopes 61
        public AvaliacaoFuncionario(Funcionario funcionario, Avaliacao avaliacao, Loja loja) {
106 espaco 62
                avaliacaoFuncionarioId = new AvaliacaoFuncionarioId();
63
                setAvaliacao(avaliacao);
64
                setFuncionario(funcionario);
651 blopes 65
                setLoja(loja);
106 espaco 66
        }
67
 
68
        @Override
69
        @Transient
70
        public Object getId() {
71
                return getAvaliacaoFuncionarioId();
72
        }
73
        @Override
74
        public void setId(Object id) {
75
                this.avaliacaoFuncionarioId = (AvaliacaoFuncionarioId) id;
76
        }
77
 
78
        @EmbeddedId
79
        public AvaliacaoFuncionarioId getAvaliacaoFuncionarioId() {
80
                return avaliacaoFuncionarioId;
81
        }
82
        public void setAvaliacaoFuncionarioId(AvaliacaoFuncionarioId avaliacaoFuncionarioId) {
83
                this.avaliacaoFuncionarioId = avaliacaoFuncionarioId;
84
        }
85
 
86
        @ManyToOne
87
        @ForeignKey(name="fk_avalfunc_avaliacao")
88
        @MapsId(value="sequencialAvaliacao")
89
        @JoinColumn(name = "seq_avaliacao", referencedColumnName="seq_avaliacao", insertable=false, updatable=false, nullable = false)
90
        public Avaliacao getAvaliacao() {
91
                return avaliacao;
92
        }
93
        public void setAvaliacao(Avaliacao avaliacao) {
94
                if (VerificadorUtil.naoEstaNulo(avaliacao)) {
95
                        avaliacaoFuncionarioId.setSequencialAvaliacao(avaliacao.getSequencial());
96
                }
97
                this.avaliacao = avaliacao;
98
        }
99
 
100
        @ManyToOne
101
        @ForeignKey(name="fk_avalfunc_funcionario")
102
        @MapsId(value="sequencialFuncionario")
103
        @JoinColumn(name = "seq_funcionario", referencedColumnName="seq_funcionario", insertable=false, updatable=false, nullable = false)
104
        public Funcionario getFuncionario() {
105
                return funcionario;
106
        }
107
        public void setFuncionario(Funcionario funcionario) {
108
                if (VerificadorUtil.naoEstaNulo(funcionario)) {
109
                        avaliacaoFuncionarioId.setSequencialFuncionario(funcionario.getSequencial());
110
                }
111
                this.funcionario = funcionario;
112
        }
113
 
651 blopes 114
        @ManyToOne
115
        @ForeignKey(name="fk_avalfunc_loja")
116
        @MapsId(value="sequencialLoja")
117
        @JoinColumn(name = "seq_loja", referencedColumnName="seq_loja", insertable=false, updatable=false, nullable = false)
118
        public Loja getLoja() {
119
                return loja;
120
        }
121
        public void setLoja(Loja loja) {
122
                if (VerificadorUtil.naoEstaNulo(loja)) {
123
                        avaliacaoFuncionarioId.setSequencialLoja(loja.getSequencial());
124
                }
125
                this.loja = loja;
126
        }
127
 
106 espaco 128
        @Column(name="dsc_observacao")
129
        @Size(max = 400, message = "Limite de caracteres ultrapassado: Observação")
130
        public String getObservacao() {
131
                return observacao;
132
        }
133
        public void setObservacao(String observacao) {
134
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
135
        }
136
 
137
        @Column(name="val_porcentagem_comissao")
138
        public Double getPorcentagemComissao() {
139
                return porcentagemComissao;
140
        }
141
        public void setPorcentagemComissao(Double porcentagemComissao) {
142
                this.porcentagemComissao = porcentagemComissao;
143
        }
144
 
145
        @Column(name="qtd_horas_extras_50")
146
        public Integer getQuantidadeHorasExtras50() {
147
                return quantidadeHorasExtras50;
148
        }
149
        public void setQuantidadeHorasExtras50(Integer quantidadeHorasExtras50) {
150
                this.quantidadeHorasExtras50 = quantidadeHorasExtras50;
151
        }
152
 
153
        @Column(name="qtd_horas_extras_100")
154
        public Integer getQuantidadeHorasExtras100() {
155
                return quantidadeHorasExtras100;
156
        }
157
        public void setQuantidadeHorasExtras100(Integer quantidadeHorasExtras100) {
158
                this.quantidadeHorasExtras100 = quantidadeHorasExtras100;
159
        }
160
 
161
        @Column(name="val_meta_mensal")
162
        public Double getValorMetaMensal() {
163
                return valorMetaMensal;
164
        }
165
        public void setValorMetaMensal(Double valorMetaMensal) {
166
                this.valorMetaMensal = valorMetaMensal;
167
        }
168
 
169
        @Column(name="val_meta_mensal_vivo")
170
        public Double getValorMetaMensalVivo() {
171
                return valorMetaMensalVivo;
172
        }
173
        public void setValorMetaMensalVivo(Double valorMetaMensalVivo) {
174
                this.valorMetaMensalVivo = valorMetaMensalVivo;
175
        }
176
 
333 espaco 177
        @Column(name="val_meta_ticketmedio")
178
        public Double getValorMetaTicketMedio() {
179
                return valorMetaTicketMedio;
180
        }
181
        public void setValorMetaTicketMedio(Double valorMetaTicketMedio) {
182
                this.valorMetaTicketMedio = valorMetaTicketMedio;
183
        }
184
 
106 espaco 185
        @Column(name="val_comissao")
186
        public Double getValorComissao() {
187
                return valorComissao;
188
        }
189
        public void setValorComissao(Double valorComissao) {
190
                this.valorComissao = valorComissao;
191
        }
192
 
337 espaco 193
        @Column(name="val_pontuacao_meta")
194
        public Double getPontuacaoMeta() {
195
                return pontuacaoMeta;
196
        }
197
        public void setPontuacaoMeta(Double pontuacaoMeta) {
198
                this.pontuacaoMeta = pontuacaoMeta;
199
        }
200
 
106 espaco 201
        @OneToMany(mappedBy="avaliacaoFuncionario", cascade=CascadeType.ALL, orphanRemoval=true)
202
        public List<AvaliacaoFuncionarioItemAvaliacao> getItens() {
203
                return itens;
204
        }
205
        public void setItens(List<AvaliacaoFuncionarioItemAvaliacao> itens) {
206
                this.itens = itens;
207
        }
208
 
209
        @Override
210
        public int hashCode() {
211
                final int prime = 31;
212
                int result = 1;
213
                result = prime * result + ((avaliacaoFuncionarioId == null) ? 0 : avaliacaoFuncionarioId.hashCode());
214
                return result;
215
        }
216
 
217
        @Override
218
        public boolean equals(Object obj) {
219
                if (this == obj)
220
                        return true;
221
                if (obj == null)
222
                        return false;
223
                if (getClass() != obj.getClass())
224
                        return false;
225
                AvaliacaoFuncionario other = (AvaliacaoFuncionario) obj;
226
                if (avaliacaoFuncionarioId == null) {
227
                        if (other.avaliacaoFuncionarioId != null)
228
                                return false;
229
                } else if (!avaliacaoFuncionarioId.equals(other.avaliacaoFuncionarioId))
230
                        return false;
231
                return true;
232
        }
233
 
234
        @Transient
235
        public Double getValorTotalVendido() {
236
                return valorTotalVendido;
237
        }
238
        public void setValorTotalVendido(Double valorTotalVendido) {
239
                this.valorTotalVendido = valorTotalVendido;
240
        }
241
 
242
        @Transient
243
        public Double getValorTotalVendidoVivo() {
244
                return valorTotalVendidoVivo;
245
        }
246
        public void setValorTotalVendidoVivo(Double valorTotalVendidoVivo) {
247
                this.valorTotalVendidoVivo = valorTotalVendidoVivo;
248
        }
249
 
250
        @Transient
251
        public Long getSequencialDaAvaliacao() {
252
                return VerificadorUtil.naoEstaNulo(getAvaliacao())? getAvaliacao().getSequencial() : null;
253
        }
254
 
255
        @Transient
256
        public Long getSequencialDaVigencia() {
257
                return VerificadorUtil.naoEstaNulo(getAvaliacao())? getAvaliacao().getSequencialDaVigencia() : null;
258
        }
259
 
260
        @Transient
261
        public Long getSequencialDoFuncionario() {
262
                return VerificadorUtil.naoEstaNulo(getAvaliacaoFuncionarioId())? getAvaliacaoFuncionarioId().getSequencialFuncionario() : null;
263
        }
264
 
265
        @Transient
651 blopes 266
        public Long getSequencialDaLoja() {
267
                return VerificadorUtil.naoEstaNulo(getAvaliacaoFuncionarioId())? getAvaliacaoFuncionarioId().getSequencialLoja() : null;
268
        }
269
 
270
        @Transient
106 espaco 271
        public Integer pontuacao(Set<AvaliacaoFuncionarioItemAvaliacao> itens) {
272
                Integer pontuacao = 10;
273
                if (VerificadorUtil.naoEstaNulo(itens)) {
274
                        for (AvaliacaoFuncionarioItemAvaliacao item : itens) {
275
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
276
                                        pontuacao = pontuacao - item.getQuantidadePontos();
277
                                } else {
278
                                        pontuacao = pontuacao + item.getQuantidadePontos();
279
                                }
280
                        }
281
                }
282
                return pontuacao;
283
        }
284
 
285
        @Transient
337 espaco 286
        public Double getPontuacao() {
287
                if (VerificadorUtil.estaNulo(getPontuacaoMeta())) {
288
                        return null;
289
                }
290
                Double pontuacao = 10.0;
106 espaco 291
                if (VerificadorUtil.naoEstaNulo(getItens())) {
292
                        for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
293
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
294
                                        pontuacao = pontuacao - item.getQuantidadePontos();
295
                                } else {
296
                                        pontuacao = pontuacao + item.getQuantidadePontos();
297
                                }
298
                        }
299
                }
337 espaco 300
                pontuacao = (pontuacao + getPontuacaoMeta())/2;
106 espaco 301
                return pontuacao;
302
        }
303
 
304
        @Transient
305
        public void adicionarItemAvaliacao(AvaliacaoFuncionarioItemAvaliacao itemParticipante) {
306
                if (VerificadorUtil.estaNulo(itemParticipante.getItemAvaliacao())) {
307
                        throw new NegocioException("Parâmetro obrigatório não preenchido: Item da avaliação");
308
                }
309
                if (VerificadorUtil.estaNulo(itemParticipante.getQuantidadePontos())) {
310
                        throw new NegocioException("Parâmetro obrigatório não preenchido: Quantidade de pontos");
311
                }
312
                if (VerificadorUtil.estaNulo(getItens())) {
313
                        setItens(new ArrayList<AvaliacaoFuncionarioItemAvaliacao>());
314
                }
315
                for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
316
                        if (item.equals(itemParticipante)) {
317
                                getItens().remove(itemParticipante);
318
                                Integer pontos = item.getQuantidadePontos();
319
                                itemParticipante.setQuantidadePontos(itemParticipante.getQuantidadePontos()+pontos);
320
                                if (VerificadorUtil.naoEstaNuloOuVazio(item.getObservacao())) {
321
                                        String observacao = item.getObservacao();
322
                                        itemParticipante.setObservacao(observacao + "; " + itemParticipante.getObservacao());
323
                                }
324
                                break;
325
                        }
326
                }
327
                getItens().add(itemParticipante);
328
        }
329
 
330
        @Transient
331
        public Double retornarValorComissao(Double totalVendas, String tipoComissionamento) {
332
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
333
                        return totalVendas * retornarFaixaComissao(totalVendas, tipoComissionamento);
334
                }
335
                return 0.0;
336
        }
337
 
338
        @Transient
339
        public Double retornarValorComissao() {
340
                if (VerificadorUtil.naoEstaNulo(getFuncionario())) {
341
                        return retornarValorComissao(getValorTotalVendido(), getFuncionario().getTipoComissionamento());
342
                }
343
                return 0.0;
344
        }
345
 
346
        @Transient
347
        public Double retornarFaixaComissao(Double totalVendas, String tipoComissionamento) {
348
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
349
                        Double percentualRealizado = totalVendas * 100 / valorMetaMensal;
350
                        if (TipoComissionamento.COMISSSIONAMENTO_ESPACO_CASE.getValor().equals(tipoComissionamento)) {
351
                                if (percentualRealizado < 75) {
352
                                        return 0.0;
353
                                } else if (percentualRealizado < 100) {
354
                                        return 0.01;
355
                                } else if (percentualRealizado < 125) {
356
                                        return 0.02;
357
                                }
358
                                return 0.025;
359
                        }
360
                        if (TipoComissionamento.COMISSSIONAMENTO_FARMACIA.getValor().equals(tipoComissionamento)) {
361
                                if (percentualRealizado < 75) {
362
                                        return 0.0;
363
                                } else if (percentualRealizado < 100) {
364
                                        return 0.025;
365
                                }
366
                                return 0.05;
367
                        }
368
                }
369
                return 0.0;
370
        }
371
 
372
        @Transient
373
        public Double retornarFaixaComissao() {
374
                if (VerificadorUtil.naoEstaNulo(getFuncionario())) {
375
                        return retornarFaixaComissao(getValorTotalVendido(), getFuncionario().getTipoComissionamento());
376
                }
377
                return 0.0;
378
        }
379
 
380
        @Transient
381
        public Double retornarFaixaComissaoVivo(Double totalVendas) {
382
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensalVivo)) {
383
                        Double percentualRealizado = totalVendas * 100 / valorMetaMensalVivo;
384
                        if (percentualRealizado < 75) {
385
                                return 0.0;
386
                        } else if (percentualRealizado < 100) {
387
                                return 0.10;
388
                        }
389
                        return 0.15;
390
                }
391
                return 0.0;
392
        }
393
 
394
        @Transient
395
        public Double retornarFaixaComissaoVivo() {
396
                return retornarFaixaComissaoVivo(getValorTotalVendido());
397
        }
398
 
399
        @Transient
400
        public Double retornarPercentualRealizado() {
401
                return retornarPercentual(getValorTotalVendido(), getValorMetaMensal());
402
        }
403
 
404
        @Transient
405
        public Double retornarPercentualVivoRealizado() {
406
                return retornarPercentual(getValorTotalVendidoVivo(), getValorMetaMensalVivo());
407
        }
408
 
409
        @Transient
410
        public Double retornarPercentualRealizado(Double totalVendas) {
411
                return retornarPercentual(totalVendas, getValorMetaMensal());
412
        }
413
 
414
        @Transient
415
        public Double retornarPercentualVivoRealizado(Double totalVendasVivo) {
416
                return retornarPercentual(totalVendasVivo, getValorMetaMensalVivo());
417
        }
418
 
419
        @Transient
333 espaco 420
        public Double retornarPercentualTicketMedioRealizado(Double ticketMedioAtual) {
421
                return retornarPercentual(ticketMedioAtual, getValorMetaTicketMedio());
422
        }
423
 
424
        @Transient
106 espaco 425
        public Double retornarPercentual(Double total, Double meta) {
426
                return VerificadorUtil.naoEstaNulo(total) && VerificadorUtil.naoEstaNulo(meta)? meta > new Double(0.0) ? total / meta : new Double(0.0) : new Double(0.0);
427
        }
428
 
429
}