Subversion Repositories Integrator Subversion

Rev

Rev 657 | 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;
659 blopes 44
        private Double valorMetaTicketMedio;
268 espaco 45
        private Double valorComissao;
659 blopes 46
        private Double pontuacaoMeta;
268 espaco 47
 
48
        private Double valorTotalVendido;
49
        private Double valorTotalVendidoVivo;
50
 
279 espaco 51
        private List<AvaliacaoFuncionarioItemAvaliacao> itens;
268 espaco 52
 
53
        public AvaliacaoFuncionario() {
54
                this.avaliacaoFuncionarioId = new AvaliacaoFuncionarioId();
55
        }
56
 
57
        public AvaliacaoFuncionario(AvaliacaoFuncionarioId avalicaoFuncionarioId) {
58
                this.avaliacaoFuncionarioId = avalicaoFuncionarioId;
59
        }
60
 
650 blopes 61
        public AvaliacaoFuncionario(Funcionario funcionario, Avaliacao avaliacao, Loja loja) {
268 espaco 62
                avaliacaoFuncionarioId = new AvaliacaoFuncionarioId();
63
                setAvaliacao(avaliacao);
64
                setFuncionario(funcionario);
650 blopes 65
                setLoja(loja);
268 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
 
650 blopes 114
        @ManyToOne
115
        @ForeignKey(name="fk_avalfunc_loja")
659 blopes 116
        @JoinColumn(name = "seq_loja", referencedColumnName="seq_loja", insertable=true, updatable=true, nullable = false)
650 blopes 117
        public Loja getLoja() {
118
                return loja;
119
        }
120
        public void setLoja(Loja loja) {
121
                this.loja = loja;
122
        }
123
 
268 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
 
659 blopes 165
        @Column(name="val_meta_ticketmedio")
166
        public Double getValorMetaTicketMedio() {
167
                return valorMetaTicketMedio;
268 espaco 168
        }
659 blopes 169
        public void setValorMetaTicketMedio(Double valorMetaTicketMedio) {
170
                this.valorMetaTicketMedio = valorMetaTicketMedio;
268 espaco 171
        }
172
 
173
        @Column(name="val_comissao")
174
        public Double getValorComissao() {
175
                return valorComissao;
176
        }
177
        public void setValorComissao(Double valorComissao) {
178
                this.valorComissao = valorComissao;
179
        }
279 espaco 180
 
659 blopes 181
        @Column(name="val_pontuacao_meta")
182
        public Double getPontuacaoMeta() {
183
                return pontuacaoMeta;
184
        }
185
        public void setPontuacaoMeta(Double pontuacaoMeta) {
186
                this.pontuacaoMeta = pontuacaoMeta;
187
        }
188
 
268 espaco 189
        @OneToMany(mappedBy="avaliacaoFuncionario", cascade=CascadeType.ALL, orphanRemoval=true)
190
        public List<AvaliacaoFuncionarioItemAvaliacao> getItens() {
191
                return itens;
192
        }
193
        public void setItens(List<AvaliacaoFuncionarioItemAvaliacao> itens) {
194
                this.itens = itens;
195
        }
279 espaco 196
 
268 espaco 197
        @Override
198
        public int hashCode() {
199
                final int prime = 31;
200
                int result = 1;
201
                result = prime * result + ((avaliacaoFuncionarioId == null) ? 0 : avaliacaoFuncionarioId.hashCode());
202
                return result;
203
        }
204
 
205
        @Override
206
        public boolean equals(Object obj) {
207
                if (this == obj)
208
                        return true;
209
                if (obj == null)
210
                        return false;
211
                if (getClass() != obj.getClass())
212
                        return false;
213
                AvaliacaoFuncionario other = (AvaliacaoFuncionario) obj;
214
                if (avaliacaoFuncionarioId == null) {
215
                        if (other.avaliacaoFuncionarioId != null)
216
                                return false;
217
                } else if (!avaliacaoFuncionarioId.equals(other.avaliacaoFuncionarioId))
218
                        return false;
219
                return true;
220
        }
221
 
222
        @Transient
223
        public Double getValorTotalVendido() {
224
                return valorTotalVendido;
225
        }
226
        public void setValorTotalVendido(Double valorTotalVendido) {
227
                this.valorTotalVendido = valorTotalVendido;
228
        }
229
 
230
        @Transient
231
        public Double getValorTotalVendidoVivo() {
232
                return valorTotalVendidoVivo;
233
        }
234
        public void setValorTotalVendidoVivo(Double valorTotalVendidoVivo) {
235
                this.valorTotalVendidoVivo = valorTotalVendidoVivo;
236
        }
237
 
238
        @Transient
239
        public Long getSequencialDaAvaliacao() {
240
                return VerificadorUtil.naoEstaNulo(getAvaliacao())? getAvaliacao().getSequencial() : null;
241
        }
242
 
243
        @Transient
244
        public Long getSequencialDaVigencia() {
245
                return VerificadorUtil.naoEstaNulo(getAvaliacao())? getAvaliacao().getSequencialDaVigencia() : null;
246
        }
247
 
248
        @Transient
249
        public Long getSequencialDoFuncionario() {
250
                return VerificadorUtil.naoEstaNulo(getAvaliacaoFuncionarioId())? getAvaliacaoFuncionarioId().getSequencialFuncionario() : null;
251
        }
279 espaco 252
 
268 espaco 253
        @Transient
657 blopes 254
        public Long getSequencialDaLoja() {
659 blopes 255
                return VerificadorUtil.naoEstaNulo(getLoja())? getLoja().getSequencial() : null;
657 blopes 256
        }
257
 
258
        @Transient
268 espaco 259
        public Integer pontuacao(Set<AvaliacaoFuncionarioItemAvaliacao> itens) {
260
                Integer pontuacao = 10;
261
                if (VerificadorUtil.naoEstaNulo(itens)) {
262
                        for (AvaliacaoFuncionarioItemAvaliacao item : itens) {
263
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
264
                                        pontuacao = pontuacao - item.getQuantidadePontos();
265
                                } else {
266
                                        pontuacao = pontuacao + item.getQuantidadePontos();
267
                                }
268
                        }
269
                }
270
                return pontuacao;
271
        }
