// Irá depender da quantitade, da data e da dataPromocao, neste caso o preço é variavel dependente private void precoPuroCalcularEGuardar() { //Não tem tabela de preço if (Pedido.IdTabelaPreco == 0) { PrecoTipo = EnumPreco.ProdutoPrecoBase; //Checa promocao if (DtPromocaoFinal.Iniciada && DtPromocaoInicio.Iniciada && precoPromocao.Iniciada) { // Tá na promoção if (DateTime.Today >= DtPromocaoInicio.V && DateTime.Today <= DtPromocaoFinal.V) { PrecoTipo = EnumPreco.ProdutoPromocao; precoUtilizado = precoPromocao.V; } else//Nao está na promoção { PrecoTipo = EnumPreco.ProdutoPrecoBase; precoUtilizado = precoBase.V; } } else//Não está na promoção { PrecoTipo = EnumPreco.ProdutoPrecoBase; precoUtilizado = precoBase.V; } } else // Tem tabela de preço { if (produtoNaoConstaNaTabelaPrecoQuandoUsandoTabelaPreco) { precoUtilizado = precoBase.V; return; } try { bool achouFaixaDeQuantidade = false; for (int i = 3; i >= 0; --i) { if (ArQuantidadeMinima[i].Iniciada && ArPreco[i].Iniciada) if (quantidadeRequerida >= ArQuantidadeMinima[i].V && ArQuantidadeMinima[i].V > 0) { switch (i){ case 0: PrecoTipo = EnumPreco.TabelaPrecoQtd1; break; case 1: PrecoTipo = EnumPreco.TabelaPrecoQtd2; break; case 2: PrecoTipo = EnumPreco.TabelaPrecoQtd3; break; case 3: PrecoTipo = EnumPreco.TabelaPrecoQtd4; break; } precoUtilizado = ArPreco[i].V; achouFaixaDeQuantidade = true; break; } } if (achouFaixaDeQuantidade == false) { PrecoTipo = EnumPreco.ProdutoPrecoBase; precoUtilizado = precoBase.V; } } catch { //Pega o preço base ou promoção caso não encontre //Checa promoção if (DtPromocaoFinal.Iniciada && DtPromocaoInicio.Iniciada && precoPromocao.Iniciada) { // Tá na promoção if (DateTime.Today >= DtPromocaoInicio.V && DateTime.Today <= DtPromocaoFinal.V) { PrecoTipo = EnumPreco.ProdutoPromocao; precoUtilizado = precoPromocao.V; } else//Não está na promoção { PrecoTipo = EnumPreco.ProdutoPrecoBase; precoUtilizado = precoBase.V; } } else//Nao está na promoção { precoUtilizado = precoBase.V; } precoPuro = precoUtilizado; } } precoPuro = precoUtilizado; }
public Produto(Pedido pd) { PrecoTipo = EnumPreco.Indefinido; Pedido = pd; }
public void CarregarProduto(int id) { Id = id; //Tem que colocar transação para não dar falta de memória SqlCeTransaction bdTrans = null; bdTrans = D.Bd.Con.BeginTransaction(); string sqlCarga = @"Select * from produto where id_produto=" + Id; SqlCeDataReader rdCarga = D.Bd.Linha(sqlCarga, bdTrans); Nome = Convert.ToString(rdCarga["nome"]); Referencia = Convert.ToString(rdCarga["referencia"]); UnidadeVenda = Convert.ToString(rdCarga["id_unidade_venda"]); IdGrade= Bd.IntN(rdCarga, "id_grade"); VendaFracionada = Bd.BoolN(rdCarga,"venda_fracionada"); precoBase = Bd.DoubleN(rdCarga,"preco_venda"); precoPromocao = Bd.DoubleN(rdCarga,"preco_promocao"); DtPromocaoFinal = Bd.DateTimeN(rdCarga,"promocao_data_final"); DtPromocaoInicio = Bd.DateTimeN(rdCarga, "promocao_data_inicio"); estoque = Bd.IntN(rdCarga, "estoque"); unidadeFator = Convert.ToDouble(rdCarga["unidade_fator"]); rdCarga.Close(); bdTrans.Commit(); string qry; try { bdTrans = null; bdTrans = D.Bd.Con.BeginTransaction(); if (Pedido.IdTabelaPreco != 0) { qry = @"select count(*) from item_tabela_preco where id_tabela_preco=" + Pedido.IdTabelaPreco + " and id_produto=" + Id; if (D.Bd.I(qry, bdTrans) > 0) { sqlCarga = @"Select * from item_tabela_preco where id_tabela_preco=" + Pedido.IdTabelaPreco + " and id_produto=" + Id; rdCarga = D.Bd.Linha(sqlCarga, bdTrans); DescontoTipoBd = Convert.ToChar(rdCarga["tipo_valor"]); for (int i = 1; i <= 4; ++i) { ArQuantidadeMinima[i - 1] = Bd.IntN(rdCarga, "qtd_minima" + i); ArPreco[i - 1] = Bd.DoubleN(rdCarga, "valor" + i); } DescontoPercMaximo = Bd.DoubleN(rdCarga, "desconto_maximo"); AcrescimoPercMaximo = Bd.DoubleN(rdCarga, "acrescimo_maximo"); } else //Não encontrou o produto na tabela de preço então pega o ajuste geral da tabela de preço { rdCarga = D.Bd.Linha(@" SELECT AJUSTE_PERCENTUAL, TIPO FROM TABELA_PRECO WHERE ID_TABELA_PRECO=" + Pedido.IdTabelaPreco, bdTrans); //Acrescentar valor no preço double ajuste; if (rdCarga[0] is DBNull) ajuste = 0; else ajuste = Convert.ToDouble(rdCarga[0]); if (rdCarga[1].ToString().ToUpper() == "A") // Acrescimo no preço precoBase.V = precoBase.V + precoBase.V * ajuste / 100.00; else //Dar desconto precoBase.V = precoBase.V - precoBase.V * ajuste / 100.00; produtoNaoConstaNaTabelaPrecoQuandoUsandoTabelaPreco = true; DescontoPercMaximo.V = 0; AcrescimoPercMaximo.V = 0; } } } catch (Exception ex) { Pedido.IdTabelaPreco = 0; PrecosCalcularEGuardar(); FE.Show("Não foi possível encontrar um preço para esse produto na tabela selecionada, irei ignorar a tabela de preço e usar o preço base", "Neo", ex.Message); } finally { rdCarga.Close(); bdTrans.Commit(); } if (Pedido.IdTabelaPreco == 0) { PrecoTipo = EnumPreco.ProdutoPrecoBase; DescontoPercMaximo.V = 0; AcrescimoPercMaximo.V = 0; if (DtPromocaoFinal.Iniciada && DtPromocaoInicio.Iniciada && precoPromocao.Iniciada) { // Está na promoção if (Pedido.Data >= DtPromocaoInicio.V && Pedido.Data <= DtPromocaoFinal.V) { PrecoTipo = EnumPreco.ProdutoPromocao; } else // Não está na promoção { PrecoTipo = EnumPreco.ProdutoPrecoBase; } } } PrecosCalcularEGuardar(); }