From 0a303ccbd53d3308da7bb4854c62ed31914b6c05 Mon Sep 17 00:00:00 2001 From: Zach Gollwitzer Date: Wed, 9 Oct 2024 18:11:36 -0400 Subject: [PATCH] Fix currency formatting for 0 values (#1276) * Fix currency formatting for 0 values * Fix loan payment calculation for zero interest rate --- app/controllers/pages_controller.rb | 2 +- app/models/account/entry.rb | 8 ++++++-- app/models/loan.rb | 6 +++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index b3981939..f495d465 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -26,7 +26,7 @@ class PagesController < ApplicationController # TODO: Placeholders for trendlines placeholder_series_data = 10.times.map do |i| - { date: Date.current - i.days, value: Money.new(0) } + { date: Date.current - i.days, value: Money.new(0, Current.family.currency) } end @investing_series = TimeSeries.new(placeholder_series_data) end diff --git a/app/models/account/entry.rb b/app/models/account/entry.rb index a789dcb0..5b5ada42 100644 --- a/app/models/account/entry.rb +++ b/app/models/account/entry.rb @@ -129,17 +129,21 @@ class Account::Entry < ApplicationRecord end def income_total(currency = "USD") - without_transfers.account_transactions.includes(:entryable) + total = without_transfers.account_transactions.includes(:entryable) .where("account_entries.amount <= 0") .map { |e| e.amount_money.exchange_to(currency, date: e.date, fallback_rate: 0) } .sum + + Money.new(total, currency) end def expense_total(currency = "USD") - without_transfers.account_transactions.includes(:entryable) + total = without_transfers.account_transactions.includes(:entryable) .where("account_entries.amount > 0") .map { |e| e.amount_money.exchange_to(currency, date: e.date, fallback_rate: 0) } .sum + + Money.new(total, currency) end def search(params) diff --git a/app/models/loan.rb b/app/models/loan.rb index 11eb3058..be8e8c2b 100644 --- a/app/models/loan.rb +++ b/app/models/loan.rb @@ -8,7 +8,11 @@ class Loan < ApplicationRecord annual_rate = interest_rate / 100.0 monthly_rate = annual_rate / 12.0 - payment = (account.original_balance.amount * monthly_rate * (1 + monthly_rate)**term_months) / ((1 + monthly_rate)**term_months - 1) + if monthly_rate.zero? + payment = account.original_balance.amount / term_months + else + payment = (account.original_balance.amount * monthly_rate * (1 + monthly_rate)**term_months) / ((1 + monthly_rate)**term_months - 1) + end Money.new(payment.round, account.currency) end