Subversion Repositories Integrator Subversion

Rev

Rev 582 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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 RankingProdutoDTO implements Comparable<RankingProdutoDTO> {

        private Produto 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 RankingProdutoDTO() {}
       
        public RankingProdutoDTO(Produto produto, Long quantidadeAuditorias, Long quantidadeVendas, Long quantidadeEstoque) {
                this.produto = produto;
                this.quantidadeAuditorias = quantidadeAuditorias;
                this.quantidadeVendas = quantidadeVendas;
                this.quantidadeEstoque = quantidadeEstoque;
        }
       
        public RankingProdutoDTO(Produto 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 RankingProdutoDTO(Produto 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 RankingProdutoDTO(Produto 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 RankingProdutoDTO(Produto 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 Produto getProduto() {
                return produto;
        }
        public void setProduto(Produto produto) {
                this.produto = produto;
        }
       
        public Venda getVenda() {
                return venda;
        }
        public void setVenda(Venda venda) {
                this.venda = venda;
        }
       
        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(RankingProdutoDTO 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())) {
                        if (getStatusPedidoCompra().equals(TipoStatusPedidoCompra.NAO_COMPRAR.getValor())) {
                                return "pink-btn";
                        }
                        if (getStatusPedidoCompra().equals(TipoStatusPedidoCompra.PENDENTE.getValor())) {
                                return "orange-btn";
                        }
                        if (getStatusPedidoCompra().equals(TipoStatusPedidoCompra.SOLICITADO.getValor())) {
                                return "blue-btn";
                        }
                        return "green-btn";
                }
                return "black-btn";
        }
       
        public String getCorTipoStatus() {
                if (VerificadorUtil.naoEstaNulo(getStatusPedidoCompra())) {
                        return TipoStatusPedidoCompra.parse(getStatusPedidoCompra()).getStyleBotao();
                }
                return "black-btn";
        }
       
        public String getCorTipoStatusPedidoCompra() {
                if (VerificadorUtil.naoEstaNulo(getStatusPedidoCompra())) {
                        return TipoStatusPedidoCompra.parse(getStatusPedidoCompra()).getCor();
                }
                return "black";
        }
       
        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";
        }
       
}