private Decimal CalculaDesconto(String PercDesconto, String Codigo, String ValorVenda, String ValorTabela, ProdutoResumido prm, Int16 CodPrcTab, Int16 CodPrzTab) { var cValorVenda = ValorVenda.Replace(".", ","); var cValorTabela = ValorTabela.Replace(".", ","); decimal cPerc = 0; if (String.IsNullOrEmpty(PercDesconto)) { cPerc = Convert.ToDecimal(cValorVenda) * 100 / Convert.ToDecimal(Math.Round(Convert.ToDecimal(cValorTabela), 2)); } else { cPerc = Convert.ToDecimal(PercDesconto); } var calculo_porcentagem = 100 - Convert.ToDecimal(Math.Round(cPerc)); String cDesconto = String.Format("{0:0.00}", calculo_porcentagem); //List<ProdutoResumido> prs = ClasseProdutos.Produto(u, Convert.ToInt32(Codigo), pr, CodPrcTab, CodPrzTab); List<ProdutoResumido> prs = ClasseProdutos.buscaProdutosPorCodigo(u, pr, Convert.ToInt32(Codigo), CodPrcTab, CodPrzTab); ProdutoResumido pr1 = prs.First(); if (Convert.ToDecimal(cDesconto) > 0) //SE DESCONTO FOR NEGATIVO, SIGNIFICA QUE FOI DADO ACRESCIMO { if (Convert.ToDecimal(cDesconto) > pr1.percentDesconto) { MensagemLimiteDesconto = " - Limite de desconto atingido. Preco alterado para valor de tabela."; prm.Preco = Convert.ToDecimal(cValorTabela); return 0; } else { //prm.Preco = Convert.ToDecimal(cValorVenda); return Convert.ToDecimal(cDesconto); } } else if (Convert.ToDecimal(cDesconto) < 0) { //SE DESCONTO FOR NEGATIVO, SIGNIFICA QUE FOI DADO ACRESCIMO if (pr.PercBloqueio != null) //Se for null, nao validar percentual de bloqueio e permitir venda acima { if (Math.Abs(Convert.ToDecimal(cDesconto)) > pr.PercBloqueio) //Verifica percentual permitido { MensagemLimitePreco = "Valor Ultrapassa percentual parametrizado para Preço acima da Tabela."; prm.Preco = Convert.ToDecimal(cValorTabela); return 0; } else { //prm.Preco = Convert.ToDecimal(cValorVenda); return Convert.ToDecimal(cDesconto); } } else { //prm.Preco = Convert.ToDecimal(cValorVenda); return Convert.ToDecimal(cDesconto); } } else { //prm.Preco = Convert.ToDecimal(cValorVenda); return Convert.ToDecimal(cDesconto); } }
public static List<ProdutoResumido> buscaProdutosPorCodigo(UsuarioResumido u, ParametroResumido pr, Int32 iCodServMerc, Int16 CodPrcTab, Int16 CodPrzTab) { ClasseBanco conn = new ClasseBanco(); StringBuilder strSql = new StringBuilder(); List<ProdutoResumido> retorno = new List<ProdutoResumido>(); ProdutoResumido p = new ProdutoResumido(); conn.AbrirBanco(); decimal dSaldo = 0; strSql.Length = 0; strSql.Append(" SELECT S.UNIDADE, S.M_UNIDADE, S.QTDCAIXA, S.CodServMerc AS Codigo, (replicate(0, 9 - len(CAST(S.CODSERVMERC AS VARCHAR)))+ CAST(S.CODSERVMERC AS VARCHAR) + ' - ' + rtrim(S.DesServMerc) + ' - ' + rtrim(upper(Isnull(CodSec_ServMerc,0))) + ' x ' + convert(varchar,Isnull(S.QtdEmb,0))) as Nome, S.QtdEmb, S.PercDesc as percentDesconto, ISNULL(T.PRECO, S.PRECOBASE) AS Preco, S.Saldo, S.CodSec_ServMerc, S.QTDRES, S.PESOBRUTO, S.Comissao, S.CaminhoImagem FROM "); strSql.Append(" SERVMERC S INNER JOIN TABPRECO T ON S.CODSERVMERC = T.CODSERVMERC "); strSql.Append(" LEFT JOIN REGRAS_PRODUTO R ON S.CODSERVMERC = R.CODPRO "); strSql.Append(" WHERE ISNULL(R.REGRA1,0)=0 AND "); strSql.Append(" S.CODSERVMERC = " + iCodServMerc + " AND "); strSql.Append(" CODEMP = " + u.CodEmp + " "); if (!CodPrcTab.Equals(0)) { strSql.Append(" AND CodTipPrc = " + CodPrcTab + " "); } if (!CodPrzTab.Equals(0)) { strSql.Append(" AND CodTipPrz = " + CodPrzTab + " "); } strSql.Append(" AND S.ATIVO = 'S' "); strSql.Append(" ORDER BY S.DESSERVMERC"); using (var r = conn.Query(strSql.ToString())) { if (r.Read()) { p.Codigo = Convert.ToInt32(r["Codigo"].ToString()); p.Nome = r["Nome"] + " - " + r["CodSec_ServMerc"];// +" x " + r["QtdEmb"]; p.percentDesconto = Convert.ToDecimal(r["percentDesconto"]); p.Preco = Convert.ToDecimal(r["Preco"].ToString()); ; dSaldo = (r["Saldo"] == null ? 0 : Convert.ToDecimal(r["Saldo"])) - (r["QtdRes"] == null ? 0 : Convert.ToDecimal(r["QtdRes"])); p.Saldo = (dSaldo == null ? 0 : dSaldo); p.M_UNIDADE = r["M_UNIDADE"].ToString(); p.Unidade = r["UNIDADE"].ToString(); p.QtdCaixa = Convert.ToDecimal(r["QTDCAIXA"].ToString()); p.Peso = Convert.ToDecimal(r["PESOBRUTO"].ToString()); p.Comissao = Convert.ToDecimal(r["COMISSAO"].ToString()); p.caminhoimagem = r["CaminhoImagem"].ToString(); //Verifica se produto está em promoção ou pra mocinha... VerificaSeTemPromocao(iCodServMerc, CodPrcTab); if (cPrecoPromocao != 0) { p.Preco = cPrecoPromocao; p.MensagemPromocao = sValidadePromocao; } else if (cPercPromocao != 0) { p.Preco = p.Preco - (p.Preco * cPercPromocao / 100); p.MensagemPromocao = sValidadePromocao; } retorno.Add(p); } else { throw new Exception("Não há mercadoria(s) para a tabela de preço selecionada ou o(s) produto(s) está(ão) inativo(s)."); } } return retorno; }