Comparação CSharp
Prezados, bom dia!
Criei uma tabela no meu Banco (Mysql), promocoes, e cadastrei nela as promoções que serão aplicadas na venda de acordo com a quantidade que o cliente solicitar.
A logica é: na venda o item é informado e se o cliente quiser,
Ex: 1 un - ganhará 10%, 3 un - 15% etc...
As promoções serão cadastradas pela equipe de gerentes e 1 produto poderá ter N promoções.
Até ai tudo certo.
O grande problema está sendo na hora de fazer o desconto na venda, não consigo aplicar as regras para que o desconto bata com a quantidade digitada.
Ex:
Cliente quer 4 lapiseiras.
Na tabela promocoes a lapiseira tem as seguintes regras de desconto:
1 un - 4%
3 un - 10%
10 un - 13%
Não consigo que o cliente consiga 10% de desconto no valor total da compra.
Grato,
Vinicius
Criei uma tabela no meu Banco (Mysql), promocoes, e cadastrei nela as promoções que serão aplicadas na venda de acordo com a quantidade que o cliente solicitar.
A logica é: na venda o item é informado e se o cliente quiser,
Ex: 1 un - ganhará 10%, 3 un - 15% etc...
As promoções serão cadastradas pela equipe de gerentes e 1 produto poderá ter N promoções.
Até ai tudo certo.
O grande problema está sendo na hora de fazer o desconto na venda, não consigo aplicar as regras para que o desconto bata com a quantidade digitada.
Ex:
Cliente quer 4 lapiseiras.
Na tabela promocoes a lapiseira tem as seguintes regras de desconto:
1 un - 4%
3 un - 10%
10 un - 13%
Não consigo que o cliente consiga 10% de desconto no valor total da compra.
Grato,
Vinicius
Vinicius Oliveira
Curtidas 0
Melhor post
Aline Bianchini
23/03/2017
Oi Vinicius,
Como vc está fazendo a comparação para obter os descontos? Tipo você está utilizando ">=", ou coisa assim? Explique um pouco mais para tentarmos ajudar.
Pelo que você descreveu, na sua tabela não existe um valor final para a faixa de desconto, só o inicial certo? Sempre terá 3 faixas ou o cliente pode incluir quantas quiser?
Se você não consegue a quantidade de faixas de desconto, talvez seja melhor obter as possíveis faixas de acordo com o produto, e depois fazer um laço e ir testando as condições.
Como vc está fazendo a comparação para obter os descontos? Tipo você está utilizando ">=", ou coisa assim? Explique um pouco mais para tentarmos ajudar.
Pelo que você descreveu, na sua tabela não existe um valor final para a faixa de desconto, só o inicial certo? Sempre terá 3 faixas ou o cliente pode incluir quantas quiser?
Se você não consegue a quantidade de faixas de desconto, talvez seja melhor obter as possíveis faixas de acordo com o produto, e depois fazer um laço e ir testando as condições.
GOSTEI 1
Mais Respostas
Vinicius Oliveira
23/03/2017
Aline, obrigado por responder.
O Gerente pode cadastrar N descontos para cada produto, ele cadastra apenas valores iniciais, como se funcionasse como uma regra de maior igual.
Estou obtendo os dados do banco apenas na hora da venda.
Informo na venda o codbarras e logo depois a quantidade. Estou usando um select para buscar na tabela promocoes os descontos que aquele item possui.
No exemplo da lapiseira na pergunta:
O select retorna as 3 faixas de desconto. Como vou aplicar o desconto de acordo com a quantidade que o cliente quer?
var qtdeDigitada = txtQtde.Text; //Quantidade que o cliente quer
caminhoBD bd = new caminhoBD();
string _conexaoMySQL = bd.conexaoMySql();
String sql = "select quantidade, vlrUnit, desconto from tbpromocao where idproduto ='" + this.idProduto + "';"; //retorna todas as regras de desconto para aquele produto
MySqlConnection con = new MySqlConnection(_conexaoMySQL);
MySqlCommand cmd = new MySqlCommand(sql, con);
cmd.CommandType = CommandType.Text;
MySqlDataReader Reader;
con.Open();
Reader = cmd.ExecuteReader();
ArrayList quantidade = new ArrayList();
int length;
while (Reader.Read())
{
var values = Convert.ToInt32(Reader["quantidade"]); // armazena em values a quantidade aplicada aos descontos
quantidade.Add(values.ToString()); // Adiciona o value em ArrayList
}
length = Convert.ToInt32(quantidade.Count.ToString()); //Conta o numero de descontos que aquele produto possui
con.Close();
string[] valor;
valor = new string[length];
int i = 0;
foreach (var item in quantidade)
{
valor[i] = item.ToString() ; //adiciona em um vetor as quantidades de desconto.
i++;
}
Agora preciso comparar os valores salvos no vetor.
Alguma coisa assim:
if (qtdeDigitada >= valor[0] && qtdeDigitada < valor[1])
//....
else if( qtdeDigitada >=valor[1] && qtdeDigitada < valor[2])
//...
etc...
Mas eu nao sei quantas posições o vetor assumirá.
O Gerente pode cadastrar N descontos para cada produto, ele cadastra apenas valores iniciais, como se funcionasse como uma regra de maior igual.
Estou obtendo os dados do banco apenas na hora da venda.
Informo na venda o codbarras e logo depois a quantidade. Estou usando um select para buscar na tabela promocoes os descontos que aquele item possui.
No exemplo da lapiseira na pergunta:
O select retorna as 3 faixas de desconto. Como vou aplicar o desconto de acordo com a quantidade que o cliente quer?
var qtdeDigitada = txtQtde.Text; //Quantidade que o cliente quer
caminhoBD bd = new caminhoBD();
string _conexaoMySQL = bd.conexaoMySql();
String sql = "select quantidade, vlrUnit, desconto from tbpromocao where idproduto ='" + this.idProduto + "';"; //retorna todas as regras de desconto para aquele produto
MySqlConnection con = new MySqlConnection(_conexaoMySQL);
MySqlCommand cmd = new MySqlCommand(sql, con);
cmd.CommandType = CommandType.Text;
MySqlDataReader Reader;
con.Open();
Reader = cmd.ExecuteReader();
ArrayList quantidade = new ArrayList();
int length;
while (Reader.Read())
{
var values = Convert.ToInt32(Reader["quantidade"]); // armazena em values a quantidade aplicada aos descontos
quantidade.Add(values.ToString()); // Adiciona o value em ArrayList
}
length = Convert.ToInt32(quantidade.Count.ToString()); //Conta o numero de descontos que aquele produto possui
con.Close();
string[] valor;
valor = new string[length];
int i = 0;
foreach (var item in quantidade)
{
valor[i] = item.ToString() ; //adiciona em um vetor as quantidades de desconto.
i++;
}
Agora preciso comparar os valores salvos no vetor.
Alguma coisa assim:
if (qtdeDigitada >= valor[0] && qtdeDigitada < valor[1])
//....
else if( qtdeDigitada >=valor[1] && qtdeDigitada < valor[2])
//...
etc...
Mas eu nao sei quantas posições o vetor assumirá.
GOSTEI 0
Aline Bianchini
23/03/2017
Vinicius,
Nesse caso você teria que fazer um novo laço e ler o vetor novamente, e fazer suas condições dentro dele. Algo tipo:
Vinicius, só algumas considerações...
Porque valores é um array de string?
Você não pode criar uma classe para retornar os valores do banco? Assim você poderia ter uma propriedade do tipo lista que armazenasse as faixas e os descontos correspondentes e procurar por ela usando inclusive linq, e ficaria muito mais bonito.
Lembre-se de ordenar o retorno do banco pelo valor do desconto crescente.
Nesse caso você teria que fazer um novo laço e ler o vetor novamente, e fazer suas condições dentro dele. Algo tipo:
foreach (string v in valor) { if (qtdeDigitada >= Convert.ToInt32(v)) { desconto = v; } };
Vinicius, só algumas considerações...
Porque valores é um array de string?
Você não pode criar uma classe para retornar os valores do banco? Assim você poderia ter uma propriedade do tipo lista que armazenasse as faixas e os descontos correspondentes e procurar por ela usando inclusive linq, e ficaria muito mais bonito.
Lembre-se de ordenar o retorno do banco pelo valor do desconto crescente.
GOSTEI 0
Vinicius Oliveira
23/03/2017
Olá Amanda, obrigado pela atenção!
Consegui resolver dentro do laço while do DateReader.
Agora o código está se comportando corretamente.
Grato,
Vinicius Oliveira
Consegui resolver dentro do laço while do DateReader.
Agora o código está se comportando corretamente.
Grato,
Vinicius Oliveira
GOSTEI 1