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.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/app/assets/images/logo/spree_50.png +0 -0
  4. data/app/controllers/spree/base_controller.rb +1 -2
  5. data/app/helpers/spree/base_helper.rb +41 -131
  6. data/app/helpers/spree/products_helper.rb +1 -1
  7. data/app/models/concerns/spree/adjustment_source.rb +51 -15
  8. data/app/models/concerns/spree/calculated_adjustments.rb +1 -0
  9. data/app/models/concerns/spree/display_money.rb +32 -0
  10. data/app/models/concerns/spree/named_type.rb +1 -1
  11. data/app/models/concerns/spree/number_generator.rb +39 -0
  12. data/app/models/concerns/spree/user_reporting.rb +3 -8
  13. data/app/models/spree/address.rb +0 -2
  14. data/app/models/spree/adjustable/adjustments_updater.rb +70 -0
  15. data/app/models/spree/adjustable/promotion_accumulator.rb +75 -0
  16. data/app/models/spree/adjustment.rb +17 -26
  17. data/app/models/spree/app_configuration.rb +4 -33
  18. data/app/models/spree/base.rb +0 -3
  19. data/app/models/spree/calculator.rb +0 -5
  20. data/app/models/spree/classification.rb +1 -1
  21. data/app/models/spree/country.rb +10 -4
  22. data/app/models/spree/credit_card.rb +14 -15
  23. data/app/models/spree/customer_return.rb +18 -25
  24. data/app/models/spree/gateway/bogus.rb +0 -4
  25. data/app/models/spree/line_item.rb +2 -5
  26. data/app/models/spree/option_type.rb +2 -4
  27. data/app/models/spree/option_value.rb +0 -2
  28. data/app/models/spree/order.rb +74 -134
  29. data/app/models/spree/order/checkout.rb +1 -1
  30. data/app/models/spree/order_contents.rb +9 -8
  31. data/app/models/spree/order_updater.rb +8 -1
  32. data/app/models/spree/payment.rb +13 -23
  33. data/app/models/spree/payment/gateway_options.rb +86 -0
  34. data/app/models/spree/payment/processing.rb +8 -39
  35. data/app/models/spree/payment_method.rb +3 -6
  36. data/app/models/spree/price.rb +2 -6
  37. data/app/models/spree/product.rb +27 -16
  38. data/app/models/spree/product_property.rb +1 -5
  39. data/app/models/spree/promotion.rb +7 -15
  40. data/app/models/spree/promotion/actions/create_adjustment.rb +4 -45
  41. data/app/models/spree/promotion/actions/create_item_adjustments.rb +8 -63
  42. data/app/models/spree/promotion/actions/create_line_items.rb +3 -12
  43. data/app/models/spree/promotion/actions/free_shipping.rb +4 -24
  44. data/app/models/spree/promotion/rules/option_value.rb +49 -0
  45. data/app/models/spree/promotion_action.rb +6 -0
  46. data/app/models/spree/promotion_handler/cart.rb +14 -18
  47. data/app/models/spree/promotion_handler/coupon.rb +1 -1
  48. data/app/models/spree/promotion_rule.rb +0 -1
  49. data/app/models/spree/property.rb +0 -2
  50. data/app/models/spree/refund.rb +0 -15
  51. data/app/models/spree/reimbursement.rb +4 -4
  52. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  53. data/app/models/spree/reimbursement_type/original_payment.rb +1 -1
  54. data/app/models/spree/return_authorization.rb +4 -11
  55. data/app/models/spree/return_item.rb +16 -11
  56. data/app/models/spree/return_item/eligibility_validator/default.rb +2 -0
  57. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +16 -0
  58. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +16 -0
  59. data/app/models/spree/shipment.rb +20 -31
  60. data/app/models/spree/shipment_handler.rb +1 -1
  61. data/app/models/spree/shipping_method.rb +12 -13
  62. data/app/models/spree/state.rb +7 -0
  63. data/app/models/spree/state_change.rb +1 -6
  64. data/app/models/spree/stock/availability_validator.rb +9 -10
  65. data/app/models/spree/stock/coordinator.rb +1 -1
  66. data/app/models/spree/stock/estimator.rb +6 -6
  67. data/app/models/spree/stock/quantifier.rb +1 -1
  68. data/app/models/spree/stock_item.rb +1 -7
  69. data/app/models/spree/stock_location.rb +3 -1
  70. data/app/models/spree/stock_movement.rb +1 -8
  71. data/app/models/spree/stock_transfer.rb +11 -5
  72. data/app/models/spree/store.rb +2 -2
  73. data/app/models/spree/tax_rate.rb +30 -55
  74. data/app/models/spree/taxon.rb +8 -8
  75. data/app/models/spree/taxonomy.rb +8 -13
  76. data/app/models/spree/tracker.rb +1 -1
  77. data/app/models/spree/variant.rb +6 -15
  78. data/app/models/spree/zone.rb +43 -9
  79. data/config/initializers/user_class_extensions.rb +0 -12
  80. data/config/locales/en.yml +76 -85
  81. data/config/routes.rb +1 -1
  82. data/db/default/spree/countries.rb +23 -13
  83. data/db/default/spree/states.rb +24 -12
  84. data/db/default/spree/stores.rb +1 -1
  85. data/db/migrate/20120831092320_spree_one_two.rb +36 -36
  86. data/db/migrate/20120831092359_spree_promo_one_two.rb +1 -1
  87. data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
  88. data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
  89. data/db/migrate/20130301162924_create_shipping_method_categories.rb +1 -1
  90. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +1 -1
  91. data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
  92. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
  93. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
  94. data/db/migrate/20140309024355_create_spree_stores.rb +1 -1
  95. data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -7
  96. data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
  97. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
  98. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
  99. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
  100. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
  101. data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
  102. data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
  103. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
  104. data/db/migrate/20140911173301_add_kind_to_zone.rb +11 -0
  105. data/db/migrate/20141215232040_remove_token_permissions_table.rb +6 -0
  106. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
  107. data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
  108. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +5 -0
  109. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +6 -0
  110. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +5 -0
  111. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +5 -0
  112. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +6 -0
  113. data/db/migrate/20150128060325_remove_spree_configurations.rb +16 -0
  114. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  115. data/lib/generators/spree/install/templates/config/initializers/spree.rb +4 -0
  116. data/lib/spree/core.rb +2 -12
  117. data/lib/spree/core/controller_helpers/respond_with.rb +8 -18
  118. data/lib/spree/core/engine.rb +1 -7
  119. data/lib/spree/core/routes.rb +1 -1
  120. data/lib/spree/core/version.rb +1 -1
  121. data/lib/spree/money.rb +10 -10
  122. data/lib/spree/permitted_attributes.rb +4 -8
  123. data/lib/spree/testing_support/authorization_helpers.rb +3 -5
  124. data/lib/spree/testing_support/capybara_ext.rb +3 -3
  125. data/lib/spree/testing_support/common_rake.rb +2 -2
  126. data/lib/spree/testing_support/factories/order_factory.rb +3 -13
  127. data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -3
  128. data/lib/spree/testing_support/factories/prototype_factory.rb +5 -0
  129. data/lib/spree/testing_support/factories/return_item_factory.rb +5 -1
  130. data/lib/spree/testing_support/factories/stock_location_factory.rb +3 -3
  131. data/lib/spree/testing_support/factories/tracker_factory.rb +0 -1
  132. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  133. data/lib/spree/testing_support/factories/zone_factory.rb +8 -0
  134. data/lib/tasks/core.rake +1 -1
  135. data/lib/tasks/email.rake +6 -3
  136. metadata +48 -35
  137. data/app/helpers/spree/checkout_helper.rb +0 -31
  138. data/app/helpers/spree/orders_helper.rb +0 -17
  139. data/app/helpers/spree/store_helper.rb +0 -16
  140. data/app/helpers/spree/taxons_helper.rb +0 -19
  141. data/app/models/concerns/spree/ransackable_attributes.rb +0 -19
  142. data/app/models/friendly_id/slug_decorator.rb +0 -3
  143. data/app/models/spree/billing_integration.rb +0 -21
  144. data/app/models/spree/configuration.rb +0 -5
  145. data/app/models/spree/item_adjustments.rb +0 -82
  146. data/app/models/spree/order_merger.rb +0 -65
  147. data/app/models/spree/order_populator.rb +0 -43
  148. data/app/models/spree/product_scope/scopes.rb +0 -47
  149. data/app/models/spree/variant/scopes.rb +0 -42
  150. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
  151. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +0 -6
  152. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +0 -6
  153. data/lib/spree/core/controller_helpers/ssl.rb +0 -60
  154. data/lib/spree/core/permalinks.rb +0 -71
  155. 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 every return item individually to handle edge cases for consecutive partial
