private void CargarCorreccion(CorreccionStock correccion)
 {
     Descripcion    = correccion.Producto.Descripcion;
     Precio         = correccion.Precio;
     CantidadActual = correccion.Cantidad.ToString();
     MotivoId       = correccion.MotivoCorreccionId;
     DeshabilitarDetalle();
 }
示例#2
0
        private void AgregarCorreccion(ProductoCompleto original)
        {
            var correccionstock = new CorreccionStock()

                                  //actualizar las propiedades
            {
                ProductoId              = original.ProductoId,
                Cantidad                = Convert.ToDecimal(CantidadActual),
                Precio                  = original.PrecioConIVA,
                MotivoCorreccionId      = MotivoId,
                Desincronizado          = true,
                FechaUltimaModificacion = DateTime.Now,
                Fecha        = DateTime.Now,
                Identifier   = Guid.NewGuid(),
                MaxiKioscoId = AppSettings.MaxiKioscoId,
            };

            CorreccionStockRepository.Agregar(correccionstock);
            CorreccionStockRepository.Commit();
        }
示例#3
0
        public void ActualizarStock(Stock stock, decimal diferencia, int motivoCorreccionId, decimal precioConIVA)
        {
            ////Obtenemos el producto a actualizar
            var producto = Uow.Productos.Obtener(stock.ProductoId);

            if (producto == null)
            {
                throw new ApplicationException("No se ha encontrado el producto");
            }

            if (!producto.AceptaCantidadesDecimales && (stock.StockActual % 1 != 0))
            {
                throw new ApplicationException("El producto no acepta cantidades decimales");
            }

            var stockTransaccion = new StockTransaccion();
            var now = DateTime.Now;


            producto.PrecioConIVA = precioConIVA;
            producto.PrecioSinIVA = precioConIVA / 1.21m;

            //3 = Corrección
            stockTransaccion.StockTransaccionTipoId = 3;
            stockTransaccion.Identifier             = Guid.NewGuid();


            var motivo = Uow.MotivosCorreccion.Obtener(motivoCorreccionId);

            if (!motivo.SumarAStock)
            {
                diferencia = -diferencia;
            }

            var stockTransacciones = Uow.StockTransacciones.Listado().Where(st => st.StockId == stock.StockId);

            //Creamos una nueva transaccion con la diferencia entre el stock actual y el ingresado por el usuario.
            var stockActual = stockTransacciones.Select(st => st.Cantidad)
                              .DefaultIfEmpty(0)
                              .Sum();

            stock.StockActual = stockActual + diferencia;

            if (stock.StockId == 0)
            {
                stock.Identifier = Guid.NewGuid();
                Uow.Stocks.Agregar(stock);

                stockTransaccion.Stock    = stock;
                stockTransaccion.Cantidad = diferencia;
            }
            else
            {
                stockTransaccion.Cantidad = diferencia;
                stockTransaccion.StockId  = stock.StockId;
                Uow.Stocks.Modificar(stock);
            }

            Uow.StockTransacciones.Agregar(stockTransaccion);

            ////Agregamos la correccion de stock.
            var correccionStock = new CorreccionStock();

            correccionStock.Cantidad           = stockTransaccion.Cantidad;
            correccionStock.MotivoCorreccionId = motivoCorreccionId;
            correccionStock.ProductoId         = stock.ProductoId;
            correccionStock.Precio             = producto.PrecioConIVA;
            correccionStock.Fecha        = now;
            correccionStock.Identifier   = Guid.NewGuid();
            correccionStock.MaxiKioscoId = stock.MaxiKioscoId;

            ////Set sincronization properties.
            correccionStock.FechaUltimaModificacion = now;
            correccionStock.Desincronizado          = true;

            Uow.Productos.Modificar(producto);
            Uow.CorreccionesDeStock.Agregar(correccionStock);

            Uow.Commit();
        }
示例#4
0
        public void TransferirStock(Stock stockOrigen, int unidades, int destinoId)
        {
            ////Obtenemos el producto a actualizar
            var producto = Uow.Productos.Obtener(stockOrigen.ProductoId);

            if (producto == null)
            {
                throw new ApplicationException("No se ha encontrado el producto");
            }

            var now = DateTime.Now;

            //Actualizo el origen
            var transOrigen = new StockTransaccion
            {
                Cantidad   = -unidades,
                Identifier = Guid.NewGuid(),
                FechaUltimaModificacion = now,
                StockTransaccionTipoId  = 3
            };

            if (stockOrigen.StockId == 0)
            {
                stockOrigen.StockActual        = -unidades;
                stockOrigen.StockTransacciones = new Collection <StockTransaccion> {
                    transOrigen
                };
                Uow.Stocks.Agregar(stockOrigen);
            }
            else
            {
                stockOrigen.StockActual            -= unidades;
                stockOrigen.FechaUltimaModificacion = now;
                Uow.Stocks.Modificar(stockOrigen);

                transOrigen.StockId = stockOrigen.StockId;
                Uow.StockTransacciones.Agregar(transOrigen);
            }

            var correccionOrigen = new CorreccionStock
            {
                Cantidad           = transOrigen.Cantidad,
                MotivoCorreccionId = 5,                            //Transferencia
                ProductoId         = stockOrigen.ProductoId,
                Precio             = producto.PrecioConIVA,
                Fecha                   = now,
                Identifier              = Guid.NewGuid(),
                MaxiKioscoId            = stockOrigen.MaxiKioscoId,
                FechaUltimaModificacion = now,
                Desincronizado          = true
            };

            Uow.CorreccionesDeStock.Agregar(correccionOrigen);


            //Ahora actualizo el destino
            var transDestino = new StockTransaccion
            {
                Cantidad   = unidades,
                Identifier = Guid.NewGuid(),
                FechaUltimaModificacion = now,
                StockTransaccionTipoId  = 3
            };

            var stockDestino = Uow.Stocks.Obtener(s => s.MaxiKioscoId == destinoId && s.ProductoId == stockOrigen.ProductoId);

            if (stockDestino == null)
            {
                stockDestino = new Stock()
                {
                    Desincronizado     = true,
                    Identifier         = Guid.NewGuid(),
                    MaxiKioscoId       = destinoId,
                    ProductoId         = stockOrigen.ProductoId,
                    StockActual        = unidades,
                    OperacionCreacion  = "Recibido desde transferencia",
                    FechaCreacion      = DateTime.Now,
                    StockTransacciones = new Collection <StockTransaccion> {
                        transDestino
                    }
                };
                Uow.Stocks.Agregar(stockDestino);
            }
            else
            {
                stockDestino.FechaUltimaModificacion = now;
                stockDestino.StockActual            += unidades;
                Uow.Stocks.Modificar(stockDestino);

                transDestino.StockId = stockDestino.StockId;
                Uow.StockTransacciones.Agregar(transDestino);
            }

            var correccionDestino = new CorreccionStock
            {
                Cantidad           = transDestino.Cantidad,
                MotivoCorreccionId = 5, //Transferencia
                ProductoId         = stockOrigen.ProductoId,
                Precio             = producto.PrecioConIVA,
                Fecha                   = now,
                Identifier              = Guid.NewGuid(),
                MaxiKioscoId            = stockDestino.MaxiKioscoId,
                FechaUltimaModificacion = now,
                Desincronizado          = true
            };

            Uow.CorreccionesDeStock.Agregar(correccionDestino);

            Uow.Commit();
        }