effective_events 0.19.1 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/effective_events/base.js +32 -0
  3. data/app/controllers/effective/event_registrants_select2_ajax_controller.rb +61 -0
  4. data/app/controllers/effective/event_registrations_controller.rb +17 -1
  5. data/app/datatables/effective_event_registrants_datatable.rb +11 -11
  6. data/app/datatables/effective_event_registrations_datatable.rb +2 -1
  7. data/app/helpers/effective_events_helper.rb +2 -19
  8. data/app/mailers/effective/events_mailer.rb +1 -1
  9. data/app/models/concerns/effective_events_event_registration.rb +141 -51
  10. data/app/models/effective/event.rb +32 -12
  11. data/app/models/effective/event_notification.rb +1 -1
  12. data/app/models/effective/event_registrant.rb +171 -45
  13. data/app/models/effective/event_ticket.rb +20 -17
  14. data/app/models/effective/event_ticket_selection.rb +28 -0
  15. data/app/views/admin/event_registrants/_form.html.haml +16 -3
  16. data/app/views/admin/event_tickets/_form.html.haml +1 -1
  17. data/app/views/effective/event_registrants/_fields.html.haml +47 -28
  18. data/app/views/effective/event_registrations/_details.html.haml +1 -0
  19. data/app/views/effective/event_registrations/_fields_event_registrants.html.haml +26 -0
  20. data/app/views/effective/event_registrations/_fields_event_ticket_selections.html.haml +85 -0
  21. data/app/views/effective/event_registrations/_form_blank_registrants.html.haml +12 -14
  22. data/app/views/effective/event_registrations/_layout.html.haml +9 -1
  23. data/app/views/effective/event_registrations/billing.html.haml +1 -1
  24. data/app/views/effective/event_registrations/details.html.haml +10 -0
  25. data/app/views/effective/event_registrations/summary.html.haml +2 -2
  26. data/app/views/effective/event_registrations/tickets.html.haml +3 -13
  27. data/app/views/effective/events/show.html.haml +34 -34
  28. data/config/effective_events.rb +11 -4
  29. data/config/routes.rb +5 -0
  30. data/db/migrate/101_create_effective_events.rb +16 -1
  31. data/lib/effective_events/version.rb +1 -1
  32. data/lib/effective_events.rb +6 -4
  33. metadata +8 -7
  34. data/app/views/effective/event_registrants/_fields_member_only.html.haml +0 -10
  35. data/app/views/effective/event_registrants/_fields_member_or_non_member.html.haml +0 -34
  36. data/app/views/effective/event_registrants/_fields_questions.html.haml +0 -8
  37. data/app/views/effective/event_registrants/_fields_regular.html.haml +0 -8
  38. data/app/views/effective/event_registrations/_event_tickets.html.haml +0 -63
@@ -1,32 +1,30 @@
1
1
  = effective_form_with(model: resource, url: effective_events.update_blank_registrants_event_event_registration_path(event_registration.event, event_registration), method: :put) do |f|
2
2
  = f.hidden_field :id
3
3
 
4
+ - event = f.object.event
4
5
  - event_registrants = f.object.event_registrants.select(&:blank_registrant?)
5
6
 
6
7
  %p Please update the information for the following #{pluralize(event_registrants.count, 'incomplete ticket')}:
7
8
 
8
9
  = f.fields_for :event_registrants, event_registrants do |fr|
9
- - registrant = fr.object
10
- - ticket = registrant.event_ticket
10
+ - event_registrant = fr.object
11
+ - event_ticket = event_registrant.event_ticket
11
12
 
12
13
  = card do
13
14
  %p
14
- = ticket
15
+ = event_ticket
15
16
  = ' - '
16
- = price_to_currency(registrant.event_ticket_price)
17
+
18
+ - if event_ticket.member_or_non_member? && event_registrant.first_name.blank? && !event.early_bird?
19
+ = effective_events_ticket_price(event, event_ticket)
20
+ - else
21
+ = price_to_currency(event_registrant.price)
22
+
23
+ = event_registrant.details
17
24
 
18
25
  = fr.check_box :blank_registrant, label: "I will return and add this ticket's information later"
19
26
 
