Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
582 blopes 1
package br.com.ec.domain.model;
2
 
3
import java.io.Serializable;
4
import java.util.Date;
5
import java.util.List;
6
 
7
import javax.persistence.Column;
8
import javax.persistence.EmbeddedId;
9
import javax.persistence.Entity;
10
import javax.persistence.JoinColumn;
11
import javax.persistence.ManyToOne;
12
import javax.persistence.Table;
13
import javax.persistence.Transient;
14
import javax.validation.constraints.NotNull;
15
import javax.validation.constraints.Size;
16
 
17
import org.hibernate.annotations.ForeignKey;
18
 
19
import br.com.ec.core.generic.identidade.Identidade;
20
import br.com.ec.core.interfaces.Alterar;
21
import br.com.ec.core.interfaces.Cadastrar;
22
import br.com.ec.core.util.DataUtils;
23
import br.com.ec.core.util.StringUtil;
24
import br.com.ec.core.util.VerificadorUtil;
25
import br.com.ec.domain.dto.ProdutoHistoricoDTO;
26
import br.com.ec.domain.model.tipos.TipoStatusPedidoCompra;
27
import br.com.ec.domain.shared.ConstantesSEC;
28
 
29
@Entity
30
@Table(name="sec_produto_pedidocompra", schema="sc_sec")
31
public class ProdutoPedidoCompra implements Serializable, Identidade {
32
 
33
        private static final long serialVersionUID = 1L;
34
 
35
        private ProdutoPedidoCompraId produtoPedidoCompraId;
36
        private Produto produto;
37
        private Loja loja;
38
        private Fornecedor fornecedorParaComprar;
39
 
40
        private Integer quantidadeParaComprar;
41
        private Integer quantidadeVendida;
42
        private Double valorOrcado;
43
        private String observacao;
44
        private String status;
45
 
46
        private Date dataPedido;
47
        private Usuario usuarioPedido;
48
 
49
        private Date dataUltimaAtualizacao;
50
        private Usuario usuarioUltimaAtualizacao;
51
 
52
        private Integer quantidadeEstoque;
53
        private Integer tempoEstoque;
54
        private List<ProdutoHistoricoDTO> produtosHistorico;
55
 
56
        public ProdutoPedidoCompra() {
57
                this.produtoPedidoCompraId = new ProdutoPedidoCompraId();
58
                this.loja = new Loja(ConstantesSEC.Loja.SEQUENCIAL_MATRIZ_ESTOQUE_9);
59
        }
60
 
61
        public ProdutoPedidoCompra(ProdutoPedidoCompraId produtoLojaId) {
62
                this.produtoPedidoCompraId = produtoLojaId;
63
                this.loja = new Loja(ConstantesSEC.Loja.SEQUENCIAL_MATRIZ_ESTOQUE_9);
64
        }
65
 
66
        public ProdutoPedidoCompra(Produto produto, Loja loja) {
67
                produtoPedidoCompraId = new ProdutoPedidoCompraId();
68
                setProduto(produto);
69
                setLoja(loja);
70
        }
71
 
72
        public ProdutoPedidoCompra(Produto produto, Loja loja, Fornecedor fornecedorParaComprar,
73
                        Integer quantidadeParaComprar, Integer quantidadeVendida, Double valorOrcado, String observacao,
74
                        String status, Date dataPedido, Usuario usuarioPedido) {
75
                super();
76
                this.produto = produto;
77
                this.loja = loja;
78
                this.fornecedorParaComprar = fornecedorParaComprar;
79
                this.quantidadeParaComprar = quantidadeParaComprar;
80
                this.quantidadeVendida = quantidadeVendida;
81
                this.valorOrcado = valorOrcado;
82
                this.observacao = observacao;
83
                this.status = status;
84
                this.dataPedido = dataPedido;
85
                this.usuarioPedido = usuarioPedido;
86
        }
87
 
88
        public ProdutoPedidoCompra(String status, Integer quantidadeParaComprar) {
89
                this.status = status;
90
                this.quantidadeParaComprar = quantidadeParaComprar;
91
        }
92
 
93
        @Override
94
        @Transient
95
        public Object getId() {
96
                return getProdutoPedidoCompraId();
97
        }
98
        @Override
99
        public void setId(Object id) {
100
                this.produtoPedidoCompraId = (ProdutoPedidoCompraId) id;
101
        }
102
 
103
        @EmbeddedId
104
        public ProdutoPedidoCompraId getProdutoPedidoCompraId() {
105
                return produtoPedidoCompraId;
106
        }
107
        public void setProdutoPedidoCompraId(ProdutoPedidoCompraId produtoLojaId) {
108
                this.produtoPedidoCompraId = produtoLojaId;
109
        }
110
 
111
        @ManyToOne
112
        @ForeignKey(name="fk_produtopedidocompra_produto")
113
        @JoinColumn(name = "seq_produto", insertable=false, updatable=false, nullable = false)
114
        @NotNull(message="Obrigatório informar o produto", groups={Cadastrar.class, Alterar.class})
115
        public Produto getProduto() {
116
                return produto;
117
        }
118
        public void setProduto(Produto produto) {
119
                if (VerificadorUtil.naoEstaNulo(produto)) {
120
                        produtoPedidoCompraId.setSequencialProduto(produto.getSequencial());
121
                }
122
                this.produto = produto;
123
        }
124
 
125
        @ManyToOne
126
        @ForeignKey(name="fk_produtopedidocompra_loja")
127
        @JoinColumn(name = "seq_loja", insertable=false, updatable=false, nullable = false)
128
        @NotNull(message="Obrigatório informar a loja", groups={Cadastrar.class, Alterar.class})
129
        public Loja getLoja() {
130
                return loja;
131
        }
132
        public void setLoja(Loja loja) {
133
                if (VerificadorUtil.naoEstaNulo(loja)) {
134
                        produtoPedidoCompraId.setSequencialLoja(loja.getSequencial());
135
                }
136
                this.loja = loja;
137
        }
138
 
139
        @ManyToOne
140
        @ForeignKey(name="fk_produtopedidocompra_fornecedor")
141
        @JoinColumn(name = "seq_fornecedor", referencedColumnName="seq_fornecedor", nullable=true)
142
        public Fornecedor getFornecedorParaComprar() {
143
                return fornecedorParaComprar;
144
        }
145
        public void setFornecedorParaComprar(Fornecedor fornecedorParaComprar) {
146
                this.fornecedorParaComprar = fornecedorParaComprar;
147
        }
148
 
149
        @Column(name="qtd_paracomprar")
150
        public Integer getQuantidadeParaComprar() {
151
                return quantidadeParaComprar;
152
        }
153
        public void setQuantidadeParaComprar(Integer quantidadeParaComprar) {
154
                this.quantidadeParaComprar = quantidadeParaComprar;
155
        }
156
 
157
        @Column(name="qnt_vendas")
158
        public Integer getQuantidadeVendida() {
159
                return quantidadeVendida;
160
        }
161
        public void setQuantidadeVendida(Integer quantidadeVendida) {
162
                this.quantidadeVendida = quantidadeVendida;
163
        }
164
 
165
        @Column(name="val_orcado")
166
        public Double getValorOrcado() {
167
                return valorOrcado;
168
        }
169
        public void setValorOrcado(Double valorOrcado) {
170
                this.valorOrcado = valorOrcado;
171
        }
172
 
173
        @Column(name="dsc_observacao")
174
        @Size(max = 250, message = "Limite de caracteres ultrapassado: Observação")
175
        public String getObservacao() {
176
                return observacao;
177
        }
178
        public void setObservacao(String observacao) {
179
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
180
        }
181
 
182
        @Column(name="tip_status_pedidocompra")
183
        @NotNull(message="Obrigatório informar o status do pedido", groups={Cadastrar.class, Alterar.class})
184
        public String getStatus() {
185
                return status;
186
        }
187
        public void setStatus(String status) {
188
                this.status = status;
189
        }
190
        @Transient
191
        public String getDescricaoStatus() {
192
                return VerificadorUtil.naoEstaNulo(getStatus())? TipoStatusPedidoCompra.parse(getStatus()).getDescricao() : null;
193
        }
194
 
195
        @Column(name="dat_pedido")
196
        public Date getDataPedido() {
197
                return dataPedido;
198
        }
199
        public void setDataPedido(Date dataPedido) {
200
                this.dataPedido = dataPedido;
201
        }
202
 
203
        @Column(name="dat_pedidoatualizacao")
204
        public Date getDataUltimaAtualizacao() {
205
                return dataUltimaAtualizacao;
206
        }
207
        public void setDataUltimaAtualizacao(Date dataUltimaAtualizacao) {
208
                this.dataUltimaAtualizacao = dataUltimaAtualizacao;
209
        }
210
 
211
        @ManyToOne
212
        @ForeignKey(name="fk_produtopedidocompra_usuario")
213
        @JoinColumn(name = "seq_usuario", nullable = false)
214
        public Usuario getUsuarioPedido() {
215
                return usuarioPedido;
216
        }
217
        public void setUsuarioPedido(Usuario usuarioPedido) {
218
                this.usuarioPedido = usuarioPedido;
219
        }
220
 
221
        @ManyToOne
222
        @ForeignKey(name="fk_produtopedidocompra_usuarioatualizacao")
223
        @JoinColumn(name = "seq_usuarioatualizacao")
224
        public Usuario getUsuarioUltimaAtualizacao() {
225
                return usuarioUltimaAtualizacao;
226
        }
227
        public void setUsuarioUltimaAtualizacao(Usuario usuarioUltimaAtualizacao) {
228
                this.usuarioUltimaAtualizacao = usuarioUltimaAtualizacao;
229
        }
230
 
231
        @Transient
232
        public Integer getQuantidadeEstoque() {
233
                return quantidadeEstoque;
234
        }
235
        public void setQuantidadeEstoque(Integer quantidadeEstoque) {
236
                this.quantidadeEstoque = quantidadeEstoque;
237
        }
238
 
239
        @Transient
240
        public Integer getTempoEstoque() {
241
                return tempoEstoque;
242
        }
243
        public void setTempoEstoque(Integer tempoEstoque) {
244
                this.tempoEstoque = tempoEstoque;
245
        }
246
 
247
        @Transient
248
        public List<ProdutoHistoricoDTO> getProdutosHistorico() {
249
                return produtosHistorico;
250
        }
251
        public void setProdutosHistorico(List<ProdutoHistoricoDTO> produtosHistorico) {
252
                this.produtosHistorico = produtosHistorico;
253
        }
254
 
255
        @Transient
256
        public Long getSequencialDoProduto() {
257
                return VerificadorUtil.naoEstaNulo(produto)? produto.getSequencial() : null;
258
        }
259
 
260
        @Transient
261
        public Long getSequencialDaLoja() {
262
                return VerificadorUtil.naoEstaNulo(loja)? loja.getSequencial() : null;
263
        }
264
 
265
        @Transient
266
        public Modelo getModeloDoProduto() {
267
                return VerificadorUtil.naoEstaNulo(produto)? VerificadorUtil.naoEstaNulo(produto.getModelo())? produto.getModelo() : null : null;
268
        }
269
 
270
        @Transient
271
        public String getNomeDoUsuario() {
272
                return VerificadorUtil.naoEstaNulo(getUsuarioPedido())? getUsuarioPedido().getNomeDaPessoa() : null;
273
        }
274
        @Transient
275
        public String getNomeDoUsuarioAtualizacao() {
276
                return VerificadorUtil.naoEstaNulo(getUsuarioUltimaAtualizacao())? getUsuarioUltimaAtualizacao().getNomeDaPessoa() : null;
277
        }
278
 
279
        @Transient
280
        public String getNomeDoFornecedorParaComprar() {
281
                return VerificadorUtil.naoEstaNulo(getFornecedorParaComprar())? getFornecedorParaComprar().getNomeDaPessoa() : null;
282
        }
283
 
284
        @Transient
285
        public String getCodigoDoFornecedorParaComprar(Produto produto) {
286
                String codigo = null;
287
                if (VerificadorUtil.naoEstaNulo(getFornecedorParaComprar())) {
288
                        for (FornecedorProduto fornecedorProduto : produto.getFornecedores()) {
289
                                if (fornecedorProduto.getSequencialDoFornecedor().equals(getFornecedorParaComprar().getSequencial())) {
290
                                        codigo = fornecedorProduto.getIdentificador();
291
                                }
292
                        }
293
                }
294
                return VerificadorUtil.naoEstaNulo(codigo)? codigo : null;
295
        }
296
 
297
        @Transient
298
        public Integer mediaVendas(Integer quantidadeMeses) {
299
                Integer vendas = 0;
300
                Integer quantidadeMesesVendas = 0;
301
                if (VerificadorUtil.naoEstaNulo(getProdutosHistorico())) {
302
                        for (ProdutoHistoricoDTO produtoHistorico : getProdutosHistorico()) {
303
                                if (produtoHistorico.ehTipoLancamentoHistoricoVendas()) {
304
                                        vendas = vendas + produtoHistorico.getQuantidadeLancamentos().intValue();
305
                                        quantidadeMesesVendas++;
306
                                }
307
                                if (quantidadeMesesVendas == quantidadeMeses) {
308
                                        break;
309
                                }
310
                        }
311
                }
312
                if (quantidadeMeses > quantidadeMesesVendas) {
313
                        quantidadeMeses = quantidadeMesesVendas;
314
                }
315
                return vendas > 0? vendas/quantidadeMeses : 0;
316
        }
317
 
318
        @Transient
319
        public String getDescricaoTipoStatus() {
320
                if (VerificadorUtil.naoEstaNulo(getStatus())) {
321
                        return TipoStatusPedidoCompra.parse(getStatus()).getDescricao();
322
                }
323
                return null;
324
        }
325
 
326
        @Transient
327
        public String getCorTipoStatus() {
328
                if (VerificadorUtil.naoEstaNulo(getStatus())) {
329
                        return TipoStatusPedidoCompra.parse(getStatus()).getCor();
330
                }
331
                return "black";
332
        }
333
 
334
        @Transient
335
        public String getCorTempoPedido() {
336
                if (VerificadorUtil.naoEstaNulo(getDataPedido())) {
337
                        Integer quantidadeDias = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataPedido());
338
                        if (quantidadeDias < 16) {
339
                                return "black";
340
                        } else if (quantidadeDias < 31) {
341
                                return "orange";
342
                        }
343
                        return "red";
344
                }
345
                return "black";
346
        }
