Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

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