effective_events 0.2.6 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1d66b105dd1c08cbfe4ab27dd2d1d0d36b79ac6266a49a51eef3a0ec4a1381a
4
- data.tar.gz: f8be8517805659abae1ad36b87d00546a1dd4fdb64c430e5427fbb291f54107b
3
+ metadata.gz: b23a48351b1b02e030c1b6ba099fe9ee738b0f673b947dcc5b1da98b8f22a994
4
+ data.tar.gz: 1d5876003810fe4d761a8707e5592ac9f9c201de1633a824749e966a64c9b66b
5
5
  SHA512:
6
- metadata.gz: ad52ca129969efd286fa1ed8b0d0fc65e59e5b226238439e291021c295363817568bcb5794b1bbd39fc63f704b7a7e368d2c39805fb532385125ca62577fc456
7
- data.tar.gz: 16a8988ef362b1f72a9b1d9feeab3d7dfde77f72d3ac7f8ce184468b6387bb1d5a3df4346f1b4738626df0103524578780eb483b38578fa4c0963697653ec1b3
6
+ metadata.gz: 8e86d2d215c249564b6a2d397a80331e951e553f56b3903f3b7bce0c3b4422791d8248c754cacf4ef69d3ca09c43ef835530dd406ab62f8afbd951a682aed085
7
+ data.tar.gz: 339b835ec79679400d13c6381556a20a682bea06c71fca6bd1130ffd5a86c26f074ef1ce22d75f039491b41ddbb7fc8d3dc16dc95850f9cd6281c68a620f5729
@@ -1,5 +1,10 @@
1
1
  module Admin
2
2
  class EffectiveEventAddonsDatatable < Effective::Datatable
3
+ filters do
4
+ scope :unarchived, label: "All"
5
+ scope :archived
6
+ end
7
+
3
8
  datatable do
4
9
  col :updated_at, visible: false
5
10
  col :created_at, visible: false
@@ -23,7 +28,7 @@ module Admin
23
28
  end
24
29
 
25
30
  collection do
26
- scope = Effective::EventAddon.deep.purchased
31
+ scope = Effective::EventAddon.deep.purchased.includes(:purchased_order, :owner)
27
32
 
28
33
  if attributes[:event_id].present?
29
34
  scope = scope.where(event: event)
@@ -1,5 +1,10 @@
1
1
  module Admin
2
2
  class EffectiveEventProductsDatatable < Effective::Datatable
3
+ filters do
4
+ scope :unarchived, label: "All"
5
+ scope :archived
6
+ end
7
+
3
8
  datatable do
4
9
  reorder :position
5
10
 
@@ -12,8 +17,6 @@ module Admin
12
17
  col :title
13
18
  col :price, as: :price
14
19
 
15
- col :archived
16
-
17
20
  col :capacity_to_s, label: 'Capacity' do |ticket|
18
21
  if ticket.capacity.present?
19
22
  "#{ticket.capacity_available} remaining / #{ticket.capacity} total"
@@ -1,5 +1,10 @@
1
1
  module Admin
2
2
  class EffectiveEventRegistrantsDatatable < Effective::Datatable
3
+ filters do
4
+ scope :unarchived, label: "All"
5
+ scope :archived
6
+ end
7
+
3
8
  datatable do
4
9
  col :updated_at, visible: false
5
10
  col :created_at, visible: false
@@ -1,5 +1,10 @@
1
1
  module Admin
2
2
  class EffectiveEventTicketsDatatable < Effective::Datatable
3
+ filters do
4
+ scope :unarchived, label: "All"
5
+ scope :archived
6
+ end
7
+
3
8
  datatable do
4
9
  reorder :position
5
10
 
@@ -13,8 +18,6 @@ module Admin
13
18
  col :regular_price, as: :price
14
19
  col :early_bird_price, as: :price
15
20
 
16
- col :archived
17
-
18
21
  col :capacity_to_s, label: 'Capacity' do |ticket|
19
22
  if ticket.capacity.present?
20
23
  "#{ticket.capacity_available} remaining / #{ticket.capacity} total"
@@ -3,8 +3,17 @@
3
3
  class EffectiveEventAddonsDatatable < Effective::Datatable
