/// <summary> /// Übernahme des Einwurfs in das Münzdepot. /// Rückgabe des Retourgeldes aus der Kasse. Staffelung des Retourgeldes /// hängt vom Inhalt der Kasse ab. /// </summary> /// <param name="coins">Aktueller Zustand des Münzdepots</param> public void FinishPayment(IEnumerable <Coin> coins) { foreach (var v in ThrownInCoinValues .Split(";") .Select(s => Convert.ToInt32(s)) .GroupBy(s => s)) { coins .First(c => c.CoinValue == v.Key) .Amount += v.Count(); } coins = coins.OrderByDescending(c => c.CoinValue); int sum = ThrownInCents - Product.PriceInCents; foreach (Coin c in coins) { for (int i = 0; i < c.Amount && sum != 0; i++) { if (c.CoinValue <= sum) { ReturnCoinValues += c.CoinValue + ";"; sum -= c.CoinValue; c.Amount--; } } } if (ReturnCoinValues != null) { ReturnCoinValues = ReturnCoinValues.Substring(0, ReturnCoinValues.Length - 1); } else { ReturnCoinValues = "0"; } }