spree_core 4.7.3 → 4.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/app/finders/spree/taxons/find.rb +7 -3
  4. data/app/models/concerns/spree/product_scopes.rb +19 -19
  5. data/app/models/concerns/spree/user_address.rb +4 -2
  6. data/app/models/spree/address.rb +1 -20
  7. data/app/models/spree/asset.rb +1 -1
  8. data/app/models/spree/cms_page.rb +1 -1
  9. data/app/models/spree/country.rb +0 -26
  10. data/app/models/spree/credit_card.rb +4 -2
  11. data/app/models/spree/customer_return.rb +1 -1
  12. data/app/models/spree/digital.rb +1 -1
  13. data/app/models/spree/digital_link.rb +1 -1
  14. data/app/models/spree/inventory_unit.rb +1 -1
  15. data/app/models/spree/line_item.rb +1 -1
  16. data/app/models/spree/menu.rb +1 -1
  17. data/app/models/spree/menu_item.rb +1 -1
  18. data/app/models/spree/option_type.rb +3 -3
  19. data/app/models/spree/option_value.rb +3 -3
  20. data/app/models/spree/order.rb +5 -3
  21. data/app/models/spree/payment.rb +1 -1
  22. data/app/models/spree/payment_capture_event.rb +1 -1
  23. data/app/models/spree/price.rb +3 -1
  24. data/app/models/spree/product.rb +24 -13
  25. data/app/models/spree/product_property.rb +4 -2
  26. data/app/models/spree/promotion.rb +1 -1
  27. data/app/models/spree/property.rb +6 -4
  28. data/app/models/spree/prototype.rb +1 -1
  29. data/app/models/spree/refund.rb +1 -1
  30. data/app/models/spree/reimbursement.rb +1 -1
  31. data/app/models/spree/return_authorization.rb +1 -1
  32. data/app/models/spree/return_item.rb +1 -1
  33. data/app/models/spree/shipment.rb +1 -1
  34. data/app/models/spree/shipping_category.rb +1 -1
  35. data/app/models/spree/shipping_method.rb +1 -1
  36. data/app/models/spree/stock_item.rb +2 -2
  37. data/app/models/spree/stock_location.rb +6 -1
  38. data/app/models/spree/stock_movement.rb +1 -1
  39. data/app/models/spree/stock_transfer.rb +1 -1
  40. data/app/models/spree/store.rb +2 -4
  41. data/app/models/spree/store_credit.rb +1 -1
  42. data/app/models/spree/store_favicon_image.rb +11 -2
  43. data/app/models/spree/tax_category.rb +1 -1
  44. data/app/models/spree/tax_rate.rb +1 -1
  45. data/app/models/spree/taxon.rb +20 -4
  46. data/app/models/spree/taxonomy.rb +3 -3
  47. data/app/models/spree/variant.rb +9 -4
  48. data/app/models/spree/wished_item.rb +1 -1
  49. data/app/models/spree/wishlist.rb +1 -1
  50. data/app/models/spree/zone.rb +1 -1
  51. data/app/services/spree/addresses/update.rb +1 -0
  52. data/app/services/spree/seeds/all.rb +15 -13
  53. data/app/services/spree/seeds/stores.rb +2 -2
  54. data/app/sorters/spree/products/sort.rb +1 -1
  55. data/config/initializers/mobility.rb +1 -0
  56. data/config/routes.rb +7 -8
  57. data/db/migrate/20210929090344_create_stock_item_stock_location_id_variant_id_coalesce_deleted_at_unique_index.rb +1 -28
  58. data/db/migrate/20230103144439_create_option_type_translations.rb +0 -1
  59. data/db/migrate/20230103151034_create_option_value_translations.rb +0 -1
  60. data/db/migrate/20230109084253_create_product_property_translations.rb +0 -1
  61. data/db/migrate/20230109105943_create_property_translations.rb +0 -2
  62. data/db/migrate/20230110142344_backfill_friendly_id_slug_locale.rb +2 -8
  63. data/db/migrate/20240303174340_fix_spree_stock_item_unique_index.rb +35 -0
  64. data/db/migrate/20240514105216_add_weight_and_dimension_units_to_spree_variants.rb +6 -0
  65. data/lib/generators/spree/custom_authentication/custom_authentication_generator.rb +23 -0
  66. data/lib/generators/spree/{custom_user → custom_authentication}/templates/authentication_helpers.rb.tt +1 -14
  67. data/lib/generators/spree/custom_user/custom_user_generator.rb +3 -8
  68. data/lib/generators/spree/custom_user/templates/current_user_helpers.rb.tt +15 -0
  69. data/lib/generators/spree/custom_user/templates/migration.rb.tt +2 -2
  70. data/lib/generators/spree/dummy/dummy_generator.rb +1 -6
  71. data/lib/generators/spree/dummy/templates/rails/database.yml +19 -21
  72. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  73. data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -0
  74. data/lib/spree/core/configuration.rb +11 -25
  75. data/lib/spree/core/controller_helpers/locale.rb +5 -1
  76. data/lib/spree/core/engine.rb +4 -1
  77. data/lib/spree/core/preferences/runtime_configuration.rb +43 -0
  78. data/lib/spree/core/product_duplicator.rb +2 -0
  79. data/lib/spree/core/product_filters.rb +9 -2
  80. data/lib/spree/core/runtime_configuration.rb +9 -0
  81. data/lib/spree/core/version.rb +1 -1
  82. data/lib/spree/core/webhooks.rb +13 -0
  83. data/lib/spree/core.rb +7 -0
  84. data/lib/spree/money.rb +38 -5
  85. data/lib/spree/testing_support/authorization_helpers.rb +3 -1
  86. data/lib/spree/testing_support/common_rake.rb +7 -18
  87. data/spree_core.gemspec +7 -7
  88. metadata +47 -50
  89. data/db/migrate/20220715120222_change_product_name_null_to_true.rb +0 -5
  90. data/db/migrate/20220718100948_change_taxon_name_null_to_true.rb +0 -5
  91. data/db/migrate/20220804073928_transfer_data_to_translatable_tables.rb +0 -66
  92. data/db/migrate/20230109094907_transfer_options_data_to_translatable_tables.rb +0 -58
  93. data/db/migrate/20230109110840_transfer_property_data_to_translatable_tables.rb +0 -59
  94. data/db/migrate/20230111122511_transfer_product_and_taxon_data_to_translatable_tables.rb +0 -82
  95. data/db/migrate/20230117120430_allow_null_taxonomy_name.rb +0 -5
  96. data/db/migrate/20230117121303_transfer_taxonomy_data_to_translatable_tables.rb +0 -11
  97. data/db/migrate/20230210142849_transfer_store_data_to_translatable_tables.rb +0 -11
  98. data/db/migrate/20230514162157_add_index_on_locale_and_permalink_to_spree_taxons.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 96a1ab3dd325e2cd0053b0ad881b73ddb153624fd04dba62dd61d4e01ab2aca4
