solidus_core 3.4.6 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +0 -1
- data/app/helpers/spree/products_helper.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +0 -17
- data/app/models/concerns/spree/default_price.rb +0 -15
- data/app/models/concerns/spree/ransackable_attributes.rb +0 -21
- data/app/models/spree/adjustment.rb +0 -13
- data/app/models/spree/carton.rb +1 -1
- data/app/models/spree/fulfilment_changer.rb +2 -14
- data/app/models/spree/option_value.rb +2 -11
- data/app/models/spree/order.rb +9 -21
- data/app/models/spree/order_updater.rb +0 -29
- data/app/models/spree/payment.rb +5 -37
- data/app/models/spree/product/scopes.rb +0 -5
- data/app/models/spree/product.rb +3 -10
- data/app/models/spree/promotion/rules/item_total.rb +0 -11
- data/app/models/spree/promotion.rb +7 -30
- data/app/models/spree/promotion_rule.rb +0 -5
- data/app/models/spree/taxon.rb +2 -2
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +1 -14
- data/app/models/spree/variant.rb +1 -17
- data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +16 -0
- data/db/migrate/20230321161854_change_column_null_option_values_option_type_id.rb +5 -0
- data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +5 -0
- data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +6 -0
- data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +13 -0
- data/db/migrate/20230425103509_remove_taxon_position.rb +5 -0
- data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +11 -0
- data/lib/generators/solidus/install/app_templates/frontend/none.rb +1 -2
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -3
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +2 -14
- data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +5 -0
- data/lib/generators/solidus/install/install_generator.rb +59 -153
- data/lib/spree/app_configuration.rb +2 -82
- data/lib/spree/bus.rb +0 -11
- data/lib/spree/core/controller_helpers/auth.rb +0 -16
- data/lib/spree/core/engine.rb +11 -31
- data/lib/spree/core/validators/email.rb +0 -4
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +0 -2
- data/lib/spree/migration_helpers.rb +3 -3
- data/lib/spree/preferences/preferable_class_methods.rb +1 -25
- data/lib/spree/testing_support/common_rake.rb +5 -1
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +4 -8
- data/lib/spree/testing_support/dummy_app.rb +1 -6
- data/lib/spree/testing_support/factories/address_factory.rb +0 -7
- data/lib/spree/testing_support/factories/adjustment_factory.rb +0 -11
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/calculator_factory.rb +0 -5
- data/lib/spree/testing_support/factories/carton_factory.rb +0 -8
- data/lib/spree/testing_support/factories/country_factory.rb +0 -5
- data/lib/spree/testing_support/factories/credit_card_factory.rb +0 -5
- data/lib/spree/testing_support/factories/customer_return_factory.rb +0 -9
- data/lib/spree/testing_support/factories/image_factory.rb +0 -5
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +0 -10
- data/lib/spree/testing_support/factories/line_item_factory.rb +0 -8
- data/lib/spree/testing_support/factories/option_type_factory.rb +0 -8
- data/lib/spree/testing_support/factories/option_value_factory.rb +0 -5
- data/lib/spree/testing_support/factories/order_factory.rb +0 -12
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
- data/lib/spree/testing_support/factories/payment_factory.rb +0 -10
- data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
- data/lib/spree/testing_support/factories/price_factory.rb +0 -7
- data/lib/spree/testing_support/factories/product_factory.rb +0 -11
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +0 -8
- data/lib/spree/testing_support/factories/product_property_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -8
- data/lib/spree/testing_support/factories/property_factory.rb +0 -5
- data/lib/spree/testing_support/factories/refund_factory.rb +0 -8
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -7
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -5
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -9
- data/lib/spree/testing_support/factories/return_item_factory.rb +0 -9
- data/lib/spree/testing_support/factories/return_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/role_factory.rb +0 -5
- data/lib/spree/testing_support/factories/shipment_factory.rb +0 -10
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -9
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -8
- data/lib/spree/testing_support/factories/state_factory.rb +0 -8
- data/lib/spree/testing_support/factories/stock_item_factory.rb +0 -8
- data/lib/spree/testing_support/factories/stock_location_factory.rb +0 -9
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +0 -7
- data/lib/spree/testing_support/factories/stock_package_factory.rb +0 -8
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +0 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +0 -9
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_factory.rb +0 -5
- data/lib/spree/testing_support/factories/tax_category_factory.rb +0 -8
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +0 -9
- data/lib/spree/testing_support/factories/taxon_factory.rb +0 -7
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +0 -5
- data/lib/spree/testing_support/factories/user_factory.rb +0 -9
- data/lib/spree/testing_support/factories/variant_factory.rb +0 -10
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +0 -8
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +0 -9
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +0 -8
- data/lib/spree/testing_support/factories/zone_factory.rb +0 -8
- data/lib/spree/testing_support/factory_bot.rb +4 -28
- data/lib/spree/testing_support/sequences.rb +0 -5
- data/solidus_core.gemspec +4 -4
- metadata +48 -76
- data/app/subscribers/spree/mailer_subscriber.rb +0 -29
- data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +0 -54
- data/lib/generators/solidus/install/app_templates/frontend/classic.rb +0 -16
- data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +0 -13
- data/lib/spree/core/controller_helpers/current_host.rb +0 -19
- data/lib/spree/event/adapters/active_support_notifications.rb +0 -67
- data/lib/spree/event/configuration.rb +0 -25
- data/lib/spree/event/subscriber.rb +0 -86
- data/lib/spree/event/subscriber_registry.rb +0 -92
- data/lib/spree/event.rb +0 -119
- data/lib/spree/promotion/match_policies.rb +0 -2
- data/lib/spree/rails_compatibility.rb +0 -106
- data/lib/spree/testing_support/factories.rb +0 -11
- data/lib/spree/testing_support.rb +0 -36
- data/lib/tasks/solidus/check_orders_with_invalid_email.rake +0 -18
- data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 677b2f47102db33dd5b14575dc05d083d724328c5715eb041260fa5eff1888d8
|
4
|
+
data.tar.gz: 80193fd6f6737c2e3d8e5227ef8bbed008bfd98826a26b73be775402615cdd0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3862a797f6ae51be78ec7115d8becfe0d741f79d84e9f8223661054338f0deba010d438b29ba8bce3d50579490be97054feabf171fe4d0ce3dbddf6cf0e22436
|
7
|
+
data.tar.gz: 707096c5ad49198707ea0ed90dc11dd0a8debcc845d2b52e30f819cd7b9a22fb473894710db1eb618fe4b7344ca9776af3619378677f5b0b849fdd647d7be96a
|
data/Rakefile
CHANGED
@@ -68,7 +68,7 @@ module Spree
|
|
68
68
|
# @return [String] a cache invalidation key for products
|
69
69
|
def cache_key_for_products
|
70
70
|
count = @products.count
|
71
|
-
max_updated_at =
|
71
|
+
max_updated_at = (@products.maximum(:updated_at) || Date.today).to_fs(:number)
|
72
72
|
"#{I18n.locale}/#{current_pricing_options.cache_key}/spree/products/all-#{params[:page]}-#{max_updated_at}-#{count}"
|
73
73
|
end
|
74
74
|
end
|
@@ -7,23 +7,6 @@ module Spree
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
include Spree::ActiveStorageAdapter::Normalization
|
9
9
|
|
10
|
-
included do
|
11
|
-
next if Rails.gem_version >= Gem::Version.new('6.1.0.alpha')
|
12
|
-
|
13
|
-
raise <<~MESSAGE
|
14
|
-
Configuration Error: Solidus ActiveStorage attachment adpater requires Rails >= 6.1.0.
|
15
|
-
|
16
|
-
Spree::Config.image_attachment_module preference is set to #{Spree::Config.image_attachment_module}
|
17
|
-
Spree::Config.taxon_attachment_module preference is set to #{Spree::Config.taxon_attachment_module}
|
18
|
-
Rails version is #{Rails.gem_version}
|
19
|
-
|
20
|
-
To solve the problem you can upgrade to a Rails version greater than or equal to 6.1.0
|
21
|
-
or use legacy Paperclip attachment adapter by editing `config/initialiers/spree/rb`:
|
22
|
-
config.image_attachment_module = 'Spree::Image::PaperclipAttachment'
|
23
|
-
config.taxon_attachment_module = 'Spree::Taxon::PaperclipAttachment'
|
24
|
-
MESSAGE
|
25
|
-
end
|
26
|
-
|
27
10
|
class_methods do
|
28
11
|
attr_reader :attachment_name
|
29
12
|
attr_reader :attachment_definition
|
@@ -14,15 +14,6 @@ module Spree
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
# Returns `#prices` prioritized for being considered as default price
|
18
|
-
#
|
19
|
-
# @deprecated
|
20
|
-
# @return [ActiveRecord::Relation<Spree::Price>]
|
21
|
-
def currently_valid_prices
|
22
|
-
prices.currently_valid
|
23
|
-
end
|
24
|
-
deprecate :currently_valid_prices, deprecator: Spree::Deprecation
|
25
|
-
|
26
17
|
# Returns {#default_price} or builds it from {Spree::Variant.default_price_attributes}
|
27
18
|
#
|
28
19
|
# @return [Spree::Price, nil]
|
@@ -32,12 +23,6 @@ module Spree
|
|
32
23
|
prices.build(self.class.default_price_attributes)
|
33
24
|
end
|
34
25
|
|
35
|
-
# @deprecated Use {#default_price_or_build} instead.
|
36
|
-
def find_or_build_default_price
|
37
|
-
default_price_or_build
|
38
|
-
end
|
39
|
-
deprecate find_or_build_default_price: :default_price_or_build, deprecator: Spree::Deprecation
|
40
|
-
|
41
26
|
# Select from {#prices} the one to be considered as the default
|
42
27
|
#
|
43
28
|
# This method works with the in-memory association, so non-persisted prices
|
@@ -6,27 +6,6 @@ module Spree::RansackableAttributes
|
|
6
6
|
class_attribute :allowed_ransackable_associations, default: []
|
7
7
|
class_attribute :allowed_ransackable_attributes, default: []
|
8
8
|
class_attribute :allowed_ransackable_scopes, default: []
|
9
|
-
|
10
|
-
def self.whitelisted_ransackable_associations
|
11
|
-
Spree::Deprecation.deprecation_warning(:whitelisted_ransackable_associations, 'use allowed_ransackable_associations instead')
|
12
|
-
allowed_ransackable_associations
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.whitelisted_ransackable_associations=(new_value)
|
16
|
-
Spree::Deprecation.deprecation_warning(:whitelisted_ransackable_associations=, 'use allowed_ransackable_associations= instead')
|
17
|
-
self.allowed_ransackable_associations = new_value
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.whitelisted_ransackable_attributes
|
21
|
-
Spree::Deprecation.deprecation_warning(:whitelisted_ransackable_attributes, 'use allowed_ransackable_attributes instead')
|
22
|
-
allowed_ransackable_attributes
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.whitelisted_ransackable_attributes=(new_value)
|
26
|
-
Spree::Deprecation.deprecation_warning(:whitelisted_ransackable_attributes=, 'use allowed_ransackable_attributes= instead')
|
27
|
-
self.allowed_ransackable_attributes = new_value
|
28
|
-
end
|
29
|
-
|
30
9
|
class_attribute :default_ransackable_attributes
|
31
10
|
self.default_ransackable_attributes = %w[id]
|
32
11
|
end
|
@@ -51,19 +51,6 @@ module Spree
|
|
51
51
|
extend DisplayMoney
|
52
52
|
money_methods :amount
|
53
53
|
|
54
|
-
# Returns Adjustments of completed Orders.
|
55
|
-
#
|
56
|
-
# @param excluded_orders [Array<Spree::Order>] Orders to exclude from query
|
57
|
-
# @return [ActiveRecord::Relation] Scoped Adjustments
|
58
|
-
def self.in_completed_orders(excluded_orders: [], exclude_canceled: false)
|
59
|
-
result = joins(:order)
|
60
|
-
.merge(Spree::Order.complete)
|
61
|
-
.where.not(spree_orders: { id: excluded_orders })
|
62
|
-
.distinct
|
63
|
-
exclude_canceled ? result.merge(Spree::Order.not_canceled) : result
|
64
|
-
end
|
65
|
-
deprecate :in_completed_orders, "Please don't use this and rather go through Spree::Promotion#discounted_orders"
|
66
|
-
|
67
54
|
def finalize!
|
68
55
|
update!(finalized: true)
|
69
56
|
end
|
data/app/models/spree/carton.rb
CHANGED
@@ -17,31 +17,19 @@ module Spree
|
|
17
17
|
# @attr [Integer] quantity How many units we want to move
|
18
18
|
#
|
19
19
|
class FulfilmentChanger
|
20
|
-
# @note This private constant is only used to deprecate not passing the `track_inventory` argument
|
21
|
-
# on initialization. It will be removed in Solidus 4.0, please do not use it.
|
22
|
-
TRACK_INVENTORY_NOT_PROVIDED = Object.new.freeze
|
23
|
-
private_constant :TRACK_INVENTORY_NOT_PROVIDED
|
24
|
-
|
25
20
|
include ActiveModel::Validations
|
26
21
|
|
27
22
|
attr_accessor :current_shipment, :desired_shipment
|
28
23
|
attr_reader :variant, :quantity, :current_stock_location, :desired_stock_location, :track_inventory
|
29
24
|
|
30
|
-
def initialize(current_shipment:, desired_shipment:, variant:, quantity:, track_inventory:
|
25
|
+
def initialize(current_shipment:, desired_shipment:, variant:, quantity:, track_inventory:)
|
31
26
|
@current_shipment = current_shipment
|
32
27
|
@desired_shipment = desired_shipment
|
33
28
|
@current_stock_location = current_shipment.stock_location
|
34
29
|
@desired_stock_location = desired_shipment.stock_location
|
35
30
|
@variant = variant
|
36
31
|
@quantity = quantity
|
37
|
-
@track_inventory =
|
38
|
-
Spree::Deprecation.warn(
|
39
|
-
"Not passing `track_inventory` to `Spree::FulfilmentChanger` is deprecated." \
|
40
|
-
)
|
41
|
-
true
|
42
|
-
else
|
43
|
-
track_inventory
|
44
|
-
end
|
32
|
+
@track_inventory = track_inventory
|
45
33
|
end
|
46
34
|
|
47
35
|
validates :quantity, numericality: { greater_than: 0 }
|
@@ -2,9 +2,7 @@
|
|
2
2
|
|
3
3
|
module Spree
|
4
4
|
class OptionValue < Spree::Base
|
5
|
-
|
6
|
-
# enforce at the database layer
|
7
|
-
belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values, optional: true
|
5
|
+
belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values
|
8
6
|
acts_as_list scope: :option_type
|
9
7
|
|
10
8
|
has_many :option_values_variants, dependent: :destroy
|
@@ -15,15 +13,8 @@ module Spree
|
|
15
13
|
|
16
14
|
after_save :touch, if: :saved_changes?
|
17
15
|
after_touch :touch_all_variants
|
18
|
-
after_save do
|
19
|
-
Spree::Deprecation.warn <<~MSG if option_type.nil?
|
20
|
-
Having an option_value with no associated option_type will be deprecated
|
21
|
-
on Solidus v4.0
|
22
|
-
MSG
|
23
|
-
end
|
24
16
|
|
25
|
-
|
26
|
-
delegate :name, :presentation, to: :option_type, prefix: :option_type, allow_nil: true
|
17
|
+
delegate :name, :presentation, to: :option_type, prefix: :option_type
|
27
18
|
|
28
19
|
self.allowed_ransackable_attributes = %w[name presentation]
|
29
20
|
|
data/app/models/spree/order.rb
CHANGED
@@ -395,18 +395,6 @@ module Spree
|
|
395
395
|
Spree::CreditCard.where(id: credit_card_ids)
|
396
396
|
end
|
397
397
|
|
398
|
-
# TODO: Remove on Solidus 4.0
|
399
|
-
# @api private
|
400
|
-
def finalize!
|
401
|
-
Spree::Deprecation.warn <<~MSG
|
402
|
-
Calling `Spree::Order#finalize!` is discouraged. Instead, use
|
403
|
-
`Spree::Order#complete!`, which goes through all the needed safety
|
404
|
-
checks before finalizing an order. This method will be removed
|
405
|
-
altogether on Solidus 4.0.
|
406
|
-
MSG
|
407
|
-
finalize
|
408
|
-
end
|
409
|
-
|
410
398
|
def fulfill!
|
411
399
|
shipments.each { |shipment| shipment.update_state if shipment.persisted? }
|
412
400
|
updater.update_shipment_state
|
@@ -534,7 +522,7 @@ module Spree
|
|
534
522
|
state: 'cart',
|
535
523
|
updated_at: Time.current
|
536
524
|
)
|
537
|
-
self.next
|
525
|
+
self.next
|
538
526
|
end
|
539
527
|
|
540
528
|
def refresh_shipment_rates
|
@@ -571,8 +559,7 @@ module Spree
|
|
571
559
|
end
|
572
560
|
|
573
561
|
def has_non_reimbursement_related_refunds?
|
574
|
-
refunds.non_reimbursement.exists?
|
575
|
-
payments.where("source_type = 'Spree::Payment' AND amount < 0 AND state = 'completed'").exists? # how old versions of spree stored refunds
|
562
|
+
refunds.non_reimbursement.exists?
|
576
563
|
end
|
577
564
|
|
578
565
|
def tax_total
|
@@ -779,16 +766,17 @@ module Spree
|
|
779
766
|
self.email = user.email if user
|
780
767
|
end
|
781
768
|
|
782
|
-
# Determine if email is required
|
769
|
+
# Determine if the email is required for this order
|
770
|
+
#
|
771
|
+
# We don't require email for orders in the cart state or address state because those states
|
772
|
+
# precede the entry of an email address.
|
773
|
+
#
|
774
|
+
# @return [Boolean] true if the email is required
|
775
|
+
# @note This method was called require_email before.
|
783
776
|
def email_required?
|
784
777
|
true unless new_record? || ['cart', 'address'].include?(state)
|
785
778
|
end
|
786
779
|
|
787
|
-
def require_email
|
788
|
-
Spree::Deprecation.warn "Use email_required? instead", caller(1)
|
789
|
-
email_required?
|
790
|
-
end
|
791
|
-
|
792
780
|
def ensure_inventory_units
|
793
781
|
if has_checkout_step?("delivery")
|
794
782
|
inventory_validator = Spree::Config.stock.inventory_validator_class.new
|
@@ -162,9 +162,6 @@ module Spree
|
|
162
162
|
order.included_tax_total = all_items.sum(&:included_tax_total) + order_tax_adjustments.select(&:included?).sum(&:amount)
|
163
163
|
order.additional_tax_total = all_items.sum(&:additional_tax_total) + order_tax_adjustments.reject(&:included?).sum(&:amount)
|
164
164
|
|
165
|
-
# TODO: Delete this line in Solidus 4.0, when it is run in `update_promotions`.
|
166
|
-
order.promo_total = all_items.sum(&:promo_total) + adjustments.select(&:eligible?).select(&:promotion?).sum(&:amount)
|
167
|
-
|
168
165
|
update_order_total
|
169
166
|
end
|
170
167
|
|
@@ -200,32 +197,6 @@ module Spree
|
|
200
197
|
Spree::Config.promotion_adjuster_class.new(order).call
|
201
198
|
end
|
202
199
|
|
203
|
-
# DEPRECATED; this functionality is handled in #update_promotions
|
204
|
-
def update_item_promotions
|
205
|
-
[*line_items, *shipments].each do |item|
|
206
|
-
promotion_adjustments = item.adjustments.select(&:promotion?)
|
207
|
-
|
208
|
-
promotion_adjustments.each(&:recalculate)
|
209
|
-
Spree::Config.promotion_chooser_class.new(promotion_adjustments).update
|
210
|
-
|
211
|
-
item.promo_total = promotion_adjustments.select(&:eligible?).sum(&:amount)
|
212
|
-
end
|
213
|
-
end
|
214
|
-
deprecate update_item_promotions: :update_promotions, deprecator: Spree::Deprecation
|
215
|
-
|
216
|
-
# Update and select the best promotion adjustment for the order.
|
217
|
-
# We don't update the order.promo_total yet. Order totals are updated later
|
218
|
-
# in #update_adjustment_total since they include the totals from the order's
|
219
|
-
# line items and/or shipments.
|
220
|
-
#
|
221
|
-
# DEPRECATED; this functionality is handled in #update_promotions
|
222
|
-
def update_order_promotions
|
223
|
-
promotion_adjustments = order.adjustments.select(&:promotion?)
|
224
|
-
promotion_adjustments.each(&:recalculate)
|
225
|
-
Spree::Config.promotion_chooser_class.new(promotion_adjustments).update
|
226
|
-
end
|
227
|
-
deprecate update_order_promotions: :update_promotions, deprecator: Spree::Deprecation
|
228
|
-
|
229
200
|
def update_taxes
|
230
201
|
Spree::Config.tax_adjuster_class.new(order).adjust!
|
231
202
|
|
data/app/models/spree/payment.rb
CHANGED
@@ -16,7 +16,6 @@ module Spree
|
|
16
16
|
belongs_to :source, polymorphic: true, optional: true
|
17
17
|
belongs_to :payment_method, -> { with_discarded }, class_name: 'Spree::PaymentMethod', inverse_of: :payments, optional: true
|
18
18
|
|
19
|
-
has_many :offsets, -> { offset_payment }, class_name: "Spree::Payment", foreign_key: :source_id
|
20
19
|
has_many :log_entries, as: :source
|
21
20
|
has_many :state_changes, as: :stateful
|
22
21
|
has_many :capture_events, class_name: 'Spree::PaymentCaptureEvent'
|
@@ -45,19 +44,6 @@ module Spree
|
|
45
44
|
|
46
45
|
scope :from_credit_card, -> { where(source_type: 'Spree::CreditCard') }
|
47
46
|
scope :with_state, ->(state) { where(state: state.to_s) }
|
48
|
-
# "offset" is reserved by activerecord
|
49
|
-
# TODO: When removing the method we can also:
|
50
|
-
# - Remove the `.offsets` association
|
51
|
-
# - Remove the `#offsets_total` method
|
52
|
-
# - Remove offsets count from the `#credit_allowed` method
|
53
|
-
# - Remove offsets check from `Spree::Order#has_non_reimbursement_related_refunds?
|
54
|
-
def self.offset_payment
|
55
|
-
Spree::Deprecation.warn <<~MSG
|
56
|
-
`Spree::Payment offsets` are deprecated. Use the refund system (`Spree::Refund`) instead.
|
57
|
-
MSG
|
58
|
-
|
59
|
-
where("source_type = 'Spree::Payment' AND amount < 0 AND state = 'completed'")
|
60
|
-
end
|
61
47
|
|
62
48
|
scope :checkout, -> { with_state('checkout') }
|
63
49
|
scope :completed, -> { with_state('completed') }
|
@@ -100,22 +86,11 @@ module Spree
|
|
100
86
|
end || amount
|
101
87
|
end
|
102
88
|
|
103
|
-
# The total amount of the offsets (for old-style refunds) for this payment.
|
104
|
-
#
|
105
|
-
# @return [BigDecimal] the total amount of this payment's offsets
|
106
|
-
def offsets_total
|
107
|
-
offsets.pluck(:amount).sum
|
108
|
-
end
|
109
|
-
|
110
89
|
# The total amount this payment can be credited.
|
111
90
|
#
|
112
|
-
# @return [BigDecimal] the amount of this payment minus
|
113
|
-
# (old-style refunds) and refunds
|
91
|
+
# @return [BigDecimal] the amount of this payment minus refunds
|
114
92
|
def credit_allowed
|
115
|
-
amount - (
|
116
|
-
(self.class.where("source_type = 'Spree::Payment' AND amount < 0 AND state = 'completed' AND source_id = ?", id).sum(:amount)).abs +
|
117
|
-
refunds.sum(:amount)
|
118
|
-
)
|
93
|
+
amount - refunds.sum(:amount)
|
119
94
|
end
|
120
95
|
|
121
96
|
# @return [Boolean] true when this payment can be credited
|
@@ -183,16 +158,9 @@ module Spree
|
|
183
158
|
|
184
159
|
def validate_source
|
185
160
|
if source && !source.valid?
|
186
|
-
|
187
|
-
source.
|
188
|
-
|
189
|
-
errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: 'spree'), "#{field_name} #{error.message}")
|
190
|
-
end
|
191
|
-
else
|
192
|
-
source.errors.each do |field, error|
|
193
|
-
field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{field}")
|
194
|
-
errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: 'spree'), "#{field_name} #{error}")
|
195
|
-
end
|
161
|
+
source.errors.each do |error|
|
162
|
+
field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{error.attribute}")
|
163
|
+
errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: 'spree'), "#{field_name} #{error.message}")
|
196
164
|
end
|
197
165
|
end
|
198
166
|
if errors.any?
|
@@ -214,11 +214,6 @@ module Spree
|
|
214
214
|
where(subquery.arel.exists)
|
215
215
|
end
|
216
216
|
|
217
|
-
def self.with_variant_sku_cont(sku)
|
218
|
-
Spree::Deprecation.warn("use .with_kept_variant_sku_cont instead")
|
219
|
-
with_kept_variant_sku_cont(sku)
|
220
|
-
end
|
221
|
-
|
222
217
|
class << self
|
223
218
|
private
|
224
219
|
|
data/app/models/spree/product.rb
CHANGED
@@ -96,7 +96,6 @@ module Spree
|
|
96
96
|
:display_price,
|
97
97
|
:has_default_price?,
|
98
98
|
:images,
|
99
|
-
:price_for,
|
100
99
|
:price_for_options,
|
101
100
|
:rebuild_vat_prices=,
|
102
101
|
to: :find_or_build_master
|
@@ -134,7 +133,7 @@ module Spree
|
|
134
133
|
|
135
134
|
self.allowed_ransackable_associations = %w[stores variants_including_master master variants]
|
136
135
|
self.allowed_ransackable_attributes = %w[name slug]
|
137
|
-
self.allowed_ransackable_scopes = %i[available with_discarded
|
136
|
+
self.allowed_ransackable_scopes = %i[available with_discarded with_all_variant_sku_cont with_kept_variant_sku_cont]
|
138
137
|
|
139
138
|
# @return [Boolean] true if there are any variants
|
140
139
|
def has_variants?
|
@@ -337,14 +336,8 @@ module Spree
|
|
337
336
|
# If the master is invalid, the Product object will be assigned its errors
|
338
337
|
def validate_master
|
339
338
|
unless master.valid?
|
340
|
-
|
341
|
-
|
342
|
-
errors.add(error.attribute, error.message)
|
343
|
-
end
|
344
|
-
else
|
345
|
-
master.errors.each do |att, error|
|
346
|
-
errors.add(att, error)
|
347
|
-
end
|
339
|
+
master.errors.each do |error|
|
340
|
+
errors.add(error.attribute, error.message)
|
348
341
|
end
|
349
342
|
end
|
350
343
|
end
|
@@ -9,8 +9,6 @@ module Spree
|
|
9
9
|
# To add extra operators please override `self.operators_map` or any other helper method.
|
10
10
|
# To customize the error message you can also override `ineligible_message`.
|
11
11
|
class ItemTotal < PromotionRule
|
12
|
-
include ActiveSupport::Deprecation::DeprecatedConstantAccessor
|
13
|
-
|
14
12
|
preference :amount, :decimal, default: 100.00
|
15
13
|
preference :currency, :string, default: ->{ Spree::Config[:currency] }
|
16
14
|
preference :operator, :string, default: 'gt'
|
@@ -29,15 +27,6 @@ module Spree
|
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
32
|
-
# @deprecated
|
33
|
-
OPERATORS = operators_map.keys.map(&:to_s)
|
34
|
-
deprecate_constant(
|
35
|
-
:OPERATORS,
|
36
|
-
:operators_map,
|
37
|
-
message: "OPERATORS is deprecated! Use `operators_map.keys.map(&:to_s)` instead.",
|
38
|
-
deprecator: Spree::Deprecation,
|
39
|
-
)
|
40
|
-
|
41
30
|
def applicable?(promotable)
|
42
31
|
promotable.is_a?(Spree::Order)
|
43
32
|
end
|
@@ -2,9 +2,6 @@
|
|
2
2
|
|
3
3
|
module Spree
|
4
4
|
class Promotion < Spree::Base
|
5
|
-
|
6
|
-
autoload(:MATCH_POLICIES, "spree/promotion/match_policies")
|
7
|
-
|
8
5
|
UNACTIVATABLE_ORDER_STATES = ["complete", "awaiting_return", "returned"]
|
9
6
|
|
10
7
|
attr_reader :eligibility_errors
|
@@ -167,27 +164,13 @@ module Spree
|
|
167
164
|
specific_rules = rules.select { |rule| rule.applicable?(promotable) }
|
168
165
|
return [] if specific_rules.none?
|
169
166
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
return nil
|
176
|
-
end
|
177
|
-
specific_rules
|
178
|
-
else
|
179
|
-
Spree::Deprecation.warn(
|
180
|
-
<<~WARN
|
181
|
-
Your promotion "#{name}" with ID #{id} has a match_policy of 'any'.
|
182
|
-
This is deprecated, please split the promotion into separate promotions for each rule.
|
183
|
-
WARN
|
184
|
-
)
|
185
|
-
unless specific_rules.any?(&eligible)
|
186
|
-
@eligibility_errors = specific_rules.map(&:eligibility_errors).detect(&:present?)
|
187
|
-
return nil
|
188
|
-
end
|
189
|
-
specific_rules.select(&eligible)
|
167
|
+
# If there are rules for this promotion, but no rules for this
|
168
|
+
# particular promotable, then the promotion is ineligible by default.
|
169
|
+
unless specific_rules.all?(&eligible)
|
170
|
+
@eligibility_errors = specific_rules.map(&:eligibility_errors).detect(&:present?)
|
171
|
+
return nil
|
190
172
|
end
|
173
|
+
specific_rules
|
191
174
|
end
|
192
175
|
|
193
176
|
def products
|
@@ -224,9 +207,7 @@ module Spree
|
|
224
207
|
if rules.blank?
|
225
208
|
true
|
226
209
|
else
|
227
|
-
rules.
|
228
|
-
rule.actionable? line_item
|
229
|
-
end
|
210
|
+
rules.all? { |rule| rule.actionable? line_item }
|
230
211
|
end
|
231
212
|
else
|
232
213
|
false
|
@@ -271,10 +252,6 @@ module Spree
|
|
271
252
|
self[:path] = nil if self[:path].blank?
|
272
253
|
end
|
273
254
|
|
274
|
-
def match_all?
|
275
|
-
match_policy == "all"
|
276
|
-
end
|
277
|
-
|
278
255
|
def apply_automatically_disallowed_with_paths
|
279
256
|
return unless apply_automatically
|
280
257
|
|
@@ -18,11 +18,6 @@ module Spree
|
|
18
18
|
[]
|
19
19
|
end
|
20
20
|
|
21
|
-
def self.for(promotable)
|
22
|
-
all.select { |rule| rule.applicable?(promotable) }
|
23
|
-
end
|
24
|
-
deprecate :for, "Please select promotion rules by their applicable status on the promotable instead."
|
25
|
-
|
26
21
|
def applicable?(_promotable)
|
27
22
|
raise NotImplementedError, "applicable? should be implemented in a sub-class of Spree::PromotionRule"
|
28
23
|
end
|
data/app/models/spree/taxon.rb
CHANGED
@@ -18,11 +18,11 @@ module Spree
|
|
18
18
|
after_update :update_child_permalinks, if: :saved_change_to_permalink?
|
19
19
|
|
20
20
|
validates :name, presence: true
|
21
|
-
validates :name, uniqueness: { scope: :parent_id, message: :must_be_unique_under_same_parent }
|
21
|
+
validates :name, uniqueness: { scope: :parent_id, message: :must_be_unique_under_same_parent }
|
22
22
|
validates :meta_keywords, length: { maximum: 255 }
|
23
23
|
validates :meta_description, length: { maximum: 255 }
|
24
24
|
validates :meta_title, length: { maximum: 255 }
|
25
|
-
validates :taxonomy_id, uniqueness: {
|
25
|
+
validates :taxonomy_id, uniqueness: { message: :can_have_only_one_root }, if: -> { root? }
|
26
26
|
|
27
27
|
after_save :touch_ancestors_and_taxonomy
|
28
28
|
after_touch :touch_ancestors_and_taxonomy
|
@@ -5,7 +5,7 @@ module Spree
|
|
5
5
|
acts_as_list
|
6
6
|
|
7
7
|
validates :name, presence: true
|
8
|
-
validates :name, uniqueness: true
|
8
|
+
validates :name, uniqueness: true
|
9
9
|
|
10
10
|
has_many :taxons, inverse_of: :taxonomy
|
11
11
|
has_one :root, -> { where parent_id: nil }, class_name: "Spree::Taxon", dependent: :destroy
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Spree
|
4
4
|
class Variant < Spree::Base
|
5
5
|
# This class is responsible for selecting a price for a variant given certain pricing options.
|
6
|
-
# A variant can have multiple or even dynamic prices. The `
|
6
|
+
# A variant can have multiple or even dynamic prices. The `price_for_options`
|
7
7
|
# method determines which price applies under the given circumstances.
|
8
8
|
#
|
9
9
|
class PriceSelector
|
@@ -22,19 +22,6 @@ module Spree
|
|
22
22
|
@variant = variant
|
23
23
|
end
|
24
24
|
|
25
|
-
# The variant's price, given a set of pricing options
|
26
|
-
# @param [Spree::Variant::PricingOptions] price_options Pricing Options to abide by
|
27
|
-
# @return [Spree::Money, nil] The most specific price for this set of pricing options.
|
28
|
-
def price_for(price_options)
|
29
|
-
Spree::Deprecation.warn(
|
30
|
-
"price_for is deprecated and will be removed. The price_for method
|
31
|
-
should return a Spree::Price as described. Please use
|
32
|
-
#price_for_options and adjust your frontend code to explicitly call
|
33
|
-
&.money where required"
|
34
|
-
)
|
35
|
-
price_for_options(price_options)&.money
|
36
|
-
end
|
37
|
-
|
38
25
|
# The variant's Spree::Price record, given a set of pricing options
|
39
26
|
# @param [Spree::Variant::PricingOptions] price_options Pricing Options to abide by
|
40
27
|
# @return [Spree::Price, nil] The most specific price for this set of pricing options.
|
data/app/models/spree/variant.rb
CHANGED
@@ -39,6 +39,7 @@ module Spree
|
|
39
39
|
delegate :shipping_category, :shipping_category_id,
|
40
40
|
to: :product, prefix: true
|
41
41
|
delegate :tax_rates, to: :tax_category
|
42
|
+
delegate :price_for_options, to: :price_selector
|
42
43
|
|
43
44
|
has_many :inventory_units, inverse_of: :variant
|
44
45
|
has_many :line_items, inverse_of: :variant
|
@@ -287,12 +288,6 @@ module Spree
|
|
287
288
|
@price_selector ||= Spree::Config.variant_price_selector_class.new(self)
|
288
289
|
end
|
289
290
|
|
290
|
-
# Chooses an appropriate price for the given pricing options
|
291
|
-
# This has been deprecated in favor of #price_for_options.
|
292
|
-
#
|
293
|
-
# @see Spree::Variant::PriceSelector#price_for_options
|
294
|
-
delegate :price_for, to: :price_selector
|
295
|
-
|
296
291
|
# Returns the difference in price from the master variant
|
297
292
|
def price_difference_from_master(pricing_options = Spree::Config.default_pricing_options)
|
298
293
|
master_price = product.master.price_for_options(pricing_options)
|
@@ -306,17 +301,6 @@ module Spree
|
|
306
301
|
diff && diff.zero?
|
307
302
|
end
|
308
303
|
|
309
|
-
def price_for_options(price_options)
|
310
|
-
if price_selector.respond_to?(:price_for_options)
|
311
|
-
price_selector.price_for_options(price_options)
|
312
|
-
else
|
313
|
-
money = price_for(price_options)
|
314
|
-
return if money.nil?
|
315
|
-
|
316
|
-
Spree::Price.new(amount: money.to_d, variant: self, currency: price_options.currency)
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
304
|
# Generates a friendly name and sku string.
|
321
305
|
#
|
322
306
|
# @return [String]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddUniqueIndexToOptionValuesVariants < ActiveRecord::Migration[5.2]
|
4
|
+
def up
|
5
|
+
remove_index :spree_option_values_variants, [:variant_id, :option_value_id]
|
6
|
+
add_index :spree_option_values_variants, [:variant_id, :option_value_id],
|
7
|
+
name: "index_option_values_variants_on_variant_id_and_option_value_id",
|
8
|
+
unique: true
|
9
|
+
end
|
10
|
+
|
11
|
+
def down
|
12
|
+
remove_index :spree_option_values_variants, [:variant_id, :option_value_id]
|
13
|
+
add_index :spree_option_values_variants, [:variant_id, :option_value_id],
|
14
|
+
name: "index_option_values_variants_on_variant_id_and_option_value_id"
|
15
|
+
end
|
16
|
+
end
|