consul/consul

View on GitHub
app/components/admin/stats/sdg/goal_component.rb

Summary

Maintainability
A
0 mins
Test Coverage
class Admin::Stats::SDG::GoalComponent < ApplicationComponent
  with_collection_parameter :goal

  attr_reader :goal

  def initialize(goal:)
    @goal = goal
  end

  private

    def stats
      [
        [t("admin.stats.sdg.polls"), goal.polls.count],
        [t("admin.stats.sdg.proposals"), goal.proposals.count],
        [t("admin.stats.sdg.debates"), goal.debates.count]
      ]
    end

    def bugdets_stats
      Budget.order(created_at: :desc).map do |budget|
        [
          budget.name,
          [t("admin.stats.sdg.budget_investments.sent"), sent(budget)],
          [t("admin.stats.sdg.budget_investments.winners"), winners(budget), featured],
          [t("admin.stats.sdg.budget_investments.amount"), amount(budget), featured]
        ]
      end
    end

    def sent(budget)
      investments(budget).count
    end

    def winners(budget)
      investments(budget).winners.count
    end

    def amount(budget)
      number_to_currency(investments(budget).winners.sum(:price), precision: 0)
    end

    def investments(budget)
      goal.budget_investments.by_budget(budget)
    end

    def featured
      { class: "featured" }
    end
end