4
- data.tar.gz: 1e947a1bba157dd1df4ba6773d869675da4bffa856f4f1c57f63a4c7b5a592aa
3
+ metadata.gz: fb9614d2e37d1c4c04ad71985912a54e12c579ba21266bbec33d95d383bf03f4
4
+ data.tar.gz: 7cc25cd0d5e067d97c30a9932cde2a1e02cc3826ba37d98ec14aa6ad5cd8f6ac
5
5
  SHA512:
6
- metadata.gz: 6307ed6baf1241414853b53c6528f08448fb465fcdd4603e96f29aaf507fa2188a7f481f4e000b5ec9370e7894c49680ad86ad61d39b1c2e36d7735988c36c95
7
- data.tar.gz: 1d75cd60145ae2fe99f9d9a8e2c13cd7c3b9026847b561c31299ce1bbd0596c7f4e14499e01f658dfe0e8c87e5335ee718d6983213d8ac1d8338a3300836d1f3
6
+ metadata.gz: 8e15d6b8da8503742847b455d084c6fd067fde3fc613605707f6c576a9e169cd9b410e2d6755554f2eef05fb622f0b5dd01533372bacc4b9d2f57407f45dac8e
7
+ data.tar.gz: 02e24962d02e6c6665c9d9a8292b9365353fc08170dd7c0697cf6d0234a4d2b22d0b61e0e6d035c2a4ec3f4c6d6b5eb453ae0a5dffae3739e7382ed83c80645d
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2007-2015, Spree Commerce, Inc. and other contributors
1
+ Copyright (c) 2007-2024, Spree Commerce, Inc., Spark Solutuons Sp. z o.o. and other contributors
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without modification,
@@ -65,9 +65,13 @@ module Spree
65
65
  def by_parent_permalink(taxons)
