mirror of
https://github.com/we-promise/sure.git
synced 2026-04-17 19:14:11 +00:00
* Move Valuation to Account namespace * Move account history to controller * Clean up valuation controller and views * Translations and cleanup * Remove unused scopes and methods * Pass brakeman
53 lines
1.3 KiB
Ruby
53 lines
1.3 KiB
Ruby
class Account::Valuation < ApplicationRecord
|
|
include Monetizable
|
|
|
|
monetize :value
|
|
|
|
belongs_to :account
|
|
|
|
validates :account, :date, :value, presence: true
|
|
validates :date, uniqueness: { scope: :account_id }
|
|
|
|
scope :chronological, -> { order(:date) }
|
|
scope :reverse_chronological, -> { order(date: :desc) }
|
|
|
|
def trend
|
|
@trend ||= create_trend
|
|
end
|
|
|
|
def first_of_series?
|
|
account.valuations.chronological.limit(1).pluck(:date).first == self.date
|
|
end
|
|
|
|
def last_of_series?
|
|
account.valuations.reverse_chronological.limit(1).pluck(:date).first == self.date
|
|
end
|
|
|
|
def sync_account_later
|
|
if destroyed?
|
|
sync_start_date = previous_valuation&.date
|
|
else
|
|
sync_start_date = [ date_previously_was, date ].compact.min
|
|
end
|
|
|
|
account.sync_later(sync_start_date)
|
|
end
|
|
|
|
private
|
|
|
|
def previous_valuation
|
|
@previous_valuation ||= self.account
|
|
.valuations
|
|
.where("date < ?", date)
|
|
.order(date: :desc)
|
|
.first
|
|
end
|
|
|
|
def create_trend
|
|
TimeSeries::Trend.new \
|
|
current: self.value,
|
|
previous: previous_valuation&.value,
|
|
favorable_direction: account.favorable_direction
|
|
end
|
|
end
|