示例#1
0
        // 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;
        }
示例#2
0
 public Produto(Pedido pd)
 {
     PrecoTipo = EnumPreco.Indefinido;
     Pedido = pd;
 }
示例#3
0
        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();
        }