Module: EffectiveEventsEventRegistration

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

Overview

EffectiveEventsEventRegistration

Mark your owner model with effective_events_event_registration to get all the includes

Defined Under Namespace

Modules: Base, ClassMethods

Instance Method Summary collapse

Instance Method Details

#build_event_addonsObject

This builds the default event addons used by the wizard form



189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'app/models/concerns/effective_events_event_registration.rb', line 189

def build_event_addons
  if event_addons.blank?
    raise('expected owner and event to be present') unless owner && event

    event_addons.build(
      first_name: owner.try(:first_name),
      last_name: owner.try(:last_name),
      email: owner.try(:email)
    )
  end

  event_addons
end

#build_event_registrantsObject

This builds the default event registrants used by the wizard form



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'app/models/concerns/effective_events_event_registration.rb', line 172

def build_event_registrants
  if event_registrants.blank?
    raise('expected owner and event to be present') unless owner && event

    event_registrants.build(
      first_name: owner.try(:first_name),
      last_name: owner.try(:last_name),
      email: owner.try(:email),
      company: owner.try(:company),
      number: owner.try(:membership).try(:number) || owner.try(:number)
    )
  end

  event_registrants
end

#done?Boolean

Returns:

  • (Boolean)


155
156
157
# File 'app/models/concerns/effective_events_event_registration.rb', line 155

def done?
  
end

#event_addon(event_product:, first_name:, last_name:, email:) ⇒ Object

Find or build. But it’s not gonna work with more than 1. This is for testing only really.



166
167
168
169
# File 'app/models/concerns/effective_events_event_registration.rb', line 166

def event_addon(event_product:, first_name:, last_name:, email:)
  addon = event_addons.find { |er| er.event_product == event_product && er.first_name == first_name && er.last_name == last_name && er.email == email }
  addon || event_addons.build(event: event, event_product: event_product, owner: owner, first_name: first_name, last_name: last_name, email: email)
end

#event_registrant(event_ticket:, first_name:, last_name:, email:) ⇒ Object

Find or build



160
161
162
163
# File 'app/models/concerns/effective_events_event_registration.rb', line 160

def event_registrant(event_ticket:, first_name:, last_name:, email:)
  registrant = event_registrants.find { |er| er.event_ticket == event_ticket && er.first_name == first_name && er.last_name == last_name && er.email == email }
  registrant || event_registrants.build(event: event, event_ticket: event_ticket, owner: owner, first_name: first_name, last_name: last_name, email: email)
end

#in_progress?Boolean

Returns:

  • (Boolean)


151
152
153
# File 'app/models/concerns/effective_events_event_registration.rb', line 151

def in_progress?
  draft?
end

#to_sObject

Instance Methods



147
148
149
# File 'app/models/concerns/effective_events_event_registration.rb', line 147

def to_s
  'registration'
end

#unavailable_event_productsObject



213
214
215
216
217
218
219
220
221
# File 'app/models/concerns/effective_events_event_registration.rb', line 213

def unavailable_event_products
  unavailable = []

  present_event_addons.map(&:event_product).group_by { |p| p }.each do |event_product, event_products|
    unavailable << event_product unless event.event_product_available?(event_product, quantity: event_products.length)
  end

  unavailable
end

#unavailable_event_ticketsObject



203
204
205
206
207
208
209
210
211
# File 'app/models/concerns/effective_events_event_registration.rb', line 203

def unavailable_event_tickets
  unavailable = []

  present_event_registrants.map(&:event_ticket).group_by { |t| t }.each do |event_ticket, event_tickets|
    unavailable << event_ticket unless event.event_ticket_available?(event_ticket, quantity: event_tickets.length)
  end

  unavailable
end