solidus_core 4.3.5 → 4.4.1
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/helpers/spree/base_helper.rb +2 -2
- data/app/mailers/spree/base_mailer.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +1 -1
- data/app/mailers/spree/order_mailer.rb +3 -3
- data/app/mailers/spree/reimbursement_mailer.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
- data/app/models/concerns/spree/display_money.rb +1 -1
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/user_address_book.rb +4 -4
- data/app/models/concerns/spree/user_methods.rb +3 -3
- data/app/models/spree/address.rb +6 -6
- data/app/models/spree/adjustment.rb +13 -66
- data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
- data/app/models/spree/carton.rb +2 -2
- data/app/models/spree/credit_card.rb +6 -6
- data/app/models/spree/deprecated_configurable_class.rb +40 -0
- data/app/models/spree/fulfilment_changer.rb +4 -4
- data/app/models/spree/inventory_unit.rb +2 -2
- data/app/models/spree/line_item.rb +1 -4
- data/app/models/spree/null_promotion_adjuster.rb +13 -0
- data/app/models/spree/null_promotion_advertiser.rb +9 -0
- data/app/models/spree/null_promotion_finder.rb +9 -0
- data/app/models/spree/null_promotion_handler.rb +44 -0
- data/app/models/spree/order.rb +15 -22
- data/app/models/spree/order_cancellations.rb +8 -8
- data/app/models/spree/order_mutex.rb +2 -2
- data/app/models/spree/order_shipping.rb +9 -9
- data/app/models/spree/order_updater.rb +6 -10
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment.rb +2 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_source.rb +5 -1
- data/app/models/spree/permission_set.rb +11 -0
- data/app/models/spree/product.rb +7 -28
- data/app/models/spree/refund.rb +1 -1
- data/app/models/spree/reimbursement.rb +4 -4
- data/app/models/spree/reimbursement_performer.rb +3 -3
- data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
- data/app/models/spree/reimbursement_type/credit.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
- data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
- data/app/models/spree/return_item.rb +9 -9
- data/app/models/spree/role.rb +3 -1
- data/app/models/spree/role_permission.rb +8 -0
- data/app/models/spree/shipment.rb +7 -7
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +1 -1
- data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +4 -11
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
- data/app/models/spree/stock/package.rb +2 -2
- data/app/models/spree/stock/simple_coordinator.rb +1 -1
- data/app/models/spree/stock_location.rb +5 -5
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/store_credit.rb +15 -15
- data/app/models/spree/store_credit_event.rb +3 -3
- data/app/models/spree/tax_calculator/default.rb +2 -2
- data/app/models/spree/tax_calculator/shipping_rate.rb +1 -1
- data/app/models/spree/tax_category.rb +3 -1
- data/app/models/spree/tax_rate.rb +3 -3
- data/app/models/spree/taxonomy.rb +2 -2
- data/app/models/spree/unit_cancel.rb +1 -2
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/models/spree/variant.rb +7 -2
- data/app/models/spree/wallet.rb +2 -2
- data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
- data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
- data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
- data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
- data/config/locales/en.yml +4 -90
- data/db/default/spree/permission_sets.rb +10 -0
- data/db/default/spree/return_reasons.rb +3 -1
- data/db/default/spree/states.rb +1 -1
- data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
- data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
- data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
- data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
- data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
- data/db/seeds.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/update/update_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
- data/lib/spree/app_configuration.rb +53 -84
- data/lib/spree/core/class_constantizer.rb +2 -2
- data/lib/spree/core/controller_helpers/payment_parameters.rb +1 -1
- data/lib/spree/core/engine.rb +1 -0
- data/lib/spree/core/environment/calculators.rb +35 -3
- data/lib/spree/core/environment/promotions.rb +25 -4
- data/lib/spree/core/environment_extension.rb +16 -2
- data/lib/spree/core/importer/order.rb +5 -5
- data/lib/spree/core/importer/product.rb +3 -3
- data/lib/spree/core/nested_class_set.rb +28 -0
- data/lib/spree/core/null_promotion_configuration.rb +84 -0
- data/lib/spree/core/product_filters.rb +1 -1
- data/lib/spree/core/search/variant.rb +2 -2
- data/lib/spree/core/state_machines/order.rb +0 -1
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +2 -6
- data/lib/spree/deprecator.rb +9 -0
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/mailer_previews/carton_preview.rb +1 -1
- data/lib/spree/permission_sets/base.rb +13 -1
- data/lib/spree/permission_sets/configuration_display.rb +10 -0
- data/lib/spree/permission_sets/configuration_management.rb +10 -0
- data/lib/spree/permission_sets/dashboard_display.rb +12 -0
- data/lib/spree/permission_sets/default_customer.rb +11 -1
- data/lib/spree/permission_sets/order_display.rb +10 -0
- data/lib/spree/permission_sets/order_management.rb +10 -0
- data/lib/spree/permission_sets/product_display.rb +10 -0
- data/lib/spree/permission_sets/product_management.rb +10 -0
- data/lib/spree/permission_sets/restricted_stock_display.rb +10 -0
- data/lib/spree/permission_sets/restricted_stock_management.rb +10 -0
- data/lib/spree/permission_sets/stock_display.rb +10 -0
- data/lib/spree/permission_sets/stock_management.rb +10 -0
- data/lib/spree/permission_sets/super_user.rb +10 -0
- data/lib/spree/permission_sets/user_display.rb +10 -0
- data/lib/spree/permission_sets/user_management.rb +10 -0
- data/lib/spree/permission_sets.rb +0 -2
- data/lib/spree/permitted_attributes.rb +2 -2
- data/lib/spree/preferences/store.rb +2 -2
- data/lib/spree/testing_support/capybara_ext.rb +1 -1
- data/lib/spree/testing_support/dummy_ability.rb +7 -0
- data/lib/spree/testing_support/dummy_app/database.yml +2 -2
- data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +2 -2
- data/lib/spree/testing_support/dummy_app.rb +17 -12
- data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -2
- data/lib/spree/testing_support/factories/calculator_factory.rb +1 -5
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +3 -3
- data/lib/spree/testing_support/factories/order_factory.rb +5 -24
- data/lib/spree/testing_support/factories/product_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -1
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +3 -3
- data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
- data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
- data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
- data/lib/tasks/colorado_delivery_fee.rake +2 -2
- data/solidus_core.gemspec +7 -7
- metadata +60 -93
- data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
- data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
- data/app/models/spree/calculator/distributed_amount.rb +0 -33
- data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
- data/app/models/spree/calculator/flexi_rate.rb +0 -22
- data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
- data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
- data/app/models/spree/calculator/tiered_percent.rb +0 -62
- data/app/models/spree/line_item_action.rb +0 -8
- data/app/models/spree/order_promotion.rb +0 -27
- data/app/models/spree/promotion/actions/create_adjustment.rb +0 -81
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -98
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
- data/app/models/spree/promotion/actions/free_shipping.rb +0 -59
- data/app/models/spree/promotion/order_adjustments_recalculator.rb +0 -92
- data/app/models/spree/promotion/rules/first_order.rb +0 -38
- data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
- data/app/models/spree/promotion/rules/item_total.rb +0 -86
- data/app/models/spree/promotion/rules/minimum_quantity.rb +0 -59
- data/app/models/spree/promotion/rules/nth_order.rb +0 -45
- data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
- data/app/models/spree/promotion/rules/option_value.rb +0 -50
- data/app/models/spree/promotion/rules/product.rb +0 -86
- data/app/models/spree/promotion/rules/store.rb +0 -26
- data/app/models/spree/promotion/rules/taxon.rb +0 -91
- data/app/models/spree/promotion/rules/user.rb +0 -34
- data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
- data/app/models/spree/promotion/rules/user_role.rb +0 -45
- data/app/models/spree/promotion.rb +0 -271
- data/app/models/spree/promotion_action.rb +0 -47
- data/app/models/spree/promotion_category.rb +0 -8
- data/app/models/spree/promotion_chooser.rb +0 -34
- data/app/models/spree/promotion_code/batch_builder.rb +0 -64
- data/app/models/spree/promotion_code.rb +0 -54
- data/app/models/spree/promotion_code_batch.rb +0 -27
- data/app/models/spree/promotion_handler/cart.rb +0 -75
- data/app/models/spree/promotion_handler/coupon.rb +0 -123
- data/app/models/spree/promotion_handler/page.rb +0 -26
- data/app/models/spree/promotion_handler/shipping.rb +0 -61
- data/app/models/spree/promotion_rule.rb +0 -55
- data/app/models/spree/promotion_rule_store.rb +0 -10
- data/app/models/spree/promotion_rule_taxon.rb +0 -8
- data/app/models/spree/promotion_rule_user.rb +0 -10
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
- data/bin/rails +0 -13
- data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
- data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
- data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
- data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
- data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +0 -20
- data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +0 -5
- data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +0 -6
- data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +0 -13
- data/db/migrate/20231027084517_add_order_promotions_foreign_key.rb +0 -10
- data/db/migrate/20231031175215_add_promotion_order_promotion_foreign_key.rb +0 -10
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
- data/lib/spree/permission_sets/promotion_display.rb +0 -25
- data/lib/spree/permission_sets/promotion_management.rb +0 -25
- data/lib/spree/ransack_4_1_patch.rb +0 -16
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -7
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -98
@@ -26,6 +26,7 @@ require 'uri'
|
|
26
26
|
|
27
27
|
module Spree
|
28
28
|
class AppConfiguration < Preferences::Configuration
|
29
|
+
include Spree::Core::EnvironmentExtension
|
29
30
|
# Preferences (alphabetized to more easily lookup particular preferences)
|
30
31
|
|
31
32
|
# @!attribute [rw] address_requires_phone
|
@@ -216,10 +217,6 @@ module Spree
|
|
216
217
|
# @return [Integer] Products to show per-page in the frontend (default: +12+)
|
217
218
|
preference :products_per_page, :integer, default: 12
|
218
219
|
|
219
|
-
# @!attribute [rw] promotions_per_page
|
220
|
-
# @return [Integer] Promotions to show per-page in the admin (default: +15+)
|
221
|
-
preference :promotions_per_page, :integer, default: 15
|
222
|
-
|
223
220
|
# @!attribute [rw] require_master_price
|
224
221
|
# @return [Boolean] Require a price on the master variant of a product (default: +true+)
|
225
222
|
preference :require_master_price, :boolean, default: true
|
@@ -324,12 +321,6 @@ module Spree
|
|
324
321
|
# Spree::Variant::VatPriceGenerator.
|
325
322
|
class_name_attribute :variant_vat_prices_generator_class, default: 'Spree::Variant::VatPriceGenerator'
|
326
323
|
|
327
|
-
# promotion_chooser_class allows extensions to provide their own PromotionChooser
|
328
|
-
class_name_attribute :promotion_chooser_class, default: 'Spree::PromotionChooser'
|
329
|
-
|
330
|
-
# promotion_adjuster_class allows extensions to provide their own Promotion Adjuster
|
331
|
-
class_name_attribute :promotion_adjuster_class, default: 'Spree::Promotion::OrderAdjustmentsRecalculator'
|
332
|
-
|
333
324
|
class_name_attribute :allocator_class, default: 'Spree::Stock::Allocator::OnHandFirst'
|
334
325
|
|
335
326
|
class_name_attribute :shipping_rate_sorter_class, default: 'Spree::Stock::ShippingRateSorter'
|
@@ -367,31 +358,6 @@ module Spree
|
|
367
358
|
# Spree::OrderUpdater.
|
368
359
|
class_name_attribute :order_recalculator_class, default: 'Spree::OrderUpdater'
|
369
360
|
|
370
|
-
# Allows providing a different coupon code handler.
|
371
|
-
# @!attribute [rw] coupon_code_handler_class
|
372
|
-
# @see Spree::PromotionHandler::Coupon
|
373
|
-
# @return [Class] an object that conforms to the API of
|
374
|
-
# the standard coupon code handler class
|
375
|
-
# Spree::PromotionHandler::Coupon.
|
376
|
-
class_name_attribute :coupon_code_handler_class, default: 'Spree::PromotionHandler::Coupon'
|
377
|
-
|
378
|
-
# Allows providing a different shipping promotion handler.
|
379
|
-
# @!attribute [rw] shipping_promotion_handler_class
|
380
|
-
# @see Spree::PromotionHandler::Shipping
|
381
|
-
# @return [Class] an object that conforms to the API of
|
382
|
-
# the standard shipping promotion handler class
|
383
|
-
# Spree::PromotionHandler::Coupon.
|
384
|
-
class_name_attribute :shipping_promotion_handler_class, default: 'Spree::PromotionHandler::Shipping'
|
385
|
-
|
386
|
-
# Allows providing your own Mailer for promotion code batch mailer.
|
387
|
-
#
|
388
|
-
# @!attribute [rw] promotion_code_batch_mailer_class
|
389
|
-
# @return [ActionMailer::Base] an object that responds to "promotion_code_batch_finished",
|
390
|
-
# and "promotion_code_batch_errored"
|
391
|
-
# (e.g. an ActionMailer with a "promotion_code_batch_finished" method) with the same
|
392
|
-
# signature as Spree::PromotionCodeBatchMailer.promotion_code_batch_finished.
|
393
|
-
class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::PromotionCodeBatchMailer'
|
394
|
-
|
395
361
|
# Allows providing your own Mailer for reimbursement mailer.
|
396
362
|
#
|
397
363
|
# @!attribute [rw] reimbursement_mailer_class
|
@@ -428,7 +394,7 @@ module Spree
|
|
428
394
|
# @!attribute [rw] order_contents_class
|
429
395
|
# @return [Class] a class with the same public interfaces as
|
430
396
|
# Spree::OrderContents.
|
431
|
-
class_name_attribute :order_contents_class, default: 'Spree::
|
397
|
+
class_name_attribute :order_contents_class, default: 'Spree::SimpleOrderContents'
|
432
398
|
|
433
399
|
# Allows providing your own class for shipping an order.
|
434
400
|
#
|
@@ -585,6 +551,9 @@ module Spree
|
|
585
551
|
# Enumerable of taxons adhering to the present_taxon_class interface
|
586
552
|
class_name_attribute :taxon_attachment_module, default: "Spree::Taxon::ActiveStorageAttachment"
|
587
553
|
|
554
|
+
# Set of classes that can be promotion adjustment sources
|
555
|
+
add_class_set :adjustment_promotion_source_types, default: []
|
556
|
+
|
588
557
|
# Configures the absolute path that contains the Solidus engine
|
589
558
|
# migrations. This will be checked at app boot to confirm that all Solidus
|
590
559
|
# migrations are installed.
|
@@ -619,6 +588,54 @@ module Spree
|
|
619
588
|
@stock_configuration ||= Spree::Core::StockConfiguration.new
|
620
589
|
end
|
621
590
|
|
591
|
+
# Allows providing your own promotion configuration instance
|
592
|
+
# @!attribute [rw] promotions
|
593
|
+
# @return [Spree::Core::NullPromotionConfiguration] an object that conforms to the API of
|
594
|
+
# the example promotion configuration class Spree::Core::NullPromotionConfiguration.
|
595
|
+
attr_writer :promotions
|
596
|
+
def promotions
|
597
|
+
@promotions ||= Spree::Core::NullPromotionConfiguration.new
|
598
|
+
end
|
599
|
+
|
600
|
+
class << self
|
601
|
+
private
|
602
|
+
|
603
|
+
def promotions_deprecation_message(method, new_method_name = nil)
|
604
|
+
"The `Spree::Config.#{method}` preference is deprecated and will be removed in Solidus 5.0. " \
|
605
|
+
"Use `Spree::Config.promotions.#{new_method_name || method}` instead"
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
def promotion_adjuster_class
|
610
|
+
promotions.order_adjuster_class
|
611
|
+
end
|
612
|
+
|
613
|
+
def promotion_adjuster_class=(klass)
|
614
|
+
promotions.order_adjuster_class = klass
|
615
|
+
end
|
616
|
+
deprecate promotion_adjuster_class: promotions_deprecation_message("promotion_adjuster_class", "order_adjuster_class"), deprecator: Spree.deprecator
|
617
|
+
deprecate "promotion_adjuster_class=": promotions_deprecation_message("promotion_adjuster_class=", "order_adjuster_class="), deprecator: Spree.deprecator
|
618
|
+
|
619
|
+
delegate :promotion_chooser_class, :promotion_chooser_class=, to: :promotions
|
620
|
+
deprecate promotion_chooser_class: promotions_deprecation_message("promotion_chooser_class"), deprecator: Spree.deprecator
|
621
|
+
deprecate "promotion_chooser_class=": promotions_deprecation_message("promotion_chooser_class="), deprecator: Spree.deprecator
|
622
|
+
|
623
|
+
delegate :shipping_promotion_handler_class, :shipping_promotion_handler_class=, to: :promotions
|
624
|
+
deprecate shipping_promotion_handler_class: promotions_deprecation_message("shipping_promotion_handler_class"), deprecator: Spree.deprecator
|
625
|
+
deprecate "shipping_promotion_handler_class=": promotions_deprecation_message("shipping_promotion_handler_class="), deprecator: Spree.deprecator
|
626
|
+
|
627
|
+
delegate :coupon_code_handler_class, :coupon_code_handler_class=, to: :promotions
|
628
|
+
deprecate coupon_code_handler_class: promotions_deprecation_message("coupon_code_handler_class"), deprecator: Spree.deprecator
|
629
|
+
deprecate "coupon_code_handler_class=": promotions_deprecation_message("coupon_code_handler_class"), deprecator: Spree.deprecator
|
630
|
+
|
631
|
+
delegate :promotion_code_batch_mailer_class, :promotion_code_batch_mailer_class=, to: :promotions
|
632
|
+
deprecate promotion_code_batch_mailer_class: promotions_deprecation_message("promotion_code_batch_mailer_class"), deprecator: Spree.deprecator
|
633
|
+
deprecate "promotion_code_batch_mailer_class=": promotions_deprecation_message("promotion_code_batch_mailer_class="), deprecator: Spree.deprecator
|
634
|
+
|
635
|
+
delegate :preferred_promotions_per_page, :preferred_promotions_per_page=, to: :promotions
|
636
|
+
deprecate preferred_promotions_per_page: promotions_deprecation_message("preferred_promotions_per_page"), deprecator: Spree.deprecator
|
637
|
+
deprecate "preferred_promotions_per_page=": promotions_deprecation_message("preferred_promotions_per_page="), deprecator: Spree.deprecator
|
638
|
+
|
622
639
|
def roles
|
623
640
|
@roles ||= Spree::RoleConfiguration.new.tap do |roles|
|
624
641
|
roles.assign_permissions :default, ['Spree::PermissionSets::DefaultCustomer']
|
@@ -634,27 +651,6 @@ module Spree
|
|
634
651
|
|
635
652
|
def environment
|
636
653
|
@environment ||= Spree::Core::Environment.new(self).tap do |env|
|
637
|
-
env.calculators.promotion_actions_create_adjustments = %w[
|
638
|
-
Spree::Calculator::FlatPercentItemTotal
|
639
|
-
Spree::Calculator::FlatRate
|
640
|
-
Spree::Calculator::FlexiRate
|
641
|
-
Spree::Calculator::TieredPercent
|
642
|
-
Spree::Calculator::TieredFlatRate
|
643
|
-
]
|
644
|
-
|
645
|
-
env.calculators.promotion_actions_create_item_adjustments = %w[
|
646
|
-
Spree::Calculator::DistributedAmount
|
647
|
-
Spree::Calculator::FlatRate
|
648
|
-
Spree::Calculator::FlexiRate
|
649
|
-
Spree::Calculator::PercentOnLineItem
|
650
|
-
Spree::Calculator::TieredPercent
|
651
|
-
]
|
652
|
-
|
653
|
-
env.calculators.promotion_actions_create_quantity_adjustments = %w[
|
654
|
-
Spree::Calculator::PercentOnLineItem
|
655
|
-
Spree::Calculator::FlatRate
|
656
|
-
]
|
657
|
-
|
658
654
|
env.calculators.shipping_methods = %w[
|
659
655
|
Spree::Calculator::Shipping::FlatPercentItemTotal
|
660
656
|
Spree::Calculator::Shipping::FlatRate
|
@@ -675,33 +671,6 @@ module Spree
|
|
675
671
|
Spree::PaymentMethod::Check
|
676
672
|
]
|
677
673
|
|
678
|
-
env.promotions.rules = %w[
|
679
|
-
Spree::Promotion::Rules::ItemTotal
|
680
|
-
Spree::Promotion::Rules::Product
|
681
|
-
Spree::Promotion::Rules::User
|
682
|
-
Spree::Promotion::Rules::FirstOrder
|
683
|
-
Spree::Promotion::Rules::UserLoggedIn
|
684
|
-
Spree::Promotion::Rules::OneUsePerUser
|
685
|
-
Spree::Promotion::Rules::Taxon
|
686
|
-
Spree::Promotion::Rules::MinimumQuantity
|
687
|
-
Spree::Promotion::Rules::NthOrder
|
688
|
-
Spree::Promotion::Rules::OptionValue
|
689
|
-
Spree::Promotion::Rules::FirstRepeatPurchaseSince
|
690
|
-
Spree::Promotion::Rules::UserRole
|
691
|
-
Spree::Promotion::Rules::Store
|
692
|
-
]
|
693
|
-
|
694
|
-
env.promotions.actions = %w[
|
695
|
-
Spree::Promotion::Actions::CreateAdjustment
|
696
|
-
Spree::Promotion::Actions::CreateItemAdjustments
|
697
|
-
Spree::Promotion::Actions::CreateQuantityAdjustments
|
698
|
-
Spree::Promotion::Actions::FreeShipping
|
699
|
-
]
|
700
|
-
|
701
|
-
env.promotions.shipping_actions = %w[
|
702
|
-
Spree::Promotion::Actions::FreeShipping
|
703
|
-
]
|
704
|
-
|
705
674
|
env.stock_splitters = %w[
|
706
675
|
Spree::Stock::Splitter::ShippingCategory
|
707
676
|
Spree::Stock::Splitter::Backordered
|
data/lib/spree/core/engine.rb
CHANGED
@@ -9,9 +9,41 @@ module Spree
|
|
9
9
|
add_class_set :shipping_methods
|
10
10
|
add_class_set :tax_rates
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
def promotion_actions_create_adjustments
|
13
|
+
promotion_config.calculators["Spree::Promotion::Actions::CreateAdjustment"]
|
14
|
+
end
|
15
|
+
deprecate :promotion_actions_create_adjustments, deprecator: Spree.deprecator
|
16
|
+
|
17
|
+
def promotion_actions_create_adjustments=(value)
|
18
|
+
promotion_config.calculators["Spree::Promotion::Actions::CreateAdjustment"] = value
|
19
|
+
end
|
20
|
+
deprecate :promotion_actions_create_adjustments=, deprecator: Spree.deprecator
|
21
|
+
|
22
|
+
def promotion_actions_create_item_adjustments
|
23
|
+
promotion_config.calculators["Spree::Promotion::Actions::CreateItemAdjustments"]
|
24
|
+
end
|
25
|
+
deprecate :promotion_actions_create_item_adjustments, deprecator: Spree.deprecator
|
26
|
+
|
27
|
+
def promotion_actions_create_item_adjustments=(value)
|
28
|
+
promotion_config.calculators["Spree::Promotion::Actions::CreateItemAdjustments"] = value
|
29
|
+
end
|
30
|
+
deprecate :promotion_actions_create_item_adjustments=, deprecator: Spree.deprecator
|
31
|
+
|
32
|
+
def promotion_actions_create_quantity_adjustments
|
33
|
+
promotion_config.calculators["Spree::Promotion::Actions::CreateQuantityAdjustments"]
|
34
|
+
end
|
35
|
+
deprecate :promotion_actions_create_quantity_adjustments, deprecator: Spree.deprecator
|
36
|
+
|
37
|
+
def promotion_actions_create_quantity_adjustments=(value)
|
38
|
+
promotion_config.calculators["Spree::Promotion::Actions::CreateQuantityAdjustments"] = value
|
39
|
+
end
|
40
|
+
deprecate :promotion_actions_create_quantity_adjustments=, deprecator: Spree.deprecator
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def promotion_config
|
45
|
+
Spree::Config.promotions
|
46
|
+
end
|
15
47
|
end
|
16
48
|
end
|
17
49
|
end
|
@@ -4,11 +4,32 @@ module Spree
|
|
4
4
|
module Core
|
5
5
|
class Environment
|
6
6
|
class Promotions
|
7
|
-
|
7
|
+
class << self
|
8
|
+
private
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def promotions_deprecation_message(method)
|
11
|
+
"The `Rails.application.config.spree.promotions.#{method}` preference is deprecated and will be removed in Solidus 5.0. " \
|
12
|
+
"Use `Spree::Config.promotions.#{method}` instead."
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
delegate :rules, :rules=, to: :promotion_config
|
17
|
+
deprecate rules: promotions_deprecation_message("rules"), deprecator: Spree.deprecator
|
18
|
+
deprecate "rules=": promotions_deprecation_message("rules="), deprecator: Spree.deprecator
|
19
|
+
|
20
|
+
delegate :actions, :actions=, to: :promotion_config
|
21
|
+
deprecate actions: promotions_deprecation_message("actions"), deprecator: Spree.deprecator
|
22
|
+
deprecate "actions=": promotions_deprecation_message("actions="), deprecator: Spree.deprecator
|
23
|
+
|
24
|
+
delegate :shipping_actions, :shipping_actions=, to: :promotion_config
|
25
|
+
deprecate shipping_actions: promotions_deprecation_message("shipping_actions"), deprecator: Spree.deprecator
|
26
|
+
deprecate "shipping_actions=": promotions_deprecation_message("shipping_actions="), deprecator: Spree.deprecator
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def promotion_config
|
31
|
+
Spree::Config.promotions
|
32
|
+
end
|
12
33
|
end
|
13
34
|
end
|
14
35
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spree/core/class_constantizer'
|
4
|
+
require 'spree/core/nested_class_set'
|
4
5
|
|
5
6
|
module Spree
|
6
7
|
module Core
|
@@ -8,10 +9,10 @@ module Spree
|
|
8
9
|
extend ActiveSupport::Concern
|
9
10
|
|
10
11
|
class_methods do
|
11
|
-
def add_class_set(name)
|
12
|
+
def add_class_set(name, default: [])
|
12
13
|
define_method(name) do
|
13
14
|
set = instance_variable_get("@#{name}")
|
14
|
-
set ||= send("#{name}=",
|
15
|
+
set ||= send("#{name}=", default)
|
15
16
|
set
|
16
17
|
end
|
17
18
|
|
@@ -21,6 +22,19 @@ module Spree
|
|
21
22
|
instance_variable_set("@#{name}", set)
|
22
23
|
end
|
23
24
|
end
|
25
|
+
|
26
|
+
def add_nested_class_set(name, default: {})
|
27
|
+
define_method(name) do
|
28
|
+
set = instance_variable_get(:"@#{name}")
|
29
|
+
set ||= send(:"#{name}=", default)
|
30
|
+
set
|
31
|
+
end
|
32
|
+
|
33
|
+
define_method(:"#{name}=") do |hash|
|
34
|
+
set = Spree::Core::NestedClassSet.new(hash)
|
35
|
+
instance_variable_set(:"@#{name}", set)
|
36
|
+
end
|
37
|
+
end
|
24
38
|
end
|
25
39
|
end
|
26
40
|
end
|
@@ -74,7 +74,7 @@ module Spree
|
|
74
74
|
# able to find the line item if line_item.variant_id |= iu.variant_id
|
75
75
|
shipment.inventory_units.new(
|
76
76
|
variant_id: inventory_unit[:variant_id],
|
77
|
-
line_item:
|
77
|
+
line_item:
|
78
78
|
)
|
79
79
|
end
|
80
80
|
|
@@ -91,7 +91,7 @@ module Spree
|
|
91
91
|
shipment.save!
|
92
92
|
|
93
93
|
shipping_method = Spree::ShippingMethod.find_by(name: target[:shipping_method]) || Spree::ShippingMethod.find_by!(admin_name: target[:shipping_method])
|
94
|
-
rate = shipment.shipping_rates.create!(shipping_method
|
94
|
+
rate = shipment.shipping_rates.create!(shipping_method:,
|
95
95
|
cost: target[:cost])
|
96
96
|
shipment.selected_shipping_rate_id = rate.id
|
97
97
|
shipment.update_amounts
|
@@ -129,7 +129,7 @@ module Spree
|
|
129
129
|
return [] unless adjustments
|
130
130
|
adjustments.each do |target|
|
131
131
|
adjustment = order.adjustments.build(
|
132
|
-
order
|
132
|
+
order:,
|
133
133
|
amount: target[:amount].to_d,
|
134
134
|
label: target[:label]
|
135
135
|
)
|
@@ -141,7 +141,7 @@ module Spree
|
|
141
141
|
def self.create_payments_from_params(payments_hash, order)
|
142
142
|
return [] unless payments_hash
|
143
143
|
payments_hash.each do |target|
|
144
|
-
payment = order.payments.build
|
144
|
+
payment = order.payments.build(order:)
|
145
145
|
payment.amount = target[:amount].to_f
|
146
146
|
# Order API should be using state as that's the normal payment field.
|
147
147
|
# spree_wombat serializes payment state as status so imported orders should fall back to status field.
|
@@ -170,7 +170,7 @@ module Spree
|
|
170
170
|
def self.ensure_variant_id_from_params(hash)
|
171
171
|
sku = hash.delete(:sku)
|
172
172
|
unless hash[:variant_id].present?
|
173
|
-
hash[:variant_id] = Spree::Variant.with_prices.find_by!(sku:
|
173
|
+
hash[:variant_id] = Spree::Variant.with_prices.find_by!(sku:).id
|
174
174
|
end
|
175
175
|
hash
|
176
176
|
end
|
@@ -18,7 +18,7 @@ module Spree
|
|
18
18
|
if product.save
|
19
19
|
variants_attrs.each do |variant_attribute|
|
20
20
|
# make sure the product is assigned before the options=
|
21
|
-
product.variants.create({ product:
|
21
|
+
product.variants.create({ product: }.merge(variant_attribute))
|
22
22
|
end
|
23
23
|
|
24
24
|
set_up_options
|
@@ -35,7 +35,7 @@ module Spree
|
|
35
35
|
product.variants.find(variant_attribute['id'].to_i).update(variant_attribute)
|
36
36
|
else
|
37
37
|
# make sure the product is assigned before the options=
|
38
|
-
product.variants.create({ product:
|
38
|
+
product.variants.create({ product: }.merge(variant_attribute))
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -49,7 +49,7 @@ module Spree
|
|
49
49
|
|
50
50
|
def set_up_options
|
51
51
|
options_attrs.each do |name|
|
52
|
-
option_type = Spree::OptionType.where(name:
|
52
|
+
option_type = Spree::OptionType.where(name:).first_or_initialize do |ot|
|
53
53
|
ot.presentation = name
|
54
54
|
ot.save!
|
55
55
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spree/core/class_constantizer"
|
4
|
+
|
5
|
+
module Spree
|
6
|
+
module Core
|
7
|
+
class NestedClassSet
|
8
|
+
attr_reader :klass_sets
|
9
|
+
|
10
|
+
def initialize(hash = {})
|
11
|
+
@klass_sets = hash.map do |key, value|
|
12
|
+
[
|
13
|
+
key.to_s,
|
14
|
+
ClassConstantizer::Set.new(default: value)
|
15
|
+
]
|
16
|
+
end.to_h
|
17
|
+
end
|
18
|
+
|
19
|
+
def [](klass)
|
20
|
+
klass_sets[klass.to_s] || []
|
21
|
+
end
|
22
|
+
|
23
|
+
def []=(klass, klasses)
|
24
|
+
klass_sets[klass.to_s] = ClassConstantizer::Set.new(default: klasses.map(&:to_s))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module Core
|
5
|
+
class NullPromotionConfiguration < Spree::Preferences::Configuration
|
6
|
+
include Spree::Core::EnvironmentExtension
|
7
|
+
|
8
|
+
# order_adjuster_class allows extensions to provide their own Order Adjuster
|
9
|
+
class_name_attribute :order_adjuster_class, default: 'Spree::NullPromotionAdjuster'
|
10
|
+
|
11
|
+
# Allows providing a different coupon code handler.
|
12
|
+
# @!attribute [rw] coupon_code_handler_class
|
13
|
+
# @see Spree::NullPromotionHandler
|
14
|
+
# @return [Class] an object that conforms to the API of
|
15
|
+
# the standard coupon code handler class
|
16
|
+
# Spree::NullPromotionHandler.
|
17
|
+
class_name_attribute :coupon_code_handler_class, default: 'Spree::NullPromotionHandler'
|
18
|
+
|
19
|
+
# Allows providing a different promotion finder.
|
20
|
+
# @!attribute [rw] promotion_finder_class
|
21
|
+
# @see Spree::NullPromotionFinder
|
22
|
+
# @return [Class] an object that conforms to the API of
|
23
|
+
# the standard promotion finder class
|
24
|
+
# Spree::NullPromotionFinder.
|
25
|
+
class_name_attribute :promotion_finder_class, default: 'Spree::NullPromotionFinder'
|
26
|
+
|
27
|
+
# Allows getting and setting `Spree::Config.promotion_code_batch_mailer_class`.
|
28
|
+
# Both will issue a deprecation warning.
|
29
|
+
class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::DeprecatedConfigurableClass'
|
30
|
+
deprecate :promotion_code_batch_mailer_class, :promotion_code_batch_mailer_class=, deprecator: Spree.deprecator
|
31
|
+
|
32
|
+
# Allows getting and setting `Spree::Config.promotion_chooser_class`.
|
33
|
+
# Both will issue a deprecation warning.
|
34
|
+
class_name_attribute :promotion_chooser_class, default: 'Spree::DeprecatedConfigurableClass'
|
35
|
+
deprecate :promotion_chooser_class, :promotion_chooser_class=, deprecator: Spree.deprecator
|
36
|
+
|
37
|
+
# Allows getting and setting rules. Deprecated.
|
38
|
+
# @!attribute [rw] rules
|
39
|
+
# @return [Array] a set of rules
|
40
|
+
add_class_set :rules
|
41
|
+
deprecate :rules, :rules=, deprecator: Spree.deprecator
|
42
|
+
|
43
|
+
# Allows getting and setting actions. Deprecated.
|
44
|
+
# @!attribute [rw] actions
|
45
|
+
# @return [Array] a set of actions
|
46
|
+
add_class_set :actions
|
47
|
+
deprecate :actions, :actions=, deprecator: Spree.deprecator
|
48
|
+
|
49
|
+
# Allows getting and setting shipping actions. Deprecated.
|
50
|
+
# @!attribute [rw] shipping_actions
|
51
|
+
# @return [Array] a set of shipping_actions
|
52
|
+
add_class_set :shipping_actions
|
53
|
+
deprecate :shipping_actions, :shipping_actions=, deprecator: Spree.deprecator
|
54
|
+
|
55
|
+
# Allows getting an setting calculators for actions. Deprecated.
|
56
|
+
# @!attribute [rw] calculators
|
57
|
+
# @return [Spree::Core::NestedClassSet] a set of calculators
|
58
|
+
add_nested_class_set :calculators
|
59
|
+
deprecate :calculators, :calculators=, deprecator: Spree.deprecator
|
60
|
+
|
61
|
+
# Allows providing a different promotion shipping promotion handler.
|
62
|
+
# @!attribute [rw] shipping_promotion_handler_class
|
63
|
+
# @see Spree::NullPromotionHandler
|
64
|
+
# @return [Class] an object that conforms to the API of
|
65
|
+
# the standard promotion finder class
|
66
|
+
# Spree::NullPromotionHandler.
|
67
|
+
class_name_attribute :shipping_promotion_handler_class, default: 'Spree::NullPromotionHandler'
|
68
|
+
deprecate :shipping_promotion_handler_class, deprecator: Spree.deprecator
|
69
|
+
deprecate :shipping_promotion_handler_class=, deprecator: Spree.deprecator
|
70
|
+
|
71
|
+
# Allows providing a different promotion advertiser.
|
72
|
+
# @!attribute [rw] advertiser_class
|
73
|
+
# @see Spree::NullPromotionAdvertiser
|
74
|
+
# @return [Class] an object that conforms to the API of
|
75
|
+
# the standard promotion advertiser class
|
76
|
+
# Spree::NullPromotionAdvertiser.
|
77
|
+
class_name_attribute :advertiser_class, default: 'Spree::NullPromotionAdvertiser'
|
78
|
+
|
79
|
+
# !@attribute [rw] promotion_api_attributes
|
80
|
+
# @return [Array<Symbol>] Attributes to be returned by the API for a promotion
|
81
|
+
preference :promotion_api_attributes, :array, default: []
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -22,7 +22,7 @@ module Spree
|
|
22
22
|
|
23
23
|
def initialize(query_string, scope: Spree::Variant.all)
|
24
24
|
@query_string = query_string
|
25
|
-
@scope = scope
|
25
|
+
@scope = scope.non_template_variants
|
26
26
|
end
|
27
27
|
|
28
28
|
# Searches the variants table using the ransack 'search_terms' defined on the class.
|
@@ -39,7 +39,7 @@ module Spree
|
|
39
39
|
@scope.ransack(search_term_params(word)).result.pluck(:id)
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
@scope.where(id: matches.inject(:&))
|
43
43
|
end
|
44
44
|
|
45
45
|
private
|
@@ -106,7 +106,6 @@ module Spree
|
|
106
106
|
before_transition to: :delivery, do: :ensure_shipping_address
|
107
107
|
before_transition to: :delivery, do: :create_proposed_shipments
|
108
108
|
before_transition to: :delivery, do: :ensure_available_shipping_rates
|
109
|
-
before_transition from: :delivery, do: :apply_shipping_promotions
|
110
109
|
end
|
111
110
|
|
112
111
|
before_transition to: :resumed, do: :ensure_line_item_variants_are_not_deleted
|
@@ -14,7 +14,7 @@ module Spree
|
|
14
14
|
class EmailValidator < ActiveModel::EachValidator
|
15
15
|
def validate_each(record, attribute, value)
|
16
16
|
unless Spree::Config.default_email_regexp.match? value
|
17
|
-
record.errors.add(attribute, :invalid, **{ value:
|
17
|
+
record.errors.add(attribute, :invalid, **{ value: }.merge!(options))
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/core.rb
CHANGED
@@ -11,6 +11,7 @@ require "sprockets/railtie"
|
|
11
11
|
|
12
12
|
require 'active_support/deprecation'
|
13
13
|
require 'spree/deprecated_instance_variable_proxy'
|
14
|
+
require 'spree/deprecator'
|
14
15
|
require 'acts_as_list'
|
15
16
|
require 'awesome_nested_set'
|
16
17
|
require 'cancan'
|
@@ -21,17 +22,11 @@ require 'paperclip'
|
|
21
22
|
require 'ransack'
|
22
23
|
require 'state_machines-activerecord'
|
23
24
|
|
24
|
-
require_relative './ransack_4_1_patch'
|
25
|
-
|
26
25
|
# This is required because ActiveModel::Validations#invalid? conflicts with the
|
27
26
|
# invalid state of a Payment. In the future this should be removed.
|
28
27
|
StateMachines::Machine.ignore_method_conflicts = true
|
29
28
|
|
30
29
|
module Spree
|
31
|
-
def self.deprecator
|
32
|
-
@deprecator ||= ActiveSupport::Deprecation.new('5.0', 'Solidus')
|
33
|
-
end
|
34
|
-
|
35
30
|
autoload :Deprecation, 'spree/deprecation'
|
36
31
|
|
37
32
|
mattr_accessor :user_class, default: 'Spree::LegacyUser'
|
@@ -123,6 +118,7 @@ require 'spree/core/controller_helpers/strong_parameters'
|
|
123
118
|
require 'spree/core/role_configuration'
|
124
119
|
require 'spree/core/state_machines'
|
125
120
|
require 'spree/core/stock_configuration'
|
121
|
+
require 'spree/core/null_promotion_configuration'
|
126
122
|
require 'spree/core/validators/email'
|
127
123
|
require 'spree/permission_sets'
|
128
124
|
require 'spree/user_class_handle'
|
data/lib/spree/i18n.rb
CHANGED
@@ -5,7 +5,7 @@ require 'i18n'
|
|
5
5
|
module Spree
|
6
6
|
def self.i18n_available_locales
|
7
7
|
I18n.available_locales.select do |locale|
|
8
|
-
I18n.t('spree.i18n.this_file_language', locale
|
8
|
+
I18n.t('spree.i18n.this_file_language', locale:, fallback: false, default: nil)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -7,7 +7,7 @@ module Spree
|
|
7
7
|
carton = Carton.joins(:orders).last
|
8
8
|
raise "Your database needs at least one shipped order with a carton to render this preview" unless carton
|
9
9
|
|
10
|
-
Spree::Config.carton_shipped_email_class.shipped_email(order: carton.orders.first, carton:
|
10
|
+
Spree::Config.carton_shipped_email_class.shipped_email(order: carton.orders.first, carton:)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|