solidus_core 2.11.10 → 3.3.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.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +6 -2
  3. data/app/assets/javascripts/spree.js.erb +0 -51
  4. data/app/controllers/spree/base_controller.rb +1 -1
  5. data/app/helpers/spree/base_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +2 -2
  7. data/app/helpers/spree/store_helper.rb +0 -11
  8. data/app/mailers/spree/carton_mailer.rb +1 -5
  9. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
  10. data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +0 -15
  12. data/app/models/concerns/spree/calculated_adjustments.rb +0 -18
  13. data/app/models/concerns/spree/default_price.rb +39 -10
  14. data/app/models/concerns/spree/ransackable_attributes.rb +24 -4
  15. data/app/models/concerns/spree/soft_deletable.rb +2 -4
  16. data/app/models/concerns/spree/user_address_book.rb +10 -37
  17. data/app/models/concerns/spree/user_methods.rb +38 -13
  18. data/app/models/spree/ability.rb +0 -37
  19. data/app/models/spree/address/name.rb +2 -20
  20. data/app/models/spree/address.rb +8 -186
  21. data/app/models/spree/adjustment.rb +7 -33
  22. data/app/models/spree/base.rb +0 -53
  23. data/app/models/spree/calculator/flat_fee.rb +21 -0
  24. data/app/models/spree/calculator/flexi_rate.rb +0 -5
  25. data/app/models/spree/calculator.rb +0 -7
  26. data/app/models/spree/carton.rb +1 -1
  27. data/app/models/spree/country.rb +2 -7
  28. data/app/models/spree/credit_card.rb +1 -28
  29. data/app/models/spree/customer_return.rb +5 -7
  30. data/app/models/spree/image/active_storage_attachment.rb +2 -7
  31. data/app/models/spree/image/paperclip_attachment.rb +2 -2
  32. data/app/models/spree/image.rb +0 -7
  33. data/app/models/spree/inventory_unit.rb +0 -21
  34. data/app/models/spree/line_item.rb +6 -49
  35. data/app/models/spree/log_entry.rb +74 -1
  36. data/app/models/spree/option_type.rb +1 -1
  37. data/app/models/spree/option_value.rb +10 -1
  38. data/app/models/spree/order/number_generator.rb +7 -1
  39. data/app/models/spree/order.rb +82 -170
  40. data/app/models/spree/order_cancellations.rb +4 -24
  41. data/app/models/spree/order_contents.rb +2 -1
  42. data/app/models/spree/order_inventory.rb +1 -1
  43. data/app/models/spree/order_merger.rb +2 -2
  44. data/app/models/spree/order_promotion.rb +1 -1
  45. data/app/models/spree/order_shipping.rb +6 -9
  46. data/app/models/spree/order_taxation.rb +6 -4
  47. data/app/models/spree/order_updater.rb +17 -16
  48. data/app/models/spree/payment/cancellation.rb +1 -1
  49. data/app/models/spree/payment/processing.rb +58 -55
  50. data/app/models/spree/payment.rb +0 -3
  51. data/app/models/spree/payment_create.rb +1 -13
  52. data/app/models/spree/payment_method/bogus_credit_card.rb +6 -7
  53. data/app/models/spree/payment_method/credit_card.rb +1 -3
  54. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +8 -0
  55. data/app/models/spree/payment_method.rb +26 -110
  56. data/app/models/spree/price.rb +3 -3
  57. data/app/models/spree/product/scopes.rb +24 -33
  58. data/app/models/spree/product.rb +15 -42
  59. data/app/models/spree/product_property.rb +1 -1
  60. data/app/models/spree/promotion/actions/create_adjustment.rb +4 -3
  61. data/app/models/spree/promotion/actions/create_item_adjustments.rb +5 -9
  62. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -3
  63. data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
  64. data/app/models/spree/promotion/order_adjustments_recalculator.rb +92 -0
  65. data/app/models/spree/promotion/rules/item_total.rb +50 -6
  66. data/app/models/spree/promotion/rules/product.rb +20 -8
  67. data/app/models/spree/promotion/rules/store.rb +4 -0
  68. data/app/models/spree/promotion/rules/taxon.rb +6 -15
  69. data/app/models/spree/promotion/rules/user.rb +4 -0
  70. data/app/models/spree/promotion.rb +39 -32
  71. data/app/models/spree/promotion_action.rb +6 -9
  72. data/app/models/spree/promotion_code/batch_builder.rb +0 -14
  73. data/app/models/spree/promotion_code.rb +11 -7
  74. data/app/models/spree/promotion_handler/cart.rb +26 -6
  75. data/app/models/spree/promotion_rule.rb +5 -0
  76. data/app/models/spree/property.rb +1 -1
  77. data/app/models/spree/refund.rb +8 -52
  78. data/app/models/spree/reimbursement.rb +5 -43
  79. data/app/models/spree/reimbursement_performer.rb +2 -8
  80. data/app/models/spree/reimbursement_type/credit.rb +1 -4
  81. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -2
  82. data/app/models/spree/reimbursement_type/store_credit.rb +1 -4
  83. data/app/models/spree/return_authorization.rb +2 -5
  84. data/app/models/spree/return_item.rb +4 -24
  85. data/app/models/spree/shipment.rb +3 -56
  86. data/app/models/spree/shipping_method.rb +0 -25
  87. data/app/models/spree/shipping_rate.rb +0 -2
  88. data/app/models/spree/shipping_rate_tax.rb +1 -1
  89. data/app/models/spree/state.rb +1 -5
  90. data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
  91. data/app/models/spree/stock/availability.rb +11 -3
  92. data/app/models/spree/stock/quantifier.rb +12 -8
  93. data/app/models/spree/stock/simple_coordinator.rb +8 -26
  94. data/app/models/spree/stock/splitter/base.rb +2 -7
  95. data/app/models/spree/stock_item.rb +2 -8
  96. data/app/models/spree/stock_location.rb +2 -2
  97. data/app/models/spree/stock_movement.rb +2 -2
  98. data/app/models/spree/store.rb +0 -12
  99. data/app/models/spree/store_credit.rb +14 -1
  100. data/app/models/spree/store_credit_category.rb +0 -32
  101. data/app/models/spree/store_credit_prioritizer.rb +17 -0
  102. data/app/models/spree/tax/item_tax.rb +3 -2
  103. data/app/models/spree/tax/order_tax.rb +3 -1
  104. data/app/models/spree/tax/tax_helpers.rb +2 -2
  105. data/app/models/spree/tax/tax_location.rb +4 -7
  106. data/app/models/spree/tax_calculator/default.rb +31 -0
  107. data/app/models/spree/tax_calculator/shipping_rate.rb +2 -13
  108. data/app/models/spree/tax_rate.rb +9 -27
  109. data/app/models/spree/taxon/active_storage_attachment.rb +2 -7
  110. data/app/models/spree/taxon/paperclip_attachment.rb +3 -8
  111. data/app/models/spree/taxon.rb +1 -12
  112. data/app/models/spree/taxonomy.rb +1 -1
  113. data/app/models/spree/user_address.rb +0 -5
  114. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
  115. data/app/models/spree/variant/price_selector.rb +34 -4
  116. data/app/models/spree/variant.rb +52 -66
  117. data/app/models/spree/zone.rb +1 -1
  118. data/app/subscribers/spree/mailer_subscriber.rb +4 -0
  119. data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
  120. data/config/i18n-tasks.yml +134 -0
  121. data/config/locales/en.yml +406 -263
  122. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +1 -1
  123. data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
  124. data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
  125. data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +20 -0
  126. data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
  127. data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
  128. data/db/seeds.rb +4 -1
  129. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +21 -0
  130. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
  131. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
  132. data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
  133. data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +54 -0
  134. data/lib/generators/solidus/install/app_templates/frontend/classic.rb +16 -0
  135. data/lib/generators/solidus/install/app_templates/frontend/none.rb +2 -0
  136. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +3 -0
  137. data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +13 -0
  138. data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
  139. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +10 -0
  140. data/lib/generators/solidus/install/install_generator.rb +247 -149
  141. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -60
  142. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
  143. data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
  144. data/lib/generators/solidus/update/update_generator.rb +112 -0
  145. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
  146. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
  147. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
  148. data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
  149. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +0 -1
  150. data/lib/generators/spree/dummy/templates/rails/database.yml +81 -39
  151. data/lib/generators/spree/dummy/templates/rails/storage.yml +3 -0
  152. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  153. data/lib/spree/app_configuration.rb +134 -64
  154. data/lib/spree/bus.rb +20 -0
  155. data/lib/spree/core/class_constantizer.rb +2 -0
  156. data/lib/spree/core/controller_helpers/auth.rb +10 -15
  157. data/lib/spree/core/controller_helpers/current_host.rb +5 -3
  158. data/lib/spree/core/controller_helpers/order.rb +12 -32
  159. data/lib/spree/core/controller_helpers/payment_parameters.rb +0 -54
  160. data/lib/spree/core/controller_helpers/pricing.rb +0 -8
  161. data/lib/spree/core/controller_helpers/search.rb +1 -1
  162. data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -4
  163. data/lib/spree/core/engine.rb +54 -50
  164. data/lib/spree/core/environment_extension.rb +0 -9
  165. data/lib/spree/core/product_filters.rb +1 -41
  166. data/lib/spree/core/role_configuration.rb +0 -14
  167. data/lib/spree/core/search/base.rb +18 -35
  168. data/lib/spree/core/state_machines/order.rb +2 -2
  169. data/lib/spree/core/state_machines.rb +2 -11
  170. data/lib/spree/core/stock_configuration.rb +18 -0
  171. data/lib/spree/core/validators/email.rb +5 -3
  172. data/lib/spree/core/version.rb +5 -1
  173. data/lib/spree/core/versioned_value.rb +75 -0
  174. data/lib/spree/core.rb +40 -11
  175. data/lib/spree/deprecation.rb +1 -1
  176. data/lib/spree/event/configuration.rb +0 -5
  177. data/lib/spree/event/subscriber.rb +0 -18
  178. data/lib/spree/event/subscriber_registry.rb +7 -7
  179. data/lib/spree/event.rb +1 -32
  180. data/lib/spree/i18n.rb +0 -22
  181. data/lib/spree/migrations.rb +13 -11
  182. data/lib/spree/money.rb +3 -18
  183. data/lib/spree/permission_sets/default_customer.rb +8 -1
  184. data/lib/spree/permitted_attributes.rb +17 -59
  185. data/lib/spree/preferences/configuration.rb +84 -0
  186. data/lib/spree/preferences/preferable.rb +13 -0
  187. data/lib/spree/preferences/preferable_class_methods.rb +37 -4
  188. data/lib/spree/preferences/preference_differentiator.rb +29 -0
  189. data/lib/spree/preferences/static_model_preferences.rb +25 -10
  190. data/lib/spree/rails_compatibility.rb +106 -0
  191. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  192. data/lib/spree/testing_support/bus_helpers.rb +101 -0
  193. data/lib/spree/testing_support/capybara_ext.rb +0 -30
  194. data/lib/spree/testing_support/common_rake.rb +71 -23
  195. data/lib/spree/testing_support/controller_requests.rb +0 -82
  196. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
  197. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +1 -1
  198. data/lib/spree/testing_support/dummy_app/database.yml +42 -22
  199. data/lib/spree/testing_support/dummy_app/migrations.rb +0 -3
  200. data/lib/spree/testing_support/dummy_app.rb +47 -34
  201. data/lib/spree/testing_support/factories/address_factory.rb +9 -6
  202. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  203. data/lib/spree/testing_support/factories/country_factory.rb +1 -2
  204. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
  205. data/lib/spree/testing_support/factories/order_factory.rb +8 -5
  206. data/lib/spree/testing_support/factories/product_factory.rb +4 -1
  207. data/lib/spree/testing_support/factories/promotion_factory.rb +28 -14
  208. data/lib/spree/testing_support/factories/refund_factory.rb +0 -1
  209. data/lib/spree/testing_support/factories/state_factory.rb +8 -2
  210. data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -4
  211. data/lib/spree/testing_support/factories/user_factory.rb +6 -0
  212. data/lib/spree/testing_support/factory_bot.rb +2 -2
  213. data/lib/spree/testing_support/order_walkthrough.rb +6 -8
  214. data/lib/spree/testing_support/preferences.rb +0 -25
  215. data/lib/spree/testing_support/silence_deprecations.rb +9 -0
  216. data/lib/tasks/colorado_delivery_fee.rake +28 -0
  217. data/lib/tasks/payment_method.rake +29 -0
  218. data/lib/tasks/solidus/check_orders_with_invalid_email.rake +18 -0
  219. data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
  220. data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +33 -0
  221. data/solidus_core.gemspec +14 -7
  222. metadata +127 -78
  223. data/app/mailers/spree/test_mailer.rb +0 -13
  224. data/app/models/concerns/spree/user_payment_source.rb +0 -26
  225. data/app/models/spree/calculator/free_shipping.rb +0 -22
  226. data/app/models/spree/calculator/percent_per_item.rb +0 -51
  227. data/app/models/spree/calculator/price_sack.rb +0 -28
  228. data/app/models/spree/gateway/bogus.rb +0 -13
  229. data/app/models/spree/gateway/bogus_simple.rb +0 -13
  230. data/app/models/spree/gateway.rb +0 -14
  231. data/app/models/spree/order/checkout.rb +0 -244
  232. data/app/models/spree/order_capturing.rb +0 -50
  233. data/app/models/spree/promotion_handler/free_shipping.rb +0 -9
  234. data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
  235. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
  236. data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
  237. data/lib/generators/spree/install/install_generator.rb +0 -15
  238. data/lib/solidus/migrations/rename_gateways.rb +0 -41
  239. data/lib/spree/core/current_store.rb +0 -24
  240. data/lib/spree/paranoia_deprecations.rb +0 -41
  241. data/lib/spree/promo/environment.rb +0 -12
  242. data/lib/spree/testing_support/bar_ability.rb +0 -19
  243. data/lib/tasks/core.rake +0 -104
  244. data/lib/tasks/email.rake +0 -12
  245. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -119
  246. data/lib/tasks/migrations/migrate_address_names.rake +0 -158
  247. data/lib/tasks/migrations/migrate_default_billing_addresses_to_address_book.rake +0 -26
  248. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +0 -22
  249. data/lib/tasks/migrations/migrate_user_addresses.rake +0 -34
  250. data/lib/tasks/migrations/rename_gateways.rake +0 -23
  251. data/lib/tasks/order_capturing.rake +0 -27
  252. data/lib/tasks/upgrade.rake +0 -13