4
4
  datatable do
5
5
 
6
- col :event_product, search: :string, label: 'Product'
6
+ col :event_product, search: :string, label: 'Product' do |er|
7
+ [
8
+ er.event_product.to_s,
9
+ (content_tag(:span, 'Archived', class: 'badge badge-warning') if er.event_product&.archived?)
10
+ ].compact.join('<br>').html_safe
11
+ end
12
+
7
13
  col :price, as: :price
14
+
15
+ col :archived, visible: false
16
+
8
17
  # col :notes
9
18
  # no actions_col
10
19
  end
@@ -3,7 +3,12 @@
3
3
  class EffectiveEventRegistrantsDatatable < Effective::Datatable
4
4
  datatable do
5
5
 
6
- col :event_ticket, search: :string, label: 'Ticket'
6
+ col :event_ticket, search: :string, label: 'Ticket' do |er|
7
+ [
8
+ er.event_ticket.to_s,
9
+ (content_tag(:span, 'Archived', class: 'badge badge-warning') if er.event_ticket&.archived?)
10
+ ].compact.join('<br>').html_safe
11
+ end
7
12
 
8
13
  col :name do |er|
9
14
  "#{er.first_name} #{er.last_name}<br><small>#{mail_to(er.email)}</small>"
@@ -18,6 +23,8 @@ class EffectiveEventRegistrantsDatatable < Effective::Datatable
18
23
  col :price, as: :price
19
24
  col :notes
20
25
 
26
+ col :archived, visible: false
27
+
21
28
  # no actions_col
22
29
  end
23
30
 
@@ -3,13 +3,17 @@ module EffectiveEventsHelper
3
3
  def effective_events_event_tickets_collection(event)
4
4
  raise('expected an Effective::Event') unless event.kind_of?(Effective::Event)
5
5
 
6
- event.event_tickets.reject(&:archived?).map do |ticket|
6
+ # Allow an admin to assign archived tickets
7
+ authorized = EffectiveResources.authorized?(self, :admin, :effective_events)
8
+ tickets = (authorized ? event.event_tickets : event.event_tickets.reject(&:archived?))
9
+
10
+ tickets.map do |ticket|
7
11
  title = ticket.to_s
8
12
  price = (ticket.price == 0 ? '$0' : price_to_currency(ticket.price))
9
13
  remaining = (ticket.capacity.present? ? "#{ticket.capacity_available} remaining" : nil)
10
14
 
11
15
  label = [title, price, remaining].compact.join(' - ')
12
- disabled = { disabled: :disabled } unless ticket.available?
16
+ disabled = { disabled: :disabled } unless (authorized || ticket.available?)
13
17
 
14
18
  [label, ticket.to_param, disabled].compact
15
19
  end
@@ -18,13 +22,17 @@ module EffectiveEventsHelper
18
22
  def effective_events_event_products_collection(event)
19
23
  raise('expected an Effective::Event') unless event.kind_of?(Effective::Event)
20
24
 
21
- event.event_products.reject(&:archived?).map do |product|
25
+ # Allow an admin to assign archived products
26
+ authorized = EffectiveResources.authorized?(self, :admin, :effective_events)
27
+ products = (authorized ? event.event_products : event.event_products.reject(&:archived?))
28
+
29
+ products.map do |product|
22
30
  title = product.to_s
23
31
  price = (product.price == 0 ? '$0' : price_to_currency(product.price))
24
32
  remaining = (product.capacity.present? ? "#{product.capacity_available} remaining" : nil)
25
33
 
26
34
  label = [title, price, remaining].compact.join(' - ')
27
- disabled = { disabled: :disabled } unless product.available?
35
+ disabled = { disabled: :disabled } unless (authorized || product.available?)
28
36
 
29
37
  [label, product.to_param, disabled].compact
30
38
  end
@@ -1,23 +1,23 @@
1
1
  module Effective
2
2
  class EventsMailer < EffectiveEvents.parent_mailer_class
3
- default from: -> { EffectiveEvents.mailer_sender }
4
- layout -> { EffectiveEvents.mailer_layout }
5
3
 
4
+ include EffectiveMailer
6
5
  include EffectiveEmailTemplatesMailer if EffectiveEvents.use_effective_email_templates
