private void PedidoItemProductoMayoristaGrabar(PedidoItem datoGraba, IList <PedidoItemProducto> pitemProdGraba) { ServiciosProductos servProductos = new ServiciosProductos(); if (datoGraba.ItemProductos == null) { datoGraba.ItemProductos = new List <PedidoItemProducto>(); } List <PedidoItemProducto> pitemProd = datoGraba.ItemProductos.ToList <PedidoItemProducto>(); List <ProductoStock> listProdStock = servProductos.ProductoStockListar(datoGraba.Producto.Codigo); if (pitemProd != null && pitemProd.Count > 0) { //si los items ya estan en el pedido se actualizan las cantidades pitemProd.ForEach(delegate(PedidoItemProducto pip) { PedidoItemProducto itemPP = pitemProdGraba.ToList <PedidoItemProducto>().Find(x => x.Medida.Descripcion.Equals(pip.Medida.Descripcion)); pip.Cantidad = itemPP.Cantidad; }); } else { pitemProdGraba.ToList <PedidoItemProducto>() .ForEach(delegate(PedidoItemProducto itemPP) { ProductoStock prodStock = listProdStock.Find(ps => ps.Medida.Descripcion.Equals(itemPP.Medida.Descripcion)); itemPP.IdPedidoItem = datoGraba.Id; itemPP.IdProductoStock = prodStock.Id; itemPP.Medida = prodStock.Medida; datoGraba.ItemProductos.Add(itemPP); }); } }
public void ProductoStockGrabar(Producto datoGraba, int idProducto, bool cambioSubcategoria) { RepositoryGenerico <ProductoStock> repository = new RepositoryGenerico <ProductoStock>(); //if (cambioSubcategoria) // repository.EliminarRegistros("tp_ProductoStock", string.Format("IdProducto = {0}", idProducto)); datoGraba.ProductoStock.ToList <ProductoStock>().ForEach(delegate(ProductoStock item) { ProductoStock dato = null; if (item.Id != -1) { dato = repository.Obtener(item.Id); } else { dato = new ProductoStock(); dato.IdProducto = item.IdProducto > 0 ? item.IdProducto : idProducto; dato.Medida = item.Medida; } bool agregarMovimientoStock = (dato.Stock != item.Stock); dato.Stock = item.Stock; dato.Reservado = item.Reservado; repository.Actualizar(dato); if (agregarMovimientoStock) { this.ProductoStockMovimientoGrabar(dato, 1, "Administrador de productos"); } }); }
public void ProductoStockMovimientoGrabar(ProductoStock ps, int idMovimiento, string observaciones) { RepositoryGenerico <ProductoStockMovimiento> repository = new RepositoryGenerico <ProductoStockMovimiento>(); ProductoStockMovimiento dato = new ProductoStockMovimiento(); dato.Id = -1; dato.IdProductoStock = ps.Id; dato.IdTipoMovimiento = idMovimiento; dato.Fecha = DateTime.Now; dato.Cantidad = ps.Stock; dato.Observaciones = observaciones; repository.Actualizar(dato); }
public Producto ProductoMayoristaGrabar(Producto datoGraba) { ProductoRepository repository = new ProductoRepository(); RepositoryGenerico <ProductoStock> repProdStock = new RepositoryGenerico <ProductoStock>(); Producto dato = repository.ObtenerProductoMayorista(datoGraba.Codigo); if (dato == null) { dato = new Producto(); } dato.Vigente = true; dato.Codigo = datoGraba.Codigo; dato.Descripcion = datoGraba.Descripcion; dato.Peso = datoGraba.Peso; dato.TipoPrecio = datoGraba.TipoPrecio; dato.PrecioUnitario = datoGraba.PrecioUnitarioFinal; dato.StockPropio = false; dato.FotoLink = datoGraba.FotoLink; repository.Actualizar(dato); dato = repository.Obtener(dato.Id); List <ProductoStock> listProdStock = this.ProductoStockListar(dato.Codigo); List <Medida> listMedidas = this.Listar <Medida>(); datoGraba.ProductoStock.ToList <ProductoStock>() .ForEach(delegate(ProductoStock item) { ProductoStock prodStock = listProdStock.Find(ps => ps.Medida.Descripcion.Equals(item.Medida.Descripcion)); if (prodStock == null) { prodStock = new ProductoStock(); prodStock.IdProducto = dato.Id; prodStock.Medida = listMedidas.Find(m => m.Descripcion.Equals(item.Medida.Descripcion)); repProdStock.Actualizar(prodStock); dato.ProductoStock.Add(prodStock); } }); repository.Actualizar(dato); return(repository.Obtener(dato.Id)); }
public void ProductoStockActualizarStock(int idProductoStock, int cantidad, bool descuenta) { RepositoryGenerico <ProductoStock> repository = new RepositoryGenerico <ProductoStock>(); ProductoStock dato = repository.Obtener(idProductoStock); if (dato == null) { throw new ApplicationException("No existe el producto"); } if (descuenta) { dato.Stock = dato.Stock - cantidad; } else { dato.Stock = dato.Stock + cantidad; } repository.Actualizar(dato); }
/// <summary> /// procesa los pedidos del minorista, cuidado que tiene los id de Producto del minorista o revendedor NO SON LOS DE Trading /// </summary> /// <param name="datos"></param> /// <returns></returns> public Pedido PedidoProcesarMinorista(PedidoDTO datos) { ServiciosProductos servProductos = new ServiciosProductos(); try { //creamos nuevo pedido como ingresado Pedido nuevoPedido = this.PedidoCrear(datos.IdCliente); datos.Items.ForEach(delegate(PedidoItemDTO item) { PedidoItem itemGraba = new PedidoItem(); itemGraba.IdPedido = nuevoPedido.Id; //siempre hay que buscar por codigo porque estos items itemGraba.Producto = this.ObtenerObjeto <Producto>("Codigo", item.CodigoProducto); itemGraba.Cantidad = item.Cantidad; itemGraba.Observaciones = item.Observaciones; List <ProductoStock> listProdStock = itemGraba.Producto.ProductoStock.ToList <ProductoStock>(); if (item.ItemProductos.Count == 0) { // si entra por aca es porque son pedidos viejos bool esTalleUnico = (listProdStock.Count == 1); listProdStock.ForEach(delegate(ProductoStock ps) { PedidoItemProducto itemPP = new PedidoItemProducto(); itemPP.IdPedidoItem = -1; itemPP.IdProductoStock = ps.Id; itemPP.Medida = ps.Medida; itemPP.Cantidad = esTalleUnico ? itemGraba.Cantidad : 0; // si es Talle Unico actualizamos cantidad, si no la dejamos en 0 itemGraba.ItemProductos.Add(itemPP); }); } else { item.ItemProductos.ToList <PedidoItemProductoDTO>() .ForEach(delegate(PedidoItemProductoDTO itemDTO) { ProductoStock prodStock = listProdStock.Find(ps => ps.Medida.Descripcion.Equals(itemDTO.Medida.Descripcion)); PedidoItemProducto itemPP = new PedidoItemProducto(); itemPP.IdPedidoItem = -1; itemPP.IdProductoStock = prodStock.Id; itemPP.Medida = prodStock.Medida; itemPP.Cantidad = itemDTO.Cantidad; itemGraba.ItemProductos.Add(itemPP); }); } this.PedidoItemGrabarSinTotalPedido(itemGraba); }); nuevoPedido = this.PedidoGrabarTotal(nuevoPedido.Id); nuevoPedido.Items = this.Listar <PedidoItem>("IdPedido", nuevoPedido.Id).ToList <PedidoItem>(); //finalizamos el pedido con los id y numero del minorista nuevoPedido.IdPedidoMinorista = datos.IdPedidoMinorista; nuevoPedido.NumeroPedidoMinorista = datos.NumeroPedidoMinorista; MensajeResponse resp = this.PedidoAvanzar(nuevoPedido, true); if (resp.Estado == (int)ESTADOS_RESPONSE.ERROR_) { //provisoriamente forzamos el SOLICITADO PedidoRepository repository = new PedidoRepository(); Pedido ultimo = repository.ObtenerUltimoPedido(); nuevoPedido.Numero = (ultimo != null) ? (ultimo.Numero + 1) : 1; nuevoPedido.Fecha = DateTime.Now; nuevoPedido.Estado = this.ObtenerObjeto <Estado>((int)ESTADOS.SOLICITADO_); nuevoPedido.IdPedidoMinorista = datos.IdPedidoMinorista; nuevoPedido.NumeroPedidoMinorista = datos.NumeroPedidoMinorista; repository.PedidoReservarStock(nuevoPedido.Id); CacheManager.RemoveToCache(gobalKeyCache); //Version OK pra cuando este funcionando todo ok //nuevoPedido.Observaciones = string.Format("Falta de Stock - Numero Pedido: {0}", datos.NumeroPedidoMinorista); //nuevoPedido.Estado = this.ObtenerObjeto<Estado>((int)ESTADOS.CANCELADO_); return(this.PedidoGrabar(nuevoPedido)); } else { return(this.PedidoObtener(nuevoPedido.Id)); } } catch (Exception ex) { throw new ApplicationException(string.Format("{0}\n{1}", ex.Message)); } }