예제 #1
0
        private void UpdateAvailableItemsWhenAdding(ReleaseOrderDetailBM toRemove)
        {
            //Cuando se devuelve de la grilla a lo disponible

            // Luego, hay que constatar si el elemento que se devuelve existe en la lista de disponible.
            //Si existe, se incrementan las unidades devueltas; caso contrario, directamente se agrega el elemento a la lista

            bool           found       = false;
            List <StockBM> listOfStock = (List <StockBM>)lstStock.DataSource;

            for (int i = 0; i < listOfStock.Count && !found; ++i)
            {
                found = toRemove.stock.id == listOfStock[i].id;
                if (found)
                {
                    listOfStock[i].Quantity += listOfStock[i].Quantity + toRemove.Quantity;
                }
            }

            if (!found)
            {
                if (listOfStock == null)
                {
                    listOfStock = new List <StockBM>();
                }
                // Acá se pone picante: como no existe, el máximo de stock es el mimso que lo devuelto
                toRemove.stock.Quantity = toRemove.Quantity;
                listOfStock.Add(toRemove.stock);
                lstStock.DataSource    = null;
                lstStock.DataSource    = listOfStock;
                lstStock.DisplayMember = "Name";
            }
        }
예제 #2
0
        private void UpdateGrid(bool isAdding)
        {
            ReleaseOrderDetailBM detailToAdd = null;
            StockBM stockToAdd = (StockBM)lstStock.SelectedItem;

            if (isAdding)
            {
                bool found = false;
                //si existe, es necesario que se controle que no se puedan agregar más unidades que las que especifica el stock disponible
                for (int i = 0; i < lstAdded.Count && !found; ++i)
                {
                    found = stockToAdd.id == lstAdded[i].stock.id;
                    if (found)
                    {
                        int total = lstAdded[i].Quantity + int.Parse(nbrQuantity.Value.ToString());

                        if (total < stockToAdd.Quantity)
                        {
                            lstAdded[i].Quantity = total;
                        }
                        else
                        {
                            lstAdded[i].Quantity = stockToAdd.Quantity;
                            //Si se asigna el máximo disponible, entonces ya no debe formar parte de la lista de stock disponible.
                            //Negrada... no hay tiempo: borra el elemento del listbox
                            UpdateAvailableItemsWhenRemoving(stockToAdd);
                        }
                    }
                }

                // Si el stock a agregar no existe en la lista de agregados, entonces se incorpora.
                if (!found)
                {
                    detailToAdd          = new ReleaseOrderDetailBM();
                    detailToAdd.stock    = stockToAdd;
                    detailToAdd.Quantity = int.Parse(nbrQuantity.Value.ToString());
                    lstAdded.Add(detailToAdd);

                    //Si se agrega lo máximo, entonces se elimia de los disponibles
                    if (stockToAdd.Quantity == detailToAdd.Quantity)
                    {
                        UpdateAvailableItemsWhenRemoving(stockToAdd);
                    }
                }
            }
            else
            {
                // La estrategia consiste en ver si existe el elemento que quiero devolver, en la lista de disponibles para incrementar el valor de disponibilidad
                // o agregar el item directamente si es que no existe.
                ReleaseOrderDetailBM toRemove = (ReleaseOrderDetailBM)dgRelease.SelectedRows[0].DataBoundItem;

                bool found = false;

                // Como la grilla se alimenta de una lista llamada lstAdded, se debe identificar el elemento para eliminarlo de allí.
                for (int i = 0; i < lstAdded.Count && !found; ++i)
                {
                    found = toRemove.stock.id == lstAdded[i].stock.id;
                    if (found)
                    {
                        lstAdded.RemoveAt(i);
                    }
                }

                UpdateAvailableItemsWhenAdding(toRemove);
            }
            dgRelease.DataSource = null;
            dgRelease.DataSource = lstAdded;
        }