@@ -10,20 +10,6 @@ class ::Spree::PromotionCode::BatchBuilder
10
10
  sample_characters: ('a'..'z').to_a + (2..9).to_a.map(&:to_s)
11
11
  }
12
12
 
13
- [:random_code_length, :batch_size, :sample_characters].each do |attr|
14
- define_singleton_method(attr) do
15
- Spree::Deprecation.warn "#{name}.#{attr} is deprecated. Use #{name}::DEFAULT_OPTIONS[:#{attr}] instead"
16
- DEFAULT_OPTIONS[attr]
17
- end
18
-
19
- define_singleton_method(:"#{attr}=") do |val|
20
- Spree::Deprecation.warn "#{name}.#{attr}= is deprecated. Use #{name}::DEFAULT_OPTIONS[:#{attr}]= instead"
21
- DEFAULT_OPTIONS[attr] = val
22
- end
23
-
24
- delegate attr, to: self
25
- end
26
-
27
13
  def initialize(promotion_code_batch, options = {})
28
14
  @promotion_code_batch = promotion_code_batch
29
15
  options.assert_valid_keys(*DEFAULT_OPTIONS.keys)
@@ -5,13 +5,13 @@ class Spree::PromotionCode < Spree::Base
5
5
  belongs_to :promotion_code_batch, class_name: "Spree::PromotionCodeBatch", optional: true