66
66
  return taxons unless parent_permalink?
67
67
 
68
- taxons.joins(:parent).
69
- join_translation_table(Taxon, 'parents_spree_taxons').
70
- where(["#{Taxon.translation_table_alias}.permalink = ?", parent_permalink])
68
+ if Spree.use_translations?
69
+ taxons.joins(:parent).
70
+ join_translation_table(Taxon, 'parents_spree_taxons').
71
+ where(["#{Taxon.translation_table_alias}.permalink = ?", parent_permalink])
72
+ else
73
+ taxons.joins(:parent).where(parent: { permalink: parent_permalink })
74
+ end
71
75
  end
72
76
 
73
77
  def by_taxonomy(taxons)
@@ -33,15 +33,15 @@ module Spree
33
33
 
34
34
  def self.property_conditions(property)
35
35
  properties_table = Property.table_name
36
- property_translations_table = Property.translation_table_alias
36
+
37
37
  case property
38
38
  when Property then { "#{properties_table}.id" => property.id }
39
39
  when Integer then { "#{properties_table}.id" => property }
40
40
  else
41
41
  if Property.column_for_attribute('id').type == :uuid
42
- ["#{property_translations_table.name} = ? OR #{properties_table.id} = ?", property, property]
42
+ ["#{properties_table}.name = ? OR #{properties_table}.id = ?", property, property]
43
43
  else
44
- { "#{property_translations_table}.name" => property }
44
+ { "#{properties_table}.name" => property }
45
45
  end
46
46
  end
47
47
  end
@@ -127,25 +127,29 @@ module Spree
127
127
 
128
128
  # a scope that finds all products having property specified by name, object or id
129
129
  add_search_scope :with_property do |property|
130
- joins(:properties).join_translation_table(Property).where(property_conditions(property))
130
+ joins(:properties).where(property_conditions(property))
131
131
  end
132
132
 
133
133
  # a simple test for product with a certain property-value pairing
134
134
  # note that it can test for properties with NULL values, but not for absent values
135
135
  add_search_scope :with_property_value do |property, value|
136
- joins(:properties).
137
- join_translation_table(Property).
138
- join_translation_table(ProductProperty).
139
- where("#{ProductProperty.translation_table_alias}.value = ?", value).
140
- where(property_conditions(property))
136
+ if Spree.use_translations?
137
+ joins(:properties).
138
+ join_translation_table(Property).
139
+ join_translation_table(ProductProperty).
140
+ where("#{ProductProperty.translation_table_alias}.value = ?", value).
141
+ where(property_conditions(property))
142
+ else
143
+ joins(:properties).
144
+ where("#{ProductProperty.table_name}.value = ?", value).
145
+ where(property_conditions(property))
146
+ end
141
147
  end
142
148
 
143
149
  add_search_scope :with_property_values do |property_filter_param, property_values|
