From ab498d6d9387ab2bacd135446181e83f6dc4500e Mon Sep 17 00:00:00 2001 From: rgarcia Date: Thu, 8 Feb 2018 22:26:02 +0100 Subject: [PATCH] Assign groups to investments --- .../admin/budget_investments_controller.rb | 3 ++- app/models/budget/investment.rb | 3 +++ .../budget/valuator_group_assignment.rb | 6 +++++ .../admin/budget_investments/edit.html.erb | 11 +++++++- .../admin/budget_investments/show.html.erb | 9 +++++++ ...create_budget_valuator_group_assignment.rb | 8 ++++++ db/schema.rb | 5 ++++ .../features/admin/budget_investments_spec.rb | 27 +++++++++++++++++++ spec/features/admin/valuator_groups_spec.rb | 2 +- spec/features/admin/valuators_spec.rb | 15 +++++------ 10 files changed, 78 insertions(+), 11 deletions(-) create mode 100644 app/models/budget/valuator_group_assignment.rb create mode 100644 db/migrate/20180208200659_create_budget_valuator_group_assignment.rb diff --git a/app/controllers/admin/budget_investments_controller.rb b/app/controllers/admin/budget_investments_controller.rb index 9f885f474..31eb0f24b 100644 --- a/app/controllers/admin/budget_investments_controller.rb +++ b/app/controllers/admin/budget_investments_controller.rb @@ -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 diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb index 53d27a741..993d7e505 100644 --- a/app/models/budget/investment.rb +++ b/app/models/budget/investment.rb @@ -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' diff --git a/app/models/budget/valuator_group_assignment.rb b/app/models/budget/valuator_group_assignment.rb new file mode 100644 index 000000000..1aa4331fc --- /dev/null +++ b/app/models/budget/valuator_group_assignment.rb @@ -0,0 +1,6 @@ +class Budget + class ValuatorGroupAssignment < ActiveRecord::Base + belongs_to :valuator_group + belongs_to :investment + end +end \ No newline at end of file diff --git a/app/views/admin/budget_investments/edit.html.erb b/app/views/admin/budget_investments/edit.html.erb index f750c021b..533053530 100644 --- a/app/views/admin/budget_investments/edit.html.erb +++ b/app/views/admin/budget_investments/edit.html.erb @@ -59,6 +59,16 @@ class: 'js-tag-list' %> +

Groups

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

Valuators

<%= f.label :valuator_ids, t("admin.budget_investments.edit.assigned_valuators") %> @@ -68,7 +78,6 @@
-
<% if @investment.incompatible? || @investment.winner? %>
diff --git a/app/views/admin/budget_investments/show.html.erb b/app/views/admin/budget_investments/show.html.erb index 939830aff..8f11333b4 100644 --- a/app/views/admin/budget_investments/show.html.erb +++ b/app/views/admin/budget_investments/show.html.erb @@ -22,6 +22,15 @@ <%= @investment.tags_on(:valuation).pluck(:name).sort.join(', ') %>

+

+ Valuator Groups: + <% if @investment.valuator_groups.any? %> + <%= @investment.valuator_groups.collect(&:name).join(', ') %> + <% else %> + <%= t("admin.budget_investments.show.undefined") %> + <% end %> +

+

<%= t("admin.budget_investments.show.assigned_valuators") %>: <% if @investment.valuators.any? %> diff --git a/db/migrate/20180208200659_create_budget_valuator_group_assignment.rb b/db/migrate/20180208200659_create_budget_valuator_group_assignment.rb new file mode 100644 index 000000000..916ed298e --- /dev/null +++ b/db/migrate/20180208200659_create_budget_valuator_group_assignment.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 154ced3d7..45deca085 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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 diff --git a/spec/features/admin/budget_investments_spec.rb b/spec/features/admin/budget_investments_spec.rb index 9eb548c30..983f1ed8a 100644 --- a/spec/features/admin/budget_investments_spec.rb +++ b/spec/features/admin/budget_investments_spec.rb @@ -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') diff --git a/spec/features/admin/valuator_groups_spec.rb b/spec/features/admin/valuator_groups_spec.rb index 391bb441b..6ac10e59c 100644 --- a/spec/features/admin/valuator_groups_spec.rb +++ b/spec/features/admin/valuator_groups_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -feature "Valuator groups" do +feature "Valuator groups", :focus do let(:admin) { create(:administrator).user } diff --git a/spec/features/admin/valuators_spec.rb b/spec/features/admin/valuators_spec.rb index 25f8eb3fb..bac000c6d 100644 --- a/spec/features/admin/valuators_spec.rb +++ b/spec/features/admin/valuators_spec.rb @@ -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"