spree_core 5.3.5 → 5.4.0.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/finders/spree/orders/find_complete.rb +33 -2
- data/app/finders/spree/stores/find_default.rb +17 -0
- data/app/finders/spree/variants/visible_finder.rb +1 -0
- data/app/helpers/spree/addresses_helper.rb +1 -2
- data/app/helpers/spree/base_helper.rb +5 -4
- data/app/jobs/spree/api_key_touch_job.rb +9 -0
- data/app/jobs/spree/images/save_from_url_job.rb +23 -47
- data/app/models/concerns/spree/admin_user_methods.rb +32 -0
- data/app/models/concerns/spree/number_as_param.rb +5 -3
- data/app/models/concerns/spree/prefixed_id.rb +82 -0
- data/app/models/concerns/spree/product_scopes.rb +33 -18
- data/app/models/concerns/spree/publishable.rb +47 -47
- data/app/models/concerns/spree/{multi_store_resource.rb → store_scoped_resource.rb} +1 -10
- data/app/models/concerns/spree/stores/markets.rb +124 -0
- data/app/models/concerns/spree/user_methods.rb +7 -7
- data/app/models/concerns/spree/user_payment_source.rb +2 -0
- data/app/models/concerns/spree/user_roles.rb +1 -0
- data/app/models/spree/ability.rb +13 -0
- data/app/models/spree/address.rb +30 -0
- data/app/models/spree/adjustment.rb +2 -0
- data/app/models/spree/api_key.rb +47 -0
- data/app/models/spree/asset.rb +2 -0
- data/app/models/spree/authentication/strategies/base_strategy.rb +55 -0
- data/app/models/spree/authentication/strategies/email_password_strategy.rb +47 -0
- data/app/models/spree/base.rb +1 -0
- data/app/models/spree/calculator.rb +2 -0
- data/app/models/spree/country.rb +56 -0
- data/app/models/spree/coupon_code.rb +2 -0
- data/app/models/spree/credit_card.rb +2 -0
- data/app/models/spree/current.rb +9 -4
- data/app/models/spree/customer_group.rb +2 -0
- data/app/models/spree/customer_return.rb +2 -0
- data/app/models/spree/data_feed.rb +2 -0
- data/app/models/spree/digital.rb +2 -0
- data/app/models/spree/digital_link.rb +2 -0
- data/app/models/spree/export.rb +3 -2
- data/app/models/spree/fulfilment_changer.rb +8 -2
- data/app/models/spree/gateway/bogus.rb +60 -0
- data/app/models/spree/gateway_customer.rb +2 -0
- data/app/models/spree/gift_card.rb +2 -0
- data/app/models/spree/gift_card_batch.rb +2 -4
- data/app/models/spree/image.rb +18 -0
- data/app/models/spree/import.rb +5 -3
- data/app/models/spree/import_mapping.rb +2 -0
- data/app/models/spree/import_row.rb +2 -0
- data/app/models/spree/import_schemas/customers.rb +21 -0
- data/app/models/spree/imports/customers.rb +9 -0
- data/app/models/spree/integration.rb +2 -0
- data/app/models/spree/inventory_unit.rb +2 -0
- data/app/models/spree/invitation.rb +6 -6
- data/app/models/spree/legacy_admin_user.rb +31 -0
- data/app/models/spree/legacy_user.rb +19 -1
- data/app/models/spree/line_item.rb +15 -4
- data/app/models/spree/log_entry.rb +2 -0
- data/app/models/spree/market.rb +83 -0
- data/app/models/spree/market_country.rb +25 -0
- data/app/models/spree/metafield.rb +2 -0
- data/app/models/spree/metafield_definition.rb +2 -0
- data/app/models/spree/newsletter_subscriber.rb +2 -0
- data/app/models/spree/option_type.rb +2 -0
- data/app/models/spree/option_value.rb +2 -0
- data/app/models/spree/order/address_book.rb +2 -1
- data/app/models/spree/order.rb +75 -47
- data/app/models/spree/payment.rb +6 -1
- data/app/models/spree/payment_capture_event.rb +2 -0
- data/app/models/spree/payment_method.rb +59 -1
- data/app/models/spree/payment_session.rb +109 -0
- data/app/models/spree/payment_sessions/bogus.rb +4 -0
- data/app/models/spree/payment_setup_session.rb +79 -0
- data/app/models/spree/payment_source.rb +2 -0
- data/app/models/spree/permission_sets/default_customer.rb +19 -0
- data/app/models/spree/policy.rb +2 -0
- data/app/models/spree/post.rb +2 -0
- data/app/models/spree/post_category.rb +2 -0
- data/app/models/spree/price.rb +26 -2
- data/app/models/spree/price_list.rb +2 -0
- data/app/models/spree/price_rule.rb +2 -0
- data/app/models/spree/price_rules/market_rule.rb +19 -0
- data/app/models/spree/product.rb +41 -29
- data/app/models/spree/promotion/rules/country.rb +1 -1
- data/app/models/spree/promotion.rb +3 -1
- data/app/models/spree/promotion_action.rb +2 -0
- data/app/models/spree/promotion_category.rb +2 -0
- data/app/models/spree/promotion_rule.rb +2 -0
- data/app/models/spree/prototype.rb +2 -0
- data/app/models/spree/refund.rb +2 -4
- data/app/models/spree/refund_reason.rb +2 -0
- data/app/models/spree/reimbursement/credit.rb +2 -0
- data/app/models/spree/reimbursement.rb +2 -0
- data/app/models/spree/reimbursement_type.rb +2 -0
- data/app/models/spree/report.rb +3 -1
- data/app/models/spree/return_authorization.rb +2 -0
- data/app/models/spree/return_authorization_reason.rb +2 -0
- data/app/models/spree/return_item.rb +2 -0
- data/app/models/spree/role.rb +2 -0
- data/app/models/spree/shipment.rb +11 -1
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_method.rb +2 -0
- data/app/models/spree/shipping_method_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +2 -0
- data/app/models/spree/state_change.rb +2 -0
- data/app/models/spree/stock_item.rb +2 -0
- data/app/models/spree/stock_location.rb +2 -0
- data/app/models/spree/stock_movement.rb +2 -0
- data/app/models/spree/stock_transfer.rb +2 -1
- data/app/models/spree/store.rb +110 -179
- data/app/models/spree/store_credit.rb +2 -4
- data/app/models/spree/store_credit_category.rb +2 -0
- data/app/models/spree/store_credit_event.rb +2 -0
- data/app/models/spree/store_credit_type.rb +2 -0
- data/app/models/spree/store_product.rb +2 -0
- data/app/models/spree/tax_category.rb +2 -0
- data/app/models/spree/tax_rate.rb +2 -0
- data/app/models/spree/taxon.rb +4 -1
- data/app/models/spree/taxon_image.rb +8 -0
- data/app/models/spree/taxon_rule.rb +2 -0
- data/app/models/spree/taxonomy.rb +2 -0
- data/app/models/spree/user_identity.rb +81 -0
- data/app/models/spree/variant.rb +13 -3
- data/app/models/spree/webhook_delivery.rb +2 -0
- data/app/models/spree/webhook_endpoint.rb +2 -17
- data/app/models/spree/wished_item.rb +15 -0
- data/app/models/spree/wishlist.rb +2 -8
- data/app/models/spree/zone.rb +2 -6
- data/app/presenters/spree/filters/price_presenter.rb +1 -0
- data/app/presenters/spree/filters/price_range_presenter.rb +1 -0
- data/app/presenters/spree/filters/quantified_price_range_presenter.rb +1 -0
- data/app/presenters/spree/product_summary_presenter.rb +1 -0
- data/app/services/spree/addresses/helper.rb +22 -3
- data/app/services/spree/cart/associate.rb +19 -6
- data/app/services/spree/checkout/select_shipping_method.rb +13 -1
- data/app/services/spree/classifications/reposition.rb +5 -0
- data/app/services/spree/data_feeds/google/required_attributes.rb +8 -3
- data/app/services/spree/gift_cards/apply.rb +4 -5
- data/app/services/spree/imports/row_processors/customer.rb +70 -0
- data/app/services/spree/orders/approve.rb +5 -3
- data/app/services/spree/orders/cancel.rb +9 -4
- data/app/services/spree/products/prepare_nested_attributes.rb +1 -1
- data/app/services/spree/sample_data/import_runner.rb +54 -0
- data/app/services/spree/sample_data/loader.rb +78 -0
- data/app/services/spree/seeds/admin_user.rb +2 -3
- data/app/services/spree/seeds/all.rb +1 -0
- data/app/services/spree/seeds/api_keys.rb +16 -0
- data/app/services/spree/seeds/stores.rb +2 -4
- data/app/sorters/spree/orders/sort.rb +4 -0
- data/app/subscribers/spree/product_metrics_subscriber.rb +4 -4
- data/config/brakeman.ignore +120 -0
- data/config/locales/en.yml +20 -5
- data/db/migrate/20250923141900_create_spree_user_identities.rb +17 -0
- data/db/migrate/20260123000000_create_spree_api_keys.rb +19 -0
- data/db/migrate/20260131000000_add_thumbnail_id_to_spree_variants_and_products.rb +9 -0
- data/db/migrate/20260213000000_create_spree_payment_sessions.rb +27 -0
- data/db/migrate/20260218000000_create_spree_payment_setup_sessions.rb +24 -0
- data/db/migrate/20260220000000_create_spree_markets.rb +29 -0
- data/db/sample_data/customers.csv +21 -0
- data/db/sample_data/metafield_definitions.rb +7 -0
- data/db/sample_data/orders.rb +131 -0
- data/db/sample_data/payment_methods.rb +17 -0
- data/db/sample_data/posts.rb +7 -0
- data/db/sample_data/products.csv +1083 -0
- data/db/sample_data/promotions.rb +8 -0
- data/db/sample_data/shipping_methods.rb +39 -0
- data/lib/generators/spree/authentication/devise/devise_generator.rb +2 -2
- data/lib/generators/spree/authentication/dummy/dummy_generator.rb +54 -0
- data/lib/generators/spree/authentication/dummy/templates/authentication_helpers.rb.tt +52 -0
- data/lib/generators/spree/authentication/dummy/templates/create_spree_admin_users.rb.tt +33 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/spree/core/configuration.rb +1 -1
- data/lib/spree/core/controller_helpers/common.rb +6 -0
- data/lib/spree/core/controller_helpers/currency.rb +5 -0
- data/lib/spree/core/controller_helpers/order.rb +5 -1
- data/lib/spree/core/controller_helpers/store.rb +1 -1
- data/lib/spree/core/dependencies.rb +1 -1
- data/lib/spree/core/engine.rb +17 -4
- data/lib/spree/core/pricing/context.rb +6 -3
- data/lib/spree/core/product_filters.rb +14 -0
- data/lib/spree/core/query_filters/comparable.rb +4 -0
- data/lib/spree/core/query_filters/text.rb +4 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +4 -4
- data/lib/spree/database_type_utilities.rb +7 -0
- data/lib/spree/events.rb +17 -10
- data/lib/spree/money.rb +2 -9
- data/lib/spree/permitted_attributes.rb +19 -7
- data/lib/spree/testing_support/capybara_config.rb +2 -2
- data/lib/spree/testing_support/common_rake.rb +15 -4
- data/lib/spree/testing_support/factories/api_key_factory.rb +19 -0
- data/lib/spree/testing_support/factories/custom_domain_factory.rb +7 -5
- data/lib/spree/testing_support/factories/import_factory.rb +12 -0
- data/lib/spree/testing_support/factories/market_factory.rb +35 -0
- data/lib/spree/testing_support/factories/order_factory.rb +3 -1
- data/lib/spree/testing_support/factories/payment_method_factory.rb +2 -0
- data/lib/spree/testing_support/factories/payment_session_factory.rb +47 -0
- data/lib/spree/testing_support/factories/payment_setup_session_factory.rb +31 -0
- data/lib/spree/testing_support/factories/price_rule_factory.rb +10 -0
- data/lib/spree/testing_support/factories/user_identity_factory.rb +15 -0
- data/lib/spree/testing_support/store.rb +3 -2
- data/lib/spree/webhooks.rb +7 -7
- data/lib/tasks/images.rake +20 -0
- data/lib/tasks/markets.rake +40 -0
- data/lib/tasks/sample_data.rake +15 -0
- data/spec/fixtures/files/customers_import.csv +4 -0
- metadata +88 -62
- data/LICENSE.md +0 -57
- data/app/finders/spree/stores/find_current.rb +0 -28
- data/app/models/spree/custom_domain.rb +0 -59
- data/app/serializers/spree/events/asset_serializer.rb +0 -22
- data/app/serializers/spree/events/base_serializer.rb +0 -61
- data/app/serializers/spree/events/customer_return_serializer.rb +0 -20
- data/app/serializers/spree/events/digital_link_serializer.rb +0 -20
- data/app/serializers/spree/events/digital_serializer.rb +0 -18
- data/app/serializers/spree/events/export_serializer.rb +0 -22
- data/app/serializers/spree/events/gift_card_batch_serializer.rb +0 -24
- data/app/serializers/spree/events/gift_card_serializer.rb +0 -29
- data/app/serializers/spree/events/image_serializer.rb +0 -9
- data/app/serializers/spree/events/import_row_serializer.rb +0 -23
- data/app/serializers/spree/events/import_serializer.rb +0 -24
- data/app/serializers/spree/events/invitation_serializer.rb +0 -28
- data/app/serializers/spree/events/line_item_serializer.rb +0 -31
- data/app/serializers/spree/events/newsletter_subscriber_serializer.rb +0 -21
- data/app/serializers/spree/events/order_serializer.rb +0 -39
- data/app/serializers/spree/events/payment_serializer.rb +0 -24
- data/app/serializers/spree/events/post_category_serializer.rb +0 -20
- data/app/serializers/spree/events/post_serializer.rb +0 -26
- data/app/serializers/spree/events/price_serializer.rb +0 -22
- data/app/serializers/spree/events/product_serializer.rb +0 -24
- data/app/serializers/spree/events/promotion_serializer.rb +0 -32
- data/app/serializers/spree/events/refund_serializer.rb +0 -23
- data/app/serializers/spree/events/reimbursement_serializer.rb +0 -22
- data/app/serializers/spree/events/report_serializer.rb +0 -23
- data/app/serializers/spree/events/return_authorization_serializer.rb +0 -22
- data/app/serializers/spree/events/return_item_serializer.rb +0 -27
- data/app/serializers/spree/events/shipment_serializer.rb +0 -24
- data/app/serializers/spree/events/stock_item_serializer.rb +0 -22
- data/app/serializers/spree/events/stock_movement_serializer.rb +0 -22
- data/app/serializers/spree/events/stock_transfer_serializer.rb +0 -22
- data/app/serializers/spree/events/store_credit_serializer.rb +0 -30
- data/app/serializers/spree/events/user_serializer.rb +0 -18
- data/app/serializers/spree/events/variant_serializer.rb +0 -34
- data/app/serializers/spree/events/wished_item_serializer.rb +0 -20
- data/app/serializers/spree/events/wishlist_serializer.rb +0 -22
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module PriceRules
|
|
3
|
+
class MarketRule < Spree::PriceRule
|
|
4
|
+
preference :market_ids, :array, default: []
|
|
5
|
+
|
|
6
|
+
def applicable?(context)
|
|
7
|
+
return false unless context.market
|
|
8
|
+
return true if preferred_market_ids.empty?
|
|
9
|
+
|
|
10
|
+
# Compare as strings to support both integer and UUID primary keys
|
|
11
|
+
preferred_market_ids.map(&:to_s).include?(context.market.id.to_s)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.description
|
|
15
|
+
'Apply pricing based on the market'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/app/models/spree/product.rb
CHANGED
|
@@ -20,12 +20,14 @@
|
|
|
20
20
|
|
|
21
21
|
module Spree
|
|
22
22
|
class Product < Spree.base_class
|
|
23
|
+
has_prefix_id :prod # Stripe: prod_
|
|
24
|
+
|
|
23
25
|
acts_as_paranoid
|
|
24
26
|
acts_as_taggable_on :tags, :labels
|
|
25
27
|
normalizes :name, with: ->(value) { value&.to_s&.squish&.presence }
|
|
26
28
|
|
|
27
29
|
include Spree::ProductScopes
|
|
28
|
-
include Spree::
|
|
30
|
+
include Spree::StoreScopedResource
|
|
29
31
|
include Spree::TranslatableResource
|
|
30
32
|
include Spree::MemoizedData
|
|
31
33
|
include Spree::Metafields
|
|
@@ -117,6 +119,8 @@ module Spree
|
|
|
117
119
|
has_many :variant_images, -> { order(:position) }, source: :images, through: :variants_including_master
|
|
118
120
|
has_many :variant_images_without_master, -> { order(:position) }, source: :images, through: :variants
|
|
119
121
|
|
|
122
|
+
belongs_to :thumbnail, class_name: 'Spree::Image', optional: true
|
|
123
|
+
|
|
120
124
|
has_many :option_value_variants, class_name: 'Spree::OptionValueVariant', through: :variants
|
|
121
125
|
has_many :option_values, class_name: 'Spree::OptionValue', through: :variants
|
|
122
126
|
|
|
@@ -230,11 +234,12 @@ module Spree
|
|
|
230
234
|
|
|
231
235
|
alias options product_option_types
|
|
232
236
|
|
|
233
|
-
self.whitelisted_ransackable_attributes = %w[description name slug discontinue_on status]
|
|
237
|
+
self.whitelisted_ransackable_attributes = %w[description name slug discontinue_on status available_on created_at updated_at]
|
|
234
238
|
self.whitelisted_ransackable_associations = %w[taxons stores variants_including_master master variants tags labels
|
|
235
239
|
shipping_category classifications option_types properties]
|
|
236
240
|
self.whitelisted_ransackable_scopes = %w[not_discontinued search_by_name in_taxon price_between
|
|
237
|
-
multi_search in_stock_items out_of_stock_items
|
|
241
|
+
multi_search in_stock_items out_of_stock_items with_option_value_ids
|
|
242
|
+
ascend_by_price descend_by_price]
|
|
238
243
|
|
|
239
244
|
[
|
|
240
245
|
:sku, :barcode, :weight, :height, :width, :depth, :is_master, :dimensions_unit, :weight_unit
|
|
@@ -252,6 +257,9 @@ module Spree
|
|
|
252
257
|
delegate :display_amount, :display_price, :has_default_price?, :track_inventory?,
|
|
253
258
|
:display_compare_at_price, :images, to: :default_variant
|
|
254
259
|
|
|
260
|
+
# Rails doesn't provide _id methods for has_one associations by default
|
|
261
|
+
delegate :id, to: :master, prefix: true, allow_nil: true
|
|
262
|
+
|
|
255
263
|
alias master_images images
|
|
256
264
|
|
|
257
265
|
state_machine :status, initial: :draft do
|
|
@@ -290,12 +298,12 @@ module Spree
|
|
|
290
298
|
|
|
291
299
|
# Can't use short form block syntax due to https://github.com/Netflix/fast_jsonapi/issues/259
|
|
292
300
|
def purchasable?
|
|
293
|
-
@purchasable ||= default_variant.purchasable? || variants.
|
|
301
|
+
@purchasable ||= default_variant.purchasable? || variants.any?(&:purchasable?)
|
|
294
302
|
end
|
|
295
303
|
|
|
296
304
|
# Can't use short form block syntax due to https://github.com/Netflix/fast_jsonapi/issues/259
|
|
297
305
|
def in_stock?
|
|
298
|
-
@in_stock ||= default_variant.in_stock? || variants.
|
|
306
|
+
@in_stock ||= default_variant.in_stock? || variants.any?(&:in_stock?)
|
|
299
307
|
end
|
|
300
308
|
|
|
301
309
|
# Can't use short form block syntax due to https://github.com/Netflix/fast_jsonapi/issues/259
|
|
@@ -362,9 +370,10 @@ module Spree
|
|
|
362
370
|
end
|
|
363
371
|
|
|
364
372
|
# Returns default Image for Product.
|
|
373
|
+
# Uses cached thumbnail_id which is updated when images are added/removed/reordered.
|
|
365
374
|
# @return [Spree::Image, nil]
|
|
366
375
|
def default_image
|
|
367
|
-
|
|
376
|
+
thumbnail
|
|
368
377
|
end
|
|
369
378
|
|
|
370
379
|
# Backward compatibility for Spree 5.2 and earlier.
|
|
@@ -390,6 +399,13 @@ module Spree
|
|
|
390
399
|
variant_for_images&.image_count || 0
|
|
391
400
|
end
|
|
392
401
|
|
|
402
|
+
# Updates the thumbnail_id to the first image from variant_images.
|
|
403
|
+
# Called when images are added, removed, or reordered on any variant.
|
|
404
|
+
def update_thumbnail!
|
|
405
|
+
first_image = variant_images.order(:position).first
|
|
406
|
+
update_column(:thumbnail_id, first_image&.id)
|
|
407
|
+
end
|
|
408
|
+
|
|
393
409
|
# Finds first variant with images using preloaded data when available.
|
|
394
410
|
# @return [Spree::Variant, nil]
|
|
395
411
|
def find_variant_with_images
|
|
@@ -598,15 +614,13 @@ module Spree
|
|
|
598
614
|
nil
|
|
599
615
|
elsif Spree.use_translations?
|
|
600
616
|
taxons.joins(:taxonomy).
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
end
|
|
609
|
-
end
|
|
617
|
+
join_translation_table(Taxonomy).
|
|
618
|
+
find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_brands_name) })
|
|
619
|
+
elsif taxons.loaded?
|
|
620
|
+
taxons.find { |taxon| taxon.taxonomy.name == Spree.t(:taxonomy_brands_name) }
|
|
621
|
+
else
|
|
622
|
+
taxons.joins(:taxonomy).find_by(Taxonomy.table_name => { name: Spree.t(:taxonomy_brands_name) })
|
|
623
|
+
end
|
|
610
624
|
end
|
|
611
625
|
|
|
612
626
|
# Returns the brand name for the product
|
|
@@ -638,12 +652,10 @@ module Spree
|
|
|
638
652
|
join_translation_table(Taxonomy).
|
|
639
653
|
order(depth: :desc).
|
|
640
654
|
find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_categories_name) })
|
|
655
|
+
elsif taxons.loaded?
|
|
656
|
+
taxons.find { |taxon| taxon.taxonomy.name == Spree.t(:taxonomy_categories_name) }
|
|
641
657
|
else
|
|
642
|
-
|
|
643
|
-
taxons.find { |taxon| taxon.taxonomy.name == Spree.t(:taxonomy_categories_name) }
|
|
644
|
-
else
|
|
645
|
-
taxons.joins(:taxonomy).order(depth: :desc).find_by(Taxonomy.table_name => { name: Spree.t(:taxonomy_categories_name) })
|
|
646
|
-
end
|
|
658
|
+
taxons.joins(:taxonomy).order(depth: :desc).find_by(Taxonomy.table_name => { name: Spree.t(:taxonomy_categories_name) })
|
|
647
659
|
end
|
|
648
660
|
end
|
|
649
661
|
|
|
@@ -691,15 +703,15 @@ module Spree
|
|
|
691
703
|
def to_csv(store = nil)
|
|
692
704
|
store ||= stores.default || stores.first
|
|
693
705
|
properties_for_csv = if Spree::Config[:product_properties_enabled]
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
706
|
+
Spree::Property.order(:position).flat_map do |property|
|
|
707
|
+
[
|
|
708
|
+
property.name,
|
|
709
|
+
product_properties.find { |pp| pp.property_id == property.id }&.value
|
|
710
|
+
]
|
|
711
|
+
end
|
|
712
|
+
else
|
|
713
|
+
[]
|
|
714
|
+
end
|
|
703
715
|
metafields_for_csv ||= Spree::MetafieldDefinition.for_resource_type('Spree::Product').order(:namespace, :key).map do |mf_def|
|
|
704
716
|
metafields.find { |mf| mf.metafield_definition_id == mf_def.id }&.csv_value
|
|
705
717
|
end
|
|
@@ -30,7 +30,7 @@ module Spree
|
|
|
30
30
|
|
|
31
31
|
def validate_eligibility_by_country_iso(order)
|
|
32
32
|
country_iso = order.ship_address&.country_iso
|
|
33
|
-
return true if country_iso == (preferred_country_iso || order.store.
|
|
33
|
+
return true if country_iso == (preferred_country_iso || order.store.default_market&.default_country&.iso)
|
|
34
34
|
|
|
35
35
|
eligibility_errors.add(:base, eligibility_error_message(:wrong_country))
|
|
36
36
|
false
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Promotion < Spree.base_class
|
|
3
|
-
|
|
3
|
+
has_prefix_id :promo # Spree-specific: promotion
|
|
4
|
+
|
|
5
|
+
include Spree::StoreScopedResource
|
|
4
6
|
include Spree::Metafields
|
|
5
7
|
include Spree::Metadata
|
|
6
8
|
if defined?(Spree::Security::Promotions)
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
# PromotionActions perform the necessary tasks when a promotion is activated by an event and determined to be eligible.
|
|
3
3
|
module Spree
|
|
4
4
|
class PromotionAction < Spree.base_class
|
|
5
|
+
has_prefix_id :pact
|
|
6
|
+
|
|
5
7
|
acts_as_paranoid
|
|
6
8
|
|
|
7
9
|
belongs_to :promotion, class_name: 'Spree::Promotion', touch: true
|
data/app/models/spree/refund.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Refund < Spree.base_class
|
|
3
|
+
has_prefix_id :re # Stripe: re_
|
|
4
|
+
|
|
3
5
|
include Spree::Metafields
|
|
4
6
|
include Spree::Metadata
|
|
5
7
|
if defined?(Spree::Security::Refunds)
|
|
@@ -34,10 +36,6 @@ module Spree
|
|
|
34
36
|
|
|
35
37
|
delegate :order, :currency, to: :payment
|
|
36
38
|
|
|
37
|
-
def amount=(amount)
|
|
38
|
-
self[:amount] = Spree::LocalizedNumber.parse(amount)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
39
|
def money
|
|
42
40
|
Spree::Money.new(amount, currency: currency)
|
|
43
41
|
end
|
data/app/models/spree/report.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Report < Spree.base_class
|
|
3
|
+
has_prefix_id :rep
|
|
4
|
+
|
|
3
5
|
include Spree::SingleStoreResource
|
|
4
6
|
include Spree::VendorConcern if defined?(Spree::VendorConcern)
|
|
5
7
|
|
|
@@ -32,7 +34,7 @@ module Spree
|
|
|
32
34
|
has_one_attached :attachment, service: Spree.private_storage_service_name
|
|
33
35
|
|
|
34
36
|
def event_serializer_class
|
|
35
|
-
Spree::
|
|
37
|
+
'Spree::Api::V3::ReportSerializer'.safe_constantize
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
def self.report_type
|
data/app/models/spree/role.rb
CHANGED
|
@@ -2,9 +2,10 @@ require 'ostruct'
|
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
4
|
class Shipment < Spree.base_class
|
|
5
|
+
has_prefix_id :ship # Spree-specific: shipment
|
|
6
|
+
|
|
5
7
|
include Spree::Core::NumberGenerator.new(prefix: 'H', length: 11)
|
|
6
8
|
include Spree::NumberIdentifier
|
|
7
|
-
include Spree::NumberAsParam
|
|
8
9
|
include Spree::Metafields
|
|
9
10
|
include Spree::Metadata
|
|
10
11
|
if defined?(Spree::Security::Shipments)
|
|
@@ -346,6 +347,15 @@ module Spree
|
|
|
346
347
|
shipping_rates.update_all(selected: false, updated_at: Time.current)
|
|
347
348
|
shipping_rates.update(id, selected: true)
|
|
348
349
|
save!
|
|
350
|
+
# Reload associations to pick up the new selected shipping rate
|
|
351
|
+
shipping_rates.reset
|
|
352
|
+
association(:selected_shipping_rate).reset
|
|
353
|
+
# Update shipment cost and order totals only for incomplete orders (during checkout)
|
|
354
|
+
# For completed orders, totals are managed separately (e.g., in tests or admin adjustments)
|
|
355
|
+
return if order.completed?
|
|
356
|
+
|
|
357
|
+
update_amounts
|
|
358
|
+
order.set_shipments_cost
|
|
349
359
|
end
|
|
350
360
|
|
|
351
361
|
def set_up_inventory(state, variant, order, line_item, quantity = 1)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class ShippingMethodCategory < Spree.base_class
|
|
3
|
+
has_prefix_id :smcat
|
|
4
|
+
|
|
3
5
|
belongs_to :shipping_method, class_name: 'Spree::ShippingMethod'
|
|
4
6
|
belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :shipping_method_categories
|
|
5
7
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class ShippingRate < Spree.base_class
|
|
3
|
+
has_prefix_id :shpr # Spree-specific: shipping rate
|
|
4
|
+
|
|
3
5
|
belongs_to :shipment, class_name: 'Spree::Shipment'
|
|
4
6
|
belongs_to :tax_rate, -> { with_deleted }, class_name: 'Spree::TaxRate'
|
|
5
7
|
belongs_to :shipping_method, -> { with_deleted }, class_name: 'Spree::ShippingMethod', inverse_of: :shipping_rates
|