6
6
  has_many :adjustments
7
7
 
8
+ before_validation :normalize_code
9
+
8
10
  validates :value, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
9
11
  validates :promotion, presence: true
10
12
  validate :promotion_not_apply_automatically, on: :create
11
13
 
12
- before_save :normalize_code
13
-
14
- self.whitelisted_ransackable_attributes = ['value']
14
+ self.allowed_ransackable_attributes = ['value']
15
15
 
16
16
  # Whether the promotion code has exceeded its usage restrictions
17
17
  #
@@ -28,10 +28,14 @@ class Spree::PromotionCode < Spree::Base
28
28
  # @param excluded_orders [Array<Spree::Order>] Orders to exclude from usage count
29
29
  # @return [Integer] usage count
30
30
  def usage_count(excluded_orders: [])
31
- adjustments.
32
- eligible.
33
- in_completed_orders(excluded_orders: excluded_orders).
34
- count(:order_id)
31
+ promotion.
32
+ discounted_orders.
33
+ complete.
34
+ where.not(spree_orders: { state: :canceled }).
35
+ joins(:order_promotions).
36
+ where(spree_orders_promotions: { promotion_code_id: self.id }).
37
+ where.not(id: excluded_orders.map(&:id)).
38
+ count
35
39
  end
36
40
 
