spree_core 2.4.10 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/app/assets/images/logo/spree_50.png +0 -0
- data/app/controllers/spree/base_controller.rb +1 -2
- data/app/helpers/spree/base_helper.rb +41 -131
- data/app/helpers/spree/products_helper.rb +1 -1
- data/app/models/concerns/spree/adjustment_source.rb +51 -15
- data/app/models/concerns/spree/calculated_adjustments.rb +1 -0
- data/app/models/concerns/spree/display_money.rb +32 -0
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/number_generator.rb +39 -0
- data/app/models/concerns/spree/user_reporting.rb +3 -8
- data/app/models/spree/address.rb +0 -2
- data/app/models/spree/adjustable/adjustments_updater.rb +70 -0
- data/app/models/spree/adjustable/promotion_accumulator.rb +75 -0
- data/app/models/spree/adjustment.rb +17 -26
- data/app/models/spree/app_configuration.rb +4 -33
- data/app/models/spree/base.rb +0 -3
- data/app/models/spree/calculator.rb +0 -5
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/country.rb +10 -4
- data/app/models/spree/credit_card.rb +14 -15
- data/app/models/spree/customer_return.rb +18 -25
- data/app/models/spree/gateway/bogus.rb +0 -4
- data/app/models/spree/line_item.rb +2 -5
- data/app/models/spree/option_type.rb +2 -4
- data/app/models/spree/option_value.rb +0 -2
- data/app/models/spree/order.rb +74 -134
- data/app/models/spree/order/checkout.rb +1 -1
- data/app/models/spree/order_contents.rb +9 -8
- data/app/models/spree/order_updater.rb +8 -1
- data/app/models/spree/payment.rb +13 -23
- data/app/models/spree/payment/gateway_options.rb +86 -0
- data/app/models/spree/payment/processing.rb +8 -39
- data/app/models/spree/payment_method.rb +3 -6
- data/app/models/spree/price.rb +2 -6
- data/app/models/spree/product.rb +27 -16
- data/app/models/spree/product_property.rb +1 -5
- data/app/models/spree/promotion.rb +7 -15
- data/app/models/spree/promotion/actions/create_adjustment.rb +4 -45
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +8 -63
- data/app/models/spree/promotion/actions/create_line_items.rb +3 -12
- data/app/models/spree/promotion/actions/free_shipping.rb +4 -24
- data/app/models/spree/promotion/rules/option_value.rb +49 -0
- data/app/models/spree/promotion_action.rb +6 -0
- data/app/models/spree/promotion_handler/cart.rb +14 -18
- data/app/models/spree/promotion_handler/coupon.rb +1 -1
- data/app/models/spree/promotion_rule.rb +0 -1
- data/app/models/spree/property.rb +0 -2
- data/app/models/spree/refund.rb +0 -15
- data/app/models/spree/reimbursement.rb +4 -4
- data/app/models/spree/reimbursement_type/credit.rb +1 -1
- data/app/models/spree/reimbursement_type/original_payment.rb +1 -1
- data/app/models/spree/return_authorization.rb +4 -11
- data/app/models/spree/return_item.rb +16 -11
- data/app/models/spree/return_item/eligibility_validator/default.rb +2 -0
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +16 -0
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +16 -0
- data/app/models/spree/shipment.rb +20 -31
- data/app/models/spree/shipment_handler.rb +1 -1
- data/app/models/spree/shipping_method.rb +12 -13
- data/app/models/spree/state.rb +7 -0
- data/app/models/spree/state_change.rb +1 -6
- data/app/models/spree/stock/availability_validator.rb +9 -10
- data/app/models/spree/stock/coordinator.rb +1 -1
- data/app/models/spree/stock/estimator.rb +6 -6
- data/app/models/spree/stock/quantifier.rb +1 -1
- data/app/models/spree/stock_item.rb +1 -7
- data/app/models/spree/stock_location.rb +3 -1
- data/app/models/spree/stock_movement.rb +1 -8
- data/app/models/spree/stock_transfer.rb +11 -5
- data/app/models/spree/store.rb +2 -2
- data/app/models/spree/tax_rate.rb +30 -55
- data/app/models/spree/taxon.rb +8 -8
- data/app/models/spree/taxonomy.rb +8 -13
- data/app/models/spree/tracker.rb +1 -1
- data/app/models/spree/variant.rb +6 -15
- data/app/models/spree/zone.rb +43 -9
- data/config/initializers/user_class_extensions.rb +0 -12
- data/config/locales/en.yml +76 -85
- data/config/routes.rb +1 -1
- data/db/default/spree/countries.rb +23 -13
- data/db/default/spree/states.rb +24 -12
- data/db/default/spree/stores.rb +1 -1
- 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/20140309024355_create_spree_stores.rb +1 -1
- data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -7
- 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/20140911173301_add_kind_to_zone.rb +11 -0
- data/db/migrate/20141215232040_remove_token_permissions_table.rb +6 -0
- data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
- data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
- data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +5 -0
- data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +6 -0
- data/db/migrate/20150122145607_add_resellable_to_return_items.rb +5 -0
- data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +5 -0
- data/db/migrate/20150128032538_remove_environment_from_tracker.rb +6 -0
- data/db/migrate/20150128060325_remove_spree_configurations.rb +16 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +4 -0
- data/lib/spree/core.rb +2 -12
- data/lib/spree/core/controller_helpers/respond_with.rb +8 -18
- data/lib/spree/core/engine.rb +1 -7
- data/lib/spree/core/routes.rb +1 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +10 -10
- data/lib/spree/permitted_attributes.rb +4 -8
- data/lib/spree/testing_support/authorization_helpers.rb +3 -5
- data/lib/spree/testing_support/capybara_ext.rb +3 -3
- data/lib/spree/testing_support/common_rake.rb +2 -2
- data/lib/spree/testing_support/factories/order_factory.rb +3 -13
- data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -3
- data/lib/spree/testing_support/factories/prototype_factory.rb +5 -0
- data/lib/spree/testing_support/factories/return_item_factory.rb +5 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +3 -3
- data/lib/spree/testing_support/factories/tracker_factory.rb +0 -1
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +8 -0
- data/lib/tasks/core.rake +1 -1
- data/lib/tasks/email.rake +6 -3
- metadata +48 -35
- data/app/helpers/spree/checkout_helper.rb +0 -31
- data/app/helpers/spree/orders_helper.rb +0 -17
- data/app/helpers/spree/store_helper.rb +0 -16
- data/app/helpers/spree/taxons_helper.rb +0 -19
- data/app/models/concerns/spree/ransackable_attributes.rb +0 -19
- data/app/models/friendly_id/slug_decorator.rb +0 -3
- data/app/models/spree/billing_integration.rb +0 -21
- data/app/models/spree/configuration.rb +0 -5
- data/app/models/spree/item_adjustments.rb +0 -82
- data/app/models/spree/order_merger.rb +0 -65
- data/app/models/spree/order_populator.rb +0 -43
- data/app/models/spree/product_scope/scopes.rb +0 -47
- data/app/models/spree/variant/scopes.rb +0 -42
- data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
- data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +0 -6
- data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +0 -6
- data/lib/spree/core/controller_helpers/ssl.rb +0 -60
- data/lib/spree/core/permalinks.rb +0 -71
- data/lib/spree/testing_support/factories/configuration_factory.rb +0 -6
@@ -83,9 +83,9 @@ module Spree
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def calculated_total
|
86
|
-
# rounding
|
87
|
-
#
|
88
|
-
return_items.
|
86
|
+
# rounding down to handle edge cases for consecutive partial returns where rounding
|
87
|
+
# might cause us to try to reimburse more than was originally billed
|
88
|
+
return_items.to_a.sum(&:total).to_d.round(2, :down)
|
89
89
|
end
|
90
90
|
|
91
91
|
def paid_amount
|
@@ -144,7 +144,7 @@ module Spree
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def send_reimbursement_email
|
147
|
-
Spree::ReimbursementMailer.reimbursement_email(
|
147
|
+
Spree::ReimbursementMailer.reimbursement_email(id).deliver_later
|
148
148
|
end
|
149
149
|
|
150
150
|
# If there are multiple different reimbursement types for a single
|
@@ -4,7 +4,7 @@ module Spree
|
|
4
4
|
|
5
5
|
class << self
|
6
6
|
def reimburse(reimbursement, return_items, simulate)
|
7
|
-
unpaid_amount = return_items.
|
7
|
+
unpaid_amount = return_items.sum(&:total).round(2, :down)
|
8
8
|
reimbursement_list, unpaid_amount = create_credits(reimbursement, unpaid_amount, simulate)
|
9
9
|
reimbursement_list
|
10
10
|
end
|
@@ -3,7 +3,7 @@ class Spree::ReimbursementType::OriginalPayment < Spree::ReimbursementType
|
|
3
3
|
|
4
4
|
class << self
|
5
5
|
def reimburse(reimbursement, return_items, simulate)
|
6
|
-
unpaid_amount = return_items.
|
6
|
+
unpaid_amount = return_items.sum(&:total).round(2, :down)
|
7
7
|
payments = reimbursement.order.payments.completed
|
8
8
|
|
9
9
|
refund_list, unpaid_amount = create_refunds(reimbursement, payments, unpaid_amount, simulate)
|
@@ -29,21 +29,18 @@ module Spree
|
|
29
29
|
before_transition to: :canceled, do: :cancel_return_items
|
30
30
|
|
31
31
|
event :cancel do
|
32
|
-
transition to: :canceled, from: :authorized
|
32
|
+
transition to: :canceled, from: :authorized
|
33
33
|
end
|
34
34
|
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
extend DisplayMoney
|
38
|
+
money_methods :pre_tax_total
|
38
39
|
|
39
40
|
def pre_tax_total
|
40
41
|
return_items.sum(:pre_tax_amount)
|
41
42
|
end
|
42
43
|
|
43
|
-
def display_pre_tax_total
|
44
|
-
Spree::Money.new(pre_tax_total, { currency: currency })
|
45
|
-
end
|
46
|
-
|
47
44
|
def currency
|
48
45
|
order.nil? ? Spree::Config[:currency] : order.currency
|
49
46
|
end
|
@@ -56,10 +53,6 @@ module Spree
|
|
56
53
|
customer_returns.exists?
|
57
54
|
end
|
58
55
|
|
59
|
-
def can_cancel_return_items?
|
60
|
-
return_items.any?(&:can_cancel?) || return_items.blank?
|
61
|
-
end
|
62
|
-
|
63
56
|
private
|
64
57
|
|
65
58
|
def must_have_shipped_units
|
@@ -76,7 +69,7 @@ module Spree
|
|
76
69
|
end
|
77
70
|
|
78
71
|
def cancel_return_items
|
79
|
-
return_items.each
|
72
|
+
return_items.each(&:cancel!)
|
80
73
|
end
|
81
74
|
|
82
75
|
def generate_expedited_exchange_reimbursements
|
@@ -20,6 +20,7 @@ module Spree
|
|
20
20
|
belongs_to :preferred_reimbursement_type, class_name: 'Spree::ReimbursementType'
|
21
21
|
belongs_to :override_reimbursement_type, class_name: 'Spree::ReimbursementType'
|
22
22
|
|
23
|
+
validate :eligible_exchange_variant
|
23
24
|
validate :belongs_to_same_customer_order
|
24
25
|
validate :validate_acceptance_status_for_reimbursement
|
25
26
|
validates :inventory_unit, presence: true
|
@@ -28,6 +29,7 @@ module Spree
|
|
28
29
|
after_create :cancel_others, unless: :cancelled?
|
29
30
|
|
30
31
|
scope :awaiting_return, -> { where(reception_status: 'awaiting') }
|
32
|
+
scope :received, -> { where(reception_status: 'received') }
|
31
33
|
scope :not_cancelled, -> { where.not(reception_status: 'cancelled') }
|
32
34
|
scope :pending, -> { where(acceptance_status: 'pending') }
|
33
35
|
scope :accepted, -> { where(acceptance_status: 'accepted') }
|
@@ -40,6 +42,7 @@ module Spree
|
|
40
42
|
scope :exchange_requested, -> { where.not(exchange_variant: nil) }
|
41
43
|
scope :exchange_processed, -> { where.not(exchange_inventory_unit: nil) }
|
42
44
|
scope :exchange_required, -> { exchange_requested.where(exchange_inventory_unit: nil) }
|
45
|
+
scope :resellable, -> { where resellable: true }
|
43
46
|
|
44
47
|
serialize :acceptance_status_errors
|
45
48
|
|
@@ -51,8 +54,8 @@ module Spree
|
|
51
54
|
before_save :set_exchange_pre_tax_amount
|
52
55
|
|
53
56
|
state_machine :reception_status, initial: :awaiting do
|
54
|
-
before_transition to: :received, do: :process_inventory_unit!
|
55
57
|
after_transition to: :received, do: :attempt_accept
|
58
|
+
after_transition to: :received, do: :process_inventory_unit!
|
56
59
|
|
57
60
|
event :receive do
|
58
61
|
transition to: :received, from: :awaiting
|
@@ -67,6 +70,9 @@ module Spree
|
|
67
70
|
end
|
68
71
|
end
|
69
72
|
|
73
|
+
extend DisplayMoney
|
74
|
+
money_methods :pre_tax_amount, :total
|
75
|
+
|
70
76
|
def reception_completed?
|
71
77
|
COMPLETED_RECEPTION_STATUSES.include?(reception_status)
|
72
78
|
end
|
@@ -114,16 +120,8 @@ module Spree
|
|
114
120
|
exchange_requested? && !exchange_processed?
|
115
121
|
end
|
116
122
|
|
117
|
-
def display_pre_tax_amount
|
118
|
-
Spree::Money.new(pre_tax_amount, { currency: currency })
|
119
|
-
end
|
120
|
-
|
121
123
|
def total
|
122
|
-
pre_tax_amount +
|
123
|
-
end
|
124
|
-
|
125
|
-
def display_total
|
126
|
-
Spree::Money.new(total, { currency: currency })
|
124
|
+
pre_tax_amount + additional_tax_total
|
127
125
|
end
|
128
126
|
|
129
127
|
def eligible_exchange_variants
|
@@ -186,6 +184,13 @@ module Spree
|
|
186
184
|
end
|
187
185
|
end
|
188
186
|
|
187
|
+
def eligible_exchange_variant
|
188
|
+
return unless exchange_variant && exchange_variant_id_changed?
|
189
|
+
unless eligible_exchange_variants.include?(exchange_variant)
|
190
|
+
errors.add(:base, Spree.t(:invalid_exchange_variant))
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
189
194
|
def validator
|
190
195
|
@validator ||= return_eligibility_validator.new(self)
|
191
196
|
end
|
@@ -224,7 +229,7 @@ module Spree
|
|
224
229
|
end
|
225
230
|
|
226
231
|
def should_restock?
|
227
|
-
variant.should_track_inventory? && stock_item && Spree::Config[:restock_inventory]
|
232
|
+
resellable? && variant.should_track_inventory? && stock_item && Spree::Config[:restock_inventory]
|
228
233
|
end
|
229
234
|
end
|
230
235
|
end
|
@@ -5,6 +5,8 @@ module Spree
|
|
5
5
|
ReturnItem::EligibilityValidator::OrderCompleted,
|
6
6
|
ReturnItem::EligibilityValidator::TimeSincePurchase,
|
7
7
|
ReturnItem::EligibilityValidator::RMARequired,
|
8
|
+
ReturnItem::EligibilityValidator::InventoryShipped,
|
9
|
+
ReturnItem::EligibilityValidator::NoReimbursements,
|
8
10
|
]
|
9
11
|
|
10
12
|
def eligible_for_return?
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Spree
|
2
|
+
class ReturnItem::EligibilityValidator::InventoryShipped < Spree::ReturnItem::EligibilityValidator::BaseValidator
|
3
|
+
def eligible_for_return?
|
4
|
+
if @return_item.inventory_unit.shipped?
|
5
|
+
return true
|
6
|
+
else
|
7
|
+
add_error(:inventory_unit_shipped, Spree.t('return_item_inventory_unit_ineligible'))
|
8
|
+
return false
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def requires_manual_intervention?
|
13
|
+
@errors.present?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Spree
|
2
|
+
class ReturnItem::EligibilityValidator::NoReimbursements < Spree::ReturnItem::EligibilityValidator::BaseValidator
|
3
|
+
def eligible_for_return?
|
4
|
+
if Spree::ReturnItem.where(inventory_unit: @return_item.inventory_unit).where.not(reimbursement_id: nil).any?
|
5
|
+
add_error(:inventory_unit_reimbursed, Spree.t('return_item_inventory_unit_reimbursed'))
|
6
|
+
return false
|
7
|
+
else
|
8
|
+
return true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def requires_manual_intervention?
|
13
|
+
@errors.present?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -2,6 +2,17 @@ require 'ostruct'
|
|
2
2
|
|
3
3
|
module Spree
|
4
4
|
class Shipment < Spree::Base
|
5
|
+
extend FriendlyId
|
6
|
+
friendly_id :number, slug_column: :number, use: :slugged
|
7
|
+
|
8
|
+
include Spree::NumberGenerator
|
9
|
+
|
10
|
+
def generate_number(options = {})
|
11
|
+
options[:prefix] ||= 'H'
|
12
|
+
options[:length] ||= 11
|
13
|
+
super(options)
|
14
|
+
end
|
15
|
+
|
5
16
|
belongs_to :address, class_name: 'Spree::Address', inverse_of: :shipments
|
6
17
|
belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :shipments
|
7
18
|
belongs_to :stock_location, class_name: 'Spree::StockLocation'
|
@@ -16,15 +27,11 @@ module Spree
|
|
16
27
|
|
17
28
|
before_validation :set_cost_zero_when_nil
|
18
29
|
|
19
|
-
validates :stock_location, presence: true
|
20
|
-
|
21
30
|
attr_accessor :special_instructions
|
22
31
|
|
23
32
|
accepts_nested_attributes_for :address
|
24
33
|
accepts_nested_attributes_for :inventory_units
|
25
34
|
|
26
|
-
make_permalink field: :number, length: 11, prefix: 'H'
|
27
|
-
|
28
35
|
scope :pending, -> { with_state('pending') }
|
29
36
|
scope :ready, -> { with_state('ready') }
|
30
37
|
scope :shipped, -> { with_state('shipped') }
|
@@ -76,7 +83,9 @@ module Spree
|
|
76
83
|
end
|
77
84
|
end
|
78
85
|
|
79
|
-
|
86
|
+
extend DisplayMoney
|
87
|
+
money_methods :cost, :discounted_cost, :final_price, :item_cost
|
88
|
+
alias display_amount display_cost
|
80
89
|
|
81
90
|
def add_shipping_method(shipping_method, selected = false)
|
82
91
|
shipping_rates.create(shipping_method: shipping_method, selected: selected, cost: cost)
|
@@ -116,23 +125,6 @@ module Spree
|
|
116
125
|
end
|
117
126
|
alias discounted_amount discounted_cost
|
118
127
|
|
119
|
-
def display_cost
|
120
|
-
Spree::Money.new(cost, { currency: currency })
|
121
|
-
end
|
122
|
-
alias display_amount display_cost
|
123
|
-
|
124
|
-
def display_discounted_cost
|
125
|
-
Spree::Money.new(discounted_cost, { currency: currency })
|
126
|
-
end
|
127
|
-
|
128
|
-
def display_final_price
|
129
|
-
Spree::Money.new(final_price, { currency: currency })
|
130
|
-
end
|
131
|
-
|
132
|
-
def display_item_cost
|
133
|
-
Spree::Money.new(item_cost, { currency: currency })
|
134
|
-
end
|
135
|
-
|
136
128
|
def editable_by?(user)
|
137
129
|
!shipped?
|
138
130
|
end
|
@@ -163,7 +155,7 @@ module Spree
|
|
163
155
|
end
|
164
156
|
|
165
157
|
def item_cost
|
166
|
-
|
158
|
+
line_items.map(&:final_amount).sum
|
167
159
|
end
|
168
160
|
|
169
161
|
def line_items
|
@@ -218,14 +210,15 @@ module Spree
|
|
218
210
|
self.ready? || self.pending?
|
219
211
|
end
|
220
212
|
|
221
|
-
def refresh_rates
|
213
|
+
def refresh_rates(shipping_method_filter = ShippingMethod::DISPLAY_ON_FRONT_END)
|
222
214
|
return shipping_rates if shipped?
|
223
215
|
return [] unless can_get_rates?
|
224
216
|
|
225
217
|
# StockEstimator.new assigment below will replace the current shipping_method
|
226
218
|
original_shipping_method_id = shipping_method.try(:id)
|
227
219
|
|
228
|
-
self.shipping_rates = Stock::Estimator.new(order).
|
220
|
+
self.shipping_rates = Stock::Estimator.new(order).
|
221
|
+
shipping_rates(to_package, shipping_method_filter)
|
229
222
|
|
230
223
|
if shipping_method
|
231
224
|
selected_rate = shipping_rates.detect { |rate|
|
@@ -288,10 +281,6 @@ module Spree
|
|
288
281
|
package
|
289
282
|
end
|
290
283
|
|
291
|
-
def to_param
|
292
|
-
number
|
293
|
-
end
|
294
|
-
|
295
284
|
def tracking_url
|
296
285
|
@tracking_url ||= shipping_method.build_tracking_url(tracking)
|
297
286
|
end
|
@@ -410,11 +399,11 @@ module Spree
|
|
410
399
|
end
|
411
400
|
|
412
401
|
def recalculate_adjustments
|
413
|
-
|
402
|
+
Adjustable::AdjustmentsUpdater.update(self)
|
414
403
|
end
|
415
404
|
|
416
405
|
def send_shipped_email
|
417
|
-
ShipmentMailer.shipped_email(
|
406
|
+
ShipmentMailer.shipped_email(id).deliver_later
|
418
407
|
end
|
419
408
|
|
420
409
|
def set_cost_zero_when_nil
|
@@ -4,7 +4,12 @@ module Spree
|
|
4
4
|
include Spree::CalculatedAdjustments
|
5
5
|
DISPLAY = [:both, :front_end, :back_end]
|
6
6
|
|
7
|
-
|
7
|
+
# Used for #refresh_rates
|
8
|
+
DISPLAY_ON_FRONT_AND_BACK_END = 0
|
9
|
+
DISPLAY_ON_FRONT_END = 1
|
10
|
+
DISPLAY_ON_BACK_END = 2
|
11
|
+
|
12
|
+
default_scope { where(deleted_at: nil) }
|
8
13
|
|
9
14
|
has_many :shipping_method_categories, :dependent => :destroy
|
10
15
|
has_many :shipping_categories, through: :shipping_method_categories
|
@@ -46,23 +51,17 @@ module Spree
|
|
46
51
|
Spree::TaxCategory.unscoped { super }
|
47
52
|
end
|
48
53
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
54
|
+
def available_to_display(display_filter)
|
55
|
+
display_filter == DISPLAY_ON_FRONT_AND_BACK_END ||
|
56
|
+
(frontend? && display_filter == DISPLAY_ON_FRONT_END) ||
|
57
|
+
(!frontend? && display_filter == DISPLAY_ON_BACK_END)
|
58
|
+
end
|
53
59
|
|
60
|
+
private
|
54
61
|
def at_least_one_shipping_category
|
55
62
|
if self.shipping_categories.empty?
|
56
63
|
self.errors[:base] << "You need to select at least one shipping category"
|
57
64
|
end
|
58
65
|
end
|
59
|
-
|
60
|
-
def self.on_backend_query
|
61
|
-
"#{table_name}.display_on != 'front_end' OR #{table_name}.display_on IS NULL"
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.on_frontend_query
|
65
|
-
"#{table_name}.display_on != 'back_end' OR #{table_name}.display_on IS NULL"
|
66
|
-
end
|
67
66
|
end
|
68
67
|
end
|
data/app/models/spree/state.rb
CHANGED
@@ -3,6 +3,13 @@ module Spree
|
|
3
3
|
belongs_to :country, class_name: 'Spree::Country'
|
4
4
|
has_many :addresses, dependent: :nullify
|
5
5
|
|
6
|
+
has_many :zone_members,
|
7
|
+
-> { where(zoneable_type: 'Spree::State') },
|
8
|
+
class_name: 'Spree::ZoneMember',
|
9
|
+
foreign_key: :zoneable_id
|
10
|
+
|
11
|
+
has_many :zones, through: :zone_members, class_name: 'Spree::Zone'
|
12
|
+
|
6
13
|
validates :country, :name, presence: true
|
7
14
|
|
8
15
|
def self.find_all_by_name_or_abbr(name_or_abbr)
|
@@ -1,15 +1,10 @@
|
|
1
1
|
module Spree
|
2
2
|
class StateChange < Spree::Base
|
3
|
-
belongs_to :user
|
3
|
+
belongs_to :user, class_name: Spree.user_class.to_s
|
4
4
|
belongs_to :stateful, polymorphic: true
|
5
|
-
before_create :assign_user
|
6
5
|
|
7
6
|
def <=>(other)
|
8
7
|
created_at <=> other.created_at
|
9
8
|
end
|
10
|
-
|
11
|
-
def assign_user
|
12
|
-
true # don't stop the filters
|
13
|
-
end
|
14
9
|
end
|
15
10
|
end
|
@@ -5,20 +5,19 @@ module Spree
|
|
5
5
|
unit_count = line_item.inventory_units.size
|
6
6
|
return if unit_count >= line_item.quantity
|
7
7
|
quantity = line_item.quantity - unit_count
|
8
|
-
return if quantity.zero?
|
9
8
|
|
10
9
|
quantifier = Stock::Quantifier.new(line_item.variant)
|
11
10
|
|
12
|
-
|
11
|
+
unless quantifier.can_supply? quantity
|
12
|
+
variant = line_item.variant
|
13
|
+
display_name = %Q{#{variant.name}}
|
14
|
+
display_name += %Q{ (#{variant.options_text})} unless variant.options_text.blank?
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
:selected_quantity_not_available,
|
20
|
-
item: display_name.inspect
|
21
|
-
)
|
16
|
+
line_item.errors[:quantity] << Spree.t(
|
17
|
+
:selected_quantity_not_available,
|
18
|
+
item: display_name.inspect
|
19
|
+
)
|
20
|
+
end
|
22
21
|
end
|
23
22
|
end
|
24
23
|
end
|