diff --git a/app/controllers/admin/valuators_controller.rb b/app/controllers/admin/valuators_controller.rb
new file mode 100644
index 000000000..35c449299
--- /dev/null
+++ b/app/controllers/admin/valuators_controller.rb
@@ -0,0 +1,27 @@
+class Admin::ValuatorsController < Admin::BaseController
+ load_and_authorize_resource
+
+ def index
+ @valuators = @valuators.page(params[:page])
+ end
+
+ def search
+ @user = User.find_by(email: params[:email])
+
+ respond_to do |format|
+ if @user
+ @valuator = Valuator.find_or_initialize_by(user: @user)
+ format.js
+ else
+ format.js { render "user_not_found" }
+ end
+ end
+ end
+
+ def create
+ @valuator.user_id = params[:user_id]
+ @valuator.save
+
+ redirect_to admin_valuators_path
+ end
+end
diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb
index 6ba99e4fa..6bf2b0b53 100644
--- a/app/models/abilities/administrator.rb
+++ b/app/models/abilities/administrator.rb
@@ -32,6 +32,7 @@ module Abilities
can :comment_as_administrator, [Debate, Comment, Proposal]
can [:search, :create, :index, :destroy], ::Moderator
+ can [:search, :create, :index], ::Valuator
can :manage, Annotation
diff --git a/app/views/admin/_menu.html.erb b/app/views/admin/_menu.html.erb
index 00bfc279b..49bd6957d 100644
--- a/app/views/admin/_menu.html.erb
+++ b/app/views/admin/_menu.html.erb
@@ -78,6 +78,13 @@
<% end %>
+
>
+ <%= link_to admin_valuators_path do %>
+
+ <%= t('admin.menu.valuators') %>
+ <% end %>
+
+
>
<%= link_to admin_activity_path do %>
diff --git a/app/views/admin/valuators/_valuator.html.erb b/app/views/admin/valuators/_valuator.html.erb
new file mode 100644
index 000000000..72eec5304
--- /dev/null
+++ b/app/views/admin/valuators/_valuator.html.erb
@@ -0,0 +1,7 @@
+<%= valuator.name %>
+ •
+<%= valuator.email %>
+<% unless valuator.persisted? %>
+ <%= link_to t('admin.valuators.valuator.add'),{ controller: "admin/valuators", action: :create, user_id: valuator.user_id },
+ method: :post, class: "button tiny radius success right" %>
+<% end %>
diff --git a/app/views/admin/valuators/index.html.erb b/app/views/admin/valuators/index.html.erb
new file mode 100644
index 000000000..ba5881192
--- /dev/null
+++ b/app/views/admin/valuators/index.html.erb
@@ -0,0 +1,24 @@
+<%= t("admin.valuators.index.title") %>
+
+
+ <%= form_tag search_admin_valuators_path, method: :get, remote: true do %>
+
+ <%= text_field_tag :email, '', placeholder: t('admin.valuators.search.email_placeholder') %>
+
+
+ <%= submit_tag t('admin.valuators.search.search'), class: 'button radius' %>
+
+ <% end %>
+
+
+
+<%= page_entries_info @valuators %>
+
+ <% @valuators.each do |valuator| %>
+ -
+ <%= render 'valuator', valuator: valuator %>
+
+ <% end %>
+
+
+<%= paginate @valuators %>
diff --git a/app/views/admin/valuators/search.js.erb b/app/views/admin/valuators/search.js.erb
new file mode 100644
index 000000000..e899668ee
--- /dev/null
+++ b/app/views/admin/valuators/search.js.erb
@@ -0,0 +1 @@
+$("#search-result").html("<%= j render 'valuator', valuator: @valuator %>
");
diff --git a/app/views/admin/valuators/user_not_found.js.erb b/app/views/admin/valuators/user_not_found.js.erb
new file mode 100644
index 000000000..c28e72e01
--- /dev/null
+++ b/app/views/admin/valuators/user_not_found.js.erb
@@ -0,0 +1 @@
+$("#search-result").html("<%= j t('admin.valuators.search.user_not_found') %>
");
diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml
index ddd205726..6a5f01b8a 100755
--- a/config/locales/admin.en.yml
+++ b/config/locales/admin.en.yml
@@ -54,6 +54,7 @@ en:
hidden_users: Hidden users
incomplete_verifications: Incomplete verifications
moderators: Moderators
+ valuators: Valuators
officials: Officials
organizations: Organisations
settings: Configuration settings
@@ -69,6 +70,17 @@ en:
email_placeholder: Search user by email
search: Search
user_not_found: User not found
+ valuators:
+ index:
+ title: Valuators
+ moderator:
+ add: Add
+ delete: Delete
+ show: Show
+ search:
+ email_placeholder: Search user by email
+ search: Search
+ user_not_found: User not found
officials:
edit:
back: Back
@@ -139,6 +151,7 @@ en:
spending_proposals:
index:
geozone_filter_all: All zones
+ valuator_filter_all: All valuators
filters:
all: All
without_admin: Without assigned admin
diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml
index 5d2000782..22d0f62da 100644
--- a/config/locales/admin.es.yml
+++ b/config/locales/admin.es.yml
@@ -54,6 +54,7 @@ es:
hidden_users: Usuarios bloqueados
incomplete_verifications: Verificaciones incompletas
moderators: Moderadores
+ valuators: Evaluadores
officials: Cargos públicos
organizations: Organizaciones
settings: Configuración global
@@ -69,6 +70,17 @@ es:
email_placeholder: Buscar usuario por email
search: Buscar
user_not_found: Usuario no encontrado
+ valuators:
+ index:
+ title: Evaluadores
+ moderator:
+ add: Añadir
+ delete: Borrar
+ show: Mostrar
+ search:
+ email_placeholder: Buscar usuario por email
+ search: Buscar
+ user_not_found: Usuario no encontrado
officials:
edit:
back: Volver
@@ -139,6 +151,7 @@ es:
spending_proposals:
index:
geozone_filter_all: Todos los ámbitos de actuación
+ valuator_filter_all: Todos los evaluadores
filters:
all: Todas
without_admin: Sin administrador asignado
diff --git a/config/routes.rb b/config/routes.rb
index 302ce602c..ebc0d8989 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -155,6 +155,10 @@ Rails.application.routes.draw do
collection { get :search }
end
+ resources :valuators, only: [:index, :create] do
+ collection { get :search }
+ end
+
resources :verifications, controller: :verifications, only: :index do
collection { get :search}
end
diff --git a/spec/features/admin/valuators_spec.rb b/spec/features/admin/valuators_spec.rb
new file mode 100644
index 000000000..a4b17f699
--- /dev/null
+++ b/spec/features/admin/valuators_spec.rb
@@ -0,0 +1,30 @@
+require 'rails_helper'
+
+feature 'Admin valuators' do
+ background do
+ @admin = create(:administrator)
+ @user = create(:user, username: 'Jose Luis Balbin')
+ @valuator = create(:valuator)
+ login_as(@admin.user)
+ visit admin_valuators_path
+ end
+
+ scenario 'Index' do
+ expect(page).to have_content @valuator.name
+ expect(page).to have_content @valuator.email
+ expect(page).to_not have_content @user.name
+ end
+
+ scenario 'Create Valuator', :js do
+ fill_in 'email', with: @user.email
+ click_button 'Search'
+
+ expect(page).to have_content @user.name
+ click_link 'Add'
+ within("#valuators") do
+ expect(page).to have_content @user.name
+ end
+ end
+
+end
+