37
41
  def usage_limit
@@ -33,23 +33,43 @@ module Spree
33
33
  private
34
34
 
35
35
  def promotions
36
- connected_order_promotions | sale_promotions
36
+ promos = connected_order_promotions | sale_promotions
37
+ promos.flat_map(&:promotion_actions).group_by(&:preload_relations).each do |preload_relations, actions|
38
+ preload(records: actions, associations: preload_relations)
39
+ end
40
+ promos.flat_map(&:promotion_rules).group_by(&:preload_relations).each do |preload_relations, rules|
41
+ preload(records: rules, associations: preload_relations)
42
+ end
43
+ promos
44
+ end
45
+
46
+ def preload(records:, associations:)
47
+ if Rails::VERSION::MAJOR >= 7
48
+ ActiveRecord::Associations::Preloader.new(records: records, associations: associations).call
49
+ else
50
+ ActiveRecord::Associations::Preloader.new.preload(records, associations)
51
+ end
37
52
  end
38
53
 
39
54
  def connected_order_promotions
40
- Spree::Promotion.active.includes(:promotion_rules).
41
- joins(:order_promotions).
42
- where(spree_orders_promotions: { order_id: order.id }).readonly(false).to_a
55
+ order.promotions.active.includes(promotion_includes)
43
56
  end
44
57
 
45
58
  def sale_promotions
46
- Spree::Promotion.where(apply_automatically: true).active.includes(:promotion_rules)
59
+ Spree::Promotion.where(apply_automatically: true).active.includes(promotion_includes)
47
60
  end
48
61
 
49
62
  def promotion_code(promotion)
50
- order_promotion = Spree::OrderPromotion.where(order: order, promotion: promotion).first
63
+ order_promotion = order.order_promotions.detect { |op| op.promotion_id == promotion.id }
51
64
  order_promotion.present? ? order_promotion.promotion_code : nil
52
65
  end
66
+
67
+ def promotion_includes
68
+ [
69
+ :promotion_rules,
70
+ :promotion_actions,
71
+ ]
72
+ end
53
73
  end
54
74
  end
55
75
  end
@@ -14,9 +14,14 @@ module Spree
14
14
  validates :promotion, presence: true
15
15
  validate :unique_per_promotion, on: :create
16
16
 
17
+ def preload_relations
18
+ []
19
+ end
20
+
17
21
  def self.for(promotable)
18
22
  all.select { |rule| rule.applicable?(promotable) }
19
23
  end
24
+ deprecate :for, "Please select promotion rules by their applicable status on the promotable instead."
20
25
 
21
26
  def applicable?(_promotable)
22
27
  raise NotImplementedError, "applicable? should be implemented in a sub-class of Spree::PromotionRule"
@@ -11,7 +11,7 @@ module Spree
11
11
 
12
12
  after_touch :touch_all_products
13
13
 
14
- self.whitelisted_ransackable_attributes = %w[name]
14
+ self.allowed_ransackable_attributes = %w[name]
15
15
 
16
16
  private
17
17
 
@@ -15,11 +15,6 @@ module Spree
15
15
  validate :amount_is_less_than_or_equal_to_allowed_amount, on: :create
16
16
 
17
17
  attr_reader :perform_response
18
- attr_accessor :perform_after_create
19
-
20
- after_create :set_perform_after_create_default
21
- after_create :perform!
22
- after_create :clear_perform_after_create
23
18
 
24
19
  scope :non_reimbursement, -> { where(reimbursement_id: nil) }
25
20
 
@@ -36,6 +31,14 @@ module Spree
36
31
  end
37
32
  end
38
33
 
34
+ # Sets this price's amount to a new value, parsing it if the new value is
35
+ # a string.
36
+ #
37
+ # @param price [String, #to_d] a new amount
38
+ def amount=(price)
39
+ self[:amount] = Spree::LocalizedNumber.parse(price)
40
+ end
41
+
39
42
  def description
40
43
  payment.payment_method.name
41
44
  end
@@ -45,29 +48,14 @@ module Spree
45
48
  # Attempts to perform the refund,
46
49
  # raises an error if the refund fails.
47
50
  def perform!
48
- return true if perform_after_create == false
49
51
  return true if transaction_id.present?
50
52
 
51
- # This is needed otherwise set_perform_after_create_default callback
52
- # will print a deprecation warning when save! creates a record
53
- self.perform_after_create = false unless persisted?
54
-
55
53
  credit_cents = money.cents
56
54
 
57
55
  @perform_response = process!(credit_cents)
