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
-
#cancel! ⇒ Object
If this changes a lot, consider effective_events_event_registration.cancel!.
- #cancel_all! ⇒ Object
- #cancelled? ⇒ Boolean
- #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
-
#uncancel! ⇒ Object
If this changes a lot, consider effective_events_event_registration.uncancel!.
- #uncancel_all! ⇒ Object
- #unpromote! ⇒ Object
- #unwaitlist! ⇒ Object
-
#validate_one_ticket_per_event? ⇒ Boolean
The event registration can override this to add event specific validation.
- #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
479 480 481 482 483 |
# File 'app/models/effective/event_registrant.rb', line 479 def archive! super() orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#cancel! ⇒ Object
If this changes a lot, consider effective_events_event_registration.cancel!
498 499 500 501 502 503 504 505 |
# File 'app/models/effective/event_registrant.rb', line 498 def cancel! assign_attributes(cancelled_at: Time.zone.now) archive! after_commit { event_registration&.send_event_registrants_cancelled_email! } true end |
#cancel_all! ⇒ Object
513 514 515 516 |
# File 'app/models/effective/event_registrant.rb', line 513 def cancel_all! raise("expected an event registration") if event_registration.blank? event_registration.cancel! end |
#cancelled? ⇒ Boolean
493 494 495 |
# File 'app/models/effective/event_registrant.rb', line 493 def cancelled? cancelled_at.present? end |
#details ⇒ Object
234 235 236 237 238 239 240 241 242 |
# File 'app/models/effective/event_registrant.rb', line 234 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? && !cancelled?), (content_tag(:span, 'Cancelled', class: 'badge badge-warning') if cancelled?), ].compact.join(' ').html_safe end |
#early_bird? ⇒ Boolean
Anyone or Members tickets
257 258 259 260 261 262 263 |
# File 'app/models/effective/event_registrant.rb', line 257 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
567 568 569 |
# File 'app/models/effective/event_registrant.rb', line 567 def event_registration_submit_order event_registration&.submit_order end |
#event_ticket_price ⇒ Object
523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 |
# File 'app/models/effective/event_registrant.rb', line 523 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? && owner.try(:membership_present?) && !owner.try(:membership_disabled?) event_ticket.blank_registrant_member_price elsif blank_registrant? event_ticket.blank_registrant_non_member_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
220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'app/models/effective/event_registrant.rb', line 220 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? 'Pending Name' else 'Pending Name' end end |
#guest_of_member? ⇒ Boolean
Anyone or Members tickets
275 276 277 278 279 280 281 282 |
# File 'app/models/effective/event_registrant.rb', line 275 def guest_of_member? return false if event.blank? return false if event_ticket.blank? return false unless event_ticket.guest_of_member? return false if !member? && owner.try(:membership_disabled?) !member? && owner.try(:membership_present?) end |
#last_first_name ⇒ Object
252 253 254 |
# File 'app/models/effective/event_registrant.rb', line 252 def last_first_name (first_name.present? && last_name.present?) ? "#{last_name}, #{first_name}" : "Pending Name" end |
#mark_registered! ⇒ Object
This is the Admin Save and Mark Registered action
343 344 345 |
# File 'app/models/effective/event_registrant.rb', line 343 def mark_registered! registered! end |
#member? ⇒ Boolean
Anyone or Members tickets
266 267 268 269 270 271 272 |
# File 'app/models/effective/event_registrant.rb', line 266 def member? return false if event.blank? return false if event_ticket.blank? return false if (user.try(:membership_disabled?) || organization.try(:membership_disabled?)) user.try(:membership_present?) || organization.try(:membership_present?) end |
#name ⇒ Object
209 210 211 212 213 214 215 216 217 |
# File 'app/models/effective/event_registrant.rb', line 209 def name if first_name.present? "#{first_name} #{last_name}" elsif owner.present? 'Pending Name' else 'Pending Name' end end |
#non_member? ⇒ Boolean
Anyone tickets only
285 286 287 288 289 290 291 |
# File 'app/models/effective/event_registrant.rb', line 285 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
309 310 311 |
# File 'app/models/effective/event_registrant.rb', line 309 def present_registrant? !blank_registrant? end |
#promote! ⇒ Object
378 379 380 381 382 383 384 385 386 387 388 |
# File 'app/models/effective/event_registrant.rb', line 378 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
457 458 459 460 461 462 463 464 465 466 467 468 469 |
# File 'app/models/effective/event_registrant.rb', line 457 def promote_not_purchased! update!(promoted: true) orders.reject(&:purchased?).each do |order| order.update_purchasable_attributes! if order.pending? order.defer!(provider: (order.payment_provider.presence || 'cheque'), email: false) end end true end |
#promote_purchased_event_registration! ⇒ Object
390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 |
# File 'app/models/effective/event_registrant.rb', line 390 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.submitted.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! order = event_registration.submit_order if order.pending? order.defer!(provider: (order.payment_provider.presence || 'cheque'), email: false) end true end |
#promote_purchased_order! ⇒ Object
429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 |
# File 'app/models/effective/event_registrant.rb', line 429 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! if order.pending? order.defer!(provider: (order.payment_provider.presence || 'cheque'), email: false) end true end |
#purchasable_name ⇒ Object
248 249 250 |
# File 'app/models/effective/event_registrant.rb', line 248 def purchasable_name ["#{event_ticket} - #{name}", details.presence].compact.join('<br>').html_safe end |
#qb_item_name ⇒ Object
317 318 319 |
# File 'app/models/effective/event_registrant.rb', line 317 def qb_item_name event_ticket&.qb_item_name end |
#registered! ⇒ Object
Called by an event_registration after_defer and after_purchase
337 338 339 340 |
# File 'app/models/effective/event_registrant.rb', line 337 def registered! self.registered_at ||= Time.zone.now save! end |
#registered? ⇒ Boolean
325 326 327 |
# File 'app/models/effective/event_registrant.rb', line 325 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.
300 301 302 303 304 305 306 307 |
# File 'app/models/effective/event_registrant.rb', line 300 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
244 245 246 |
# File 'app/models/effective/event_registrant.rb', line 244 def responses [response1.presence, response2.presence, response3.presence].compact.join('<br>').html_safe end |
#save_and_update_orders! ⇒ Object
Admin update event registrant action
348 349 350 351 352 353 354 355 356 357 358 |
# File 'app/models/effective/event_registrant.rb', line 348 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
321 322 323 |
# File 'app/models/effective/event_registrant.rb', line 321 def selected? selected_at.present? end |
#selected_not_expired? ⇒ Boolean
329 330 331 332 333 334 |
# File 'app/models/effective/event_registrant.rb', line 329 def selected_not_expired? return false unless EffectiveEvents.EventRegistration.selection_window.present? return false unless selected_at.present? (selected_at + EffectiveEvents.EventRegistration.selection_window) > Time.zone.now end |
#send_confirmation_email! ⇒ Object
Manual admin action only
549 550 551 |
# File 'app/models/effective/event_registrant.rb', line 549 def send_confirmation_email! send_order_emails! end |
#send_order_emails! ⇒ Object
563 564 565 |
# File 'app/models/effective/event_registrant.rb', line 563 def send_order_emails! event_registration&.submit_order&.send_order_emails! end |
#send_payment_request! ⇒ Object
Manual admin action only. From datatable.
554 555 556 557 558 559 560 561 |
# File 'app/models/effective/event_registrant.rb', line 554 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
313 314 315 |
# File 'app/models/effective/event_registrant.rb', line 313 def tax_exempt event_ticket&.tax_exempt end |
#title ⇒ Object
205 206 207 |
# File 'app/models/effective/event_registrant.rb', line 205 def title ["#{event_ticket} - #{name}", details.presence].compact.join(' ').html_safe end |
#to_s ⇒ Object
201 202 203 |
# File 'app/models/effective/event_registrant.rb', line 201 def to_s persisted? ? title : 'registrant' end |
#unarchive! ⇒ Object
485 486 487 488 489 490 491 |
# File 'app/models/effective/event_registrant.rb', line 485 def unarchive! assign_attributes(cancelled_at: nil) super() orders.reject(&:purchased?).each { |order| order.update_purchasable_attributes! } true end |
#uncancel! ⇒ Object
If this changes a lot, consider effective_events_event_registration.uncancel!
508 509 510 511 |
# File 'app/models/effective/event_registrant.rb', line 508 def uncancel! assign_attributes(cancelled_at: nil) unarchive! end |
#uncancel_all! ⇒ Object
518 519 520 521 |
# File 'app/models/effective/event_registrant.rb', line 518 def uncancel_all! raise("expected an event registration") if event_registration.blank? event_registration.uncancel! end |
#unpromote! ⇒ Object
471 472 473 474 475 476 477 |
# File 'app/models/effective/event_registrant.rb', line 471 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
369 370 371 372 373 374 375 376 |
# File 'app/models/effective/event_registrant.rb', line 369 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 |
#validate_one_ticket_per_event? ⇒ Boolean
The event registration can override this to add event specific validation
294 295 296 297 |
# File 'app/models/effective/event_registrant.rb', line 294 def validate_one_ticket_per_event? return event_registration.validate_one_ticket_per_event? if event_registration.present? EffectiveEvents.validate_one_ticket_per_event? end |
#waitlist! ⇒ Object
360 361 362 363 364 365 366 367 |
# File 'app/models/effective/event_registrant.rb', line 360 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
544 545 546 |
# File 'app/models/effective/event_registrant.rb', line 544 def waitlisted_not_promoted? (waitlisted? && !promoted?) end |