mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-25 08:09:38 +02:00
* Flatten Holding model * Flatten balance model * Entries domain renames * Fix valuations reference * Fix trades stream * Fix brakeman warnings * Fix tests * Replace existing entryable type references in DB
38 lines
1.1 KiB
Ruby
38 lines
1.1 KiB
Ruby
module Holding::Gapfillable
|
|
extend ActiveSupport::Concern
|
|
|
|
class_methods do
|
|
def gapfill(holdings)
|
|
filled_holdings = []
|
|
|
|
holdings.group_by { |h| h.security_id }.each do |security_id, security_holdings|
|
|
next if security_holdings.empty?
|
|
|
|
sorted = security_holdings.sort_by(&:date)
|
|
previous_holding = sorted.first
|
|
|
|
sorted.first.date.upto(Date.current) do |date|
|
|
holding = security_holdings.find { |h| h.date == date }
|
|
|
|
if holding
|
|
filled_holdings << holding
|
|
previous_holding = holding
|
|
else
|
|
# Create a new holding based on the previous day's data
|
|
filled_holdings << Holding.new(
|
|
account: previous_holding.account,
|
|
security: previous_holding.security,
|
|
date: date,
|
|
qty: previous_holding.qty,
|
|
price: previous_holding.price,
|
|
currency: previous_holding.currency,
|
|
amount: previous_holding.amount
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
filled_holdings
|
|
end
|
|
end
|
|
end
|