Assign valuators to groups
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
class Admin::ValuatorsController < Admin::BaseController
|
class Admin::ValuatorsController < Admin::BaseController
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
|
||||||
|
def show
|
||||||
|
@valuator = Valuator.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@valuators = @valuators.page(params[:page])
|
@valuators = @valuators.page(params[:page])
|
||||||
end
|
end
|
||||||
@@ -13,12 +17,27 @@ class Admin::ValuatorsController < Admin::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@valuator = Valuator.new(create_params)
|
@valuator = Valuator.new(valuator_params)
|
||||||
@valuator.save
|
@valuator.save
|
||||||
|
|
||||||
redirect_to admin_valuators_path
|
redirect_to admin_valuators_path
|
||||||
end
|
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
|
def destroy
|
||||||
@valuator.destroy
|
@valuator.destroy
|
||||||
redirect_to admin_valuators_path
|
redirect_to admin_valuators_path
|
||||||
@@ -30,9 +49,9 @@ class Admin::ValuatorsController < Admin::BaseController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def create_params
|
def valuator_params
|
||||||
params[:valuator][:description] = nil if params[:valuator][:description].blank?
|
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
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ module Abilities
|
|||||||
|
|
||||||
can [:search, :create, :index, :destroy], ::Administrator
|
can [:search, :create, :index, :destroy], ::Administrator
|
||||||
can [:search, :create, :index, :destroy], ::Moderator
|
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, :create, :index, :destroy], ::Manager
|
||||||
can [:search, :index], ::User
|
can [:search, :index], ::User
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
class Valuator < ActiveRecord::Base
|
class Valuator < ActiveRecord::Base
|
||||||
belongs_to :user, touch: true
|
belongs_to :user, touch: true
|
||||||
|
belongs_to :valuator_group
|
||||||
|
|
||||||
delegate :name, :email, :name_and_email, to: :user
|
delegate :name, :email, :name_and_email, to: :user
|
||||||
|
|
||||||
has_many :valuation_assignments, dependent: :destroy
|
has_many :valuation_assignments, dependent: :destroy
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
class ValuatorGroup < ActiveRecord::Base
|
class ValuatorGroup < ActiveRecord::Base
|
||||||
|
has_many :valuators
|
||||||
end
|
end
|
||||||
@@ -2,3 +2,5 @@
|
|||||||
<%= f.text_field :name %>
|
<%= f.text_field :name %>
|
||||||
<%= f.submit %>
|
<%= f.submit %>
|
||||||
<% end %>
|
<% 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.name") %></th>
|
||||||
<th scope="col"><%= t("admin.valuators.index.email") %></th>
|
<th scope="col"><%= t("admin.valuators.index.email") %></th>
|
||||||
<th scope="col"><%= t("admin.valuators.index.description") %></th>
|
<th scope="col"><%= t("admin.valuators.index.description") %></th>
|
||||||
|
<th scope="col">Grupo</th>
|
||||||
<th scope="col"><%= t("admin.actions.actions") %></th>
|
<th scope="col"><%= t("admin.actions.actions") %></th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -28,6 +29,12 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<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"),
|
<%= link_to t("admin.valuators.valuator.delete"),
|
||||||
admin_valuator_path(valuator),
|
admin_valuator_path(valuator),
|
||||||
method: :delete,
|
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
|
get :search, on: :collection
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :valuators, only: [:index, :create, :destroy] do
|
resources :valuators, only: [:show, :index, :edit, :update, :create, :destroy] do
|
||||||
get :search, on: :collection
|
get :search, on: :collection
|
||||||
get :summary, on: :collection
|
get :summary, on: :collection
|
||||||
end
|
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.string "description"
|
||||||
t.integer "spending_proposals_count", default: 0
|
t.integer "spending_proposals_count", default: 0
|
||||||
t.integer "budget_investments_count", default: 0
|
t.integer "budget_investments_count", default: 0
|
||||||
|
t.integer "valuator_group_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "valuators", ["user_id"], name: "index_valuators_on_user_id", using: :btree
|
add_index "valuators", ["user_id"], name: "index_valuators_on_user_id", using: :btree
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
feature "Valuator groups", :focus do
|
feature "Valuator groups" do
|
||||||
|
|
||||||
let(:admin) { create(:administrator).user }
|
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"
|
expect(page).to have_content "There are 0 groups of users"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
pending "When we change the group of a Valuator we should also change the valuator_assignments"
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -9,13 +9,21 @@ feature 'Admin valuators' do
|
|||||||
visit admin_valuators_path
|
visit admin_valuators_path
|
||||||
end
|
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
|
scenario 'Index' do
|
||||||
expect(page).to have_content(@valuator.name)
|
expect(page).to have_content(@valuator.name)
|
||||||
expect(page).to have_content(@valuator.email)
|
expect(page).to have_content(@valuator.email)
|
||||||
expect(page).not_to have_content(@user.name)
|
expect(page).not_to have_content(@user.name)
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Create Valuator', :js do
|
scenario 'Create', :js do
|
||||||
fill_in 'name_or_email', with: @user.email
|
fill_in 'name_or_email', with: @user.email
|
||||||
click_button 'Search'
|
click_button 'Search'
|
||||||
|
|
||||||
@@ -29,7 +37,19 @@ feature 'Admin valuators' do
|
|||||||
end
|
end
|
||||||
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'
|
click_link 'Delete'
|
||||||
|
|
||||||
within('#valuators') do
|
within('#valuators') do
|
||||||
@@ -85,4 +105,48 @@ feature 'Admin valuators' do
|
|||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|||||||
@@ -15,4 +15,8 @@ describe Valuator do
|
|||||||
expect(valuator.description_or_email).to eq(valuator.email)
|
expect(valuator.description_or_email).to eq(valuator.email)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "Group" do
|
||||||
|
pending "should reasign investments when the group changes"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user