spree_cm_commissioner 1.8.3 → 1.8.5

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.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/controllers/spree/admin/base_controller_decorator.rb +8 -2
  4. data/app/controllers/spree/api/v2/tenant/cart_controller.rb +15 -0
  5. data/app/controllers/spree/api/v2/tenant/cart_payment_method_groups_controller.rb +33 -0
  6. data/app/controllers/spree/api/v2/tenant/checkout_controller.rb +14 -0
  7. data/app/models/spree_cm_commissioner/ability_decorator.rb +1 -1
  8. data/app/models/spree_cm_commissioner/order_decorator.rb +1 -1
  9. data/app/models/spree_cm_commissioner/place.rb +2 -0
  10. data/app/models/spree_cm_commissioner/taxon_decorator.rb +1 -0
  11. data/app/models/spree_cm_commissioner/tenant.rb +5 -1
  12. data/app/models/spree_cm_commissioner/trip_stop.rb +3 -3
  13. data/app/models/spree_cm_commissioner/variant_decorator.rb +1 -0
  14. data/app/models/spree_cm_commissioner/vendor_decorator.rb +3 -3
  15. data/app/models/spree_cm_commissioner/vendor_stop.rb +1 -1
  16. data/app/overrides/spree/admin/products/edit/clear_cache_button.html.erb.deface +3 -0
  17. data/app/overrides/spree/admin/taxons/edit/clear_cache_button.html.erb.deface +7 -0
  18. data/app/queries/spree_cm_commissioner/organizer_profile_event_query.rb +1 -1
  19. data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +3 -1
  20. data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +2 -0
  21. data/app/serializers/spree/v2/tenant/payment_method_group_serializer.rb +11 -0
  22. data/app/serializers/spree/v2/tenant/payment_method_serializer.rb +13 -0
  23. data/app/views/spree/admin/user_events/_users.html.erb +11 -6
  24. data/config/routes.rb +3 -0
  25. data/lib/spree_cm_commissioner/version.rb +1 -1
  26. metadata +7 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a29005588982c0e0228340fd24198709de40e2e058a7d1013deb6c9bc947f2f5
4
- data.tar.gz: d17216bb0b773e4b1e907f74f49dad9e370eaeb6ac972abba49775f30c1b4569
3
+ metadata.gz: 53d7b7682c7178ee43a82fa1bed180bff277284eb4cc11790f7b9286d4aa2c98
4
+ data.tar.gz: e352ffca56db709ce091fd5d1900b0893ef86fc55a0c0254da1443cad454a49f
5
5
  SHA512:
6
- metadata.gz: 7e32fa8dd56c0263baef2dca897b1e83c4148cc5f827ed66d85254051279276880b6f3609fa69108623b1def8a7361bdef6bc067392b4765d2ce94fb7180c647
7
- data.tar.gz: bf9195774bc68a1829c5803a94a50fce25bd3fceb4005b0d4aefb9f0a7167fe86aa8d42f17c8c07d974283be07589a4208a914af65489475b2c6a739a69e0e39
6
+ metadata.gz: ab207fab5a440fb505cb157f7d29070c3d0f53a89117854bcdfceb0141e9cea8cc497d73d80afae1b6921c79b566744b52e86e4783c747527fa36bfb19505e5a
7
+ data.tar.gz: 790e0b20a95d9a52c525b1e0528f6421479742d2713fd87fc325e3b69c09ab8c6804db3969fee36256d13e728ace25277a2a2f3e96aad496ff3e02fa0695d2ac
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (1.8.3)
37
+ spree_cm_commissioner (1.8.5)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -32,7 +32,7 @@ module Spree
32
32
  end
33
33
 
34
34
  # POST
35
- def invalidate_api_caches
35
+ def invalidate_api_caches # rubocop:disable Metrics/CyclomaticComplexity
36
36
  if params[:model].present?
37
37
  model = case params[:model]
38
38
  when 'SpreeCmCommissioner::HomepageSection'
@@ -41,6 +41,10 @@ module Spree
41
41
  SpreeCmCommissioner::HomepageBackground
42
42
  when 'Spree::Menu'
43
43
  Spree::Menu
44
+ when 'Spree::Taxon'
45
+ Spree::Taxon
46
+ when 'Spree::Product'
47
+ Spree::Product
44
48
  else
45
49
  flash[:error] = 'Invalid model provided' # rubocop:disable Rails/I18nLocaleTexts
46
50
  redirect_back fallback_location: admin_root_path and return
