package br.com.ec.domain.dto;
import java.util.Date;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.tipos.TipoStatusPedidoCompra;
public class AlertasComprasProdutoDTO
{
private ProdutoDTO produto
;
private Long quantidadeVendas
;
private Integer quantidadeDiasVendas
;
private Long quantidadeEstoque
;
private String statusPedidoCompra
;
private Integer quantidadeParaComprarPedidoCompra
;
private Double consumoMedioDiario
;
private Integer tempoEstoque
;
private Date dataUltimaVenda
;
public AlertasComprasProdutoDTO
() {}
public AlertasComprasProdutoDTO
(ProdutoDTO produto,
Long quantidadeVendas,
Integer quantidadeDiasVendas,
Date dataUltimaVenda,
Long quantidadeEstoque,
String statusPedidoCompra,
Integer quantidadeParaComprarPedidoCompra
) {
this.
produto = produto
;
this.
quantidadeVendas = quantidadeVendas
;
this.
quantidadeDiasVendas = quantidadeDiasVendas
;
this.
dataUltimaVenda = dataUltimaVenda
;
this.
quantidadeEstoque = quantidadeEstoque
;
this.
statusPedidoCompra = statusPedidoCompra
;
this.
quantidadeParaComprarPedidoCompra = quantidadeParaComprarPedidoCompra
;
}
public ProdutoDTO getProduto
() {
return produto
;
}
public void setProduto
(ProdutoDTO produto
) {
this.
produto = produto
;
}
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 Integer quantidadeParaComprar
(Integer quantidadeParaComprar,
Integer quantidadeVendas,
Integer quantidadeEstoque
) {
return (quantidadeParaComprar
* quantidadeVendas
) - quantidadeEstoque
;
}
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";
}
}