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); }); } }
private void PedidoItemProductoGrabar(PedidoItem datoGraba, IList <PedidoItemProducto> pitemProdGraba) { if (datoGraba.ItemProductos == null) { datoGraba.ItemProductos = new List <PedidoItemProducto>(); } List <PedidoItemProducto> pitemProd = datoGraba.ItemProductos.ToList <PedidoItemProducto>(); 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.IdProductoStock == pip.IdProductoStock); pip.Cantidad = itemPP.Cantidad; }); } else { pitemProdGraba.ToList <PedidoItemProducto>() .ForEach(delegate(PedidoItemProducto itemPP) { itemPP.IdPedidoItem = datoGraba.Id; datoGraba.ItemProductos.Add(itemPP); }); } }
/// <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)); } }