144
150
  joins(product_properties: :property).
145
- join_translation_table(Property).
146
- join_translation_table(ProductProperty).
147
- where(Property.translation_table_alias => { filter_param: property_filter_param }).
148
- where(ProductProperty.translation_table_alias => { filter_param: property_values.map(&:parameterize) })
151
+ where(Property.table_name => { filter_param: property_filter_param }).
152
+ where(ProductProperty.table_name => { filter_param: property_values.map(&:parameterize) })
149
153
  end
150
154
 
151
155
  add_search_scope :with_option do |option|
@@ -156,9 +160,7 @@ module Spree
156
160
  elsif OptionType.column_for_attribute('id').type == :uuid
157
161
  joins(:option_types).where(spree_option_types: { name: option }).or(Product.joins(:option_types).where(spree_option_types: { id: option }))
158
162
  else
159
- joins(:option_types).
160
- join_translation_table(OptionType).
161
- where(OptionType.translation_table_alias => { name: option })
163
+ joins(:option_types).where(OptionType.table_name => { name: option })
162
164
  end
163
165
  end
164
166
 
@@ -179,9 +181,7 @@ module Spree
179
181
 
180
182
  group("#{Spree::Product.table_name}.id").
181
183
  joins(variants_including_master: :option_values).
182
- join_translation_table(Spree::OptionValue).
183
- where(Spree::OptionValue.translation_table_alias => { name: value },
184
- Spree::OptionValue.table_name => { option_type_id: option_type_id })
184
+ where(Spree::OptionValue.table_name => { name: value, option_type_id: option_type_id })
185
185
  end
186
186
 
187
187
  # Finds all products which have either:
@@ -5,11 +5,13 @@ module Spree
5
5
  included do
6
6
  belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address',
7
7
  optional: true
8
- alias_attribute :billing_address, :bill_address
8
+ alias_method :billing_address, :bill_address
9
+ alias_method :billing_address=, :bill_address=
9
10
 
10
11
  belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address',
11
12
  optional: true
12
- alias_attribute :shipping_address, :ship_address
13
+ alias_method :shipping_address, :ship_address
14
+ alias_method :shipping_address=, :ship_address=
13
15
 
14
16
  accepts_nested_attributes_for :ship_address, :bill_address
15
17
 
@@ -3,7 +3,7 @@ module Spree
3
3
  require 'validates_zipcode'
4
4
 
5
5
  include Spree::Metadata
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
  if defined?(Spree::Security::Addresses)
@@ -68,25 +68,6 @@ module Spree
68
68
  self.whitelisted_ransackable_attributes = ADDRESS_FIELDS
69
69
  self.whitelisted_ransackable_associations = %w[country state user]
70
70
 
71
- def self.build_default
72
- Spree::Deprecation.warn(<<-DEPRECATION, caller)
73
- `Address#build_default` is deprecated and will be removed in Spree 5.0.
74
- Please use standard rails `Address.new(country: current_store.default_country)`
75
- DEPRECATION
76
- new(country: Spree::Country.default)
77
- end
78
-
79
- def self.default(user = nil, kind = 'bill')
80
- Spree::Deprecation.warn(<<-DEPRECATION, caller)
81
- `Address#default` is deprecated and will be removed in Spree 5.0.
82
- DEPRECATION
83
- if user && user_address = user.public_send(:"#{kind}_address")
84
- user_address.clone
85
- else
86
- build_default
87
- end
88
- end
89
-
90
71
  def self.required_fields
91
72
  Spree::Address.validators.map do |v|
92
73
  v.is_a?(ActiveModel::Validations::PresenceValidator) ? v.attributes : []
@@ -2,7 +2,7 @@ module Spree
2
2
  class Asset < Spree::Base
3
3
  include Support::ActiveStorage
4
4
  include Spree::Metadata
5
- if defined?(Spree::Webhooks)
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
 
