public void EvaluateRateShouldCalculatedWithoutError() { //Act var exception = Record.Exception(() => FinancialCalculations.EvaluateRate(1.4, 48, 60000, 120000, 0, DueDate.EndOfPeriod)); //Assert exception.Should().BeNull(); }
public void OptionalPresentValueShouldCalculatedWithoutError() { //Act var exception = Record.Exception(() => FinancialCalculations.PresentValueOptional(new[] { 1.2, 2 }, 1.4)); //Assert exception.Should().BeNull(); }
public void ReinvestedInternalReturnRateShouldThrowExceptionWhenFinancialRateIsNegative() { //Act var exception = Record.Exception(() => FinancialCalculations.ReinvestedInternalReturnRate(new[] { 1.2, 2 }, -1, 1.8)); //Assert exception.Should().NotBeNull(); }
public void CapitalPaymentShouldThrowExceptionWhenPeriodIsLessOrEqualToZero() { //Act var exception = Record.Exception(() => FinancialCalculations.CapitalPayment(1.2, 0, 60, 60000, 0, DueDate.EndOfPeriod)); //Assert exception.Should().NotBeNull(); }
public void ReinvestedInternalReturnRateShouldCalculatedWithoutError() { //ActSSS var exception = Record.Exception(() => FinancialCalculations.ReinvestedInternalReturnRate(new[] { -4.8, -20 }, 2.4, 1.8)); //Assert exception.Should().BeNull(); }
public void NumberOfPeriodsShouldCalculatedWithoutError() { //Act var exception = Record.Exception(() => FinancialCalculations.NumberOfPeriods(1.4, 50000, 60000, 0, DueDate.EndOfPeriod)); //Assert exception.Should().BeNull(); }
public void CapitalPaymentShouldCalculatedWithoutError() { //Act var exception = Record.Exception(() => FinancialCalculations.CapitalPayment(1.4, 48, 60, 60000, 0, DueDate.EndOfPeriod)); //Assert exception.Should().BeNull(); }
public void NetPresentValueShouldThrowExceptionWithNullParameters() { //Act var exception = Record.Exception(() => FinancialCalculations.NetPresentValue(1.4, null)); //Assert exception.Should().NotBeNull(); }
public void NetPresentValueShouldCalculatedWithoutError() { //Act var exception = Record.Exception(() => FinancialCalculations.NetPresentValue(1.4, new[] { 1.2, 2 })); //Assert exception.Should().BeNull(); }
public void FutureValueInternalShouldCalculatedWithoutError() { //Act var exception = Record.Exception(() => FinancialCalculations.FutureValueInternal(1.4, 48, 60000, 120000, DueDate.EndOfPeriod)); //Assert exception.Should().BeNull(); }
public void InternalReturnRateShouldThrowDivideByZeroException(double[] cashFlow, double guess) { //Act var exception = Record.Exception(() => FinancialCalculations.InternalReturnRate(cashFlow, guess)); //Assert exception.Should().NotBeNull(); exception.GetType().Should().Be(typeof(ArgumentException)); }
public void PaymentShouldCalculateCorrectly(double rate, short numberPeriods, double presentValue, double futureValue, DueDate due) { //Act var correctSut = Math.Abs(Financial.Pmt(rate, numberPeriods, presentValue, futureValue, PaymentDue.EndOfPeriod)); var sut = Math.Abs(FinancialCalculations.Payment(rate, numberPeriods, presentValue, futureValue, due)); //Assert sut.Should().Be(correctSut); }
public void NumberOfPeriodsShouldCalculateCorrectly(double rate, double presentValue, double payment, double futureValue, DueDate due) { //Act var correctSut = Financial.NPer(rate, payment, presentValue, futureValue, PaymentDue.EndOfPeriod); var sut = FinancialCalculations.NumberOfPeriods(rate, payment, presentValue, futureValue, due); //Assert sut.Should().Be((short)correctSut); }
public void Calculate_Total_Net_Value() { // Arrange decimal total = 1000.00m; // Act decimal gstValue = FinancialCalculations.CalculateTotalNetFromTotalGross(total); // Assert Assert.AreEqual(869.57m, gstValue); }
public void Calculate_GST_Value() { // Arrange decimal total = 1000.00m; // Act decimal gstValue = FinancialCalculations.CalculateGSTValueFromTotalGross(total); // Assert Assert.AreEqual(130.43m, gstValue); }
public void RateShouldCalculateCorrectly(short numberPeriods, double payment, double presentValue, double futureValue, DueDate due) { //Act var correctSut = Financial.Rate(numberPeriods, -payment, presentValue, futureValue, PaymentDue.EndOfPeriod); var sut = FinancialCalculations.Rate(numberPeriods, -payment, presentValue, futureValue, due); var isEqual = TestHelper.IsEqualResultsWithExcelFinancialFunctions(sut, correctSut); //Assert isEqual.Should().BeTrue(); }
public void PresentValueShouldCalculateCorrectly(double rate, short numberPeriods, double payment, double futureValue, DueDate due) { //Act var correctSut = Financial.Pv(rate, numberPeriods, payment, futureValue, PaymentDue.EndOfPeriod); var sut = FinancialCalculations.PresentValue(rate, numberPeriods, payment, futureValue, due); var isEqual = TestHelper.IsEqualDoubles(sut, correctSut); //Assert isEqual.Should().BeTrue(); }
public void CapitalPaymentShouldCalculateCorrectly(double rate, short numberPeriods, double presentValue, double futureValue, DueDate due) { //Act var correctSut = Math.Abs(Financial.CumPrinc(rate, numberPeriods, presentValue, 1, 1, PaymentDue.EndOfPeriod)); var sut = Math.Abs(FinancialCalculations.CapitalPayment(rate, 1, numberPeriods, presentValue, futureValue, due)); var isEqual = TestHelper.IsEqualDoubles(sut, correctSut); //Assert isEqual.Should().BeTrue(); }
/// <summary> /// Extracts expense data from a block of text /// </summary> /// <param name="text">Text to process</param> /// <param name="cancellationToken">Default cancellation token</param> /// <returns></returns> public async Task <ExpenseResourceModel> ExtractExpenseAsync(string text, CancellationToken cancellationToken = default) { ExpenseResourceModel resourceModel = new ExpenseResourceModel(); await Task.Run(() => { if (string.IsNullOrEmpty(text)) { throw new EmailProcessingException("Text block can not be empty"); } // Load the email text as html doc HtmlDocument htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(text); // Detect tags that are not closed if (htmlDocument.ContainsUnclosedTags()) { throw new UnclosedTagException("Block of text has unclosed tag(s)"); } // Extract data HtmlNode expenseNode = htmlDocument.DocumentNode.SelectSingleNode("//expense"); if (expenseNode == null) { throw new EmailProcessingException("Expense element does not exist or is invalid"); } if (expenseNode.HasChildNodes) { HtmlNode costCentre = expenseNode.SelectSingleNode("//cost_centre"); HtmlNode total = expenseNode.SelectSingleNode("//total"); HtmlNode paymentMethod = expenseNode.SelectSingleNode("//payment_method"); if (total == null) { throw new MissingElementException("Total node is required"); } decimal totalValue = decimal.Parse(total.InnerText, CultureInfo.InvariantCulture); resourceModel.CostCentre = costCentre != null ? costCentre.InnerText : "UNKNOWN"; resourceModel.Total = totalValue; resourceModel.PaymentMethod = paymentMethod.InnerText; resourceModel.TotalExcludingGST = FinancialCalculations.CalculateTotalNetFromTotalGross(totalValue); resourceModel.GSTValue = FinancialCalculations.CalculateGSTValueFromTotalGross(totalValue); } }, cancellationToken); return(resourceModel); }
public void TestAddTwoNumbers() { // Arrange SByte vFirstNumber = 25; SByte vSecondNumber = 50; SByte vExpectedResult = 76; // Act SByte vResult = FinancialCalculations.AddTwoNumbers(vFirstNumber, vSecondNumber); // Assert Assert.AreEqual(vExpectedResult, vResult); }
public async Task UpdateUser(AutumnUserDto user) { try { var autumnUser = await UserManager.FindByIdAsync(AbpSession.UserId.ToString()); autumnUser.Age = user.Age; autumnUser.CountryId = user.CountryId; autumnUser.EmailAddress = user.EmailAddress; autumnUser.Name = user.Name; autumnUser.Gender = (Gender)user.Gender; autumnUser.Surname = "xyz"; CheckErrors(await UserManager.UpdateAsync(autumnUser)); var userRetiretmentData = await _userRetirementPlanRepository.GetAll().FirstOrDefaultAsync(r => r.UserId == AbpSession.UserId); userRetiretmentData.RetirementGoalOptions = (RetirementGoals)user.RetirementGoalOptions; userRetiretmentData.TotalMonthlyIncome = user.TotalMonthlyIncome; userRetiretmentData.TotalMonthlyExpences = user.TotalMonthlyExpences; userRetiretmentData.InitialSaved = user.InitialSaved; userRetiretmentData.InitialOwed = user.InitialOwed; userRetiretmentData.DesiredRetirementSum = user.DesiredRetirementSum; userRetiretmentData.DesiredRetirementIncome = user.DesiredRetirementIncome; userRetiretmentData.DesiredLegacyAmount = user.DesiredLegacyAmount; userRetiretmentData.DesiredRetirementAge = user.DesiredRetirementAge; var userRetirementPlan = ObjectMapper.Map <UserRetirementPlanDto>(user); userRetirementPlan.UserId = AbpSession.UserId.Value; userRetirementPlan.ReturnRate = 0; var countryData = _countryRepository.FirstOrDefault((int)user.CountryId); switch (userRetirementPlan.RetirementGoalOptions) { //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementSum: if (userRetirementPlan.DesiredLegacyAmount == null) { userRetirementPlan.DesiredLegacyAmount = 0; } userRetiretmentData.DesiredRetirementIncome = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, -(double)userRetirementPlan.DesiredRetirementSum, (double)userRetirementPlan.DesiredLegacyAmount) / 12; userRetiretmentData.InitialNet = userRetirementPlan.InitialSaved + userRetirementPlan.InitialOwed; userRetiretmentData.RequiredSavings = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetiretmentData.InitialNet, -(double)userRetirementPlan.DesiredRetirementSum) / 12; userRetiretmentData.TotalMonthlySavings = userRetirementPlan.TotalMonthlyIncome - userRetirementPlan.TotalMonthlyExpences; userRetiretmentData.LikelyRetirementSum = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetiretmentData.TotalMonthlySavings * -12, (double)-userRetiretmentData.InitialNet) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetiretmentData.LikelyRetirementLegacy = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetiretmentData.DesiredRetirementIncome * 12, -(double)userRetiretmentData.LikelyRetirementSum); break; //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementIncome: if (userRetirementPlan.DesiredLegacyAmount == null) { userRetirementPlan.DesiredLegacyAmount = 0; } userRetiretmentData.DesiredRetirementSum = FinancialCalculations.PV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * -12, (double)userRetirementPlan.DesiredLegacyAmount) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetiretmentData.InitialNet = userRetirementPlan.InitialSaved + userRetirementPlan.InitialOwed; userRetiretmentData.RequiredSavings = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetiretmentData.InitialNet, -(double)userRetiretmentData.DesiredRetirementSum) / 12; userRetiretmentData.TotalMonthlySavings = userRetirementPlan.TotalMonthlyIncome - userRetirementPlan.TotalMonthlyExpences; userRetiretmentData.LikelyRetirementSum = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetiretmentData.TotalMonthlySavings * -12, (double)-userRetiretmentData.InitialNet) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetiretmentData.LikelyRetirementLegacy = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * 12, -(double)userRetiretmentData.LikelyRetirementSum); break; //Variable age case RetirementGoalsEnumDto.DesiredLegacyAmount: userRetiretmentData.DesiredRetirementAge = countryData.RetirementAge; userRetiretmentData.DesiredRetirementSum = FinancialCalculations.PV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * -12, (double)userRetirementPlan.DesiredLegacyAmount) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetiretmentData.InitialNet = userRetirementPlan.InitialSaved + userRetirementPlan.InitialOwed; userRetiretmentData.TotalMonthlySavings = userRetirementPlan.TotalMonthlyIncome - userRetirementPlan.TotalMonthlyExpences; userRetiretmentData.RequiredSavings = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetiretmentData.InitialNet, -(double)userRetiretmentData.DesiredRetirementSum) / 12; userRetiretmentData.LikelyRetirementSum = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetiretmentData.InitialNet * -12, (double)-userRetiretmentData.InitialNet) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetiretmentData.LikelyRetirementAge = Math.Round((((double)userRetirementPlan.DesiredRetirementSum - (double)userRetiretmentData.LikelyRetirementSum) / (((double)userRetiretmentData.TotalMonthlySavings + (double)userRetirementPlan.DesiredRetirementIncome) * 12)) + (double)userRetirementPlan.DesiredRetirementAge, MidpointRounding.AwayFromZero); break; //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementAge: if (userRetirementPlan.DesiredLegacyAmount == null) { userRetirementPlan.DesiredLegacyAmount = 0; } userRetiretmentData.DesiredRetirementSum = FinancialCalculations.PV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * -12, (double)userRetirementPlan.DesiredLegacyAmount) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetiretmentData.InitialNet = userRetirementPlan.InitialSaved + userRetirementPlan.InitialOwed; userRetiretmentData.RequiredSavings = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetiretmentData.InitialNet, -(double)userRetiretmentData.DesiredRetirementSum) / 12; userRetiretmentData.TotalMonthlySavings = userRetirementPlan.TotalMonthlyIncome - userRetirementPlan.TotalMonthlyExpences; userRetiretmentData.LikelyRetirementSum = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetiretmentData.TotalMonthlySavings * -12, (double)-userRetiretmentData.InitialNet) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetiretmentData.LikelyRetirementLegacy = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * 12, -(double)userRetiretmentData.LikelyRetirementSum); break; case RetirementGoalsEnumDto.PlaceToLiveAfterRetirement: break; default: userRetiretmentData.DesiredRetirementAge = countryData.RetirementAge; userRetiretmentData.DesiredLegacyAmount = 0; break; } await _userRetirementPlanRepository.UpdateAsync(userRetiretmentData); } catch (UserFriendlyException e) { throw new UserFriendlyException(e.Message); } catch (Exception e) { throw new Exception(e.Message); } }
public async Task CreateUser(AutumnUserDto input) { try { var user = ObjectMapper.Map <User>(input); //Passwords is not mapped (see mapping configuration) user.TenantId = null; await UserManager.InitializeOptionsAsync(AbpSession.TenantId); foreach (var validator in _passwordValidators) { CheckErrors(await validator.ValidateAsync(UserManager, user, input.Password)); } user.Password = _passwordHasher.HashPassword(user, input.Password); user.Surname = "xyz"; //Assign roles var role = await _roleManager.GetRoleByNameAsync(StaticRoleNames.Host.User); user.Roles = new Collection <UserRole>(); user.CreatorUserId = null; user.DeleterUserId = null; user.LastModifierUserId = null; user.Roles.Add(new UserRole(null, user.Id, role.Id)); CheckErrors(await UserManager.CreateAsync(user)); await CurrentUnitOfWork.SaveChangesAsync(); //To get new user's Id. //Notifications await _notificationSubscriptionManager.SubscribeToAllAvailableNotificationsAsync(user.ToUserIdentifier()); await _appNotifier.WelcomeToTheApplicationAsync(user); //Organization Units //await UserManager.SetOrganizationUnitsAsync(user, input.OrganizationUnits.ToArray()); //Send activation email //if (input.SendActivationEmail) //{ // user.SetNewEmailConfirmationCode(); // await _userEmailer.SendEmailActivationLinkAsync( // user, // AppUrlService.CreateEmailActivationUrlFormat(AbpSession.TenantId), // input.User.Password // ); //} var userRetirementPlan = ObjectMapper.Map <UserRetirementPlanDto>(input); userRetirementPlan.UserId = user.Id; userRetirementPlan.ReturnRate = 0; var countryData = _countryRepository.FirstOrDefault((int)user.CountryId); switch (userRetirementPlan.RetirementGoalOptions) { //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementSum: if (userRetirementPlan.DesiredLegacyAmount == null) { userRetirementPlan.DesiredLegacyAmount = 0; } userRetirementPlan.DesiredRetirementIncome = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, -(double)userRetirementPlan.DesiredRetirementSum, (double)userRetirementPlan.DesiredLegacyAmount) / 12; userRetirementPlan.InitialNet = userRetirementPlan.InitialSaved - userRetirementPlan.InitialOwed; userRetirementPlan.RequiredSavings = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetirementPlan.InitialNet, -(double)userRetirementPlan.DesiredRetirementSum) / 12; userRetirementPlan.TotalMonthlySavings = userRetirementPlan.TotalMonthlyIncome - userRetirementPlan.TotalMonthlyExpences; userRetirementPlan.LikelyRetirementSum = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetirementPlan.TotalMonthlySavings * -12, (double)-userRetirementPlan.InitialNet) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetirementPlan.LikelyRetirementLegacy = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * 12, -(double)userRetirementPlan.LikelyRetirementSum); break; //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementIncome: if (userRetirementPlan.DesiredLegacyAmount == null) { userRetirementPlan.DesiredLegacyAmount = 0; } userRetirementPlan.DesiredRetirementSum = FinancialCalculations.PV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * -12, (double)userRetirementPlan.DesiredLegacyAmount) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetirementPlan.InitialNet = userRetirementPlan.InitialSaved - userRetirementPlan.InitialOwed; userRetirementPlan.RequiredSavings = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetirementPlan.InitialNet, -(double)userRetirementPlan.DesiredRetirementSum) / 12; userRetirementPlan.TotalMonthlySavings = userRetirementPlan.TotalMonthlyIncome - userRetirementPlan.TotalMonthlyExpences; userRetirementPlan.LikelyRetirementSum = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetirementPlan.TotalMonthlySavings * -12, (double)-userRetirementPlan.InitialNet) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetirementPlan.LikelyRetirementLegacy = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * 12, -(double)userRetirementPlan.LikelyRetirementSum); break; //Variable age case RetirementGoalsEnumDto.DesiredLegacyAmount: userRetirementPlan.DesiredRetirementAge = countryData.RetirementAge; userRetirementPlan.DesiredRetirementSum = FinancialCalculations.PV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * -12, (double)userRetirementPlan.DesiredLegacyAmount) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetirementPlan.InitialNet = userRetirementPlan.InitialSaved - userRetirementPlan.InitialOwed; userRetirementPlan.TotalMonthlySavings = userRetirementPlan.TotalMonthlyIncome - userRetirementPlan.TotalMonthlyExpences; userRetirementPlan.RequiredSavings = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetirementPlan.InitialNet, -(double)userRetirementPlan.DesiredRetirementSum) / 12; userRetirementPlan.LikelyRetirementSum = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetirementPlan.InitialNet * -12, (double)-userRetirementPlan.InitialNet) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetirementPlan.LikelyRetirementAge = Math.Round((((double)userRetirementPlan.DesiredRetirementSum - (double)userRetirementPlan.LikelyRetirementSum) / (((double)userRetirementPlan.TotalMonthlySavings + (double)userRetirementPlan.DesiredRetirementIncome) * 12)) + (double)userRetirementPlan.DesiredRetirementAge, MidpointRounding.AwayFromZero); break; //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementAge: if (userRetirementPlan.DesiredLegacyAmount == null) { userRetirementPlan.DesiredLegacyAmount = 0; } userRetirementPlan.DesiredRetirementSum = FinancialCalculations.PV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * -12, (double)userRetirementPlan.DesiredLegacyAmount) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetirementPlan.InitialNet = userRetirementPlan.InitialSaved - userRetirementPlan.InitialOwed; userRetirementPlan.RequiredSavings = FinancialCalculations.PMT((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetirementPlan.InitialNet, -(double)userRetirementPlan.DesiredRetirementSum) / 12; userRetirementPlan.TotalMonthlySavings = userRetirementPlan.TotalMonthlyIncome - userRetirementPlan.TotalMonthlyExpences; userRetirementPlan.LikelyRetirementSum = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age, (double)userRetirementPlan.TotalMonthlySavings * -12, (double)-userRetirementPlan.InitialNet) * (Math.Pow(1 + (double)userRetirementPlan.ReturnRate, (double)userRetirementPlan.DesiredRetirementAge - (double)user.Age)); userRetirementPlan.LikelyRetirementLegacy = FinancialCalculations.FV((double)userRetirementPlan.ReturnRate, countryData.LifeExpectancy - (double)userRetirementPlan.DesiredRetirementAge, (double)userRetirementPlan.DesiredRetirementIncome * 12, -(double)userRetirementPlan.LikelyRetirementSum); break; case RetirementGoalsEnumDto.PlaceToLiveAfterRetirement: break; default: userRetirementPlan.DesiredRetirementAge = countryData.RetirementAge; userRetirementPlan.DesiredLegacyAmount = 0; break; } await _userRetirementPlanRepository.InsertAsync(ObjectMapper.Map <UserRetirementPlan>(userRetirementPlan)); } catch (UserFriendlyException e) { throw new UserFriendlyException(e.Message); } catch (Exception e) { throw new Exception(e.Message); } }
public async Task <GraphDataDto> GenGraphData(AutumnUserDto userInfo) { try { userInfo.ReturnRate = 0; var countryData = _countryRepository.FirstOrDefault(userInfo.CountryId); GraphDataDto data = new GraphDataDto() { CurrentAge = userInfo.Age, DesRetSum = userInfo.DesiredRetirementSum == null ? 0 : (double)userInfo.DesiredRetirementSum, LifeExpectancy = countryData.LifeExpectancy, LikRetLegacies = new List <double>(), LikRetSums = new List <double>(), RetirementAges = new List <int>() }; if (userInfo.RetirementGoalOptions == RetirementGoalsEnumDto.DesiredRetirementSum || userInfo.RetirementGoalOptions == RetirementGoalsEnumDto.DesiredRetirementIncome || userInfo.RetirementGoalOptions == RetirementGoalsEnumDto.DesiredRetirementAge) { userInfo.DesiredLegacyAmount = 0; } for (int i = userInfo.Age + 1, j = 0; i < countryData.LifeExpectancy; i++) { data.RetirementAges.Add(i); switch (userInfo.RetirementGoalOptions) { //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementSum: userInfo.DesiredRetirementIncome = FinancialCalculations.PMT((double)userInfo.ReturnRate, i - userInfo.Age, -(double)userInfo.DesiredRetirementSum, (double)userInfo.DesiredLegacyAmount) / 12; userInfo.InitialNet = userInfo.InitialSaved - userInfo.InitialOwed; //userInfo.RequiredSavings = FinancialCalculations.PMT((double)userInfo.ReturnRate, i - userInfo.Age, (double)userInfo.InitialNet, -(double)userInfo.DesiredRetirementSum) / 12; userInfo.TotalMonthlySavings = userInfo.TotalMonthlyIncome - userInfo.TotalMonthlyExpences; data.LikRetSums.Add(FinancialCalculations.FV((double)userInfo.ReturnRate, i - userInfo.Age, (double)userInfo.TotalMonthlySavings * -12, (double)-userInfo.InitialNet) * (Math.Pow(1 + (double)userInfo.ReturnRate, i - userInfo.Age))); data.LikRetLegacies.Add(FinancialCalculations.FV((double)userInfo.ReturnRate, countryData.LifeExpectancy - i, (double)userInfo.DesiredRetirementIncome * 12, -(double)data.LikRetSums[j])); break; //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementIncome: userInfo.DesiredRetirementSum = FinancialCalculations.PV((double)userInfo.ReturnRate, countryData.LifeExpectancy - i, (double)userInfo.DesiredRetirementIncome * -12, (double)userInfo.DesiredLegacyAmount) * (Math.Pow(1 + (double)userInfo.ReturnRate, i - userInfo.Age)); userInfo.InitialNet = userInfo.InitialSaved - userInfo.InitialOwed; //userInfo.RequiredSavings = FinancialCalculations.PMT((double)userInfo.ReturnRate, i - userInfo.Age, (double)userInfo.InitialNet, -(double)userInfo.DesiredRetirementSum) / 12; userInfo.TotalMonthlySavings = userInfo.TotalMonthlyIncome - userInfo.TotalMonthlyExpences; data.LikRetSums.Add(FinancialCalculations.FV((double)userInfo.ReturnRate, i - userInfo.Age, (double)userInfo.TotalMonthlySavings * -12, (double)-userInfo.InitialNet) * Math.Pow(1 + (double)userInfo.ReturnRate, i - userInfo.Age)); data.LikRetLegacies.Add(FinancialCalculations.FV((double)userInfo.ReturnRate, countryData.LifeExpectancy - i, (double)userInfo.DesiredRetirementIncome * 12, -(double)data.LikRetSums[j])); break; //Variable age case RetirementGoalsEnumDto.DesiredLegacyAmount: userInfo.DesiredRetirementAge = i; userInfo.DesiredRetirementSum = FinancialCalculations.PV((double)userInfo.ReturnRate, countryData.LifeExpectancy - i, (double)userInfo.DesiredRetirementIncome * -12, (double)userInfo.DesiredLegacyAmount) * (Math.Pow(1 + (double)userInfo.ReturnRate, i - userInfo.Age)); userInfo.InitialNet = userInfo.InitialSaved - userInfo.InitialOwed; userInfo.TotalMonthlySavings = userInfo.TotalMonthlyIncome - userInfo.TotalMonthlyExpences; //userInfo.RequiredSavings = FinancialCalculations.PMT((double)userInfo.ReturnRate, i - userInfo.Age, (double)userInfo.InitialNet, -(double)userInfo.DesiredRetirementSum) / 12; data.LikRetSums.Add(FinancialCalculations.FV((double)userInfo.ReturnRate, i - userInfo.Age, (double)userInfo.InitialNet * -12, (double)-userInfo.InitialNet) * Math.Pow(1 + (double)userInfo.ReturnRate, i - userInfo.Age)); //userInfo.LikelyRetirementAge = Math.Round((((double)userInfo.DesiredRetirementSum - (double)data.LikRetSums[j]) / (((double)userInfo.TotalMonthlySavings + (double)userInfo.DesiredRetirementIncome) * 12)) + i, MidpointRounding.AwayFromZero); break; //Variable legacy case RetirementGoalsEnumDto.DesiredRetirementAge: userInfo.DesiredRetirementSum = FinancialCalculations.PV((double)userInfo.ReturnRate, countryData.LifeExpectancy - i, (double)userInfo.DesiredRetirementIncome * -12, (double)userInfo.DesiredLegacyAmount) * (Math.Pow(1 + (double)userInfo.ReturnRate, i - userInfo.Age)); userInfo.InitialNet = userInfo.InitialSaved - userInfo.InitialOwed; //userInfo.RequiredSavings = FinancialCalculations.PMT((double)userInfo.ReturnRate, i - userInfo.Age, (double)userInfo.InitialNet, -(double)userInfo.DesiredRetirementSum) / 12; userInfo.TotalMonthlySavings = userInfo.TotalMonthlyIncome - userInfo.TotalMonthlyExpences; data.LikRetSums.Add(FinancialCalculations.FV((double)userInfo.ReturnRate, i - userInfo.Age, (double)userInfo.TotalMonthlySavings * -12, (double)-userInfo.InitialNet) * Math.Pow(1 + (double)userInfo.ReturnRate, i - userInfo.Age)); data.LikRetLegacies.Add(FinancialCalculations.FV((double)userInfo.ReturnRate, countryData.LifeExpectancy - i, (double)userInfo.DesiredRetirementIncome * 12, -(double)data.LikRetSums[j])); break; case RetirementGoalsEnumDto.PlaceToLiveAfterRetirement: break; default: userInfo.DesiredRetirementAge = i; userInfo.DesiredLegacyAmount = 0; break; } } return(data); } catch (UserFriendlyException e) { throw new UserFriendlyException(e.Message); } catch (Exception e) { throw new Exception(e.Message); } }