Investment projects statistics by participatory budget
The more recent budgets show first. The current budget will only show the amount of sent investments until the winner's phase.
This commit is contained in:
committed by
taitus
parent
205cbd7d82
commit
ebe8903c75
5
app/assets/stylesheets/admin/stats/sdg/goal.scss
Normal file
5
app/assets/stylesheets/admin/stats/sdg/goal.scss
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.sdg-goal-stats {
|
||||||
|
h4 {
|
||||||
|
@include grid-column-gutter;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
@import "leaflet";
|
@import "leaflet";
|
||||||
@import "sticky_overrides";
|
@import "sticky_overrides";
|
||||||
@import "tags";
|
@import "tags";
|
||||||
@import "admin/*";
|
@import "admin/**/*";
|
||||||
@import "sdg/**/*";
|
@import "sdg/**/*";
|
||||||
@import "sdg_management/*";
|
@import "sdg_management/*";
|
||||||
@import "sdg_management/**/*";
|
@import "sdg_management/**/*";
|
||||||
|
|||||||
@@ -6,5 +6,14 @@
|
|||||||
<% stats.each do |text, amount, options = {}| %>
|
<% stats.each do |text, amount, options = {}| %>
|
||||||
<%= render Admin::Stats::StatComponent.new(text: text, amount: amount, options: options) %>
|
<%= render Admin::Stats::StatComponent.new(text: text, amount: amount, options: options) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% bugdets_stats.each do |budget_name, *budget_stats| %>
|
||||||
|
<div class="budget-stats">
|
||||||
|
<h4><%= budget_name %></h4>
|
||||||
|
<% budget_stats.each do |text, amount, options = {}| %>
|
||||||
|
<%= render Admin::Stats::StatComponent.new(text: text, amount: amount, options: options) %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -13,15 +13,35 @@ class Admin::Stats::SDG::GoalComponent < ApplicationComponent
|
|||||||
[
|
[
|
||||||
[t("admin.stats.sdg.polls"), goal.polls.count],
|
[t("admin.stats.sdg.polls"), goal.polls.count],
|
||||||
[t("admin.stats.sdg.proposals"), goal.proposals.count],
|
[t("admin.stats.sdg.proposals"), goal.proposals.count],
|
||||||
[t("admin.stats.sdg.debates"), goal.debates.count],
|
[t("admin.stats.sdg.debates"), goal.debates.count]
|
||||||
[t("admin.stats.sdg.budget_investments.sent"), goal.budget_investments.count],
|
|
||||||
[t("admin.stats.sdg.budget_investments.winners"), goal.budget_investments.winners.count, featured],
|
|
||||||
[t("admin.stats.sdg.budget_investments.amount"), amount, featured]
|
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def amount
|
def bugdets_stats
|
||||||
number_to_currency(goal.budget_investments.winners.sum(:price), precision: 0)
|
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
|
end
|
||||||
|
|
||||||
def featured
|
def featured
|
||||||
|
|||||||
@@ -8,16 +8,22 @@ describe Admin::Stats::SDG::GoalComponent, type: :component do
|
|||||||
create_list(:poll, 2, sdg_goals: [goal])
|
create_list(:poll, 2, sdg_goals: [goal])
|
||||||
create_list(:proposal, 3, sdg_goals: [goal])
|
create_list(:proposal, 3, sdg_goals: [goal])
|
||||||
create_list(:debate, 1, sdg_goals: [goal])
|
create_list(:debate, 1, sdg_goals: [goal])
|
||||||
create_list(:budget_investment, 2, :winner, sdg_goals: [goal], price: 1000)
|
past = create(:budget, name: "Past year budget")
|
||||||
create_list(:budget_investment, 2, sdg_goals: [goal], price: 1000)
|
create_list(:budget_investment, 1, :winner, sdg_goals: [goal], price: 1000, budget: past)
|
||||||
|
current = create(:budget, name: "Current budget")
|
||||||
|
create_list(:budget_investment, 2, sdg_goals: [goal], price: 1000, budget: current)
|
||||||
|
|
||||||
render_inline component
|
render_inline component
|
||||||
|
|
||||||
expect(page).to have_text "Proposals 3"
|
expect(page).to have_text "Proposals 3"
|
||||||
expect(page).to have_text "Polls 2"
|
expect(page).to have_text "Polls 2"
|
||||||
expect(page).to have_text "Debates 1"
|
expect(page).to have_text "Debates 1"
|
||||||
expect(page).to have_text "Investment projects sent 4"
|
expect("Current budget").to appear_before("Past year budget")
|
||||||
expect(page).to have_text "Winner investment projects 2"
|
expect(page).to have_text "Investment projects sent 2"
|
||||||
expect(page).to have_text "Approved amount $2,000"
|
expect(page).to have_text "Winner investment projects 0"
|
||||||
|
expect(page).to have_text "Approved amount $0"
|
||||||
|
expect(page).to have_text "Investment projects sent 1"
|
||||||
|
expect(page).to have_text "Winner investment projects 1"
|
||||||
|
expect(page).to have_text "Approved amount $1,000"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user