Module: Decidim::Budgets::ProjectsHelper

Includes:
ApplicationHelper, MapHelper
Included in:
ApplicationHelper, BudgetListItemCell, ProjectLCell, ProjectMetadataCell, ProjectVoteButtonCell
Defined in:
app/helpers/decidim/budgets/projects_helper.rb

Overview

A helper to render order and budgets actions

Instance Method Summary collapse

Instance Method Details

#budget_confirm_disabled_attrObject



40
41
42
43
44
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 40

def budget_confirm_disabled_attr
  return if current_order_can_be_checked_out?

  %( disabled="disabled" ).html_safe
end

#budget_to_currency(budget) ⇒ Object

Render a budget as a currency

budget - A integer to represent a budget



13
14
15
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 13

def budget_to_currency(budget)
  number_to_currency budget, unit: Decidim.currency_unit, precision: 0
end

#budget_to_currency_with_html(budget) ⇒ Object

Render a budget as a currency with the HTML format

budget - A integer to represent a budget



20
21
22
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 20

def budget_to_currency_with_html(budget)
  number_to_currency(budget, unit: Decidim.currency_unit, precision: 0, format: t("number.currency.format.format_html"))
end

#budgets_select_tag(name, options: {}) ⇒ Object



132
133
134
135
136
137
138
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 132

def budgets_select_tag(name, options: {})
  select_tag(
    name,
    options_for_select(reference_budgets_for_select),
    options.merge(include_blank: I18n.t("decidim.budgets.prompt"))
  )
end

#current_order_budget_percentObject

Return a percentage of the current order budget from the total budget



25
26
27
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 25

def current_order_budget_percent
  current_order&.budget_percent.to_f.floor
end

#current_order_budget_percent_minimumObject

Return the minimum percentage of the current order budget from the total budget



30
31
32
33
34
35
36
37
38
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 30

def current_order_budget_percent_minimum
  return 0 if current_order.minimum_projects_rule?

  if current_order.projects_rule?
    (current_order.minimum_projects.to_f / current_order.maximum_projects)
  else
    component_settings.vote_threshold_percent
  end
end

#current_order_can_be_checked_out?Boolean

Return true if the user can continue to the checkout process

Returns:

  • (Boolean)


50
51
52
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 50

def current_order_can_be_checked_out?
  current_order&.can_checkout?
end

#current_order_minimum_reached?Boolean

Returns false if the current order does not have a rule for minimum budget Returns false if the current order has not reached the minimum budget Otherwise returns true

Returns:

  • (Boolean)


57
58
59
60
61
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 57

def current_order_minimum_reached?
  return false if current_order.minimum_budget.zero?

  current_order.total > current_order.minimum_budget
end

#current_rule_call_for_action_textObject



63
64
65
66
67
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 63

def current_rule_call_for_action_text
  return "" unless current_order

  t("minimum_reached", scope: "decidim.budgets.projects.order_progress.dynamic_help") if current_order_minimum_reached?
end

#current_rule_descriptionObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 69

def current_rule_description
  return unless current_order

  rule_text = if current_order_minimum_reached?
                ""
              elsif current_order.projects_rule?
                if current_order.minimum_projects.positive? && current_order.minimum_projects < current_order.maximum_projects
                  t(
                    "projects_rule.description",
                    scope: "decidim.budgets.projects.order_progress",
                    minimum_number: current_order.minimum_projects,
                    maximum_number: current_order.maximum_projects
                  )
                else
                  t(
                    "projects_rule_maximum_only.description",
                    scope: "decidim.budgets.projects.order_progress",
                    maximum_number: current_order.maximum_projects
                  )
                end
              elsif current_order.minimum_projects_rule?
                t(
                  "minimum_projects_rule.description",
                  scope: "decidim.budgets.projects.order_progress",
                  minimum_number: current_order.minimum_projects
                )
              else
                t(
                  "vote_threshold_percent_rule.description",
                  scope: "decidim.budgets.projects.order_progress",
                  minimum_budget: budget_to_currency(current_order.minimum_budget)
                )
              end

  return rule_text.html_safe if current_rule_call_for_action_text.nil?

  %(<strong>#{current_rule_call_for_action_text}</strong>. #{rule_text}).html_safe
end

#filter_addition_type_valuesObject



108
109
110
111
112
113
114
115
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 108

def filter_addition_type_values
  return [] if voting_finished?

  [
    ["all", t("all", scope: "decidim.budgets.projects.project_filter")],
    ["added", t("added", scope: "decidim.budgets.projects.project_filter")]
  ]
end

#filter_sectionsObject



117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 117

def filter_sections
  @filter_sections ||= begin
    items = []
    items.append(method: :with_any_status, collection: filter_status_values, label: t("decidim.budgets.projects.filters.status"), id: "status") if voting_finished?
    current_component.available_taxonomy_filters.each do |taxonomy_filter|
      items.append(method: "with_any_taxonomies[#{taxonomy_filter.root_taxonomy_id}]",
                   collection: filter_taxonomy_values_for(taxonomy_filter),
                   label: decidim_sanitize_translated(taxonomy_filter.name),
                   id: "taxonomy-#{taxonomy_filter.root_taxonomy_id}")
    end
  end

  items.reject { |item| item[:collection].blank? }
end

#reference_budgets_for_selectObject



140
141
142
143
144
145
146
# File 'app/helpers/decidim/budgets/projects_helper.rb', line 140

def reference_budgets_for_select
  references = Budget.joins(:component)
                     .where(component: { participatory_space: current_participatory_space }).order(weight: :asc)
  references.map do |budget|
    ["#{"&nbsp;" * 4} #{decidim_escape_translated(budget.title)}".html_safe, budget.id]
  end
end