class JamRuby::AffiliatePartner < ActiveRecord::Base belongs_to :partner_user, :class_name => "JamRuby::User", :foreign_key => :partner_user_id has_many :user_referrals, :class_name => "JamRuby::User", :foreign_key => :affiliate_referral_id attr_accessible :partner_name, :partner_code, :partner_user_id PARAM_REFERRAL = :ref PARAM_COOKIE = :affiliate_ref PARTNER_CODE_REGEX = /^[#{Regexp.escape('abcdefghijklmnopqrstuvwxyz0123456789-._+,')}]+{2,128}$/i validates :user_email, format: {with: JamRuby::User::VALID_EMAIL_REGEX}, :if => :user_email validates :partner_name, presence: true validates :partner_code, presence: true, format: { with: PARTNER_CODE_REGEX } validates :partner_user, presence: true def self.create_with_params(params={}) oo = self.new oo.partner_name = params[:partner_name].try(:strip) oo.partner_code = params[:partner_code].try(:strip).try(:downcase) oo.partner_user = User.where(:email => params[:user_email].try(:strip)).limit(1).first oo.partner_user_id = oo.partner_user.try(:id) oo.save oo end def self.coded_id(code=nil) self.where(:partner_code => code).limit(1).pluck(:id).first if code.present? end def self.is_code?(code) self.where(:partner_code => code).limit(1).pluck(:id).present? end def referrals_by_date by_date = User.where(:affiliate_referral_id => self.id) .group('DATE(created_at)') .having("COUNT(*) > 0") .order('date_created_at DESC') .count block_given? ? yield(by_date) : by_date end end