@@ -50,7 +54,9 @@ module Spree
50
54
  api_patterns_map = {
51
55
  SpreeCmCommissioner::HomepageSection => '/api/v2/storefront/homepage/*',
52
56
  SpreeCmCommissioner::HomepageBackground => '/api/v2/storefront/homepage/*',
53
- Spree::Menu => '/api/v2/storefront/menus*'
57
+ Spree::Menu => '/api/v2/storefront/menus*',
58
+ Spree::Taxon => '/api/v2/storefront/taxons*',
59
+ Spree::Product => '/api/v2/storefront/products*'
54
60
  }
55
61
  api_patterns = api_patterns_map[model]
56
62
 
@@ -53,6 +53,17 @@ module Spree
53
53
  render_order(result)
54
54
  end
55
55
 
56
+ def remove_line_item
57
+ spree_authorize! :update, spree_current_order, order_token
58
+
59
+ remove_line_item_service.call(
60
+ order: spree_current_order,
61
+ line_item: line_item
62
+ )
63
+
64
+ render_serialized_payload { serialized_current_order }
65
+ end
66
+
56
67
  def destroy
57
68
  spree_authorize! :update, spree_current_order, order_token
58
69
 
@@ -145,6 +156,10 @@ module Spree
145
156
  Spree::Api::Dependencies.storefront_cart_add_item_service.constantize
146
157
  end
147
158
 
159
+ def remove_line_item_service
160
+ Spree::Api::Dependencies.storefront_cart_remove_line_item_service.constantize
161
+ end
162
+
148
163
  def destroy_cart_service
149
164
  Spree::Api::Dependencies.storefront_cart_destroy_service.constantize
150
165
  end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Tenant
5
+ class CartPaymentMethodGroupsController < BaseController
6
+ include Spree::Api::V2::Storefront::OrderConcern
7
+
8
+ before_action :ensure_order
9
+
10
+ # override
11
+ def index
12
+ render_serialized_payload do
13
+ collection_serializer.new(collection, { include: resource_includes }).serializable_hash
14
+ end
15
+ end
16
+
17
+ # override
18
+ def collection
19
+ @collection ||= SpreeCmCommissioner::PaymentMethods::GroupByBank.new.execute(
20
+ payment_methods: spree_current_order.available_payment_methods,
21
+ preferred_payment_method_id: spree_current_user&.preferred_payment_method_id
22
+ )
23
+ end
24
+
25
+ # override
26
+ def collection_serializer
27
+ Spree::V2::Tenant::PaymentMethodGroupSerializer
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -47,6 +47,16 @@ module Spree
47
47
  render_order(result)
48
48
  end
49
49
 
50
+ def create_payment
51
+ result = create_payment_service.call(order: spree_current_order, params: params)
52
+
53
+ if result.success?
54
+ render_serialized_payload(201) { serialize_resource(spree_current_order.reload) }
55
+ else
56
+ render_error_payload(result.error)
57
+ end
58
+ end
59
+
50
60
  private
51
61
 
52
62
  def wrap_with_multitenant_without(&block)
@@ -72,6 +82,10 @@ module Spree
72
82
  def update_service
73
83
  Spree::Api::Dependencies.storefront_checkout_update_service.constantize
74
84
  end
85
+
86
+ def create_payment_service
87
+ Vpago::Payments::FindOrCreate
88
+ end
75
89
  end
76
90
  end
77
91
  end
@@ -3,7 +3,7 @@ module SpreeCmCommissioner
3
3
  private
4
4
 
5
5
  def abilities_to_register
6
- super << SpreeCmCommissioner::CheckInAbility
6
+ super.reject { |ability| ability == Spree::VendorAbility } << SpreeCmCommissioner::CheckInAbility
7
7
  end
8
8
 
9
9
  def current_ability
@@ -31,7 +31,7 @@ module SpreeCmCommissioner
31
31
  base.has_one :invoice, dependent: :destroy, class_name: 'SpreeCmCommissioner::Invoice'
32
32
  base.has_one :customer, class_name: 'SpreeCmCommissioner::Customer', through: :subscription
33
33
 
34
- base.belongs_to :tenant, class_name: 'SpreeCmCommissioner::Tenant'
34
+ base.belongs_to :tenant, class_name: 'SpreeCmCommissioner::Tenant', optional: true
35
35
  base.belongs_to :subscription, class_name: 'SpreeCmCommissioner::Subscription', optional: true
36
36
 
37
37
  base.has_many :taxons, class_name: 'Spree::Taxon', through: :customer
@@ -16,6 +16,8 @@ module SpreeCmCommissioner
16
16
  has_many :children, class_name: 'SpreeCmCommissioner::Place', foreign_key: :parent_id, dependent: :destroy