@@ -3,7 +3,7 @@ module Spree
3
3
  include Spree::SingleStoreResource
4
4
  include Spree::DisplayLink
5
5
 
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
@@ -1,9 +1,5 @@
1
1
  module Spree
2
2
  class Country < Spree::Base
3
- # we need to have this callback before any dependent: :destroy associations
4
- # https://github.com/rails/rails/issues/3458
5
- # before_destroy :ensure_not_default
6
-
7
3
  has_many :addresses, dependent: :restrict_with_error
8
4
  has_many :states,
9
5
  -> { order name: :asc },
@@ -18,17 +14,6 @@ module Spree
18
14
 
19
15
  validates :name, :iso_name, :iso, :iso3, presence: true, uniqueness: { case_sensitive: false, scope: spree_base_uniqueness_scope }
20
16
 
21
- def self.default(store = nil)
22
- Spree::Deprecation.warn(<<-DEPRECATION, caller)
23
- `Country#default` is deprecated and will be removed in Spree 5.0.
24
- Please use `current_store.default_country` instead
25
- DEPRECATION
26
- store ||= Spree::Store.default
27
- country_id = store.default_country_id
28
- default = find_by(id: country_id) if country_id.present?
29
- default || find_by(iso: 'US') || first
30
- end
31
-
32
17
  def self.by_iso(iso)
33
18
  where(['LOWER(iso) = ?', iso.downcase]).or(where(['LOWER(iso3) = ?', iso.downcase])).take
34
19
  end
@@ -45,16 +30,5 @@ module Spree
45
30
  def to_s
46
31
  name
47
32
  end
48
-
49
- private
50
-
51
- def ensure_not_default
52
- Spree::Deprecation.warn('Country#ensure_not_default is deprecated and will be removed in Spree v5')
53
-
54
- if id.eql?(Spree::Config[:default_country_id])
55
- errors.add(:base, Spree.t(:default_country_cannot_be_deleted))
56
- throw(:abort)
57
- end
58
- end
59
33
  end
60
34
  end
@@ -2,7 +2,7 @@ module Spree
2
2
  class CreditCard < Spree::Base
3
3
  include ActiveMerchant::Billing::CreditCardMethods
4
4
  include Spree::Metadata
5
- if defined?(Spree::Webhooks)
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
  if defined?(Spree::Security::CreditCards)
@@ -99,13 +99,15 @@ module Spree
99
99
  def cc_type=(type)
100
100
  self[:cc_type] = case type
101
101
  when 'mastercard', 'maestro' then 'master'
102
- when 'amex' then 'american_express'
102
+ when 'amex' then 'american_express'
103
103
  when 'dinersclub' then 'diners_club'
104
104
  when '' then try_type_from_number
105
105
  else type
106
106
  end
107
107
  end
108
108
 
109
+ alias_method :brand=, :cc_type=
110
+
109
111
  def verification_value=(value)
110
112
  @verification_value = value.to_s.gsub(/\s/, '')
111
113
  end
@@ -3,7 +3,7 @@ module Spree
3
3
  include Spree::Core::NumberGenerator.new(prefix: 'CR', length: 9)
4
4
  include Spree::NumberIdentifier
5
5
  include Spree::Metadata
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
@@ -3,7 +3,7 @@ module Spree
3
3
  belongs_to :variant
4
4
  has_many :digital_links, dependent: :destroy
5
5
 
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
@@ -6,7 +6,7 @@ module Spree
6
6
  has_secure_token
7
7
  end
8
8
 
9
- if defined?(Spree::Webhooks)
9
+ if defined?(Spree::Webhooks::HasWebhooks)
10
10
  include Spree::Webhooks::HasWebhooks
11
11
  end
12
12
  if defined?(Spree::Security::DigitalLinks)
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class InventoryUnit < Spree::Base
3
- if defined?(Spree::Webhooks)
3
+ if defined?(Spree::Webhooks::HasWebhooks)
4
4
  include Spree::Webhooks::HasWebhooks