7
6
 
8
- def event_registrant_purchased(event_registrant, opts = {})
9
- @assigns = assigns_for(event_registrant)
10
- @event_registrant = event_registrant
7
+ def event_registrant_purchased(resource, opts = {})
8
+ raise('expected an Effective::EventRegistrant') unless resource.kind_of?(Effective::EventRegistrant)
11
9
 
12
- mail(to: event_registrant.email, **headers_for(event_registrant, opts))
13
- end
10
+ @assigns = assigns_for(resource)
11
+ @event_registrant = resource
14
12
 
15
- protected
13
+ subject = subject_for(__method__, 'Event Registrant Purchased', resource, opts)
14
+ headers = headers_for(resource, opts)
16
15
 
17
- def headers_for(resource, opts = {})
18
- resource.respond_to?(:log_changes_datatable) ? opts.merge(log: resource) : opts
16
+ mail(to: resource.email, subject: subject, **headers)
19
17
  end
20
18
 
19
+ protected
20
+
21
21
  def assigns_for(resource)
22
22
  if resource.kind_of?(EventRegistrant)
23
23
  return event_registrant_assigns(resource).merge(event_assigns(resource.event)).merge(event_ticket_assigns(resource.event_ticket))
@@ -6,6 +6,7 @@
6
6
  module Effective
7
7
  class EventAddon < ActiveRecord::Base
8
8
  acts_as_purchasable
9
+ acts_as_archived
9
10
 
10
11
  log_changes(to: :event) if respond_to?(:log_changes)
11
12
 
@@ -23,6 +24,8 @@ module Effective
23
24
  effective_resource do
24
25
  notes :text
25
26
 
27
+ archived :boolean
28
+
26
29
  # Acts as Purchasable
27
30
  price :integer
28
31
  qb_item_name :string
@@ -32,7 +35,7 @@ module Effective
32
35
  end
33
36
 
34
37
  scope :sorted, -> { order(:id) }
35
- scope :deep, -> { all }
38
+ scope :deep, -> { includes(:event, :event_product) }
36
39
 
37
40
  before_validation(if: -> { event_registration.present? }) do
38
41
  self.event ||= event_registration.event
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Effective
4
4
  class EventProduct < ActiveRecord::Base
5
+ acts_as_archived
6
+
5
7
  belongs_to :event
6
8
 
7
9
  has_many :event_addons
@@ -3,6 +3,7 @@
3
3
  module Effective
4
4
  class EventRegistrant < ActiveRecord::Base
5
5
  acts_as_purchasable
6
+ acts_as_archived
6
7
 
7
8
  log_changes(to: :event) if respond_to?(:log_changes)
8
9
 
@@ -26,6 +27,8 @@ module Effective
26
27
  number :string
27
28
  notes :text
28
29
 
30
+ archived :boolean
31
+
29
32
  # Acts as Purchasable
30
33
  price :integer
31
34
  qb_item_name :string
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Effective
4
4
  class EventTicket < ActiveRecord::Base
5
+ acts_as_archived
6
+
5
7
  belongs_to :event
6
8
 
7
9
  has_many :event_registrants
@@ -8,6 +8,8 @@
8
8
 
9
9
  = render 'effective/event_addons/fields', f: f, event: event_addon.event
10
10
 
11
+ = f.check_box :archived, label: "Archive this addon. It will be displayed as archived on the owner's event registration"
12
+
11
13
  - if f.object.new_record?
12
14
  = f.submit 'Save and Mark Paid'
13
15
  - else
@@ -6,7 +6,9 @@
6
6
  - else
7
7
  = f.static_field :owner
8
8
 
9
- = render 'effective/event_registrants/fields', f: f, event: event_registrant.event
9
+ = render 'effective/event_registrants/fields', f: f, event: event_registrant.event, namespace: :admin
10
+
11
+ = f.check_box :archived, label: "Archive this registrant. It will be displayed as archived on the owner's event registration"
10
12
 
11
13
  - if f.object.new_record?
12
14
  = f.submit 'Save and Mark Paid'
@@ -5,6 +5,9 @@
5
5
  - else
