Assign groups to investments
This commit is contained in:
@@ -33,6 +33,7 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
|
||||
load_admins
|
||||
load_valuators
|
||||
load_tags
|
||||
@valuator_groups = ValuatorGroup.all
|
||||
end
|
||||
|
||||
def update
|
||||
@@ -93,7 +94,7 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
|
||||
def budget_investment_params
|
||||
params.require(:budget_investment)
|
||||
.permit(:title, :description, :external_url, :heading_id, :administrator_id, :tag_list,
|
||||
:valuation_tag_list, :incompatible, :selected, valuator_ids: [])
|
||||
:valuation_tag_list, :incompatible, :selected, valuator_ids: [], valuator_group_ids: [])
|
||||
end
|
||||
|
||||
def load_budget
|
||||
|
||||
@@ -35,6 +35,9 @@ class Budget
|
||||
has_many :valuator_assignments, dependent: :destroy
|
||||
has_many :valuators, through: :valuator_assignments
|
||||
|
||||
has_many :valuator_group_assignments, dependent: :destroy
|
||||
has_many :valuator_groups, through: :valuator_group_assignments
|
||||
|
||||
has_many :comments, -> {where(valuation: false)}, as: :commentable, class_name: 'Comment'
|
||||
has_many :valuations, -> {where(valuation: true)}, as: :commentable, class_name: 'Comment'
|
||||
|
||||
|
||||
6
app/models/budget/valuator_group_assignment.rb
Normal file
6
app/models/budget/valuator_group_assignment.rb
Normal file
@@ -0,0 +1,6 @@
|
||||
class Budget
|
||||
class ValuatorGroupAssignment < ActiveRecord::Base
|
||||
belongs_to :valuator_group
|
||||
belongs_to :investment
|
||||
end
|
||||
end
|
||||
@@ -59,6 +59,16 @@
|
||||
class: 'js-tag-list' %>
|
||||
</div>
|
||||
|
||||
<p>Groups</p>
|
||||
<div class="small-12 column">
|
||||
<%= f.label :valuator_ids, "Groups assigned" %>
|
||||
<%= f.collection_check_boxes :valuator_group_ids, @valuator_groups, :id, :name do |group| %>
|
||||
|
||||
<%= group.label(title: group.object.name) { group.check_box + truncate(group.object.name, length: 60) } %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<p>Valuators</p>
|
||||
<div class="small-12 column">
|
||||
<%= f.label :valuator_ids, t("admin.budget_investments.edit.assigned_valuators") %>
|
||||
|
||||
@@ -68,7 +78,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row margin-top">
|
||||
<% if @investment.incompatible? || @investment.winner? %>
|
||||
<div class="small-12 medium-3 column">
|
||||
|
||||
@@ -22,6 +22,15 @@
|
||||
<%= @investment.tags_on(:valuation).pluck(:name).sort.join(', ') %>
|
||||
</p>
|
||||
|
||||
<p id="assigned_valuator_groups">
|
||||
<strong>Valuator Groups:</strong>
|
||||
<% if @investment.valuator_groups.any? %>
|
||||
<%= @investment.valuator_groups.collect(&:name).join(', ') %>
|
||||
<% else %>
|
||||
<%= t("admin.budget_investments.show.undefined") %>
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
<p id="assigned_valuators">
|
||||
<strong><%= t("admin.budget_investments.show.assigned_valuators") %>:</strong>
|
||||
<% if @investment.valuators.any? %>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
class CreateBudgetValuatorGroupAssignment < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :budget_valuator_group_assignments do |t|
|
||||
t.integer :valuator_group_id
|
||||
t.integer :investment_id
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -203,6 +203,11 @@ ActiveRecord::Schema.define(version: 20180320104823) do
|
||||
|
||||
add_index "budget_valuator_assignments", ["investment_id"], name: "index_budget_valuator_assignments_on_investment_id", using: :btree
|
||||
|
||||
create_table "budget_valuator_group_assignments", force: :cascade do |t|
|
||||
t.integer "valuator_group_id"
|
||||
t.integer "investment_id"
|
||||
end
|
||||
|
||||
create_table "budgets", force: :cascade do |t|
|
||||
t.string "name", limit: 80
|
||||
t.string "currency_symbol", limit: 10
|
||||
|
||||
@@ -579,6 +579,33 @@ feature 'Admin budget investments' do
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Add valuator group" do
|
||||
budget_investment = create(:budget_investment)
|
||||
|
||||
health_group = create(:valuator_group, name: "Health")
|
||||
economy_group = create(:valuator_group, name: "Economy")
|
||||
culture_group = create(:valuator_group, name: "Culture")
|
||||
|
||||
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
||||
click_link 'Edit classification'
|
||||
|
||||
check "budget_investment_valuator_group_ids_#{health_group.id}"
|
||||
check "budget_investment_valuator_group_ids_#{culture_group.id}"
|
||||
|
||||
click_button 'Update'
|
||||
|
||||
expect(page).to have_content 'Investment project updated succesfully.'
|
||||
|
||||
within('#assigned_valuator_groups') do
|
||||
expect(page).to have_content('Health')
|
||||
expect(page).to have_content('Culture')
|
||||
expect(page).not_to have_content('Undefined')
|
||||
expect(page).not_to have_content('Economy')
|
||||
end
|
||||
end
|
||||
|
||||
pending "Do not display valuators of an assigned group"
|
||||
|
||||
scenario "Adds existing valuation tags", :js do
|
||||
budget_investment1 = create(:budget_investment)
|
||||
budget_investment1.set_tag_list_on(:valuation, 'Education, Health')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'rails_helper'
|
||||
|
||||
feature "Valuator groups" do
|
||||
feature "Valuator groups", :focus do
|
||||
|
||||
let(:admin) { create(:administrator).user }
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'rails_helper'
|
||||
|
||||
feature 'Admin valuators' do
|
||||
feature 'Admin valuators', :focus do
|
||||
background do
|
||||
@admin = create(:administrator)
|
||||
@user = create(:user, username: 'Jose Luis Balbin')
|
||||
@@ -37,15 +37,14 @@ feature 'Admin valuators' do
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Edit", :focus do
|
||||
scenario "Edit" 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"
|
||||
click_button "Update Evaluador"
|
||||
|
||||
expect(page).to have_content "Valuator updated successfully"
|
||||
expect(page).to have_content "john@valuators.org"
|
||||
expect(page).to have_content @valuator.email
|
||||
expect(page).to have_content "Valuator for health"
|
||||
end
|
||||
|
||||
@@ -105,7 +104,7 @@ feature 'Admin valuators' do
|
||||
end
|
||||
end
|
||||
|
||||
context "Valuator Group", :focus do
|
||||
context "Valuator Group" do
|
||||
|
||||
scenario "Add a valuator to a group" do
|
||||
valuator = create(:valuator)
|
||||
@@ -124,7 +123,7 @@ feature 'Admin valuators' 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)
|
||||
valuator.update(valuator_group: group1)
|
||||
|
||||
visit edit_admin_valuator_path(valuator)
|
||||
select "Economy", from: "valuator_valuator_group_id"
|
||||
@@ -137,7 +136,7 @@ feature 'Admin valuators' do
|
||||
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)
|
||||
valuator.update(valuator_group: group1)
|
||||
|
||||
visit edit_admin_valuator_path(valuator)
|
||||
select "", from: "valuator_valuator_group_id"
|
||||
|
||||
Reference in New Issue
Block a user