solidus_core 2.10.0.beta1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/helpers/spree/base_helper.rb +4 -4
- data/app/helpers/spree/products_helper.rb +2 -1
- data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
- data/app/models/concerns/spree/user_methods.rb +2 -2
- data/app/models/spree/address.rb +11 -15
- data/app/models/spree/adjustment.rb +11 -0
- data/app/models/spree/calculator/price_sack.rb +1 -1
- data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
- data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
- data/app/models/spree/calculator/tiered_percent.rb +6 -6
- data/app/models/spree/carton.rb +1 -1
- data/app/models/spree/credit_card.rb +2 -2
- data/app/models/spree/inventory_unit.rb +1 -19
- data/app/models/spree/line_item.rb +1 -1
- data/app/models/spree/order.rb +3 -2
- data/app/models/spree/order/checkout.rb +1 -1
- data/app/models/spree/order/payments.rb +2 -2
- data/app/models/spree/order_capturing.rb +2 -2
- data/app/models/spree/order_taxation.rb +2 -2
- data/app/models/spree/payment.rb +4 -41
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment_method.rb +2 -2
- data/app/models/spree/product.rb +3 -3
- data/app/models/spree/product/scopes.rb +8 -7
- data/app/models/spree/promotion.rb +27 -12
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
- data/app/models/spree/promotion/rules/option_value.rb +2 -2
- data/app/models/spree/promotion/rules/product.rb +3 -3
- data/app/models/spree/promotion_action.rb +1 -1
- data/app/models/spree/promotion_chooser.rb +2 -2
- data/app/models/spree/promotion_code.rb +9 -8
- data/app/models/spree/promotion_code/batch_builder.rb +3 -3
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/refund.rb +2 -2
- data/app/models/spree/reimbursement.rb +3 -11
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -2
- data/app/models/spree/return_authorization.rb +1 -7
- data/app/models/spree/return_item.rb +3 -42
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/shipment.rb +4 -38
- data/app/models/spree/shipping_calculator.rb +0 -4
- data/app/models/spree/shipping_method.rb +1 -1
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/stock/differentiator.rb +1 -1
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock_item.rb +1 -1
- data/app/models/spree/stock_quantities.rb +13 -12
- data/app/models/spree/tax_calculator/default.rb +0 -4
- data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
- data/app/models/spree/tax_rate.rb +4 -0
- data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
- data/app/models/spree/user_last_url_storer.rb +46 -0
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
- data/app/models/spree/variant.rb +9 -9
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +1 -1
- data/app/models/spree/zone.rb +1 -1
- data/config/initializers/money.rb +2 -0
- data/config/locales/en.yml +12 -0
- data/lib/generators/spree/install/install_generator.rb +3 -0
- data/lib/generators/spree/install/templates/config/initializers/spree.rb.tt +8 -0
- data/lib/spree/app_configuration.rb +18 -3
- data/lib/spree/core.rb +12 -0
- data/lib/spree/core/controller_helpers/auth.rb +1 -13
- data/lib/spree/core/engine.rb +2 -2
- data/lib/spree/core/environment_extension.rb +9 -0
- data/lib/spree/core/importer/order.rb +26 -26
- data/lib/spree/core/product_filters.rb +15 -15
- data/lib/spree/core/role_configuration.rb +2 -2
- data/lib/spree/core/search/variant.rb +1 -1
- data/lib/spree/core/state_machines.rb +78 -0
- data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
- data/lib/spree/core/state_machines/payment.rb +61 -0
- data/lib/spree/core/state_machines/reimbursement.rb +33 -0
- data/lib/spree/core/state_machines/return_authorization.rb +32 -0
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/lib/spree/core/state_machines/shipment.rb +58 -0
- data/lib/spree/core/stock_configuration.rb +1 -0
- data/lib/spree/core/validators/email.rb +1 -8
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +2 -2
- data/lib/spree/permission_sets/user_management.rb +3 -0
- data/lib/spree/permitted_attributes.rb +3 -3
- data/lib/spree/preferences/static_model_preferences.rb +2 -2
- data/lib/spree/testing_support/dummy_app.rb +4 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +7 -0
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/solidus_core.gemspec +2 -2
- data/spec/lib/spree/core/environment_extension_spec.rb +12 -1
- data/spec/lib/spree/core/stock_configuration_spec.rb +36 -0
- data/spec/lib/spree/core/validators/email_spec.rb +18 -18
- data/spec/models/spree/address_spec.rb +23 -0
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +2 -2
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +24 -15
- data/spec/models/spree/carton_spec.rb +8 -0
- data/spec/models/spree/classification_spec.rb +21 -9
- data/spec/models/spree/concerns/user_address_book_spec.rb +4 -4
- data/spec/models/spree/concerns/user_methods_spec.rb +2 -1
- data/spec/models/spree/order_merger_spec.rb +3 -3
- data/spec/models/spree/order_spec.rb +8 -15
- data/spec/models/spree/order_updater_spec.rb +4 -3
- data/spec/models/spree/payment_create_spec.rb +4 -14
- data/spec/models/spree/permission_sets/user_management_spec.rb +2 -0
- data/spec/models/spree/preference_spec.rb +4 -4
- data/spec/models/spree/preferences/preferable_spec.rb +3 -3
- data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -2
- data/spec/models/spree/promotion_rule_spec.rb +6 -6
- data/spec/models/spree/promotion_spec.rb +73 -52
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +1 -1
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
- data/spec/models/spree/returns_calculator_spec.rb +2 -2
- data/spec/models/spree/shipping_calculator_spec.rb +1 -13
- data/spec/models/spree/shipping_method_spec.rb +32 -0
- data/spec/models/spree/stock/availability_validator_spec.rb +2 -2
- data/spec/models/spree/stock/differentiator_spec.rb +2 -2
- data/spec/models/spree/stock/estimator_spec.rb +3 -3
- data/spec/models/spree/stock/package_spec.rb +28 -28
- data/spec/models/spree/stock/simple_coordinator_spec.rb +11 -11
- data/spec/models/spree/stock/splitter/base_spec.rb +4 -4
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +7 -7
- data/spec/models/spree/stock_quantities_spec.rb +1 -1
- data/spec/models/spree/store_credit_spec.rb +1 -1
- data/spec/models/spree/tax_rate_spec.rb +1 -0
- data/spec/models/spree/taxons/paperclip_attachment_spec.rb +29 -0
- data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +31 -0
- data/spec/models/spree/user_last_url_storer_spec.rb +60 -0
- metadata +17 -12
- data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -162
- data/spec/models/spree/order/updating_spec.rb +0 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0aabcb199c31d99f564afef69740c95363dff238117b5692ff26226f91f6bf06
|
|
4
|
+
data.tar.gz: fd982fa13569c953468edb060c7019f541b435cd404787b8c0674ff3db324606
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d0532174df1e8cac35d61f180102c5123dec9f43d41b29d61a6ce37a87cb1d29f60a902de56ba5b0394094ef5c0ea28e13ca81033df598de93209dcf7105dbc5
|
|
7
|
+
data.tar.gz: 9df7b935ee802245a93da97b4341aacb7343aac7e6319b5b1673b30a0145f9f46d539aa5c2e3ab190e1e7dbf69b37843ff8c4739497ef24233a572fa49eb6d4d
|
|
@@ -79,16 +79,16 @@ module Spree
|
|
|
79
79
|
|
|
80
80
|
crumbs << [t('spree.products'), products_path]
|
|
81
81
|
if taxon
|
|
82
|
-
crumbs += taxon.ancestors.collect { |
|
|
82
|
+
crumbs += taxon.ancestors.collect { |ancestor| [ancestor.name, spree.nested_taxons_path(ancestor.permalink)] } unless taxon.ancestors.empty?
|
|
83
83
|
crumbs << [taxon.name, spree.nested_taxons_path(taxon.permalink)]
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
separator = raw(separator)
|
|
87
87
|
|
|
88
|
-
items = crumbs.each_with_index.collect do |crumb,
|
|
88
|
+
items = crumbs.each_with_index.collect do |crumb, index|
|
|
89
89
|
content_tag(:li, itemprop: 'itemListElement', itemscope: '', itemtype: 'https://schema.org/ListItem') do
|
|
90
90
|
link_to(crumb.last, itemprop: 'item') do
|
|
91
|
-
content_tag(:span, crumb.first, itemprop: 'name') + tag('meta', { itemprop: 'position', content: (
|
|
91
|
+
content_tag(:span, crumb.first, itemprop: 'name') + tag('meta', { itemprop: 'position', content: (index + 1).to_s }, false, false)
|
|
92
92
|
end + (crumb == crumbs.last ? '' : separator)
|
|
93
93
|
end
|
|
94
94
|
end
|
|
@@ -122,7 +122,7 @@ module Spree
|
|
|
122
122
|
countries.collect do |country|
|
|
123
123
|
country.name = country_names.fetch(country.iso, country.name)
|
|
124
124
|
country
|
|
125
|
-
end.sort_by { |
|
|
125
|
+
end.sort_by { |country| country.name.parameterize }
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
def seo_url(taxon)
|
|
@@ -36,7 +36,8 @@ module Spree
|
|
|
36
36
|
def variant_full_price(variant)
|
|
37
37
|
return if variant.product.variants
|
|
38
38
|
.with_prices(current_pricing_options)
|
|
39
|
-
.all? { |
|
|
39
|
+
.all? { |variant_with_prices| variant_with_prices.price_same_as_master?(current_pricing_options) }
|
|
40
|
+
|
|
40
41
|
variant.price_for(current_pricing_options).to_html
|
|
41
42
|
end
|
|
42
43
|
|
|
@@ -14,13 +14,13 @@ module Spree
|
|
|
14
14
|
.promotion_code_batch_finished(promotion_code_batch)
|
|
15
15
|
.deliver_now
|
|
16
16
|
end
|
|
17
|
-
rescue StandardError =>
|
|
17
|
+
rescue StandardError => error
|
|
18
18
|
if promotion_code_batch.email?
|
|
19
19
|
Spree::Config.promotion_code_batch_mailer_class
|
|
20
20
|
.promotion_code_batch_errored(promotion_code_batch)
|
|
21
21
|
.deliver_now
|
|
22
22
|
end
|
|
23
|
-
raise
|
|
23
|
+
raise error
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
end
|
|
@@ -73,8 +73,8 @@ module Spree
|
|
|
73
73
|
deprecate total_available_store_credit: :available_store_credit_total, deprecator: Spree::Deprecation
|
|
74
74
|
|
|
75
75
|
def available_store_credit_total(currency:)
|
|
76
|
-
store_credits.
|
|
77
|
-
select { |
|
|
76
|
+
store_credits.to_a.
|
|
77
|
+
select { |credit| credit.currency == currency }.
|
|
78
78
|
sum(&:amount_remaining)
|
|
79
79
|
end
|
|
80
80
|
|
data/app/models/spree/address.rb
CHANGED
|
@@ -30,8 +30,9 @@ module Spree
|
|
|
30
30
|
where(value_attributes(attributes))
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
# @return [Address] an address with default attributes
|
|
34
|
+
def self.build_default(*args, &block)
|
|
35
|
+
where(country: Spree::Country.default).build(*args, &block)
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
# @return [Address] an equal address already in the database or a newly created one
|
|
@@ -58,21 +59,16 @@ module Spree
|
|
|
58
59
|
end
|
|
59
60
|
|
|
60
61
|
# @return [Hash] hash of attributes contributing to value equality with optional merge
|
|
61
|
-
def self.value_attributes(base_attributes, merge_attributes =
|
|
62
|
-
|
|
63
|
-
base = base_attributes.dup
|
|
64
|
-
|
|
65
|
-
base.stringify_keys!
|
|
66
|
-
|
|
67
|
-
if merge_attributes
|
|
68
|
-
base.merge!(merge_attributes.stringify_keys)
|
|
69
|
-
end
|
|
62
|
+
def self.value_attributes(base_attributes, merge_attributes = {})
|
|
63
|
+
base = base_attributes.stringify_keys.merge(merge_attributes.stringify_keys)
|
|
70
64
|
|
|
71
65
|
# TODO: Deprecate these aliased attributes
|
|
72
|
-
base['firstname'] = base
|
|
73
|
-
base['lastname'] = base
|
|
66
|
+
base['firstname'] = base['first_name'] if base.key?('first_name')
|
|
67
|
+
base['lastname'] = base['last_name'] if base.key?('last_name')
|
|
68
|
+
|
|
69
|
+
excluded_attributes = DB_ONLY_ATTRS + %w(first_name last_name)
|
|
74
70
|
|
|
75
|
-
base.except
|
|
71
|
+
base.except(*excluded_attributes)
|
|
76
72
|
end
|
|
77
73
|
|
|
78
74
|
# @return [Hash] hash of attributes contributing to value equality
|
|
@@ -121,7 +117,7 @@ module Spree
|
|
|
121
117
|
# @deprecated Do not use this
|
|
122
118
|
def empty?
|
|
123
119
|
Spree::Deprecation.warn("Address#empty? is deprecated.", caller)
|
|
124
|
-
attributes.except('id', 'created_at', 'updated_at', 'country_id').all? { |_,
|
|
120
|
+
attributes.except('id', 'created_at', 'updated_at', 'country_id').all? { |_, value| value.nil? }
|
|
125
121
|
end
|
|
126
122
|
|
|
127
123
|
# This exists because the default Object#blank?, checks empty? if it is
|
|
@@ -56,6 +56,17 @@ module Spree
|
|
|
56
56
|
extend DisplayMoney
|
|
57
57
|
money_methods :amount
|
|
58
58
|
|
|
59
|
+
# Returns Adjustments of completed Orders.
|
|
60
|
+
#
|
|
61
|
+
# @param excluded_orders [Array<Spree::Order>] Orders to exclude from query
|
|
62
|
+
# @return [ActiveRecord::Relation] Scoped Adjustments
|
|
63
|
+
def self.in_completed_orders(excluded_orders: [])
|
|
64
|
+
joins(:order).
|
|
65
|
+
merge(Spree::Order.complete).
|
|
66
|
+
where.not(spree_orders: { id: excluded_orders }).
|
|
67
|
+
distinct
|
|
68
|
+
end
|
|
69
|
+
|
|
59
70
|
def finalize!
|
|
60
71
|
update!(finalized: true)
|
|
61
72
|
end
|
|
@@ -12,7 +12,7 @@ module Spree
|
|
|
12
12
|
# as object we always get line items, as calculable we have Coupon, ShippingMethod
|
|
13
13
|
def compute(object)
|
|
14
14
|
if object.is_a?(Array)
|
|
15
|
-
base = object.map { |
|
|
15
|
+
base = object.map { |element| element.respond_to?(:amount) ? element.amount : BigDecimal(element.to_s) }.sum
|
|
16
16
|
else
|
|
17
17
|
base = object.respond_to?(:amount) ? object.amount : BigDecimal(object.to_s)
|
|
18
18
|
end
|
|
@@ -18,9 +18,9 @@ module Spree
|
|
|
18
18
|
def compute_from_quantity(quantity)
|
|
19
19
|
sum = 0
|
|
20
20
|
max = preferred_max_items.to_i
|
|
21
|
-
quantity.times do |
|
|
21
|
+
quantity.times do |index|
|
|
22
22
|
# check max value to avoid divide by 0 errors
|
|
23
|
-
if (max == 0 &&
|
|
23
|
+
if (max == 0 && index == 0) || (max > 0) && (index % max == 0)
|
|
24
24
|
sum += preferred_first_item.to_f
|
|
25
25
|
else
|
|
26
26
|
sum += preferred_additional_item.to_f
|
|
@@ -11,8 +11,8 @@ module Spree
|
|
|
11
11
|
before_validation do
|
|
12
12
|
# Convert tier values to decimals. Strings don't do us much good.
|
|
13
13
|
if preferred_tiers.is_a?(Hash)
|
|
14
|
-
self.preferred_tiers = preferred_tiers.map do |
|
|
15
|
-
[cast_to_d(
|
|
14
|
+
self.preferred_tiers = preferred_tiers.map do |key, value|
|
|
15
|
+
[cast_to_d(key.to_s), cast_to_d(value.to_s)]
|
|
16
16
|
end.to_h
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -20,8 +20,8 @@ module Spree
|
|
|
20
20
|
validate :preferred_tiers_content
|
|
21
21
|
|
|
22
22
|
def compute(object)
|
|
23
|
-
_base, amount = preferred_tiers.sort.reverse.detect do |
|
|
24
|
-
object.amount >=
|
|
23
|
+
_base, amount = preferred_tiers.sort.reverse.detect do |value, _|
|
|
24
|
+
object.amount >= value
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
if preferred_currency.casecmp(object.currency).zero?
|
|
@@ -41,7 +41,7 @@ module Spree
|
|
|
41
41
|
|
|
42
42
|
def preferred_tiers_content
|
|
43
43
|
if preferred_tiers.is_a? Hash
|
|
44
|
-
unless preferred_tiers.keys.all?{ |
|
|
44
|
+
unless preferred_tiers.keys.all?{ |key| key.is_a?(Numeric) && key > 0 }
|
|
45
45
|
errors.add(:base, :keys_should_be_positive_number)
|
|
46
46
|
end
|
|
47
47
|
else
|
|
@@ -11,8 +11,8 @@ module Spree
|
|
|
11
11
|
before_validation do
|
|
12
12
|
# Convert tier values to decimals. Strings don't do us much good.
|
|
13
13
|
if preferred_tiers.is_a?(Hash)
|
|
14
|
-
self.preferred_tiers = preferred_tiers.map do |
|
|
15
|
-
[cast_to_d(
|
|
14
|
+
self.preferred_tiers = preferred_tiers.map do |key, value|
|
|
15
|
+
[cast_to_d(key.to_s), cast_to_d(value.to_s)]
|
|
16
16
|
end.to_h
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -26,8 +26,8 @@ module Spree
|
|
|
26
26
|
def compute(object)
|
|
27
27
|
order = object.is_a?(Order) ? object : object.order
|
|
28
28
|
|
|
29
|
-
_base, percent = preferred_tiers.sort.reverse.detect do |
|
|
30
|
-
order.item_total >=
|
|
29
|
+
_base, percent = preferred_tiers.sort.reverse.detect do |value, _|
|
|
30
|
+
order.item_total >= value
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
if preferred_currency.casecmp(order.currency).zero?
|
|
@@ -48,10 +48,10 @@ module Spree
|
|
|
48
48
|
|
|
49
49
|
def preferred_tiers_content
|
|
50
50
|
if preferred_tiers.is_a? Hash
|
|
51
|
-
unless preferred_tiers.keys.all?{ |
|
|
51
|
+
unless preferred_tiers.keys.all?{ |key| key.is_a?(Numeric) && key > 0 }
|
|
52
52
|
errors.add(:base, :keys_should_be_positive_number)
|
|
53
53
|
end
|
|
54
|
-
unless preferred_tiers.values.all?{ |
|
|
54
|
+
unless preferred_tiers.values.all?{ |key| key.is_a?(Numeric) && key >= 0 && key <= 100 }
|
|
55
55
|
errors.add(:base, :values_should_be_percent)
|
|
56
56
|
end
|
|
57
57
|
else
|
data/app/models/spree/carton.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
class Spree::Carton < Spree::Base
|
|
4
4
|
belongs_to :address, class_name: 'Spree::Address', optional: true
|
|
5
5
|
belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :cartons, optional: true
|
|
6
|
-
belongs_to :shipping_method, class_name: 'Spree::ShippingMethod', inverse_of: :cartons, optional: true
|
|
6
|
+
belongs_to :shipping_method, -> { with_discarded }, class_name: 'Spree::ShippingMethod', inverse_of: :cartons, optional: true
|
|
7
7
|
|
|
8
8
|
has_many :inventory_units, class_name: "Spree::InventoryUnit", inverse_of: :carton, dependent: :nullify
|
|
9
9
|
has_many :orders, -> { distinct }, through: :inventory_units
|
|
@@ -47,13 +47,13 @@ module Spree
|
|
|
47
47
|
}.freeze
|
|
48
48
|
|
|
49
49
|
def default
|
|
50
|
-
Spree::Deprecation.warn("CreditCard
|
|
50
|
+
Spree::Deprecation.warn("CreditCard#default is deprecated. Please use user.wallet.default_wallet_payment_source instead.", caller)
|
|
51
51
|
return false if user.nil?
|
|
52
52
|
user.wallet.default_wallet_payment_source.try!(:payment_source) == self
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def default=(set_as_default)
|
|
56
|
-
Spree::Deprecation.warn("CreditCard
|
|
56
|
+
Spree::Deprecation.warn("CreditCard#default= is deprecated. Please use user.wallet.default_wallet_payment_source= instead.", caller)
|
|
57
57
|
if user.nil?
|
|
58
58
|
raise "Cannot set 'default' on a credit card without a user"
|
|
59
59
|
elsif set_as_default # setting this card as default
|
|
@@ -58,25 +58,7 @@ module Spree
|
|
|
58
58
|
|
|
59
59
|
scope :shippable, -> { on_hand }
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
state_machine initial: :on_hand do
|
|
63
|
-
event :fill_backorder do
|
|
64
|
-
transition to: :on_hand, from: :backordered
|
|
65
|
-
end
|
|
66
|
-
after_transition on: :fill_backorder, do: :fulfill_order
|
|
67
|
-
|
|
68
|
-
event :ship do
|
|
69
|
-
transition to: :shipped, if: :allow_ship?
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
event :return do
|
|
73
|
-
transition to: :returned, from: :shipped
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
event :cancel do
|
|
77
|
-
transition to: :canceled, from: CANCELABLE_STATES.map(&:to_sym)
|
|
78
|
-
end
|
|
79
|
-
end
|
|
61
|
+
include ::Spree::Config.state_machines.inventory_unit
|
|
80
62
|
|
|
81
63
|
# Updates the given inventory units to not be pending.
|
|
82
64
|
#
|
|
@@ -72,7 +72,7 @@ module Spree
|
|
|
72
72
|
# @return [BigDecimal] the amount of this item, taking into consideration
|
|
73
73
|
# all non-tax adjustments.
|
|
74
74
|
def total_before_tax
|
|
75
|
-
amount + adjustments.select { |
|
|
75
|
+
amount + adjustments.select { |value| !value.tax? && value.eligible? }.sum(&:amount)
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
# @return [BigDecimal] the amount of this line item before VAT tax
|
data/app/models/spree/order.rb
CHANGED
|
@@ -93,6 +93,7 @@ module Spree
|
|
|
93
93
|
|
|
94
94
|
# Payments
|
|
95
95
|
has_many :payments, dependent: :destroy, inverse_of: :order
|
|
96
|
+
has_many :valid_store_credit_payments, -> { store_credits.valid }, inverse_of: :order, class_name: 'Spree::Payment', foreign_key: :order_id
|
|
96
97
|
|
|
97
98
|
# Returns
|
|
98
99
|
has_many :return_authorizations, dependent: :destroy, inverse_of: :order
|
|
@@ -531,7 +532,7 @@ module Spree
|
|
|
531
532
|
def create_proposed_shipments
|
|
532
533
|
if completed?
|
|
533
534
|
raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_order_completed'))
|
|
534
|
-
elsif shipments.any? { |
|
|
535
|
+
elsif shipments.any? { |shipment| !shipment.pending? }
|
|
535
536
|
raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_shipments_not_pending'))
|
|
536
537
|
else
|
|
537
538
|
shipments.destroy_all
|
|
@@ -686,7 +687,7 @@ module Spree
|
|
|
686
687
|
|
|
687
688
|
def total_applicable_store_credit
|
|
688
689
|
if can_complete? || complete?
|
|
689
|
-
|
|
690
|
+
valid_store_credit_payments.to_a.sum(&:amount)
|
|
690
691
|
else
|
|
691
692
|
[total, (user.try(:available_store_credit_total, currency: currency) || 0.0)].min
|
|
692
693
|
end
|
|
@@ -41,7 +41,7 @@ module Spree
|
|
|
41
41
|
# On first definition, state_machines will not be defined
|
|
42
42
|
state_machines.clear if respond_to?(:state_machines)
|
|
43
43
|
state_machine :state, initial: :cart, use_transactions: false do
|
|
44
|
-
klass.next_event_transitions.each { |
|
|
44
|
+
klass.next_event_transitions.each { |state| transition(state.merge(on: :next)) }
|
|
45
45
|
|
|
46
46
|
# Persist the state on the order
|
|
47
47
|
after_transition do |order, transition|
|
|
@@ -46,9 +46,9 @@ module Spree
|
|
|
46
46
|
|
|
47
47
|
payment.public_send(method)
|
|
48
48
|
end
|
|
49
|
-
rescue Core::GatewayError =>
|
|
49
|
+
rescue Core::GatewayError => error
|
|
50
50
|
result = !!Spree::Config[:allow_checkout_on_gateway_error]
|
|
51
|
-
errors.add(:base,
|
|
51
|
+
errors.add(:base, error.message) && (return result)
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
end
|
|
@@ -41,8 +41,8 @@ class Spree::OrderCapturing
|
|
|
41
41
|
private
|
|
42
42
|
|
|
43
43
|
def sorted_payments(order)
|
|
44
|
-
order.payments.pending.sort_by do |
|
|
45
|
-
[@sorted_payment_method_classes.index(
|
|
44
|
+
order.payments.pending.sort_by do |payment|
|
|
45
|
+
[@sorted_payment_method_classes.index(payment.payment_method.class), payment.id]
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -25,12 +25,12 @@ module Spree
|
|
|
25
25
|
# @return [void]
|
|
26
26
|
def apply(taxes)
|
|
27
27
|
@order.line_items.each do |item|
|
|
28
|
-
taxed_items = taxes.line_item_taxes.select { |
|
|
28
|
+
taxed_items = taxes.line_item_taxes.select { |element| element.item_id == item.id }
|
|
29
29
|
update_adjustments(item, taxed_items)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
@order.shipments.each do |item|
|
|
33
|
-
taxed_items = taxes.shipment_taxes.select { |
|
|
33
|
+
taxed_items = taxes.shipment_taxes.select { |element| element.item_id == item.id }
|
|
34
34
|
update_adjustments(item, taxed_items)
|
|
35
35
|
end
|
|
36
36
|
end
|
data/app/models/spree/payment.rb
CHANGED
|
@@ -47,7 +47,7 @@ module Spree
|
|
|
47
47
|
default_scope -> { order(:created_at) }
|
|
48
48
|
|
|
49
49
|
scope :from_credit_card, -> { where(source_type: 'Spree::CreditCard') }
|
|
50
|
-
scope :with_state, ->(
|
|
50
|
+
scope :with_state, ->(state) { where(state: state.to_s) }
|
|
51
51
|
# "offset" is reserved by activerecord
|
|
52
52
|
scope :offset_payment, -> { where("source_type = 'Spree::Payment' AND amount < 0 AND state = 'completed'") }
|
|
53
53
|
|
|
@@ -63,44 +63,7 @@ module Spree
|
|
|
63
63
|
scope :store_credits, -> { where(source_type: Spree::StoreCredit.to_s) }
|
|
64
64
|
scope :not_store_credits, -> { where(arel_table[:source_type].not_eq(Spree::StoreCredit.to_s).or(arel_table[:source_type].eq(nil))) }
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
state_machine initial: :checkout do
|
|
68
|
-
# With card payments, happens before purchase or authorization happens
|
|
69
|
-
#
|
|
70
|
-
# Setting it after creating a profile and authorizing a full amount will
|
|
71
|
-
# prevent the payment from being authorized again once Order transitions
|
|
72
|
-
# to complete
|
|
73
|
-
event :started_processing do
|
|
74
|
-
transition from: [:checkout, :pending, :completed, :processing], to: :processing
|
|
75
|
-
end
|
|
76
|
-
# When processing during checkout fails
|
|
77
|
-
event :failure do
|
|
78
|
-
transition from: [:pending, :processing], to: :failed
|
|
79
|
-
end
|
|
80
|
-
# With card payments this represents authorizing the payment
|
|
81
|
-
event :pend do
|
|
82
|
-
transition from: [:checkout, :processing], to: :pending
|
|
83
|
-
end
|
|
84
|
-
# With card payments this represents completing a purchase or capture transaction
|
|
85
|
-
event :complete do
|
|
86
|
-
transition from: [:processing, :pending, :checkout], to: :completed
|
|
87
|
-
end
|
|
88
|
-
event :void do
|
|
89
|
-
transition from: [:pending, :processing, :completed, :checkout], to: :void
|
|
90
|
-
end
|
|
91
|
-
# when the card brand isnt supported
|
|
92
|
-
event :invalidate do
|
|
93
|
-
transition from: [:checkout], to: :invalid
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
after_transition do |payment, transition|
|
|
97
|
-
payment.state_changes.create!(
|
|
98
|
-
previous_state: transition.from,
|
|
99
|
-
next_state: transition.to,
|
|
100
|
-
name: 'payment'
|
|
101
|
-
)
|
|
102
|
-
end
|
|
103
|
-
end
|
|
66
|
+
include ::Spree::Config.state_machines.payment
|
|
104
67
|
|
|
105
68
|
# @return [String] this payment's response code
|
|
106
69
|
def transaction_id
|
|
@@ -232,8 +195,8 @@ module Spree
|
|
|
232
195
|
return if source.imported
|
|
233
196
|
|
|
234
197
|
payment_method.create_profile(self)
|
|
235
|
-
rescue ActiveMerchant::ConnectionError =>
|
|
236
|
-
gateway_error
|
|
198
|
+
rescue ActiveMerchant::ConnectionError => error
|
|
199
|
+
gateway_error error
|
|
237
200
|
end
|
|
238
201
|
|
|
239
202
|
def invalidate_old_payments
|
|
@@ -199,8 +199,8 @@ module Spree
|
|
|
199
199
|
|
|
200
200
|
def protect_from_connection_error
|
|
201
201
|
yield
|
|
202
|
-
rescue ActiveMerchant::ConnectionError =>
|
|
203
|
-
gateway_error(
|
|
202
|
+
rescue ActiveMerchant::ConnectionError => error
|
|
203
|
+
gateway_error(error)
|
|
204
204
|
end
|
|
205
205
|
|
|
206
206
|
def gateway_error(error)
|