Sha256: 578ab3fb4145de46d9d5ed08bf152a9afc6c471fe1f358b26e06a789c9dbd6d6

Contents?: true

Size: 1.8 KB

Versions: 1

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 != 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_gross_profit(scope_start, scope_end)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
roi_calculator-2.1.0 lib/roi/gross_profit.rb