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

    + + +<%= 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 +