Class: Effective::EventRegistrant
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Effective::EventRegistrant
- Includes:
- ActionView::Helpers::TagHelper
- Defined in:
- app/models/effective/event_registrant.rb
Constant Summary collapse
- PERMITTED_BLANK_REGISTRANT_CHANGES =
["first_name", "last_name", "email", "company", "user_id", "user_type", "organization_id", "organization_type", "blank_registrant", "response1", "response2", "response3"]
Instance Attribute Summary collapse
-
#building_user_and_organization ⇒ Object
Returns the value of attribute building_user_and_organization.
Instance Method Summary collapse
- #archive! ⇒ Object
- #details ⇒ Object
-
#early_bird? ⇒ Boolean
Anyone or Members tickets.
- #event_registration_submit_order ⇒ Object
- #event_ticket_price ⇒ Object
-
#full_name ⇒ Object
Used in email and tickets datatable.
-
#guest_of_member? ⇒ Boolean
Anyone or Members tickets.
- #last_first_name ⇒ Object
-
#mark_registered! ⇒ Object
This is the Admin Save and Mark Registered action.
-
#member? ⇒ Boolean
Anyone or Members tickets.
- #name ⇒ Object
-
#non_member? ⇒ Boolean
Anyone tickets only.
- #present_registrant? ⇒ Boolean
- #promote! ⇒ Object
- #promote_not_purchased! ⇒ Object
- #promote_purchased_event_registration! ⇒ Object
- #promote_purchased_order! ⇒ Object
- #purchasable_name ⇒ Object
- #qb_item_name ⇒ Object
-
#registered! ⇒ Object
Called by an event_registration after_defer and after_purchase.
- #registered? ⇒ Boolean
-
#registrant_validations_enabled? ⇒ Boolean
We create registrants on the tickets step.
- #responses ⇒ Object
-
#save_and_update_orders! ⇒ Object
Admin update event registrant action.
- #selected? ⇒ Boolean
- #selected_not_expired? ⇒ Boolean
-
#send_confirmation_email! ⇒ Object
Manual admin action only.
- #send_order_emails! ⇒ Object
-
#send_payment_request! ⇒ Object
Manual admin action only.
- #tax_exempt ⇒ Object
- #title ⇒ Object
- #to_s ⇒ Object
- #unarchive! ⇒ Object
- #unpromote! ⇒ Object
- #unwaitlist! ⇒ Object
- #waitlist! ⇒ Object
- #waitlisted_not_promoted? ⇒ Boolean
Instance Attribute Details
#building_user_and_organization ⇒ Object
Returns the value of attribute building_user_and_organization.
11 12 13 |
# File 'app/models/effective/event_registrant.rb', line 11 def building_user_and_organization @building_user_and_organization end |
Instance Method Details
#archive! ⇒ Object
427 428 429 430 431 |
# File 'app/models/effective/event_registrant.rb', line 427 def archive! super() orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#details ⇒ Object
214 215 216 217 218 219 220 221 |
# File 'app/models/effective/event_registrant.rb', line 214 def details [ (content_tag(:span, 'Member', class: 'badge badge-warning') if member?), (content_tag(:span, 'Guest of Member', class: 'badge badge-warning') if guest_of_member?), (content_tag(:span, 'Waitlist', class: 'badge badge-warning') if waitlisted_not_promoted?), (content_tag(:span, 'Archived', class: 'badge badge-warning') if archived?) ].compact.join(' ').html_safe end |
#early_bird? ⇒ Boolean
Anyone or Members tickets
236 237 238 239 240 241 242 |
# File 'app/models/effective/event_registrant.rb', line 236 def early_bird? return false if event.blank? return false if event_ticket.blank? return false if event_ticket.early_bird_price.blank? event.early_bird? end |
#event_registration_submit_order ⇒ Object
481 482 483 |
# File 'app/models/effective/event_registrant.rb', line 481 def event_registration_submit_order event_registration&.submit_order end |
#event_ticket_price ⇒ Object
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 |
# File 'app/models/effective/event_registrant.rb', line 439 def event_ticket_price raise('expected an event') if event.blank? raise('expected an event ticket') if event_ticket.blank? if early_bird? event_ticket.early_bird_price elsif blank_registrant? event_ticket.maximum_price elsif member? event_ticket.member_price elsif guest_of_member? event_ticket.guest_of_member_price elsif non_member? event_ticket.non_member_price else event_ticket.maximum_price end end |
#full_name ⇒ Object
Used in email and tickets datatable
200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'app/models/effective/event_registrant.rb', line 200 def full_name if first_name.present? [ name, ("<small>#{organization || company}</small>" if organization || company.present?), ("<small>#{email}</small>" if email.present?) ].compact.join('<br>').html_safe elsif owner.present? owner.to_s + ' - GUEST' else 'GUEST' end end |
#guest_of_member? ⇒ Boolean
Anyone or Members tickets
253 254 255 256 257 258 259 |
# File 'app/models/effective/event_registrant.rb', line 253 def guest_of_member? return false if event.blank? return false if event_ticket.blank? return false unless event_ticket.guest_of_member? !member? && owner.try(:membership_present?) end |
#last_first_name ⇒ Object
231 232 233 |
# File 'app/models/effective/event_registrant.rb', line 231 def last_first_name (first_name.present? && last_name.present?) ? "#{last_name}, #{first_name}" : "GUEST" end |
#mark_registered! ⇒ Object
This is the Admin Save and Mark Registered action
312 313 314 |
# File 'app/models/effective/event_registrant.rb', line 312 def mark_registered! registered! end |
#member? ⇒ Boolean
Anyone or Members tickets
245 246 247 248 249 250 |
# File 'app/models/effective/event_registrant.rb', line 245 def member? return false if event.blank? return false if event_ticket.blank? user.try(:membership_present?) || organization.try(:membership_present?) end |
#name ⇒ Object
189 190 191 192 193 194 195 196 197 |
# File 'app/models/effective/event_registrant.rb', line 189 def name if first_name.present? "#{first_name} #{last_name}" elsif owner.present? owner.to_s + ' - GUEST' else 'GUEST' end end |
#non_member? ⇒ Boolean
Anyone tickets only
262 263 264 265 266 267 268 |
# File 'app/models/effective/event_registrant.rb', line 262 def non_member? return false if event.blank? return false if event_ticket.blank? return false unless event_ticket.anyone? !member? && !guest_of_member? end |
#present_registrant? ⇒ Boolean
280 281 282 |
# File 'app/models/effective/event_registrant.rb', line 280 def present_registrant? !blank_registrant? end |
#promote! ⇒ Object
347 348 349 350 351 352 353 354 355 356 357 |
# File 'app/models/effective/event_registrant.rb', line 347 def promote! raise('expected a waitlist? event_ticket') unless event_ticket.waitlist? if purchased? && event_registration.present? promote_purchased_event_registration! elsif purchased? && event_registration.blank? promote_purchased_order! else promote_not_purchased! end end |
#promote_not_purchased! ⇒ Object
413 414 415 416 417 |
# File 'app/models/effective/event_registrant.rb', line 413 def promote_not_purchased! update!(promoted: true) orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#promote_purchased_event_registration! ⇒ Object
359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 |
# File 'app/models/effective/event_registrant.rb', line 359 def promote_purchased_event_registration! # Remove myself from any existing orders. # I must be $0 so we don't need to update any prices. orders.each do |order| order.order_items.find { |oi| oi.purchasable == self }.destroy! end # I'm now promoted and unpurchased update!(promoted: true, purchased_order: nil) # Check if the ticket owner has an unpurchased event registration for the event or create a new one event_registration = EffectiveEvents.EventRegistration.draft.where(event: event, owner: owner).where.not(id: event_registration_id).first event_registration ||= EffectiveEvents.EventRegistration.new(event: event, owner: owner) # Put the event registration on the checkout step event_registration.all_steps_before(:checkout).each do |step| event_registration.wizard_steps[step] ||= Time.zone.now end event_registration.save! # Move this registrant into the new event registration update!(event_registration: event_registration) # Build the order for the event registration # It can be checked out by admin immediately, or the user can go through it themselves event_registration.reload event_registration.find_or_build_submit_order event_registration.save! end |
#promote_purchased_order! ⇒ Object
391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 |
# File 'app/models/effective/event_registrant.rb', line 391 def promote_purchased_order! # Remove myself from any existing orders. # I must be $0 so we don't need to update any prices. orders.each do |order| order.order_items.find { |oi| oi.purchasable == self }.destroy! end # I'm now promoted and unpurchased update!(promoted: true, purchased_order: nil) # Check if the ticket owner has an unpurchased order for the event or create a new one order = owner.orders.reject { |order| order.purchased? }.find do |order| order.purchasables.any? { |purchasable| purchasable.class.name == "Effective::EventRegistrant" && purchasable.try(:event) == event } end order ||= Effective::Order.new(user: owner) # Move this registrant into the new order order.add(self) order.save! end |
#purchasable_name ⇒ Object
227 228 229 |
# File 'app/models/effective/event_registrant.rb', line 227 def purchasable_name ["#{event_ticket} - #{name}", details.presence].compact.join('<br>').html_safe end |
#qb_item_name ⇒ Object
288 289 290 |
# File 'app/models/effective/event_registrant.rb', line 288 def qb_item_name event_ticket&.qb_item_name end |
#registered! ⇒ Object
Called by an event_registration after_defer and after_purchase
306 307 308 309 |
# File 'app/models/effective/event_registrant.rb', line 306 def registered! self.registered_at ||= Time.zone.now save! end |
#registered? ⇒ Boolean
296 297 298 |
# File 'app/models/effective/event_registrant.rb', line 296 def registered? registered_at.present? end |
#registrant_validations_enabled? ⇒ Boolean
We create registrants on the tickets step. But don’t enforce validations until the details step.
271 272 273 274 275 276 277 278 |
# File 'app/models/effective/event_registrant.rb', line 271 def registrant_validations_enabled? return false if blank_registrant? # They want to come back later return true if event_registration.blank? # If we're creating in an Admin area return false if event_ticket.blank? # Invalid anyway event_registration.current_step == :details end |
#responses ⇒ Object
223 224 225 |
# File 'app/models/effective/event_registrant.rb', line 223 def responses [response1.presence, response2.presence, response3.presence].compact.join('<br>').html_safe end |
#save_and_update_orders! ⇒ Object
Admin update event registrant action
317 318 319 320 321 322 323 324 325 326 327 |
# File 'app/models/effective/event_registrant.rb', line 317 def save_and_update_orders! if event_ticket_id_changed? assign_attributes(response1: nil, response2: nil, response3: nil) end save! orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#selected? ⇒ Boolean
292 293 294 |
# File 'app/models/effective/event_registrant.rb', line 292 def selected? selected_at.present? end |
#selected_not_expired? ⇒ Boolean
300 301 302 303 |
# File 'app/models/effective/event_registrant.rb', line 300 def selected_not_expired? return false unless EffectiveEvents.EventRegistration.selection_window.present? selected_at.present? && (selected_at + EffectiveEvents.EventRegistration.selection_window > Time.zone.now) end |
#send_confirmation_email! ⇒ Object
Manual admin action only
463 464 465 |
# File 'app/models/effective/event_registrant.rb', line 463 def send_confirmation_email! send_order_emails! end |
#send_order_emails! ⇒ Object
477 478 479 |
# File 'app/models/effective/event_registrant.rb', line 477 def send_order_emails! event_registration&.submit_order&.send_order_emails! end |
#send_payment_request! ⇒ Object
Manual admin action only. From datatable.
468 469 470 471 472 473 474 475 |
# File 'app/models/effective/event_registrant.rb', line 468 def send_payment_request! raise('already purchased or deferred') if purchased_or_deferred? order = (Array(event_registration_submit_order) + Array(orders)).find { |order| order.in_progress? && !order.purchased_or_deferred? && !order.refund? } return false if order.blank? order.send_payment_request! end |
#tax_exempt ⇒ Object
284 285 286 |
# File 'app/models/effective/event_registrant.rb', line 284 def tax_exempt event_ticket&.tax_exempt end |
#title ⇒ Object
185 186 187 |
# File 'app/models/effective/event_registrant.rb', line 185 def title ["#{event_ticket} - #{name}", details.presence].compact.join(' ').html_safe end |
#to_s ⇒ Object
181 182 183 |
# File 'app/models/effective/event_registrant.rb', line 181 def to_s persisted? ? title : 'registrant' end |
#unarchive! ⇒ Object
433 434 435 436 437 |
# File 'app/models/effective/event_registrant.rb', line 433 def unarchive! super() orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#unpromote! ⇒ Object
419 420 421 422 423 424 425 |
# File 'app/models/effective/event_registrant.rb', line 419 def unpromote! raise('expected a waitlist? event_ticket') unless event_ticket.waitlist? update!(promoted: false) orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#unwaitlist! ⇒ Object
338 339 340 341 342 343 344 345 |
# File 'app/models/effective/event_registrant.rb', line 338 def unwaitlist! raise('expected a waitlist? event_ticket') unless event_ticket.waitlist? update!(waitlisted: false) orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#waitlist! ⇒ Object
329 330 331 332 333 334 335 336 |
# File 'app/models/effective/event_registrant.rb', line 329 def waitlist! raise('expected a waitlist? event_ticket') unless event_ticket.waitlist? update!(waitlisted: true) orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#waitlisted_not_promoted? ⇒ Boolean
458 459 460 |
# File 'app/models/effective/event_registrant.rb', line 458 def waitlisted_not_promoted? (waitlisted? && !promoted?) end |