diff --git a/app/controllers/budgets_controller.rb b/app/controllers/budgets_controller.rb index 4f215c46f..c0cb86565 100644 --- a/app/controllers/budgets_controller.rb +++ b/app/controllers/budgets_controller.rb @@ -15,6 +15,7 @@ class BudgetsController < ApplicationController def index @budgets = @budgets.order(:created_at) + @budget = current_budget end end diff --git a/app/models/budget/phase.rb b/app/models/budget/phase.rb index 903c698aa..5475d97be 100644 --- a/app/models/budget/phase.rb +++ b/app/models/budget/phase.rb @@ -21,6 +21,7 @@ class Budget after_save :adjust_date_ranges scope :enabled, -> { where(enabled: true) } + scope :published, -> { enabled.where.not(kind: 'drafting') } scope :drafting, -> { find_by_kind('drafting') } scope :accepting, -> { find_by_kind('accepting')} scope :reviewing, -> { find_by_kind('reviewing')} diff --git a/app/views/budgets/index.html.erb b/app/views/budgets/index.html.erb index 0ccc8bcef..fbda297cc 100644 --- a/app/views/budgets/index.html.erb +++ b/app/views/budgets/index.html.erb @@ -3,32 +3,135 @@ <%= render "shared/canonical", href: budgets_url %> <% end %> -<%= render "shared/section_header", i18n_namespace: "budgets.index.section_header", image: "budgets" %> +
+
+
-
-
- - - - - - - - - <% @budgets.each do |budget| %> - <% if budget_published?(budget) %> - - - - +

<%= @budget.name %>

+ + <%= safe_html_with_links @budget.description %> + <%= link_to t("budgets.index.section_header.help"), "#section_help" %> + +
+

+ <% published_phases = @budget.phases.published %> + <% current_phase_number = published_phases.index(@budget.current_phase) + 1 || 0 %> + <% phases_progress_numbers = "(#{current_phase_number}/#{published_phases.count})" %> + <%= t('budgets.show.phase') %> <%= phases_progress_numbers %> +

+

<%= t("budgets.phase.#{@budget.phase}") %>

+ + <%= link_to t("budgets.index.section_header.all_phases"), "#all_phases" %> + + <% if @budget.accepting? %> + <% if current_user %> + <% if current_user.level_two_or_three_verified? %> + <%= link_to t("budgets.investments.index.sidebar.create"), + new_budget_investment_path(@budget), + class: "button margin-top expanded" %> + <% else %> +
+ <%= t("budgets.investments.index.sidebar.verified_only", + verify: link_to(t("budgets.investments.index.sidebar.verify_account"), + verification_path)).html_safe %> +
+ <% end %> + <% else %> +
+ <%= t("budgets.investments.index.sidebar.not_logged_in", + sign_in: link_to(t("budgets.investments.index.sidebar.sign_in"), + new_user_session_path), + sign_up: link_to(t("budgets.investments.index.sidebar.sign_up"), + new_user_registration_path)).html_safe %> +
<% end %> <% end %> -
-
<%= Budget.human_attribute_name(:name) %><%= Budget.human_attribute_name(:phase) %>
- <%= link_to budget.name, budget %> - - <%= budget.translated_phase %> -
+ + + <% if @budget.finished? || (@budget.balloting? && can?(:read_results, @budget)) %> + <%= link_to t("budgets.show.see_results"), + budget_results_path(@budget, heading_id: @budget.headings.first), + class: "button margin-top expanded" %> + <% end %> +
+
+
+ +
+
+ +
+ <% @budget.groups.each do |group| %> +

<%= group.name %>

+
+ <% group.headings.each do |heading| %> +
+ <%= link_to heading.name, + budget_investments_path(@budget.id, heading_id: heading.id) %> + <%= @budget.formatted_heading_price(heading) %> +
+ <% end %> +
+ <% end %> +
+ +
+

<%= t("budgets.index.map") %>

+
+ +
+ <%= link_to t("budgets.index.investment_proyects"), + budget_investments_path(@budget.id) %>
+ <%= link_to t("budgets.index.unfeasible_investment_proyects"), + budget_investments_path(budget_id: @budget.id, filter: 'unfeasible') %>
+ <%= link_to t("budgets.index.not_selected_investment_proyects"), + budget_investments_path(budget_id: @budget.id, filter: 'unselected') %> +
+ +
+

<%= t("budgets.index.all_phases") %>

+ <% @budget.phases.published.pluck(:kind) do |phase_kind| %> +
+
+

<%= t("budgets.phase.#{phase_kind}") %>

