Beispiel #1
0
        public RetirementReport(IPensionAgeCalc pensionAgeCalc, IIncomeTaxCalculator incomeTaxCalculator, Family family, DateTime now, DateTime?givenRetirementDate, IAssumptions assumptions, ITaxSystem taxSystem)
        {
            _family              = family;
            _assumptions         = assumptions;
            TimeToRetirement     = new DateAmount(DateTime.MinValue, DateTime.MinValue);
            TargetRetirementDate = givenRetirementDate;

            var spendingStepInputs = family.SpendingStepInputs.OrderBy(input => input.Date).ToList();

            for (int i = 0; i < spendingStepInputs.Count; i++)
            {
                var endDate = i < spendingStepInputs.Count - 1 ? spendingStepInputs[i + 1].Date : family.PrimaryPerson.Dob.AddYears(100);
                SpendingSteps.Add(new SpendingStepReport(spendingStepInputs[i].Date, endDate.AddDays(-1), spendingStepInputs[i].NewAmount));
            }

            var monthlySpending = MonthlySpendingAt(now) / family.Persons.Count;

            foreach (var person in family.Persons)
            {
                Persons.Add(new PersonReport(pensionAgeCalc, incomeTaxCalculator, person, now, givenRetirementDate, _assumptions, monthlySpending, taxSystem));
            }
        }
Beispiel #2
0
        public decimal MonthlySpendingAt(DateTime date)
        {
            var spendingStep = SpendingSteps.FirstOrDefault(step => date.Date >= step.StartDate.Date && date.Date <= step.EndDate.Date) ?? SpendingSteps.Last();

            return(spendingStep.Spending / 12m);
        }