Merge pull request #1091 from consul/admin-summary

Admin summary
This commit is contained in:
Enrique García
2016-04-26 15:56:17 +02:00
9 changed files with 213 additions and 61 deletions

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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