+ <%= @budget.description_for_phase(phase_kind) %> +
+
+ <% end %> +
+ + +
+
+
+
    +
  • + <%= link_to "#other_budgets" do %> +

    + <%= t("budgets.index.finished_budgets") %> +

    + <% end %> +
  • +
+
+
+ +
+ <% @budgets.each do |b| %> + <% if budget_published?(b) %> +
+
+ <%= b.name %> + <%= b.description %> +
+
+ <%= link_to t("budgets.index.see_results"), budget_results_path(b.id) %> +
+
+ <% end %> + <% end %> +
+

diff --git a/config/locales/en/budgets.yml b/config/locales/en/budgets.yml index 7f25d243f..ea5730bfa 100644 --- a/config/locales/en/budgets.yml +++ b/config/locales/en/budgets.yml @@ -44,6 +44,14 @@ en: icon_alt: Participatory budgets icon title: Participatory budgets help: Help about participatory budgets + all_phases: See all phases + all_phases: Budget investment's phases + map: Budget investments' proposals located geographically + investment_proyects: List of all investment projects + unfeasible_investment_proyects: List of all unfeasible investment projects + not_selected_investment_proyects: List of all investment projects not selected for balloting + finished_budgets: Finished participatory budgets + see_results: See results section_footer: title: Help about participatory budgets description: With the participatory budgets the citizens decide to which projects presented by the neighbors is destined a part of the municipal budget. diff --git a/config/locales/es/budgets.yml b/config/locales/es/budgets.yml index c7f84a3a9..326ddabbe 100644 --- a/config/locales/es/budgets.yml +++ b/config/locales/es/budgets.yml @@ -44,6 +44,14 @@ es: icon_alt: Icono de Presupuestos participativos title: Presupuestos participativos help: Ayuda sobre presupuestos participativos + all_phases: Ver todas las fases + all_phases: Fases de los presupuestos participativos + map: Propuestas de los presupuestos participativos localizables geográficamente + investment_proyects: Ver lista completa de proyectos de inversión + unfeasible_investment_proyects: Ver lista de proyectos de inversión inviables + not_selected_investment_proyects: Ver lista de proyectos de inversión no seleccionados para la votación final + finished_budgets: Presupuestos participativos terminados + see_results: Ver resultados section_footer: title: Ayuda sobre presupuestos participativos description: Con los presupuestos participativos la ciudadanía decide a qué proyectos presentados por los vecinos y vecinas va destinada una parte del presupuesto municipal. diff --git a/spec/features/budgets/budgets_spec.rb b/spec/features/budgets/budgets_spec.rb index ee537a854..bb7ab2e91 100644 --- a/spec/features/budgets/budgets_spec.rb +++ b/spec/features/budgets/budgets_spec.rb @@ -7,8 +7,42 @@ feature 'Budgets' do scenario 'Index' do budgets = create_list(:budget, 3) + last_budget = budgets.last + group1 = create(:budget_group, budget: last_budget) + group2 = create(:budget_group, budget: last_budget) + + heading1 = create(:budget_heading, group: group1) + heading2 = create(:budget_heading, group: group2) + visit budgets_path - budgets.each {|budget| expect(page).to have_link(budget.name)} + + within("#budget_heading") do + expect(page).to have_content(last_budget.name) + expect(page).to have_content(last_budget.description) + expect(page).to have_content("Actual phase (1/8)") + expect(page).to have_content("Accepting projects") + expect(page).to have_link 'Help about participatory budgets' + expect(page).to have_link 'See all phases' + end + + last_budget.update_attributes(phase: 'publishing_prices') + visit budgets_path + + within("#budget_heading") do + expect(page).to have_content("Actual phase (5/8)") + end + + within('#budget_info') do + expect(page).to have_content group1.name + expect(page).to have_content group2.name + expect(page).to have_content heading1.name + expect(page).to have_content last_budget.formatted_heading_price(heading1) + expect(page).to have_content heading2.name + expect(page).to have_content last_budget.formatted_heading_price(heading2) + + expect(page).to have_content budgets.first.name + expect(page).to have_content budgets[2].name + end end context 'Show' do @@ -70,6 +104,7 @@ feature 'Budgets' do background do logout budget.update(phase: 'drafting') + create(:budget) end context "Listed" do diff --git a/spec/features/budgets/investments_spec.rb b/spec/features/budgets/investments_spec.rb index 55abbec7e..00f10e111 100644 --- a/spec/features/budgets/investments_spec.rb +++ b/spec/features/budgets/investments_spec.rb @@ -778,8 +778,7 @@ feature 'Budget Investments' do visit root_path first(:link, "Participatory budgeting").click - click_link budget.name - click_link "Health" + click_link "More hospitals" within("#budget_investment_#{sp1.id}") do expect(page).to have_content sp1.title