OpenSourcePolitics/decidim-module-budgets_enhanced

View on GitHub
app/helpers/decidim/budgets/projects_helper.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module Decidim
  module Budgets
    # A helper to render order and budgets actions
    module ProjectsHelper
      # Render a budget as a currency
      #
      # budget - A integer to represent a budget
      def budget_to_currency(budget)
        number_to_currency budget, unit: Decidim.currency_unit, precision: 0
      end

      # Return a percentage of the current order budget from the total budget
      def current_order_budget_percent
        current_order&.budget_percent.to_f.floor
      end

      # Return a percentage of the current order project from total projects
      def current_order_project_percent
        current_order&.project_percent.to_f.floor
      end

      def current_order_percent_minimum
        return 100 if component_settings.vote_per_project

        component_settings.vote_threshold_percent
      end

      def current_order_percent
        return current_order_budget_percent unless component_settings.vote_per_project

        current_order_project_percent
      end

      # Return true if the current order is checked out
      delegate :checked_out?, to: :current_order, prefix: true, allow_nil: true

      # Return true if the current order is pending
      delegate :pending?, to: :current_order, prefix: true, allow_nil: true

      # Return true if the user can continue to the checkout process
      def current_order_can_be_checked_out?
        current_order&.can_checkout?
      end

      def border_helper(project)
        return unless project&.category
        return "" if project.category.color.blank?

        "border: 1px solid #{project.category.color}; border-top: 3px solid #{project.category.color};"
      end

      # Return true if the order process is pending
      def current_order_is_pending?
        current_order&.pending?
      end

      def budget_summary_state
        return "budget_summary_state--completed" if current_order_can_be_checked_out?
        return "budget_summary_state--pending" if current_order_is_pending?

        ""
      end

      def progress_meter_state
        return "progress_meter_state--completed" if current_order_can_be_checked_out?
        return "progress_meter_state--pending" if current_order_is_pending?

        ""
      end
    end
  end
end