Ejemplo n.º 1
0
        public void Calculate(Settlement settlement)
        {
            var average   = settlement.GetAverage();
            var usersCost = settlement.GetUsersCost();

            Dictionary <Guid, decimal> usersDebts = new Dictionary <Guid, decimal>();

            foreach (var user in usersCost)
            {
                usersDebts.Add(user.Key, user.Value - average);
            }

            var ordered = usersDebts.OrderBy(x => x.Value);

            foreach (var user1 in ordered)
            {
                if (user1.Value < 0)
                {
                    foreach (var user2 in ordered)
                    {
                        if (user1.Key != user2.Key && user2.Value > 0 && user2.Value + user1.Value >= 0)
                        {
                            settlement.AddUserDebt(user1.Key, user2.Key, -user1.Value);
                            usersDebts[user2.Key] -= user1.Value;
                        }
                    }
                }
            }
        }