Class: Decidim::Budgets::Order
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Decidim::Budgets::Order
- Includes:
- DownloadYourData, NewsletterParticipant
- Defined in:
- decidim-budgets/app/models/decidim/budgets/order.rb
Overview
The data store for a Order in the Decidim::Budgets component. It is unique for each user and component and contains a collection of projects
Class Method Summary collapse
- .export_serializer ⇒ Object
- .newsletter_participant_ids(component) ⇒ Object
- .user_collection(user) ⇒ Object
Instance Method Summary collapse
-
#allocation_for(project) ⇒ Object
Public: Returns the numeric amount the given project should allocate from the total available allocation when it is added to the order.
-
#available_allocation ⇒ Object
Public: Returns the available budget allocation the user is able to allocate to this order or the maximum amount of projects to be selected in case the project selection voting is enabled.
-
#budget_percent ⇒ Object
Public: Returns the order budget percent from the settings total budget or the progress for selected projects if the selected project rule is enabled.
-
#can_checkout? ⇒ Boolean
Public: Check if the order total budget is enough to checkout.
-
#checked_out? ⇒ Boolean
Public: Returns true if the order has been checked out.
-
#maximum_budget ⇒ Object
Public: Returns the required maximum budget to checkout.
-
#maximum_projects ⇒ Object
Public: Returns the required maximum projects to checkout.
-
#minimum_budget ⇒ Object
Public: Returns the required minimum budget to checkout.
-
#minimum_projects ⇒ Object
Public: Returns the required minimum projects to checkout.
-
#minimum_projects_rule? ⇒ Boolean
Public: Returns if it is required a minimum projects limit to checkout.
-
#projects_rule? ⇒ Boolean
Public: Returns true if the project voting rule is enabled.
-
#total ⇒ Object
Public: For budget voting returns the total budget and for project selection voting, returns the amount of selected projects.
-
#total_budget ⇒ Object
Public: Returns the sum of project budgets.
-
#total_projects ⇒ Object
Public: Returns the count of projects.
Class Method Details
.export_serializer ⇒ Object
172 173 174 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 172 def self.export_serializer Decidim::Budgets::DownloadYourDataBudgetsOrderSerializer end |
.newsletter_participant_ids(component) ⇒ Object
176 177 178 179 180 181 182 183 184 185 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 176 def self.(component) Decidim::Budgets::Order.finished .joins(budget: [:component]) .where(budget: { decidim_components: { id: component.id } }) .group(:decidim_user_id) .pluck(:decidim_user_id) .flatten.compact end |
.user_collection(user) ⇒ Object
168 169 170 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 168 def self.user_collection(user) where(decidim_user_id: user.id) end |
Instance Method Details
#allocation_for(project) ⇒ Object
Public: Returns the numeric amount the given project should allocate from the total available allocation when it is added to the order. The allocation is normally the project’s budget but for project selection voting, the allocation is one.
66 67 68 69 70 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 66 def allocation_for(project) return 1 if projects_rule? project.budget_amount end |
#available_allocation ⇒ Object
Public: Returns the available budget allocation the user is able to allocate to this order or the maximum amount of projects to be selected in case the project selection voting is enabled.
56 57 58 59 60 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 56 def available_allocation return maximum_projects if projects_rule? maximum_budget end |
#budget_percent ⇒ Object
Public: Returns the order budget percent from the settings total budget or the progress for selected projects if the selected project rule is enabled
109 110 111 112 113 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 109 def budget_percent return (total_projects.to_f / maximum_projects) * 100 if projects_rule? (total_budget.to_f / budget.total_budget) * 100 end |
#can_checkout? ⇒ Boolean
Public: Check if the order total budget is enough to checkout
96 97 98 99 100 101 102 103 104 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 96 def can_checkout? if projects_rule? total_projects >= minimum_projects && total_projects <= maximum_projects elsif minimum_projects_rule? total_projects >= minimum_projects else total_budget.to_f >= minimum_budget end end |
#checked_out? ⇒ Boolean
Public: Returns true if the order has been checked out
91 92 93 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 91 def checked_out? checked_out_at.present? end |
#maximum_budget ⇒ Object
Public: Returns the required maximum budget to checkout
124 125 126 127 128 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 124 def maximum_budget return 0 unless budget budget.total_budget.to_f end |
#maximum_projects ⇒ Object
Public: Returns the required maximum projects to checkout
158 159 160 161 162 163 164 165 166 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 158 def maximum_projects return nil unless budget if projects_rule? budget.settings.vote_selected_projects_maximum else 0 end end |
#minimum_budget ⇒ Object
Public: Returns the required minimum budget to checkout
116 117 118 119 120 121 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 116 def minimum_budget return 0 unless budget return 0 if minimum_projects_rule? || projects_rule? budget.total_budget.to_f * (budget.settings.vote_threshold_percent.to_f / 100) end |
#minimum_projects ⇒ Object
Public: Returns the required minimum projects to checkout
145 146 147 148 149 150 151 152 153 154 155 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 145 def minimum_projects return 0 unless budget if minimum_projects_rule? budget.settings.vote_minimum_budget_projects_number elsif projects_rule? budget.settings.vote_selected_projects_minimum else 0 end end |
#minimum_projects_rule? ⇒ Boolean
Public: Returns if it is required a minimum projects limit to checkout
131 132 133 134 135 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 131 def minimum_projects_rule? return unless budget budget.settings.vote_rule_minimum_budget_projects_enabled end |
#projects_rule? ⇒ Boolean
Public: Returns true if the project voting rule is enabled
138 139 140 141 142 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 138 def projects_rule? return unless budget budget.settings.vote_rule_selected_projects_enabled end |
#total ⇒ Object
Public: For budget voting returns the total budget and for project selection voting, returns the amount of selected projects.
84 85 86 87 88 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 84 def total return total_projects if projects_rule? total_budget end |
#total_budget ⇒ Object
Public: Returns the sum of project budgets
73 74 75 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 73 def total_budget projects.to_a.sum(&:budget_amount) end |
#total_projects ⇒ Object
Public: Returns the count of projects
78 79 80 |
# File 'decidim-budgets/app/models/decidim/budgets/order.rb', line 78 def total_projects projects.count end |