58
-
59
- @response = Spree::DeprecatedInstanceVariableProxy.new(
60
- self,
61
- :perform_response,
62
- :@response,
63
- Spree::Deprecation,
64
- "Please, do not use Spree::Refund @response anymore, use Spree::Refund#perform_response"
65
- )
66
-
67
56
  log_entries.build(details: perform_response.to_yaml)
68
57
 
69
58
  self.transaction_id = perform_response.authorization
70
-
71
59
  save!
72
60
 
73
61
  update_order
@@ -75,38 +63,6 @@ module Spree
75
63
 
76
64
  private
77
65
 
78
- # This callback takes care of setting the behavior that determines if it is needed
79
- # to execute the perform! callback after_create.
80
- # Existing code that creates refund without explicitely passing
81
- #
82
- # perform_after_create: false
83
- #
84
- # as attribute will still call perform! but a deprecation warning is emitted in order
85
- # to ask users to change their code with the new supported behavior.
86
- def set_perform_after_create_default
87
- return true if perform_after_create == false
88
-
89
- Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
90
- From Solidus v3.0 onwards, #perform! will need to be explicitly called when creating new
91
- refunds. Please, change your code from:
92
-
93
- Spree::Refund.create(your: attributes)
94
-
95
- to:
96
-
97
- Spree::Refund.create(your: attributes, perform_after_create: false).perform!
98
- WARN
99
-
100
- self.perform_after_create = true
101
- end
102
-
103
- # This is needed to avoid that when you create a refund with perform_after_create = false,
104
- # it's not possibile to call perform! on that instance, since the value of this attribute
105
- # will remain false until a reload of the instance.
106
- def clear_perform_after_create
107
- @perform_after_create = nil
108
- end
109
-
110
66
  # return an activemerchant response object if successful or else raise an error
111
67
  def process!(credit_cents)
112
68
  response = if payment.payment_method.payment_profiles_supported?
@@ -51,14 +51,6 @@ module Spree
51
51
  class_attribute :reimbursement_performer
52
52
  self.reimbursement_performer = ReimbursementPerformer
53
53
 
54
- # These are called if the call to "reimburse!" succeeds.
55
- class_attribute :reimbursement_success_hooks
56
- self.reimbursement_success_hooks = []
57
-
58
- # These are called if the call to "reimburse!" fails.
59
- class_attribute :reimbursement_failure_hooks
60
- self.reimbursement_failure_hooks = []
61
-
62
54
  include ::Spree::Config.state_machines.reimbursement
63
55
 
64
56
  class << self
@@ -91,10 +83,7 @@ module Spree
91
83
  total - paid_amount
92
84
  end
93
85
 
94
- def perform!(created_by: nil)
95
- unless created_by
96
- Spree::Deprecation.warn("Calling #perform on #{self} without created_by is deprecated")
97
- end
86
+ def perform!(created_by:)
98
87
  reimbursement_tax_calculator.call(self)
99
88
  reload
100
89
  update!(total: calculated_total)
@@ -103,22 +92,10 @@ module Spree
103
92
 
104
93
  if unpaid_amount_within_tolerance?
105
94
  reimbursed!
106
- Spree::Event.fire 'reimbursement_reimbursed', reimbursement: self
107
- if reimbursement_success_hooks.any?
108
- Spree::Deprecation.warn \
109
- "reimbursement_success_hooks are deprecated. Please remove them " \
110
- "and subscribe to `reimbursement_reimbursed` event instead", caller(1)
111
- end
112
- reimbursement_success_hooks.each { |hook| hook.call self }
95
+ Spree::Bus.publish :reimbursement_reimbursed, reimbursement: self
113
96
  else
114
97
  errored!
115
- Spree::Event.fire 'reimbursement_errored', reimbursement: self
116
- if reimbursement_failure_hooks.any?
117
- Spree::Deprecation.warn \
118
- "reimbursement_failure_hooks are deprecated. Please remove them " \
119
- "and subscribe to `reimbursement_errored` event instead", caller(1)
120
- end
121
- reimbursement_failure_hooks.each { |hook| hook.call self }
98
+ Spree::Bus.publish :reimbursement_errored, reimbursement: self
122
99
  end
123
100
 
124
101
  if errored?
@@ -126,10 +103,7 @@ module Spree
126
103
  end
127
104
  end
128
105
 
129
- def simulate(created_by: nil)
130
- unless created_by
131
- Spree::Deprecation.warn("Calling #simulate on #{self} without created_by is deprecated")
132
- end
106
+ def simulate(created_by:)
133
107
  reimbursement_simulator_tax_calculator.call(self)
134
108
  reload
135
109
  update!(total: calculated_total)
@@ -154,10 +128,7 @@ module Spree
154
128
  # @api public
155
129
  # @param [Spree.user_class] created_by the user that is performing this action
156
130
  # @return [void]
157
- def return_all(created_by: nil)
158
- unless created_by
159
- Spree::Deprecation.warn("Calling #return_all on #{self} without created_by is deprecated")
160
- end
131
+ def return_all(created_by:)
161
132
  return_items.each(&:accept!)
162
133
  save!
163
134
  perform!(created_by: created_by)
@@ -168,15 +139,6 @@ module Spree
168
139
  #
169
140
  # @return [Spree::StoreCreditCategory]
170
141
  def store_credit_category
171
- if Spree::Config.use_legacy_store_credit_reimbursement_category_name
172
- Spree::Deprecation.warn("Using the legacy reimbursement_category_name is deprecated. "\
173
- "Set Spree::Config.use_legacy_store_credit_reimbursement_category_name to false to use "\
174
- "the new version instead.", caller)
175
-
176
- name = Spree::StoreCreditCategory.reimbursement_category_name
177
- return Spree::StoreCreditCategory.find_by(name: name) || Spree::StoreCreditCategory.first
178
- end
179
-
180
142
  Spree::StoreCreditCategory.find_by(name: Spree::StoreCreditCategory::REIMBURSEMENT)
