spree_cm_commissioner 1.12.0 → 1.13.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 +4 -4
- data/Gemfile.lock +1 -1
- data/app/controllers/spree/admin/product_places_controller.rb +2 -0
- data/app/controllers/spree/api/v2/organizer/invite_guests_controller.rb +70 -0
- data/app/interactors/spree_cm_commissioner/order_importer/multi_guest.rb +31 -0
- data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +2 -3
- data/app/models/spree_cm_commissioner/invite_guest.rb +23 -0
- data/app/models/spree_cm_commissioner/place.rb +1 -1
- data/app/models/spree_cm_commissioner/product_place.rb +1 -0
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +2 -0
- data/app/serializers/spree/v2/organizer/invite_guest_serializer.rb +13 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/guest_serializer.rb +2 -1
- data/app/views/spree_cm_commissioner/event_transactional_mailer/_mailer_stylesheets.html.erb +2 -0
- data/config/routes.rb +1 -0
- data/db/migrate/20250422014417_create_spree_cm_commissioner_invite_guest.rb +21 -0
- data/lib/spree_cm_commissioner/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3da0bd043e4ceca1f57afecc1bab6fbc58c960ba296f7fffa42b449a2475f8f8
|
4
|
+
data.tar.gz: 974c8e19e026fa90254594447a9735be039371ae6d0bc11a24c9cdf3b86dfd8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b1d418758d9880e50dd1481b095f4cad76cc106ca0a950b694d2a87c053bf7f48655029c52939f33bf099db0a7d84048f0482d488a20ac720f1b6f8015a687e
|
7
|
+
data.tar.gz: 93b3ffb94424ba4a4ed46e5cde3303dc33c54a58417dd1a0750a5cb56d3638778d1fa5ceb75cf812617c33e12ae3c38c6402b7719ddfa53b2ce9567a8bb860e4
|
data/Gemfile.lock
CHANGED
@@ -49,6 +49,8 @@ module Spree
|
|
49
49
|
place_json = Base64.strict_decode64(place_base_64_content)
|
50
50
|
place_hash = JSON.parse(place_json)
|
51
51
|
|
52
|
+
place_hash = place_hash.except('lft', 'rgt', 'parent_id', 'depth')
|
53
|
+
|
52
54
|
@place = SpreeCmCommissioner::Place.where(reference: place_hash['reference']).first_or_initialize do |place|
|
53
55
|
place.assign_attributes(place_hash)
|
54
56
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Organizer
|
5
|
+
class InviteGuestsController < ::Spree::Api::V2::Organizer::BaseController
|
6
|
+
before_action :load_invite_guest_by_token, only: :show
|
7
|
+
before_action :load_invite_guest, :assign_line_item_data, only: :update
|
8
|
+
|
9
|
+
def show
|
10
|
+
render_serialized_payload { serialize_resource(@invite_guest) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def update
|
14
|
+
return render_error(:revoked) if @invite_guest.revoked?
|
15
|
+
return render_error(:closed) if @invite_guest.expired?
|
16
|
+
return render_error(:fully_claimed) if @invite_guest.fully_claimed?
|
17
|
+
|
18
|
+
guest = @line_item.guests.new(guest_params)
|
19
|
+
|
20
|
+
if guest.save
|
21
|
+
@invite_guest.update(claimed_status: :claimed) if @line_item.guests.count == @invite_guest.quantity
|
22
|
+
render json: SpreeCmCommissioner::V2::Storefront::GuestSerializer.new(guest.reload).serializable_hash
|
23
|
+
else
|
24
|
+
render_error_payload(guest.errors.full_messages.to_sentence)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def load_invite_guest_by_token
|
31
|
+
@invite_guest = SpreeCmCommissioner::InviteGuest.find_by(token: params[:id])
|
32
|
+
rescue ActiveRecord::RecordNotFound
|
33
|
+
render_error_payload(I18n.t('invite.url_not_found'))
|
34
|
+
end
|
35
|
+
|
36
|
+
def load_invite_guest
|
37
|
+
@invite_guest = SpreeCmCommissioner::InviteGuest.find(params[:id])
|
38
|
+
end
|
39
|
+
|
40
|
+
def assign_line_item_data
|
41
|
+
@line_item = @invite_guest.order.line_items.first
|
42
|
+
@guests = @line_item.guests
|
43
|
+
end
|
44
|
+
|
45
|
+
def render_error(message)
|
46
|
+
render json: { errors: message }
|
47
|
+
end
|
48
|
+
|
49
|
+
def guest_params
|
50
|
+
params.require(:invite_guest).permit(
|
51
|
+
:first_name,
|
52
|
+
:last_name,
|
53
|
+
:dob,
|
54
|
+
:gender,
|
55
|
+
:age,
|
56
|
+
:emergency_contact,
|
57
|
+
:phone_number,
|
58
|
+
:address,
|
59
|
+
:other_organization
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
def resource_serializer
|
64
|
+
::Spree::V2::Organizer::InviteGuestSerializer
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module SpreeCmCommissioner
|
2
|
+
module OrderImporter
|
3
|
+
class MultiGuest < BaseInteractor
|
4
|
+
delegate :params, :quantity, to: :context
|
5
|
+
|
6
|
+
def call
|
7
|
+
return context.fail!(message: 'variant_id_is_required') if params[:variant_id].blank?
|
8
|
+
return context.fail!(message: 'email_or_phone_is_required') if params[:order_email].blank? && params[:order_phone_number].blank?
|
9
|
+
|
10
|
+
context.order = construct_order
|
11
|
+
context.fail!(message: context.order.errors.full_messages.to_sentence) unless context.order.save
|
12
|
+
end
|
13
|
+
|
14
|
+
def construct_order
|
15
|
+
Spree::Order.new(
|
16
|
+
email: params[:order_email],
|
17
|
+
phone_number: params[:order_phone_number],
|
18
|
+
completed_at: Date.current,
|
19
|
+
state: 'complete',
|
20
|
+
payment_state: 'paid',
|
21
|
+
line_items_attributes: [
|
22
|
+
{
|
23
|
+
quantity: quantity.to_i,
|
24
|
+
variant_id: params[:variant_id]
|
25
|
+
}
|
26
|
+
]
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -98,13 +98,12 @@ module SpreeCmCommissioner
|
|
98
98
|
line_items.each do |line_item|
|
99
99
|
next if line_item.event.nil?
|
100
100
|
|
101
|
-
event_id
|
102
|
-
SpreeCmCommissioner::EventTransactionalMailer.send_to_participant(event_id, user.id).deliver_later
|
101
|
+
SpreeCmCommissioner::EventTransactionalMailer.send_to_participant(line_item.event_id, user.id).deliver_later
|
103
102
|
end
|
104
103
|
end
|
105
104
|
|
106
105
|
def user_has_email?
|
107
|
-
user.email.present?
|
106
|
+
user.present? && user.email.present?
|
108
107
|
end
|
109
108
|
|
110
109
|
# allow authorized user to accept all requested line items
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SpreeCmCommissioner
|
2
|
+
class InviteGuest < SpreeCmCommissioner::Base
|
3
|
+
enum invite_type: { invite: 0, open: 1, sponsor: 2 }
|
4
|
+
enum claimed_status: { active: 0, claimed: 1, revoked: 2 }
|
5
|
+
|
6
|
+
belongs_to :variant, class_name: 'Spree::Variant'
|
7
|
+
belongs_to :order, class_name: 'Spree::Order'
|
8
|
+
belongs_to :event, class_name: 'Spree::Taxon'
|
9
|
+
|
10
|
+
self.whitelisted_ransackable_attributes = %w[claimed_status]
|
11
|
+
|
12
|
+
def expired?
|
13
|
+
expiration_date.present? && expiration_date < Time.current
|
14
|
+
end
|
15
|
+
|
16
|
+
def fully_claimed?
|
17
|
+
return false unless order.present? && order.line_items.any?
|
18
|
+
|
19
|
+
line_item = order.line_items.first
|
20
|
+
line_item.guests.count >= order.line_items.first.number_of_guests
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -17,7 +17,7 @@ module SpreeCmCommissioner
|
|
17
17
|
has_many :products, through: :product_places
|
18
18
|
|
19
19
|
has_many :children, -> { order(:lft) }, class_name: 'SpreeCmCommissioner::Place', foreign_key: :parent_id, dependent: :destroy
|
20
|
-
has_many :vendor_stops, class_name: 'SpreeCmCommissioner::VendorStop', dependent: :destroy
|
20
|
+
has_many :vendor_stops, class_name: 'SpreeCmCommissioner::VendorStop', dependent: :destroy, foreign_key: :stop_id
|
21
21
|
|
22
22
|
def self.ransackable_attributes(auth_object = nil)
|
23
23
|
super & %w[name code]
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
class ProductPlace < Base
|
3
3
|
self.inheritance_column = '_type_disabled'
|
4
|
+
acts_as_list column: :position
|
4
5
|
|
5
6
|
belongs_to :product, class_name: 'Spree::Product', optional: false
|
6
7
|
belongs_to :place, class_name: 'SpreeCmCommissioner::Place', optional: false
|
@@ -55,6 +55,8 @@ module SpreeCmCommissioner
|
|
55
55
|
base.has_many :crew_invites, class_name: 'SpreeCmCommissioner::CrewInvite', dependent: :destroy
|
56
56
|
base.has_many :invite_user_events, through: :user_events, class_name: 'SpreeCmCommissioner::InviteUserEvent'
|
57
57
|
|
58
|
+
base.has_many :invite_guests, class_name: 'SpreeCmCommissioner::InviteGuest', foreign_key: :event_id
|
59
|
+
|
58
60
|
base.has_many :line_items, through: :products
|
59
61
|
base.has_many :event_line_items, class_name: 'Spree::LineItem', foreign_key: :event_id
|
60
62
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Spree
|
2
|
+
module V2
|
3
|
+
module Organizer
|
4
|
+
class InviteGuestSerializer < BaseSerializer
|
5
|
+
attributes :email, :quantity, :token, :invite_type, :claimed_status, :issued_to, :expiration_date,
|
6
|
+
:claimed_at, :email_send_at, :created_at, :updated_at, :remark
|
7
|
+
belongs_to :variant, serializer: SpreeCmCommissioner::V2::Storefront::EventVariantSerializer
|
8
|
+
belongs_to :order, serializer: Spree::V2::Storefront::OrderSerializer
|
9
|
+
belongs_to :event, serializer: Spree::V2::Storefront::TaxonSerializer
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -6,7 +6,8 @@ module SpreeCmCommissioner
|
|
6
6
|
|
7
7
|
attributes :first_name, :last_name, :dob, :gender, :kyc_fields, :other_occupation, :created_at, :updated_at,
|
8
8
|
:qr_data, :social_contact_platform, :social_contact, :available_social_contact_platforms,
|
9
|
-
:age, :emergency_contact, :other_organization, :expectation, :upload_later, :address, :formatted_bib_number, :phone_number
|
9
|
+
:age, :emergency_contact, :other_organization, :expectation, :upload_later, :address, :formatted_bib_number, :phone_number,
|
10
|
+
:token
|
10
11
|
|
11
12
|
# temporary, once app release after cm-app v1.9.1, we no longer need this.
|
12
13
|
attribute :seat_number do |object|
|
data/config/routes.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
class CreateSpreeCmCommissionerInviteGuest < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cm_invite_guests, if_not_exists: true do |t|
|
4
|
+
t.references :variant, foreign_key: { to_table: :spree_variants }, null: true, index: true
|
5
|
+
t.references :order, foreign_key: { to_table: :spree_orders }, null: true, index: true
|
6
|
+
t.references :event, foreign_key: { to_table: :spree_taxons }, null: true, index: true
|
7
|
+
t.string :email, index: true
|
8
|
+
t.integer :quantity, default: 1
|
9
|
+
t.string :token, null: false, unique: true, index: true
|
10
|
+
t.integer :invite_type, default: 0
|
11
|
+
t.integer :claimed_status, default: 0
|
12
|
+
t.string :issued_to
|
13
|
+
t.datetime :expiration_date
|
14
|
+
t.text :remark
|
15
|
+
t.datetime :expires_at
|
16
|
+
t.datetime :claimed_at
|
17
|
+
t.datetime :email_send_at
|
18
|
+
t.timestamps
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_cm_commissioner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- You
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-05-
|
11
|
+
date: 2025-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree
|
@@ -779,6 +779,7 @@ files:
|
|
779
779
|
- app/controllers/spree/api/v2/operator/taxons_controller.rb
|
780
780
|
- app/controllers/spree/api/v2/organizer/base_controller.rb
|
781
781
|
- app/controllers/spree/api/v2/organizer/images_controller.rb
|
782
|
+
- app/controllers/spree/api/v2/organizer/invite_guests_controller.rb
|
782
783
|
- app/controllers/spree/api/v2/organizer/invites_controller.rb
|
783
784
|
- app/controllers/spree/api/v2/organizer/s3_signed_urls_controller.rb
|
784
785
|
- app/controllers/spree/api/v2/organizer/ticket_images_controller.rb
|
@@ -1034,6 +1035,7 @@ files:
|
|
1034
1035
|
- app/interactors/spree_cm_commissioner/order_accepted_state_updater.rb
|
1035
1036
|
- app/interactors/spree_cm_commissioner/order_complete_notification_sender.rb
|
1036
1037
|
- app/interactors/spree_cm_commissioner/order_complete_telegram_sender.rb
|
1038
|
+
- app/interactors/spree_cm_commissioner/order_importer/multi_guest.rb
|
1037
1039
|
- app/interactors/spree_cm_commissioner/order_importer/single_guest.rb
|
1038
1040
|
- app/interactors/spree_cm_commissioner/order_rejected_notification_sender.rb
|
1039
1041
|
- app/interactors/spree_cm_commissioner/order_rejected_state_updater.rb
|
@@ -1211,6 +1213,7 @@ files:
|
|
1211
1213
|
- app/models/spree_cm_commissioner/import.rb
|
1212
1214
|
- app/models/spree_cm_commissioner/imports/import_order.rb
|
1213
1215
|
- app/models/spree_cm_commissioner/invite.rb
|
1216
|
+
- app/models/spree_cm_commissioner/invite_guest.rb
|
1214
1217
|
- app/models/spree_cm_commissioner/invite_user_event.rb
|
1215
1218
|
- app/models/spree_cm_commissioner/invite_user_taxon.rb
|
1216
1219
|
- app/models/spree_cm_commissioner/invoice.rb
|
@@ -1498,6 +1501,7 @@ files:
|
|
1498
1501
|
- app/serializers/spree/v2/organizer/asset_serializer.rb
|
1499
1502
|
- app/serializers/spree/v2/organizer/base_serializer.rb
|
1500
1503
|
- app/serializers/spree/v2/organizer/image_serializer.rb
|
1504
|
+
- app/serializers/spree/v2/organizer/invite_guest_serializer.rb
|
1501
1505
|
- app/serializers/spree/v2/organizer/invite_serializer.rb
|
1502
1506
|
- app/serializers/spree/v2/organizer/s3_signed_url_serializer.rb
|
1503
1507
|
- app/serializers/spree/v2/organizer/taxon_serializer.rb
|
@@ -2405,6 +2409,7 @@ files:
|
|
2405
2409
|
- db/migrate/20250404050117_add_archived_at_to_spree_orders.rb
|
2406
2410
|
- db/migrate/20250407092556_add_variant_id_to_cm_trips.rb
|
2407
2411
|
- db/migrate/20250418072528_add_nested_set_columns_to_places.rb
|
2412
|
+
- db/migrate/20250422014417_create_spree_cm_commissioner_invite_guest.rb
|
2408
2413
|
- db/migrate/20250425084929_add_description_to_spree_prototypes.rb
|
2409
2414
|
- db/migrate/20250425085938_add_preferences_to_spree_prototypes.rb
|
2410
2415
|
- db/migrate/20250428025645_add_slug_to_spree_prototypes.rb
|