app/models/policy_manager/portability_request.rb
require "aasm"
module PolicyManager
class PortabilityRequest < ApplicationRecord
belongs_to :user, class_name: Config.user_resource.to_s, foreign_key: :user_id
if PolicyManager::Config.paperclip
include PolicyManager::Concerns::PaperclipBehavior
else
include PolicyManager::Concerns::ActiveStorageBehavior
end
include AASM
aasm column: :state do
state :pending, :initial => true, :after_enter => :notify_progress_to_admin
state :progress, :after_enter => :handle_progress
state :completed, :after_enter => :notify_completeness
event :confirm do
transitions from: :pending, to: :progress
end
event :complete do
transitions from: :progress, to: :completed
end
end
def user_email
self.user.email
end
def handle_progress
notify_progress
perform_job
end
def perform_job
ExporterJob.set(queue: :default).perform_later(self.user.id)
end
def notify_progress
PortabilityMailer.progress_notification(self.id).deliver_now
end
def notify_progress_to_admin
PortabilityMailer.admin_notification(self.user.id).deliver_now
end
def notify_completeness
PortabilityMailer.completed_notification(self.id).deliver_now
end
end
end