spree_core 5.2.0 → 5.2.2
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/app/finders/spree/line_items/find_by_variant.rb +1 -1
- data/app/helpers/spree/images_helper.rb +34 -18
- data/app/helpers/spree/mail_helper.rb +1 -1
- data/app/jobs/spree/imports/create_rows_job.rb +1 -1
- data/app/jobs/spree/variants/remove_line_item_job.rb +1 -1
- data/app/models/spree/ability.rb +75 -10
- data/app/models/spree/asset.rb +26 -2
- data/app/models/spree/export.rb +1 -1
- data/app/models/spree/image/configuration/active_storage.rb +6 -15
- data/app/models/spree/image.rb +2 -1
- data/app/models/spree/import.rb +1 -1
- data/app/models/spree/order/gift_card.rb +3 -3
- data/app/models/spree/order/store_credit.rb +2 -2
- data/app/models/spree/order.rb +4 -4
- data/app/models/spree/order_contents.rb +9 -9
- data/app/models/spree/order_merger.rb +3 -3
- data/app/models/spree/page_sections/featured_taxon.rb +1 -2
- data/app/models/spree/permission_sets/base.rb +81 -0
- data/app/models/spree/permission_sets/configuration_management.rb +47 -0
- data/app/models/spree/permission_sets/dashboard_display.rb +17 -0
- data/app/models/spree/permission_sets/default_customer.rb +66 -0
- data/app/models/spree/permission_sets/order_display.rb +27 -0
- data/app/models/spree/permission_sets/order_management.rb +33 -0
- data/app/models/spree/permission_sets/product_display.rb +27 -0
- data/app/models/spree/permission_sets/product_management.rb +27 -0
- data/app/models/spree/permission_sets/promotion_management.rb +22 -0
- data/app/models/spree/permission_sets/role_management.rb +21 -0
- data/app/models/spree/permission_sets/stock_display.rb +19 -0
- data/app/models/spree/permission_sets/stock_management.rb +19 -0
- data/app/models/spree/permission_sets/super_user.rb +28 -0
- data/app/models/spree/permission_sets/user_display.rb +19 -0
- data/app/models/spree/permission_sets/user_management.rb +20 -0
- data/app/models/spree/promotion/actions/create_line_items.rb +6 -6
- data/app/models/spree/promotion_handler/coupon.rb +1 -1
- data/app/models/spree/shipping_method.rb +1 -1
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/themes/default.rb +7 -4
- data/app/presenters/spree/csv/product_variant_presenter.rb +1 -4
- data/app/services/spree/cart/add_item.rb +2 -2
- data/app/services/spree/cart/remove_item.rb +4 -4
- data/app/services/spree/cart/remove_line_item.rb +3 -3
- data/app/services/spree/cart/remove_out_of_stock_items.rb +1 -1
- data/app/services/spree/cart/set_quantity.rb +1 -1
- data/app/services/spree/checkout/advance.rb +1 -1
- data/app/services/spree/checkout/complete.rb +1 -1
- data/app/services/spree/data_feeds/google/rss.rb +4 -4
- data/app/services/spree/line_items/helper.rb +1 -1
- data/app/services/spree/shipments/helper.rb +2 -2
- data/config/locales/en.yml +1 -0
- data/lib/friendly_id/history_decorator.rb +26 -0
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -0
- data/lib/spree/core/configuration.rb +30 -0
- data/lib/spree/core/controller_helpers/auth.rb +1 -1
- data/lib/spree/core/controller_helpers/store.rb +1 -1
- data/lib/spree/core/dependencies.rb +2 -2
- data/lib/spree/core/dependencies_helper.rb +100 -5
- data/lib/spree/core/permission_configuration.rb +102 -0
- data/lib/spree/core/search/base.rb +1 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +51 -0
- data/lib/spree/testing_support/authorization_helpers.rb +2 -2
- data/lib/spree_core.rb +1 -0
- data/lib/tasks/dependencies.rake +76 -0
- metadata +25 -7
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Permission set for default storefront customers (both authenticated and guests).
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides the standard permissions needed for browsing
|
|
4
|
+
# the store and making purchases.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:default, Spree::PermissionSets::DefaultCustomer)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class DefaultCustomer < Base
|
|
12
|
+
def activate!
|
|
13
|
+
# Read-only access to catalog
|
|
14
|
+
can :read, Spree::Country
|
|
15
|
+
can :read, Spree::OptionType
|
|
16
|
+
can :read, Spree::OptionValue
|
|
17
|
+
can :read, Spree::Product
|
|
18
|
+
can :read, Spree::ProductProperty
|
|
19
|
+
can :read, Spree::Property
|
|
20
|
+
can :read, Spree::State
|
|
21
|
+
can :read, Spree::Store
|
|
22
|
+
can :read, Spree::Taxon
|
|
23
|
+
can :read, Spree::Taxonomy
|
|
24
|
+
can :read, Spree::Variant
|
|
25
|
+
can :read, Spree::Zone
|
|
26
|
+
|
|
27
|
+
# Content pages
|
|
28
|
+
can :read, Spree::Policy
|
|
29
|
+
can :read, Spree::Page
|
|
30
|
+
can :read, Spree::Post
|
|
31
|
+
can :read, Spree::PostCategory
|
|
32
|
+
|
|
33
|
+
# Order management for the user's own orders
|
|
34
|
+
can :create, Spree::Order
|
|
35
|
+
can :show, Spree::Order do |order, token|
|
|
36
|
+
order.user == user || order.token && token == order.token
|
|
37
|
+
end
|
|
38
|
+
can :update, Spree::Order do |order, token|
|
|
39
|
+
!order.completed? && (order.user == user || order.token && token == order.token)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# User account management - available to all users (including guests for their own record)
|
|
43
|
+
can :create, Spree.user_class
|
|
44
|
+
can [:show, :update, :destroy], Spree.user_class, id: user.id
|
|
45
|
+
|
|
46
|
+
# Address management
|
|
47
|
+
can :manage, Spree::Address, user_id: user.id
|
|
48
|
+
|
|
49
|
+
# Credit card management
|
|
50
|
+
can [:read, :destroy], Spree::CreditCard, user_id: user.id
|
|
51
|
+
|
|
52
|
+
# Wishlist management
|
|
53
|
+
can :manage, Spree::Wishlist, user_id: user.id
|
|
54
|
+
can :show, Spree::Wishlist do |wishlist|
|
|
55
|
+
wishlist.user == user || wishlist.is_private == false
|
|
56
|
+
end
|
|
57
|
+
can [:create, :update, :destroy], Spree::WishedItem do |wished_item|
|
|
58
|
+
wished_item.wishlist.user == user
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Invitation acceptance
|
|
62
|
+
can :accept, Spree::Invitation, invitee_id: [user.id, nil], invitee_type: user.class.name, status: 'pending'
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Permission set for viewing orders and related resources.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides read-only access to orders and associated
|
|
4
|
+
# models like payments, shipments, and refunds.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:customer_service, Spree::PermissionSets::OrderDisplay)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class OrderDisplay < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can [:read, :admin, :index], Spree::Order
|
|
14
|
+
can [:read, :admin], Spree::Payment
|
|
15
|
+
can [:read, :admin], Spree::Shipment
|
|
16
|
+
can [:read, :admin], Spree::Adjustment
|
|
17
|
+
can [:read, :admin], Spree::LineItem
|
|
18
|
+
can [:read, :admin], Spree::ReturnAuthorization
|
|
19
|
+
can [:read, :admin], Spree::CustomerReturn
|
|
20
|
+
can [:read, :admin], Spree::Reimbursement
|
|
21
|
+
can [:read, :admin], Spree::Refund
|
|
22
|
+
can [:read, :admin], Spree::StoreCredit
|
|
23
|
+
can [:read, :admin], Spree::GiftCard
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Permission set for full order management.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides complete access to manage orders,
|
|
4
|
+
# including creating, updating, and processing payments and shipments.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:order_manager, Spree::PermissionSets::OrderManagement)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class OrderManagement < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can :manage, Spree::Order
|
|
14
|
+
can :manage, Spree::Payment
|
|
15
|
+
can :manage, Spree::Shipment
|
|
16
|
+
can :manage, Spree::Adjustment
|
|
17
|
+
can :manage, Spree::LineItem
|
|
18
|
+
can :manage, Spree::ReturnAuthorization
|
|
19
|
+
can :manage, Spree::CustomerReturn
|
|
20
|
+
can :manage, Spree::Reimbursement
|
|
21
|
+
can :manage, Spree::Refund
|
|
22
|
+
can :manage, Spree::StoreCredit
|
|
23
|
+
can :manage, Spree::GiftCard
|
|
24
|
+
|
|
25
|
+
# Order-specific restrictions
|
|
26
|
+
cannot :cancel, Spree::Order
|
|
27
|
+
can :cancel, Spree::Order, &:allow_cancel?
|
|
28
|
+
cannot :destroy, Spree::Order
|
|
29
|
+
can :destroy, Spree::Order, &:can_be_deleted?
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Permission set for viewing products and catalog information.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides read-only access to products, variants,
|
|
4
|
+
# and related catalog models.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:content_editor, Spree::PermissionSets::ProductDisplay)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class ProductDisplay < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can [:read, :admin, :index], Spree::Product
|
|
14
|
+
can [:read, :admin], Spree::Variant
|
|
15
|
+
can [:read, :admin], Spree::OptionType
|
|
16
|
+
can [:read, :admin], Spree::OptionValue
|
|
17
|
+
can [:read, :admin], Spree::Property
|
|
18
|
+
can [:read, :admin], Spree::ProductProperty
|
|
19
|
+
can [:read, :admin], Spree::Metafield
|
|
20
|
+
can [:read, :admin], Spree::Taxon
|
|
21
|
+
can [:read, :admin], Spree::Taxonomy
|
|
22
|
+
can [:read, :admin], Spree::Classification
|
|
23
|
+
can [:read, :admin], Spree::Price
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Permission set for full product and catalog management.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides complete access to manage products, variants,
|
|
4
|
+
# and related catalog models like taxonomies and properties.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:merchandiser, Spree::PermissionSets::ProductManagement)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class ProductManagement < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can :manage, Spree::Product
|
|
14
|
+
can :manage, Spree::Variant
|
|
15
|
+
can :manage, Spree::OptionType
|
|
16
|
+
can :manage, Spree::OptionValue
|
|
17
|
+
can :manage, Spree::Property
|
|
18
|
+
can :manage, Spree::ProductProperty
|
|
19
|
+
can :manage, Spree::Taxon
|
|
20
|
+
can :manage, Spree::Taxonomy
|
|
21
|
+
can :manage, Spree::Classification
|
|
22
|
+
can :manage, Spree::Price
|
|
23
|
+
can :manage, Spree::Asset
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Permission set for managing promotions and discounts.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides access to create and manage promotions,
|
|
4
|
+
# coupon codes, and promotion rules.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:marketing, Spree::PermissionSets::PromotionManagement)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class PromotionManagement < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can :manage, Spree::Promotion
|
|
14
|
+
can :manage, Spree::PromotionRule
|
|
15
|
+
can :manage, Spree::PromotionAction
|
|
16
|
+
can :manage, Spree::PromotionCategory
|
|
17
|
+
can :manage, Spree::CouponCode
|
|
18
|
+
can [:read, :admin], Spree::Metafield
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Permission set for managing roles and permissions.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides access to manage roles and user assignments.
|
|
4
|
+
# Note: The admin role cannot be modified.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:admin, Spree::PermissionSets::RoleManagement)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class RoleManagement < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can :manage, Spree::Role
|
|
14
|
+
can :manage, Spree::RoleUser
|
|
15
|
+
|
|
16
|
+
# Protect the admin role from modification
|
|
17
|
+
cannot [:update, :destroy], Spree::Role, name: ['admin']
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Permission set for viewing stock and inventory information.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides read-only access to stock items,
|
|
4
|
+
# locations, and movements.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:warehouse_viewer, Spree::PermissionSets::StockDisplay)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class StockDisplay < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can [:read, :admin, :index], Spree::StockItem
|
|
14
|
+
can [:read, :admin], Spree::StockLocation
|
|
15
|
+
can [:read, :admin], Spree::StockMovement
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Permission set for full stock and inventory management.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides complete access to manage stock items,
|
|
4
|
+
# locations, and movements.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:warehouse_manager, Spree::PermissionSets::StockManagement)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class StockManagement < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can :manage, Spree::StockItem
|
|
14
|
+
can :manage, Spree::StockLocation
|
|
15
|
+
can :manage, Spree::StockMovement
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Permission set granting full administrative access.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides unrestricted access to all resources,
|
|
4
|
+
# with some safety restrictions for critical operations.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:admin, Spree::PermissionSets::SuperUser)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class SuperUser < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can :manage, :all
|
|
14
|
+
|
|
15
|
+
# Safety restrictions
|
|
16
|
+
cannot :cancel, Spree::Order
|
|
17
|
+
can :cancel, Spree::Order, &:allow_cancel?
|
|
18
|
+
cannot :destroy, Spree::Order
|
|
19
|
+
can :destroy, Spree::Order, &:can_be_deleted?
|
|
20
|
+
cannot [:edit, :update], Spree::RefundReason, mutable: false
|
|
21
|
+
cannot [:edit, :update], Spree::ReimbursementType, mutable: false
|
|
22
|
+
|
|
23
|
+
# Protect the admin role from modification
|
|
24
|
+
cannot [:update, :destroy], Spree::Role, name: ['admin']
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Permission set for viewing users and related information.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides read-only access to user accounts,
|
|
4
|
+
# addresses, and credit cards.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:support_staff, Spree::PermissionSets::UserDisplay)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class UserDisplay < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can [:read, :admin, :index], Spree.user_class
|
|
14
|
+
can [:read, :admin], Spree::Address
|
|
15
|
+
can [:read, :admin], Spree::CreditCard
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Permission set for full user management.
|
|
2
|
+
#
|
|
3
|
+
# This permission set provides complete access to manage user accounts,
|
|
4
|
+
# addresses, and credit cards.
|
|
5
|
+
#
|
|
6
|
+
# @example
|
|
7
|
+
# Spree.permissions.assign(:customer_service, Spree::PermissionSets::UserManagement)
|
|
8
|
+
#
|
|
9
|
+
module Spree
|
|
10
|
+
module PermissionSets
|
|
11
|
+
class UserManagement < Base
|
|
12
|
+
def activate!
|
|
13
|
+
can :manage, Spree.user_class
|
|
14
|
+
can :manage, Spree::Address
|
|
15
|
+
can :manage, Spree::CreditCard
|
|
16
|
+
can [:read, :admin], Spree::Metafield
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -47,9 +47,9 @@ module Spree
|
|
|
47
47
|
current_quantity = order.quantity_of(item.variant)
|
|
48
48
|
next unless current_quantity < item.quantity && item_available?(item)
|
|
49
49
|
|
|
50
|
-
line_item = Spree
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
line_item = Spree.cart_add_item_service.call(order: order,
|
|
51
|
+
variant: item.variant,
|
|
52
|
+
quantity: item.quantity - current_quantity).value
|
|
53
53
|
action_taken = true if line_item.try(:valid?)
|
|
54
54
|
end
|
|
55
55
|
action_taken
|
|
@@ -68,9 +68,9 @@ module Spree
|
|
|
68
68
|
line_item = order.find_line_item_by_variant(item.variant)
|
|
69
69
|
next unless line_item.present?
|
|
70
70
|
|
|
71
|
-
Spree
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
Spree.cart_remove_item_service.call(order: order,
|
|
72
|
+
variant: item.variant,
|
|
73
|
+
quantity: (item.quantity || 1))
|
|
74
74
|
action_taken = true
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -133,7 +133,7 @@ module Spree
|
|
|
133
133
|
line_item = order.find_line_item_by_variant(item.variant)
|
|
134
134
|
next if line_item.blank?
|
|
135
135
|
|
|
136
|
-
Spree
|
|
136
|
+
Spree.cart_remove_item_service.call(order: order, variant: item.variant, quantity: item.quantity)
|
|
137
137
|
end
|
|
138
138
|
end
|
|
139
139
|
|
|
@@ -77,7 +77,7 @@ module Spree
|
|
|
77
77
|
|
|
78
78
|
# your shipping method subclasses can override this method to provide a custom tracking number service
|
|
79
79
|
def tracking_number_service(tracking)
|
|
80
|
-
@tracking_number_service ||= Spree
|
|
80
|
+
@tracking_number_service ||= Spree.tracking_number_service.new(tracking)
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def self.calculators
|
data/app/models/spree/store.rb
CHANGED
|
@@ -85,10 +85,13 @@ module Spree
|
|
|
85
85
|
preference :border_shadow_blur, :integer, default: 5
|
|
86
86
|
|
|
87
87
|
# PRODUCT IMAGES
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
preference :
|
|
88
|
+
# These defaults match preprocessed variant sizes for optimal performance:
|
|
89
|
+
# Desktop (360x360) → large variant (720x720 at 2x)
|
|
90
|
+
# Mobile (200x200) → medium variant (400x400 at 2x)
|
|
91
|
+
preference :product_listing_image_height, :integer, default: 360
|
|
92
|
+
preference :product_listing_image_width, :integer, default: 360
|
|
93
|
+
preference :product_listing_image_height_mobile, :integer, default: 200
|
|
94
|
+
preference :product_listing_image_width_mobile, :integer, default: 200
|
|
92
95
|
end
|
|
93
96
|
end
|
|
94
97
|
end
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
def call(order:, variant:, quantity: nil, public_metadata: {}, private_metadata: {}, options: {})
|
|
7
7
|
ApplicationRecord.transaction do
|
|
8
8
|
run :add_to_line_item
|
|
9
|
-
run Spree
|
|
9
|
+
run Spree.cart_recalculate_service
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -18,7 +18,7 @@ module Spree
|
|
|
18
18
|
|
|
19
19
|
return failure(variant, "#{variant.name} is not available in #{order.currency}") if variant.amount_in(order.currency).nil?
|
|
20
20
|
|
|
21
|
-
line_item = Spree
|
|
21
|
+
line_item = Spree.line_item_by_variant_finder.new.execute(order: order, variant: variant, options: options)
|
|
22
22
|
|
|
23
23
|
line_item_created = line_item.nil?
|
|
24
24
|
if line_item.nil?
|
|
@@ -9,9 +9,9 @@ module Spree
|
|
|
9
9
|
|
|
10
10
|
ActiveRecord::Base.transaction do
|
|
11
11
|
line_item = remove_from_line_item(order: order, variant: variant, quantity: quantity, options: options)
|
|
12
|
-
Spree
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
Spree.cart_recalculate_service.call(line_item: line_item,
|
|
13
|
+
order: order,
|
|
14
|
+
options: options)
|
|
15
15
|
success(line_item)
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -19,7 +19,7 @@ module Spree
|
|
|
19
19
|
private
|
|
20
20
|
|
|
21
21
|
def remove_from_line_item(order:, variant:, quantity:, options:)
|
|
22
|
-
line_item = Spree
|
|
22
|
+
line_item = Spree.line_item_by_variant_finder.new.execute(order: order, variant: variant, options: options)
|
|
23
23
|
|
|
24
24
|
raise ActiveRecord::RecordNotFound if line_item.nil?
|
|
25
25
|
|
|
@@ -7,9 +7,9 @@ module Spree
|
|
|
7
7
|
options ||= {}
|
|
8
8
|
ActiveRecord::Base.transaction do
|
|
9
9
|
order.line_items.destroy(line_item)
|
|
10
|
-
Spree
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
Spree.cart_recalculate_service.new.call(order: order,
|
|
11
|
+
line_item: line_item,
|
|
12
|
+
options: options)
|
|
13
13
|
end
|
|
14
14
|
success(line_item)
|
|
15
15
|
end
|
|
@@ -15,7 +15,7 @@ module Spree
|
|
|
15
15
|
transitions_count = 0
|
|
16
16
|
|
|
17
17
|
until cannot_make_transition?(order, state)
|
|
18
|
-
next_result = Spree
|
|
18
|
+
next_result = Spree.checkout_next_service.call(order: order)
|
|
19
19
|
return failure(order, order.errors) if next_result.failure? && (transitions_count.zero? || state.present?)
|
|
20
20
|
|
|
21
21
|
transitions_count +=1
|
|
@@ -4,7 +4,7 @@ module Spree
|
|
|
4
4
|
prepend Spree::ServiceModule::Base
|
|
5
5
|
|
|
6
6
|
def call(order:)
|
|
7
|
-
Spree
|
|
7
|
+
Spree.checkout_next_service.call(order: order) until cannot_make_transition?(order)
|
|
8
8
|
|
|
9
9
|
if order.reload.complete?
|
|
10
10
|
success(order)
|
|
@@ -87,19 +87,19 @@ module Spree
|
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
def optional_attributes
|
|
90
|
-
Spree
|
|
90
|
+
Spree.data_feeds_google_optional_attributes_service.new
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
def required_attributes
|
|
94
|
-
Spree
|
|
94
|
+
Spree.data_feeds_google_required_attributes_service.new
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def optional_sub_attributes
|
|
98
|
-
Spree
|
|
98
|
+
Spree.data_feeds_google_optional_sub_attributes_service.new
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
def products_list
|
|
102
|
-
Spree
|
|
102
|
+
Spree.data_feeds_google_products_list.new
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
105
|
end
|
|
@@ -12,11 +12,11 @@ module Spree
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def add_item_service
|
|
15
|
-
Spree
|
|
15
|
+
Spree.cart_add_item_service
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def remove_item_service
|
|
19
|
-
Spree
|
|
19
|
+
Spree.cart_remove_item_service
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
end
|
data/config/locales/en.yml
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module FriendlyId
|
|
2
|
+
module HistoryDecorator
|
|
3
|
+
private
|
|
4
|
+
|
|
5
|
+
# This a patch to friendly_id history module.
|
|
6
|
+
# Originally, it removes and re-creates a slug record if it already exists. The issue is that we use `acts_as_paranoid`
|
|
7
|
+
# for slugs so it sets the `deleted_at` timestamp instead of deleting the record. We need to delete the record instead.
|
|
8
|
+
def create_slug
|
|
9
|
+
return unless friendly_id
|
|
10
|
+
return if history_is_up_to_date?
|
|
11
|
+
# Allow reversion back to a previously used slug
|
|
12
|
+
relation = slugs.where(slug: friendly_id)
|
|
13
|
+
if friendly_id_config.uses?(:scoped)
|
|
14
|
+
relation = relation.where(scope: serialized_scope)
|
|
15
|
+
end
|
|
16
|
+
# Use `delete_all` instead of `destroy_all` to avoid the unique index error.
|
|
17
|
+
relation.delete_all unless relation.empty?
|
|
18
|
+
slugs.create! do |record|
|
|
19
|
+
record.slug = friendly_id
|
|
20
|
+
record.scope = serialized_scope if friendly_id_config.uses?(:scoped)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
FriendlyId::History.prepend(FriendlyId::HistoryDecorator)
|
|
@@ -95,6 +95,31 @@ Rails.application.config.after_initialize do
|
|
|
95
95
|
|
|
96
96
|
# Admin partials
|
|
97
97
|
# Spree.admin.partials.product_form << 'spree/admin/products/custom_section'
|
|
98
|
+
|
|
99
|
+
# Role-based permissions
|
|
100
|
+
# Configure which permission sets are assigned to each role
|
|
101
|
+
# More on permission sets: https://spreecommerce.org/docs/developer/customization/permissions
|
|
102
|
+
Spree.permissions.assign(:default, [Spree::PermissionSets::DefaultCustomer])
|
|
103
|
+
Spree.permissions.assign(:admin, [Spree::PermissionSets::SuperUser])
|
|
104
|
+
|
|
105
|
+
# Example: Create a custom role with specific permissions
|
|
106
|
+
# Spree.permissions.assign(:customer_service, [
|
|
107
|
+
# Spree::PermissionSets::DashboardDisplay,
|
|
108
|
+
# Spree::PermissionSets::OrderManagement,
|
|
109
|
+
# Spree::PermissionSets::UserDisplay
|
|
110
|
+
# ])
|
|
111
|
+
#
|
|
112
|
+
# Available permission sets:
|
|
113
|
+
# - Spree::PermissionSets::SuperUser (full admin access)
|
|
114
|
+
# - Spree::PermissionSets::DefaultCustomer (storefront access)
|
|
115
|
+
# - Spree::PermissionSets::DashboardDisplay (view admin dashboard)
|
|
116
|
+
# - Spree::PermissionSets::OrderDisplay / OrderManagement
|
|
117
|
+
# - Spree::PermissionSets::ProductDisplay / ProductManagement
|
|
118
|
+
# - Spree::PermissionSets::UserDisplay / UserManagement
|
|
119
|
+
# - Spree::PermissionSets::StockDisplay / StockManagement
|
|
120
|
+
# - Spree::PermissionSets::PromotionManagement
|
|
121
|
+
# - Spree::PermissionSets::ConfigurationManagement
|
|
122
|
+
# - Spree::PermissionSets::RoleManagement
|
|
98
123
|
end
|
|
99
124
|
|
|
100
125
|
Spree.user_class = <%= (options[:user_class].blank? ? 'Spree::LegacyUser' : options[:user_class]).inspect %>
|