spree_cm_commissioner 1.8.6 → 1.8.8
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/concerns/spree_cm_commissioner/order_concern.rb +28 -0
- data/app/controllers/spree/api/v2/storefront/order_histories_controller.rb +58 -0
- data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +0 -1
- data/app/controllers/spree_cm_commissioner/api/v2/storefront/cart_controller_decorator.rb +5 -30
- data/app/controllers/spree_cm_commissioner/api/v2/storefront/checkout_controller_decorator.rb +1 -3
- data/app/finders/spree_cm_commissioner/orders/find.rb +34 -0
- data/app/models/spree_cm_commissioner/order_decorator.rb +8 -0
- data/app/serializers/spree/v2/storefront/cart_serializer_decorator.rb +8 -1
- data/config/routes.rb +7 -0
- data/db/migrate/20250403040036_install_blazer.rb +47 -0
- data/db/migrate/{20250327094626_create_spree_cm_commissioner_taxon_blazer_query.rb → 20250403083001_create_spree_cm_commissioner_taxon_blazer_query.rb} +1 -1
- data/db/migrate/20250404050117_add_archived_at_to_spree_orders.rb +5 -0
- data/lib/spree_cm_commissioner/version.rb +1 -1
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 687ff4cf4e03ffe157a851660a8d0a82f90463ab2f7e2050e8d25e0792377989
|
4
|
+
data.tar.gz: 78794baf30a3bf2bcf033cc1ca921c422c273d2a3eb50ce40481c7424cd07950
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b1884005a4e95691a3f71c6d2a128c821cd32fb41a29bb7af72f4be5a2a3734a8c81137a29d4a3a258832118c446ce8b93656122ebeeb8dc8e985edfca400ad
|
7
|
+
data.tar.gz: 5c5c8d8dd8f1a75402b034f9e158554cf00aa3e1d7a25f16c983c71a3867b4d4312f882e0863a30b463df82e205a59daa19b432f84e67a34c6adcab484e38786
|
data/Gemfile.lock
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
module SpreeCmCommissioner
|
2
|
+
module OrderConcern
|
3
|
+
# override
|
4
|
+
def spree_current_order
|
5
|
+
@spree_current_order ||= find_spree_current_order
|
6
|
+
return nil if @spree_current_order.blank?
|
7
|
+
|
8
|
+
# Spree doesn't validate this by default (might be a bug).
|
9
|
+
# Temporary fix to ensure the order's user ID matches the logged-in user.
|
10
|
+
if @spree_current_order.user_id.present? && spree_current_user.present? && @spree_current_order.user_id != spree_current_user.id
|
11
|
+
raise CanCan::AccessDenied
|
12
|
+
end
|
13
|
+
|
14
|
+
@spree_current_order
|
15
|
+
end
|
16
|
+
|
17
|
+
# override
|
18
|
+
def find_spree_current_order
|
19
|
+
SpreeCmCommissioner::Orders::Find.new.execute(
|
20
|
+
store: current_store,
|
21
|
+
user: spree_current_user,
|
22
|
+
currency: current_currency,
|
23
|
+
token: order_token,
|
24
|
+
state: params[:state]
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
class OrderHistoriesController < ::Spree::Api::V2::ResourceController
|
6
|
+
# GET /api/v2/storefront/order_histories
|
7
|
+
# For user - no params needed
|
8
|
+
# For guest - pass: { "order_tokens[]": [1, 2, 3] }
|
9
|
+
def index
|
10
|
+
render_serialized_payload do
|
11
|
+
serialize_collection(paginated_collection)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# PATCH /api/v2/storefront/order_histories/:id/archive
|
16
|
+
def archive
|
17
|
+
order_token = params[:id]
|
18
|
+
order = Spree::Order.not_archived.find_by!(token: order_token)
|
19
|
+
|
20
|
+
spree_authorize! :update, order, order_token
|
21
|
+
raise CanCan::AccessDenied unless order.payment?
|
22
|
+
|
23
|
+
if order.archive
|
24
|
+
render_serialized_payload { serialize_resource(order) }
|
25
|
+
else
|
26
|
+
render_error_payload(order.errors.full_messages.to_sentence)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def collection
|
33
|
+
if spree_current_user.present?
|
34
|
+
spree_current_user.orders.payment.not_archived
|
35
|
+
else
|
36
|
+
order_tokens = Array(params[:order_tokens])
|
37
|
+
return Spree::Order.none if order_tokens.empty?
|
38
|
+
|
39
|
+
Spree::Order.payment.not_archived.without_user.where(token: order_tokens)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def collection_serializer
|
44
|
+
Spree::V2::Storefront::CartSerializer
|
45
|
+
end
|
46
|
+
|
47
|
+
def resource_serializer
|
48
|
+
Spree::V2::Storefront::CartSerializer
|
49
|
+
end
|
50
|
+
|
51
|
+
def model_class
|
52
|
+
Spree::Order
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -4,42 +4,17 @@ module SpreeCmCommissioner
|
|
4
4
|
module Storefront
|
5
5
|
module CartControllerDecorator
|
6
6
|
def self.prepended(base)
|
7
|
-
base.
|
7
|
+
base.include SpreeCmCommissioner::OrderConcern
|
8
8
|
end
|
9
9
|
|
10
|
-
#
|
11
|
-
# this cause app to be stuck at book page because cart is not considered cart or completed.
|
12
|
-
#
|
13
|
-
# solution is to restart it back to cart.
|
10
|
+
# Restart the checkout flow to bring the order back to the cart view
|
14
11
|
def restart_checkout_flow
|
15
12
|
spree_authorize! :update, spree_current_order, order_token
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
else
|
20
|
-
spree_current_order.restart_checkout_flow
|
21
|
-
spree_current_order.update_with_updater!
|
14
|
+
spree_current_order.restart_checkout_flow
|
15
|
+
spree_current_order.update_with_updater!
|
22
16
|
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# we required only user can create cart
|
28
|
-
# in case there is no cart, and user try to add item to cart,
|
29
|
-
# it should create one instead of raising error.
|
30
|
-
def ensure_cart_exist
|
31
|
-
spree_authorize! :create, Spree::Order
|
32
|
-
return if spree_current_order.present?
|
33
|
-
|
34
|
-
create_cart_params = {
|
35
|
-
user: spree_current_user,
|
36
|
-
store: current_store,
|
37
|
-
currency: current_currency,
|
38
|
-
public_metadata: add_item_params[:public_metadata],
|
39
|
-
private_metadata: add_item_params[:private_metadata]
|
40
|
-
}
|
41
|
-
|
42
|
-
@spree_current_order ||= create_service.call(create_cart_params).value
|
17
|
+
render_serialized_payload { serialized_current_order }
|
43
18
|
end
|
44
19
|
end
|
45
20
|
end
|
data/app/controllers/spree_cm_commissioner/api/v2/storefront/checkout_controller_decorator.rb
CHANGED
@@ -4,9 +4,7 @@ module SpreeCmCommissioner
|
|
4
4
|
module Storefront
|
5
5
|
module CheckoutControllerDecorator
|
6
6
|
def self.prepended(base)
|
7
|
-
|
8
|
-
# GET /payment_redirect
|
9
|
-
base.around_action :set_writing_role, only: %i[payment_redirect]
|
7
|
+
base.include SpreeCmCommissioner::OrderConcern
|
10
8
|
end
|
11
9
|
end
|
12
10
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Custom replacement for Spree::Orders::FindCurrent with the following improvements:
|
2
|
+
# - Supports filtering by state (e.g., to retrieve only 'cart' or 'address' orders for the page cart)
|
3
|
+
# - Allows retrieving the order in any state (not just incomplete), which solves the issue of 404s after payment
|
4
|
+
module SpreeCmCommissioner
|
5
|
+
module Orders
|
6
|
+
class Find
|
7
|
+
def execute(store:, user:, currency:, token: nil, state: nil)
|
8
|
+
params = { store_id: store.id, currency: currency }
|
9
|
+
params[:state] = state if state.present?
|
10
|
+
|
11
|
+
return find_by_token(params, token) if token.present?
|
12
|
+
return find_by_user(params, user) if user.present?
|
13
|
+
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def find_by_token(params, token)
|
18
|
+
params[:token] = token
|
19
|
+
scope.find_by(params)
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_by_user(params, user)
|
23
|
+
params[:user_id] = user.id
|
24
|
+
scope.order(created_at: :desc).find_by(params)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def scope
|
30
|
+
Spree::Order.not_archived.not_canceled
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -7,6 +7,10 @@ module SpreeCmCommissioner
|
|
7
7
|
base.scope :subscription, -> { where.not(subscription_id: nil) }
|
8
8
|
base.scope :paid, -> { where(payment_state: :paid) }
|
9
9
|
base.scope :complete_or_canceled, -> { complete.or(where(state: 'canceled')) }
|
10
|
+
base.scope :payment, -> { incomplete.where(state: 'payment') }
|
11
|
+
base.scope :archived, -> { where.not(archived_at: nil) }
|
12
|
+
base.scope :not_archived, -> { where(archived_at: nil) }
|
13
|
+
base.scope :without_user, -> { where(user_id: nil) }
|
10
14
|
|
11
15
|
base.scope :filter_by_match_user_contact, lambda { |user|
|
12
16
|
complete.where(
|
@@ -101,6 +105,10 @@ module SpreeCmCommissioner
|
|
101
105
|
self.class.unscoped.where(id: self).update_all(changes) # rubocop:disable Rails/SkipsModelValidations
|
102
106
|
end
|
103
107
|
|
108
|
+
def archive
|
109
|
+
update(archived_at: Time.current)
|
110
|
+
end
|
111
|
+
|
104
112
|
# overrided
|
105
113
|
# avoid raise error when source_id is nil.
|
106
114
|
# https://github.com/channainfo/commissioner/pull/843
|
@@ -3,8 +3,15 @@ module Spree
|
|
3
3
|
module Storefront
|
4
4
|
module CartSerializerDecorator
|
5
5
|
def self.prepended(base)
|
6
|
-
base.attributes :phone_number, :intel_phone_number, :country_code, :request_state,
|
6
|
+
base.attributes :phone_number, :intel_phone_number, :country_code, :request_state,
|
7
7
|
:channel
|
8
|
+
|
9
|
+
base.attribute :qr_data do |order|
|
10
|
+
order.qr_data if order.completed?
|
11
|
+
end
|
12
|
+
|
13
|
+
# override to return all payments instead of only valid_payments
|
14
|
+
base.has_many :payments
|
8
15
|
end
|
9
16
|
end
|
10
17
|
end
|
data/config/routes.rb
CHANGED
@@ -518,6 +518,13 @@ Spree::Core::Engine.add_routes do
|
|
518
518
|
|
519
519
|
resources :wished_items
|
520
520
|
resources :user_promotion
|
521
|
+
|
522
|
+
resources :order_histories, only: %i[index] do
|
523
|
+
member do
|
524
|
+
patch :archive
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
521
528
|
resources :order_promotions
|
522
529
|
resources :guest_card_classes
|
523
530
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class InstallBlazer < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :blazer_queries, if_not_exists: true do |t|
|
4
|
+
t.references :creator
|
5
|
+
t.string :name
|
6
|
+
t.text :description
|
7
|
+
t.text :statement
|
8
|
+
t.string :data_source
|
9
|
+
t.string :status
|
10
|
+
t.timestamps null: false
|
11
|
+
end
|
12
|
+
|
13
|
+
create_table :blazer_audits, if_not_exists: true do |t|
|
14
|
+
t.references :user
|
15
|
+
t.references :query
|
16
|
+
t.text :statement
|
17
|
+
t.string :data_source
|
18
|
+
t.datetime :created_at
|
19
|
+
end
|
20
|
+
|
21
|
+
create_table :blazer_dashboards, if_not_exists: true do |t|
|
22
|
+
t.references :creator
|
23
|
+
t.string :name
|
24
|
+
t.timestamps null: false
|
25
|
+
end
|
26
|
+
|
27
|
+
create_table :blazer_dashboard_queries, if_not_exists: true do |t|
|
28
|
+
t.references :dashboard
|
29
|
+
t.references :query
|
30
|
+
t.integer :position
|
31
|
+
t.timestamps null: false
|
32
|
+
end
|
33
|
+
|
34
|
+
create_table :blazer_checks, if_not_exists: true do |t|
|
35
|
+
t.references :creator
|
36
|
+
t.references :query
|
37
|
+
t.string :state
|
38
|
+
t.string :schedule
|
39
|
+
t.text :emails
|
40
|
+
t.text :slack_channels
|
41
|
+
t.string :check_type
|
42
|
+
t.text :message
|
43
|
+
t.datetime :last_run_at
|
44
|
+
t.timestamps null: false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class CreateSpreeCmCommissionerTaxonBlazerQuery < ActiveRecord::Migration[7.0]
|
2
2
|
def change
|
3
|
-
create_table :cm_taxon_blazer_queries,if_not_exists: true do |t|
|
3
|
+
create_table :cm_taxon_blazer_queries, if_not_exists: true do |t|
|
4
4
|
t.references :taxon, foreign_key: { to_table: :spree_taxons }, null: false, index: true
|
5
5
|
t.references :blazer_query, foreign_key: { to_table: :blazer_queries }, null: false, index: true
|
6
6
|
t.timestamps
|
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.8.
|
4
|
+
version: 1.8.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- You
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-04-
|
11
|
+
date: 2025-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree
|
@@ -665,6 +665,7 @@ files:
|
|
665
665
|
- app/controllers/concerns/spree_cm_commissioner/content_cachable.rb
|
666
666
|
- app/controllers/concerns/spree_cm_commissioner/events/role_authorization.rb
|
667
667
|
- app/controllers/concerns/spree_cm_commissioner/exception_notificable.rb
|
668
|
+
- app/controllers/concerns/spree_cm_commissioner/order_concern.rb
|
668
669
|
- app/controllers/concerns/spree_cm_commissioner/transit/taxon_bitwise.rb
|
669
670
|
- app/controllers/concerns/spree_cm_commissioner/waiting_room_authorization.rb
|
670
671
|
- app/controllers/spree/admin/account_deletions_controller.rb
|
@@ -786,6 +787,7 @@ files:
|
|
786
787
|
- app/controllers/spree/api/v2/storefront/line_items_controller.rb
|
787
788
|
- app/controllers/spree/api/v2/storefront/nearby_places_controller.rb
|
788
789
|
- app/controllers/spree/api/v2/storefront/notifications_controller.rb
|
790
|
+
- app/controllers/spree/api/v2/storefront/order_histories_controller.rb
|
789
791
|
- app/controllers/spree/api/v2/storefront/order_products_taxons_controller.rb
|
790
792
|
- app/controllers/spree/api/v2/storefront/order_promotions_controller.rb
|
791
793
|
- app/controllers/spree/api/v2/storefront/order_qrs_controller.rb
|
@@ -920,6 +922,7 @@ files:
|
|
920
922
|
- app/factory/spree_cm_commissioner/order_telegram_message_factory.rb
|
921
923
|
- app/factory/spree_cm_commissioner/telegram_message_factory.rb
|
922
924
|
- app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb
|
925
|
+
- app/finders/spree_cm_commissioner/orders/find.rb
|
923
926
|
- app/finders/spree_cm_commissioner/orders/find_by_state.rb
|
924
927
|
- app/finders/spree_cm_commissioner/payment_methods/group_by_bank.rb
|
925
928
|
- app/helpers/spree/admin/base_helper_decorator.rb
|
@@ -2296,10 +2299,12 @@ files:
|
|
2296
2299
|
- db/migrate/20250314013434_add_available_on_to_spree_taxons.rb
|
2297
2300
|
- db/migrate/20250321041406_create_trip_connections.rb
|
2298
2301
|
- db/migrate/20250327074327_add_hide_video_banner_to_spree_taxon.rb
|
2299
|
-
- db/migrate/20250327094626_create_spree_cm_commissioner_taxon_blazer_query.rb
|
2300
2302
|
- db/migrate/20250328072717_add_description_to_spree_roles.rb
|
2301
2303
|
- db/migrate/20250328072841_add_vendor_id_to_spree_roles.rb
|
2302
2304
|
- db/migrate/20250328072947_remove_unique_constraint_from_name_in_spree_roles.rb
|
2305
|
+
- db/migrate/20250403040036_install_blazer.rb
|
2306
|
+
- db/migrate/20250403083001_create_spree_cm_commissioner_taxon_blazer_query.rb
|
2307
|
+
- db/migrate/20250404050117_add_archived_at_to_spree_orders.rb
|
2303
2308
|
- docker-compose.yml
|
2304
2309
|
- docs/option_types/attr_types.md
|
2305
2310
|
- docs/private_key.pem
|