mirror of
https://github.com/internetee/registry.git
synced 2025-07-27 21:16:12 +02:00
48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
class Action < ApplicationRecord
|
|
has_paper_trail versions: { class_name: 'Version::ActionVersion' }
|
|
|
|
belongs_to :user
|
|
belongs_to :contact, optional: true
|
|
has_many :notifications, dependent: :nullify
|
|
has_many :subactions, class_name: 'Action',
|
|
foreign_key: 'bulk_action_id',
|
|
inverse_of: :bulk_action,
|
|
dependent: :destroy
|
|
belongs_to :bulk_action, class_name: 'Action', optional: true
|
|
|
|
validates :operation, inclusion: { in: proc { |action| action.class.valid_operations } }
|
|
|
|
class << self
|
|
def valid_operations
|
|
%w[update bulk_update]
|
|
end
|
|
end
|
|
|
|
def notification_key
|
|
raise 'Action object is missing' unless bulk_action? || contact
|
|
|
|
"contact_#{operation}".to_sym
|
|
end
|
|
|
|
def bulk_action?
|
|
!!subactions.exists?
|
|
end
|
|
|
|
def to_non_available_contact_codes
|
|
return [serialized_contact(contact)] unless bulk_action?
|
|
|
|
subactions.map do |a|
|
|
serialized_contact(a.contact)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def serialized_contact(contact)
|
|
{
|
|
code: contact.code,
|
|
avail: 0,
|
|
reason: 'in use',
|
|
}
|
|
end
|
|
end
|