34 lines
926 B
Ruby
34 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
|