Esempio n. 1
0
        /// <summary>
        /// Добавление д.с. из бумажника
        /// </summary>
        /// <param name="value"></param>
        public void Add(Wallet value)
        {
            #region Проверки на корректность переданного значения
            if (value == null)
            {
                throw new Exception("Передан пустой объект");
            }

            if (value.Sum() <= 0)
            {
                throw new Exception("Количество денежных средств в бумажнике должно быть больше нуля");
            }

            foreach (var outPack in value.ListPack)
            {
                if (outPack.Count <= 0)
                {
                    throw new Exception("Количество денежных средств в пачке должно быть больше нуля");
                }

                if (outPack.Coin == null)
                {
                    throw new Exception("Пачка не содержит указатель на денежную единицу");
                }
            }
            #endregion

            foreach (var outPack in value.ListPack)
            {
                Add(outPack);
            }

            ChangeSum?.Invoke(Sum());
        }
Esempio n. 2
0
 /// <summary>
 /// Совершить покупку
 /// </summary>
 /// <param name="itemProduct"></param>
 public void Buy(int numberProduct)
 {
     if (numberProduct >= 0 && shopWindow.ListProduct[numberProduct].IsEnabled)
     {
         Wallet reserveDeposit = walletDeposit.Copy();                                       // Сохранить депозит  на случай отката(нет монет для сдачи)
         walletMachine.Add(walletDeposit.GetAllMoney());                                     // Забрать деньги из депозита в автомат
         uint sumChange = reserveDeposit.Sum() - shopWindow.ListProduct[numberProduct].Cost; // Вычисление суммы сдачи.
         if (sumChange > 0)                                                                  // Если сдача требуетя
         {
             Wallet change = walletMachine.GetSum(sumChange);                                // Попытка получить сдачу
             if (change != null)                                                             // Если сдачу получили
             {
                 walletDeposit.Add(change);                                                  // Зачислить сдачу на депозит
                 shopWindow.ListProduct[numberProduct].DecCount();                           // Уменьшить кол-во товара на 1
                 cart.Add(shopWindow.ListProduct[numberProduct]);                            // Добавить товар в корзину.
             }
             else //Если не удалось получить сдачу
             {
                 walletDeposit.Add(reserveDeposit);  // Вернуть д.с. на депозит
                 return;
             }
         }
         else                                                  // Если сдача не требуется
         {
             shopWindow.ListProduct[numberProduct].DecCount(); // Уменьшить кол-во товара на 1.
             cart.Add(shopWindow.ListProduct[numberProduct]);  // Добавить товар в корзину.
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Списать указанную сумму.
        /// </summary>
        /// <param name="value"></param>
        public void GetSum(Wallet value)
        {
            #region Проверки
            if (value == null)
            {
                throw new Exception("Переданное значение не может быть null.");
            }

            if (value.Sum() <= 0)
            {
                throw new Exception("Запрашиваемая на списание сумма должна быть больше нуля.");
            }

            if (value.Sum() > Sum())
            {
                throw new Exception("Запрошенная сумма больше имеющейся.");
            }
            #endregion

            foreach (var inPack in value.ListPack)
            {
                foreach (var thisPack in pack)
                {
                    if (inPack.Coin.Count == thisPack.Coin.Count)
                    {
                        if (thisPack.Count >= inPack.Count)
                        {
                            thisPack.Count -= inPack.Count;
                        }
                        else
                        {
                            throw new Exception("Нет нужного кол-во монет, этого достоинства.");
                        }
                    }
                }
                ChangeSum?.Invoke(Sum());
            }
        }