diff --git a/app/helpers/timelog_helper.rb b/app/helpers/timelog_helper.rb index 838943a8c..e82da6e31 100644 --- a/app/helpers/timelog_helper.rb +++ b/app/helpers/timelog_helper.rb @@ -26,11 +26,7 @@ module TimelogHelper def activity_collection_for_select_options(time_entry=nil, project=nil) project ||= time_entry.try(:project) project ||= @project - if project.nil? - activities = TimeEntryActivity.shared.active - else - activities = project.activities - end + activities = TimeEntryActivity.available_activities(project) collection = [] if time_entry && time_entry.activity && !time_entry.activity.active? diff --git a/app/models/time_entry.rb b/app/models/time_entry.rb index 7776db0d8..18ae8eeb8 100644 --- a/app/models/time_entry.rb +++ b/app/models/time_entry.rb @@ -109,6 +109,8 @@ class TimeEntry < ActiveRecord::Base if new_record? && self.activity.nil? if default_activity = TimeEntryActivity.default(self.project) self.activity_id = default_activity.id + elsif (activities = TimeEntryActivity.available_activities(self.project)) && activities.count == 1 + self.activity_id = activities.first.id end self.hours = nil if hours == 0 end diff --git a/app/models/time_entry_activity.rb b/app/models/time_entry_activity.rb index 40505019c..1f0c98b79 100644 --- a/app/models/time_entry_activity.rb +++ b/app/models/time_entry_activity.rb @@ -32,6 +32,14 @@ class TimeEntryActivity < Enumeration project.activities.detect { |activity| activity.parent_id == default_activity.id } end + def self.available_activities(project=nil) + if project.nil? + TimeEntryActivity.shared.active + else + project.activities + end + end + def option_name OptionName end diff --git a/test/unit/time_entry_test.rb b/test/unit/time_entry_test.rb index 7f9e18173..088af3504 100644 --- a/test/unit/time_entry_test.rb +++ b/test/unit/time_entry_test.rb @@ -139,6 +139,21 @@ class TimeEntryTest < ActiveSupport::TestCase assert_equal entry.activity_id, project_specific_default_activity.id end + def test_activity_id_should_be_set_automatically_if_there_is_only_one_activity_available + project = Project.find(1) + TimeEntry.all.destroy_all + TimeEntryActivity.destroy_all + only_one_activity = TimeEntryActivity.create!( + name: 'Development', + parent_id: nil, + project_id: nil, + is_default: false + ) + + entry = TimeEntry.new(project: project) + assert_equal entry.activity_id, only_one_activity.id + end + def test_should_accept_future_dates entry = TimeEntry.generate entry.spent_on = User.current.today + 1