Sha256: 912978d82cda73245705d32c758e1d126cdfedc2a41b5df2d6ab77a6df5b470b

Contents?: true

Size: 1.46 KB

Versions: 10

Compression:

Stored size: 1.46 KB

Contents

module Tienda
  class Product < ActiveRecord::Base

    # Validations
    validate { errors.add :base, :can_belong_to_root if self.parent && self.parent.parent }

    # Variants of the product
    has_many :variants, -> { order(:default => :desc, :name => :asc) }, :class_name => 'Tienda::Product', :foreign_key => 'parent_id', :dependent => :destroy

    # The parent product (only applies to variants)
    belongs_to :parent, :class_name => 'Tienda::Product', :foreign_key => 'parent_id'

    # All products which are not variants
    scope :root, -> { where(:parent_id => nil) }

    # If a variant is created, the base product should be updated so that it doesn't have stock control enabled
    after_save do
      if self.parent
        self.parent.price = 0
        self.parent.cost_price = 0
        self.parent.tax_rate = nil
        self.parent.weight = 0
        self.parent.stock_control = false
        self.parent.save if self.parent.changed?
      end
    end

    # Does this product have any variants?
    #
    # @return [Boolean]
    def has_variants?
      !variants.empty?
    end

    # Returns the default variant for the product or nil if none exists.
    #
    # @return [Tienda::Product]
    def default_variant
      return nil if self.parent
      @default_variant ||= self.variants.select { |v| v.default? }.first
    end

    # Is this product a variant of another?
    #
    # @return [Boolean]
    def variant?
      !self.parent_id.blank?
    end

  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
tienda-2.1.3 app/models/tienda/product/variants.rb
tienda-2.1.2 app/models/tienda/product/variants.rb
tienda-2.1.1 app/models/tienda/product/variants.rb
tienda-2.1.0 app/models/tienda/product/variants.rb
tienda-2.0.2 app/models/tienda/product/variants.rb
tienda-2.0.1 app/models/tienda/product/variants.rb
tienda-1.1.2 app/models/tienda/product/variants.rb
tienda-1.1.1 app/models/tienda/product/variants.rb
tienda-1.1.0 app/models/tienda/product/variants.rb
tienda-1.0.0 app/models/tienda/product/variants.rb