Subversion Repositories Integrator Subversion

Rev

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

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