Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
583 blopes 1
package br.com.ec.domain.dto;
2
 
3
import java.util.ArrayList;
4
import java.util.Date;
5
import java.util.List;
6
 
7
import br.com.ec.core.util.DataUtils;
8
import br.com.ec.core.util.VerificadorUtil;
9
import br.com.ec.domain.model.Produto;
10
import br.com.ec.domain.model.Venda;
11
import br.com.ec.domain.model.tipos.TipoStatusPedidoCompra;
12
 
13
public class RankingProdutoDTONovo implements Comparable<RankingProdutoDTONovo> {
14
 
15
        private ProdutoDTO produto;
16
//      private Venda venda;
17
        private Double valorTotalVendido;
18
        private Double valorTotalComprado;
19
        private Double valorTotalDescontos;
20
        private Long quantidadeVendas;
21
        private Integer quantidadeDiasVendas;
22
        private Long quantidadeEstoque;
23
        private Long quantidadeAuditorias;
24
 
25
        private String statusPedidoCompra;
26
        private Integer quantidadeParaComprarPedidoCompra;
27
 
28
        private Double consumoMedioDiario;
29
        private Integer tempoEstoque;
30
        private Date dataUltimaVenda;
31
 
32
        private List<RankingProdutoPorLojaDTO> rankingsPorLoja = new ArrayList<RankingProdutoPorLojaDTO>();
33
 
34
        public RankingProdutoDTONovo() {}
35
 
36
        public RankingProdutoDTONovo(ProdutoDTO produto, Long quantidadeAuditorias, Long quantidadeVendas, Long quantidadeEstoque) {
37
                this.produto = produto;
38
                this.quantidadeAuditorias = quantidadeAuditorias;
39
                this.quantidadeVendas = quantidadeVendas;
40
                this.quantidadeEstoque = quantidadeEstoque;
41
        }
42
 
43
        public RankingProdutoDTONovo(ProdutoDTO produto, Double valorTotalVendido, Double valorTotalComprado, Double valorTotalDescontos,
44
                        Long quantidadeVendas, Integer quantidadeDiasVendas, Date dataUltimaVenda, Long quantidadeEstoque, String statusPedidoCompra,
45
                        Integer quantidadeParaComprarPedidoCompra) {
46
                this.produto = produto;
47
                this.valorTotalVendido = valorTotalVendido;
48
                this.valorTotalComprado = valorTotalComprado;
49
                this.valorTotalDescontos = valorTotalDescontos;
50
                this.quantidadeVendas = quantidadeVendas;
51
                this.quantidadeDiasVendas = quantidadeDiasVendas;
52
                this.dataUltimaVenda = dataUltimaVenda;
53
                this.quantidadeEstoque = quantidadeEstoque;
54
                this.statusPedidoCompra = statusPedidoCompra;
55
                this.quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra;
56
        }
57
 
58
        public RankingProdutoDTONovo(ProdutoDTO produto, Double valorTotalVendido, Double valorTotalComprado, Double valorTotalDescontos,
59
                        Long quantidadeVendas, Date dataUltimaVenda, Long quantidadeEstoque, String statusPedidoCompra,
60
                        Integer quantidadeParaComprarPedidoCompra) {
61
                this.produto = produto;
62
                this.valorTotalVendido = valorTotalVendido;
63
                this.valorTotalComprado = valorTotalComprado;
64
                this.valorTotalDescontos = valorTotalDescontos;
65
                this.quantidadeVendas = quantidadeVendas;
66
                this.dataUltimaVenda = dataUltimaVenda;
67
                this.quantidadeEstoque = quantidadeEstoque;
68
                this.statusPedidoCompra = statusPedidoCompra;
69
                this.quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra;
70
        }
71
 
72
        public RankingProdutoDTONovo(ProdutoDTO produto, Double valorTotalVendido, Double valorTotalComprado, Double valorTotalDescontos,
73
                        Long quantidadeVendas) {
74
                this.produto = produto;
75
                this.valorTotalVendido = valorTotalVendido;
76
                this.valorTotalComprado = valorTotalComprado;
77
                this.valorTotalDescontos = valorTotalDescontos;
78
                this.quantidadeVendas = quantidadeVendas;
79
        }
80
 
81
        /*
82
        public RankingProdutoDTONovo(ProdutoDTO produto, Venda venda, Double valorTotalVendido, Double valorTotalDescontos,
83
                        Long quantidadeEstoque, String statusPedidoCompra, Integer quantidadeParaComprarPedidoCompra) {
84
                this.produto = produto;
85
                this.venda = venda;
86
                this.valorTotalVendido = valorTotalVendido;
87
                this.valorTotalDescontos = valorTotalDescontos;
88
                this.quantidadeEstoque = quantidadeEstoque;
89
                this.statusPedidoCompra = statusPedidoCompra;
90
                this.quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra;
91
        }
92
        */
93
 
94
        public ProdutoDTO getProduto() {
95
                return produto;
96
        }
97
        public void setProduto(ProdutoDTO produto) {
98
                this.produto = produto;
99
        }
100
 
101
        public Double getValorTotalVendido() {
102
                return valorTotalVendido;
103
        }
104
        public void setValorTotalVendido(Double valorTotalVendido) {
105
                this.valorTotalVendido = valorTotalVendido;
106
        }
107
 
108
        public Double getValorTotalComprado() {
109
                return valorTotalComprado;
110
        }
111
        public void setValorTotalComprado(Double valorTotalComprado) {
112
                this.valorTotalComprado = valorTotalComprado;
113
        }
114
 
115
        public Double getValorTotalDescontos() {
116
                return valorTotalDescontos;
117
        }
118
        public void setValorTotalDescontos(Double valorTotalDescontos) {
119
                this.valorTotalDescontos = valorTotalDescontos;
120
        }
121
 
122
        public Long getQuantidadeAuditorias() {
123
                return quantidadeAuditorias;
124
        }
125
        public void setQuantidadeAuditorias(Long quantidadeAuditorias) {
126
                this.quantidadeAuditorias = quantidadeAuditorias;
127
        }
128
 
129
        public Long getQuantidadeVendas() {
130
                return quantidadeVendas;
131
        }
132
        public void setQuantidadeVendas(Long quantidadeVendas) {
133
                this.quantidadeVendas = quantidadeVendas;
134
        }
135
 
136
        public Integer getQuantidadeDiasVendas() {
137
                return quantidadeDiasVendas;
138
        }
139
        public void setQuantidadeDiasVendas(Integer quantidadeDiasVendas) {
140
                this.quantidadeDiasVendas = quantidadeDiasVendas;
141
        }
142
 
143
        public Long getQuantidadeEstoque() {
144
                return quantidadeEstoque;
145
        }
146
        public void setQuantidadeEstoque(Long quantidadeEstoque) {
147
                this.quantidadeEstoque = quantidadeEstoque;
148
        }
149
 
150
        public String getStatusPedidoCompra() {
151
                return statusPedidoCompra;
152
        }
153
        public void setStatusPedidoCompra(String statusPedidoCompra) {
154
                this.statusPedidoCompra = statusPedidoCompra;
155
        }
156
 
157
        public Integer getQuantidadeParaComprarPedidoCompra() {
158
                return quantidadeParaComprarPedidoCompra;
159
        }
160
        public void setQuantidadeParaComprarPedidoCompra(Integer quantidadeParaComprarPedidoCompra) {
161
                this.quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra;
162
        }
163
 
164
        public Double getConsumoMedioDiario() {
165
                return consumoMedioDiario;
166
        }
167
        public void setConsumoMedioDiario(Double consumoMedioDiario) {
168
                this.consumoMedioDiario = consumoMedioDiario;
169
        }
170
 
171
        public Integer getTempoEstoque() {
172
                return tempoEstoque;
173
        }
174
        public void setTempoEstoque(Integer tempoEstoque) {
175
                this.tempoEstoque = tempoEstoque;
176
        }
177
 
178
        public Date getDataUltimaVenda() {
179
                return dataUltimaVenda;
180
        }
181
        public void setDataUltimaVenda(Date dataUltimaVenda) {
182
                this.dataUltimaVenda = dataUltimaVenda;
183
        }
184
 
185
        public Integer getQuantidadeDiasUltimaVenda() {
186
                if (VerificadorUtil.naoEstaNulo(getDataUltimaVenda())) {
187
                        return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaVenda());
188
                }
189
                return null;
190
        }
