58 |
58 |
end
|
59 |
59 |
|
60 |
60 |
def self.default_activity_id(user=nil, project=nil)
|
61 |
|
default_activities = []
|
62 |
|
default_activity = nil
|
63 |
61 |
available_activities = self.available_activities(project)
|
|
62 |
return nil if available_activities.empty?
|
|
63 |
return available_activities.first.id if available_activities.one?
|
64 |
64 |
|
65 |
|
if project && user
|
66 |
|
user_membership = user.membership(project)
|
67 |
|
if user_membership
|
68 |
|
default_activities = user_membership.roles.where.not(:default_time_entry_activity_id => nil).sort.pluck(:default_time_entry_activity_id)
|
69 |
|
end
|
70 |
|
|
71 |
|
project_default_activity = self.default(project)
|
72 |
|
if project_default_activity && !default_activities.include?(project_default_activity.id)
|
73 |
|
default_activities << project_default_activity.id
|
|
65 |
find_matching_activity = ->(ids) do
|
|
66 |
ids.each do |id|
|
|
67 |
activity = available_activities.detect { |a| a.id == id || a.parent_id == id }
|
|
68 |
return activity.id if activity
|
74 |
69 |
end
|
|
70 |
nil
|
75 |
71 |
end
|
76 |
72 |
|
77 |
|
global_activity = self.default
|
78 |
|
if global_activity && !default_activities.include?(global_activity.id)
|
79 |
|
default_activities << global_activity.id
|
80 |
|
end
|
|
73 |
if project && user
|
|
74 |
if (user_membership = user.membership(project))
|
|
75 |
activity_ids = user_membership.roles.where.not(:default_time_entry_activity_id => nil).sort.pluck(:default_time_entry_activity_id)
|
|
76 |
aid = find_matching_activity.call(activity_ids)
|
|
77 |
return aid if aid
|
|
78 |
end
|
81 |
79 |
|
82 |
|
if available_activities.count == 1 && !default_activities.include?(available_activities.first.id)
|
83 |
|
default_activities << available_activities.first.id
|
|
80 |
if (project_default_activity = self.default(project))
|
|
81 |
aid = find_matching_activity.call([project_default_activity.id])
|
|
82 |
return aid if aid
|
|
83 |
end
|
84 |
84 |
end
|
85 |
85 |
|
86 |
|
default_activities.each do |id|
|
87 |
|
default_activity = available_activities.detect{ |a| a.id == id || a.parent_id == id }
|
88 |
|
break unless default_activity.nil?
|
|
86 |
if (global_activity = self.default)
|
|
87 |
aid = find_matching_activity.call([global_activity.id])
|
|
88 |
return aid if aid
|
89 |
89 |
end
|
90 |
90 |
|
91 |
|
default_activity&.id
|
|
91 |
nil
|
92 |
92 |
end
|
93 |
93 |
end
|