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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8cd5a0a2e3fc958b2a2e6bf0fd4dcd5773be9b512038dd183613b9586162c725
4
- data.tar.gz: 3d37e405da973e87aa03bd9177dd3474d720106e8f44ac9524156623aa586d4a
3
+ metadata.gz: 687ff4cf4e03ffe157a851660a8d0a82f90463ab2f7e2050e8d25e0792377989
4
+ data.tar.gz: 78794baf30a3bf2bcf033cc1ca921c422c273d2a3eb50ce40481c7424cd07950
5
5
  SHA512:
6
- metadata.gz: f16265bfb68e1ed87973e1b5afc987d99362e627f7a0072f56e10445712c2516b841a3a8285ee8f20961cbcf3eddfcfbacbd7829156b834875126b16834684fe
7
- data.tar.gz: 7bde1b69e06d5e56ab2b505784f44e75ecf930ca381f19a758c851dfc7da721b9e24895da8b51553ff0ac613f5de1b0a6a24f27066917e768728bfdc062e27f1
6
+ metadata.gz: 7b1884005a4e95691a3f71c6d2a128c821cd32fb41a29bb7af72f4be5a2a3734a8c81137a29d4a3a258832118c446ce8b93656122ebeeb8dc8e985edfca400ad
7
+ data.tar.gz: 5c5c8d8dd8f1a75402b034f9e158554cf00aa3e1d7a25f16c983c71a3867b4d4312f882e0863a30b463df82e205a59daa19b432f84e67a34c6adcab484e38786
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (1.8.6)
37
+ spree_cm_commissioner (1.8.8)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -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
@@ -6,7 +6,6 @@ module Spree
6
6
  class LineItemsController < CartController
7
7
  before_action :ensure_order, only: :create
8
8
  before_action :load_variant, only: :create
9
- before_action :ensure_cart_exist, only: :create
10
9
 
11
10
  # override
12
11
  def create
@@ -4,42 +4,17 @@ module SpreeCmCommissioner
4
4
  module Storefront
5
5
  module CartControllerDecorator
6
6
  def self.prepended(base)
7
- base.before_action :ensure_cart_exist, only: :add_item
7
+ base.include SpreeCmCommissioner::OrderConcern
8
8
  end
9
9
 
10
- # one usecase where this neccessary is when order.state is 'complete', but complated_at & payment_state is null,
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
- if spree_current_order.completed_at.present?
18
- render_error_payload('Cart already completed!')
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
- render_serialized_payload { serialized_current_order }
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
@@ -4,9 +4,7 @@ module SpreeCmCommissioner
4
4
  module Storefront
5
5
  module CheckoutControllerDecorator
6
6
  def self.prepended(base)
7
- # spree_vpago gem update payment state in #payment_redirect
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, :qr_data,
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
@@ -0,0 +1,5 @@
1
+ class AddArchivedAtToSpreeOrders < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :spree_orders, :archived_at, :datetime, if_not_exists: true
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.8.6'.freeze
2
+ VERSION = '1.8.8'.freeze
3
3
 
4
4
  module_function
5
5
 
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.6
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-01 00:00:00.000000000 Z
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