17
17
  belongs_to :parent, class_name: 'SpreeCmCommissioner::Place', optional: true
18
18
 
19
+ has_many :vendor_stops, class_name: 'SpreeCmCommissioner::VendorStop', dependent: :destroy
20
+
19
21
  def self.ransackable_attributes(auth_object = nil)
20
22
  super & %w[name code]
21
23
  end
@@ -7,6 +7,7 @@ module SpreeCmCommissioner
7
7
 
8
8
  base.preference :background_color, :string
9
9
  base.preference :foreground_color, :string
10
+ base.preference :reports, :array, default: []
10
11
 
11
12
  base.has_many :taxon_vendors, class_name: 'SpreeCmCommissioner::TaxonVendor'
12
13
  base.has_many :vendors, through: :taxon_vendors
@@ -3,7 +3,11 @@ module SpreeCmCommissioner
3
3
  extend FriendlyId
4
4
  friendly_id :name, use: :history
5
5
 
6
- has_many :vendors, class_name: 'Spree::Vendor'
6
+ has_many :vendors, class_name: 'Spree::Vendor', inverse_of: :tenant
7
+ has_many :orders, class_name: 'Spree::Order', inverse_of: :tenant
8
+ has_many :tenant_payment_methods, class_name: 'Spree::PaymentMethod',
9
+ through: :vendors,
10
+ source: :payment_methods
7
11
 
8
12
  enum state: { enabled: 0, disabled: 1 }
9
13
 
@@ -2,10 +2,10 @@ require_dependency 'spree_cm_commissioner'
2
2
  module SpreeCmCommissioner
3
3
  class TripStop < SpreeCmCommissioner::Base
4
4
  acts_as_list column: :sequence, scope: :trip_id
5
- enum stop_type: { boarding: 0, drop_off: 1 }
5
+ enum :stop_type, { boarding: 0, drop_off: 1 }
6
6
 
7
- belongs_to :trip, class_name: 'SpreeCmCommissioner::Trip'
8
- belongs_to :stop, class_name: 'Spree::Taxon'
7
+ belongs_to :trip, class_name: 'Spree::Variant'
8
+ belongs_to :stop, class_name: 'SpreeCmCommissioner::Place'
9
9
 
10
10
  before_validation :set_stop_name
11
11
  after_create :create_vendor_stop
@@ -21,6 +21,7 @@ module SpreeCmCommissioner
21
21
  base.has_many :variant_guest_card_class, class_name: 'SpreeCmCommissioner::VariantGuestCardClass'
22
22
  base.has_many :guest_card_classes, class_name: 'SpreeCmCommissioner::GuestCardClass', through: :variant_guest_card_class
23
23
 
24
+ base.has_many :trip_stops, class_name: 'SpreeCmCommissioner::TripStop', dependent: :destroy, foreign_key: :trip_id
24
25
  base.scope :subscribable, -> { active.joins(:product).where(product: { subscribable: true, status: :active }) }
25
26
 
26
27
  base.accepts_nested_attributes_for :option_values
@@ -37,16 +37,16 @@ module SpreeCmCommissioner
37
37
  through: :option_value_vendors, source: :option_value
38
38
 
39
39
  base.has_many :branches, class_name: 'SpreeCmCommissioner::Branch'
40
- base.has_many :stops, class_name: 'SpreeCmCommissioner::Stop'
40
+ base.has_many :stops, class_name: 'SpreeCmCommissioner::Place'
41
41
 
42
42
  base.has_many :places,
43
43
  through: :nearby_places, source: :place, class_name: 'SpreeCmCommissioner::Place'
44
44
 
45
45
  base.has_many :vendor_stops, class_name: 'SpreeCmCommissioner::VendorStop', dependent: :destroy
46
46
  base.has_many :boarding_points, -> { where(cm_vendor_stops: { stop_type: 0 }) },
47
- through: :vendor_stops, source: :stop, class_name: 'Spree::Taxon'
47
+ through: :vendor_stops, source: :stop, class_name: 'SpreeCmCommissioner::Place'
48
48
  base.has_many :drop_off_points, -> { where(cm_vendor_stops: { stop_type: 1 }) },
49
- through: :vendor_stops, source: :stop, class_name: 'Spree::Taxon'
49
+ through: :vendor_stops, source: :stop, class_name: 'SpreeCmCommissioner::Place'
50
50
 
51
51
  base.has_one :logo, as: :viewable, dependent: :destroy, class_name: 'SpreeCmCommissioner::VendorLogo'
