Sha256: de88a87ccc88f182dd241b0e224b298c2345a55d631258800f5ab376c63b677c
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
module Freemium module CouponRedemption def self.included(base) base.class_eval do belongs_to :subscription, :class_name => "Subscription" belongs_to :coupon, :class_name => "Coupon" before_validation :upgrade_plan_automatically before_create :set_redeemed_on validates_presence_of :coupon validates_presence_of :subscription validates_uniqueness_of :coupon_id, :scope => :subscription_id, :message => "has already been applied" validate :custom_validation, :on => :create end end def expire!(date = Date.today) self.update_attribute :expired_on, date end def active?(date = Date.today) expires_on ? date <= self.expires_on : true end def expires_on return nil unless self.coupon.duration_in_months self.redeemed_on + self.coupon.duration_in_months.months end def redeemed_on self['redeemed_on'] || Date.today end protected def set_redeemed_on self.redeemed_on = Date.today end def upgrade_plan_automatically if self.coupon && self.coupon.discount_percentage == 100 && self.coupon.subscription_plans.count == 1 && self.coupon.subscription_plans.first.rate > self.subscription.subscription_plan.rate self.subscription.subscription_plan = self.coupon.subscription_plans.first end end def custom_validation errors.add :subscription, "must be paid" if self.subscription && !self.subscription.subscription_plan.paid? errors.add :coupon, "has expired" if self.coupon && (self.coupon.expired? || self.coupon.expired?) errors.add :coupon, "is not valid for selected plan" if self.coupon && self.subscription && !self.coupon.applies_to_plan?(self.subscription.subscription_plan) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
freemium-ajb-0.0.4 | lib/freemium/coupon_redemption.rb |