Subversion Repositories Integrator Subversion

Rev

Rev 651 | 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")
665 blopes 116
        @JoinColumn(name = "seq_loja", referencedColumnName="seq_loja", insertable=true, updatable=true, nullable = false)
651 blopes 117
        public Loja getLoja() {
118
                return loja;
119
        }
120
        public void setLoja(Loja loja) {
121
                this.loja = loja;
122
        }
123
 
106 espaco 124
        @Column(name="dsc_observacao")
125
        @Size(max = 400, message = "Limite de caracteres ultrapassado: Observação")
126
        public String getObservacao() {
127
                return observacao;
128
        }
129
        public void setObservacao(String observacao) {
130
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
131
        }
132
 
133
        @Column(name="val_porcentagem_comissao")
134
        public Double getPorcentagemComissao() {
135
                return porcentagemComissao;
136
        }
137
        public void setPorcentagemComissao(Double porcentagemComissao) {
138
                this.porcentagemComissao = porcentagemComissao;
139
        }
140
 
141
        @Column(name="qtd_horas_extras_50")
142
        public Integer getQuantidadeHorasExtras50() {
143
                return quantidadeHorasExtras50;
144
        }
145
        public void setQuantidadeHorasExtras50(Integer quantidadeHorasExtras50) {
146
                this.quantidadeHorasExtras50 = quantidadeHorasExtras50;
147
        }
148
 
149
        @Column(name="qtd_horas_extras_100")
150
        public Integer getQuantidadeHorasExtras100() {
151
                return quantidadeHorasExtras100;
152
        }
153
        public void setQuantidadeHorasExtras100(Integer quantidadeHorasExtras100) {
154
                this.quantidadeHorasExtras100 = quantidadeHorasExtras100;
155
        }
156
 
157
        @Column(name="val_meta_mensal")
158
        public Double getValorMetaMensal() {
159
                return valorMetaMensal;
160
        }
161
        public void setValorMetaMensal(Double valorMetaMensal) {
162
                this.valorMetaMensal = valorMetaMensal;
163
        }
164
 
165
        @Column(name="val_meta_mensal_vivo")
166
        public Double getValorMetaMensalVivo() {
167
                return valorMetaMensalVivo;
168
        }
169
        public void setValorMetaMensalVivo(Double valorMetaMensalVivo) {
170
                this.valorMetaMensalVivo = valorMetaMensalVivo;
171
        }
172
 
333 espaco 173
        @Column(name="val_meta_ticketmedio")
174
        public Double getValorMetaTicketMedio() {
175
                return valorMetaTicketMedio;
176
        }
177
        public void setValorMetaTicketMedio(Double valorMetaTicketMedio) {
178
                this.valorMetaTicketMedio = valorMetaTicketMedio;
179
        }
180
 
106 espaco 181
        @Column(name="val_comissao")
182
        public Double getValorComissao() {
183
                return valorComissao;
184
        }
185
        public void setValorComissao(Double valorComissao) {
186
                this.valorComissao = valorComissao;
187
        }
188
 
337 espaco 189
        @Column(name="val_pontuacao_meta")
190
        public Double getPontuacaoMeta() {
191
                return pontuacaoMeta;
192
        }
193
        public void setPontuacaoMeta(Double pontuacaoMeta) {
194
                this.pontuacaoMeta = pontuacaoMeta;
195
        }
196
 
106 espaco 197
        @OneToMany(mappedBy="avaliacaoFuncionario", cascade=CascadeType.ALL, orphanRemoval=true)
198
        public List<AvaliacaoFuncionarioItemAvaliacao> getItens() {
199
                return itens;
200
        }
201
        public void setItens(List<AvaliacaoFuncionarioItemAvaliacao> itens) {
202
                this.itens = itens;
203
        }
204
 
205
        @Override
206
        public int hashCode() {
207
                final int prime = 31;
208
                int result = 1;
209
                result = prime * result + ((avaliacaoFuncionarioId == null) ? 0 : avaliacaoFuncionarioId.hashCode());
210
                return result;
211
        }
212
 
213
        @Override
