Subversion Repositories Integrator Subversion

Rev

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;
656 blopes 26
import br.com.ec.domain.dto.AvaliacaoFuncionarioDTO;
268 espaco 27
import br.com.ec.domain.model.tipos.TipoComissionamento;
28
 
29
@Entity
30
@Table(name="sec_avaliacao_funcionario", schema="sc_sec")
31
public class AvaliacaoFuncionario implements Serializable, Identidade {
32
 
33
        private static final long serialVersionUID = 1L;
34
 
35
        private AvaliacaoFuncionarioId avaliacaoFuncionarioId;
36
        private Funcionario funcionario;
37
        private Avaliacao avaliacao;
650 blopes 38
        private Loja loja;
268 espaco 39
        private String observacao;
40
        private Double porcentagemComissao;
41
        private Integer quantidadeHorasExtras50;
42
        private Integer quantidadeHorasExtras100;
43
        private Double valorMetaMensal;
44
        private Double valorMetaMensalVivo;
45
        private Double valorComissao;
46
 
47
        private Double valorTotalVendido;
48
        private Double valorTotalVendidoVivo;
49
 
279 espaco 50
        private List<AvaliacaoFuncionarioItemAvaliacao> itens;
268 espaco 51
 
52
        public AvaliacaoFuncionario() {
53
                this.avaliacaoFuncionarioId = new AvaliacaoFuncionarioId();
54
        }
55
 
56
        public AvaliacaoFuncionario(AvaliacaoFuncionarioId avalicaoFuncionarioId) {
57
                this.avaliacaoFuncionarioId = avalicaoFuncionarioId;
58
        }
59
 
650 blopes 60
        public AvaliacaoFuncionario(Funcionario funcionario, Avaliacao avaliacao, Loja loja) {
268 espaco 61
                avaliacaoFuncionarioId = new AvaliacaoFuncionarioId();
62
                setAvaliacao(avaliacao);
63
                setFuncionario(funcionario);
650 blopes 64
                setLoja(loja);
268 espaco 65
        }
66
 
67
        @Override
68
        @Transient
69
        public Object getId() {
70
                return getAvaliacaoFuncionarioId();
71
        }
72
        @Override
73
        public void setId(Object id) {
74
                this.avaliacaoFuncionarioId = (AvaliacaoFuncionarioId) id;
75
        }
76
 
77
        @EmbeddedId
78
        public AvaliacaoFuncionarioId getAvaliacaoFuncionarioId() {
79
                return avaliacaoFuncionarioId;
80
        }
81
        public void setAvaliacaoFuncionarioId(AvaliacaoFuncionarioId avaliacaoFuncionarioId) {
82
                this.avaliacaoFuncionarioId = avaliacaoFuncionarioId;
83
        }
84
 
85
        @ManyToOne
86
        @ForeignKey(name="fk_avalfunc_avaliacao")
87
        @MapsId(value="sequencialAvaliacao")
88
        @JoinColumn(name = "seq_avaliacao", referencedColumnName="seq_avaliacao", insertable=false, updatable=false, nullable = false)
89
        public Avaliacao getAvaliacao() {
90
                return avaliacao;
91
        }
92
        public void setAvaliacao(Avaliacao avaliacao) {
93
                if (VerificadorUtil.naoEstaNulo(avaliacao)) {
94
                        avaliacaoFuncionarioId.setSequencialAvaliacao(avaliacao.getSequencial());
95
                }
96
                this.avaliacao = avaliacao;
97
        }
98
 
99
        @ManyToOne
100
        @ForeignKey(name="fk_avalfunc_funcionario")
101
        @MapsId(value="sequencialFuncionario")
102
        @JoinColumn(name = "seq_funcionario", referencedColumnName="seq_funcionario", insertable=false, updatable=false, nullable = false)
103
        public Funcionario getFuncionario() {
104
                return funcionario;
105
        }
106
        public void setFuncionario(Funcionario funcionario) {
107
                if (VerificadorUtil.naoEstaNulo(funcionario)) {
108
                        avaliacaoFuncionarioId.setSequencialFuncionario(funcionario.getSequencial());
109
                }
110
                this.funcionario = funcionario;
111
        }
112
 
650 blopes 113
        @ManyToOne
114
        @ForeignKey(name="fk_avalfunc_loja")
115
        @MapsId(value="sequencialLoja")
116
        @JoinColumn(name = "seq_loja", referencedColumnName="seq_loja", insertable=false, updatable=false, nullable = false)
117
        public Loja getLoja() {
118
                return loja;
119
        }
120
        public void setLoja(Loja loja) {
121
                if (VerificadorUtil.naoEstaNulo(loja)) {
122
                        avaliacaoFuncionarioId.setSequencialLoja(loja.getSequencial());
123
                }
124
                this.loja = loja;
125
        }
126
 
268 espaco 127
        @Column(name="dsc_observacao")
128
        @Size(max = 400, message = "Limite de caracteres ultrapassado: Observação")
129
        public String getObservacao() {
130
                return observacao;
131
        }
132
        public void setObservacao(String observacao) {
133
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
134
        }
135
 
136
        @Column(name="val_porcentagem_comissao")
137
        public Double getPorcentagemComissao() {
138
                return porcentagemComissao;
139
        }
140
        public void setPorcentagemComissao(Double porcentagemComissao) {
141
                this.porcentagemComissao = porcentagemComissao;
142
        }
143
 
144
        @Column(name="qtd_horas_extras_50")
145
        public Integer getQuantidadeHorasExtras50() {
146
                return quantidadeHorasExtras50;
147
        }
148
        public void setQuantidadeHorasExtras50(Integer quantidadeHorasExtras50) {
149
                this.quantidadeHorasExtras50 = quantidadeHorasExtras50;
150
        }
151
 
152
        @Column(name="qtd_horas_extras_100")
153
        public Integer getQuantidadeHorasExtras100() {
154
                return quantidadeHorasExtras100;
155
        }
156
        public void setQuantidadeHorasExtras100(Integer quantidadeHorasExtras100) {
157
                this.quantidadeHorasExtras100 = quantidadeHorasExtras100;
158
        }
159
 
160
        @Column(name="val_meta_mensal")
161
        public Double getValorMetaMensal() {
162
                return valorMetaMensal;
163
        }
164
        public void setValorMetaMensal(Double valorMetaMensal) {
165
                this.valorMetaMensal = valorMetaMensal;
166
        }
167
 
168
        @Column(name="val_meta_mensal_vivo")
169
        public Double getValorMetaMensalVivo() {
170
                return valorMetaMensalVivo;
171
        }
172
        public void setValorMetaMensalVivo(Double valorMetaMensalVivo) {
173
                this.valorMetaMensalVivo = valorMetaMensalVivo;
174
        }
175
 
176
        @Column(name="val_comissao")
177
        public Double getValorComissao() {
178
                return valorComissao;
179
        }
180
        public void setValorComissao(Double valorComissao) {
181
                this.valorComissao = valorComissao;
182
        }
279 espaco 183
 
268 espaco 184
        @OneToMany(mappedBy="avaliacaoFuncionario", cascade=CascadeType.ALL, orphanRemoval=true)
185
        public List<AvaliacaoFuncionarioItemAvaliacao> getItens() {
186
                return itens;
187
        }
188
        public void setItens(List<AvaliacaoFuncionarioItemAvaliacao> itens) {
189
                this.itens = itens;
190
        }
279 espaco 191
 
268 espaco 192
        @Override
193
        public int hashCode() {
194
                final int prime = 31;
195
                int result = 1;
196
                result = prime * result + ((avaliacaoFuncionarioId == null) ? 0 : avaliacaoFuncionarioId.hashCode());
197
                return result;
198
        }
199
 
200
        @Override
201
        public boolean equals(Object obj) {
202
                if (this == obj)
203
                        return true;
204
                if (obj == null)
205
                        return false;
206
                if (getClass() != obj.getClass())
207
                        return false;
208
                AvaliacaoFuncionario other = (AvaliacaoFuncionario) obj;
209
                if (avaliacaoFuncionarioId == null) {
210
                        if (other.avaliacaoFuncionarioId != null)
211
                                return false;
212
                } else if (!avaliacaoFuncionarioId.equals(other.avaliacaoFuncionarioId))
213
                        return false;
214
                return true;
215
        }
216
 
217
        @Transient
218
        public Double getValorTotalVendido() {
219
                return valorTotalVendido;
220
        }
221
        public void setValorTotalVendido(Double valorTotalVendido) {
222
                this.valorTotalVendido = valorTotalVendido;
223
        }
224
 
225
        @Transient
226
        public Double getValorTotalVendidoVivo() {
227
                return valorTotalVendidoVivo;
228
        }
229
        public void setValorTotalVendidoVivo(Double valorTotalVendidoVivo) {
230
                this.valorTotalVendidoVivo = valorTotalVendidoVivo;
231
        }
232
 
233
        @Transient
234
        public Long getSequencialDaAvaliacao() {
235
                return VerificadorUtil.naoEstaNulo(getAvaliacao())? getAvaliacao().getSequencial() : null;
236
        }
237
 
238
        @Transient
239
        public Long getSequencialDaVigencia() {
240
                return VerificadorUtil.naoEstaNulo(getAvaliacao())? getAvaliacao().getSequencialDaVigencia() : null;
241
        }
242
 
243
        @Transient
244
        public Long getSequencialDoFuncionario() {
245
                return VerificadorUtil.naoEstaNulo(getAvaliacaoFuncionarioId())? getAvaliacaoFuncionarioId().getSequencialFuncionario() : null;
246
        }
279 espaco 247
 
268 espaco 248
        @Transient
657 blopes 249
        public Long getSequencialDaLoja() {
250
                return VerificadorUtil.naoEstaNulo(getAvaliacaoFuncionarioId())? getAvaliacaoFuncionarioId().getSequencialLoja() : null;
251
        }
252
 
253
        @Transient
268 espaco 254
        public Integer pontuacao(Set<AvaliacaoFuncionarioItemAvaliacao> itens) {
255
                Integer pontuacao = 10;
256
                if (VerificadorUtil.naoEstaNulo(itens)) {
257
                        for (AvaliacaoFuncionarioItemAvaliacao item : itens) {
258
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
259
                                        pontuacao = pontuacao - item.getQuantidadePontos();
260
                                } else {
261
                                        pontuacao = pontuacao + item.getQuantidadePontos();
262
                                }
263
                        }
264
                }
265
                return pontuacao;
266
        }
267
 
268
        @Transient
269
        public Integer getPontuacao() {
270
                Integer pontuacao = 10;
271
                if (VerificadorUtil.naoEstaNulo(getItens())) {
272
                        for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
273
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
274
                                        pontuacao = pontuacao - item.getQuantidadePontos();
275
                                } else {
276
                                        pontuacao = pontuacao + item.getQuantidadePontos();
277
                                }
278
                        }
279
                }
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
        }
279 espaco 308
 
268 espaco 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
399
        public Double retornarPercentual(Double total, Double meta) {
400
                return VerificadorUtil.naoEstaNulo(total) && VerificadorUtil.naoEstaNulo(meta)? meta > new Double(0.0) ? total / meta : new Double(0.0) : new Double(0.0);
401
        }
656 blopes 402
 
268 espaco 403
}