Module: SpreeCmCommissioner::VariantOptionsConcern

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/spree_cm_commissioner/variant_options_concern.rb

Instance Method Summary collapse

Instance Method Details

#end_dateObject



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

def end_date
  return start_date + options.total_duration_in_seconds.seconds if start_date.present? && options.total_duration_in_seconds.positive?

  options.end_date || event&.to_date
end

#end_date_timeObject



58
59
60
61
62
63
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 58

def end_date_time
  return nil if end_date.blank?
  return end_date if end_time.blank?

  end_date.change(hour: end_time.hour, min: end_time.min, sec: end_time.sec)
end

#end_timeObject



79
80
81
82
83
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 79

def end_time
  return start_time + options.total_duration_in_seconds.seconds if start_time.present? && options.total_duration_in_seconds.positive?

  options.end_time || event&.to_date
end

#find_option_value_name_for(option_type_name: nil) ⇒ Object



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

def find_option_value_name_for(option_type_name: nil)
  option_values.detect { |o| o.option_type.name.downcase.strip == option_type_name.downcase.strip }.try(:name)
end

#option_value_name_for(option_type_name: nil) ⇒ Object



41
42
43
44
45
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 41

def option_value_name_for(option_type_name: nil)
  return options_in_hash[option_type_name] if options_in_hash.present? # empty is not considered present?

  find_option_value_name_for(option_type_name: option_type_name)
end

#optionsObject



33
34
35
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 33

def options
  @options ||= VariantOptions.new(self)
end

#options_in_hashObject



37
38
39
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 37

def options_in_hash
  [:cm_options]
end

#post_paid?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 85

def post_paid?
  options.payment_option == 'post-paid'
end

#set_options_to_public_metadataObject

save optins to public_metadata so we don’t have to query option types & option values when needed them. once variant changed, we update metadata.



91
92
93
94
95
96
97
98
99
100
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 91

def 
  self. ||= {}

  latest_options_in_hash = option_values.each_with_object({}) do |option_value, hash|
    option_type_name = option_value.option_type.name
    hash[option_type_name] = find_option_value_name_for(option_type_name: option_type_name)
  end

  self.[:cm_options] = latest_options_in_hash
end

#set_options_to_public_metadata!Object



102
103
104
105
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 102

def set_options_to_public_metadata!
  
  save!
end

#start_dateObject



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

def start_date
  options.start_date || event&.from_date
end

#start_date_timeObject



51
52
53
54
55
56
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 51

def start_date_time
  return nil if start_date.blank?
  return start_date if start_time.blank?

  start_date.change(hour: start_time.hour, min: start_time.min, sec: start_time.sec)
end

#start_timeObject



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

def start_time
  options.start_time || event&.from_date
end