Subversion Repositories Integrator Subversion

Rev

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