| 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
|