191
 
192
        public List<RankingProdutoPorLojaDTO> getRankingsPorLoja() {
193
                return rankingsPorLoja;
194
        }
195
        public void setRankingsPorLoja(List<RankingProdutoPorLojaDTO> rankingsPorLoja) {
196
                this.rankingsPorLoja = rankingsPorLoja;
197
        }
198
 
199
        public Integer quantidadeParaComprar(Integer quantidadeParaComprar, Integer quantidadeVendas, Integer quantidadeEstoque) {
200
                return (quantidadeParaComprar * quantidadeVendas) - quantidadeEstoque;
201
        }
202
 
203
        public Long quantidadeEstoque(Long sequencialLoja) {
204
                for (RankingProdutoPorLojaDTO rankingProdutoPorLojaDTO : this.getRankingsPorLoja()) {
205
                        if (rankingProdutoPorLojaDTO.getLoja().getSequencial().equals(sequencialLoja)) {
206
                                return rankingProdutoPorLojaDTO.getQuantidadeEstoque();
207
                        }
208
                }
209
                return null;
210
        }
211
 
212
        public Long quantidadeParaTransferir(Long sequencialLoja) {
213
                for (RankingProdutoPorLojaDTO rankingProdutoPorLojaDTO : this.getRankingsPorLoja()) {
214
                        if (rankingProdutoPorLojaDTO.getLoja().getSequencial().equals(sequencialLoja)) {
215
                                return rankingProdutoPorLojaDTO.quantidadeParaTransferir();
216
                        }
217
                }
218
                return null;
219
        }
