spree_cm_commissioner 1.8.7.pre.beta1 → 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: c5c82306658e75ae6622d3a57418ed2c33fa59431a139f6df65261ab4c66cc66
4
- data.tar.gz: ad149426344cd2aed27ebbf8734e1200006db9cb849f2fb68e72ad3f5fb40afb
3
+ metadata.gz: 687ff4cf4e03ffe157a851660a8d0a82f90463ab2f7e2050e8d25e0792377989
4
+ data.tar.gz: 78794baf30a3bf2bcf033cc1ca921c422c273d2a3eb50ce40481c7424cd07950
5
5
  SHA512:
6
- metadata.gz: 601ff2d02e0a2054ec59ab126e4c9fc078f23f4e275e24bf9180ed5048d9a3bcbacd4b27a3f94a74e2efe69552fad35365bacacac050a9feeade522fd56eb50a
7
- data.tar.gz: 23a7212be5f02cdfb1d9b9e5b3be810c2d37e8e3eb33ea98feb2b6a6ca537a2d8f5dd6157e7c8f7e54146f8234e9e7d58fea670d47dd6282a87f1d47b0f3adb5
6
+ metadata.gz: 7b1884005a4e95691a3f71c6d2a128c821cd32fb41a29bb7af72f4be5a2a3734a8c81137a29d4a3a258832118c446ce8b93656122ebeeb8dc8e985edfca400ad
7
+ data.tar.gz: 5c5c8d8dd8f1a75402b034f9e158554cf00aa3e1d7a25f16c983c71a3867b4d4312f882e0863a30b463df82e205a59daa19b432f84e67a34c6adcab484e38786
data/Gemfile.lock CHANGED
@@ -34,13 +34,12 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (1.8.7.pre.beta1)
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
41
41
  aws-sdk-ecs
42
42
  aws-sdk-s3
43
- blazer (~> 3.0.0)
44
43
  byebug
45
44
  counter_culture (~> 3.2)
46
45
  dry-validation (~> 1.10)
@@ -216,12 +215,6 @@ GEM
216
215
  base64 (0.1.1)
217
216
  bcrypt (3.1.19)
218
217
  bigdecimal (3.1.8)
219
- blazer (3.0.4)
220
- activerecord (>= 6.1)
221
- chartkick (>= 5)
222
- csv
223
- railties (>= 6.1)
224
- safely_block (>= 0.4)
225
218
  bootstrap (4.6.2)
226
219
  autoprefixer-rails (>= 9.1.0)
227
220
  popper_js (>= 1.16.1, < 2)
@@ -245,7 +238,6 @@ GEM
245
238
  capybara-select-2 (0.5.1)
246
239
  carmen (1.1.3)
247
240
  activesupport (>= 3.0.0)
248
- chartkick (5.1.4)
249
241
  chunky_png (1.4.0)
250
242
  coderay (1.1.3)
251
243
  concurrent-ruby (1.2.2)
@@ -261,7 +253,6 @@ GEM
261
253
  crass (1.0.6)
262
254
  css_parser (1.16.0)
263
255
  addressable
264
- csv (3.3.3)
265
256
  database_cleaner (2.0.2)
266
257
  database_cleaner-active_record (>= 2, < 3)
267
258
  database_cleaner-active_record (2.1.0)
@@ -707,7 +698,6 @@ GEM
707
698
  ffi (~> 1.12)
708
699
  ruby2_keywords (0.0.5)
709
700
  rubyzip (2.3.2)
710
- safely_block (0.4.1)
711
701
  sass-rails (6.0.0)
712
702
  sassc-rails (~> 2.1, >= 2.1.1)
713
703
  sassc (2.4.0)
@@ -1,15 +1,10 @@
1
- # https://stackoverflow.com/questions/77318060/blazer-raised-activerecordconnectionnotestablished
2
1
  module Blazer
3
2
  module BaseControllerDecorator
4
3
  def self.prepended(base)
5
- base.around_action :set_writing_role
6
4
  base.before_action :restrict_organizer_access
7
5
  end
8
6
 
9
- # Annonymous block: https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Naming/BlockForwarding
10
- def set_writing_role(&block)
11
- ActiveRecord::Base.connected_to(role: :writing, &block)
12
- end
7
+ private
13
8
 
14
9
  def restrict_organizer_access
15
10
  return unless spree_current_user.organizer? && !spree_current_user.admin?
