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 "sticky_overrides";
@import "tags";
@import "admin/*";
@import "admin/**/*";
@import "sdg/**/*";
@import "sdg_management/*";
@import "sdg_management/**/*";

View File

@@ -6,5 +6,14 @@
<% stats.each do |text, amount, options = {}| %>
<%= render Admin::Stats::StatComponent.new(text: text, amount: amount, options: options) %>
<% 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>

View File

@@ -13,15 +13,35 @@ class Admin::Stats::SDG::GoalComponent < ApplicationComponent
[
[t("admin.stats.sdg.polls"), goal.polls.count],
[t("admin.stats.sdg.proposals"), goal.proposals.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]
[t("admin.stats.sdg.debates"), goal.debates.count]
]
end
def amount
number_to_currency(goal.budget_investments.winners.sum(:price), precision: 0)
def bugdets_stats
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
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(:proposal, 3, sdg_goals: [goal])
create_list(:debate, 1, sdg_goals: [goal])
create_list(:budget_investment, 2, :winner, sdg_goals: [goal], price: 1000)
create_list(:budget_investment, 2, sdg_goals: [goal], price: 1000)
past = create(:budget, name: "Past year budget")
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
expect(page).to have_text "Proposals 3"
expect(page).to have_text "Polls 2"
expect(page).to have_text "Debates 1"
expect(page).to have_text "Investment projects sent 4"
expect(page).to have_text "Winner investment projects 2"
expect(page).to have_text "Approved amount $2,000"
expect("Current budget").to appear_before("Past year budget")
expect(page).to have_text "Investment projects sent 2"
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