effective_events 0.12.2 → 0.12.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 489d11bf3227576141f53363ed941b1b606915b64a8d7ce234fd084d8497eafb
4
- data.tar.gz: c2e8a39859a284a609f8d6fb2e6a54ccbacf2191a0cecf3ea3407442e14865e3
3
+ metadata.gz: 0db42bb64a1639b358488381a0e7e4ca73814f98c41153cdb929063661b0e947
4
+ data.tar.gz: ad79f29da0313754aafc31e90a432eefbda54d631062ab9e593448540c6c4a08
5
5
  SHA512:
6
- metadata.gz: 91b44a32a36e0d1ba81c1addb51978dddafa5e64fa5c13c927f96a8ebb753f8deb17c11e581af64976f8e9cac31612f7ec2558b5c49741cd5d441b18131c7ecf
7
- data.tar.gz: 1c389debc53eb354b4e8734ce257bfb4d4f18a8e162e0c2f90c397bbd425318adc849cd4ba8e4e35708b61de8126ce800ca055dffb7960f4e05d5eb338b41e9d
6
+ metadata.gz: 0ce3f1278268630aab2aec2547f6b9d3ad100b303a42e403b0b1dd93e7be6a21f1f09385f8835147cc768a77d2a8278cf1ca48dab8afbed97df986716a6478e1
7
+ data.tar.gz: 15459694c87b8208ba7f6bd7feb53dc66030e5f7c0ccc858e2a90d3dbb7ebe5761ede77ba6900e86ebcc28f1e225b1b3b5f65113860e268eedcd50f2f96a2f76
@@ -27,7 +27,12 @@ class EffectiveEventRegistrationsDatatable < Effective::Datatable
27
27
  elsif er.submitted?
28
28
  dropdown_link_to('Continue', effective_events.event_event_registration_build_path(er.event, er, er.next_step), 'data-turbolinks' => false)
29
29
  elsif er.completed?
30
- dropdown_link_to('Show', effective_events.event_event_registration_path(er.event, er))
30
+
31
+ if EffectiveResources.authorized?(self, :update_blank_registrants, er)
32
+ dropdown_link_to('Continue', effective_events.event_event_registration_path(er.event, er))
33
+ else
34
+ dropdown_link_to('Show', effective_events.event_event_registration_path(er.event, er))
35
+ end
31
36
 
32
37
  # Register Again
33
38
  if er.event.registerable?
@@ -66,7 +66,15 @@ module EffectiveEventsHelper
66
66
  end
67
67
  end
68
68
 
69
- def effective_events_event_tickets_user_hint
69
+ def effective_events_event_registrant_user_collection(event_registrant)
70
+ raise("expected an Effective::EventRegistrant") unless event_registrant.kind_of?(Effective::EventRegistrant)
71
+
72
+ Array(event_registrant.event_registration&.event_ticket_member_users).map do |user|
73
+ ["<span>#{user}</span> <small>#{user.email}</small>", user.to_param]
74
+ end
75
+ end
76
+
77
+ def effective_events_event_registrant_user_hint
70
78
  url = if current_user.class.try(:effective_memberships_organization_user?)
71
79
  organization = current_user.membership_organizations.first || current_user.organizations.first
72
80
  effective_memberships.edit_organization_path(organization, anchor: 'tab-representatives') if organization
@@ -125,7 +125,7 @@ module EffectiveEventsEventRegistration
125
125
  # If we're submitted. Try to move to completed.
126
126
  before_save(if: -> { submitted? }) { try_completed! }
127
127
 
128
- def payment_date_in_future?
128
+ def future_payment_date?
129
129
  false
130
130
  end
131
131
 
@@ -133,6 +133,11 @@ module EffectiveEventsEventRegistration
133
133
  return false if step == :complete && !completed?
134
134
  return true if step == :complete && completed?
135
135
 
136
+ # If they submitted payment with a deferred processor then lock down the steps.
137
+ if submitted? && !future_payment_date?
138
+ return (step == :submitted)
139
+ end
140
+
136
141
  can_revisit_completed_steps(step)
137
142
  end
138
143
 
@@ -262,6 +267,36 @@ module EffectiveEventsEventRegistration
262
267
  unavailable
263
268
  end
264
269
 
