예제 #1
0
        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);
                });
            }
        }
예제 #2
0
        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);
                });
            }
        }
예제 #3
0
        /// <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));
            }
        }