20
27
  = fr.show_if(:blank_registrant, false) do
21
- - if ticket.regular?
22
- = render('effective/event_registrants/fields_regular', f: fr)
23
- - elsif ticket.member_only?
24
- = render('effective/event_registrants/fields_member_only', f: fr)
25
- - elsif ticket.member_or_non_member?
26
- = render('effective/event_registrants/fields_member_or_non_member', f: fr)
27
- - else
28
- - raise("Unexpected ticket category: #{ticket.category || 'nil'}")
29
-
30
- = render('effective/event_registrants/fields_questions', f: fr, ticket: ticket)
28
+ = render('effective/event_registrants/fields', f: fr)
31
29
 
32
30
  = f.submit 'Save Ticket Information', center: true
@@ -1,3 +1,11 @@
1
1
  .row
2
- .col-lg-3.mb-3= render_wizard_sidebar(resource)
2
+ .col-lg-3.mb-3
3
+ = render_wizard_sidebar(resource)
4
+
5
+ - if resource.display_countdown?
6
+ .mt-4
7
+
8
+ = card do
9
+ %p Your tickets are reserved until #{resource.selected_expires_at.strftime("%I:%M%P %Z")}
10
+
3
11
  .col-lg-9.mb-3= yield
@@ -3,7 +3,7 @@
3
3
 
4
4
  - raise('expected owner to respond to billing_address') unless resource.owner.respond_to?(:billing_address)
5
5
 
6
- = card('Billing Address') do
6
+ = card do
7
7
  %p Please enter your billing address
8
8
 
9
9
  = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
@@ -0,0 +1,10 @@
1
+ = render 'layout' do
2
+ = render('effective/event_registrations/content', resource: resource)
3
+
4
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
5
+ = f.hidden_field :id
6
+
7
+ = render('effective/event_registrations/fields_event_registrants', form: f)
8
+
9
+ %hr
10
+ = f.save 'Save and Continue'
@@ -1,8 +1,8 @@
1
1
  = render 'layout' do
2
- = render 'effective/event_registrations/content', resource: resource
3
-
2
+ = render('effective/event_registrations/content', resource: resource)
4
3
  = render('effective/event_registrations/event_registration', event_registration: resource)
5
4
 
6
5
  = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
7
6
  = f.hidden_field :id
7
+
8
8
  = f.save 'Save and Continue'
@@ -1,20 +1,10 @@
1
1
  = render 'layout' do
2
-
3
- = render 'effective/event_registrations/event_tickets', resource: resource
4
-
5
- = render 'effective/event_registrations/content', resource: resource
2
+ = render('effective/event_registrations/content', resource: resource)
6
3
 
7
4
  = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
8
5
  = f.hidden_field :id
9
6
 
10
- %p Please select one or more tickets to register for this event:
11
-
12
- = f.has_many :event_registrants, f.object.build_event_registrants, reorder: false do |fr|
13
- = render('effective/event_registrants/fields', f: fr, event: f.object.event, namespace: :events)
14
-
15
- - if resource.delayed_payment_date_upcoming? && resource.submit_order&.delayed? && resource.submit_order&.deferred?
16
- .alert.alert-info If the price of your registration changes, your order will be automatically updated.
7
+ = card do
8
+ = render('effective/event_registrations/fields_event_ticket_selections', form: f)
17
9
 
18
- %hr
19
- .mb-4
20
10
  = f.save 'Save and Continue'
@@ -19,48 +19,48 @@
19
19
  - url = @event.external_registration_url.presence || effective_events.new_event_event_registration_path(@event)
20
20
  = link_to 'Register', url, class: 'btn btn-lg btn-primary'
21
21
 
22
- .row
23
- .col
24
- %ul.list-unstyled
25
- %li.mb-3
26
- %label Date and Time
27
- %br
28
- = effective_events_event_schedule(@event)
22
+ - if @event.file.attached?
23
+ = image_tag url_for(@event.file), class: "effective-events-image d-none d-lg-block float-right", alt: @event.title, width: "350", height: "220"
29
24
 