220
 
221
        public Long quantidadeParaTransferirSugerida(Long sequencialLoja) {
222
                for (RankingProdutoPorLojaDTO rankingProdutoPorLojaDTO : this.getRankingsPorLoja()) {
223
                        if (rankingProdutoPorLojaDTO.getLoja().getSequencial().equals(sequencialLoja)) {
224
                                return rankingProdutoPorLojaDTO.getQuantidadeSugeridaParaTransferir();
225
                        }
226
                }
227
                return null;
228
        }
229
 
230
        @Override
231
        public int compareTo(RankingProdutoDTONovo rankingProdutoDTO) {
232
                return rankingProdutoDTO.getValorTotalVendido().compareTo(this.valorTotalVendido);
233
        }
234
 
235
        public Double getPercentualLucro() {
236
                if (VerificadorUtil.naoEstaNulo(getValorTotalVendido()) &&
237
                                VerificadorUtil.naoEstaNulo(getValorTotalComprado())) {
238
                        return (((getValorTotalVendido() * 100)/getValorTotalComprado())- 100)/100;
239
                }
240
                return 0.0;
241
        }
242
 
243
        public String getCorTipoStatusSimplificado() {
244
                if (VerificadorUtil.naoEstaNulo(getStatusPedidoCompra())) {
245
                        if (getStatusPedidoCompra().equals(TipoStatusPedidoCompra.NAO_COMPRAR.getValor())) {
246
                                return "pink-btn";
247
                        }
248
                        if (getStatusPedidoCompra().equals(TipoStatusPedidoCompra.PENDENTE.getValor())) {
249
                                return "orange-btn";
250
                        }
251
                        if (getStatusPedidoCompra().equals(TipoStatusPedidoCompra.SOLICITADO.getValor())) {
252
                                return "blue-btn";
253
                        }
254
                        return "green-btn";
255
                }
256
                return "black-btn";
257
        }
258
 
259
        public String getCorTipoStatus() {
260
                if (VerificadorUtil.naoEstaNulo(getStatusPedidoCompra())) {
261
                        return TipoStatusPedidoCompra.parse(getStatusPedidoCompra()).getStyleBotao();
262
                }
263
                return "black-btn";
264
        }
265
 
266
        public String getQuantidadeParaComprarDoPedido() {
267
                if (VerificadorUtil.naoEstaNulo(getStatusPedidoCompra())) {
268
                        if (VerificadorUtil.naoEstaNulo(getQuantidadeParaComprarPedidoCompra())) {
269
                                StringBuilder statusPedido = new StringBuilder();
270
                                statusPedido.append(getQuantidadeParaComprarPedidoCompra());
271
                                return statusPedido.toString();
272
                        }
273
                }
274
                return "?";
275
        }
276
 
