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| %>
+
+ |
+ <%= link_to budget.name, admin_budget_path(budget) %>
+ |
+
+ <%= t("budget.phase.#{budget.phase}") %>
+ |
+
+ <% end %>
+
+
+<%= 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