52
52
  base.has_one :payment_qrcode, as: :viewable, dependent: :destroy, class_name: 'SpreeCmCommissioner::VendorPaymentQrcode'
@@ -2,7 +2,7 @@ require_dependency 'spree_cm_commissioner'
2
2
  module SpreeCmCommissioner
3
3
  class VendorStop < ApplicationRecord
4
4
  belongs_to :vendor, class_name: 'Spree::Vendor'
5
- belongs_to :stop, class_name: 'Spree::Taxon'
5
+ belongs_to :stop, class_name: 'SpreeCmCommissioner::Place'
6
6
 
7
7
  enum stop_type: { boarding: 0, drop_off: 1 }
8
8
  end
@@ -0,0 +1,3 @@
1
+ <!-- insert_after "erb[silent]:contains('content_for :page_actions')" -->
2
+
3
+ <%= button_link_to Spree.t(:clear_cache), admin_invalidate_api_caches_path(model: Spree::Product.name),method: :post, class: "btn btn-outline-primary" %>
@@ -0,0 +1,7 @@
1
+ <!-- insert_after "erb[silent]:contains('content_for :page_actions')" -->
2
+
3
+ <% if @taxon.depth == 1 %>
4
+ <%= button_link_to Spree.t(:clear_cache),
5
+ admin_invalidate_api_caches_path(model: Spree::Taxon.name),
6
+ method: :post, class: "btn btn-outline-primary" %>
7
+ <% end %>
@@ -10,7 +10,7 @@ module SpreeCmCommissioner
10
10
  end
11
11
 
12
12
  def events
13
- taxons = Spree::Taxon.includes(:vendor).where(vendor_id: vendor_id)
13
+ taxons = Spree::Taxon.includes(:vendor).where(vendor_id: vendor_id, depth: 1)
14
14
 
15
15
  case section
16
16
  when 'upcoming'
@@ -2,7 +2,7 @@ module Spree
2
2
  module V2
3
3
  module Storefront
4
4
  module ProductSerializerDecorator
5
- def self.prepended(base)
5
+ def self.prepended(base) # rubocop:disable Metrics/MethodLength
6
6
  base.has_many :variant_kind_option_types, serializer: :option_type
7
7
  base.has_many :product_kind_option_types, serializer: :option_type
8
8
  base.has_many :promoted_option_types, serializer: :option_type
@@ -41,6 +41,8 @@ module Spree
41
41
  value = product.available?
42
42
  [true, false].include?(value) ? value : nil
43
43
  end
44
+
45
+ base.cache_options store: nil
44
46
  end
45
47
  end
46
48
  end
@@ -23,6 +23,8 @@ module Spree
23
23
  base.attribute :purchasable_on_web do |taxon|
24
24
  taxon.purchasable_on == 'web' || taxon.purchasable_on == 'both'
25
25
  end
26
+
27
+ base.cache_options store: nil
26
28
  end
27
29
  end
28
30
  end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module V2
3
+ module Tenant
4
+ class PaymentMethodGroupSerializer < BaseSerializer
5
+ attributes :name
6
+
7
+ has_many :payment_methods, serializer: Spree::V2::Tenant::PaymentMethodSerializer
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module V2
3
+ module Tenant
4
+ class PaymentMethodSerializer < BaseSerializer
5
+ attributes :type, :name, :description, :public_metadata
6
+
7
+ attribute :preferences do |object|
8
+ object.public_preferences.as_json
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -30,12 +30,17 @@
30
30
  </thead>
31
31
  <tbody>
32
32
  <% @user_events.each do |user_event| %>
33
- <% user = user_event.user %>
34
- <tr id="<%= spree_dom_id user %>" data-hook="admin_taxonomy_taxon_user_events_index_rows">
35
- <td><%= user.id %></td>
36
- <td class='user_email'><%= link_to user.email, edit_admin_user_url(user) %></td>
37
- <td><%= user.created_at %></td>
38
- <td><%= user.updated_at %></td>
33
+ <tr id="<%= spree_dom_id user_event %>" data-hook="admin_taxonomy_taxon_user_events_index_rows">
34
+ <td><%= user_event.id %></td>
35
+ <td class='user_email'>
36
+ <% if user_event.user.present? %>
37
+ <%= link_to user_event.user.email, edit_admin_user_url(user_event.user) %>
38
+ <% else %>
39
+ <span class="text-danger">User is deleted</span>
40
+ <% end %>
41
+ </td>
42
+ <td><%= user_event.created_at %></td>
43
+ <td><%= user_event.updated_at %></td>
39
44
  <td data-hook="admin_taxonomy_taxon_user_events_index_row_actions" class="actions">
