private List <Entidades.ListaProductoVenta> BuscarPromociones(List <Entidades.ListaProductoVenta> listaProductosEspejo) { double totalDescuento = 0; List <Entidades.ListaProductoVenta> listaDescuentos = new List <Entidades.ListaProductoVenta>(); foreach (var producto in listaProductosEspejo) { if (producto.Cantidad > 0) { List <Ofertas> promociones = Ventas.BuscarPromociones("", producto.idProducto, 2).OrderBy(x => x.PrecioCombo).ToList(); foreach (var item in promociones) { if (item.Productos.Count == 1) { int cantidad = producto.Cantidad / item.Productos.First().Unidades; if (cantidad != 0) { double descuento_promocion = Convert.ToDouble((producto.PrecioVenta * (cantidad * item.Productos.First().Unidades)) - (cantidad * item.PrecioCombo)); Entidades.ListaProductoVenta descuento = new Entidades.ListaProductoVenta(); descuento.idOferta = item.idOferta; descuento.PrecioVentaFinal = Convert.ToDecimal(-descuento_promocion); descuento.NombreProducto = "DESCUENTO APLICADO POR " + item.NombreOferta; descuento.Cantidad = cantidad; descuento.PrecioUnitario = item.PrecioCombo; descuento.MontoDescuento = item.MontoDescuento; listaDescuentos.Add(descuento); totalDescuento = totalDescuento + descuento_promocion; producto.Cantidad = producto.Cantidad - (cantidad * item.Productos.First().Unidades); } } else { if (!listaDescuentos.Exists(e => e.idOferta == item.idOferta)) { double totalProductosPromocion = 0; int cantidadPromociones = 10000; bool promocionCompleta = true; foreach (var itemNEW in item.Productos) { Entidades.ListaProductoVenta productoVenta = listaProductosEspejo.Find(e => e.idProducto == itemNEW.idProducto); if (productoVenta != null) { if ((productoVenta.Cantidad / itemNEW.Unidades) == 0) { promocionCompleta = false; break; } else { int posiblesPromociones = productoVenta.Cantidad / itemNEW.Unidades; cantidadPromociones = cantidadPromociones > posiblesPromociones ? posiblesPromociones : cantidadPromociones; totalProductosPromocion = totalProductosPromocion + Convert.ToDouble(productoVenta.PrecioVenta); } } else { promocionCompleta = false; break; } } if (promocionCompleta) { if (!listaDescuentos.Exists(e => e.idOferta == item.idOferta)) { Entidades.ListaProductoVenta descuento = new Entidades.ListaProductoVenta(); double descuento_promocion = ((cantidadPromociones * totalProductosPromocion) - (cantidadPromociones * Convert.ToDouble(item.PrecioCombo))); descuento.idOferta = item.idOferta; descuento.PrecioVentaFinal = Convert.ToDecimal(-descuento_promocion); descuento.NombreProducto = "DESCUENTO APLICADO POR " + item.NombreOferta; descuento.Cantidad = cantidadPromociones; descuento.PrecioUnitario = item.PrecioCombo; descuento.MontoDescuento = item.MontoDescuento; listaDescuentos.Add(descuento); totalDescuento = totalDescuento + descuento_promocion; foreach (var item2 in item.Productos) { Entidades.ListaProductoVenta productoVenta = listaProductosEspejo.Find(e => e.idProducto == item2.idProducto); productoVenta.Cantidad = productoVenta.Cantidad - (cantidadPromociones * item2.Unidades); } } } } } } } } return(listaDescuentos); }
private void FacturarVenta() { List <DetalleOferta> lista = new List <DetalleOferta>(); if (listaProductos.Count > 0) { List <Entidades.ListaProductoVentaEspejo> listaProductosOriginal = new List <ListaProductoVentaEspejo>(); foreach (var item in listaProductos) { Entidades.ListaProductoVentaEspejo ProductosOriginal = new Entidades.ListaProductoVentaEspejo(); ProductosOriginal.Cantidad = item.Cantidad; ProductosOriginal.CodigoProducto = item.CodigoProducto; ProductosOriginal.Fecha = item.Fecha; ProductosOriginal.idOferta = item.idOferta; ProductosOriginal.idProducto = item.idProducto; ProductosOriginal.NombreProducto = item.NombreProducto; ProductosOriginal.PrecioUnitario = item.PrecioUnitario; ProductosOriginal.PrecioVenta = item.PrecioVenta; ProductosOriginal.PrecioVentaFinal = item.PrecioVentaFinal; ProductosOriginal.ProductoEspecial = item.ProductoEspecial; listaProductosOriginal.Add(ProductosOriginal); } listaProductosConDescuentos = BuscarPromociones(listaProductos); if (listaProductosConDescuentos.Count > 0) { int contarDescuentos = 1; decimal PrecioVentaOrig = Convert.ToDecimal(lblTotalPagarReal.Text); foreach (var item in listaProductosConDescuentos) { if (contarDescuentos == 1) { PrecioFinal = PrecioVentaOrig + item.PrecioVentaFinal; contarDescuentos = contarDescuentos + 1; } else { PrecioFinal = PrecioFinal + item.PrecioVentaFinal; contarDescuentos = contarDescuentos + 1; } DetalleOferta detalle = new DetalleOferta(); detalle.Descripcion = item.NombreProducto; detalle.PrecioOferta = item.PrecioUnitario; detalle.MontoDescuento = item.MontoDescuento; lista.Add(detalle); } List <Entidades.ListaProductoVenta> listaProductos = new List <ListaProductoVenta>(); foreach (var item in listaProductosOriginal) { Entidades.ListaProductoVenta Productos = new Entidades.ListaProductoVenta(); Productos.Cantidad = item.Cantidad; Productos.CodigoProducto = item.CodigoProducto; Productos.Fecha = item.Fecha; Productos.idOferta = item.idOferta; Productos.idProducto = item.idProducto; Productos.NombreProducto = item.NombreProducto; Productos.PrecioUnitario = item.PrecioUnitario; Productos.PrecioVenta = item.PrecioVenta; Productos.PrecioVentaFinal = PrecioFinal; Productos.ProductoEspecial = item.ProductoEspecial; listaProductos.Add(Productos); } listaOfertas = lista; VentaCerrada = true; int idusuarioLogueado = Sesion.UsuarioLogueado.IdUsuario; int idusuario = idusuarioLogueado; listaProductos[0].PrecioVentaFinal = PrecioFinal; idVenta = Negocio.Ventas.RegistrarVenta(listaProductos, idusuario); bool AplicaDescuento = true; BloquearPantalla(); VueltoNuevoWF _vuelto = new VueltoNuevoWF(listaProductos[0].PrecioVentaFinal, AplicaDescuento, idVenta, listaProductos, listaOfertas); _vuelto.Show(); //Tkt(idVenta, listaProductos); //DesbloquearPantalla(); lblBack.Visible = true; } else { VentaCerrada = true; int idusuarioLogueado = Sesion.UsuarioLogueado.IdUsuario; int idusuario = idusuarioLogueado; listaProductos[0].PrecioVentaFinal = Convert.ToDecimal(lblTotalPagarReal.Text); //bool Exito = Negocio.Ventas.RegistrarVenta(listaProductos, idusuario); idVenta = Negocio.Ventas.RegistrarVenta(listaProductos, idusuario); bool AplicaDescuento = false; BloquearPantalla(); VueltoNuevoWF _vuelto = new VueltoNuevoWF(listaProductos[0].PrecioVentaFinal, AplicaDescuento, idVenta, listaProductos, listaOfertas); _vuelto.Show(); //Tkt(idVenta, listaProductos); //DesbloquearPantalla(); lblBack.Visible = true; } } }