Exemplo n.º 1
0
        private void ActualizarStockPromociones(int productoId, int cantidad)
        {
            var promociones = ProductoPromocionRepository.Listado().Where(p => p.PadreId == productoId).ToList();

            foreach (var promo in promociones)
            {
                var prod = ProductosDatasource.First(p => p.ProductoId == promo.HijoId);
                prod.StockActual -= promo.Unidades * cantidad;
            }
        }
Exemplo n.º 2
0
        private void Aceptar()
        {
            if (PopupAbierto)
            {
                PopupAbierto = false;
            }
            else if (MensajeErrorAbierto)
            {
                MensajeErrorAbierto = false;
            }
            else if (ConfirmacionAbierta)
            {
                ConfirmacionAbierta = false;
            }
            else
            {
                if (dgvListado.Rows.Count > 0)
                {
                    var     lineas     = new List <VentaProducto>();
                    decimal total      = 0;
                    decimal costoTotal = 0;
                    for (int i = 0; i <= dgvListado.Rows.Count - 1; i++)
                    {
                        var linea = new VentaProducto();

                        linea.Cantidad   = decimal.Parse(dgvListado.Rows[i].Cells["Cantidad"].Value.ToString());
                        linea.Eliminado  = false;
                        linea.Identifier = Guid.NewGuid();
                        linea.Precio     = Convert.ToDecimal(dgvListado.Rows[i].Cells["Unitario"].Value.ToString().Replace("$", ""));
                        linea.ProductoId = (int)dgvListado.Rows[i].Cells["productoId"].Value;
                        linea.Costo      = dgvListado.Rows[i].Cells["Costo"].Value == null
                                                ? 0
                                                : Convert.ToDecimal(dgvListado.Rows[i].Cells["Costo"].Value.ToString().Replace("$", ""));

                        var recargo = dgvListado.Rows[i].Cells["Recargo"].Value;
                        linea.EsPromocion           = bool.Parse(dgvListado.Rows[i].Cells["EsPromocion"].Value.ToString());
                        linea.AdicionalPorExcepcion = recargo == null
                                                                ? (decimal?)null :
                                                      Convert.ToDecimal(recargo.ToString().Replace("$", "")) * linea.Cantidad;
                        linea.Desincronizado = true;


                        total      += Convert.ToDecimal(linea.Cantidad) * linea.Precio.GetValueOrDefault();
                        costoTotal += Convert.ToDecimal(linea.Cantidad) * linea.Costo;
                        lineas.Add(linea);
                    }


                    ConfirmacionAbierta = true;
                    var frmConfirmar = new frmConfirmarVenta(total);
                    if (frmConfirmar.ShowDialog() == DialogResult.OK)
                    {
                        ConfirmacionAbierta = false;
                        var venta = new Venta
                        {
                            ImporteTotal   = total,
                            CostoTotal     = costoTotal,
                            Identifier     = Guid.NewGuid(),
                            Eliminado      = false,
                            CierreCajaId   = UsuarioActual.CierreCajaIdActual,
                            FechaVenta     = DateTime.Now,
                            VentaProductos = lineas
                        };
                        venta.CierreCajaId = UsuarioActual.CierreCajaIdActual;
                        var stockRepository            = new StockRepository();
                        var stockTransaccionRepository = new EFRepository <StockTransaccion>();

                        var seAgregoStock       = false;
                        var seAgregoTransaccion = false;

                        //Agrego primero a la coleccion las lineas secundarias correspondientes a promociones
                        var secundarias = new List <VentaProducto>();
                        foreach (var linea in lineas.Where(l => l.EsPromocion))
                        {
                            var productos = ProductoPromocionRepository.Listado().Where(p => p.PadreId == linea.ProductoId && !p.Eliminado).ToList();
                            secundarias.AddRange(productos.Select(p => new VentaProducto()
                            {
                                Cantidad   = p.Unidades * linea.Cantidad,
                                ProductoId = p.HijoId
                            }));
                        }

                        lineas.AddRange(secundarias);

                        foreach (var line in lineas)
                        {
                            var stockSt = new StockTransaccion
                            {
                                Cantidad = line.Cantidad * (-1),
                                StockTransaccionTipoId = 1,
                                Identifier             = Guid.NewGuid(),
                                Desincronizado         = true
                            };

                            var stock = stockRepository.ObtenerByProducto(line.ProductoId, AppSettings.MaxiKioscoId);
                            if (stock != null)
                            {
                                stockSt.StockId   = stock.StockId;
                                stock.StockActual = stock.StockActual - Convert.ToDecimal(line.Cantidad);
                                stockTransaccionRepository.Agregar(stockSt);
                                stockRepository.Modificar(stock);
                                seAgregoTransaccion = true;
                                seAgregoStock       = true;
                            }
                            else
                            {
                                stock = new Stock()
                                {
                                    Identifier         = Guid.NewGuid(),
                                    MaxiKioscoId       = AppSettings.MaxiKioscoId,
                                    ProductoId         = line.ProductoId,
                                    StockActual        = -line.Cantidad,
                                    OperacionCreacion  = "Venta en DESKTOP",
                                    FechaCreacion      = DateTime.Now,
                                    StockTransacciones = new List <StockTransaccion> {
                                        stockSt
                                    }
                                };
                                stockRepository.Agregar(stock);
                                seAgregoStock = true;
                            }
                        }

                        if (seAgregoStock)
                        {
                            stockRepository.Commit();
                        }
                        if (seAgregoTransaccion)
                        {
                            stockTransaccionRepository.Commit();
                        }

                        Repository.Agregar(venta);
                        if (Repository.Commit())
                        {
                            Limpiar();
                        }
                        else
                        {
                            Mensajes.Guardar(false, "Ha ocurrido un error al registrar la venta. Por favor intente nuevamente");
                        }
                        ReiniciarVenta();
                    }
                }
            }
        }