214
        public boolean equals(Object obj) {
215
                if (this == obj)
216
                        return true;
217
                if (obj == null)
218
                        return false;
219
                if (getClass() != obj.getClass())
220
                        return false;
221
                AvaliacaoFuncionario other = (AvaliacaoFuncionario) obj;
222
                if (avaliacaoFuncionarioId == null) {
223
                        if (other.avaliacaoFuncionarioId != null)
224
                                return false;
225
                } else if (!avaliacaoFuncionarioId.equals(other.avaliacaoFuncionarioId))
226
                        return false;
227
                return true;
228
        }
229
 
230
        @Transient
231
        public Double getValorTotalVendido() {
232
                return valorTotalVendido;
233
        }
234
        public void setValorTotalVendido(Double valorTotalVendido) {
235
                this.valorTotalVendido = valorTotalVendido;
236
        }
237
 
238
        @Transient
239
        public Double getValorTotalVendidoVivo() {
240
                return valorTotalVendidoVivo;
241
        }
242
        public void setValorTotalVendidoVivo(Double valorTotalVendidoVivo) {
243
                this.valorTotalVendidoVivo = valorTotalVendidoVivo;
244
        }
245
 
246
        @Transient
247
        public Long getSequencialDaAvaliacao() {
248
                return VerificadorUtil.naoEstaNulo(getAvaliacao())? getAvaliacao().getSequencial() : null;
249
        }
250
 
251
        @Transient
252
        public Long getSequencialDaVigencia() {
253
                return VerificadorUtil.naoEstaNulo(getAvaliacao())? getAvaliacao().getSequencialDaVigencia() : null;
254
        }
255
 
256
        @Transient
257
        public Long getSequencialDoFuncionario() {
258
                return VerificadorUtil.naoEstaNulo(getAvaliacaoFuncionarioId())? getAvaliacaoFuncionarioId().getSequencialFuncionario() : null;
259
        }
260
 
261
        @Transient
651 blopes 262
        public Long getSequencialDaLoja() {
665 blopes 263
                return VerificadorUtil.naoEstaNulo(getLoja())? getLoja().getSequencial() : null;
651 blopes 264
        }
265
 
266
        @Transient
106 espaco 267
        public Integer pontuacao(Set<AvaliacaoFuncionarioItemAvaliacao> itens) {
268
                Integer pontuacao = 10;
269
                if (VerificadorUtil.naoEstaNulo(itens)) {
270
                        for (AvaliacaoFuncionarioItemAvaliacao item : itens) {
271
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
272
                                        pontuacao = pontuacao - item.getQuantidadePontos();
273
                                } else {
274
                                        pontuacao = pontuacao + item.getQuantidadePontos();
275
                                }
276
                        }
277
                }
278
                return pontuacao;
279
        }
280
 
281
        @Transient
337 espaco 282
        public Double getPontuacao() {
283
                if (VerificadorUtil.estaNulo(getPontuacaoMeta())) {
284
                        return null;
285
                }
286
                Double pontuacao = 10.0;
106 espaco 287
                if (VerificadorUtil.naoEstaNulo(getItens())) {
288
                        for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
289
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
290
                                        pontuacao = pontuacao - item.getQuantidadePontos();
291
                                } else {
292
                                        pontuacao = pontuacao + item.getQuantidadePontos();
293
                                }
294
                        }
295
                }
337 espaco 296
                pontuacao = (pontuacao + getPontuacaoMeta())/2;
106 espaco 297
                return pontuacao;
298
        }
299
 
300
        @Transient
301
        public void adicionarItemAvaliacao(AvaliacaoFuncionarioItemAvaliacao itemParticipante) {
302
                if (VerificadorUtil.estaNulo(itemParticipante.getItemAvaliacao())) {
303
                        throw new NegocioException("Parâmetro obrigatório não preenchido: Item da avaliação");
304
                }
305
                if (VerificadorUtil.estaNulo(itemParticipante.getQuantidadePontos())) {
306
                        throw new NegocioException("Parâmetro obrigatório não preenchido: Quantidade de pontos");
307
                }
308
                if (VerificadorUtil.estaNulo(getItens())) {
309
                        setItens(new ArrayList<AvaliacaoFuncionarioItemAvaliacao>());
310
                }
311
                for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
312
                        if (item.equals(itemParticipante)) {
313
                                getItens().remove(itemParticipante);
314
                                Integer pontos = item.getQuantidadePontos();
315
                                itemParticipante.setQuantidadePontos(itemParticipante.getQuantidadePontos()+pontos);
316
                                if (VerificadorUtil.naoEstaNuloOuVazio(item.getObservacao())) {
317
                                        String observacao = item.getObservacao();
318
                                        itemParticipante.setObservacao(observacao + "; " + itemParticipante.getObservacao());
319
                                }
320
                                break;
321
                        }
322
                }
