Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.dto;

import javax.persistence.Transient;

import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.shared.ConstantesSEC;

public class ProdutoCustosDTO {

        private Double valorVarejo;
        private Double valorSimulacao;
        private Double valorCompra;
        private Double custoTributosCompras;
        private String descricaoFormaPagamento;
        private Double aliquotaSimples = new Double(ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_SIMPLES_NACIONAL_9_5);
        private Double aliquotaMediaComissoes = new Double(ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_COMISSOES_2);
        private Double aliquotaFormaPagamento = new Double(0.0);
        private Double aliquotaMargemMinima = new Double(15.0);
       
        public ProdutoCustosDTO() {}
       
        public Double getValorVarejo() {
                return valorVarejo;
        }
        public void setValorVarejo(Double valorVarejo) {
                this.valorVarejo = valorVarejo;
        }
       
        public Double getValorSimulacao() {
                return valorSimulacao;
        }
        public void setValorSimulacao(Double valorSimulacao) {
                this.valorSimulacao = valorSimulacao;
        }
       
        public Double getValorCompra() {
                return valorCompra;
        }
        public void setValorCompra(Double valorCompra) {
                this.valorCompra = valorCompra;
        }
       
        public Double getCustoTributosCompras() {
                return custoTributosCompras;
        }
        public void setCustoTributosCompras(Double custoTributosCompras) {
                this.custoTributosCompras = custoTributosCompras;
        }
       
        public String getDescricaoFormaPagamento() {
                return descricaoFormaPagamento;
        }
        public void setDescricaoFormaPagamento(String descricaoFormaPagamento) {
                this.descricaoFormaPagamento = descricaoFormaPagamento;
        }
       
        public Double getAliquotaSimples() {
                return aliquotaSimples;
        }
        public void setAliquotaSimples(Double aliquotaSimples) {
                this.aliquotaSimples = aliquotaSimples;
        }
       
        public Double getAliquotaMediaComissoes() {
                return aliquotaMediaComissoes;
        }
        public void setAliquotaMediaComissoes(Double aliquotaMediaComissoes) {
                this.aliquotaMediaComissoes = aliquotaMediaComissoes;
        }
       
        public Double getAliquotaFormaPagamento() {
                return aliquotaFormaPagamento;
        }
        public void setAliquotaFormaPagamento(Double aliquotaFormaPagamento) {
                this.aliquotaFormaPagamento = aliquotaFormaPagamento;
        }
       
        public Double getAliquotaMargemMinima() {
                return aliquotaMargemMinima;
        }
        public void setAliquotaMargemMinima(Double aliquotaMargemMinima) {
                this.aliquotaMargemMinima = aliquotaMargemMinima;
        }
       
        @Transient
        public Double calculoOperacao() {
                Double aliquota = getAliquotaSimples() + getAliquotaMediaComissoes() + getAliquotaFormaPagamento();
                return VerificadorUtil.naoEstaNulo(getValorSimulacao())? getCustoTributosCompras() + (getValorSimulacao()*aliquota/100) : 0.0;
        }
       
        @Transient
        public String valorCalculoOperacao() {
                return StringUtil.formatarValor(calculoOperacao());
        }
       
        @Transient
        public Double calculoValorAposCustos() {
                return VerificadorUtil.naoEstaNulo(getValorSimulacao())? getValorSimulacao() - calculoOperacao() : 0.0;
        }
       
        @Transient
        public Double calculoMargemAposCustos() {
                return VerificadorUtil.naoEstaNulo(getValorSimulacao())? calculoValorAposCustos() * 100 / calculoOperacao() : 0.0;
        }
       
        @Transient
        public String retornarLucroBrutoFormatado() {
                return StringUtil.formatarPercentual(calculoValorAposCustos());
        }
       
        @Transient
        public String retornarMargemBrutaFormatada() {
                try {
                        return StringUtil.formatarValorComDigitos(calculoMargemAposCustos().toString(), 2);
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return "";
        }
       
        @Transient
        public String retornarCorMargem() {
                Double margemBruta = calculoMargemAposCustos();
                if (margemBruta > 0.50) return "green";
                if (margemBruta > 0.34) return "orange";
                if (margemBruta < 0.35) return "red";
                return "black";
        }
       
        @Transient
        public String retornarCorMargemLucro() {
                Double margemBruta = calculoMargemAposCustos();
                if (margemBruta > 29.99) return "green";
                if (margemBruta > 14.99) return "orange";
                if (margemBruta < 15.0) return "red";
                return "black";
        }
       
        @Transient
        public Double calculoPrecoMinimo() {
                Double valorVarejoSimulacao = getValorSimulacao();
                setValorSimulacao(getValorCompra());
                Double valorMinimo = this.calculoOperacao();
                Double margem = 0.0;
                valorMinimo = valorMinimo + (valorMinimo / 100);
                if (valorMinimo > 0.0) {
                        while (margem < getAliquotaMargemMinima()) {
                                valorMinimo = valorMinimo + (valorMinimo / 100);
                                setValorSimulacao(valorMinimo);
                                margem = calculoMargemAposCustos();
                        }
                }
                setValorSimulacao(valorVarejoSimulacao);
                return valorMinimo;
        }
       
        @Transient
        public Double descontoPermitido() {
                Double valorComDesconto = new Double(0.0);
                Double descontoPermitido = 0.0;
                if (VerificadorUtil.naoEstaNulo(getValorVarejo())) {
                        if (getValorVarejo() < 50.0) {
                                descontoPermitido = 5.0;
                        } else {
                                descontoPermitido = (getValorVarejo()*10/100);
                        }
                }
                valorComDesconto = getValorVarejo() - descontoPermitido;
                Double precoMinimo = calculoPrecoMinimo();
                if (valorComDesconto < precoMinimo) {
                        valorComDesconto = precoMinimo;
                }
                if (getValorVarejo() < valorComDesconto) {
                        return getValorVarejo();
                }
                return valorComDesconto;
        }
       
}