Sha256: 7603705b53b57f6dcdd850e4c99fce234123744fb39ee7cf169b7caa54c381a2

Contents?: true

Size: 1.61 KB

Versions: 47

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

module Effective
  class EventProduct < ActiveRecord::Base
    self.table_name = (EffectiveEvents.event_products_table_name || :event_products).to_s

    acts_as_archived

    belongs_to :event

    has_many :event_addons
    has_many :purchased_event_addons, -> { EventAddon.purchased.unarchived }, class_name: 'Effective::EventAddon'
    has_many :registered_event_addons, -> { EventAddon.registered.unarchived }, class_name: 'Effective::EventAddon'

    log_changes(to: :event) if respond_to?(:log_changes)

    has_rich_text :body

    effective_resource do
      title                 :string
      capacity              :integer

      # Pricing
      price                 :integer

      qb_item_name          :string
      tax_exempt            :boolean

      position              :integer
      archived              :boolean

      timestamps
    end

    scope :sorted, -> { order(:position) }
    scope :deep, -> { with_rich_text_body.includes(:purchased_event_addons) }

    before_validation(if: -> { event.present? }) do
      self.position ||= (event.event_products.map(&:position).compact.max || -1) + 1
    end

    validates :title, presence: true, uniqueness: { scope: [:event_id] }
    validates :price, presence: true

    def to_s
      title.presence || 'New Event Product'
    end

    def capacity_available
      return nil if capacity.blank?
      [(capacity - registered_event_addons_count), 0].max
    end

    def registered_event_addons_count
      registered_event_addons.length
    end

    def purchased_event_addons_count
      purchased_event_addons.length
    end

  end
end

Version data entries

47 entries across 47 versions & 1 rubygems

Version Path
effective_events-2.29.2 app/models/effective/event_product.rb
effective_events-2.29.1 app/models/effective/event_product.rb
effective_events-2.29.0 app/models/effective/event_product.rb
effective_events-2.28.3 app/models/effective/event_product.rb
effective_events-2.28.2 app/models/effective/event_product.rb
effective_events-2.28.1 app/models/effective/event_product.rb
effective_events-2.28.0 app/models/effective/event_product.rb
effective_events-2.27.0 app/models/effective/event_product.rb
effective_events-2.26.0 app/models/effective/event_product.rb
effective_events-2.25.1 app/models/effective/event_product.rb
effective_events-2.25.0 app/models/effective/event_product.rb
effective_events-0.24.0 app/models/effective/event_product.rb
effective_events-0.23.1 app/models/effective/event_product.rb
effective_events-0.23.0 app/models/effective/event_product.rb
effective_events-0.22.2 app/models/effective/event_product.rb
effective_events-0.22.1 app/models/effective/event_product.rb
effective_events-0.22.0 app/models/effective/event_product.rb
effective_events-0.21.3 app/models/effective/event_product.rb
effective_events-0.21.2 app/models/effective/event_product.rb
effective_events-0.21.1 app/models/effective/event_product.rb