diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index 19e89fe48..074ebae90 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -32,7 +32,7 @@ class Admin::SpendingProposalsController < Admin::BaseController end def summary - @spending_proposals = SpendingProposal.for_summary.group(:geozone).sum(:price) + @spending_proposals = SpendingProposal.group(:geozone).sum(:price) end private diff --git a/app/helpers/spending_proposals_helper.rb b/app/helpers/spending_proposals_helper.rb index 030b53f8f..40b9d489e 100644 --- a/app/helpers/spending_proposals_helper.rb +++ b/app/helpers/spending_proposals_helper.rb @@ -14,11 +14,11 @@ module SpendingProposalsHelper end end - def spending_proposal_count_for_geozone(geozone) + def spending_proposal_count_for_geozone(scope, geozone) if geozone.present? - geozone.spending_proposals.for_summary.count + geozone.spending_proposals.send(scope).count else - SpendingProposal.where(geozone: nil).for_summary.count + SpendingProposal.where(geozone: nil).send(scope).count end end diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 723cfa7e2..312a40763 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -139,9 +139,13 @@ class SpendingProposal < ActiveRecord::Base self.responsible_name = author.try(:document_number) if author.try(:document_number).present? end - def self.for_summary + def self.finished_and_feasible valuation_finished.feasible end + def self.finished_and_unfeasible + valuation_finished.unfeasible + end + end diff --git a/app/views/admin/spending_proposals/summary.html.erb b/app/views/admin/spending_proposals/summary.html.erb index 64b07e0ea..0b1d844c3 100644 --- a/app/views/admin/spending_proposals/summary.html.erb +++ b/app/views/admin/spending_proposals/summary.html.erb @@ -7,14 +7,36 @@ - + + + + + <% @spending_proposals.each do |geozone, price| %> - - - + + + + + + + <% end %>
<%= t("admin.spending_proposals.summary.geozone_name") %><%= t("admin.spending_proposals.summary.count_for_geozone") %><%= t("admin.spending_proposals.summary.finished_and_feasible_count") %><%= t("admin.spending_proposals.summary.finished_and_unfeasible_count") %><%= t("admin.spending_proposals.summary.finished_count") %><%= t("admin.spending_proposals.summary.in_evaluation_count") %><%= t("admin.spending_proposals.summary.total_count") %> <%= t("admin.spending_proposals.summary.cost_for_geozone") %>
<%= geozone.present? ? geozone.name : t("geozones.none") %><%= spending_proposal_count_for_geozone(geozone) %><%= number_to_currency(price) %> + <%= geozone.present? ? geozone.name : t("geozones.none") %> + + <%= spending_proposal_count_for_geozone("finished_and_feasible", geozone) %> + + <%= spending_proposal_count_for_geozone("finished_and_unfeasible", geozone) %> + + <%= spending_proposal_count_for_geozone("valuation_finished", geozone) %> + + <%= spending_proposal_count_for_geozone("valuating", geozone) %> + + <%= spending_proposal_count_for_geozone("all", geozone) %> + + <%= number_to_currency(price) %> +
\ No newline at end of file diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 01b485b5b..82a894b9e 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -199,9 +199,13 @@ en: tags_placeholder: "Write the tags you want separated by commas (,)" undefined: Undefined summary: - title: Summary for feasible and finished investment projects + title: Summary for investment projects geozone_name: Scope - count_for_geozone: Count + finished_and_feasible_count: Finished and feasible + finished_and_unfeasible_count: Finished and unfeasible + finished_count: Finished + in_evaluation_count: In evaluation + total_count: Total cost_for_geozone: Cost stats: show: diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 10ffdf22d..dd4dd58e0 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -199,9 +199,13 @@ es: tags_placeholder: "Escribe las etiquetas que desees separadas por comas (,)" undefined: Sin definir summary: - title: Resumen de propuestas viables y finalizadas + title: Resumen de propuestas de inversión geozone_name: Ámbito de ciudad - count_for_geozone: Número de propuestas + finished_and_feasible_count: Finalizadas viables + finished_and_unfeasible_count: Finished inviables + finished_count: Finalizadas + in_evaluation_count: En evaluación + total_count: Total cost_for_geozone: Coste total stats: show: diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 9d8a01844..18c682472 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -446,43 +446,165 @@ feature 'Admin spending proposals' do context 'Summary' do - scenario "Diplays summary for every geozone" do + scenario "Diplays cost for every geozone" do california = create(:geozone) new_york = create(:geozone) - washington = create(:geozone) - proposal1 = create(:spending_proposal, title: "Build a highway", price: '10000000', geozone: nil, feasible: true, valuation_finished: true) - proposal1 = create(:spending_proposal, title: "Build a university", price: '5000000', geozone: nil, feasible: true, valuation_finished: true) - proposal3 = create(:spending_proposal, title: "Build a hospital", price: '1000000', geozone: california, feasible: true, valuation_finished: true) - proposal4 = create(:spending_proposal, title: "Build a school", price: '500000', geozone: california, feasible: true, valuation_finished: true) - proposal5 = create(:spending_proposal, title: "Plant more trees", price: '30000', geozone: new_york, feasible: true, valuation_finished: true) - proposal6 = create(:spending_proposal, title: "Destroy the seas", price: '999999', geozone: washington, feasible: false, valuation_finished: true) + proposal1 = create(:spending_proposal, price: '10000000', geozone: nil, feasible: true, valuation_finished: true) + proposal1 = create(:spending_proposal, price: '5000000', geozone: nil, feasible: true, valuation_finished: true) + proposal3 = create(:spending_proposal, price: '1000000', geozone: california, feasible: true, valuation_finished: true) + proposal4 = create(:spending_proposal, price: '500000', geozone: california, feasible: true, valuation_finished: true) + proposal5 = create(:spending_proposal, price: '30000', geozone: new_york, feasible: true, valuation_finished: true) visit admin_spending_proposals_path click_link "Summary" - expect(page).to have_content "Summary for feasible and finished investment projects" + expect(page).to have_content "Summary for investment projects" within("#geozone_all_city") do - expect(page).to have_css(".name", text: "All city") - expect(page).to have_css(".proposals-count", text: 2) - expect(page).to have_css(".total-price", text: "$15,000,000") + expect(page).to have_css(".name", text: "All city") + expect(page).to have_css(".finished-and-feasible-count", text: 2) + expect(page).to have_css(".total-price", text: "$15,000,000") end within("#geozone_#{california.id}") do - expect(page).to have_css(".name", text: california.name) - expect(page).to have_css(".proposals-count", text: 2) - expect(page).to have_css(".total-price", text: "$1,500,000") + expect(page).to have_css(".name", text: california.name) + expect(page).to have_css(".finished-and-feasible-count", text: 2) + expect(page).to have_css(".total-price", text: "$1,500,000") end within("#geozone_#{new_york.id}") do - expect(page).to have_css(".name", text: new_york.name) - expect(page).to have_css(".proposals-count", text: 1) - expect(page).to have_css(".total-price", text: '$30,000') + expect(page).to have_css(".name", text: new_york.name) + expect(page).to have_css(".finished-and-feasible-count", text: 1) + expect(page).to have_css(".total-price", text: '$30,000') + end + end + + scenario "Displays total number of proposals for every geozone" do + california = create(:geozone) + new_york = create(:geozone) + + proposal1 = create(:spending_proposal, geozone: nil) + proposal1 = create(:spending_proposal, geozone: nil) + proposal3 = create(:spending_proposal, geozone: california) + proposal4 = create(:spending_proposal, geozone: california) + proposal5 = create(:spending_proposal, geozone: new_york) + + visit admin_spending_proposals_path + + click_link "Summary" + + expect(page).to have_content "Summary for investment projects" + + within("#geozone_all_city") do + expect(page).to have_css(".total-count", text: 2) end - expect(page).to_not have_content washington.name + within("#geozone_#{california.id}") do + expect(page).to have_css(".total-count", text: 2) + end + + within("#geozone_#{new_york.id}") do + expect(page).to have_css(".total-count", text: 1) + end + + end + + scenario "Displays finished and unfeasible for every geozone" do + california = create(:geozone) + new_york = create(:geozone) + + proposal1 = create(:spending_proposal, geozone: nil, feasible: false, valuation_finished: true) + proposal1 = create(:spending_proposal, geozone: nil, feasible: false, valuation_finished: true) + proposal3 = create(:spending_proposal, geozone: california, feasible: false, valuation_finished: true) + proposal4 = create(:spending_proposal, geozone: california, feasible: false, valuation_finished: true) + proposal5 = create(:spending_proposal, geozone: new_york, feasible: false, valuation_finished: true) + proposal5 = create(:spending_proposal, geozone: new_york, feasible: true, valuation_finished: true) + + visit admin_spending_proposals_path + + click_link "Summary" + + expect(page).to have_content "Summary for investment projects" + + within("#geozone_all_city") do + expect(page).to have_css(".finished-and-unfeasible-count", text: 2) + end + + within("#geozone_#{california.id}") do + expect(page).to have_css(".finished-and-unfeasible-count", text: 2) + end + + within("#geozone_#{new_york.id}") do + expect(page).to have_css(".finished-and-unfeasible-count", text: 1) + end + end + + scenario "Displays finished proposals for every geozone" do + california = create(:geozone) + new_york = create(:geozone) + + proposal1 = create(:spending_proposal, geozone: nil, valuation_finished: true) + proposal1 = create(:spending_proposal, geozone: nil, valuation_finished: true) + proposal3 = create(:spending_proposal, geozone: california, valuation_finished: true) + proposal4 = create(:spending_proposal, geozone: california, valuation_finished: true) + proposal5 = create(:spending_proposal, geozone: new_york, valuation_finished: true) + proposal5 = create(:spending_proposal, geozone: new_york, valuation_finished: false) + + visit admin_spending_proposals_path + + click_link "Summary" + + expect(page).to have_content "Summary for investment projects" + + within("#geozone_all_city") do + expect(page).to have_css(".finished-count", text: 2) + end + + within("#geozone_#{california.id}") do + expect(page).to have_css(".finished-count", text: 2) + end + + within("#geozone_#{new_york.id}") do + expect(page).to have_css(".finished-count", text: 1) + end + end + + scenario "Displays proposals in evaluation for every geozone" do + california = create(:geozone) + new_york = create(:geozone) + + proposal1 = create(:spending_proposal, geozone: nil, valuation_finished: false) + proposal1 = create(:spending_proposal, geozone: nil, valuation_finished: false) + proposal3 = create(:spending_proposal, geozone: california, valuation_finished: false) + proposal4 = create(:spending_proposal, geozone: california, valuation_finished: false) + proposal5 = create(:spending_proposal, geozone: new_york, valuation_finished: false) + + valuator = create(:valuator, user: create(:user, username: 'Olga')) + SpendingProposal.all.each do |sp| + sp.valuators << valuator + end + + proposal6 = create(:spending_proposal, geozone: new_york, valuation_finished: false) + + visit admin_spending_proposals_path + + click_link "Summary" + + expect(page).to have_content "Summary for investment projects" + + within("#geozone_all_city") do + expect(page).to have_css(".in-evaluation-count", text: 2) + end + + within("#geozone_#{california.id}") do + expect(page).to have_css(".in-evaluation-count", text: 2) + end + + within("#geozone_#{new_york.id}") do + expect(page).to have_css(".in-evaluation-count", text: 1) + end end end