Esempio n. 1
0
        private void SubscribeToChanges(ProductInOrder newProductInOrder)
        {
            newProductInOrder.WhenAnyValue(x => x.SelectedDiscount, x => x.SelectedQuantity)
            .Subscribe(a =>
            {
                int newSelectedDiscount = a.Item1;
                int newSelectedQuantity = a.Item2;

                //-UnitPrice или +UnitPrice к TotalSum и цене товара в заказке
                decimal newValue = (newSelectedQuantity - (short)newProductInOrder.SourceProductOnStore.UnitsOnOrder) * (decimal)newProductInOrder.UnitPrice;

                //-1% или +1% скидки от товара
                decimal percentageOff = (decimal)(newSelectedDiscount - newProductInOrder.PreviousSelectedDiscount) / 100;

                //Запускается когда меняется SelectedDiscount
                if (percentageOff != 0)
                {
                    newProductInOrder.Sum -= newProductInOrder.SelectedQuantity * (decimal)newProductInOrder.UnitPrice * percentageOff;
                    TotalSum -= newProductInOrder.SelectedQuantity * (decimal)newProductInOrder.UnitPrice * percentageOff;
                }
                //Запускается когда меняется SelectedQuantity и при этом SelectedDiscount больше нуля
                else if (newSelectedDiscount != 0)
                {
                    //
                    decimal sumOff   = ((decimal)newProductInOrder.PreviousSelectedDiscount / 100) * newProductInOrder.SelectedQuantity * (decimal)newProductInOrder.UnitPrice;
                    decimal sumToAdd = sumOff - newProductInOrder.Sum;

                    newProductInOrder.Sum = sumOff;
                    TotalSum += sumToAdd;

                    return;
                }

                newProductInOrder.PreviousSelectedDiscount = newSelectedDiscount;

                newProductInOrder.Sum += newValue;
                TotalSum += newValue;
            });

            newProductInOrder.WhenAnyValue(x => x.SelectedQuantity)
            .Select(newSelectedQuantity =>
            {
                short?unitsOnOrder = newProductInOrder.SourceProductOnStore.UnitsOnOrder;

                return(newSelectedQuantity - unitsOnOrder);
            })
            .Subscribe(newValue =>
            {
                newProductInOrder.SourceProductOnStore.UnitsInStock -= (short)newValue;
                newProductInOrder.SourceProductOnStore.UnitsOnOrder += (short)newValue;

                SaveChangesToProducts(newProductInOrder, (int)newValue);
            });
        }
Esempio n. 2
0
        private void SubscribeToChanges(ProductInOrder newProductInOrder)
        {
            int previousSelectedQuantity = 0;

            newProductInOrder.WhenAnyValue(x => x.SelectedDiscount, x => x.SelectedQuantity)
            .Subscribe(a =>
            {
                float newSelectedDiscount = a.Item1;
                int newSelectedQuantity   = a.Item2;

                //Value(price) that will be added(or removed) to(from) TotalPrice
                decimal newValue = (decimal)newProductInOrder.UnitPrice * (newSelectedQuantity - previousSelectedQuantity);

                //-1% or +1% discount
                decimal percentageOff = (decimal)(newSelectedDiscount - newProductInOrder.PreviousSelectedDiscount) / 100;

                //Executing when the SelectedDiscount has changed
                if (percentageOff != 0)
                {
                    newProductInOrder.Sum -= newProductInOrder.SelectedQuantity * (decimal)newProductInOrder.UnitPrice * percentageOff;
                    TotalSum -= newProductInOrder.SelectedQuantity * (decimal)newProductInOrder.UnitPrice * percentageOff;
                }
                //Executing when the SelectedQuantity has changed and the SelectedDiscount is greater than zero.
                else if (newSelectedDiscount != 0)
                {
                    decimal sumOff   = ((decimal)newProductInOrder.PreviousSelectedDiscount / 100) * newProductInOrder.SelectedQuantity * (decimal)newProductInOrder.UnitPrice;
                    decimal sumToAdd = sumOff - newProductInOrder.Sum;

                    newProductInOrder.Sum = sumOff;
                    TotalSum += sumToAdd;

                    TotalSumString = TotalSum.ToString("C2");

                    return;
                }

                newProductInOrder.PreviousSelectedDiscount = newSelectedDiscount;

                newProductInOrder.Sum += newValue;
                TotalSum += newValue;

                TotalSumString = TotalSum.ToString("C2");
            });

            newProductInOrder.WhenAnyValue(x => x.SelectedQuantity)
            .Select(newSelectedQuantity =>
            {
                if (newSelectedQuantity == 0)
                {
                    return(0);
                }
                int deltaQuantity = newSelectedQuantity - previousSelectedQuantity;     //Quantity of products that will be added or removed(in case of negative value) from the stock of the current product

                previousSelectedQuantity = newSelectedQuantity;

                return(deltaQuantity);
            })
            .Subscribe(newValue =>
            {
                newProductInOrder.SourceProductOnStore.UnitsInStock -= (short)newValue;

                Product productToReplace = productsList.First(x => x.ProductID == newProductInOrder.ProductID);

                productToReplace.UnitsInStock -= (short)newValue;
            });
        }