2024-08-16 12:13:48 -04:00
|
|
|
class Issue::PricesMissing < Issue
|
|
|
|
store_accessor :data, :missing_prices
|
|
|
|
|
2024-08-16 16:08:27 -04:00
|
|
|
after_initialize :initialize_missing_prices
|
|
|
|
|
2024-08-16 12:13:48 -04:00
|
|
|
validates :missing_prices, presence: true
|
|
|
|
|
|
|
|
def append_missing_price(ticker, date)
|
|
|
|
missing_prices[ticker] ||= []
|
|
|
|
missing_prices[ticker] << date
|
|
|
|
end
|
|
|
|
|
|
|
|
def stale?
|
|
|
|
stale = true
|
2024-08-16 16:08:27 -04:00
|
|
|
|
2024-08-16 12:13:48 -04:00
|
|
|
missing_prices.each do |ticker, dates|
|
2024-08-16 16:08:27 -04:00
|
|
|
next unless issuable.owns_ticker?(ticker)
|
|
|
|
|
2024-08-26 15:36:27 +02:00
|
|
|
oldest_date = dates.min.to_date
|
2024-08-16 12:13:48 -04:00
|
|
|
expected_price_count = (oldest_date..Date.current).count
|
|
|
|
prices = Security::Price.find_prices(ticker: ticker, start_date: oldest_date)
|
|
|
|
stale = false if prices.count < expected_price_count
|
|
|
|
end
|
|
|
|
|
|
|
|
stale
|
|
|
|
end
|
2024-08-16 16:08:27 -04:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def initialize_missing_prices
|
|
|
|
self.missing_prices ||= {}
|
|
|
|
end
|
2024-08-16 12:13:48 -04:00
|
|
|
end
|