Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: djnilo en 1 Mayo 2017, 23:43 pm



Título: hacer dos consultas diferentes en entity framework
Publicado por: djnilo en 1 Mayo 2017, 23:43 pm
buenas
tardes amigos del foro estoy haciendo una aplicación de venta de productos
esta mi tabla con los campos productos
idproducto, codigobarra, precio , idmedida,stock,idsubfamilia
y tengo un formulario  ventas me problema surge cuando quiero vender productos granel
entonces estaba pensando cuando el codigo = codigobusqueda y el idmedida = 3 que es lo mismo a kilogramo me muestre un formulario modal
entoces un else que sea distinto a kilogramo por que no seria a granel si no = unidad
codigo para
buscar productos por codigo esto funciona correctamente
entoces quiero agregar un else para que me busque segun la otra condicion que seria por el idmedida = 3 esto es kilogramo

en esta linea busco el producto eProd = objProducto.GetByCodigoBarras(TxtCodigoBarras.Text);
y lo me trae
Código:
  public PRODUCTO GetByCodigoBarras(string Codigo)
        {
            DAL.IRepository repository = new Modelo.Repository();
            try
            {
                var producto = repository.FindEntity<PRODUCTO>(a => a.CodigoBarras ==Codigo, "Venta_Detalles", "Compras_Detalle", "Medida", "SubFamiliaProducto");
                if (producto != null)
                {
                    producto.IdFamilia = producto.SubFamiliaProducto.IdFamilia;
                    var fami = new FamiliaProducto();
                    fami = repository.FindEntity<FamiliaProducto>(x => x.IdFamilia == producto.SubFamiliaProducto.IdFamilia);
                    producto.NombreFamilia = fami.NombreFamilia;
                    producto.NombreMedida = producto.Medida.Medida1;
                    producto.NombreSubFamilia = producto.SubFamiliaProducto.NombreSubFamilia;
                           

                }
                else
                {
                    producto = null;
                }
                return producto;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }


Código:
 private void TxtCodigoBarras_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(TxtCodigoBarras.Text.Length>0)
            {
                if (e.KeyChar == Convert.ToChar(Keys.Return))
                {

                    DetalleVentaDTO eDeta = new DetalleVentaDTO();
                    PRODUCTO eProd = new PRODUCTO();
                    eProd = objProducto.GetByCodigoBarras(TxtCodigoBarras.Text);
                    if (eProd == null)
                    {
                        if (MessageBox.Show("Producto no existe, ¿Desea agregarlo?", "Confirme", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            Form frm = this.MdiChildren.FirstOrDefault(x => x is FrmProductos);
                            if (frm != null)
                            {
                                frm.BringToFront();
                                return;
                            }
                            frm = new FrmProductos(idUsuario);
                            frm.MdiParent = this.MdiParent;
                            frm.Show();
                        }
                        return;
                    }
                    if (eProd.Stock <= 0)
                    {
                        MessageBox.Show("No existe stock suficiente para vender", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }





                    eDeta.Cantidad = 1;

                    eDeta.CodigoBarras = eProd.CodigoBarras;
                    eDeta.FechaReg = DateTime.Now;
                    eDeta.IdDetalle = 0;
                    eDeta.IdProducto = eProd.IdProducto;
                    eDeta.IdVenta = 0;
                    eDeta.Importe = eProd.Precio * eDeta.Cantidad;
                    eDeta.NombreProducto = eProd.NombreProducto;
                    eDeta.PorcentajeIVA = eImpuesto.TasaImpuesto;
                    eDeta.Precio = eProd.Precio;
                    Detalles.Add(eDeta);
                    //DgvDetalle.DataSource = null;
                    DgvDetalle.DataSource = Detalles;
                    TxtCodigoBarras.Clear();
                    TxtCodigoBarras.Focus();
                }
este lo carga en la grilla perfecto lo que necesito con la condicion


(https://preview.ibb.co/byvKRQ/venta_codigobarra.jpg) (https://ibb.co/iYA8Lk)
portal de imagenes gratis (https://es.imgbb.com/)

el codigo que quiero insertar con else para que cumpla la condicion que sea igual a idmedida = 3 kilogramo
Código:
PRODUCTO eProds = new PRODUCTO();
                    eProds = objProducto.GetByCodigoBarrasKilogramo(TxtCodigoBarras.Text);
                    if (eProds == null)

                    {
                        if (MessageBox.Show("Producto no existe, ¿Desea agregarlo?", "Confirme", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            Form frm = this.MdiChildren.FirstOrDefault(x => x is FrmProductos);
                            if (frm != null)
                            {
                                frm.BringToFront();
                                return;
                            }
                            frm = new FrmProductos(idUsuario);
                            frm.MdiParent = this.MdiParent;
                            frm.Show();
                        }
                        return;
                    }
                    if (eProds.Stock <= 0)
                    {
                        MessageBox.Show("No existe stock suficiente para vender", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    string idbusqueda = Convert.ToString(TxtCodigoBarras.Text);
                    NombreProductos = eProds.NombreProducto;
                    Precioss = Convert.ToString(eProds.Precio);



                    FrmGranel form = new FrmGranel(idbusqueda, NombreProductos, Precioss);
                    form.MdiParent = this.MdiParent;
                    form.Show();

codigo busqueda idmedida = 3
Código:
 public PRODUCTO GetByCodigoBarrasKilogramo(string Codigo)
        {
           

            DAL.IRepository repository = new Modelo.Repository();
            try
            {
                var producto = repository.FindEntity<PRODUCTO>(a => a.CodigoBarras == Codigo, "Venta_Detalles", "Compras_Detalle", "Medida", "SubFamiliaProducto");
                if (producto != null)
                {
                 
                    producto.IdMedida = producto.Medida.IdMedida;
                    var Medidas = new Medida();
                    Medidas = repository.FindEntity<Medida>(x => x.IdMedida == 3);
                   
                    producto.NombreSubFamilia = producto.SubFamiliaProducto.NombreSubFamilia;



                }
                else
                {
                    producto = null;
                }
                return producto;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }






Título: Re: hacer dos consultas diferentes en entity framework
Publicado por: TickTack en 9 Mayo 2017, 14:41 pm
buenas
tardes amigos del foro estoy haciendo una aplicación de venta de productos
esta mi tabla con los campos productos
idproducto, codigobarra, precio , idmedida,stock,idsubfamilia
y tengo un formulario  ventas me problema surge cuando quiero vender productos granel
entonces estaba pensando cuando el codigo = codigobusqueda y el idmedida = 3 que es lo mismo a kilogramo me muestre un formulario modal
entoces un else que sea distinto a kilogramo por que no seria a granel si no = unidad
codigo para
buscar productos por codigo esto funciona correctamente
entoces quiero agregar un else para que me busque segun la otra condicion que seria por el idmedida = 3 esto es kilogramo

en esta linea busco el producto eProd = objProducto.GetByCodigoBarras(TxtCodigoBarras.Text);
y lo me trae
Código:
  public PRODUCTO GetByCodigoBarras(string Codigo)
        {
            DAL.IRepository repository = new Modelo.Repository();
            try
            {
                var producto = repository.FindEntity<PRODUCTO>(a => a.CodigoBarras ==Codigo, "Venta_Detalles", "Compras_Detalle", "Medida", "SubFamiliaProducto");
                if (producto != null)
                {
                    producto.IdFamilia = producto.SubFamiliaProducto.IdFamilia;
                    var fami = new FamiliaProducto();
                    fami = repository.FindEntity<FamiliaProducto>(x => x.IdFamilia == producto.SubFamiliaProducto.IdFamilia);
                    producto.NombreFamilia = fami.NombreFamilia;
                    producto.NombreMedida = producto.Medida.Medida1;
                    producto.NombreSubFamilia = producto.SubFamiliaProducto.NombreSubFamilia;
                           

                }
                else
                {
                    producto = null;
                }
                return producto;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }


Código:
 private void TxtCodigoBarras_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(TxtCodigoBarras.Text.Length>0)
            {
                if (e.KeyChar == Convert.ToChar(Keys.Return))
                {

                    DetalleVentaDTO eDeta = new DetalleVentaDTO();
                    PRODUCTO eProd = new PRODUCTO();
                    eProd = objProducto.GetByCodigoBarras(TxtCodigoBarras.Text);
                    if (eProd == null)
                    {
                        if (MessageBox.Show("Producto no existe, ¿Desea agregarlo?", "Confirme", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            Form frm = this.MdiChildren.FirstOrDefault(x => x is FrmProductos);
                            if (frm != null)
                            {
                                frm.BringToFront();
                                return;
                            }
                            frm = new FrmProductos(idUsuario);
                            frm.MdiParent = this.MdiParent;
                            frm.Show();
                        }
                        return;
                    }
                    if (eProd.Stock <= 0)
                    {
                        MessageBox.Show("No existe stock suficiente para vender", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }





                    eDeta.Cantidad = 1;

                    eDeta.CodigoBarras = eProd.CodigoBarras;
                    eDeta.FechaReg = DateTime.Now;
                    eDeta.IdDetalle = 0;
                    eDeta.IdProducto = eProd.IdProducto;
                    eDeta.IdVenta = 0;
                    eDeta.Importe = eProd.Precio * eDeta.Cantidad;
                    eDeta.NombreProducto = eProd.NombreProducto;
                    eDeta.PorcentajeIVA = eImpuesto.TasaImpuesto;
                    eDeta.Precio = eProd.Precio;
                    Detalles.Add(eDeta);
                    //DgvDetalle.DataSource = null;
                    DgvDetalle.DataSource = Detalles;
                    TxtCodigoBarras.Clear();
                    TxtCodigoBarras.Focus();
                }
este lo carga en la grilla perfecto lo que necesito con la condicion


(https://preview.ibb.co/byvKRQ/venta_codigobarra.jpg) (https://ibb.co/iYA8Lk)
portal de imagenes gratis (https://es.imgbb.com/)

el codigo que quiero insertar con else para que cumpla la condicion que sea igual a idmedida = 3 kilogramo
Código:
PRODUCTO eProds = new PRODUCTO();
                    eProds = objProducto.GetByCodigoBarrasKilogramo(TxtCodigoBarras.Text);
                    if (eProds == null)

                    {
                        if (MessageBox.Show("Producto no existe, ¿Desea agregarlo?", "Confirme", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            Form frm = this.MdiChildren.FirstOrDefault(x => x is FrmProductos);
                            if (frm != null)
                            {
                                frm.BringToFront();
                                return;
                            }
                            frm = new FrmProductos(idUsuario);
                            frm.MdiParent = this.MdiParent;
                            frm.Show();
                        }
                        return;
                    }
                    if (eProds.Stock <= 0)
                    {
                        MessageBox.Show("No existe stock suficiente para vender", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    string idbusqueda = Convert.ToString(TxtCodigoBarras.Text);
                    NombreProductos = eProds.NombreProducto;
                    Precioss = Convert.ToString(eProds.Precio);



                    FrmGranel form = new FrmGranel(idbusqueda, NombreProductos, Precioss);
                    form.MdiParent = this.MdiParent;
                    form.Show();

codigo busqueda idmedida = 3
Código:
 public PRODUCTO GetByCodigoBarrasKilogramo(string Codigo)
        {
           

            DAL.IRepository repository = new Modelo.Repository();
            try
            {
                var producto = repository.FindEntity<PRODUCTO>(a => a.CodigoBarras == Codigo, "Venta_Detalles", "Compras_Detalle", "Medida", "SubFamiliaProducto");
                if (producto != null)
                {
                 
                    producto.IdMedida = producto.Medida.IdMedida;
                    var Medidas = new Medida();
                    Medidas = repository.FindEntity<Medida>(x => x.IdMedida == 3);
                   
                    producto.NombreSubFamilia = producto.SubFamiliaProducto.NombreSubFamilia;



                }
                else
                {
                    producto = null;
                }
                return producto;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }






Entonces, cual es tu problema. Creo que estas haciendo un tutorial de como solucionar tu problema. Es eso asi?

Saludos!