40
45
  <span class="d-flex justify-content-end">
41
46
  <%= link_to_delete user_event, url: admin_user_event_path(user_event.id), no_text: true if can?(:delete, user_event) %>
data/config/routes.rb CHANGED
@@ -466,6 +466,7 @@ Spree::Core::Engine.add_routes do
466
466
 
467
467
  resource :cart, controller: :cart, only: %i[show create destroy] do
468
468
  post :add_item
469
+ delete 'remove_line_item/:line_item_id', to: 'cart#remove_line_item', as: :cart_remove_line_item
469
470
  patch :set_quantity
470
471
  patch :apply_coupon_code
471
472
  delete 'remove_coupon_code/:coupon_code', to: 'cart#remove_coupon_code', as: :cart_remove_coupon_code
@@ -479,6 +480,7 @@ Spree::Core::Engine.add_routes do
479
480
  patch :next
480
481
  patch :advance
481
482
  patch :complete
483
+ post :create_payment
482
484
  end
483
485
 
484
486
  resources :customer_notifications, only: [:show]
@@ -492,6 +494,7 @@ Spree::Core::Engine.add_routes do
492
494
  end
493
495
 
494
496
  resources :user_account_linkages, only: %i[index create destroy]
497
+ resources :cart_payment_method_groups, only: %i[index]
495
498
  resource :s3_signed_urls
496
499
  resource :profile_images, only: %i[update destroy]
497
500
  resources :line_items, only: %i[index show]
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.8.3'.freeze
2
+ VERSION = '1.8.5'.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.3
4
+ version: 1.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-20 00:00:00.000000000 Z
11
+ date: 2025-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -819,6 +819,7 @@ files:
819
819
  - app/controllers/spree/api/v2/tenant/base_controller.rb
820
820
  - app/controllers/spree/api/v2/tenant/cart_controller.rb
821
821
  - app/controllers/spree/api/v2/tenant/cart_guests_controller.rb
822
+ - app/controllers/spree/api/v2/tenant/cart_payment_method_groups_controller.rb
822
823
  - app/controllers/spree/api/v2/tenant/checkout_controller.rb
823
824
  - app/controllers/spree/api/v2/tenant/customer_notifications_controller.rb
824
825
  - app/controllers/spree/api/v2/tenant/guests_controller.rb
@@ -1300,6 +1301,7 @@ files:
1300
1301
  - app/overrides/spree/admin/products/_form/reveal_description_to_user.html.erb.deface
1301
1302
  - app/overrides/spree/admin/products/_form/subscribable_checkbox.html.erb.deface
1302
1303
  - app/overrides/spree/admin/products/_form/use_video_as_default.html.erb.deface
1304
+ - app/overrides/spree/admin/products/edit/clear_cache_button.html.erb.deface
1303
1305
  - app/overrides/spree/admin/products/index/product_vendor_link.html.erb.deface
1304
1306
  - app/overrides/spree/admin/products/new/allow_anonymous_booking.html.erb.deface
1305
1307
  - app/overrides/spree/admin/products/new/include_kyc_checkbox.html.erb.deface
@@ -1354,6 +1356,7 @@ files:
1354
1356
  - app/overrides/spree/admin/taxons/_form/sub_title.html.erb.deface
1355
1357
  - app/overrides/spree/admin/taxons/_form/to_date_form_date.html.erb.deface
1356
1358
  - app/overrides/spree/admin/taxons/_form/vendor.html.erb.deface
1359
+ - app/overrides/spree/admin/taxons/edit/clear_cache_button.html.erb.deface
1357
1360
  - app/overrides/spree/admin/taxons/edit/taxon_tabs.html.erb.deface
1358
1361
  - app/overrides/spree/admin/taxons/edit/title.html.erb.deface
1359
1362
  - app/overrides/spree/admin/users/_form/fields.html.erb.deface
@@ -1460,6 +1463,8 @@ files:
1460
1463
  - app/serializers/spree/v2/tenant/option_type_serializer.rb
1461
1464
  - app/serializers/spree/v2/tenant/option_value_serializer.rb
1462
1465
  - app/serializers/spree/v2/tenant/order_serializer.rb
1466
+ - app/serializers/spree/v2/tenant/payment_method_group_serializer.rb
1467
+ - app/serializers/spree/v2/tenant/payment_method_serializer.rb
1463
1468
  - app/serializers/spree/v2/tenant/role_serializer.rb
1464
1469
  - app/serializers/spree/v2/tenant/s3_signed_url_serializer.rb
1465
1470
  - app/serializers/spree/v2/tenant/stock_item_serializer.rb