jam-cloud/ruby/lib/jam_ruby/models/retailer_invitation.rb

90 lines
2.3 KiB
Ruby
Raw Normal View History

2016-08-31 09:19:16 +00:00
module JamRuby
class RetailerInvitation < ActiveRecord::Base
include HtmlSanitize
html_sanitize strict: [:note]
belongs_to :user, class_name: ::JamRuby::User
belongs_to :retailer, class_name: ::JamRuby::Retailer
validates :retailer, presence: true
validates :email, email: true
validates :invitation_code, presence: true
validates :accepted, inclusion: {in: [true, false]}
validates :first_name, presence: true
validates :last_name, presence: true
validate :retailer_has_name, on: :create
before_validation(on: :create) do
self.invitation_code = SecureRandom.urlsafe_base64 if self.invitation_code.nil?
end
def retailer_has_name
if retailer && retailer.name.blank?
errors.add(:retailer, "must have name")
end
end
def self.index(retailer, params)
limit = params[:per_page]
limit ||= 100
limit = limit.to_i
query = RetailerInvitation.where(retailer_id: retailer.id)
query = query.includes([:user, :retailer])
query = query.order('created_at')
query = query.where(accepted:false)
current_page = params[:page].nil? ? 1 : params[:page].to_i
next_page = current_page + 1
# will_paginate gem
query = query.paginate(:page => current_page, :per_page => limit)
if query.length == 0 # no more results
{query: query, next_page: nil}
elsif query.length < limit # no more results
{query: query, next_page: nil}
else
{query: query, next_page: next_page}
end
end
def self.create(current_user, specified_retailer, params)
invitation = RetailerInvitation.new
invitation.retailer = specified_retailer
invitation.email = params[:email]
invitation.first_name = params[:first_name]
invitation.last_name = params[:last_name]
if invitation.save
invitation.send_invitation
end
invitation
end
def send_invitation
UserMailer.invite_retailer_teacher(self).deliver_now
end
def generate_signup_url
"#{APP_CONFIG.external_root_url}/retailer/#{retailer.id}/teacher?invitation_code=#{self.invitation_code}"
end
def delete
self.destroy
end
def resend
send_invitation
end
end
end