181
143
  end
182
144
 
@@ -11,18 +11,12 @@ module Spree
11
11
  # - #description
12
12
  # - #display_amount
13
13
  # so they can be displayed in the Admin UI appropriately.
14
- def simulate(reimbursement, created_by: nil)
15
- unless created_by
16
- Spree::Deprecation.warn("Calling #simulate on #{self} without created_by is deprecated")
17
- end
14
+ def simulate(reimbursement, created_by:)
18
15
  execute(reimbursement, true, created_by: created_by)
19
16
  end
20
17
 
21
18
  # Actually perform the reimbursement
22
- def perform(reimbursement, created_by: nil)
23
- unless created_by
24
- Spree::Deprecation.warn("Calling #perform on #{self} without created_by is deprecated")
25
- end
19
+ def perform(reimbursement, created_by:)
26
20
  execute(reimbursement, false, created_by: created_by)
27
21
  end
28
22
 
@@ -5,10 +5,7 @@ module Spree
5
5
  extend Spree::ReimbursementType::ReimbursementHelpers
6
6
 
7
7
  class << self
8
- def reimburse(reimbursement, return_items, simulate, created_by: nil)
9
- unless created_by
10
- Spree::Deprecation.warn("Calling #reimburse on #{self} without created_by is deprecated")
11
- end
8
+ def reimburse(reimbursement, return_items, simulate, created_by:)
12
9
  unpaid_amount = return_items.sum(&:total).round(2, :down)
13
10
  reimbursement_list, _unpaid_amount = create_credits(reimbursement, unpaid_amount, simulate, created_by: created_by)
14
11
  reimbursement_list
@@ -34,8 +34,7 @@ module Spree
34
34
  refund = reimbursement.refunds.build({
35
35
  payment: payment,
36
36
  amount: amount,
37
- reason: Spree::RefundReason.return_processing_reason,
38
- perform_after_create: false
37
+ reason: Spree::RefundReason.return_processing_reason
39
38
  })
40
39
 
41
40
  if simulate
@@ -4,10 +4,7 @@ class Spree::ReimbursementType::StoreCredit < Spree::ReimbursementType
4
4
  extend Spree::ReimbursementType::ReimbursementHelpers
5
5
 
6
6
  class << self
7
- def reimburse(reimbursement, return_items, simulate, created_by: nil)
8
- unless created_by
9
- Spree::Deprecation.warn("Calling #reimburse on #{self} without created_by is deprecated")
10
- end
7
+ def reimburse(reimbursement, return_items, simulate, created_by:)
11
8
  unpaid_amount = return_items.sum(&:total).to_d.round(2, :down)
12
9
  payments = store_credit_payments(reimbursement)
13
10
  reimbursement_list = []
@@ -25,16 +25,13 @@ module Spree
25
25
  include ::Spree::Config.state_machines.return_authorization
26
26
 
27
27
  extend DisplayMoney
28
- money_methods :pre_tax_total, :amount, :total_excluding_vat
29
- deprecate display_pre_tax_total: :display_total_excluding_vat, deprecator: Spree::Deprecation
28
+ money_methods :amount, :total_excluding_vat
30
29
 
31
- self.whitelisted_ransackable_attributes = ['memo']
30
+ self.allowed_ransackable_attributes = ['memo']
32
31
 
33
32
  def total_excluding_vat
34
33
  return_items.sum(&:total_excluding_vat)
35
34
  end
36
- alias pre_tax_total total_excluding_vat
37
- deprecate pre_tax_total: :total_excluding_vat, deprecator: Spree::Deprecation
38
35
 
39
36
  def amount
40
37
  return_items.sum(:amount)
@@ -30,7 +30,7 @@ module Spree
30
30
  self.refund_amount_calculator = Calculator::Returns::DefaultRefundAmount
31
31
 
32
32
  belongs_to :return_authorization, inverse_of: :return_items, optional: true
33
- belongs_to :inventory_unit, inverse_of: :return_items, optional: true
33
+ belongs_to :inventory_unit, inverse_of: :return_items
34
34
  belongs_to :exchange_variant, class_name: 'Spree::Variant', optional: true
35
35
  belongs_to :exchange_inventory_unit, class_name: 'Spree::InventoryUnit', inverse_of: :original_return_item, optional: true
36
36
  belongs_to :customer_return, inverse_of: :return_items, optional: true
@@ -42,7 +42,6 @@ module Spree
42
42
  validate :eligible_exchange_variant
43
43
  validate :belongs_to_same_customer_order
44
44
  validate :validate_acceptance_status_for_reimbursement
45
- validates :inventory_unit, presence: true
46
45
  validate :validate_no_other_completed_return_items
47
46
 
48
47
  after_create :cancel_others, unless: :cancelled?
@@ -81,8 +80,7 @@ module Spree
81
80
  include ::Spree::Config.state_machines.return_item_acceptance
82
81
 
83
82
  extend DisplayMoney
84
- money_methods :pre_tax_amount, :amount, :total, :total_excluding_vat
85
- deprecate display_pre_tax_amount: :display_total_excluding_vat, deprecator: Spree::Deprecation
83
+ money_methods :amount, :total, :total_excluding_vat
86
84
 
87
85
  # @return [Boolean] true when this retur item is in a complete reception
88
86
  # state
