Subversion Repositories Integrator Subversion

Rev

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