Пример #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
        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");
                }
            });
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }
Пример #5
0
        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);
        }
Пример #6
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));
            }
        }