From 4c2d918bb5660574ab8985593fdc11ab7693cd29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Sat, 23 Jan 2021 11:39:49 +0100 Subject: [PATCH] Create component to render goal stats --- .../admin/stats/sdg/goal_component.html.erb | 14 +++++++++ .../admin/stats/sdg/goal_component.rb | 30 +++++++++++++++++++ config/locales/en/admin.yml | 8 +++++ config/locales/es/admin.yml | 8 +++++ .../admin/stats/sdg/goal_component_spec.rb | 23 ++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 app/components/admin/stats/sdg/goal_component.html.erb create mode 100644 app/components/admin/stats/sdg/goal_component.rb create mode 100644 spec/components/admin/stats/sdg/goal_component_spec.rb diff --git a/app/components/admin/stats/sdg/goal_component.html.erb b/app/components/admin/stats/sdg/goal_component.html.erb new file mode 100644 index 000000000..d54fdeea0 --- /dev/null +++ b/app/components/admin/stats/sdg/goal_component.html.erb @@ -0,0 +1,14 @@ +
+ +

<%= goal.code_and_title %>

+ +
+ <% stats.each do |text, amount, options = {}| %> +
+ <%= tag.p(options) do %> + <%= text %>
<%= amount %> + <% end %> +
+ <% end %> +
+
diff --git a/app/components/admin/stats/sdg/goal_component.rb b/app/components/admin/stats/sdg/goal_component.rb new file mode 100644 index 000000000..ea2a4e2a7 --- /dev/null +++ b/app/components/admin/stats/sdg/goal_component.rb @@ -0,0 +1,30 @@ +class Admin::Stats::SDG::GoalComponent < ApplicationComponent + with_collection_parameter :goal + + attr_reader :goal + + def initialize(goal:) + @goal = goal + end + + private + + def stats + [ + [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] + ] + end + + def amount + number_to_currency(goal.budget_investments.winners.sum(:price), precision: 0) + end + + def featured + { class: "featured" } + end +end diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 44a41d71b..4f1bd3c8b 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -1415,6 +1415,14 @@ en: question_name: Question origin_web: Web participants origin_total: Total participants + sdg: + budget_investments: + amount: "Approved amount" + winners: "Winner investment projects" + sent: "Investment projects sent" + debates: "Debates" + polls: "Polls" + proposals: "Proposals" tags: create: Create topic destroy: Delete topic diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 6ef2d0af4..b599face9 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -1414,6 +1414,14 @@ es: question_name: Pregunta origin_web: Participantes en Web origin_total: Participantes Totales + sdg: + budget_investments: + amount: "Presupuesto aprobado" + winners: "Proyectos de inversión ganadores" + sent: "Proyectos de inversión enviados" + debates: "Debates" + polls: "Votaciones" + proposals: "Propuestas" tags: create: Crear tema destroy: Eliminar tema diff --git a/spec/components/admin/stats/sdg/goal_component_spec.rb b/spec/components/admin/stats/sdg/goal_component_spec.rb new file mode 100644 index 000000000..0061c5bec --- /dev/null +++ b/spec/components/admin/stats/sdg/goal_component_spec.rb @@ -0,0 +1,23 @@ +require "rails_helper" + +describe Admin::Stats::SDG::GoalComponent, type: :component do + let(:component) { Admin::Stats::SDG::GoalComponent.new(goal: goal) } + let(:goal) { SDG::Goal.sample } + + it "shows goal stats" 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) + + 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" + end +end