@@ -20,4 +15,4 @@ module Blazer
20
15
  end
21
16
  end
22
17
 
23
- Blazer::BaseController.prepend(Blazer::BaseControllerDecorator) unless Blazer::BaseController.ancestors.include?(Blazer::BaseControllerDecorator)
18
+ Blazer::BaseController.prepend(Blazer::BaseControllerDecorator) if defined?(Blazer::BaseController)
@@ -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
@@ -1,10 +1,5 @@
1
1
  Spree::Core::Engine.add_routes do
2
2
  # Add your extension routes here
3
-
4
- authenticate :spree_user, -> (user) { user.admin? || user.organizer? } do
5
- mount Blazer::Engine, at: 'admin/bi_reports'
6
- end
7
-
8
3
  namespace :admin do
9
4
  post '/invalidate_api_caches', to: 'base#invalidate_api_caches'
10
5
 
@@ -523,6 +518,13 @@ Spree::Core::Engine.add_routes do
523
518
 
524
519
  resources :wished_items
525
520
  resources :user_promotion
521
+
522
+ resources :order_histories, only: %i[index] do
523
+ member do
524
+ patch :archive
525
+ end
526
+ end
527
+
526
528
  resources :order_promotions
527
529
  resources :guest_card_classes
528
530
 
@@ -1,6 +1,6 @@
1
1
  class InstallBlazer < ActiveRecord::Migration[7.0]
2
2
  def change
3
- create_table :blazer_queries do |t|
3
+ create_table :blazer_queries, if_not_exists: true do |t|
4
4
  t.references :creator
5
5
  t.string :name
6
6
  t.text :description
@@ -10,7 +10,7 @@ class InstallBlazer < ActiveRecord::Migration[7.0]
10
10
  t.timestamps null: false
11
11
  end
12
12
 
13
- create_table :blazer_audits do |t|
13
+ create_table :blazer_audits, if_not_exists: true do |t|
14
14
  t.references :user
15
15
  t.references :query
16
16
  t.text :statement
@@ -18,20 +18,20 @@ class InstallBlazer < ActiveRecord::Migration[7.0]
18
18
  t.datetime :created_at
19
19
  end
20
20
 
21
- create_table :blazer_dashboards do |t|
21
+ create_table :blazer_dashboards, if_not_exists: true do |t|
22
22
  t.references :creator
23
23
  t.string :name
24
24
  t.timestamps null: false
25
25
  end
26
26
 
27
- create_table :blazer_dashboard_queries do |t|
27
+ create_table :blazer_dashboard_queries, if_not_exists: true do |t|
28
28
  t.references :dashboard
29
29
  t.references :query
30
30
  t.integer :position
31
31
  t.timestamps null: false
32
32
  end
33
33
 
34
- create_table :blazer_checks do |t|
34
+ create_table :blazer_checks, if_not_exists: true do |t|
35
35
  t.references :creator
36
36
  t.references :query
37
37
  t.string :state
@@ -44,4 +44,4 @@ class InstallBlazer < ActiveRecord::Migration[7.0]
44
44
  t.timestamps null: false
45
45
  end
46
46
  end
47
- end
47
+ end
@@ -1,9 +1,10 @@
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
7
7
  end
8
8
  end
9
9
  end
10
+
@@ -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
@@ -12,10 +12,10 @@ module SpreeCmCommissioner
12
12
 
13
13
  def add_migrations
14
14
  gems = %i[
15
- blazer
16
15
  spree_multi_vendor
17
16
  spree_cm_commissioner
18
17
  ]
18
+
19
19
  gems.each do |gem|
20
20
  run "bundle exec rake railties:install:migrations FROM=#{gem}"
21
21
  end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.8.7-beta1'.freeze
2
+ VERSION = '1.8.8'.freeze
3
3
 
4
4
  module_function
5
5
 
@@ -3,7 +3,6 @@ require 'spree_api_v1'
3
3
  require 'spree_backend'
4
4
  require 'spree_auth_devise'
5
5
  require 'spree_multi_vendor'
6
- require 'blazer'
7
6
  require 'spree_extension'
8
7
 
9
8
  require 'spree_cm_commissioner/engine'
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.add_dependency 'spree_backend', spree_opts
29
29
  s.add_dependency 'spree_multi_vendor', '>= 2.4.1'
30
30
  s.add_dependency 'spree_extension'