347
 
348
        @Transient
349
        public String getCorTempoPedidoAtualizacao() {
350
                if (VerificadorUtil.naoEstaNulo(getDataUltimaAtualizacao())) {
351
                        Integer quantidadeDias = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaAtualizacao());
352
                        if (quantidadeDias < 16) {
353
                                return "black";
354
                        } else if (quantidadeDias < 31) {
355
                                return "orange";
356
                        }
357
                        return "red";
358
                }
359
                return "black";
360
        }
361
 
362
        @Transient
363
        public String getValorOrcadoFormatado() {
364
                if (VerificadorUtil.naoEstaNulo(getValorOrcado())) {
365
                        return StringUtil.formatarValor(getValorOrcado());
366
                }
367
                return StringUtil.formatarValor(0.0);
368
        }
369
 
370
        @Override
371
        public int hashCode() {
372
                final int prime = 31;
373
                int result = 1;
374
                result = prime * result + ((produtoPedidoCompraId == null) ? 0 : produtoPedidoCompraId.hashCode());
375
                return result;
376
        }
377
 
378
        @Override
379
        public boolean equals(Object obj) {
380
                if (this == obj)
381
                        return true;
382
                if (obj == null)
383
                        return false;
384
                if (getClass() != obj.getClass())
385
                        return false;
386
                ProdutoPedidoCompra other = (ProdutoPedidoCompra) obj;
387
                if (produtoPedidoCompraId == null) {
388
                        if (other.produtoPedidoCompraId != null)
389
                                return false;
390
                } else if (!produtoPedidoCompraId.equals(other.produtoPedidoCompraId))
391
                        return false;
392
                return true;
393
        }
394
 
395
}