6
6
  = f.select :event_ticket_id, effective_events_event_tickets_collection(event), label: 'Ticket'
7
7
 
8
+ - if f.object.purchased? && namespace == :admin
9
+ = f.select :event_ticket_id, effective_events_event_tickets_collection(event), label: 'Change Ticket', hint: 'Admin only. Change the purchased ticket. This will not create charges, alter the original order, or consider ticket capacity.'
10
+
8
11
  .row
9
12
  .col-lg= f.text_field :first_name
10
13
  .col-lg= f.text_field :last_name
@@ -17,7 +17,6 @@
17
17
  %th Registered by
18
18
  %td= event_registration.owner
19
19
 
20
-
21
20
  - if event_registration.orders.present?
22
21
  %tr
23
22
  %th Order
@@ -7,6 +7,6 @@
7
7
  = f.hidden_field :id
8
8
 
9
9
  = f.has_many :event_registrants, f.object.build_event_registrants do |fr|
10
- = render('effective/event_registrants/fields', f: fr, event: f.object.event)
10
+ = render('effective/event_registrants/fields', f: fr, event: f.object.event, namespace: :events)
11
11
 
12
12
  = f.save 'Save and Continue'
@@ -32,6 +32,7 @@ EffectiveEvents.setup do |config|
32
32
  # config.mailer_layout = nil # Default mailer layout
33
33
  # config.mailer_sender = nil # Default From value
34
34
  # config.mailer_admin = nil # Default To value for Admin correspondence
35
+ # config.mailer_subject = nil # Proc.new method used to customize Subject
35
36
 
36
37
  # Use effective email templates for event notifications
37
38
  config.use_effective_email_templates = true
data/config/routes.rb CHANGED
@@ -16,12 +16,29 @@ EffectiveEvents::Engine.routes.draw do
16
16
 
17
17
  namespace :admin do
18
18
  resources :events, except: [:show]
19
- resources :event_tickets, except: [:show]
20
- resources :event_products, except: [:show]
21
- resources :event_registrants, except: [:show]
22
- resources :event_addons, except: [:show]
23
19
  resources :event_registrations, only: [:index, :show]
24
20
  resources :event_notifications, except: [:show]
21
+
22
+ resources :event_tickets, except: [:show] do
23
+ post :archive, on: :member
24
+ post :unarchive, on: :member
25
+ end
26
+
27
+ resources :event_products, except: [:show] do
28
+ post :archive, on: :member
29
+ post :unarchive, on: :member
30
+ end
31
+
32
+ resources :event_registrants, except: [:show] do
33
+ post :archive, on: :member
34
+ post :unarchive, on: :member
35
+ end
36
+
37
+ resources :event_addons, except: [:show] do
38
+ post :archive, on: :member
39
+ post :unarchive, on: :member
40
+ end
41
+
25
42
  end
26
43
 
27
44
  end
@@ -64,6 +64,8 @@ class CreateEffectiveEvents < ActiveRecord::Migration[6.0]
64
64
  t.integer :purchased_order_id
65
65
  t.integer :price
66
66
 
67
+ t.boolean :archived, default: false
68
+
67
69
  t.timestamps
68
70
  end
69
71
 
@@ -99,6 +101,8 @@ class CreateEffectiveEvents < ActiveRecord::Migration[6.0]
99
101
  t.integer :purchased_order_id
100
102
  t.integer :price
101
103
 
104
+ t.boolean :archived, default: false
105
+
102
106
  t.timestamps
103
107
  end
104
108
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveEvents
2
- VERSION = '0.2.6'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
@@ -8,9 +8,9 @@ module EffectiveEvents
8
8
  [
9
9
  :events_table_name, :event_registrants_table_name, :event_tickets_table_name,
10
10
  :event_registrations_table_name, :event_products_table_name, :event_addons_table_name,
11
+ :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :mailer_subject, :use_effective_email_templates,
11
12
  :layout, :per_page, :use_effective_roles,
12
13
  :event_registration_class_name,
13
- :mailer, :use_effective_email_templates
14
14
  ]
15
15
  end
16
16
 
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.2.6
4
+ version: 0.3.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: 2022-03-03 00:00:00.000000000 Z
11
+ date: 2022-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails