Subversion Repositories Integrator Subversion

Rev

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