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:
Senén Rodero Rodríguez
2021-02-16 12:10:45 +01:00
committed by taitus
parent 205cbd7d82
commit ebe8903c75
5 changed files with 52 additions and 12 deletions

View File

@@ -0,0 +1,5 @@
.sdg-goal-stats {
h4 {
@include grid-column-gutter;
}
}

View File

@@ -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/**/*";

View File

@@ -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>

View File

@@ -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

View File

@@ -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