Class: Effective::Event

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
PgSearch::Model
Defined in:
app/models/effective/event.rb

Instance Method Summary collapse

Instance Method Details

#bodyObject



164
165
166
# File 'app/models/effective/event.rb', line 164

def body
  rich_text_body
end

#closed?Boolean

Returns:

  • (Boolean)


187
188
189
190
# File 'app/models/effective/event.rb', line 187

def closed?
  return false if registration_end_at.blank?
  registration_end_at < Time.zone.now
end

#duplicateObject

Returns a duplicated event object, or throws an exception



218
219
220
221
222
223
224
225
226
227
# File 'app/models/effective/event.rb', line 218

def duplicate
  Event.new(attributes.except('id', 'updated_at', 'created_at')).tap do |event|
    event.title = event.title + ' (Copy)'
    event.slug = event.slug + '-copy'
    event.draft = true

    event.rich_text_body = rich_text_body
    event.rich_text_excerpt = rich_text_excerpt
  end
end

#duplicate!Object



229
230
231
# File 'app/models/effective/event.rb', line 229

def duplicate!
  duplicate.tap { |event| event.save! }
end

#early_bird?Boolean

Returns:

  • (Boolean)


197
198
199
200
# File 'app/models/effective/event.rb', line 197

def early_bird?
  return false if early_bird_end_at.blank?
  early_bird_end_at > Time.zone.now
end

#early_bird_past?Boolean

Returns:

  • (Boolean)


202
203
204
205
# File 'app/models/effective/event.rb', line 202

def early_bird_past?
  return false if early_bird_end_at.blank?
  early_bird_end_at <= Time.zone.now
end

#early_bird_statusObject



207
208
209
210
211
212
213
214
215
# File 'app/models/effective/event.rb', line 207

def early_bird_status
  if early_bird?
    'Early Bird Pricing'
  elsif early_bird_past?
    'Expired'
  else
    'None'
  end
end

#event_product_available?(event_product, quantity:) ⇒ Boolean

Can I register/purchase this many new event products?

Returns:

  • (Boolean)


253
254
255
256
257
258
259
260
261
262
263
264
265
# File 'app/models/effective/event.rb', line 253

def event_product_available?(event_product, quantity:)
  raise('expected an EventProduct') unless event_product.kind_of?(Effective::EventProduct)
  raise('expected quantity to be greater than 0') unless quantity.to_i > 0

  return false if event_product.archived?
  return true if event_product.capacity.blank?   # No capacity enforced for this product

  # Total number already sold
  registered = registered_event_addons.count { |r| r.event_product_id == event_product.id }

  # If there's capacity for this many more
  (registered + quantity) <= event_product.capacity
end

#event_ticket_available?(event_ticket, quantity:) ⇒ Boolean

Can I register/purchase this many new event tickets?

Returns:

  • (Boolean)


238
239
240
241
242
243
244
245
246
247
248
249
250
# File 'app/models/effective/event.rb', line 238

def event_ticket_available?(event_ticket, quantity:)
  raise('expected an EventTicket') unless event_ticket.kind_of?(Effective::EventTicket)
  raise('expected quantity to be greater than 0') unless quantity.to_i > 0

  return false if event_ticket.archived?
  return true if event_ticket.capacity.blank?   # No capacity enforced for this ticket

  # Total number already sold
  registered = registered_event_registrants.count { |r| r.event_ticket_id == event_ticket.id }

  # If there's capacity for this many more
  (registered + quantity) <= event_ticket.capacity
end

#excerptObject



168
169
170
# File 'app/models/effective/event.rb', line 168

def excerpt
  rich_text_excerpt
end

#published?Boolean

Returns:

  • (Boolean)


172
173
174
175
176
177
# File 'app/models/effective/event.rb', line 172

def published?
  return false if draft?
  return false if published_at.blank?

  published_at < Time.zone.now
end

#registerable?Boolean

Returns:

  • (Boolean)


179
180
181
182
183
184
185
# File 'app/models/effective/event.rb', line 179

def registerable?
  return false unless published?
  return false if closed?
  return false if sold_out?

  (external_registration? && external_registration_url.present?) || event_tickets.present?
end

#sold_out?Boolean

Returns:

  • (Boolean)


192
193
194
195
# File 'app/models/effective/event.rb', line 192

def sold_out?
  return false unless event_tickets.present?
  event_tickets.none? { |event_ticket| event_ticket_available?(event_ticket, quantity: 1) }
end

#start_timeObject



233
234
235
# File 'app/models/effective/event.rb', line 233

def start_time
  start_at
end

#to_sObject



160
161
162
# File 'app/models/effective/event.rb', line 160

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