@@ -90,14 +88,6 @@ module Spree
90
88
  COMPLETED_RECEPTION_STATUSES.map(&:to_s).include?(reception_status.to_s)
91
89
  end
92
90
 
93
- def skip_customer_return_processing=(value)
94
- @skip_customer_return_processing = value
95
- Deprecation.warn \
96
- 'From Solidus v2.11 onwards, #skip_customer_return_processing does ' \
97
- 'nothing, and #process_inventory_unit! will restore calling ' \
98
- 'customer_return#process_return!', caller(1)
99
- end
100
-
101
91
  # @param inventory_unit [Spree::InventoryUnit] the inventory for which we
102
92
  # want a return item
103
93
  # @return [Spree::ReturnItem] a valid return item for the given inventory
@@ -134,8 +124,6 @@ module Spree
134
124
  def total_excluding_vat
135
125
  amount - included_tax_total
136
126
  end
137
- alias pre_tax_amount total_excluding_vat
138
- deprecate pre_tax_amount: :total_excluding_vat, deprecator: Spree::Deprecation
139
127
 
140
128
  # @note This uses the exchange_variant_engine configured on the class.
141
129
  # @param stock_locations [Array<Spree::StockLocation>] the stock locations to check
@@ -206,13 +194,6 @@ module Spree
206
194
  customer_return.stock_location.restock(inventory_unit.variant, 1, customer_return)
207
195
  end
208
196
 
209
- unless @skip_customer_return_processing.nil?
210
- Deprecation.warn \
211
- 'From Solidus v2.11 onwards, #skip_customer_return_processing does ' \
212
- 'nothing, and #process_inventory_unit! will restore calling ' \
213
- 'customer_return#process_return!'
214
- end
215
-
216
197
  customer_return&.process_return!
217
198
  end
218
199
 
@@ -272,10 +253,9 @@ module Spree
272
253
  }).where.not(id: id).first
273
254
 
274
255
  if other_return_item && (new_record? || COMPLETED_RECEPTION_STATUSES.include?(reception_status.to_sym))
275
- errors.add(:inventory_unit, :other_completed_return_item_exists, {
256
+ errors.add(:inventory_unit, :other_completed_return_item_exists,
276
257
  inventory_unit_id: inventory_unit_id,
277
- return_item_id: other_return_item.id
278
- })
258
+ return_item_id: other_return_item.id)
279
259
  end
280
260
  end
281
261
 
@@ -41,8 +41,8 @@ module Spree
41
41
 
42
42
  include ::Spree::Config.state_machines.shipment
43
43
 
44
- self.whitelisted_ransackable_associations = ['order']
45
- self.whitelisted_ransackable_attributes = ['number']
44
+ self.allowed_ransackable_associations = ['order']
45
+ self.allowed_ransackable_attributes = ['number']
46
46
 
47
47
  delegate :tax_category, :tax_category_id, to: :selected_shipping_rate, allow_nil: true
48
48
 
@@ -62,18 +62,11 @@ module Spree
62
62
 
63
63
  extend DisplayMoney
64
64
  money_methods(
65
- :cost, :amount, :discounted_cost, :final_price, :item_cost,
65
+ :cost, :amount, :item_cost,
66
66
  :total, :total_before_tax,
67
67
  )
68
- deprecate display_discounted_cost: :display_total_before_tax, deprecator: Spree::Deprecation
69
- deprecate display_final_price: :display_total, deprecator: Spree::Deprecation
70
68
  alias_attribute :amount, :cost
71
69
 
72
- def add_shipping_method(shipping_method, selected = false)
73
- shipping_rates.create(shipping_method: shipping_method, selected: selected, cost: cost)
74
- end
75
- deprecate :add_shipping_method, deprecator: Spree::Deprecation
76
-
77
70
  def after_cancel
78
71
  manifest.each { |item| manifest_restock(item) }
79
72
  end
@@ -90,20 +83,11 @@ module Spree
90
83
  order ? order.currency : Spree::Config[:currency]
91
84
  end
92
85
 
93
- def discounted_cost
94
- cost + promo_total
95
- end
96
- deprecate discounted_cost: :total_before_tax, deprecator: Spree::Deprecation
97
- alias discounted_amount discounted_cost
98
- deprecate discounted_amount: :total_before_tax, deprecator: Spree::Deprecation
99
-
100
86
  # @return [BigDecimal] the amount of this shipment, taking into
101
87
  # consideration all its adjustments.
102
88
  def total
103
89
  cost + adjustment_total
104
90
  end
105
- alias final_price total
106
- deprecate final_price: :total, deprecator: Spree::Deprecation
107
91
 
108
92
  # @return [BigDecimal] the amount of this item, taking into consideration
109
93
  # all non-tax adjustments.
@@ -116,14 +100,10 @@ module Spree
116
100
  def total_excluding_vat
117
101
  total_before_tax - included_tax_total
118
102
  end
119
- alias pre_tax_amount total_excluding_vat
120
- deprecate pre_tax_amount: :total_excluding_vat, deprecator: Spree::Deprecation
121
103
 
122
104
  def total_with_items
123
105
  total + item_cost
124
106
  end
125
- alias final_price_with_items total_with_items
126
- deprecate final_price_with_items: :total_with_items, deprecator: Spree::Deprecation
127
107
 
128
108
  def editable_by?(_user)
129
109
  !shipped?
@@ -320,43 +300,10 @@ module Spree
320
300
  end
321
301
  end
322
302
 