5
5
  end
6
6
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class LineItem < Spree::Base
3
3
  include Spree::Metadata
4
- if defined?(Spree::Webhooks)
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class Menu < Spree::Base
3
3
  include Spree::SingleStoreResource
4
- if defined?(Spree::Webhooks)
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class MenuItem < Spree::Base
3
3
  include Spree::DisplayLink
4
- if defined?(Spree::Webhooks)
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -3,12 +3,12 @@ module Spree
3
3
  include Spree::UniqueName
4
4
  include Spree::Metadata
5
5
  include Spree::TranslatableResource
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
10
- TRANSLATABLE_FIELDS = %i[name presentation].freeze
11
- translates(*TRANSLATABLE_FIELDS)
10
+ TRANSLATABLE_FIELDS = %i[presentation].freeze
11
+ translates(*TRANSLATABLE_FIELDS, column_fallback: true)
12
12
 
13
13
  acts_as_list
14
14
  auto_strip_attributes :name, :presentation
@@ -2,12 +2,12 @@ module Spree
2
2
  class OptionValue < Spree::Base
3
3
  include Spree::Metadata
4
4
  include Spree::TranslatableResource
5
- if defined?(Spree::Webhooks)
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
 
9
- TRANSLATABLE_FIELDS = %i[name presentation].freeze
10
- translates(*TRANSLATABLE_FIELDS)
9
+ TRANSLATABLE_FIELDS = %i[presentation].freeze
10
+ translates(*TRANSLATABLE_FIELDS, column_fallback: true)
11
11
 
12
12
  belongs_to :option_type, class_name: 'Spree::OptionType', touch: true, inverse_of: :option_values
13
13
 
@@ -25,7 +25,7 @@ module Spree
25
25
  include Spree::SingleStoreResource
26
26
  include Spree::MemoizedData
27
27
  include Spree::Metadata
28
- if defined?(Spree::Webhooks)
28
+ if defined?(Spree::Webhooks::HasWebhooks)
29
29
  include Spree::Webhooks::HasWebhooks
30
30
  end
31
31
  if defined?(Spree::Security::Orders)
@@ -102,11 +102,13 @@ module Spree
102
102
 
103
103
  belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address',
104
104
  optional: true, dependent: :destroy
105
- alias_attribute :billing_address, :bill_address
105
+ alias_method :billing_address, :bill_address
106
+ alias_method :billing_address=, :bill_address=
106
107
 
107
108
  belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address',
108
109
  optional: true, dependent: :destroy
109
- alias_attribute :shipping_address, :ship_address
110
+ alias_method :shipping_address, :ship_address
111
+ alias_method :shipping_address=, :ship_address=
110
112
 
111
113
  belongs_to :store, class_name: 'Spree::Store'
112
114
 
@@ -6,7 +6,7 @@ module Spree
6
6
  include Spree::NumberIdentifier
7
7
  include Spree::NumberAsParam
8
8
  include Spree::Metadata
9
- if defined?(Spree::Webhooks)
9
+ if defined?(Spree::Webhooks::HasWebhooks)
10
10
  include Spree::Webhooks::HasWebhooks
11
11
  end
12
12
  if defined?(Spree::Security::Payments)
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class PaymentCaptureEvent < Spree::Base
3
- if defined?(Spree::Webhooks)
3
+ if defined?(Spree::Webhooks::HasWebhooks)
4
4
  include Spree::Webhooks::HasWebhooks
5
5
  end
6
6
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class Price < Spree::Base
3
3
  include Spree::VatPriceCalculation
4
- if defined?(Spree::Webhooks)
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -46,7 +46,9 @@ module Spree
46
46
  end
47
47
 
48
48
  alias_attribute :price, :amount
49
+ alias_method :price=, :amount=
49
50
  alias_attribute :compare_at_price, :compare_at_amount