30
- - if @event.registration_start_at.present?
31
- %li.mb-3
32
- %label Registration Opens
33
- %br
34
- = @event.registration_start_at.strftime("%A, %B %d, %Y · %l:%M%P")
25
+ %ul.list-unstyled.mb-0
26
+ %li.mb-3
27
+ %label Date and Time
28
+ %br
29
+ = effective_events_event_schedule(@event)
35
30
 
36
- - if @event.early_bird_end_at.present?
37
- %li.mb-3
38
- %label Early Bird Rate Ends
39
- %br
40
- = @event.early_bird_end_at.strftime("%A, %B %d, %Y · %l:%M%P")
31
+ - if @event.registration_start_at.present? && @event.registration_start_at > Time.zone.now
32
+ %li.mb-3
33
+ %label Registration Opens
34
+ %br
35
+ = @event.registration_start_at.strftime("%A, %B %d, %Y · %l:%M%P")
41
36
 
42
- - if @event.registration_end_at.present?
43
- %li.mb-3
44
- %label Registration Closes
45
- %br
46
- = @event.registration_end_at.strftime("%A, %B %d, %Y · %l:%M%P")
37
+ - if @event.early_bird_end_at.present?
38
+ %li.mb-3
39
+ %label Early Bird Rate Ends
40
+ %br
41
+ = @event.early_bird_end_at.strftime("%A, %B %d, %Y · %l:%M%P")
47
42
 
48
- -# .col-md-auto
49
- -# - if @event.event_tickets.present?
50
- -# %label Tickets
51
- -# %br
52
- -# %ul
53
- -# - @event.event_tickets.each do |ticket|
54
- -# %li= "#{ticket} (#{effective_events_ticket_price(@event, ticket)})"
43
+ - if @event.registration_end_at.present?
44
+ %li.mb-3
45
+ %label Registration Closes
46
+ %br
47
+ = @event.registration_end_at.strftime("%A, %B %d, %Y · %l:%M%P")
55
48
 
56
- - if @event.file.present?
57
- .col-lg-4
58
- = image_tag url_for(@event.file), class: "effective-events-image d-none d-lg-flex align-self-start", alt: @event.title, width: "350", height: "220"
59
-
60
- .py-3
49
+ -# .col-md-auto
50
+ -# - if @event.event_tickets.present?
51
+ -# %label Tickets
52
+ -# %br
53
+ -# %ul
54
+ -# - @event.event_tickets.each do |ticket|
55
+ -# %li= "#{ticket} (#{effective_events_ticket_price(@event, ticket)})"
61
56
 
62
57
  - if @event.body.present?
63
58
  .effective-event-body.mb-5
64
59
  = @event.body.to_s
65
60
 
61
+ - if @event.registerable?
62
+ .register.mb-4
63
+ - url = @event.external_registration_url.presence || effective_events.new_event_event_registration_path(@event)
64
+ = link_to 'Register', url, class: 'btn btn-lg btn-primary'
65
+
66
66
  = link_to("← #{events_name_label}".html_safe, effective_events.events_path, class: "btn btn-secondary my-4")
@@ -12,16 +12,23 @@ EffectiveEvents.setup do |config|
12
12
  # Events can be restricted by role
13
13
  config.use_effective_roles = true
14
14
 
15
+ # Display effective_memberships organizations on the Ticket Details screen instead of a company field
16
+ # Create representatives when there is a user and an organization
17
+ config.organization_enabled = false
18
+
19
+ # Create users when you fill out new user information from the Ticket Details screen.
20
+ # Otherwise no users will be created. If true a User will be required for all event_registrants.
21
+ config.create_users = false
22
+
23
+ # Turn on the validation. You must have a company or organization when filling out Ticket Details screen.
24
+ config.company_or_organization_required = false
25
+
15
26
  # Categories
16
27
  config.categories = ['Events']
17
28
 
18
29
  # Hint text for event images attachments
19
30
  config.events_hint_text = 'Optional. Shown on the events index and event pages. Dimensions are 220px tall and 350px wide.'
20
31
 
21
- # Validations for Event Registrants
22
- # config.event_registrant_required_fields = [:first_name, :last_name, :email, :company]
23
- config.event_registrant_required_fields = [:first_name, :last_name, :email]
24
-
25
32
  # Mailer Settings
