Module: SpreeCmCommissioner::VariantDecorator

Defined in:
app/models/spree_cm_commissioner/variant_decorator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.prepended(base) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 3

def self.prepended(base)
  base.include SpreeCmCommissioner::ProductDelegation
  base.include SpreeCmCommissioner::VariantOptionsConcern
  base.include SpreeCmCommissioner::KycBitwise

  base.after_commit :update_vendor_price
  base.validate     :validate_option_types
  base.before_save -> { self.track_inventory = false }, if: :subscribable?

  base.belongs_to :vendor, class_name: 'Spree::Vendor'
  base.has_one :event, class_name: 'Spree::Taxon', through: :product

  base.has_many :taxons, class_name: 'Spree::Taxon', through: :product
  base.has_many :visible_option_values, lambda {
                                          joins(:option_type).where(spree_option_types: { hidden: false })
                                        }, through: :option_value_variants, source: :option_value

  base.has_many :video_on_demands, class_name: 'SpreeCmCommissioner::VideoOnDemand', dependent: :destroy
  base.has_many :complete_line_items, -> { complete }, class_name: 'Spree::LineItem'

  base.has_many :variant_guest_card_class, class_name: 'SpreeCmCommissioner::VariantGuestCardClass'
  base.has_many :guest_card_classes, class_name: 'SpreeCmCommissioner::GuestCardClass', through: :variant_guest_card_class

  base.scope :subscribable, -> { active.joins(:product).where(product: { subscribable: true, status: :active }) }
  base.has_one :trip,
               class_name: 'SpreeCmCommissioner::Trip'
  base.has_many :trip_stops, class_name: 'SpreeCmCommissioner::TripStop', dependent: :destroy, foreign_key: :trip_id
  base.accepts_nested_attributes_for :option_values
  base.after_commit :sync_trip, if: :transit?
  base.accepts_nested_attributes_for :trip_stops, allow_destroy: true
  base.after_commit :create_trip_stops, if: :transit?
end

Instance Method Details

#create_trip_stopsObject



36
37
38
39
40
41
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 36

def create_trip_stops
  return if is_master?

  trip_stops.find_or_create_by(stop_type: :boarding, stop_id: options.origin)
  trip_stops.find_or_create_by(stop_type: :drop_off, stop_id: options.destination)
end

#delivery_required?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 43

def delivery_required?
  delivery_option == 'delivery'
end

#discontinued?Boolean

override

Returns:

  • (Boolean)


52
53
54
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 52

def discontinued?
  super || product.discontinued?
end

#display_variantObject



69
70
71
72
73
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 69

def display_variant
  display_sku = sku.split('-').join(' ')
  display_price = Spree::Money.new(price.to_i, currency: currency).to_s
  "#{display_sku} - #{display_price}"
end

#in_stock?Boolean

override

Returns:

  • (Boolean)


80
81
82
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 80

def in_stock?
  available_quantity.positive?
end

#non_digital_ecommerce?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 47

def non_digital_ecommerce?
  !digital? && ecommerce?
end

#options_textObject

override



61
62
63
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 61

def options_text
  @options_text ||= Spree::Variants::VisableOptionsPresenter.new(self).to_sentence
end

#permanent_stock?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 56

def permanent_stock?
  accommodation?
end

#selected_option_value_idsObject



65
66
67
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 65

def selected_option_value_ids
  option_value_variants.pluck(:option_value_id)
end

#transit?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'app/models/spree_cm_commissioner/variant_decorator.rb', line 75

def transit?
  product.product_type == 'transit'
end