49 lines
1.5 KiB
Ruby
49 lines
1.5 KiB
Ruby
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
|
|
|
|
# Adds a last_owner_update time on ticket changes.
|
|
module Ticket::SetsLastOwnerUpdateTime
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
before_create :ticket_set_last_owner_update_time
|
|
before_update :ticket_set_last_owner_update_time
|
|
end
|
|
|
|
private
|
|
|
|
def ticket_set_last_owner_update_time
|
|
|
|
# return if we run import mode
|
|
return true if Setting.get('import_mode')
|
|
# check if owner, state or group has changed
|
|
return true if changes_to_save['owner_id'].blank? && changes_to_save['state_id'].blank? && changes_to_save['group_id'].blank? && changes_to_save['last_contact_agent_at'].blank?
|
|
|
|
# check if owner is nobody
|
|
if changes_to_save['owner_id'].present? && changes_to_save['owner_id'][1] == 1
|
|
self.last_owner_update_at = nil
|
|
return true
|
|
end
|
|
|
|
# check if group is change
|
|
if changes_to_save['group_id'].present?
|
|
group = Group.lookup(id: changes_to_save['group_id'][1])
|
|
return true if !group
|
|
|
|
if group.assignment_timeout.blank? || group.assignment_timeout.zero?
|
|
self.last_owner_update_at = nil
|
|
return true
|
|
end
|
|
end
|
|
|
|
# check if state is not new/open
|
|
if changes_to_save['state_id'].present?
|
|
state_ids = Ticket::State.by_category(:work_on).pluck(:id)
|
|
if state_ids.exclude?(changes_to_save['state_id'][1])
|
|
self.last_owner_update_at = nil
|
|
return true
|
|
end
|
|
end
|
|
|
|
self.last_owner_update_at = Time.zone.now
|
|
end
|
|
end
|