123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
- class Chat::Agent < ApplicationModel
- belongs_to :created_by, class_name: 'User'
- belongs_to :updated_by, class_name: 'User'
- def seads_available
- concurrent - active_chat_count
- end
- def active_chat_count
- Chat::Session.where(state: %w[waiting running], user_id: updated_by_id).count
- end
- def self.state(user_id, state = nil)
- chat_agent = Chat::Agent.find_by(
- updated_by_id: user_id
- )
- if state.nil?
- return false if !chat_agent
- return chat_agent.active
- end
- # ATTENTION: setter return value indicates whether `active` state has changed
- if chat_agent
- chat_agent.active = state
- # always update `updated_at` to inform other Agent sessions
- # that this Agent session is still active
- chat_agent.updated_at = Time.zone.now
- chat_agent.save
- chat_agent.active_previously_changed?
- else
- Chat::Agent.create(
- active: state,
- updated_by_id: user_id,
- created_by_id: user_id,
- )
- end
- end
- def self.create_or_update(params)
- chat_agent = Chat::Agent.find_by(
- updated_by_id: params[:updated_by_id]
- )
- if chat_agent
- chat_agent.update!(params)
- else
- Chat::Agent.create(params)
- end
- end
- end
|