Sha256: 01b49c83cd53d250a070597d6894b5cfc16d3311f6d2125b06cb8a8c261a37b5
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
# frozen_string_literal: true require 'work_day' require 'active_support' require 'active_support/core_ext/date' module ROI class FinancialResult attr_reader :start_date, :end_date, :rentabilities def initialize(rentabilities, start_date, end_date) @rentabilities = rentabilities @start_date = start_date @end_date = end_date end def current_month scope_start = WorkDay.next_after(end_date.beginning_of_month, 0) format_financial(scope_start, end_date) end def months(amount) scope_start = (end_date - amount.months + 1.month).beginning_of_month check_gaps_and_format(scope_start, end_date) end def current_year scope_start = WorkDay.next_after(end_date.beginning_of_year, 0) format_financial(scope_start, end_date) end def years_ago(amount) scope_end = (end_date - amount.year).end_of_year scope_start = scope_end.beginning_of_year format_financial(scope_start, scope_end) end def portfolio format_financial(start_date, end_date) end private def scoped_rentabilities(scope_start, scope_end) rentabilities.values.select.each do |line| line.date.between?(scope_start, scope_end) end end def format_financial(scope_start, scope_end) return unless scope_start && scope_end total = scoped_rentabilities(scope_start, scope_end).sum do |line| line.try(:daily_result) || 0 end.round(2) total != 0 ? total : nil end def check_gaps_and_format(scope_start, scope_end) return unless scope_start >= start_date scoped_rentabilities(scope_start, scope_end).each do |line| return nil if line.try(:have_position) == false end format_financial(scope_start, scope_end) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
roi_calculator-2.0.0 | lib/roi/financial_result.rb |