diff --git a/app/controllers/enumerations_controller.rb b/app/controllers/enumerations_controller.rb index 4e5475bec..125e87cff 100644 --- a/app/controllers/enumerations_controller.rb +++ b/app/controllers/enumerations_controller.rb @@ -77,7 +77,7 @@ class EnumerationsController < ApplicationController return end end - @enumerations = @enumeration.class.all - [@enumeration] + @enumerations = @enumeration.class.system.all - [@enumeration] end private diff --git a/app/models/enumeration.rb b/app/models/enumeration.rb index 1946735ec..7e8bf5a81 100644 --- a/app/models/enumeration.rb +++ b/app/models/enumeration.rb @@ -38,6 +38,7 @@ class Enumeration < ActiveRecord::Base scope :shared, lambda { where(:project_id => nil) } scope :sorted, lambda { order("#{table_name}.position ASC") } scope :active, lambda { where(:active => true) } + scope :system, lambda { where(:project_id => nil) } scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)} def self.default diff --git a/app/models/time_entry_activity.rb b/app/models/time_entry_activity.rb index f2a18d1d0..58a6de13d 100644 --- a/app/models/time_entry_activity.rb +++ b/app/models/time_entry_activity.rb @@ -24,11 +24,15 @@ class TimeEntryActivity < Enumeration OptionName end + def objects + TimeEntry.where(:activity_id => self_and_descendants(1).map(&:id)) + end + def objects_count - time_entries.count + objects.count end def transfer_relations(to) - time_entries.update_all("activity_id = #{to.id}") + objects.update_all(:activity_id => to.id) end end diff --git a/test/object_helpers.rb b/test/object_helpers.rb index 0b6ec01d8..41d6b1892 100644 --- a/test/object_helpers.rb +++ b/test/object_helpers.rb @@ -107,10 +107,11 @@ module ObjectHelpers def TimeEntry.generate!(attributes={}) entry = TimeEntry.new(attributes) entry.user ||= User.find(2) - entry.issue ||= Issue.find(1) + entry.issue ||= Issue.find(1) unless entry.project entry.project ||= entry.issue.project entry.activity ||= TimeEntryActivity.first entry.spent_on ||= Date.today + entry.hours ||= 1.0 entry.save! entry end diff --git a/test/unit/time_entry_activity_test.rb b/test/unit/time_entry_activity_test.rb index 3a7547415..a094c84ca 100644 --- a/test/unit/time_entry_activity_test.rb +++ b/test/unit/time_entry_activity_test.rb @@ -84,5 +84,33 @@ class TimeEntryActivityTest < ActiveSupport::TestCase e.reload assert_equal "0", e.custom_value_for(field).value end -end + def test_system_activity_with_child_in_use_should_be_in_use + project = Project.generate! + system_activity = TimeEntryActivity.create!(:name => 'Activity') + project_activity = TimeEntryActivity.create!(:name => 'Activity', :project => project, :parent_id => system_activity.id) + + TimeEntry.generate!(:project => project, :activity => project_activity) + + assert project_activity.in_use? + assert system_activity.in_use? + end + + def test_destroying_a_system_activity_should_reassign_children_activities + project = Project.generate! + system_activity = TimeEntryActivity.create!(:name => 'Activity') + project_activity = TimeEntryActivity.create!(:name => 'Activity', :project => project, :parent_id => system_activity.id) + + entries = [ + TimeEntry.generate!(:project => project, :activity => system_activity), + TimeEntry.generate!(:project => project, :activity => project_activity) + ] + + assert_difference 'TimeEntryActivity.count', -2 do + assert_nothing_raised do + assert system_activity.destroy(TimeEntryActivity.find_by_name('Development')) + end + end + assert entries.all? {|entry| entry.reload.activity.name == 'Development'} + end +end