87
- # returns where rounding might cause us to try to reimburse more than was originally billed
88
- return_items.map { |ri| ri.total.to_d.round(2) }.sum
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(self.id).deliver
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.map { |ri| ri.total.to_d.round(2) }.sum
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.map { |ri| ri.total.to_d.round(2) }.sum
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, if: lambda { |return_authorization| return_authorization.can_cancel_return_items? }
32
+ transition to: :canceled, from: :authorized
33
33
  end
34
34
 
35
35
  end
36
36
 
37
- self.whitelisted_ransackable_attributes = ['memo']
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 { |item| item.cancel! if item.can_cancel? }
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 + included_tax_total + additional_tax_total
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
- self.whitelisted_ransackable_attributes = ['number']
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
- manifest.map { |m| (m.line_item.price + (m.line_item.adjustment_total / m.line_item.quantity)) * m.quantity }.sum
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).shipping_rates(to_package)
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
- Spree::ItemAdjustments.new(self).update
402
+ Adjustable::AdjustmentsUpdater.update(self)
414
403
  end
415
404
 
416
405
  def send_shipped_email
417
- ShipmentMailer.shipped_email(self.id).deliver
406
+ ShipmentMailer.shipped_email(id).deliver_later
418
407
  end
419
408
 
420
409
  def set_cost_zero_when_nil
@@ -27,7 +27,7 @@ module Spree
27
27
 
28
28
  private
29
29
  def send_shipped_email
30
- ShipmentMailer.shipped_email(@shipment.id).deliver
30
+ ShipmentMailer.shipped_email(@shipment.id).deliver_later
31
31
  end
32
32
 
33
33
  def update_order_shipment_state
@@ -4,7 +4,12 @@ module Spree
4
4
  include Spree::CalculatedAdjustments
5
5
  DISPLAY = [:both, :front_end, :back_end]
6
6
 
7
- default_scope -> { where(deleted_at: nil) }
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
- private
50
- def compute_amount(calculable)
51
- self.calculator.compute(calculable)
52
- end
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
@@ -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
- return if quantifier.can_supply?(quantity)
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
- variant = line_item.variant
15
- display_name = "#{variant.name}"
16
- display_name += " (#{variant.options_text})" unless variant.options_text.blank?
17
-
18
- line_item.errors[:quantity] << Spree.t(
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