270
+ def event_ticket_member_users
271
+ raise("expected owner to be a user") if owner.class.try(:effective_memberships_organization?)
272
+ users = [owner] + (owner.try(:organizations).try(:flat_map, &:users) || [])
273
+
274
+ users.select { |user| user.is_any?(:member) }.uniq
275
+ end
276
+
277
+ def update_blank_registrants!
278
+ # This method is called by the user on a submitted or completed event registration.
279
+ # Allow them to update blank registrants
280
+ # Don't let them hack the form and change any information.
281
+ if changes.present? || previous_changes.present?
282
+ raise('unable to make changes to event while updating blank registrants')
283
+ end
284
+
285
+ if event_registrants.any? { |er| (er.changes.keys - Effective::EventRegistrant::PERMITTED_BLANK_REGISTRANT_CHANGES).present? }
286
+ raise('unable to make changes to event registrants while updating blank registrants')
287
+ end
288
+
289
+ if event_registrants.any? { |er| er.blank_registrant_was == false && er.changes.present? }
290
+ raise('unable to make changes to non-blank registrant while updating blank registrants')
291
+ end
292
+
293
+ if event_addons.any? { |ea| ea.changes.present? }
294
+ raise('unable to make changes to event addons while updating blank registrants')
295
+ end
296
+
297
+ save!
298
+ end
299
+
265
300
  private
266
301
 
267
302
  def present_event_registrants
@@ -4,6 +4,8 @@ module Effective
4
4
  class EventRegistrant < ActiveRecord::Base
5
5
  self.table_name = (EffectiveEvents.event_registrants_table_name || :event_registrants).to_s
6
6
 
7
+ PERMITTED_BLANK_REGISTRANT_CHANGES = ["first_name", "last_name", "email", "company", "user_id", "user_type", "blank_registrant", "response1", "response2", "response3"]
8
+
7
9
  acts_as_purchasable
8
10
  acts_as_archived
9
11
 
@@ -5,23 +5,23 @@
5
5
  = f.text_field :title
6
6
 
7
7
  .row
8
- .col= f.select :category, Effective::EventTicket::CATEGORIES, hint: "Determines who can purchase this ticket at which price. Also determines if the dropdown of all members is displayed to the purchaser."
8
+ .col= f.select :category, Effective::EventTicket::CATEGORIES, hint: "Determines who can purchase this ticket at which price. Also determines if the dropdown of related members is displayed to the purchaser."
9
9
  .col= f.number_field :capacity, hint: "The number of registrations will be limited to capacity.<br>Leave blank for unlimited capacity."
10
10
 
11
11
  = f.show_if(:category, 'Regular') do
12
12
  .alert.alert-info.mb-4
13
13
  %strong Regular Ticket:
14
- Anyone will be able to purchase this ticket. They will be asked for a first name, last name and email. Will not display the dropdown list of all members. Only the regular price applies.
14
+ Anyone will be able to purchase this ticket. They will be asked for a first name, last name and email. Will not display the dropdown list of related members. Only the regular price applies.
15
15
 
16
16
  = f.show_if(:category, 'Member Only') do
17
17
  .alert.alert-info.mb-4
18
18
  %strong Member Only Ticket:
19
- Only members will be able to purchase this ticket. They must select a member from the dropdown list of all members. Only the member price applies.
19
+ Only members will be able to purchase this ticket. They must select a member from the dropdown list of related members. Only the member price applies.
20
20
 
21
21
  = f.show_if(:category, 'Member or Non-Member') do
22
22
  .alert.alert-info.mb-4
23
23
  %strong Member or Non-Member Ticket:
24
- Anyone will be able to purchase this ticket. They can select a member from the dropdown list of all members to receive the member pricing.
24
+ Anyone will be able to purchase this ticket. They can select a member from the dropdown list of related members to receive the member pricing.
25
25
  Or, they can enter a first name, last name and email to receive the regular pricing.
26
26
 
27
27
  .row
@@ -1,6 +1,3 @@
1
1
  - # Choose 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_tickets_user_hint()
2
+ = f.hidden_field :user_type, value: current_user.class.name
3
+ = f.select :user_id, effective_events_event_registrant_user_collection(f.object), required: true, hint: effective_events_event_registrant_user_hint()
@@ -1,9 +1,6 @@
1
1
  - # Choose 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', hint: effective_events_event_tickets_user_hint()
