private void CargarCorreccion(CorreccionStock correccion)
 {
     Descripcion = correccion.Producto.Descripcion;
     Precio = correccion.Precio;
     CantidadActual = correccion.Cantidad.ToString();
     MotivoId = correccion.MotivoCorreccionId;
     DeshabilitarDetalle();
 }
Exemplo n.º 2
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();
        }
        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();
        }
Exemplo n.º 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();
        }