Assign valuators to groups
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
class Admin::ValuatorsController < Admin::BaseController
|
||||
load_and_authorize_resource
|
||||
|
||||
def show
|
||||
@valuator = Valuator.find(params[:id])
|
||||
end
|
||||
|
||||
def index
|
||||
@valuators = @valuators.page(params[:page])
|
||||
end
|
||||
@@ -13,12 +17,27 @@ class Admin::ValuatorsController < Admin::BaseController
|
||||
end
|
||||
|
||||
def create
|
||||
@valuator = Valuator.new(create_params)
|
||||
@valuator = Valuator.new(valuator_params)
|
||||
@valuator.save
|
||||
|
||||
redirect_to admin_valuators_path
|
||||
end
|
||||
|
||||
def edit
|
||||
@valuator = Valuator.find(params[:id])
|
||||
@valuator_groups = ValuatorGroup.all
|
||||
end
|
||||
|
||||
def update
|
||||
@valuator = Valuator.find(params[:id])
|
||||
if @valuator.update(valuator_params)
|
||||
notice = "Valuator updated successfully"
|
||||
redirect_to [:admin, @valuator], notice: notice
|
||||
else
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@valuator.destroy
|
||||
redirect_to admin_valuators_path
|
||||
@@ -30,9 +49,9 @@ class Admin::ValuatorsController < Admin::BaseController
|
||||
|
||||
private
|
||||
|
||||
def create_params
|
||||
def valuator_params
|
||||
params[:valuator][:description] = nil if params[:valuator][:description].blank?
|
||||
params.require(:valuator).permit(:user_id, :description)
|
||||
params.require(:valuator).permit(:user_id, :description, :valuator_group_id)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -43,7 +43,7 @@ module Abilities
|
||||
|
||||
can [:search, :create, :index, :destroy], ::Administrator
|
||||
can [:search, :create, :index, :destroy], ::Moderator
|
||||
can [:search, :create, :index, :destroy, :summary], ::Valuator
|
||||
can [:search, :show, :edit, :update, :create, :index, :destroy, :summary], ::Valuator
|
||||
can [:search, :create, :index, :destroy], ::Manager
|
||||
can [:search, :index], ::User
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
class Valuator < ActiveRecord::Base
|
||||
belongs_to :user, touch: true
|
||||
belongs_to :valuator_group
|
||||
|
||||
delegate :name, :email, :name_and_email, to: :user
|
||||
|
||||
has_many :valuation_assignments, dependent: :destroy
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
class ValuatorGroup < ActiveRecord::Base
|
||||
has_many :valuators
|
||||
end
|
||||
@@ -2,3 +2,5 @@
|
||||
<%= f.text_field :name %>
|
||||
<%= f.submit %>
|
||||
<% end %>
|
||||
|
||||
<%= link_to "Go back", admin_valuator_groups_path %>
|
||||
9
app/views/admin/valuators/edit.html.erb
Normal file
9
app/views/admin/valuators/edit.html.erb
Normal file
@@ -0,0 +1,9 @@
|
||||
<%= form_for [:admin, @valuator] do |f| %>
|
||||
<%= f.text_field :description %>
|
||||
<%= f.select :valuator_group_id,
|
||||
@valuator_groups.map {|group| [group.name, group.id] },
|
||||
{ include_blank: true } %>
|
||||
<%= f.submit %>
|
||||
<% end %>
|
||||
|
||||
<%= link_to "Go back", admin_valuator_path(@valuator) %>
|
||||
@@ -13,6 +13,7 @@
|
||||
<th scope="col"><%= t("admin.valuators.index.name") %></th>
|
||||
<th scope="col"><%= t("admin.valuators.index.email") %></th>
|
||||
<th scope="col"><%= t("admin.valuators.index.description") %></th>
|
||||
<th scope="col">Grupo</th>
|
||||
<th scope="col"><%= t("admin.actions.actions") %></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -28,6 +29,12 @@
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<%= valuator.valuator_group.try(:name) %>
|
||||
</td>
|
||||
<td>
|
||||
<%= link_to "Edit",
|
||||
edit_admin_valuator_path(valuator),
|
||||
class: "button hollow expanded" %>
|
||||
<%= link_to t("admin.valuators.valuator.delete"),
|
||||
admin_valuator_path(valuator),
|
||||
method: :delete,
|
||||
|
||||
7
app/views/admin/valuators/show.html.erb
Normal file
7
app/views/admin/valuators/show.html.erb
Normal file
@@ -0,0 +1,7 @@
|
||||
<div>Name: <%= @valuator.name %></div>
|
||||
<div>Description <%= @valuator.description %></div>
|
||||
<div>Email: <%= @valuator.email %></div>
|
||||
<div>Group: <%= @valuator.valuator_group.try(:name) %></div>
|
||||
|
||||
<%= link_to "See all evaluators", admin_valuators_path %>
|
||||
<%= link_to "Edit", edit_admin_valuator_path(@valuator) %>
|
||||
@@ -80,7 +80,7 @@ namespace :admin do
|
||||
get :search, on: :collection
|
||||
end
|
||||
|
||||
resources :valuators, only: [:index, :create, :destroy] do
|
||||
resources :valuators, only: [:show, :index, :edit, :update, :create, :destroy] do
|
||||
get :search, on: :collection
|
||||
get :summary, on: :collection
|
||||
end
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddValuatorGroupToValuators < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :valuators, :valuator_group_id, :integer
|
||||
end
|
||||
end
|
||||
@@ -1142,6 +1142,7 @@ ActiveRecord::Schema.define(version: 20180320104823) do
|
||||
t.string "description"
|
||||
t.integer "spending_proposals_count", default: 0
|
||||
t.integer "budget_investments_count", default: 0
|
||||
t.integer "valuator_group_id"
|
||||
end
|
||||
|
||||
add_index "valuators", ["user_id"], name: "index_valuators_on_user_id", using: :btree
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'rails_helper'
|
||||
|
||||
feature "Valuator groups", :focus do
|
||||
feature "Valuator groups" do
|
||||
|
||||
let(:admin) { create(:administrator).user }
|
||||
|
||||
@@ -63,4 +63,6 @@ feature "Valuator groups", :focus do
|
||||
expect(page).to have_content "There are 0 groups of users"
|
||||
end
|
||||
|
||||
pending "When we change the group of a Valuator we should also change the valuator_assignments"
|
||||
|
||||
end
|
||||
@@ -9,13 +9,21 @@ feature 'Admin valuators' do
|
||||
visit admin_valuators_path
|
||||
end
|
||||
|
||||
scenario "Show", :focus do
|
||||
visit admin_valuator_path(@valuator)
|
||||
|
||||
expect(page).to have_content @valuator.name
|
||||
expect(page).to have_content @valuator.description
|
||||
expect(page).to have_content @valuator.email
|
||||
end
|
||||
|
||||
scenario 'Index' do
|
||||
expect(page).to have_content(@valuator.name)
|
||||
expect(page).to have_content(@valuator.email)
|
||||
expect(page).not_to have_content(@user.name)
|
||||
end
|
||||
|
||||
scenario 'Create Valuator', :js do
|
||||
scenario 'Create', :js do
|
||||
fill_in 'name_or_email', with: @user.email
|
||||
click_button 'Search'
|
||||
|
||||
@@ -29,7 +37,19 @@ feature 'Admin valuators' do
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'Delete Valuator' do
|
||||
scenario "Edit", :focus do
|
||||
visit edit_admin_valuator_path(@valuator)
|
||||
|
||||
fill_in 'name_or_email', with: "john@valuators.org"
|
||||
fill_in 'valuator_description', with: 'Valuator for health'
|
||||
click_link "Update valuator"
|
||||
|
||||
expect(page).to have_content "Valuator updated successfully"
|
||||
expect(page).to have_content "john@valuators.org"
|
||||
expect(page).to have_content "Valuator for health"
|
||||
end
|
||||
|
||||
scenario 'Destroy' do
|
||||
click_link 'Delete'
|
||||
|
||||
within('#valuators') do
|
||||
@@ -85,4 +105,48 @@ feature 'Admin valuators' do
|
||||
end
|
||||
end
|
||||
|
||||
context "Valuator Group", :focus do
|
||||
|
||||
scenario "Add a valuator to a group" do
|
||||
valuator = create(:valuator)
|
||||
group = create(:valuator_group, name: "Health")
|
||||
|
||||
visit edit_admin_valuator_path(valuator)
|
||||
|
||||
select "Health", from: "valuator_valuator_group_id"
|
||||
click_button "Update Evaluador"
|
||||
|
||||
expect(page).to have_content "Valuator updated successfully"
|
||||
expect(page).to have_content "Health"
|
||||
end
|
||||
|
||||
scenario "Update a valuator's group" do
|
||||
valuator = create(:valuator)
|
||||
group1 = create(:valuator_group, name: "Health")
|
||||
group2 = create(:valuator_group, name: "Economy")
|
||||
member = create(:valuator_group_member, valuator: valuator, valuator_group: group1)
|
||||
|
||||
visit edit_admin_valuator_path(valuator)
|
||||
select "Economy", from: "valuator_valuator_group_id"
|
||||
click_button "Update Evaluador"
|
||||
|
||||
expect(page).to have_content "Valuator updated successfully"
|
||||
expect(page).to have_content "Economy"
|
||||
end
|
||||
|
||||
scenario "Remove a valuator from a group" do
|
||||
valuator = create(:valuator)
|
||||
group1 = create(:valuator_group, name: "Health")
|
||||
member = create(:valuator_group_member, valuator: valuator, valuator_group: group1)
|
||||
|
||||
visit edit_admin_valuator_path(valuator)
|
||||
select "", from: "valuator_valuator_group_id"
|
||||
click_button "Update Evaluador"
|
||||
|
||||
expect(page).to have_content "Valuator updated successfully"
|
||||
expect(page).to_not have_content "Health"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -15,4 +15,8 @@ describe Valuator do
|
||||
expect(valuator.description_or_email).to eq(valuator.email)
|
||||
end
|
||||
end
|
||||
|
||||
describe "Group" do
|
||||
pending "should reasign investments when the group changes"
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user