Sha256: 525a88ed3a91914fdb9cedc5c42ada55cc4e67101ce4aeb5fc04e5a27575bf1c

Contents?: true

Size: 1.8 KB

Versions: 3

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

require 'work_day'
require 'active_support'
require 'active_support/core_ext/date'

module ROI
  class GrossProfit
    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_gross_profit(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_gross_profit(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_gross_profit(scope_start, scope_end)
    end

    def portfolio
      format_gross_profit(start_date, end_date)
    end

    private

    def scoped_rentabilities(scope_start, scope_end)
      rentabilities.values.select.each do |line|
        line.reference_date.between?(scope_start, scope_end)
      end
    end

    def format_gross_profit(scope_start, scope_end)
      return unless scope_start && scope_end

      total = scoped_rentabilities(scope_start, scope_end).sum do |line|
        line.try(:gross_profit) || 0
      end.round(2)
      total.zero? ? nil : total
    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_gross_profit(scope_start, scope_end)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
roi_calculator-2.3.0 lib/roi/gross_profit.rb
roi_calculator-2.2.1 lib/roi/gross_profit.rb
roi_calculator-2.2.0 lib/roi/gross_profit.rb