effective_events 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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