package br.com.ec.domain.dto;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.Produto;
import br.com.ec.domain.model.Venda;
import br.com.ec.domain.model.tipos.TipoStatusPedidoCompra;
public class RankingProdutoDTONovo
implements Comparable<RankingProdutoDTONovo
> {
private ProdutoDTO produto
;
// private Venda venda;
private Double valorTotalVendido
;
private Double valorTotalComprado
;
private Double valorTotalDescontos
;
private Long quantidadeVendas
;
private Integer quantidadeDiasVendas
;
private Long quantidadeEstoque
;
private Long quantidadeAuditorias
;
private String statusPedidoCompra
;
private Integer quantidadeParaComprarPedidoCompra
;
private Double consumoMedioDiario
;
private Integer tempoEstoque
;
private Date dataUltimaVenda
;
private List<RankingProdutoPorLojaDTO
> rankingsPorLoja =
new ArrayList<RankingProdutoPorLojaDTO
>();
public RankingProdutoDTONovo
() {}
public RankingProdutoDTONovo
(ProdutoDTO produto,
Long quantidadeAuditorias,
Long quantidadeVendas,
Long quantidadeEstoque
) {
this.
produto = produto
;
this.
quantidadeAuditorias = quantidadeAuditorias
;
this.
quantidadeVendas = quantidadeVendas
;
this.
quantidadeEstoque = quantidadeEstoque
;
}
public RankingProdutoDTONovo
(ProdutoDTO produto,
Double valorTotalVendido,
Double valorTotalComprado,
Double valorTotalDescontos,
Long quantidadeVendas,
Integer quantidadeDiasVendas,
Date dataUltimaVenda,
Long quantidadeEstoque,
String statusPedidoCompra,
Integer quantidadeParaComprarPedidoCompra
) {
this.
produto = produto
;
this.
valorTotalVendido = valorTotalVendido
;
this.
valorTotalComprado = valorTotalComprado
;
this.
valorTotalDescontos = valorTotalDescontos
;
this.
quantidadeVendas = quantidadeVendas
;
this.
quantidadeDiasVendas = quantidadeDiasVendas
;
this.
dataUltimaVenda = dataUltimaVenda
;
this.
quantidadeEstoque = quantidadeEstoque
;
this.
statusPedidoCompra = statusPedidoCompra
;
this.
quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra
;
}
public RankingProdutoDTONovo
(ProdutoDTO produto,
Double valorTotalVendido,
Double valorTotalComprado,
Double valorTotalDescontos,
Long quantidadeVendas,
Date dataUltimaVenda,
Long quantidadeEstoque,
String statusPedidoCompra,
Integer quantidadeParaComprarPedidoCompra
) {
this.
produto = produto
;
this.
valorTotalVendido = valorTotalVendido
;
this.
valorTotalComprado = valorTotalComprado
;
this.
valorTotalDescontos = valorTotalDescontos
;
this.
quantidadeVendas = quantidadeVendas
;
this.
dataUltimaVenda = dataUltimaVenda
;
this.
quantidadeEstoque = quantidadeEstoque
;
this.
statusPedidoCompra = statusPedidoCompra
;
this.
quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra
;
}
public RankingProdutoDTONovo
(ProdutoDTO produto,
Double valorTotalVendido,
Double valorTotalComprado,
Double valorTotalDescontos,
Long quantidadeVendas
) {
this.
produto = produto
;
this.
valorTotalVendido = valorTotalVendido
;
this.
valorTotalComprado = valorTotalComprado
;
this.
valorTotalDescontos = valorTotalDescontos
;
this.
quantidadeVendas = quantidadeVendas
;
}
/*
public RankingProdutoDTONovo(ProdutoDTO produto, Venda venda, Double valorTotalVendido, Double valorTotalDescontos,
Long quantidadeEstoque, String statusPedidoCompra, Integer quantidadeParaComprarPedidoCompra) {
this.produto = produto;
this.venda = venda;
this.valorTotalVendido = valorTotalVendido;
this.valorTotalDescontos = valorTotalDescontos;
this.quantidadeEstoque = quantidadeEstoque;
this.statusPedidoCompra = statusPedidoCompra;
this.quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra;
}
*/
public ProdutoDTO getProduto
() {
return produto
;
}
public void setProduto
(ProdutoDTO produto
) {
this.
produto = produto
;
}
public Double getValorTotalVendido
() {
return valorTotalVendido
;
}
public void setValorTotalVendido
(Double valorTotalVendido
) {
this.
valorTotalVendido = valorTotalVendido
;
}
public Double getValorTotalComprado
() {
return valorTotalComprado
;
}
public void setValorTotalComprado
(Double valorTotalComprado
) {
this.
valorTotalComprado = valorTotalComprado
;
}
public Double getValorTotalDescontos
() {
return valorTotalDescontos
;
}
public void setValorTotalDescontos
(Double valorTotalDescontos
) {
this.
valorTotalDescontos = valorTotalDescontos
;
}
public Long getQuantidadeAuditorias
() {
return quantidadeAuditorias
;
}
public void setQuantidadeAuditorias
(Long quantidadeAuditorias
) {
this.
quantidadeAuditorias = quantidadeAuditorias
;
}
public Long getQuantidadeVendas
() {
return quantidadeVendas
;
}
public void setQuantidadeVendas
(Long quantidadeVendas
) {
this.
quantidadeVendas = quantidadeVendas
;
}
public Integer getQuantidadeDiasVendas
() {
return quantidadeDiasVendas
;
}
public void setQuantidadeDiasVendas
(Integer quantidadeDiasVendas
) {
this.
quantidadeDiasVendas = quantidadeDiasVendas
;
}
public Long getQuantidadeEstoque
() {
return quantidadeEstoque
;
}
public void setQuantidadeEstoque
(Long quantidadeEstoque
) {
this.
quantidadeEstoque = quantidadeEstoque
;
}
public String getStatusPedidoCompra
() {
return statusPedidoCompra
;
}
public void setStatusPedidoCompra
(String statusPedidoCompra
) {
this.
statusPedidoCompra = statusPedidoCompra
;
}
public Integer getQuantidadeParaComprarPedidoCompra
() {
return quantidadeParaComprarPedidoCompra
;
}
public void setQuantidadeParaComprarPedidoCompra
(Integer quantidadeParaComprarPedidoCompra
) {
this.
quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra
;
}
public Double getConsumoMedioDiario
() {
return consumoMedioDiario
;
}
public void setConsumoMedioDiario
(Double consumoMedioDiario
) {
this.
consumoMedioDiario = consumoMedioDiario
;
}
public Integer getTempoEstoque
() {
return tempoEstoque
;
}
public void setTempoEstoque
(Integer tempoEstoque
) {
this.
tempoEstoque = tempoEstoque
;
}
public Date getDataUltimaVenda
() {
return dataUltimaVenda
;
}
public void setDataUltimaVenda
(Date dataUltimaVenda
) {
this.
dataUltimaVenda = dataUltimaVenda
;
}
public Integer getQuantidadeDiasUltimaVenda
() {
if (VerificadorUtil.
naoEstaNulo(getDataUltimaVenda
())) {
return DataUtils.
calcularDiferenceEmDiasEntreDuasDatas(DataUtils.
getDataAtual(), getDataUltimaVenda
());
}
return null;
}
public List<RankingProdutoPorLojaDTO
> getRankingsPorLoja
() {
return rankingsPorLoja
;
}
public void setRankingsPorLoja
(List<RankingProdutoPorLojaDTO
> rankingsPorLoja
) {
this.
rankingsPorLoja = rankingsPorLoja
;
}
public Integer quantidadeParaComprar
(Integer quantidadeParaComprar,
Integer quantidadeVendas,
Integer quantidadeEstoque
) {
return (quantidadeParaComprar
* quantidadeVendas
) - quantidadeEstoque
;
}
public Long quantidadeEstoque
(Long sequencialLoja
) {
for (RankingProdutoPorLojaDTO rankingProdutoPorLojaDTO :
this.
getRankingsPorLoja()) {
if (rankingProdutoPorLojaDTO.
getLoja().
getSequencial().
equals(sequencialLoja
)) {
return rankingProdutoPorLojaDTO.
getQuantidadeEstoque();
}
}
return null;
}
public Long quantidadeParaTransferir
(Long sequencialLoja
) {
for (RankingProdutoPorLojaDTO rankingProdutoPorLojaDTO :
this.
getRankingsPorLoja()) {
if (rankingProdutoPorLojaDTO.
getLoja().
getSequencial().
equals(sequencialLoja
)) {
return rankingProdutoPorLojaDTO.
quantidadeParaTransferir();
}
}
return null;
}
public Long quantidadeParaTransferirSugerida
(Long sequencialLoja
) {
for (RankingProdutoPorLojaDTO rankingProdutoPorLojaDTO :
this.
getRankingsPorLoja()) {
if (rankingProdutoPorLojaDTO.
getLoja().
getSequencial().
equals(sequencialLoja
)) {
return rankingProdutoPorLojaDTO.
getQuantidadeSugeridaParaTransferir();
}
}
return null;
}
@
Override
public int compareTo
(RankingProdutoDTONovo rankingProdutoDTO
) {
return rankingProdutoDTO.
getValorTotalVendido().
compareTo(this.
valorTotalVendido);
}
public Double getPercentualLucro
() {
if (VerificadorUtil.
naoEstaNulo(getValorTotalVendido
()) &&
VerificadorUtil.
naoEstaNulo(getValorTotalComprado
())) {
return (((getValorTotalVendido
() * 100)/getValorTotalComprado
())-
100)/
100;
}
return 0.0;
}
public String getCorTipoStatusSimplificado
() {
if (VerificadorUtil.
naoEstaNulo(getStatusPedidoCompra
())) {
return TipoStatusPedidoCompra.
parse(getStatusPedidoCompra
()).
getStyleBotao();
}
return "black-btn";
}
public String getCorTipoStatus
() {
if (VerificadorUtil.
naoEstaNulo(getStatusPedidoCompra
())) {
return TipoStatusPedidoCompra.
parse(getStatusPedidoCompra
()).
getStyleBotao();
}
return "black-btn";
}
public String getQuantidadeParaComprarDoPedido
() {
if (VerificadorUtil.
naoEstaNulo(getStatusPedidoCompra
())) {
if (VerificadorUtil.
naoEstaNulo(getQuantidadeParaComprarPedidoCompra
())) {
StringBuilder statusPedido =
new StringBuilder();
statusPedido.
append(getQuantidadeParaComprarPedidoCompra
());
return statusPedido.
toString();
}
}
return "?";
}
public String getDescricaoDoTipoStatus
() {
if (VerificadorUtil.
naoEstaNulo(getStatusPedidoCompra
())) {
StringBuilder statusPedido =
new StringBuilder();
statusPedido.
append(TipoStatusPedidoCompra.
parse(getStatusPedidoCompra
()).
getDescricao());
if (VerificadorUtil.
naoEstaNulo(getQuantidadeParaComprarPedidoCompra
())) {
statusPedido.
append(" [").
append(getQuantidadeParaComprarPedidoCompra
()).
append("]");
}
return statusPedido.
toString();
}
return null;
}
public Double getQuantidadeConsumoMedioDiario
(Date dataInicial,
Date dataFinal
) {
setQuantidadeDiasVendas
(DataUtils.
calcularDiferenceEmDiasEntreDuasDatas(dataFinal, dataInicial
));
if (VerificadorUtil.
naoEstaNulo(getQuantidadeVendas
())) {
return new Double(getQuantidadeVendas
().
floatValue()/getQuantidadeDiasVendas
().
floatValue());
}
return null;
}
public void atualizarTempoEstoque
(Date dataInicial,
Date dataFinal
) {
setConsumoMedioDiario
(getQuantidadeConsumoMedioDiario
(dataInicial, dataFinal
));
if (VerificadorUtil.
naoEstaNulo(getConsumoMedioDiario
())
&& VerificadorUtil.
naoEstaNulo(getQuantidadeEstoque
())) {
if (getConsumoMedioDiario
() > 0 || getQuantidadeEstoque
() > 0) {
Integer tempoDeEstoque =
new Integer((int) (getQuantidadeEstoque
().
floatValue()/getConsumoMedioDiario
().
floatValue()));
setTempoEstoque
(tempoDeEstoque
> 0 ? tempoDeEstoque :
0);
} else {
setTempoEstoque
(0);
}
} else {
setTempoEstoque
(0);
}
}
public Integer quantidadeParaComprar
(Date dataInicial,
Date dataFinal
) {
setConsumoMedioDiario
(getQuantidadeConsumoMedioDiario
(dataInicial, dataFinal
));
if (VerificadorUtil.
naoEstaNulo(getConsumoMedioDiario
())
&& VerificadorUtil.
naoEstaNulo(getQuantidadeEstoque
())) {
if (getConsumoMedioDiario
() ==
0 || getQuantidadeEstoque
() ==
0) {
return 0;
}
Integer quantidadeParaComprar =
new Integer((int) ((getConsumoMedioDiario
().
floatValue()*getQuantidadeDiasVendas
()) - getQuantidadeEstoque
()));
return quantidadeParaComprar
> 0 ? quantidadeParaComprar :
0;
}
return 0;
// return VerificadorUtil.naoEstaNulo(quantidadeParaComprar)?
// (quantidadeParaComprar * quantidadeVendas) - quantidadeEstoque : quantidadeParaComprar(quantidadeVendas, quantidadeEstoque);
}
public String corDoTempoEstoque
(Integer quantidadeEmDias
) {
if (getTempoEstoque
() <= quantidadeEmDias/
2) {
return "red";
}
if (getTempoEstoque
() <= quantidadeEmDias
) {
return "orange";
}
return "black";
}
public String getCorDoTempoEstoque
() {
if (getTempoEstoque
() <=
10) {
return "red";
}
if (getTempoEstoque
() <=
15) {
return "orange";
}
return "black";
}
public Double taxaAuditoria
() {
Double valor =
new Double(0);
if (VerificadorUtil.
naoEstaNulo(getQuantidadeAuditorias
())
&& VerificadorUtil.
naoEstaNulo(getQuantidadeVendas
())) {
valor =
new Double(getQuantidadeAuditorias
()) /
new Double(getQuantidadeVendas
());
}
return valor
;
}
public String getCorDaTaxaAuditoria
() {
if (taxaAuditoria
() >=
0.15) {
return "red";
}
if (taxaAuditoria
() >=
0.1) {
return "orange";
}
return "black";
}
}