Beispiel #1
0
        public IEnumerable <(int payerId, int share)> CalculateShares(BuildingTimeSpanInfoService building, int amount, int apartmentId)
        {
            var areaFormula     = new AreaBaseFormula();
            var occupantFormula = new OccupantBasedFormula();

            var areaShares     = areaFormula.CalculateShares(building, amount * AreaPercent / 100, apartmentId);
            var occupantShares = areaFormula.CalculateShares(building, amount * (100 - AreaPercent) / 100, apartmentId);

            return(areaShares.Join(occupantShares, a => a.payerId, o => o.payerId, (a, o) => (a.payerId, a.share + o.share)));
        }
        public IEnumerable <(int payerId, int share)> CalculateShares(BuildingTimeSpanInfoService building, int amount, int apartmentId)
        {
            var payers    = building.GetApartmentPayerResidenceInfos(apartmentId);
            var totalDays = payers.Sum(p => p.DaysLived);
            var shares    = new List <(int payerId, int share)>();

            foreach (var payer in payers)
            {
                shares.Add((payer.PayerId, amount * payer.DaysLived / totalDays));
            }

            return(shares);
        }
        public IEnumerable <(int payerId, int share)> CalculateShares(BuildingTimeSpanInfoService building, int amount, int apartmentId)
        {
            var occupants = building.GetPayerResidenceInfos();
            var total     = occupants.Sum(o => o.DaysLived * o.OccupantCount);
            var shares    = new List <(int payerId, int share)>();

            if (total == 0)
            {
                return(new List <(int payerId, int share)>());
            }

            var payers = building.GetApartmentPayerResidenceInfos(apartmentId);

            foreach (var payer in payers)
            {
                shares.Add((payer.PayerId, payer.OccupantCount * payer.DaysLived / total));
            }

            return(shares);
        }