@@ -32,7 +32,8 @@ class Admin::SpendingProposalsController < Admin::BaseController
|
||||
end
|
||||
|
||||
def summary
|
||||
@spending_proposals = SpendingProposal.for_summary.group(:geozone).sum(:price)
|
||||
@spending_proposals = SpendingProposal.group(:geozone).sum(:price)
|
||||
@spending_proposals_with_supports = SpendingProposal.with_supports.group(:geozone).sum(:price)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -139,9 +139,16 @@ 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
|
||||
|
||||
def self.with_supports
|
||||
SpendingProposal.where(id: Vote.for_spending_proposals(SpendingProposal.all).map(&:votable).map(&:id))
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
35
app/views/admin/spending_proposals/_summary_table.html.erb
Normal file
35
app/views/admin/spending_proposals/_summary_table.html.erb
Normal file
@@ -0,0 +1,35 @@
|
||||
<table id="spending_proposals" class="investment-projects-summary">
|
||||
<th><%= t("admin.spending_proposals.summary.geozone_name") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.finished_and_feasible_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.finished_and_unfeasible_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.finished_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.in_evaluation_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.total_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.cost_for_geozone") %></th>
|
||||
|
||||
<% spending_proposals.each do |geozone, price| %>
|
||||
<tr id="<%= geozone.present? ? dom_id(geozone) : 'geozone_all_city' %>">
|
||||
<td class="name">
|
||||
<%= geozone.present? ? geozone.name : t("geozones.none") %>
|
||||
</td>
|
||||
<td class="finished-and-feasible-count">
|
||||
<%= spending_proposal_count_for_geozone("finished_and_feasible", geozone) %>
|
||||
</td>
|
||||
<td class="finished-and-unfeasible-count">
|
||||
<%= spending_proposal_count_for_geozone("finished_and_unfeasible", geozone) %>
|
||||
</td>
|
||||
<td class="finished-count">
|
||||
<%= spending_proposal_count_for_geozone("valuation_finished", geozone) %>
|
||||
</td>
|
||||
<td class="in-evaluation-count">
|
||||
<%= spending_proposal_count_for_geozone("valuating", geozone) %>
|
||||
</td>
|
||||
<td class="total-count">
|
||||
<%= spending_proposal_count_for_geozone("all", geozone) %>
|
||||
</td>
|
||||
<td class="total-price text-center">
|
||||
<%= number_to_currency(price) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
@@ -4,17 +4,7 @@
|
||||
<% end %>
|
||||
|
||||
<h2><%= t("admin.spending_proposals.summary.title") %></h2>
|
||||
<%= render 'summary_table', spending_proposals: @spending_proposals %>
|
||||
|
||||
<table id="spending_proposals" class="investment-projects-summary">
|
||||
<th><%= t("admin.spending_proposals.summary.geozone_name") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.count_for_geozone") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.cost_for_geozone") %></th>
|
||||
|
||||
<% @spending_proposals.each do |geozone, price| %>
|
||||
<tr id="<%= geozone.present? ? dom_id(geozone) : 'geozone_all_city' %>">
|
||||
<td class="name"><%= geozone.present? ? geozone.name : t("geozones.none") %></td>
|
||||
<td class="proposals-count text-center"><%= spending_proposal_count_for_geozone(geozone) %></td>
|
||||
<td class="total-price text-center"><%= number_to_currency(price) %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
<h2><%= t("admin.spending_proposals.summary.title_proposals_with_supports") %></h2>
|
||||
<%= render 'summary_table', spending_proposals: @spending_proposals_with_supports %>
|
||||
|
||||
@@ -199,9 +199,14 @@ 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
|
||||
title_proposals_with_supports: Summary for investment projects with supports
|
||||
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:
|
||||
|
||||
@@ -199,9 +199,14 @@ 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
|
||||
title_proposals_with_supports: Resumen para propuestas que han superado la fase de apoyos
|
||||
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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -352,27 +352,14 @@ describe SpendingProposal do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#for_summary" do
|
||||
it "returns only feasible and valuation finished proposals" do
|
||||
sp1 = create(:spending_proposal, feasible: true, valuation_finished: true)
|
||||
sp2 = create(:spending_proposal, feasible: true, valuation_finished: true)
|
||||
sp3 = create(:spending_proposal, feasible: false, valuation_finished: false)
|
||||
describe "#with_supports" do
|
||||
it "should return proposals with supports" do
|
||||
sp1 = create(:spending_proposal)
|
||||
sp2 = create(:spending_proposal)
|
||||
create(:vote, votable: sp1)
|
||||
|
||||
expect(SpendingProposal.for_summary).to include(sp1)
|
||||
expect(SpendingProposal.for_summary).to include(sp2)
|
||||
expect(SpendingProposal.for_summary).to_not include(sp3)
|
||||
end
|
||||
|
||||
it "does not return unfeasible proposals" do
|
||||
sp = create(:spending_proposal, feasible: false, valuation_finished: true)
|
||||
|
||||
expect(SpendingProposal.for_summary).to_not include(sp)
|
||||
end
|
||||
|
||||
it "does not return proposals pending valuation" do
|
||||
sp = create(:spending_proposal, feasible: true, valuation_finished: false)
|
||||
|
||||
expect(SpendingProposal.for_summary).to_not include(sp)
|
||||
expect(SpendingProposal.with_supports).to include(sp1)
|
||||
expect(SpendingProposal.with_supports).to_not include(sp2)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user