323
- def update!(order_or_attrs)
324
- if order_or_attrs.is_a?(Spree::Order)
325
- Spree::Deprecation.warn "Calling Shipment#update! with an order to update the shipments state is deprecated. Please use Shipment#update_state instead."
326
- if order_or_attrs.object_id != order.object_id
327
- Spree::Deprecation.warn "Additionally, update! is being passed an instance of order which isn't the same object as the shipment's order association"
328
- end
329
- update_state
330
- else
331
- super
332
- end
333
- end
334
-
335
- def transfer_to_location(variant, quantity, stock_location)
336
- Spree::Deprecation.warn("Please use the Spree::FulfilmentChanger class instead of Spree::Shipment#transfer_to_location", caller)
337
- new_shipment = order.shipments.create!(stock_location: stock_location)
338
- transfer_to_shipment(variant, quantity, new_shipment)
339
- end
340
-
341
- def transfer_to_shipment(variant, quantity, shipment_to_transfer_to)
342
- Spree::Deprecation.warn("Please use the Spree::FulfilmentChanger class instead of Spree::Shipment#transfer_to_location", caller)
343
- Spree::FulfilmentChanger.new(
344
- current_shipment: self,
345
- desired_shipment: shipment_to_transfer_to,
346
- variant: variant,
347
- quantity: quantity
348
- ).run!
349
- end
350
-
351
303
  def requires_shipment?
352
304
  !stock_location || stock_location.fulfillable?
353
305
  end
354
306
 
355
- def address
356
- Spree::Deprecation.warn("Calling Shipment#address is deprecated. Use Order#ship_address instead", caller)
357
- order.ship_address if order
358
- end
359
-
360
307
  private
361
308
 
362
309
  def finalize_pending_inventory_units
@@ -6,11 +6,6 @@ module Spree
6
6
  class ShippingMethod < Spree::Base
7
7
  include Spree::SoftDeletable
8
8
  include Spree::CalculatedAdjustments
9
- DISPLAY = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(
10
- [:both, :front_end, :back_end],
11
- "Spree::ShippingMethod::DISPLAY is deprecated",
12
- Spree::Deprecation
13
- )
14
9
 
15
10
  has_many :shipping_method_categories, dependent: :destroy
16
11
  has_many :shipping_categories, through: :shipping_method_categories
@@ -95,26 +90,6 @@ module Spree
95
90
  tracking_url.gsub(/:tracking/, ERB::Util.url_encode(tracking)) # :url_encode exists in 1.8.7 through 2.1.0
96
91
  end
97
92
 
98
- def display_on
99
- if available_to_users?
100
- "both"
101
- else
102
- "back_end"
103
- end
104
- end
105
- deprecate display_on: :available_to_users?, deprecator: Spree::Deprecation
106
-
107
- def display_on=(value)
108
- self.available_to_users = (value != "back_end")
109
- end
110
- deprecate 'display_on=': :available_to_users=, deprecator: Spree::Deprecation
111
-
112
- # Some shipping methods are only meant to be set via backend
113
- def frontend?
114
- available_to_users?
115
- end
116
- deprecate frontend?: :available_to_users?, deprecator: Spree::Deprecation
117
-
118
93
  private
119
94
 
120
95
  def at_least_one_shipping_category
@@ -19,8 +19,6 @@ module Spree
19
19
  delegate :code, to: :shipping_method, prefix: true
20
20
  alias_attribute :amount, :cost
21
21
 
22
- alias_method :discounted_amount, :amount
23
- deprecate discounted_amount: :total_before_tax, deprecator: Spree::Deprecation
24
22
  alias_method :total_before_tax, :amount
25
23
 
26
24
  extend DisplayMoney
@@ -5,7 +5,7 @@ module Spree
5
5
  # @attr [Spree::ShippingRate] shipping_rate The shipping rate to be taxed
6
6
  # @attr [Spree::TaxRate] tax_rate The tax rate used to calculate the tax amount
7
7
  # @since 1.3.0
8
- # @see Spree::Tax::ShippingRateTaxer
8
+ # @see Spree::Stock::Estimator
9
9
  class ShippingRateTax < Spree::Base
10
10
  belongs_to :shipping_rate, class_name: "Spree::ShippingRate", optional: true
11
11
  belongs_to :tax_rate, class_name: "Spree::TaxRate", optional: true
@@ -14,12 +14,8 @@ module Spree
14
14
  )
15
15
  )
16
16
  end
17
- class << self
18
- alias_method :find_all_by_name_or_abbr, :with_name_or_abbr
19
- deprecate find_all_by_name_or_abbr: :with_name_or_abbr, deprecator: Spree::Deprecation
20
- end
21
17
 
22
- self.whitelisted_ransackable_attributes = %w[name]
18
+ self.allowed_ransackable_attributes = %w[name]
23
19
 
24
20
  # table of { country.id => [ state.id , state.name ] }, arrays sorted by name
25
21
  # blank is added elsewhere, if needed
@@ -7,11 +7,11 @@ module Spree
7
7
  def allocate_inventory(desired)
8
8
  # Allocate any available on hand inventory
9
9
  on_hand = allocate_on_hand(desired)
10
- desired -= on_hand.values.sum if on_hand.present?
10
+ desired -= on_hand.values.reduce(&:+) if on_hand.present?
11
11
 
12
12
  # Allocate remaining desired inventory from backorders
13
13
  backordered = allocate_backordered(desired)
14
- desired -= backordered.values.sum if backordered.present?
14
+ desired -= backordered.values.reduce(&:+) if backordered.present?
15
15
 
16
16
  # If all works at this point desired must be empty
17
17
  [on_hand, backordered, desired]