51
+ alias_method :compare_at_price=, :compare_at_amount=
50
52
 
51
53
  def price_including_vat_for(price_options)
52
54
  options = price_options.merge(tax_category: variant.tax_category)
@@ -27,7 +27,7 @@ module Spree
27
27
  include Spree::TranslatableResourceSlug
28
28
  include Spree::MemoizedData
29
29
  include Spree::Metadata
30
- if defined?(Spree::Webhooks)
30
+ if defined?(Spree::Webhooks::HasWebhooks)
31
31
  include Spree::Webhooks::HasWebhooks
32
32
  end
33
33
  if defined?(Spree::VendorConcern)
@@ -39,7 +39,7 @@ module Spree
39
39
  purchasable? in_stock? backorderable?]
40
40
 
41
41
  TRANSLATABLE_FIELDS = %i[name description slug meta_description meta_keywords meta_title].freeze
42
- translates(*TRANSLATABLE_FIELDS)
42
+ translates(*TRANSLATABLE_FIELDS, column_fallback: true)
43
43
 
44
44
  self::Translation.class_eval do
45
45
  before_save :set_slug
@@ -332,16 +332,17 @@ module Spree
332
332
  end
333
333
 
334
334
  def property(property_name)
335
- product_properties.joins(:property).
336
- join_translation_table(Property).
337
- find_by(Property.translation_table_alias => { name: property_name }).try(:value)
335
+ product_properties.joins(:property).find_by(Property.table_name => { name: property_name }).try(:value)
338
336
  end
339
337
 
340
338
  def set_property(property_name, property_value, property_presentation = property_name)
341
339
  ApplicationRecord.transaction do
342
340
  # Manual first_or_create to work around Mobility bug
343
341
  property = if Property.where(name: property_name).exists?
344
- Property.where(name: property_name).first
342
+ existing_property = Property.where(name: property_name).first
343
+ existing_property.presentation ||= property_presentation
344
+ existing_property.save
345
+ existing_property
345
346
  else
346
347
  Property.create(name: property_name, presentation: property_presentation)
347
348
  end
@@ -375,16 +376,24 @@ module Spree
375
376
  end
376
377
 
377
378
  def brand
378
- @brand ||= taxons.joins(:taxonomy).
379
- join_translation_table(Taxonomy).
380
- find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_brands_name) })
379
+ @brand ||= if Spree.use_translations?
380
+ taxons.joins(:taxonomy).
381
+ join_translation_table(Taxonomy).
382
+ find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_brands_name) })
383
+ else
384
+ taxons.joins(:taxonomy).find_by(Taxonomy.table_name => { name: Spree.t(:taxonomy_brands_name) })
385
+ end
381
386
  end
382
387
 
383
388
  def category
384
- @category ||= taxons.joins(:taxonomy).
385
- join_translation_table(Taxonomy).
386
- order(depth: :desc).
387
- find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_categories_name) })
389
+ @category ||= if Spree.use_translations?
390
+ taxons.joins(:taxonomy).
391
+ join_translation_table(Taxonomy).
392
+ order(depth: :desc).
393
+ find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_categories_name) })
394
+ else
395
+ taxons.joins(:taxonomy).order(depth: :desc).find_by(Taxonomy.table_name => { name: Spree.t(:taxonomy_categories_name) })
396
+ end
388
397
  end
389
398
 
390
399
  def taxons_for_store(store)
@@ -460,6 +469,8 @@ module Spree
460
469
  # punch slug with date prefix to allow reuse of original
461
470
  return if frozen?
462
471
 
472
+ update_column(:slug, "#{Time.current.to_i}_#{slug}"[0..254])
473
+
463
474
  translations.with_deleted.each do |t|
464
475
  t.update_column :slug, "#{Time.current.to_i}_#{t.slug}"[0..254]
465
476
  end
@@ -3,13 +3,15 @@ module Spree
3
3
  include Spree::FilterParam
