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
;
}
}