277
        public String getDescricaoDoTipoStatus() {
278
                if (VerificadorUtil.naoEstaNulo(getStatusPedidoCompra())) {
279
                        StringBuilder statusPedido = new StringBuilder();
280
                        statusPedido.append(TipoStatusPedidoCompra.parse(getStatusPedidoCompra()).getDescricao());
281
                        if (VerificadorUtil.naoEstaNulo(getQuantidadeParaComprarPedidoCompra())) {
282
                                statusPedido.append(" [").append(getQuantidadeParaComprarPedidoCompra()).append("]");
283
                        }
284
                        return statusPedido.toString();
285
                }
286
                return null;
287
        }
288
 
289
        public Double getQuantidadeConsumoMedioDiario(Date dataInicial, Date dataFinal) {
290
                setQuantidadeDiasVendas(DataUtils.calcularDiferenceEmDiasEntreDuasDatas(dataFinal, dataInicial));
291
                if (VerificadorUtil.naoEstaNulo(getQuantidadeVendas())) {
292
                        return new Double(getQuantidadeVendas().floatValue()/getQuantidadeDiasVendas().floatValue());
293
                }
294
                return null;
295
        }
296
 
297
        public void atualizarTempoEstoque(Date dataInicial, Date dataFinal) {
298
                setConsumoMedioDiario(getQuantidadeConsumoMedioDiario(dataInicial, dataFinal));
299
                if (VerificadorUtil.naoEstaNulo(getConsumoMedioDiario())
300
                                && VerificadorUtil.naoEstaNulo(getQuantidadeEstoque())) {
301
                        if (getConsumoMedioDiario() > 0 || getQuantidadeEstoque() > 0) {
302
                                Integer tempoDeEstoque = new Integer((int) (getQuantidadeEstoque().floatValue()/getConsumoMedioDiario().floatValue()));
303
                                setTempoEstoque(tempoDeEstoque > 0 ? tempoDeEstoque : 0);
304
                        } else {
305
                                setTempoEstoque(0);
306
                        }
307
                } else {
308
                        setTempoEstoque(0);
309
                }
310
        }
311
 
312
        public Integer quantidadeParaComprar(Date dataInicial, Date dataFinal) {
313
                setConsumoMedioDiario(getQuantidadeConsumoMedioDiario(dataInicial, dataFinal));
314
                if (VerificadorUtil.naoEstaNulo(getConsumoMedioDiario())
315
                                && VerificadorUtil.naoEstaNulo(getQuantidadeEstoque())) {
316
                        if (getConsumoMedioDiario() == 0 || getQuantidadeEstoque() == 0) {
317
                                return 0;
318
                        }
319
                        Integer quantidadeParaComprar = new Integer((int) ((getConsumoMedioDiario().floatValue()*getQuantidadeDiasVendas()) - getQuantidadeEstoque()));
320
                        return quantidadeParaComprar > 0 ? quantidadeParaComprar : 0;
321
                }
322
                return 0;
323
//              return VerificadorUtil.naoEstaNulo(quantidadeParaComprar)? 
324
//                              (quantidadeParaComprar * quantidadeVendas) - quantidadeEstoque : quantidadeParaComprar(quantidadeVendas, quantidadeEstoque);
325
        }
326
 
327
        public String corDoTempoEstoque(Integer quantidadeEmDias) {
328
                if (getTempoEstoque() <= quantidadeEmDias/2) {
329
                        return "red";
330
                }
331
                if (getTempoEstoque() <= quantidadeEmDias) {
332
                        return "orange";
333
                }
334
                return "black";
335
        }
336
 
337
        public String getCorDoTempoEstoque() {
338
                if (getTempoEstoque() <= 10) {
339
                        return "red";
340
                }
341
                if (getTempoEstoque() <= 15) {
342
                        return "orange";
343
                }
344
                return "black";
345
        }
346
 
347
        public Double taxaAuditoria() {
348
                Double valor = new Double(0);
349
                if (VerificadorUtil.naoEstaNulo(getQuantidadeAuditorias())
350
                                && VerificadorUtil.naoEstaNulo(getQuantidadeVendas())) {
351
                        valor = new Double(getQuantidadeAuditorias()) / new Double(getQuantidadeVendas());
352
                }
353
                return valor;
354
        }
355
 
356
        public String getCorDaTaxaAuditoria() {
357
                if (taxaAuditoria() >= 0.15) {
358
                        return "red";
359
                }
360
                if (taxaAuditoria() >= 0.1) {
361
                        return "orange";
362
                }
363
                return "black";
364
        }
365
 
366
}