4
4
  include Spree::TranslatableResource
5
5
 
6
- TRANSLATABLE_FIELDS = %i[value filter_param].freeze
7
- translates(*TRANSLATABLE_FIELDS)
6
+ TRANSLATABLE_FIELDS = %i[value].freeze
7
+ translates(*TRANSLATABLE_FIELDS, column_fallback: true)
8
8
 
9
9
  self::Translation.class_eval do
10
10
  auto_strip_attributes :value
11
11
  end
12
12
 
13
+ auto_strip_attributes :value
14
+
13
15
  acts_as_list scope: :product
14
16
 
15
17
  with_options inverse_of: :product_properties do
@@ -2,7 +2,7 @@ module Spree
2
2
  class Promotion < Spree::Base
3
3
  include Spree::MultiStoreResource
4
4
  include Spree::Metadata
5
- if defined?(Spree::Webhooks)
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
  if defined?(Spree::Security::Promotions)
@@ -3,17 +3,19 @@ module Spree
3
3
  include Spree::FilterParam
4
4
  include Spree::Metadata
5
5
  include Spree::TranslatableResource
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
10
- TRANSLATABLE_FIELDS = %i[name presentation filter_param].freeze
11
- translates(*TRANSLATABLE_FIELDS)
10
+ TRANSLATABLE_FIELDS = %i[presentation].freeze
11
+ translates(*TRANSLATABLE_FIELDS, column_fallback: true)
12
12
 
13
13
  self::Translation.class_eval do
14
- auto_strip_attributes :name, :presentation
14
+ auto_strip_attributes :presentation
15
15
  end
16
16
 
17
+ auto_strip_attributes :name, :presentation
18
+
17
19
  has_many :property_prototypes, class_name: 'Spree::PropertyPrototype'
18
20
  has_many :prototypes, through: :property_prototypes, class_name: 'Spree::Prototype'
19
21
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class Prototype < Spree::Base
3
3
  include Spree::Metadata
4
- if defined?(Spree::Webhooks)
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class Refund < Spree::Base
3
3
  include Spree::Metadata
4
- if defined?(Spree::Webhooks)
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
  if defined?(Spree::Security::Refunds)
@@ -2,7 +2,7 @@ module Spree
2
2
  class Reimbursement < Spree::Base
3
3
  include Spree::Core::NumberGenerator.new(prefix: 'RI', length: 9)
4
4
  include Spree::NumberIdentifier
5
- if defined?(Spree::Webhooks)
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
 
@@ -2,7 +2,7 @@ module Spree
2
2
  class ReturnAuthorization < Spree::Base
3
3
  include Spree::Core::NumberGenerator.new(prefix: 'RA', length: 9)
4
4
  include Spree::NumberIdentifier
5
- if defined?(Spree::Webhooks)
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
 
@@ -2,7 +2,7 @@ module Spree
2
2
  class ReturnItem < Spree::Base
3
3
  COMPLETED_RECEPTION_STATUSES = %w(received given_to_customer)
4
4
 
5
- if defined?(Spree::Webhooks)
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
 
@@ -6,7 +6,7 @@ module Spree
6
6
  include Spree::NumberIdentifier
7
7
  include Spree::NumberAsParam
8
8
  include Spree::Metadata
9
- if defined?(Spree::Webhooks)
9
+ if defined?(Spree::Webhooks::HasWebhooks)
10
10
  include Spree::Webhooks::HasWebhooks
11
11
  end
12
12
  if defined?(Spree::Security::Shipments)
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class ShippingCategory < Spree::Base
3
3
  include Spree::UniqueName
4
- if defined?(Spree::Webhooks)
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -3,7 +3,7 @@ module Spree
3
3
  acts_as_paranoid
4
4
  include Spree::CalculatedAdjustments
5
5
  include Spree::Metadata
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
  if defined?(Spree::VendorConcern)