diff --git a/app/controllers/admin/budgets_controller.rb b/app/controllers/admin/budgets_controller.rb new file mode 100644 index 000000000..a2f92a39e --- /dev/null +++ b/app/controllers/admin/budgets_controller.rb @@ -0,0 +1,9 @@ +class Admin::BudgetsController < Admin::BaseController + + has_filters %w{open finished}, only: :index + + def index + @budgets = Budget.send(@current_filter).order(created_at: :desc).page(params[:page]) + end + +end diff --git a/app/views/admin/budgets/index.html.erb b/app/views/admin/budgets/index.html.erb new file mode 100644 index 000000000..193b6a7ef --- /dev/null +++ b/app/views/admin/budgets/index.html.erb @@ -0,0 +1,25 @@ +

<%= t("admin.budgets.index.title") %>

+ +<%= link_to t("admin.budgets.index.new_link"), + new_admin_budget_path, + class: "button float-right margin-right" %> + +<%= render 'shared/filter_subnav', i18n_namespace: "admin.budgets.index" %> + + +

<%= page_entries_info @budgets %>

+ + + <% @budgets.each do |budget| %> + + + + + <% end %> +
+ <%= link_to budget.name, admin_budget_path(budget) %> + + <%= t("budget.phase.#{budget.phase}") %> +
+ +<%= paginate @budgets %> \ No newline at end of file diff --git a/config/locales/activerecord.en.yml b/config/locales/activerecord.en.yml index 07791e53c..5a7a591bd 100644 --- a/config/locales/activerecord.en.yml +++ b/config/locales/activerecord.en.yml @@ -4,6 +4,9 @@ en: activity: one: "activity" other: "activities" + budget: + one: "Participatory budget" + other: "Participatory budgets" comment: one: "Comment" other: "Comments" diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index d5b7f0005..ccd0240e8 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -4,6 +4,9 @@ es: activity: one: "actividad" other: "actividades" + budget: + one: "Presupuesto participativo" + other: "Presupuestos participativos" comment: one: "Comentario" other: "Comentarios" diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 2f73f64d8..7d32e3291 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -60,6 +60,13 @@ en: on_users: Users title: Moderator activity type: Type + budgets: + index: + title: Participatory budgets + new_link: Create new + filters: + open: Open + finished: Finished comments: index: filter: Filter @@ -96,6 +103,7 @@ en: activity: Moderator activity admin: Admin menu banner: Manage banners + budgets: Participatory budgets debate_topics: Debate topics hidden_comments: Hidden comments hidden_debates: Hidden debates diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 5aada1ce1..c5f0df247 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -58,6 +58,13 @@ es: on_users: Usuarios title: Actividad de los Moderadores type: Tipo + budgets: + index: + title: Presupuestos participativos + new_link: Crear nuevo + filters: + open: Abiertos + finished: Terminados comments: index: filter: Filtro @@ -94,6 +101,7 @@ es: activity: Actividad de moderadores admin: Menú de administración banner: Gestionar banners + budgets: Presupuestos participativos debate_topics: Temas de debate hidden_comments: Comentarios ocultos hidden_debates: Debates ocultos diff --git a/config/locales/en.yml b/config/locales/en.yml index 05153d714..fae75307f 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -33,6 +33,13 @@ en: application: close: Close menu: Menu + budget: + phase: + on_hold: On hold + accepting: Accepting proposals + selecting: Selecting + balloting: Balloting + finished: Finished comments: comment: admin: Administrator diff --git a/config/locales/es.yml b/config/locales/es.yml index 9391da3bf..282340395 100755 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -33,6 +33,13 @@ es: application: close: Cerrar menu: Menú + budget: + phase: + on_hold: Pausa + accepting: Aceptando propuestas + selecting: Fase de selección + balloting: Fase de Votación + finished: Terminado comments: comment: admin: Administrador diff --git a/config/routes.rb b/config/routes.rb index 22518f8c8..8cf94ea23 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -153,6 +153,13 @@ Rails.application.routes.draw do get :summary, on: :collection end + resources :budgets do + resources :budget_groups do + resources :budget_headings do + end + end + end + resources :banners, only: [:index, :new, :create, :edit, :update, :destroy] do collection { get :search} end diff --git a/db/schema.rb b/db/schema.rb index ee5b3ab6f..df58b15cb 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -210,10 +210,10 @@ ActiveRecord::Schema.define(version: 20160617172616) do t.string "visit_id" t.datetime "hidden_at" t.integer "flags_count", default: 0 - t.datetime "ignored_flag_at" t.integer "cached_votes_total", default: 0 t.integer "cached_votes_up", default: 0 t.integer "cached_votes_down", default: 0 + t.datetime "ignored_flag_at" t.integer "comments_count", default: 0 t.datetime "confirmed_hide_at" t.integer "cached_anonymous_votes_total", default: 0 diff --git a/spec/features/admin/budgets_spec.rb b/spec/features/admin/budgets_spec.rb new file mode 100644 index 000000000..8326a5dac --- /dev/null +++ b/spec/features/admin/budgets_spec.rb @@ -0,0 +1,79 @@ +require 'rails_helper' + +feature 'Admin budgets' do + + background do + admin = create(:administrator) + login_as(admin.user) + end + + context "Feature flag" do + + xscenario 'Disabled with a feature flag' do + Setting['feature.budgets'] = nil + expect{ visit admin_budgets_path }.to raise_exception(FeatureFlags::FeatureDisabled) + end + + end + + context "Index" do + + scenario 'Displaying budgets' do + budget = create(:budget) + visit admin_budgets_path + + expect(page).to have_content(budget.name) + expect(page).to have_content(I18n.t("budget.phase.#{budget.phase}")) + end + + scenario 'Filters by phase' do + budget1 = create(:budget) + budget2 = create(:budget, :accepting) + budget3 = create(:budget, :selecting) + budget4 = create(:budget, :balloting) + budget5 = create(:budget, :finished) + + visit admin_budgets_path + expect(page).to have_content(budget1.name) + expect(page).to have_content(budget2.name) + expect(page).to have_content(budget3.name) + expect(page).to have_content(budget4.name) + expect(page).to_not have_content(budget5.name) + + click_link "Finished" + expect(page).to_not have_content(budget1.name) + expect(page).to_not have_content(budget2.name) + expect(page).to_not have_content(budget3.name) + expect(page).to_not have_content(budget4.name) + expect(page).to have_content(budget5.name) + + click_link "Open" + expect(page).to have_content(budget1.name) + expect(page).to have_content(budget2.name) + expect(page).to have_content(budget3.name) + expect(page).to have_content(budget4.name) + expect(page).to_not have_content(budget5.name) + end + + + scenario "Current filter is properly highlighted" do + filters_links = {'open' => 'Open', 'finished' => 'Finished'} + + visit admin_budgets_path + + expect(page).to_not have_link(filters_links.values.first) + filters_links.keys.drop(1).each { |filter| expect(page).to have_link(filters_links[filter]) } + + filters_links.each_pair do |current_filter, link| + visit admin_budgets_path(filter: current_filter) + + expect(page).to_not have_link(link) + + (filters_links.keys - [current_filter]).each do |filter| + expect(page).to have_link(filters_links[filter]) + end + end + end + + end +end \ No newline at end of file