26
33
  # Please see config/initializers/effective_resources.rb for default effective_* gem mailer settings
27
34
  #
data/config/routes.rb CHANGED
@@ -24,6 +24,11 @@ EffectiveEvents::Engine.routes.draw do
24
24
  put :update_blank_registrants, on: :member
25
25
  end
26
26
  end
27
+
28
+ resources :event_registrants_select2_ajax, only: [] do
29
+ get :users, on: :collection
30
+ get :organizations, on: :collection
31
+ end
27
32
  end
28
33
 
29
34
  namespace :admin do
@@ -77,11 +77,14 @@ class CreateEffectiveEvents < ActiveRecord::Migration[6.0]
77
77
  t.integer :user_id
78
78
  t.string :user_type
79
79
 
80
+ t.integer :organization_id
81
+ t.string :organization_type
82
+
80
83
  t.string :first_name
81
84
  t.string :last_name
82
85
  t.string :email
83
-
84
86
  t.string :company
87
+
85
88
  t.string :number
86
89
  t.text :notes
87
90
 
@@ -91,6 +94,7 @@ class CreateEffectiveEvents < ActiveRecord::Migration[6.0]
91
94
  t.boolean :waitlisted, default: false
92
95
  t.boolean :promoted, default: false
93
96
 
97
+ t.datetime :selected_at
94
98
  t.datetime :registered_at
95
99
 
96
100
  t.text :response1
@@ -172,6 +176,17 @@ class CreateEffectiveEvents < ActiveRecord::Migration[6.0]
172
176
  t.datetime :created_at
173
177
  end
174
178
 
179
+ create_table :event_ticket_selections do |t|
180
+ t.integer :event_registration_id
181
+ t.string :event_registration_type
182
+
183
+ t.string :event_ticket_id
184
+ t.integer :quantity
185
+
186
+ t.datetime :updated_at
187
+ t.datetime :created_at
188
+ end
189
+
175
190
  add_index :event_registrations, [:owner_id, :owner_type]
176
191
  add_index :event_registrations, :status
177
192
  add_index :event_registrations, :token
@@ -1,3 +1,3 @@
1
1
  module EffectiveEvents
2
- VERSION = '0.19.1'.freeze
2
+ VERSION = '0.20.0'.freeze
3
3
  end
@@ -6,10 +6,11 @@ module EffectiveEvents
6
6
 
7
7
  def self.config_keys
8
8
  [
9
- :events_table_name, :event_registrants_table_name, :event_tickets_table_name,
9
+ :events_table_name, :event_registrants_table_name, :event_tickets_table_name, :event_ticket_selections_table_name,
10
10
  :event_registrations_table_name, :event_products_table_name, :event_addons_table_name, :event_notifications_table_name,
11
11
  :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :mailer_subject,
12
- :layout, :per_page, :use_effective_roles, :categories, :events_hint_text, :event_registrant_required_fields,
12
+ :layout, :per_page, :use_effective_roles, :categories, :events_hint_text,
13
+ :organization_enabled, :create_users, :company_or_organization_required,
13
14
  :event_registration_class_name
14
15
  ]
15
16
  end
@@ -28,8 +29,9 @@ module EffectiveEvents
28
29
  Array(config[:categories]) - [nil, false, '']
29
30
  end
30
31
 
31
- def self.event_registrant_required_fields
32
- (Array(config[:event_registrant_required_fields]) - [nil, false, '']).map(&:to_sym)
32
+ def self.organization_enabled?
33
+ raise('missing the effective_memberships gem') if organization_enabled && !defined?(EffectiveMemberships)
34
+ organization_enabled == true
33
35
  end
34
36
 
35
37
  # If we can create delayed payment events at all
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_events
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.1
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-14 00:00:00.000000000 Z
11
+ date: 2024-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -229,6 +229,7 @@ files:
229
229
  - app/controllers/admin/event_registrations_controller.rb
230
230
  - app/controllers/admin/event_tickets_controller.rb
231
231
  - app/controllers/admin/events_controller.rb
232
+ - app/controllers/effective/event_registrants_select2_ajax_controller.rb
232
233
  - app/controllers/effective/event_registrations_controller.rb
