Subversion Repositories Integrator Subversion

Rev

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