示例#1
0
        private List<Transfer> CalculateTransfers(Expenditure[] expenditures, string[] partners)
        {
            var transfers = new List<Transfer>();

            var total = expenditures.Sum(x => x.Amount);
            var average = decimal.Round(total / partners.Length, 2);

            foreach (var partner in partners)
            {
                //если этот партнер что-то тратил и он потратил меньше среднего
                //то пусть довнесет разницу
                if (expenditures.Any(x => x.Who == partner))
                {
                    var partnerExpenditure = expenditures.First(x => x.Who == partner);

                    if (expenditures.First(x => x.Who == partner).Amount < average)
                    {
                        transfers.Add(new Transfer
                                    {
                                        Amount = average - partnerExpenditure.Amount,
                                        From = partner,
                                        To = FundName
                                    });
                    }
                    else
                    {
                        //если партнер потратил больше среднего
                        //то пусть возмет из общего котла
                        transfers.Add(new Transfer
                        {
                            Amount = partnerExpenditure.Amount - average,
                            From = FundName,
                            To = partner
                        });
                    }
                }
                else
                {
                    //партнер не тратил ничего, так что пусть вносит среднее
                    transfers.Add(new Transfer
                    {
                        Amount = average,
                        From = partner,
                        To = FundName
                    });
                }
            }

            return transfers;
        }