233
234
  - app/controllers/effective/events_controller.rb
234
235
  - app/datatables/admin/effective_event_addons_datatable.rb
@@ -253,6 +254,7 @@ files:
253
254
  - app/models/effective/event_registration.rb
254
255
  - app/models/effective/event_search.rb
255
256
  - app/models/effective/event_ticket.rb
257
+ - app/models/effective/event_ticket_selection.rb
256
258
  - app/views/admin/event_addons/_fields.html.haml
257
259
  - app/views/admin/event_addons/_form.html.haml
258
260
  - app/views/admin/event_notifications/_form.html.haml
@@ -267,15 +269,13 @@ files:
267
269
  - app/views/admin/events/_form_event_registration_content.html.haml
268
270
  - app/views/effective/event_addons/_fields.html.haml
269
271
  - app/views/effective/event_registrants/_fields.html.haml
270
- - app/views/effective/event_registrants/_fields_member_only.html.haml
271
- - app/views/effective/event_registrants/_fields_member_or_non_member.html.haml
272
- - app/views/effective/event_registrants/_fields_questions.html.haml
273
- - app/views/effective/event_registrants/_fields_regular.html.haml
274
272
  - app/views/effective/event_registrations/_addons.html.haml
275
273
  - app/views/effective/event_registrations/_content.html.haml
276
274
  - app/views/effective/event_registrations/_dashboard.html.haml
275
+ - app/views/effective/event_registrations/_details.html.haml
277
276
  - app/views/effective/event_registrations/_event_registration.html.haml
278
- - app/views/effective/event_registrations/_event_tickets.html.haml
277
+ - app/views/effective/event_registrations/_fields_event_registrants.html.haml
278
+ - app/views/effective/event_registrations/_fields_event_ticket_selections.html.haml
279
279
  - app/views/effective/event_registrations/_form_blank_registrants.html.haml
280
280
  - app/views/effective/event_registrations/_layout.html.haml
281
281
  - app/views/effective/event_registrations/_orders.html.haml
@@ -285,6 +285,7 @@ files:
285
285
  - app/views/effective/event_registrations/billing.html.haml
286
286
  - app/views/effective/event_registrations/checkout.html.haml
287
287
  - app/views/effective/event_registrations/complete.html.haml
288
+ - app/views/effective/event_registrations/details.html.haml
288
289
  - app/views/effective/event_registrations/start.html.haml
289
290
  - app/views/effective/event_registrations/submitted.html.haml
290
291
  - app/views/effective/event_registrations/summary.html.haml
