/// <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()); }
/// <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]); // Добавить товар в корзину. } } }
/// <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()); } }