272
 
273
        @Transient
274
        public Integer getPontuacao() {
275
                Integer pontuacao = 10;
276
                if (VerificadorUtil.naoEstaNulo(getItens())) {
277
                        for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
278
                                if (item.getItemAvaliacao().getIndicadorRetirarPontos()) {
279
                                        pontuacao = pontuacao - item.getQuantidadePontos();
280
                                } else {
281
                                        pontuacao = pontuacao + item.getQuantidadePontos();
282
                                }
283
                        }
284
                }
285
                return pontuacao;
286
        }
287
 
288
        @Transient
289
        public void adicionarItemAvaliacao(AvaliacaoFuncionarioItemAvaliacao itemParticipante) {
290
                if (VerificadorUtil.estaNulo(itemParticipante.getItemAvaliacao())) {
291
                        throw new NegocioException("Parâmetro obrigatório não preenchido: Item da avaliação");
292
                }
293
                if (VerificadorUtil.estaNulo(itemParticipante.getQuantidadePontos())) {
294
                        throw new NegocioException("Parâmetro obrigatório não preenchido: Quantidade de pontos");
295
                }
296
                if (VerificadorUtil.estaNulo(getItens())) {
297
                        setItens(new ArrayList<AvaliacaoFuncionarioItemAvaliacao>());
298
                }
299
                for (AvaliacaoFuncionarioItemAvaliacao item : getItens()) {
300
                        if (item.equals(itemParticipante)) {
301
                                getItens().remove(itemParticipante);
302
                                Integer pontos = item.getQuantidadePontos();
303
                                itemParticipante.setQuantidadePontos(itemParticipante.getQuantidadePontos()+pontos);
304
                                if (VerificadorUtil.naoEstaNuloOuVazio(item.getObservacao())) {
305
                                        String observacao = item.getObservacao();
306
                                        itemParticipante.setObservacao(observacao + "; " + itemParticipante.getObservacao());
307
                                }
308
                                break;
309
                        }
310
                }
311
                getItens().add(itemParticipante);
312
        }
279 espaco 313
 
268 espaco 314
        @Transient
315
        public Double retornarValorComissao(Double totalVendas, String tipoComissionamento) {
316
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
317
                        return totalVendas * retornarFaixaComissao(totalVendas, tipoComissionamento);
318
                }
319
                return 0.0;
320
        }
321
 
322
        @Transient
323
        public Double retornarValorComissao() {
324
                if (VerificadorUtil.naoEstaNulo(getFuncionario())) {
325
                        return retornarValorComissao(getValorTotalVendido(), getFuncionario().getTipoComissionamento());
326
                }
327
                return 0.0;
328
        }
329
 
330
        @Transient
331
        public Double retornarFaixaComissao(Double totalVendas, String tipoComissionamento) {
332
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
333
                        Double percentualRealizado = totalVendas * 100 / valorMetaMensal;
334
                        if (TipoComissionamento.COMISSSIONAMENTO_ESPACO_CASE.getValor().equals(tipoComissionamento)) {
335
                                if (percentualRealizado < 75) {
336
                                        return 0.0;
337
                                } else if (percentualRealizado < 100) {
338
                                        return 0.01;
339
                                } else if (percentualRealizado < 125) {
340
                                        return 0.02;
341
                                }
342
                                return 0.025;
343
                        }
344
                        if (TipoComissionamento.COMISSSIONAMENTO_FARMACIA.getValor().equals(tipoComissionamento)) {
345
                                if (percentualRealizado < 75) {
346
                                        return 0.0;
347
                                } else if (percentualRealizado < 100) {
348
                                        return 0.025;
349
                                }
350
                                return 0.05;
351
                        }
352
                }
353
                return 0.0;
354
        }
355
 
356
        @Transient
357
        public Double retornarFaixaComissao() {
358
                if (VerificadorUtil.naoEstaNulo(getFuncionario())) {
359
                        return retornarFaixaComissao(getValorTotalVendido(), getFuncionario().getTipoComissionamento());
360
                }
361
                return 0.0;
362
        }
363
 
364
        @Transient
365
        public Double retornarPercentualRealizado() {
366
                return retornarPercentual(getValorTotalVendido(), getValorMetaMensal());
367
        }
368
 
369
        @Transient
370
        public Double retornarPercentualRealizado(Double totalVendas) {
371
                return retornarPercentual(totalVendas, getValorMetaMensal());
372
        }
373
 
374
        @Transient
375
        public Double retornarPercentual(Double total, Double meta) {
376
                return VerificadorUtil.naoEstaNulo(total) && VerificadorUtil.naoEstaNulo(meta)? meta > new Double(0.0) ? total / meta : new Double(0.0) : new Double(0.0);
377
        }
656 blopes 378
 
268 espaco 379
}