2020-07-07 18:44:07 +00:00
|
|
|
class RoundRobin::AssignmentService
|
2022-03-28 09:08:07 +00:00
|
|
|
pattr_initialize [:conversation, { allowed_member_ids: [] }]
|
|
|
|
|
|
|
|
def find_assignee
|
|
|
|
round_robin_manage_service.available_agent(priority_list: online_agents)
|
|
|
|
end
|
2020-07-07 18:44:07 +00:00
|
|
|
|
|
|
|
def perform
|
|
|
|
# online agents will get priority
|
2022-03-28 09:08:07 +00:00
|
|
|
new_assignee = find_assignee
|
2020-07-07 18:44:07 +00:00
|
|
|
conversation.update(assignee: new_assignee) if new_assignee
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def online_agents
|
|
|
|
online_agents = OnlineStatusTracker.get_available_users(conversation.account_id)
|
|
|
|
online_agents.select { |_key, value| value.eql?('online') }.keys if online_agents.present?
|
|
|
|
end
|
|
|
|
|
|
|
|
def round_robin_manage_service
|
2022-03-28 09:08:07 +00:00
|
|
|
@round_robin_manage_service ||= RoundRobin::ManageService.new(inbox: conversation.inbox, allowed_member_ids: allowed_member_ids)
|
2020-07-07 18:44:07 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def round_robin_key
|
|
|
|
format(::Redis::Alfred::ROUND_ROBIN_AGENTS, inbox_id: conversation.inbox_id)
|
|
|
|
end
|
|
|
|
end
|