Subversion Repositories Integrator Subversion

Rev

Rev 650 | Rev 657 | 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
249
        public Integer pontuacao(Set<AvaliacaoFuncionarioItemAvaliacao> itens) {
250
                Integer pontuacao = 10;
251
                if (VerificadorUtil.naoEstaNulo(itens)) {
252
                        for (AvaliacaoFuncionarioItemAvaliacao item : itens) {
253
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
254
                                        pontuacao = pontuacao - item.getQuantidadePontos();
255
                                } else {
256
                                        pontuacao = pontuacao + item.getQuantidadePontos();
257
                                }
258
                        }
259
                }
260
                return pontuacao;
261
        }
262
 
263
        @Transient
264
        public Integer getPontuacao() {
265
                Integer pontuacao = 10;
266
                if (VerificadorUtil.naoEstaNulo(getItens())) {
267
                        for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
268
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
269
                                        pontuacao = pontuacao - item.getQuantidadePontos();
270
                                } else {
271
                                        pontuacao = pontuacao + item.getQuantidadePontos();
272
                                }
273
                        }
274
                }
275
                return pontuacao;
276
        }
277
 
278
        @Transient
279
        public void adicionarItemAvaliacao(AvaliacaoFuncionarioItemAvaliacao itemParticipante) {
280
                if (VerificadorUtil.estaNulo(itemParticipante.getItemAvaliacao())) {
281
                        throw new NegocioException("Parâmetro obrigatório não preenchido: Item da avaliação");
282
                }
283
                if (VerificadorUtil.estaNulo(itemParticipante.getQuantidadePontos())) {
284
                        throw new NegocioException("Parâmetro obrigatório não preenchido: Quantidade de pontos");
285
                }
286
                if (VerificadorUtil.estaNulo(getItens())) {
287
                        setItens(new ArrayList<AvaliacaoFuncionarioItemAvaliacao>());
288
                }
289
                for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
290
                        if (item.equals(itemParticipante)) {
291
                                getItens().remove(itemParticipante);
292
                                Integer pontos = item.getQuantidadePontos();
293
                                itemParticipante.setQuantidadePontos(itemParticipante.getQuantidadePontos()+pontos);
294
                                if (VerificadorUtil.naoEstaNuloOuVazio(item.getObservacao())) {
295
                                        String observacao = item.getObservacao();
296
                                        itemParticipante.setObservacao(observacao + "; " + itemParticipante.getObservacao());
297
                                }
298
                                break;
299
                        }
300
                }
301
                getItens().add(itemParticipante);
302
        }
279 espaco 303
 
268 espaco 304
        @Transient
305
        public Double retornarValorComissao(Double totalVendas, String tipoComissionamento) {
306
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
307
                        return totalVendas * retornarFaixaComissao(totalVendas, tipoComissionamento);
308
                }
309
                return 0.0;
310
        }
311
 
312
        @Transient
313
        public Double retornarValorComissao() {
314
                if (VerificadorUtil.naoEstaNulo(getFuncionario())) {
315
                        return retornarValorComissao(getValorTotalVendido(), getFuncionario().getTipoComissionamento());
316
                }
317
                return 0.0;
318
        }
319
 
320
        @Transient
321
        public Double retornarFaixaComissao(Double totalVendas, String tipoComissionamento) {
322
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
323
                        Double percentualRealizado = totalVendas * 100 / valorMetaMensal;
324
                        if (TipoComissionamento.COMISSSIONAMENTO_ESPACO_CASE.getValor().equals(tipoComissionamento)) {
325
                                if (percentualRealizado < 75) {
326
                                        return 0.0;
327
                                } else if (percentualRealizado < 100) {
328
                                        return 0.01;
329
                                } else if (percentualRealizado < 125) {
330
                                        return 0.02;
331
                                }
332
                                return 0.025;
333
                        }
334
                        if (TipoComissionamento.COMISSSIONAMENTO_FARMACIA.getValor().equals(tipoComissionamento)) {
335
                                if (percentualRealizado < 75) {
336
                                        return 0.0;
337
                                } else if (percentualRealizado < 100) {
338
                                        return 0.025;
339
                                }
340
                                return 0.05;
341
                        }
342
                }
343
                return 0.0;
344
        }
345
 
346
        @Transient
347
        public Double retornarFaixaComissao() {
348
                if (VerificadorUtil.naoEstaNulo(getFuncionario())) {
349
                        return retornarFaixaComissao(getValorTotalVendido(), getFuncionario().getTipoComissionamento());
350
                }
351
                return 0.0;
352
        }
353
 
354
        @Transient
355
        public Double retornarFaixaComissaoVivo(Double totalVendas) {
356
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensalVivo)) {
357
                        Double percentualRealizado = totalVendas * 100 / valorMetaMensalVivo;
358
                        if (percentualRealizado < 75) {
359
                                return 0.0;
360
                        } else if (percentualRealizado < 100) {
361
                                return 0.10;
362
                        }
363
                        return 0.15;
364
                }
365
                return 0.0;
366
        }
367
 
368
        @Transient
369
        public Double retornarFaixaComissaoVivo() {
370
                return retornarFaixaComissaoVivo(getValorTotalVendido());
371
        }
372
 
373
        @Transient
374
        public Double retornarPercentualRealizado() {
375
                return retornarPercentual(getValorTotalVendido(), getValorMetaMensal());
376
        }
377
 
378
        @Transient
379
        public Double retornarPercentualVivoRealizado() {
380
                return retornarPercentual(getValorTotalVendidoVivo(), getValorMetaMensalVivo());
381
        }
382
 
383
        @Transient
384
        public Double retornarPercentualRealizado(Double totalVendas) {
385
                return retornarPercentual(totalVendas, getValorMetaMensal());
386
        }
387
 
388
        @Transient
389
        public Double retornarPercentualVivoRealizado(Double totalVendasVivo) {
390
                return retornarPercentual(totalVendasVivo, getValorMetaMensalVivo());
391
        }
392
 
393
        @Transient
394
        public Double retornarPercentual(Double total, Double meta) {
395
                return VerificadorUtil.naoEstaNulo(total) && VerificadorUtil.naoEstaNulo(meta)? meta > new Double(0.0) ? total / meta : new Double(0.0) : new Double(0.0);
396
        }
656 blopes 397
 
268 espaco 398
}