Assign groups to investments

This commit is contained in:
rgarcia
2018-02-08 22:26:02 +01:00
parent 1dbbe331c9
commit ab498d6d93
10 changed files with 78 additions and 11 deletions

View File

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

View File

@@ -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'

View File

@@ -0,0 +1,6 @@
class Budget
class ValuatorGroupAssignment < ActiveRecord::Base
belongs_to :valuator_group
belongs_to :investment
end
end

View File

@@ -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">

View File

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

View File

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

View File

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

View File

@@ -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')

View File

@@ -1,6 +1,6 @@
require 'rails_helper'
feature "Valuator groups" do
feature "Valuator groups", :focus do
let(:admin) { create(:administrator).user }

View File

@@ -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"