31
+
31
32
  s.add_dependency 'activerecord-multi-tenant'
32
33
  s.add_dependency 'phonelib'
33
34
  s.add_dependency 'aws-sdk-ecs'
@@ -55,6 +56,5 @@ Gem::Specification.new do |s|
55
56
  s.add_dependency 'counter_culture', '~> 3.2'
56
57
  s.add_development_dependency 'pg'
57
58
  s.add_development_dependency 'spree_dev_tools'
58
- s.add_dependency 'blazer', '~> 3.0.0'
59
59
  s.metadata['rubygems_mfa_required'] = 'true'
60
60
  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.8.7.pre.beta1
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-03 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
@@ -478,20 +478,6 @@ dependencies:
478
478
  - - ">="
479
479
  - !ruby/object:Gem::Version
480
480
  version: '0'
481
- - !ruby/object:Gem::Dependency
482
- name: blazer
483
- requirement: !ruby/object:Gem::Requirement
484
- requirements:
485
- - - "~>"
486
- - !ruby/object:Gem::Version
487
- version: 3.0.0
488
- type: :runtime
489
- prerelease: false
490
- version_requirements: !ruby/object:Gem::Requirement
491
- requirements:
492
- - - "~>"
493
- - !ruby/object:Gem::Version
494
- version: 3.0.0
495
481
  description: Add (optional) extension description here
496
482
  email: you@example.com
497
483
  executables: []
@@ -679,6 +665,7 @@ files:
679
665
  - app/controllers/concerns/spree_cm_commissioner/content_cachable.rb
680
666
  - app/controllers/concerns/spree_cm_commissioner/events/role_authorization.rb
681
667
  - app/controllers/concerns/spree_cm_commissioner/exception_notificable.rb
668
+ - app/controllers/concerns/spree_cm_commissioner/order_concern.rb
682
669
  - app/controllers/concerns/spree_cm_commissioner/transit/taxon_bitwise.rb
683
670
  - app/controllers/concerns/spree_cm_commissioner/waiting_room_authorization.rb
684
671
  - app/controllers/spree/admin/account_deletions_controller.rb
@@ -800,6 +787,7 @@ files:
800
787
  - app/controllers/spree/api/v2/storefront/line_items_controller.rb
801
788
  - app/controllers/spree/api/v2/storefront/nearby_places_controller.rb
802
789
  - app/controllers/spree/api/v2/storefront/notifications_controller.rb
790
+ - app/controllers/spree/api/v2/storefront/order_histories_controller.rb
803
791
  - app/controllers/spree/api/v2/storefront/order_products_taxons_controller.rb
804
792
  - app/controllers/spree/api/v2/storefront/order_promotions_controller.rb
805
793
  - app/controllers/spree/api/v2/storefront/order_qrs_controller.rb
@@ -934,6 +922,7 @@ files:
934
922
  - app/factory/spree_cm_commissioner/order_telegram_message_factory.rb
935
923
  - app/factory/spree_cm_commissioner/telegram_message_factory.rb
936
924
  - app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb
925
+ - app/finders/spree_cm_commissioner/orders/find.rb
937
926
  - app/finders/spree_cm_commissioner/orders/find_by_state.rb
938
927
  - app/finders/spree_cm_commissioner/payment_methods/group_by_bank.rb
939
928
  - app/helpers/spree/admin/base_helper_decorator.rb
@@ -2315,6 +2304,7 @@ files:
2315
2304
  - db/migrate/20250328072947_remove_unique_constraint_from_name_in_spree_roles.rb
2316
2305
  - db/migrate/20250403040036_install_blazer.rb
2317
2306
  - db/migrate/20250403083001_create_spree_cm_commissioner_taxon_blazer_query.rb
2307
+ - db/migrate/20250404050117_add_archived_at_to_spree_orders.rb
2318
2308
  - docker-compose.yml
2319
2309
  - docs/option_types/attr_types.md
2320
2310
  - docs/private_key.pem
@@ -2453,9 +2443,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
2453
2443
  version: '2.7'
2454
2444
  required_rubygems_version: !ruby/object:Gem::Requirement
2455
2445
  requirements:
2456
- - - ">"
2446
+ - - ">="
2457
2447
  - !ruby/object:Gem::Version
2458
- version: 1.3.1
2448
+ version: '0'
2459
2449
  requirements:
2460
2450
  - none
2461
2451
  rubygems_version: 3.4.1