Comparação CSharp

23/03/2017

0

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
Vinicius Oliveira

Vinicius Oliveira

Responder

Post mais votado

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.

Aline Bianchini

Aline Bianchini
Responder

Mais Posts

23/03/2017

Vinicius Oliveira

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á.
Responder

23/03/2017

Aline Bianchini

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:

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.
Responder

23/03/2017

Vinicius Oliveira

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar