diff --git a/app/models/time_entry_activity.rb b/app/models/time_entry_activity.rb index aced46707..66245a461 100644 --- a/app/models/time_entry_activity.rb +++ b/app/models/time_entry_activity.rb @@ -58,36 +58,36 @@ class TimeEntryActivity < Enumeration end def self.default_activity_id(user=nil, project=nil) - default_activities = [] - default_activity = nil available_activities = self.available_activities(project) + return nil if available_activities.empty? + return available_activities.first.id if available_activities.one? - if project && user - user_membership = user.membership(project) - if user_membership - default_activities = user_membership.roles.where.not(:default_time_entry_activity_id => nil).sort.pluck(:default_time_entry_activity_id) - end - - project_default_activity = self.default(project) - if project_default_activity && !default_activities.include?(project_default_activity.id) - default_activities << project_default_activity.id + find_matching_activity = ->(ids) do + ids.each do |id| + activity = available_activities.detect { |a| a.id == id || a.parent_id == id } + return activity.id if activity end + nil end - global_activity = self.default - if global_activity && !default_activities.include?(global_activity.id) - default_activities << global_activity.id - end + if project && user + if (user_membership = user.membership(project)) + activity_ids = user_membership.roles.where.not(:default_time_entry_activity_id => nil).sort.pluck(:default_time_entry_activity_id) + aid = find_matching_activity.call(activity_ids) + return aid if aid + end - if available_activities.count == 1 && !default_activities.include?(available_activities.first.id) - default_activities << available_activities.first.id + if (project_default_activity = self.default(project)) + aid = find_matching_activity.call([project_default_activity.id]) + return aid if aid + end end - default_activities.each do |id| - default_activity = available_activities.detect{ |a| a.id == id || a.parent_id == id } - break unless default_activity.nil? + if (global_activity = self.default) + aid = find_matching_activity.call([global_activity.id]) + return aid if aid end - default_activity&.id + nil end end