35 lines
926 B
Ruby
35 lines
926 B
Ruby
|
|
class UserInviteRequest < ApplicationRecord
|
||
|
|
MAX_USER_INVITE_REQUEST = ArchiveConfig.MAX_USER_INVITE_REQUEST
|
||
|
|
|
||
|
|
belongs_to :user
|
||
|
|
validates_presence_of :quantity
|
||
|
|
validates_presence_of :reason
|
||
|
|
validates :quantity, numericality: {less_than_or_equal_to: MAX_USER_INVITE_REQUEST}
|
||
|
|
|
||
|
|
before_update :check_status, :grant_request
|
||
|
|
|
||
|
|
scope :not_handled, -> { where(handled: false) }
|
||
|
|
|
||
|
|
private
|
||
|
|
|
||
|
|
#Mark the request granted and/or handled as appropriate
|
||
|
|
def check_status
|
||
|
|
self.handled = true
|
||
|
|
if self.quantity > 0
|
||
|
|
self.granted = true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
#Create new invitations for the user who requested them
|
||
|
|
def grant_request
|
||
|
|
if self.granted?
|
||
|
|
self.quantity.times do
|
||
|
|
self.user.invitations.create
|
||
|
|
end
|
||
|
|
I18n.with_locale(self.user.preference.locale_for_mails) do
|
||
|
|
UserMailer.invite_increase_notification(self.user.id, self.quantity).deliver_after_commit
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|