Class: Effective::Event
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Effective::Event
- Includes:
- PgSearch::Model
- Defined in:
- app/models/effective/event.rb
Instance Method Summary collapse
- #body ⇒ Object
- #closed? ⇒ Boolean
-
#duplicate ⇒ Object
Returns a duplicated event object, or throws an exception.
- #duplicate! ⇒ Object
- #early_bird? ⇒ Boolean
- #early_bird_past? ⇒ Boolean
- #early_bird_status ⇒ Object
-
#event_product_available?(event_product, quantity:) ⇒ Boolean
Can I register/purchase this many new event products?.
-
#event_ticket_available?(event_ticket, quantity:) ⇒ Boolean
Can I register/purchase this many new event tickets?.
- #excerpt ⇒ Object
- #published? ⇒ Boolean
- #registerable? ⇒ Boolean
- #sold_out? ⇒ Boolean
- #start_time ⇒ Object
- #to_s ⇒ Object
Instance Method Details
#body ⇒ Object
164 165 166 |
# File 'app/models/effective/event.rb', line 164 def body rich_text_body end |
#closed? ⇒ 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 |
#duplicate ⇒ Object
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
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
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_status ⇒ Object
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?
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?
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 |
#excerpt ⇒ Object
168 169 170 |
# File 'app/models/effective/event.rb', line 168 def excerpt rich_text_excerpt end |
#published? ⇒ 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
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
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_time ⇒ Object
233 234 235 |
# File 'app/models/effective/event.rb', line 233 def start_time start_at end |
#to_s ⇒ Object
160 161 162 |
# File 'app/models/effective/event.rb', line 160 def to_s title.presence || 'New Event' end |