2
+ = f.hidden_field :user_type, value: current_user.class.name
3
+ = f.select :user_id, effective_events_event_registrant_user_collection(f.object), required: true, hint: effective_events_event_registrant_user_hint()
7
4
 
8
5
  = f.show_if(:user_id, '', nested: true) do
9
6
  %p.text-center - or -
@@ -0,0 +1,34 @@
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
+ = f.hidden_field :id
3
+
4
+ - event_registrants = f.object.event_registrants.select(&:blank_registrant?)
5
+
6
+ %p Please update the information for the following #{pluralize(event_registrants.count, 'incomplete ticket')}:
7
+
8
+ = f.fields_for :event_registrants, event_registrants do |fr|
9
+ - registrant = fr.object
10
+ - ticket = registrant.event_ticket
11
+
12
+ = card do
13
+ %p
14
+ = ticket
15
+ = ' - '
16
+ = price_to_currency(registrant.price)
17
+
18
+ = fr.check_box :blank_registrant, label: "I will return and add this ticket's information later"
19
+
20
+ = 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? && registrant.member_registrant?
26
+ = render('effective/event_registrants/fields_member_only', f: fr)
27
+ - elsif ticket.member_or_non_member? && !registrant.member_registrant?
28
+ = render('effective/event_registrants/fields_regular', f: fr)
29
+ - else
30
+ - raise("Unexpected ticket category: #{ticket.category || 'nil'}")
31
+
32
+ = render('effective/event_registrants/fields_questions', f: fr, ticket: ticket)
33
+
34
+ = f.submit 'Save Ticket Information', center: true
@@ -11,6 +11,12 @@
11
11
  = link_to "Return to Dashboard", return_to_dashboard_path, class: 'btn btn-lg btn-primary btn-block'
12
12
 
13
13
  = render 'effective/event_registrations/summary', event_registration: resource
14
+
15
+ - if resource.event.allow_blank_registrants? && EffectiveResources.authorized?(self, :update_blank_registrants, resource)
16
+ = card do
17
+ %h3 Incomplete Ticket Information
18
+ = render 'effective/event_registrations/form_blank_registrants', event_registration: resource
19
+
14
20
  = render 'effective/event_registrations/event_registration', event_registration: resource
15
21
  = render 'effective/event_registrations/orders', event_registration: resource
16
22
 
@@ -8,6 +8,12 @@
8
8
  = link_to "Return to Dashboard", return_to_dashboard_path, class: 'btn btn-lg btn-primary btn-block'
9
9
 
10
10
  = render 'effective/event_registrations/summary', event_registration: resource
11
+
12
+ - if resource.event.allow_blank_registrants? && EffectiveResources.authorized?(self, :update_blank_registrants, resource)
13
+ = card do
14
+ %h3 Incomplete Ticket Information
15
+ = render 'effective/event_registrations/form_blank_registrants', event_registration: resource
16
+
11
17
  = render 'effective/event_registrations/event_registration', event_registration: resource
12
18
  = render 'effective/event_registrations/orders', event_registration: resource
13
19
 
data/config/routes.rb CHANGED
@@ -20,6 +20,8 @@ EffectiveEvents::Engine.routes.draw do
20
20
  resources :events, only: [:index, :show] do
21
21
  resources :event_registrations, only: [:new, :show, :destroy] do
22
22
  resources :build, controller: :event_registrations, only: [:show, :update]
23
+
24
+ put :update_blank_registrants, on: :member
23
25
  end
24
26
  end
25
27
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveEvents
2
- VERSION = '0.12.2'.freeze
2
+ VERSION = '0.12.5'.freeze
3
3
  end
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.12.2
4
+ version: 0.12.5
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-05-24 00:00:00.000000000 Z
11
+ date: 2024-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -275,6 +275,7 @@ files:
275
275
  - app/views/effective/event_registrations/_content.html.haml
276
276
  - app/views/effective/event_registrations/_dashboard.html.haml
277
277
  - app/views/effective/event_registrations/_event_registration.html.haml
278
+ - app/views/effective/event_registrations/_form_blank_registrants.html.haml
278
279
  - app/views/effective/event_registrations/_layout.html.haml
279
280
  - app/views/effective/event_registrations/_orders.html.haml
280
281
  - app/views/effective/event_registrations/_summary.html.haml