Beispiel #1
0
        public void CalculateBuildingCharge(ChargeBuilding building, IEnumerable <ChargeExpense> expenses)
        {
            var items = new List <ChargeItem>();

            foreach (var expense in expenses)
            {
                var shares = expense.CalculateExpenseShares(building, this, ApartmentId);
                items.AddRange(shares.Select(s => new ChargeItem {
                    Amount    = s.amount,
                    ExpenseId = expense.ExpenseId,
                    PayerId   = s.payerId
                }));
            }
            Items = items;
        }
Beispiel #2
0
        public IEnumerable <(int payerId, int amount)> CalculateExpenseShares(ChargeBuilding building, Charge charge, int apartmentId)
        {
            var intersectionStart = charge.From > From ? charge.From : From;
            var intersectionEnd   = charge.To > To ? To : charge.To;

            if ((To - From).Days == 0)
            {
                throw new InvalidOperationException("Invalid chagre was requested ");
            }

            var currentRangeAmount = Amount * (intersectionEnd - intersectionStart).Days / (To - From).Days;
            var buildingService    = new BuildingTimeSpanInfoService(building, From, To);

            return(Formula.CalculateShares(buildingService, currentRangeAmount, apartmentId));
        }
 public BuildingTimeSpanInfoService(ChargeBuilding building, DateTime from, DateTime to)
 {
     Building = building;
     From     = from;
     To       = to;
 }