@@ -1,10 +0,0 @@
1
- - # Choose ANY member
2
- - klass = (f.object.user || current_user).class
3
- - ajax_url = (@select2_users_ajax_path || effective_memberships.member_users_membership_select2_ajax_index_path) unless Rails.env.test?
4
-
5
- = f.hidden_field :user_type, value: klass.name
6
- = f.select :user_id, klass.all, ajax_url: ajax_url, label: 'Member', required: true, hint: effective_events_event_registrant_user_hint()
7
-
8
- - # Choose RELATED ORGANIZATION member
9
- -# = f.hidden_field :user_type, value: current_user.class.name
10
- -# = f.select :user_id, effective_events_event_registrant_user_collection(f.object), required: true, hint: effective_events_event_registrant_user_hint()
@@ -1,34 +0,0 @@
1
- - if current_user.try(:is_any?, :member, :admin)
2
- = f.radios :member_or_non_member_choice, Effective::EventRegistrant::MEMBER_OR_NON_MEMBER_CHOICES, label: false, inline: true
3
- - else
4
- = f.hidden_field :member_or_non_member_choice, value: 'Add a regular registration'
5
-
6
- = f.show_if(:member_or_non_member_choice, 'Add a member registration', nested: true) do
7
- = f.hidden_field :first_name, value: nil
8
- = f.hidden_field :last_name, value: nil
9
- = f.hidden_field :email, value: nil
10
- = f.hidden_field :company, value: nil
11
-
12
- - # Choose ANY member
13
- - klass = (f.object.user || current_user).class
14
- - ajax_url = (@select2_users_ajax_path || effective_memberships.member_users_membership_select2_ajax_index_path) unless Rails.env.test?
15
-
16
- = f.hidden_field :user_type, value: klass.name
17
- = f.select :user_id, klass.all, ajax_url: ajax_url, label: 'Member', hint: effective_events_event_registrant_user_hint()
18
-
19
- - # Choose RELATED ORGANIZATION member
20
- -# = f.hidden_field :user_type, value: current_user.class.name
21
- -# = f.select :user_id, effective_events_event_registrant_user_collection(f.object), hint: effective_events_event_registrant_user_hint()
22
-
23
- = f.show_if(:member_or_non_member_choice, 'Add a regular registration', nested: true) do
24
- = f.hidden_field :user_type, value: nil
25
- = f.hidden_field :user_id, value: nil
26
-
27
- - # Choose non-member
28
- .row
29
- .col-md= f.text_field :first_name
30
- .col-md= f.text_field :last_name
31
-
32
- .row
33
- .col-md= f.email_field :email
34
- .col-md= f.text_field :company
@@ -1,8 +0,0 @@
1
- - if ticket.question1.present?
2
- = f.text_field :response1, label: ticket.question1
3
-
4
- - if ticket.question2.present?
5
- = f.text_field :response2, label: ticket.question2
6
-
7
- - if ticket.question3.present?
8
- = f.text_field :response3, label: ticket.question3
@@ -1,8 +0,0 @@
1
- - # Choose non-member
2
- .row
3
- .col-md= f.text_field :first_name
4
- .col-md= f.text_field :last_name
5
-
6
- .row
7
- .col-md= f.email_field :email
8
- .col-md= f.text_field :company
@@ -1,63 +0,0 @@
1
- - tickets = resource.event.event_tickets.reject(&:archived?)
2
- - member_column = tickets.any? { |ticket| ticket.member_only? || ticket.member_or_non_member? }
3
- - waitlist = tickets.any? { |ticket| ticket.waitlist? }
4
-
5
- - all_member_only_tickets = tickets.all? { |ticket| ticket.member_only? }
6
- - any_member_only_tickets = tickets.any? { |ticket| ticket.member_only? }
7
-
8
- = card do
9
- %table.table.table-sm.table-striped
10
- %thead
11
- %tr
12
- %th Ticket
13
- %th Price
14
-
15
- %tbody
16
- - tickets.each do |ticket|
17
- %tr
18
- %td
19
- = ticket.to_s
20
- - if ticket.capacity.present? && ticket.display_capacity?
21
- %br
22
- %small
23
- #{ticket.capacity_available} remaining
24
- - if ticket.waitlist?
25
- before waitlist
26
-
27
- %td
28
- %ul.list-unstyled.mb-0
29
- - if resource.event.early_bird? && ticket.early_bird_price.present? && ticket.early_bird_price != 0 && ticket.early_bird_price != ticket.member_price && ticket.early_bird_price != ticket.regular_price
30
- %li
31
- - if ticket.regular_price.present? && ticket.regular_price != 0
32
- %div
33
- %s.mr-2.text-muted
34
- = price_to_currency(ticket.regular_price)
35
-
36
- - if ticket.member_price.present? && ticket.member_price != 0
37
- %div
38
- %s.text-muted
39
- = price_to_currency(ticket.member_price)
40
- .badge.badge-secondary.mr-2 Members
41
-
42
- %div
43
- = price_to_currency(ticket.early_bird_price)
44
- .badge.badge-warning Early Bird
45
-
46
- - else
47
- - if ticket.regular_price.present?
48
- %li
49
- = price_to_currency(ticket.regular_price)
50
-
51
- - if ticket.member_price.present?
52
- %li
53
- = price_to_currency(ticket.member_price)
54
- .badge.badge-secondary Members
55
-
56
- - if waitlist
57
- %p If the ticket capacity has been reached you will be added to the waitlist.
58
-
59
- - unless current_user.try(:is?, :member)
60
- - if all_member_only_tickets
61
- .alert.alert-info.mb-4 You must be a member to purchase tickets.
62
- - elsif any_member_only_tickets
63
- .alert.alert-info.mb-4 You must be a member to purchase some of these tickets.