diff --git a/enterprise/app/jobs/sla/process_account_applied_slas_job.rb b/enterprise/app/jobs/sla/process_account_applied_slas_job.rb index 7dbb1f839..1ddd394f7 100644 --- a/enterprise/app/jobs/sla/process_account_applied_slas_job.rb +++ b/enterprise/app/jobs/sla/process_account_applied_slas_job.rb @@ -10,10 +10,37 @@ class Sla::ProcessAccountAppliedSlasJob < ApplicationJob missed_slas << applied_sla if applied_sla.status == :missed || applied_sla.status == :active_with_misses end - notify_missed_slas(missed_slas, account) + user_sla_map = build_user_sla_map(missed_slas) + notify_users(user_sla_map, account) end - def notify_missed_slas(missed_slas, account) - # notify_users = account.administrators + def build_user_sla_map(missed_slas) + user_sla_map = {} + + missed_slas.each do |applied_sla| + # get all participants of the conversation + users_to_notify = applied_sla.conversation.conversation_participants.map(&:user) + assignee = applied_sla.conversation.assignee + + users_to_notify.each do |user| + user_sla_map[user] ||= [] + user_sla_map[user] << applied_sla + end + + if assignee.present? + user_sla_map[assignee] ||= [] + user_sla_map[assignee] << applied_sla + end + end + + user_sla_map + end + + def notify_users(user_sla_map, account) + admins = account.administrators + + user_sla_map.each do |user, slas| + puts "Notifying user #{user.id} and #{admins.count} admins about #{slas.count} missed SLAs" + end end end