spree_core 3.6.6 → 3.7.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree.js +60 -0
- data/app/finders/spree/countries/find.rb +31 -0
- data/app/finders/spree/credit_cards/find.rb +12 -0
- data/app/finders/spree/line_items/find_by_variant.rb +13 -0
- data/app/finders/spree/orders/find_current.rb +34 -0
- data/app/finders/spree/products/find.rb +93 -0
- data/app/finders/spree/taxons/find.rb +79 -0
- data/app/helpers/spree/base_helper.rb +7 -3
- data/app/helpers/spree/products_helper.rb +2 -1
- data/app/models/concerns/spree/adjustment_source.rb +11 -6
- data/app/models/concerns/spree/user_address.rb +2 -2
- data/app/models/concerns/spree/vat_price_calculation.rb +2 -1
- data/app/models/spree/ability.rb +2 -2
- data/app/models/spree/address.rb +23 -14
- data/app/models/spree/adjustable/adjustments_updater.rb +1 -1
- data/app/models/spree/adjustable/promotion_accumulator.rb +2 -1
- data/app/models/spree/adjustment.rb +18 -3
- data/app/models/spree/asset/support/active_storage.rb +1 -1
- data/app/models/spree/calculator.rb +1 -4
- data/app/models/spree/calculator/flexi_rate.rb +8 -11
- data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -1
- data/app/models/spree/calculator/shipping/flexi_rate.rb +13 -13
- data/app/models/spree/country.rb +4 -0
- data/app/models/spree/credit_card.rb +8 -2
- data/app/models/spree/customer_return.rb +1 -0
- data/app/models/spree/fulfilment_changer.rb +117 -0
- data/app/models/spree/gateway.rb +1 -0
- data/app/models/spree/gateway/bogus.rb +3 -2
- data/app/models/spree/image.rb +13 -0
- data/app/models/spree/image/configuration/active_storage.rb +3 -3
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/line_item.rb +3 -2
- data/app/models/spree/order.rb +72 -28
- data/app/models/spree/order/checkout.rb +10 -0
- data/app/models/spree/order/store_credit.rb +14 -35
- data/app/models/spree/order_contents.rb +22 -118
- data/app/models/spree/order_inventory.rb +6 -2
- data/app/models/spree/order_merger.rb +1 -3
- data/app/models/spree/order_promotion.rb +10 -0
- data/app/models/spree/order_updater.rb +11 -8
- data/app/models/spree/payment.rb +9 -3
- data/app/models/spree/payment/processing.rb +4 -4
- data/app/models/spree/preferences/store.rb +3 -3
- data/app/models/spree/product.rb +32 -0
- data/app/models/spree/product/scopes.rb +13 -34
- data/app/models/spree/product_property.rb +1 -1
- data/app/models/spree/promotion.rb +2 -0
- data/app/models/spree/promotion/actions/create_adjustment.rb +6 -1
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +10 -2
- data/app/models/spree/promotion/actions/create_line_items.rb +3 -2
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
- data/app/models/spree/promotion/rules/item_total.rb +2 -2
- data/app/models/spree/promotion_handler/coupon.rb +10 -6
- data/app/models/spree/promotion_handler/page.rb +1 -1
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +4 -4
- data/app/models/spree/refund.rb +1 -1
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -0
- data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
- data/app/models/spree/return_item.rb +7 -4
- data/app/models/spree/return_item/eligibility_validator/default.rb +6 -6
- data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +1 -1
- data/app/models/spree/shipment.rb +27 -34
- data/app/models/spree/shipping_method.rb +2 -0
- data/app/models/spree/shipping_rate.rb +31 -16
- data/app/models/spree/stock/adjuster.rb +1 -0
- data/app/models/spree/stock/estimator.rb +2 -0
- data/app/models/spree/stock/inventory_unit_builder.rb +5 -5
- data/app/models/spree/stock/packer.rb +1 -0
- data/app/models/spree/stock/quantifier.rb +16 -4
- data/app/models/spree/stock_item.rb +1 -0
- data/app/models/spree/stock_location.rb +1 -1
- data/app/models/spree/stock_movement.rb +1 -0
- data/app/models/spree/stock_transfer.rb +1 -1
- data/app/models/spree/store_credit.rb +5 -10
- data/app/models/spree/tax_rate.rb +3 -0
- data/app/models/spree/taxon.rb +2 -2
- data/app/models/spree/taxon_image.rb +18 -0
- data/app/models/spree/{taxon_icon → taxon_image}/configuration/active_storage.rb +2 -2
- data/app/models/spree/{taxon_icon → taxon_image}/configuration/paperclip.rb +1 -1
- data/app/models/spree/variant.rb +28 -2
- data/app/models/spree/zone.rb +5 -5
- data/app/paginators/spree/shared/paginate.rb +19 -0
- data/app/services/spree/cart/add_item.rb +43 -0
- data/app/services/spree/cart/create.rb +21 -0
- data/app/services/spree/cart/recalculate.rb +32 -0
- data/app/services/spree/cart/remove_item.rb +37 -0
- data/app/services/spree/cart/remove_line_item.rb +16 -0
- data/app/services/spree/cart/set_quantity.rb +22 -0
- data/app/services/spree/cart/update.rb +37 -0
- data/app/services/spree/checkout/add_store_credit.rb +51 -0
- data/app/services/spree/checkout/advance.rb +18 -0
- data/app/services/spree/checkout/complete.rb +23 -0
- data/app/services/spree/checkout/get_shipping_rates.rb +48 -0
- data/app/services/spree/checkout/next.rb +13 -0
- data/app/services/spree/checkout/remove_store_credit.rb +17 -0
- data/app/services/spree/checkout/update.rb +13 -0
- data/app/services/spree/compare_line_items.rb +21 -0
- data/app/services/spree/generate_token.rb +20 -0
- data/app/sorters/spree/products/sort.rb +58 -0
- data/config/locales/en.yml +20 -1
- data/db/default/spree/countries.rb +1 -1
- data/db/default/spree/default_reimbursement_type.rb +1 -1
- data/db/default/spree/roles.rb +2 -2
- data/db/default/spree/states.rb +2 -1
- data/db/default/spree/stores.rb +1 -1
- data/db/default/spree/zones.rb +5 -6
- data/db/migrate/20120831092320_spree_one_two.rb +36 -36
- data/db/migrate/20120831092359_spree_promo_one_two.rb +1 -1
- data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
- data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
- data/db/migrate/20130301162924_create_shipping_method_categories.rb +1 -1
- data/db/migrate/20130304162240_create_spree_shipping_rates.rb +1 -1
- data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
- data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
- data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
- data/db/migrate/20140309023735_migrate_old_preferences.rb +5 -1
- data/db/migrate/20140309024355_create_spree_stores.rb +1 -1
- data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
- data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
- data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
- data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
- data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
- data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
- data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
- data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
- data/db/migrate/20150118210639_create_spree_store_credits.rb +1 -1
- data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +1 -1
- data/db/migrate/20150118212051_create_spree_store_credit_events.rb +1 -1
- data/db/migrate/20150118212101_create_spree_store_credit_types.rb +1 -1
- data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +6 -2
- data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +5 -0
- data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +12 -0
- data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +6 -0
- data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +30 -33
- data/lib/generators/spree/dummy/templates/rails/database.yml +6 -1
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
- data/lib/generators/spree/dummy_model/dummy_model_generator.rb +1 -1
- data/lib/generators/spree/install/install_generator.rb +2 -1
- data/lib/spree/core.rb +2 -4
- data/lib/spree/core/controller_helpers/auth.rb +15 -5
- data/lib/spree/core/controller_helpers/common.rb +0 -11
- data/lib/spree/core/controller_helpers/order.rb +6 -6
- data/lib/spree/core/controller_helpers/respond_with.rb +3 -1
- data/lib/spree/core/controller_helpers/strong_parameters.rb +1 -0
- data/lib/spree/core/engine.rb +9 -3
- data/lib/spree/core/importer/order.rb +8 -12
- data/lib/spree/core/product_duplicator.rb +6 -1
- data/lib/spree/core/product_filters.rb +15 -14
- data/lib/spree/core/query_filters.rb +11 -0
- data/lib/spree/core/query_filters/comparable.rb +46 -0
- data/lib/spree/core/query_filters/date.rb +8 -0
- data/lib/spree/core/query_filters/number.rb +8 -0
- data/lib/spree/core/query_filters/text.rb +32 -0
- data/lib/spree/core/token_generator.rb +2 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/migrations.rb +2 -0
- data/lib/spree/money.rb +12 -12
- data/lib/spree/permitted_attributes.rb +11 -6
- data/lib/spree/service_module.rb +98 -0
- data/lib/spree/testing_support/capybara_config.rb +20 -0
- data/lib/spree/testing_support/capybara_ext.rb +6 -3
- data/lib/spree/testing_support/factories.rb +1 -1
- data/lib/spree/testing_support/factories/address_factory.rb +10 -9
- data/lib/spree/testing_support/factories/adjustment_factory.rb +8 -6
- data/lib/spree/testing_support/factories/country_factory.rb +4 -4
- data/lib/spree/testing_support/factories/credit_card_factory.rb +7 -5
- data/lib/spree/testing_support/factories/customer_return_factory.rb +1 -1
- data/lib/spree/testing_support/factories/image_factory.rb +7 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +3 -2
- data/lib/spree/testing_support/factories/options_factory.rb +2 -3
- data/lib/spree/testing_support/factories/order_factory.rb +16 -12
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +6 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +9 -7
- data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -8
- data/lib/spree/testing_support/factories/price_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +10 -10
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +14 -4
- data/lib/spree/testing_support/factories/property_factory.rb +2 -2
- data/lib/spree/testing_support/factories/prototype_factory.rb +3 -3
- data/lib/spree/testing_support/factories/refund_factory.rb +6 -6
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -3
- data/lib/spree/testing_support/factories/role_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +4 -4
- data/lib/spree/testing_support/factories/state_factory.rb +2 -5
- data/lib/spree/testing_support/factories/stock_factory.rb +3 -3
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_factory.rb +5 -4
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -1
- data/lib/spree/testing_support/factories/user_factory.rb +4 -4
- data/lib/spree/testing_support/factories/variant_factory.rb +15 -15
- data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
- data/lib/spree/testing_support/image_helpers.rb +19 -0
- data/lib/tasks/core.rake +21 -4
- data/lib/tasks/exchanges.rake +4 -4
- data/spree_core.gemspec +3 -3
- data/vendor/assets/javascripts/fetch.umd.js +531 -0
- data/vendor/assets/javascripts/polyfill.min.js +1 -0
- metadata +50 -17
- data/app/assets/javascripts/spree.js.coffee +0 -59
- data/app/models/spree/taxon_icon.rb +0 -5
- data/lib/generators/spree/dummy/templates/initializers/custom_user.rb +0 -1
- data/lib/spree/core/environment.rb +0 -15
- data/lib/spree/core/environment/calculators.rb +0 -11
- data/lib/spree/core/environment_extension.rb +0 -28
- data/lib/spree/core/validators/email.rb +0 -8
- data/lib/spree/promo/environment.rb +0 -9
@@ -19,6 +19,7 @@ module Spree
|
|
19
19
|
|
20
20
|
def create_profile(payment)
|
21
21
|
return if payment.source.has_payment_profile?
|
22
|
+
|
22
23
|
# simulate the storage of credit card profile using remote service
|
23
24
|
if success = VALID_CCS.include?(payment.source.number)
|
24
25
|
payment.source.update_attributes(gateway_customer_profile_id: generate_profile_id(success))
|
@@ -27,7 +28,7 @@ module Spree
|
|
27
28
|
|
28
29
|
def authorize(_money, credit_card, _options = {})
|
29
30
|
profile_id = credit_card.gateway_customer_profile_id
|
30
|
-
if VALID_CCS.include?(credit_card.number) || (profile_id
|
31
|
+
if VALID_CCS.include?(credit_card.number) || (profile_id&.starts_with?('BGS-'))
|
31
32
|
ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345', avs_result: { code: 'D' })
|
32
33
|
else
|
33
34
|
ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', { message: 'Bogus Gateway: Forced failure' }, test: true)
|
@@ -36,7 +37,7 @@ module Spree
|
|
36
37
|
|
37
38
|
def purchase(_money, credit_card, _options = {})
|
38
39
|
profile_id = credit_card.gateway_customer_profile_id
|
39
|
-
if VALID_CCS.include?(credit_card.number) || (profile_id
|
40
|
+
if VALID_CCS.include?(credit_card.number) || (profile_id&.starts_with?('BGS-'))
|
40
41
|
ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345', avs_result: { code: 'M' })
|
41
42
|
else
|
42
43
|
ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', message: 'Bogus Gateway: Forced failure', test: true)
|
data/app/models/spree/image.rb
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
module Spree
|
2
2
|
class Image < Asset
|
3
3
|
include Rails.application.config.use_paperclip ? Configuration::Paperclip : Configuration::ActiveStorage
|
4
|
+
include Rails.application.routes.url_helpers
|
5
|
+
|
6
|
+
def styles
|
7
|
+
self.class.styles.map do |_, size|
|
8
|
+
width, height = size[/(\d+)x(\d+)/].split('x')
|
9
|
+
|
10
|
+
{
|
11
|
+
url: polymorphic_path(attachment.variant(resize: size), only_path: true),
|
12
|
+
width: width,
|
13
|
+
height: height
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
4
17
|
end
|
5
18
|
end
|
@@ -32,7 +32,7 @@ module Spree
|
|
32
32
|
|
33
33
|
after_create :update_tax_charge
|
34
34
|
|
35
|
-
delegate :name, :description, :sku, :should_track_inventory?, :product, :options_text, to: :variant
|
35
|
+
delegate :name, :description, :sku, :should_track_inventory?, :product, :options_text, :slug, to: :variant
|
36
36
|
delegate :brand, :category, to: :product
|
37
37
|
delegate :tax_zone, to: :order
|
38
38
|
|
@@ -58,7 +58,8 @@ module Spree
|
|
58
58
|
end
|
59
59
|
|
60
60
|
extend DisplayMoney
|
61
|
-
money_methods :amount, :subtotal, :discounted_amount, :final_amount, :total, :price
|
61
|
+
money_methods :amount, :subtotal, :discounted_amount, :final_amount, :total, :price,
|
62
|
+
:adjustment_total, :additional_tax_total, :promo_total, :included_tax_total
|
62
63
|
|
63
64
|
alias single_money display_price
|
64
65
|
alias single_display_amount display_price
|
data/app/models/spree/order.rb
CHANGED
@@ -22,15 +22,39 @@ module Spree
|
|
22
22
|
alias display_ship_total display_shipment_total
|
23
23
|
alias_attribute :ship_total, :shipment_total
|
24
24
|
|
25
|
+
def guest_token
|
26
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
27
|
+
Order#guest_token is deprecated and will be removed in Spree 4.0. Please use Order#token instead
|
28
|
+
DEPRECATION
|
29
|
+
|
30
|
+
token
|
31
|
+
end
|
32
|
+
|
33
|
+
def guest_token?
|
34
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
35
|
+
Order#guest_token? is deprecated and will be removed in Spree 4.0. Please use Order#token? instead
|
36
|
+
DEPRECATION
|
37
|
+
|
38
|
+
token?
|
39
|
+
end
|
40
|
+
|
41
|
+
def guest_token=(value)
|
42
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
43
|
+
Order#guest_token= is deprecated and will be removed in Spree 4.0. Please use Order#token= instead
|
44
|
+
DEPRECATION
|
45
|
+
|
46
|
+
self.token = value
|
47
|
+
end
|
48
|
+
|
25
49
|
MONEY_THRESHOLD = 100_000_000
|
26
50
|
MONEY_VALIDATION = {
|
27
|
-
presence:
|
51
|
+
presence: true,
|
28
52
|
numericality: {
|
29
53
|
greater_than: -MONEY_THRESHOLD,
|
30
|
-
less_than:
|
31
|
-
allow_blank:
|
54
|
+
less_than: MONEY_THRESHOLD,
|
55
|
+
allow_blank: true
|
32
56
|
},
|
33
|
-
format:
|
57
|
+
format: { with: /\A-?\d+(?:\.\d{1,2})?\z/, allow_blank: true }
|
34
58
|
}.freeze
|
35
59
|
|
36
60
|
POSITIVE_MONEY_VALIDATION = MONEY_VALIDATION.deep_dup.tap do |validation|
|
@@ -51,7 +75,7 @@ module Spree
|
|
51
75
|
end
|
52
76
|
|
53
77
|
self.whitelisted_ransackable_associations = %w[shipments user promotions bill_address ship_address line_items store]
|
54
|
-
self.whitelisted_ransackable_attributes = %w[completed_at email number state payment_state shipment_state total considered_risky]
|
78
|
+
self.whitelisted_ransackable_attributes = %w[completed_at email number state payment_state shipment_state total considered_risky channel]
|
55
79
|
|
56
80
|
attr_reader :coupon_code
|
57
81
|
attr_accessor :temporary_address, :temporary_credit_card
|
@@ -114,7 +138,8 @@ module Spree
|
|
114
138
|
accepts_nested_attributes_for :shipments
|
115
139
|
|
116
140
|
# Needs to happen before save_permalink is called
|
117
|
-
before_validation :
|
141
|
+
before_validation :ensure_store_presence
|
142
|
+
before_validation :ensure_currency_presence
|
118
143
|
before_validation :clone_billing_address, if: :use_billing?
|
119
144
|
attr_accessor :use_billing
|
120
145
|
|
@@ -126,6 +151,8 @@ module Spree
|
|
126
151
|
validates :number, length: { maximum: 32, allow_blank: true }, uniqueness: { allow_blank: true }
|
127
152
|
validates :email, length: { maximum: 254, allow_blank: true }, email: { allow_blank: true }, if: :require_email
|
128
153
|
validates :item_count, numericality: { greater_than_or_equal_to: 0, less_than: 2**31, only_integer: true, allow_blank: true }
|
154
|
+
validates :store
|
155
|
+
validates :currency
|
129
156
|
end
|
130
157
|
validates :payment_state, inclusion: { in: PAYMENT_STATES, allow_blank: true }
|
131
158
|
validates :shipment_state, inclusion: { in: SHIPMENT_STATES, allow_blank: true }
|
@@ -145,9 +172,6 @@ module Spree
|
|
145
172
|
class_attribute :update_hooks
|
146
173
|
self.update_hooks = Set.new
|
147
174
|
|
148
|
-
class_attribute :line_item_comparison_hooks
|
149
|
-
self.line_item_comparison_hooks = Set.new
|
150
|
-
|
151
175
|
scope :created_between, ->(start_date, end_date) { where(created_at: start_date..end_date) }
|
152
176
|
scope :completed_between, ->(start_date, end_date) { where(completed_at: start_date..end_date) }
|
153
177
|
scope :complete, -> { where.not(completed_at: nil) }
|
@@ -165,7 +189,12 @@ module Spree
|
|
165
189
|
# Use this method in other gems that wish to register their own custom logic
|
166
190
|
# that should be called when determining if two line items are equal.
|
167
191
|
def self.register_line_item_comparison_hook(hook)
|
168
|
-
|
192
|
+
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
193
|
+
Order.register_line_item_comparison_hook is deprecated and will be removed in Spree 4.0. Please use
|
194
|
+
`Rails.application.config.spree.line_item_comparison_hooks << hook` instead.
|
195
|
+
EOS
|
196
|
+
|
197
|
+
Rails.application.config.spree.line_item_comparison_hooks << hook
|
169
198
|
end
|
170
199
|
|
171
200
|
# For compatiblity with Calculator::PriceSack
|
@@ -178,10 +207,6 @@ module Spree
|
|
178
207
|
line_items.to_a.sum(&:pre_tax_amount)
|
179
208
|
end
|
180
209
|
|
181
|
-
def currency
|
182
|
-
self[:currency] || Spree::Config[:currency]
|
183
|
-
end
|
184
|
-
|
185
210
|
def shipping_discount
|
186
211
|
shipment_adjustments.non_tax.eligible.sum(:amount) * - 1
|
187
212
|
end
|
@@ -249,8 +274,13 @@ module Spree
|
|
249
274
|
true
|
250
275
|
end
|
251
276
|
|
277
|
+
def ensure_store_presence
|
278
|
+
self.store ||= Spree::Store.default
|
279
|
+
end
|
280
|
+
|
252
281
|
def allow_cancel?
|
253
282
|
return false if !completed? || canceled?
|
283
|
+
|
254
284
|
shipment_state.nil? || %w{ready backorder pending}.include?(shipment_state)
|
255
285
|
end
|
256
286
|
|
@@ -299,11 +329,13 @@ module Spree
|
|
299
329
|
#
|
300
330
|
# def product_customizations_match
|
301
331
|
def line_item_options_match(line_item, options)
|
332
|
+
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
333
|
+
Order#add is deprecated and will be removed in Spree 4.0. Please use
|
334
|
+
Spree::CompareLineItems service instead.
|
335
|
+
EOS
|
302
336
|
return true unless options
|
303
337
|
|
304
|
-
|
305
|
-
send(hook, line_item, options)
|
306
|
-
end
|
338
|
+
CompareLineItems.new.call(order: self, line_item: line_item, options: options).value
|
307
339
|
end
|
308
340
|
|
309
341
|
# Creates new tax charges if there are any applicable rates. If prices already
|
@@ -319,7 +351,7 @@ module Spree
|
|
319
351
|
|
320
352
|
def update_line_item_prices!
|
321
353
|
transaction do
|
322
|
-
line_items.each(&:update_price)
|
354
|
+
line_items.reload.each(&:update_price)
|
323
355
|
save!
|
324
356
|
end
|
325
357
|
end
|
@@ -459,20 +491,24 @@ module Spree
|
|
459
491
|
old_state = send("#{state}_was")
|
460
492
|
new_state = send(state)
|
461
493
|
unless old_state == new_state
|
462
|
-
|
463
|
-
previous_state: old_state,
|
464
|
-
next_state: new_state,
|
465
|
-
name: name,
|
466
|
-
user_id: user_id
|
467
|
-
)
|
494
|
+
log_state_changes(state_name: name, old_state: old_state, new_state: new_state)
|
468
495
|
end
|
469
496
|
end
|
470
497
|
end
|
471
498
|
|
499
|
+
def log_state_changes(state_name:, old_state:, new_state:)
|
500
|
+
state_changes.create(
|
501
|
+
previous_state: old_state,
|
502
|
+
next_state: new_state,
|
503
|
+
name: state_name,
|
504
|
+
user_id: user_id
|
505
|
+
)
|
506
|
+
end
|
507
|
+
|
472
508
|
def coupon_code=(code)
|
473
509
|
@coupon_code = begin
|
474
510
|
code.strip.downcase
|
475
|
-
rescue
|
511
|
+
rescue StandardError
|
476
512
|
nil
|
477
513
|
end
|
478
514
|
end
|
@@ -533,7 +569,7 @@ module Spree
|
|
533
569
|
end
|
534
570
|
|
535
571
|
def shipping_eq_billing_address?
|
536
|
-
|
572
|
+
bill_address == ship_address
|
537
573
|
end
|
538
574
|
|
539
575
|
def set_shipments_cost
|
@@ -688,12 +724,20 @@ module Spree
|
|
688
724
|
use_billing.in?([true, 'true', '1'])
|
689
725
|
end
|
690
726
|
|
727
|
+
def ensure_currency_presence
|
728
|
+
self.currency ||= store.default_currency || Spree::Config[:currency]
|
729
|
+
end
|
730
|
+
|
691
731
|
def set_currency
|
692
|
-
|
732
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
733
|
+
Spree::Order#set_currency was renamed to Spree::Order#ensure_currency_presence
|
734
|
+
and will be removed in Spree 4.0. Please update your code to avoid problems after update
|
735
|
+
DEPRECATION
|
736
|
+
ensure_currency_presence
|
693
737
|
end
|
694
738
|
|
695
739
|
def create_token
|
696
|
-
self.
|
740
|
+
self.token ||= generate_token
|
697
741
|
end
|
698
742
|
|
699
743
|
def collect_payment_methods
|
@@ -16,6 +16,7 @@ module Spree
|
|
16
16
|
|
17
17
|
def self.checkout_flow(&block)
|
18
18
|
return @checkout_flow unless block_given?
|
19
|
+
|
19
20
|
@checkout_flow = block
|
20
21
|
define_state_machine!
|
21
22
|
end
|
@@ -124,6 +125,7 @@ module Spree
|
|
124
125
|
self.checkout_steps[name] = options
|
125
126
|
self.previous_states.each { |state| add_transition({ from: state, to: name }.merge(options)) }
|
126
127
|
return self.previous_states << name if options[:if]
|
128
|
+
|
127
129
|
self.previous_states = [name]
|
128
130
|
end
|
129
131
|
|
@@ -166,6 +168,7 @@ module Spree
|
|
166
168
|
|
167
169
|
def self.find_transition(options = {})
|
168
170
|
return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
|
171
|
+
|
169
172
|
self.next_event_transitions.detect do |transition|
|
170
173
|
transition[options[:from].to_sym] == options[:to].to_sym
|
171
174
|
end
|
@@ -182,6 +185,7 @@ module Spree
|
|
182
185
|
def checkout_steps
|
183
186
|
steps = (self.class.checkout_steps.each_with_object([]) do |(step, options), checkout_steps|
|
184
187
|
next if options.include?(:if) && !options[:if].call(self)
|
188
|
+
|
185
189
|
checkout_steps << step
|
186
190
|
end).map(&:to_s)
|
187
191
|
# Ensure there is always a complete step
|
@@ -203,6 +207,7 @@ module Spree
|
|
203
207
|
|
204
208
|
def can_go_to_state?(state)
|
205
209
|
return false unless has_checkout_step?(self.state) && has_checkout_step?(state)
|
210
|
+
|
206
211
|
checkout_step_index(state) > checkout_step_index(self.state)
|
207
212
|
end
|
208
213
|
|
@@ -260,26 +265,31 @@ module Spree
|
|
260
265
|
|
261
266
|
def clone_billing
|
262
267
|
return unless !bill_address_id && user.bill_address.try(:valid?)
|
268
|
+
|
263
269
|
self.bill_address = user.bill_address.try(:clone)
|
264
270
|
end
|
265
271
|
|
266
272
|
def clone_shipping
|
267
273
|
return unless !ship_address_id && user.ship_address.try(:valid?)
|
274
|
+
|
268
275
|
self.ship_address = user.ship_address.try(:clone)
|
269
276
|
end
|
270
277
|
|
271
278
|
def persist_user_address!
|
272
279
|
return unless !temporary_address && user && user.respond_to?(:persist_order_address) && bill_address_id
|
280
|
+
|
273
281
|
user.persist_order_address(self)
|
274
282
|
end
|
275
283
|
|
276
284
|
def persist_user_credit_card
|
277
285
|
return unless !temporary_credit_card && user_id && valid_credit_cards.present?
|
286
|
+
|
278
287
|
valid_credit_cards.first.update(user_id: user_id, default: true)
|
279
288
|
end
|
280
289
|
|
281
290
|
def assign_default_credit_card
|
282
291
|
return unless payments.from_credit_card.size.empty? && user_has_valid_default_card? && payment_required?
|
292
|
+
|
283
293
|
cc = user.default_credit_card
|
284
294
|
payments.create!(payment_method_id: cc.payment_method_id, source: cc, amount: total)
|
285
295
|
end
|
@@ -1,39 +1,34 @@
|
|
1
1
|
module Spree
|
2
2
|
class Order < Spree::Base
|
3
3
|
module StoreCredit
|
4
|
-
def add_store_credit_payments
|
5
|
-
|
4
|
+
def add_store_credit_payments(amount = nil)
|
5
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
6
|
+
Spree::Order#add_store_credit_payments method is deprecated and will be removed in Spree 4.0.
|
7
|
+
Please use Spree::Checkout::AddStoreCredit service to add Store Credit to Order.
|
8
|
+
DEPRECATION
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
if user && user.store_credits.any?
|
10
|
-
payment_method = Spree::PaymentMethod::StoreCredit.available.first
|
11
|
-
raise 'Store credit payment method could not be found' unless payment_method
|
12
|
-
|
13
|
-
user.store_credits.order_by_priority.each do |credit|
|
14
|
-
break if remaining_total.zero?
|
15
|
-
next if credit.amount_remaining.zero?
|
16
|
-
|
17
|
-
amount_to_take = store_credit_amount(credit, remaining_total)
|
18
|
-
create_store_credit_payment(payment_method, credit, amount_to_take)
|
19
|
-
remaining_total -= amount_to_take
|
20
|
-
end
|
21
|
-
payments.store_credits.checkout
|
22
|
-
end
|
10
|
+
Spree::Checkout::AddStoreCredit.call(order: self, amount: amount)
|
23
11
|
end
|
24
12
|
|
25
13
|
def remove_store_credit_payments
|
26
|
-
|
14
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
15
|
+
Spree::Order#remove_store_credit_payments method is deprecated and will be removed in Spree 4.0.
|
16
|
+
Please use Spree::Checkout::RemoveStoreCredit service to remove Store Credit from Order.
|
17
|
+
DEPRECATION
|
18
|
+
|
19
|
+
Spree::Checkout::RemoveStoreCredit.call(order: self)
|
27
20
|
end
|
28
21
|
|
29
22
|
def covered_by_store_credit?
|
30
23
|
return false unless user
|
24
|
+
|
31
25
|
user.total_available_store_credit >= total
|
32
26
|
end
|
33
27
|
alias covered_by_store_credit covered_by_store_credit?
|
34
28
|
|
35
29
|
def total_available_store_credit
|
36
30
|
return 0.0 unless user
|
31
|
+
|
37
32
|
user.total_available_store_credit
|
38
33
|
end
|
39
34
|
|
@@ -80,22 +75,6 @@ module Spree
|
|
80
75
|
def display_store_credit_remaining_after_capture
|
81
76
|
Spree::Money.new(total_available_store_credit - total_applicable_store_credit, currency: currency)
|
82
77
|
end
|
83
|
-
|
84
|
-
private
|
85
|
-
|
86
|
-
def create_store_credit_payment(payment_method, credit, amount)
|
87
|
-
payments.create!(
|
88
|
-
source: credit,
|
89
|
-
payment_method: payment_method,
|
90
|
-
amount: amount,
|
91
|
-
state: 'checkout',
|
92
|
-
response_code: credit.generate_authorization_code
|
93
|
-
)
|
94
|
-
end
|
95
|
-
|
96
|
-
def store_credit_amount(credit, total)
|
97
|
-
[credit.amount_remaining, total].min
|
98
|
-
end
|
99
78
|
end
|
100
79
|
end
|
101
80
|
end
|
@@ -7,134 +7,38 @@ module Spree
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def add(variant, quantity = 1, options = {})
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
after_add_or_remove(line_item, options)
|
15
|
-
end
|
16
|
-
end
|
10
|
+
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
11
|
+
OrderContents#add method is deprecated and will be removed in Spree 4.0. Please use Spree::Cart::AddItem service
|
12
|
+
to add items to cart.
|
13
|
+
EOS
|
17
14
|
|
18
|
-
|
19
|
-
ActiveRecord::Base.transaction do
|
20
|
-
line_item = remove_from_line_item(variant, quantity, options)
|
21
|
-
after_add_or_remove(line_item, options)
|
22
|
-
end
|
15
|
+
Spree::Cart::AddItem.call(order: order, variant: variant, quantity: quantity, options: options).value
|
23
16
|
end
|
24
17
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
def update_cart(params)
|
33
|
-
if order.update_attributes(filter_order_items(params))
|
34
|
-
order.line_items = order.line_items.select { |li| li.quantity > 0 }
|
35
|
-
# Update totals, then check if the order is eligible for any cart promotions.
|
36
|
-
# If we do not update first, then the item total will be wrong and ItemTotal
|
37
|
-
# promotion rules would not be triggered.
|
38
|
-
ActiveRecord::Base.transaction do
|
39
|
-
persist_totals
|
40
|
-
PromotionHandler::Cart.new(order).activate
|
41
|
-
order.ensure_updated_shipments
|
42
|
-
order.payments.store_credits.checkout.destroy_all
|
43
|
-
persist_totals
|
44
|
-
end
|
45
|
-
true
|
46
|
-
else
|
47
|
-
false
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def after_add_or_remove(line_item, options = {})
|
54
|
-
order.payments.store_credits.checkout.destroy_all
|
55
|
-
persist_totals
|
56
|
-
shipment = options[:shipment]
|
57
|
-
if shipment.present?
|
58
|
-
# ADMIN END SHIPMENT RATE FIX
|
59
|
-
# refresh shipments to ensure correct shipment amount is calculated when using price sack calculator
|
60
|
-
# for calculating shipment rates.
|
61
|
-
# Currently shipment rate is calculated on previous order total instead of current order total when updating a shipment from admin end.
|
62
|
-
order.refresh_shipment_rates(ShippingMethod::DISPLAY_ON_BACK_END)
|
63
|
-
shipment.update_amounts
|
64
|
-
else
|
65
|
-
order.ensure_updated_shipments
|
66
|
-
end
|
67
|
-
PromotionHandler::Cart.new(order, line_item).activate
|
68
|
-
Adjustable::AdjustmentsUpdater.update(line_item)
|
69
|
-
TaxRate.adjust(order, [line_item]) if options[:line_item_created]
|
70
|
-
persist_totals
|
71
|
-
line_item
|
72
|
-
end
|
73
|
-
|
74
|
-
def filter_order_items(params)
|
75
|
-
return params if params[:line_items_attributes].nil? || params[:line_items_attributes][:id]
|
76
|
-
|
77
|
-
line_item_ids = order.line_items.pluck(:id)
|
78
|
-
|
79
|
-
params[:line_items_attributes].each_pair do |id, value|
|
80
|
-
unless line_item_ids.include?(value[:id].to_i) || value[:variant_id].present?
|
81
|
-
params[:line_items_attributes].delete(id)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
params
|
85
|
-
end
|
86
|
-
|
87
|
-
def order_updater
|
88
|
-
@updater ||= OrderUpdater.new(order)
|
89
|
-
end
|
90
|
-
|
91
|
-
def persist_totals
|
92
|
-
order_updater.update
|
93
|
-
end
|
94
|
-
|
95
|
-
def add_to_line_item(variant, quantity, options = {})
|
96
|
-
line_item = grab_line_item_by_variant(variant, false, options)
|
97
|
-
|
98
|
-
if line_item
|
99
|
-
line_item.quantity += quantity.to_i
|
100
|
-
line_item.currency = currency unless currency.nil?
|
101
|
-
else
|
102
|
-
options_params = options.is_a?(ActionController::Parameters) ? options : ActionController::Parameters.new(options.to_h)
|
103
|
-
opts = options_params.
|
104
|
-
permit(PermittedAttributes.line_item_attributes).to_h.
|
105
|
-
merge(currency: order.currency)
|
18
|
+
def remove(variant, quantity = 1, options = {})
|
19
|
+
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
20
|
+
OrderContents#remove method is deprecated and will be removed in Spree 4.0. Please use Spree::Cart::RemoveItem
|
21
|
+
service to remove item from cart.
|
22
|
+
EOS
|
106
23
|
|
107
|
-
|
108
|
-
variant: variant,
|
109
|
-
options: opts)
|
110
|
-
end
|
111
|
-
line_item.target_shipment = options[:shipment] if options.key? :shipment
|
112
|
-
line_item.save!
|
113
|
-
line_item
|
24
|
+
Spree::Cart::RemoveItem.call(order: order, variant: variant, quantity: quantity, options: options).value
|
114
25
|
end
|
115
26
|
|
116
|
-
def
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
if line_item.quantity.zero?
|
122
|
-
order.line_items.destroy(line_item)
|
123
|
-
else
|
124
|
-
line_item.save!
|
125
|
-
end
|
27
|
+
def remove_line_item(line_item, options = {})
|
28
|
+
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
29
|
+
OrderContents#remove_line_item method is deprecated and will be removed in Spree 4.0.
|
30
|
+
EOS
|
126
31
|
|
127
|
-
line_item
|
32
|
+
Spree::Cart::RemoveLineItem.call(order: @order, line_item: line_item, options: options).value
|
128
33
|
end
|
129
34
|
|
130
|
-
def
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
end
|
35
|
+
def update_cart(params)
|
36
|
+
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
37
|
+
OrderContents#update_cart method is deprecated and will be removed in Spree 4.0. Please use Spree::Cart::Update
|
38
|
+
service to update cart.
|
39
|
+
EOS
|
136
40
|
|
137
|
-
|
41
|
+
Spree::Cart::Update.call(order: order, params: params).value
|
138
42
|
end
|
139
43
|
end
|
140
44
|
end
|