323
                getItens().add(itemParticipante);
324
        }
325
 
326
        @Transient
327
        public Double retornarValorComissao(Double totalVendas, String tipoComissionamento) {
328
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
329
                        return totalVendas * retornarFaixaComissao(totalVendas, tipoComissionamento);
330
                }
331
                return 0.0;
332
        }
333
 
334
        @Transient
335
        public Double retornarValorComissao() {
336
                if (VerificadorUtil.naoEstaNulo(getFuncionario())) {
337
                        return retornarValorComissao(getValorTotalVendido(), getFuncionario().getTipoComissionamento());
338
                }
339
                return 0.0;
340
        }
341
 
342
        @Transient
343
        public Double retornarFaixaComissao(Double totalVendas, String tipoComissionamento) {
344
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
345
                        Double percentualRealizado = totalVendas * 100 / valorMetaMensal;
346
                        if (TipoComissionamento.COMISSSIONAMENTO_ESPACO_CASE.getValor().equals(tipoComissionamento)) {
347
                                if (percentualRealizado < 75) {
348
                                        return 0.0;
349
                                } else if (percentualRealizado < 100) {
350
                                        return 0.01;
351
                                } else if (percentualRealizado < 125) {
352
                                        return 0.02;
353
                                }
354
                                return 0.025;
355
                        }
356
                        if (TipoComissionamento.COMISSSIONAMENTO_FARMACIA.getValor().equals(tipoComissionamento)) {
357
                                if (percentualRealizado < 75) {
358
                                        return 0.0;
359
                                } else if (percentualRealizado < 100) {
360
                                        return 0.025;
361
                                }
362
                                return 0.05;
363
                        }
364
                }
365
                return 0.0;
366
        }
367
 
368
        @Transient
369
        public Double retornarFaixaComissao() {
370
                if (VerificadorUtil.naoEstaNulo(getFuncionario())) {
371
                        return retornarFaixaComissao(getValorTotalVendido(), getFuncionario().getTipoComissionamento());
372
                }
373
                return 0.0;
374
        }
375
 
376
        @Transient
377
        public Double retornarFaixaComissaoVivo(Double totalVendas) {
378
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensalVivo)) {
379
                        Double percentualRealizado = totalVendas * 100 / valorMetaMensalVivo;
380
                        if (percentualRealizado < 75) {
381
                                return 0.0;
382
                        } else if (percentualRealizado < 100) {
383
                                return 0.10;
384
                        }
385
                        return 0.15;
386
                }
387
                return 0.0;
388
        }
389
 
390
        @Transient
391
        public Double retornarFaixaComissaoVivo() {
392
                return retornarFaixaComissaoVivo(getValorTotalVendido());
393
        }
394
 
395
        @Transient
396
        public Double retornarPercentualRealizado() {
397
                return retornarPercentual(getValorTotalVendido(), getValorMetaMensal());
398
        }
399
 
400
        @Transient
401
        public Double retornarPercentualVivoRealizado() {
402
                return retornarPercentual(getValorTotalVendidoVivo(), getValorMetaMensalVivo());
403
        }
404
 
405
        @Transient
406
        public Double retornarPercentualRealizado(Double totalVendas) {
407
                return retornarPercentual(totalVendas, getValorMetaMensal());
408
        }
409
 
410
        @Transient
411
        public Double retornarPercentualVivoRealizado(Double totalVendasVivo) {
412
                return retornarPercentual(totalVendasVivo, getValorMetaMensalVivo());
413
        }
414
 
415
        @Transient
333 espaco 416
        public Double retornarPercentualTicketMedioRealizado(Double ticketMedioAtual) {
417
                return retornarPercentual(ticketMedioAtual, getValorMetaTicketMedio());
418
        }
419
 
420
        @Transient
106 espaco 421
        public Double retornarPercentual(Double total, Double meta) {
422
                return VerificadorUtil.naoEstaNulo(total) && VerificadorUtil.naoEstaNulo(meta)? meta > new Double(0.0) ? total / meta : new Double(0.0) : new Double(0.0);
423
        }
424
 
425
}