spree_core 3.3.6 → 3.4.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (230) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +17 -18
  3. data/app/helpers/spree/products_helper.rb +5 -5
  4. data/app/models/concerns/spree/calculated_adjustments.rb +4 -3
  5. data/app/models/concerns/spree/default_price.rb +4 -5
  6. data/app/models/concerns/spree/display_money.rb +1 -1
  7. data/app/models/concerns/spree/named_type.rb +1 -1
  8. data/app/models/concerns/spree/ransackable_attributes.rb +5 -6
  9. data/app/models/concerns/spree/user_address.rb +6 -6
  10. data/app/models/concerns/spree/user_methods.rb +3 -3
  11. data/app/models/concerns/spree/user_payment_source.rb +4 -2
  12. data/app/models/concerns/spree/user_reporting.rb +1 -1
  13. data/app/models/spree/ability.rb +3 -3
  14. data/app/models/spree/address.rb +13 -9
  15. data/app/models/spree/adjustable/adjuster/promotion.rb +1 -1
  16. data/app/models/spree/adjustable/adjustments_updater.rb +2 -2
  17. data/app/models/spree/adjustable/promotion_accumulator.rb +6 -4
  18. data/app/models/spree/adjustment.rb +2 -3
  19. data/app/models/spree/app_configuration.rb +5 -6
  20. data/app/models/spree/base.rb +1 -1
  21. data/app/models/spree/calculator/default_tax.rb +4 -5
  22. data/app/models/spree/calculator/flat_percent_item_total.rb +1 -1
  23. data/app/models/spree/calculator/flat_rate.rb +3 -3
  24. data/app/models/spree/calculator/flexi_rate.rb +5 -5
  25. data/app/models/spree/calculator/price_sack.rb +9 -9
  26. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -1
  27. data/app/models/spree/calculator/shipping/flat_rate.rb +3 -3
  28. data/app/models/spree/calculator/shipping/flexi_rate.rb +7 -7
  29. data/app/models/spree/calculator/shipping/per_item.rb +2 -2
  30. data/app/models/spree/calculator/shipping/price_sack.rb +4 -4
  31. data/app/models/spree/calculator/tiered_flat_rate.rb +3 -2
  32. data/app/models/spree/calculator/tiered_percent.rb +4 -3
  33. data/app/models/spree/calculator.rb +4 -4
  34. data/app/models/spree/classification.rb +2 -2
  35. data/app/models/spree/credit_card.rb +1 -1
  36. data/app/models/spree/exchange.rb +4 -5
  37. data/app/models/spree/gateway/bogus.rb +20 -20
  38. data/app/models/spree/gateway/bogus_simple.rb +2 -4
  39. data/app/models/spree/gateway.rb +4 -4
  40. data/app/models/spree/image.rb +3 -3
  41. data/app/models/spree/inventory_unit.rb +30 -30
  42. data/app/models/spree/line_item.rb +7 -9
  43. data/app/models/spree/option_type.rb +1 -1
  44. data/app/models/spree/order/checkout.rb +5 -5
  45. data/app/models/spree/order/currency_updater.rb +1 -4
  46. data/app/models/spree/order/payments.rb +4 -4
  47. data/app/models/spree/order/store_credit.rb +2 -2
  48. data/app/models/spree/order.rb +11 -29
  49. data/app/models/spree/order_contents.rb +6 -5
  50. data/app/models/spree/order_inventory.rb +3 -4
  51. data/app/models/spree/order_updater.rb +13 -14
  52. data/app/models/spree/payment/processing.rb +25 -26
  53. data/app/models/spree/payment.rb +72 -79
  54. data/app/models/spree/payment_capture_event.rb +1 -1
  55. data/app/models/spree/payment_method/check.rb +1 -1
  56. data/app/models/spree/payment_method/store_credit.rb +5 -5
  57. data/app/models/spree/payment_method.rb +7 -7
  58. data/app/models/spree/preferences/configuration.rb +6 -9
  59. data/app/models/spree/preferences/preferable.rb +11 -11
  60. data/app/models/spree/preferences/preferable_class_methods.rb +2 -3
  61. data/app/models/spree/preferences/scoped_store.rb +6 -5
  62. data/app/models/spree/preferences/store.rb +9 -14
  63. data/app/models/spree/price.rb +1 -1
  64. data/app/models/spree/product/scopes.rb +49 -49
  65. data/app/models/spree/product.rb +16 -16
  66. data/app/models/spree/promotion/actions/create_item_adjustments.rb +2 -1
  67. data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
  68. data/app/models/spree/promotion/rules/first_order.rb +7 -6
  69. data/app/models/spree/promotion/rules/item_total.rb +3 -5
  70. data/app/models/spree/promotion/rules/one_use_per_user.rb +1 -2
  71. data/app/models/spree/promotion/rules/option_value.rb +14 -6
  72. data/app/models/spree/promotion/rules/product.rb +4 -4
  73. data/app/models/spree/promotion/rules/taxon.rb +6 -6
  74. data/app/models/spree/promotion/rules/user.rb +3 -3
  75. data/app/models/spree/promotion/rules/user_logged_in.rb +1 -1
  76. data/app/models/spree/promotion.rb +15 -16
  77. data/app/models/spree/promotion_action.rb +1 -1
  78. data/app/models/spree/promotion_handler/cart.rb +3 -2
  79. data/app/models/spree/promotion_handler/free_shipping.rb +1 -3
  80. data/app/models/spree/promotion_handler/page.rb +3 -3
  81. data/app/models/spree/promotion_rule.rb +5 -4
  82. data/app/models/spree/refund.rb +8 -8
  83. data/app/models/spree/reimbursement/credit.rb +1 -1
  84. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -3
  85. data/app/models/spree/reimbursement.rb +4 -8
  86. data/app/models/spree/reimbursement_performer.rb +0 -5
  87. data/app/models/spree/reimbursement_tax_calculator.rb +5 -12
  88. data/app/models/spree/reimbursement_type.rb +2 -2
  89. data/app/models/spree/return_authorization.rb +22 -26
  90. data/app/models/spree/return_item/eligibility_validator/default.rb +3 -3
  91. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +2 -2
  92. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +2 -2
  93. data/app/models/spree/return_item/eligibility_validator/order_completed.rb +2 -2
  94. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +2 -3
  95. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +2 -2
  96. data/app/models/spree/return_item.rb +15 -19
  97. data/app/models/spree/returns_calculator.rb +1 -2
  98. data/app/models/spree/shipment.rb +14 -35
  99. data/app/models/spree/shipment_handler.rb +10 -12
  100. data/app/models/spree/shipping_calculator.rb +5 -6
  101. data/app/models/spree/shipping_method.rb +3 -3
  102. data/app/models/spree/shipping_rate.rb +2 -2
  103. data/app/models/spree/state.rb +2 -2
  104. data/app/models/spree/stock/availability_validator.rb +1 -1
  105. data/app/models/spree/stock/content_item.rb +2 -3
  106. data/app/models/spree/stock/coordinator.rb +3 -2
  107. data/app/models/spree/stock/differentiator.rb +3 -2
  108. data/app/models/spree/stock/estimator.rb +7 -5
  109. data/app/models/spree/stock/package.rb +5 -5
  110. data/app/models/spree/stock/packer.rb +1 -1
  111. data/app/models/spree/stock/prioritizer.rb +5 -7
  112. data/app/models/spree/stock/quantifier.rb +0 -1
  113. data/app/models/spree/stock/splitter/backordered.rb +2 -4
  114. data/app/models/spree/stock/splitter/base.rb +3 -2
  115. data/app/models/spree/stock/splitter/shipping_category.rb +2 -1
  116. data/app/models/spree/stock_item.rb +1 -1
  117. data/app/models/spree/stock_location.rb +12 -11
  118. data/app/models/spree/stock_movement.rb +1 -3
  119. data/app/models/spree/stock_transfer.rb +1 -1
  120. data/app/models/spree/store.rb +4 -4
  121. data/app/models/spree/store_credit.rb +3 -3
  122. data/app/models/spree/tax_category.rb +1 -1
  123. data/app/models/spree/tax_rate.rb +10 -10
  124. data/app/models/spree/taxon.rb +13 -13
  125. data/app/models/spree/taxonomy.rb +9 -8
  126. data/app/models/spree/validations/db_maximum_length_validator.rb +2 -3
  127. data/app/models/spree/variant.rb +30 -41
  128. data/app/models/spree/zone.rb +10 -10
  129. data/app/validators/db_maximum_length_validator.rb +5 -5
  130. data/config/initializers/acts_as_taggable_on.rb +3 -3
  131. data/config/initializers/assets.rb +1 -1
  132. data/config/initializers/friendly_id.rb +1 -1
  133. data/config/initializers/premailer_assets.rb +1 -1
  134. data/config/locales/en.yml +8 -2
  135. data/db/default/spree/states.rb +1 -0
  136. data/lib/generators/spree/custom_user/custom_user_generator.rb +12 -15
  137. data/lib/generators/spree/install/install_generator.rb +45 -32
  138. data/lib/spree/core/components.rb +3 -3
  139. data/lib/spree/core/controller_helpers/auth.rb +5 -10
  140. data/lib/spree/core/controller_helpers/common.rb +2 -3
  141. data/lib/spree/core/controller_helpers/order.rb +3 -7
  142. data/lib/spree/core/controller_helpers/respond_with.rb +4 -4
  143. data/lib/spree/core/engine.rb +3 -3
  144. data/lib/spree/core/environment/calculators.rb +0 -1
  145. data/lib/spree/core/environment_extension.rb +8 -8
  146. data/lib/spree/core/importer/order.rb +64 -67
  147. data/lib/spree/core/importer/product.rb +10 -9
  148. data/lib/spree/core/product_filters.rb +17 -18
  149. data/lib/spree/core/routes.rb +2 -6
  150. data/lib/spree/core/search/base.rb +62 -59
  151. data/lib/spree/core/version.rb +1 -1
  152. data/lib/spree/core.rb +4 -6
  153. data/lib/spree/i18n.rb +3 -5
  154. data/lib/spree/localized_number.rb +0 -2
  155. data/lib/spree/migrations.rb +8 -7
  156. data/lib/spree/money.rb +3 -7
  157. data/lib/spree/permitted_attributes.rb +2 -2
  158. data/lib/spree/responder.rb +4 -5
  159. data/lib/spree/testing_support/authorization_helpers.rb +3 -3
  160. data/lib/spree/testing_support/caching.rb +5 -5
  161. data/lib/spree/testing_support/capybara_ext.rb +16 -18
  162. data/lib/spree/testing_support/common_rake.rb +8 -9
  163. data/lib/spree/testing_support/controller_requests.rb +6 -6
  164. data/lib/spree/testing_support/extension_rake.rb +2 -3
  165. data/lib/spree/testing_support/factories/address_factory.rb +1 -1
  166. data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -1
  167. data/lib/spree/testing_support/factories/calculator_factory.rb +1 -1
  168. data/lib/spree/testing_support/factories/country_factory.rb +1 -1
  169. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  170. data/lib/spree/testing_support/factories/customer_return_factory.rb +1 -3
  171. data/lib/spree/testing_support/factories/image_factory.rb +2 -2
  172. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
  173. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  174. data/lib/spree/testing_support/factories/options_factory.rb +1 -1
  175. data/lib/spree/testing_support/factories/order_factory.rb +1 -1
  176. data/lib/spree/testing_support/factories/payment_factory.rb +1 -1
  177. data/lib/spree/testing_support/factories/payment_method_factory.rb +4 -4
  178. data/lib/spree/testing_support/factories/price_factory.rb +1 -1
  179. data/lib/spree/testing_support/factories/product_factory.rb +1 -1
  180. data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
  181. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -2
  183. data/lib/spree/testing_support/factories/promotion_factory.rb +1 -2
  184. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +1 -1
  185. data/lib/spree/testing_support/factories/property_factory.rb +1 -1
  186. data/lib/spree/testing_support/factories/prototype_factory.rb +1 -1
  187. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  188. data/lib/spree/testing_support/factories/reimbursement_factory.rb +2 -2
  189. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
  190. data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
  191. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  192. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  193. data/lib/spree/testing_support/factories/shipment_factory.rb +2 -2
  194. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  195. data/lib/spree/testing_support/factories/shipping_method_factory.rb +3 -3
  196. data/lib/spree/testing_support/factories/state_factory.rb +1 -1
  197. data/lib/spree/testing_support/factories/stock_factory.rb +1 -1
  198. data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
  199. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -2
  200. data/lib/spree/testing_support/factories/stock_movement_factory.rb +1 -1
  201. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +2 -2
  202. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -1
  203. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  204. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +1 -1
  205. data/lib/spree/testing_support/factories/store_factory.rb +1 -1
  206. data/lib/spree/testing_support/factories/tag_factory.rb +1 -1
  207. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -2
  208. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
  209. data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
  210. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
  211. data/lib/spree/testing_support/factories/tracker_factory.rb +1 -1
  212. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  213. data/lib/spree/testing_support/factories/variant_factory.rb +1 -2
  214. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  215. data/lib/spree/testing_support/factories/zone_member_factory.rb +1 -1
  216. data/lib/spree/testing_support/factories.rb +3 -3
  217. data/lib/spree/testing_support/flash.rb +1 -3
  218. data/lib/spree/testing_support/i18n.rb +5 -6
  219. data/lib/spree/testing_support/kernel.rb +1 -2
  220. data/lib/spree/testing_support/order_walkthrough.rb +12 -15
  221. data/lib/spree/testing_support/preferences.rb +0 -1
  222. data/lib/tasks/core.rake +47 -56
  223. data/lib/tasks/email.rake +2 -2
  224. data/lib/tasks/exchanges.rake +5 -5
  225. data/spree_core.gemspec +1 -1
  226. metadata +5 -9
  227. data/app/models/spree/calculator/percent_per_item.rb +0 -51
  228. data/config/initializers/premailer_rails.rb +0 -3
  229. data/lib/spree/core/delegate_belongs_to.rb +0 -99
  230. data/lib/spree/testing_support/microdata.rb +0 -192
@@ -2,10 +2,10 @@ module Spree
2
2
  class ReturnItem::EligibilityValidator::RMARequired < Spree::ReturnItem::EligibilityValidator::BaseValidator
3
3
  def eligible_for_return?
4
4
  if @return_item.return_authorization.present?
5
- return true
5
+ true
6
6
  else
7
7
  add_error(:rma_required, Spree.t('return_item_rma_ineligible'))
8
- return false
8
+ false
9
9
  end
10
10
  end
11
11
 
@@ -14,4 +14,3 @@ module Spree
14
14
  end
15
15
  end
16
16
  end
17
-
@@ -2,10 +2,10 @@ module Spree
2
2
  class ReturnItem::EligibilityValidator::TimeSincePurchase < Spree::ReturnItem::EligibilityValidator::BaseValidator
3
3
  def eligible_for_return?
4
4
  if (@return_item.inventory_unit.order.completed_at + Spree::Config[:return_eligibility_number_of_days].days) > Time.current
5
- return true
5
+ true
6
6
  else
7
7
  add_error(:number_of_days, Spree.t('return_item_time_period_ineligible'))
8
- return false
8
+ false
9
9
  end
10
10
  end
11
11
 
@@ -152,7 +152,7 @@ module Spree
152
152
  # will have a different variant than the inventory unit itself
153
153
  return unless exchange_required?
154
154
  exchange_inventory_units.build(variant: exchange_variant, line_item: inventory_unit.line_item,
155
- order: inventory_unit.order, quantity: return_quantity)
155
+ order: inventory_unit.order, quantity: return_quantity)
156
156
  end
157
157
 
158
158
  def exchange_shipments
@@ -166,16 +166,14 @@ module Spree
166
166
  private
167
167
 
168
168
  def persist_acceptance_status_errors
169
- self.update_attributes(acceptance_status_errors: validator.errors)
169
+ update_attributes(acceptance_status_errors: validator.errors)
170
170
  end
171
171
 
172
172
  def stock_item
173
173
  return unless customer_return
174
174
 
175
- Spree::StockItem.find_by({
176
- variant_id: inventory_unit.variant_id,
177
- stock_location_id: customer_return.stock_location_id,
178
- })
175
+ Spree::StockItem.find_by(variant_id: inventory_unit.variant_id,
176
+ stock_location_id: customer_return.stock_location_id)
179
177
  end
180
178
 
181
179
  def currency
@@ -184,11 +182,13 @@ module Spree
184
182
 
185
183
  def process_inventory_unit!
186
184
  inventory_unit.return!
187
- Spree::StockMovement.create!(
188
- stock_item_id: stock_item.id,
189
- quantity: inventory_unit.quantity,
190
- originator: return_authorization
191
- ) if should_restock?
185
+ if should_restock?
186
+ Spree::StockMovement.create!(
187
+ stock_item_id: stock_item.id,
188
+ quantity: inventory_unit.quantity,
189
+ originator: return_authorization
190
+ )
191
+ end
192
192
  end
193
193
 
194
194
  # This logic is also present in the customer return. The reason for the
@@ -237,16 +237,12 @@ module Spree
237
237
  end
238
238
 
239
239
  def validate_no_other_completed_return_items
240
- other_return_item = Spree::ReturnItem.where({
241
- inventory_unit_id: inventory_unit_id,
242
- reception_status: COMPLETED_RECEPTION_STATUSES,
243
- }).first
240
+ other_return_item = Spree::ReturnItem.where(inventory_unit_id: inventory_unit_id,
241
+ reception_status: COMPLETED_RECEPTION_STATUSES).first
244
242
 
245
243
  if other_return_item
246
- errors.add(:inventory_unit, :other_completed_return_item_exists, {
247
- inventory_unit_id: inventory_unit_id,
248
- return_item_id: other_return_item.id,
249
- })
244
+ errors.add(:inventory_unit, :other_completed_return_item_exists, inventory_unit_id: inventory_unit_id,
245
+ return_item_id: other_return_item.id)
250
246
  end
251
247
  end
252
248
 
@@ -1,7 +1,6 @@
1
1
  module Spree
2
2
  class ReturnsCalculator < Calculator
3
-
4
- def compute(return_item)
3
+ def compute(_return_item)
5
4
  raise NotImplementedError, "Please implement 'compute(return_item)' in your calculator: #{self.class.name}"
6
5
  end
7
6
  end
@@ -76,7 +76,7 @@ module Spree
76
76
  shipment.state_changes.create!(
77
77
  previous_state: transition.from,
78
78
  next_state: transition.to,
79
- name: 'shipment',
79
+ name: 'shipment'
80
80
  )
81
81
  end
82
82
  end
@@ -125,11 +125,6 @@ module Spree
125
125
  end
126
126
  alias discounted_amount discounted_cost
127
127
 
128
- def editable_by?(_user)
129
- warn "`Spree::Shipment#editable_by?` is deprecated. You should use cancancan `can?` method for cheks like this."
130
- !shipped?
131
- end
132
-
133
128
  def final_price
134
129
  cost + adjustment_total
135
130
  end
@@ -224,7 +219,6 @@ module Spree
224
219
  selected_rate = shipping_rates.detect do |rate|
225
220
  rate.shipping_method_id == original_shipping_method_id
226
221
  end
227
- save!
228
222
  self.selected_shipping_rate_id = selected_rate.id if selected_rate
229
223
  end
230
224
 
@@ -241,14 +235,12 @@ module Spree
241
235
  save!
242
236
  end
243
237
 
244
- def set_up_inventory(state, variant, order, line_item, quantity = 1)
245
- return if quantity <= 0
238
+ def set_up_inventory(state, variant, order, line_item)
246
239
  inventory_units.create(
247
240
  state: state,
248
241
  variant_id: variant.id,
249
242
  order_id: order.id,
250
- line_item_id: line_item.id,
251
- quantity: quantity
243
+ line_item_id: line_item.id
252
244
  )
253
245
  end
254
246
 
@@ -289,7 +281,7 @@ module Spree
289
281
  update_columns(
290
282
  cost: selected_shipping_rate.cost,
291
283
  adjustment_total: adjustments.additional.map(&:update!).compact.sum,
292
- updated_at: Time.current,
284
+ updated_at: Time.current
293
285
  )
294
286
  end
295
287
  end
@@ -332,22 +324,19 @@ module Spree
332
324
  new_state = determine_state(order)
333
325
  update_columns(
334
326
  state: new_state,
335
- updated_at: Time.current,
327
+ updated_at: Time.current
336
328
  )
337
329
  after_ship if new_state == 'shipped' && old_state != 'shipped'
338
330
  end
339
331
 
340
332
  def transfer_to_location(variant, quantity, stock_location)
341
- if quantity <= 0
342
- raise ArgumentError
343
- end
333
+ raise ArgumentError if quantity <= 0
344
334
 
345
335
  transaction do
346
336
  new_shipment = order.shipments.create!(stock_location: stock_location)
347
337
 
348
338
  order.contents.remove(variant, quantity, shipment: self)
349
339
  order.contents.add(variant, quantity, shipment: new_shipment)
350
- order.update_with_updater!
351
340
 
352
341
  refresh_rates
353
342
  save!
@@ -361,14 +350,11 @@ module Spree
361
350
  end.try(:quantity) || 0
362
351
  final_quantity = quantity + quantity_already_shipment_to_transfer_to
363
352
 
364
- if quantity <= 0 || self == shipment_to_transfer_to
365
- raise ArgumentError
366
- end
353
+ raise ArgumentError if quantity <= 0 || self == shipment_to_transfer_to
367
354
 
368
355
  transaction do
369
- order.contents.remove(variant, final_quantity, shipment: self)
370
- order.contents.add(variant, final_quantity, shipment: shipment_to_transfer_to)
371
- order.update_with_updater!
356
+ order.contents.remove(variant, quantity, shipment: self)
357
+ order.contents.add(variant, quantity, shipment: shipment_to_transfer_to)
372
358
 
373
359
  refresh_rates
374
360
  save!
@@ -388,12 +374,12 @@ module Spree
388
374
  end
389
375
 
390
376
  def manifest_restock(item)
391
- if item.states["on_hand"].to_i.positive?
392
- stock_location.restock item.variant, item.states["on_hand"], self
377
+ if item.states['on_hand'].to_i.positive?
378
+ stock_location.restock item.variant, item.states['on_hand'], self
393
379
  end
394
380
 
395
- if item.states["backordered"].to_i.positive?
396
- stock_location.restock_backordered item.variant, item.states["backordered"]
381
+ if item.states['backordered'].to_i.positive?
382
+ stock_location.restock_backordered item.variant, item.states['backordered']
397
383
  end
398
384
  end
399
385
 
@@ -405,19 +391,12 @@ module Spree
405
391
  Adjustable::AdjustmentsUpdater.update(self)
406
392
  end
407
393
 
408
- def send_shipped_email
409
- warn "Shipment#send_shipped_email is deprecated, please use ShipmentHandler#send_shipped_email"
410
- ShipmentMailer.shipped_email(id).deliver_later
411
- end
412
-
413
394
  def set_cost_zero_when_nil
414
395
  self.cost = 0 unless cost
415
396
  end
416
397
 
417
398
  def update_adjustments
418
- if saved_change_to_cost? && state != 'shipped'
419
- recalculate_adjustments
420
- end
399
+ recalculate_adjustments if saved_change_to_cost? && state != 'shipped'
421
400
  end
422
401
  end
423
402
  end
@@ -20,24 +20,22 @@ module Spree
20
20
  def perform
21
21
  @shipment.inventory_units.each &:ship!
22
22
  @shipment.process_order_payments if Spree::Config[:auto_capture_on_dispatch]
23
+ send_shipped_email
23
24
  @shipment.touch :shipped_at
24
25
  update_order_shipment_state
25
- send_shipped_email
26
26
  end
27
27
 
28
28
  private
29
- def send_shipped_email
30
- ShipmentMailer.shipped_email(@shipment.id).deliver_later
31
- end
32
29
 
33
- def update_order_shipment_state
34
- order = @shipment.order
30
+ def send_shipped_email
31
+ ShipmentMailer.shipped_email(@shipment.id).deliver_later
32
+ end
35
33
 
36
- new_state = OrderUpdater.new(order).update_shipment_state
37
- order.update_columns(
38
- shipment_state: new_state,
39
- updated_at: Time.current,
40
- )
41
- end
34
+ def update_order_shipment_state
35
+ order = @shipment.order
36
+
37
+ new_state = OrderUpdater.new(order).update_shipment_state
38
+ order.update_columns(shipment_state: new_state, updated_at: Time.current)
39
+ end
42
40
  end
43
41
  end
@@ -1,22 +1,21 @@
1
1
  module Spree
2
2
  class ShippingCalculator < Calculator
3
-
4
- def compute_shipment(shipment)
3
+ def compute_shipment(_shipment)
5
4
  raise NotImplementedError, "Please implement 'compute_shipment(shipment)' in your calculator: #{self.class.name}"
6
5
  end
7
6
 
8
- def compute_package(package)
7
+ def compute_package(_package)
9
8
  raise NotImplementedError, "Please implement 'compute_package(package)' in your calculator: #{self.class.name}"
10
9
  end
11
10
 
12
- def available?(package)
11
+ def available?(_package)
13
12
  true
14
13
  end
15
14
 
16
15
  private
16
+
17
17
  def total(content_items)
18
- content_items.map(&:amount).sum
18
+ content_items.sum(&:amount)
19
19
  end
20
20
  end
21
21
  end
22
-
@@ -38,8 +38,8 @@ module Spree
38
38
  end
39
39
 
40
40
  def self.calculators
41
- spree_calculators.send(model_name_without_spree_namespace)
42
- .select { |c| c.to_s.constantize < Spree::ShippingCalculator }
41
+ spree_calculators.send(model_name_without_spree_namespace).
42
+ select { |c| c.to_s.constantize < Spree::ShippingCalculator }
43
43
  end
44
44
 
45
45
  def tax_category
@@ -48,7 +48,7 @@ module Spree
48
48
 
49
49
  def available_to_display?(display_filter)
50
50
  (frontend? && display_filter == DISPLAY_ON_FRONT_END) ||
51
- (backend? && display_filter == DISPLAY_ON_BACK_END)
51
+ (backend? && display_filter == DISPLAY_ON_BACK_END)
52
52
  end
53
53
 
54
54
  private
@@ -22,12 +22,12 @@ module Spree
22
22
  return price if tax_rate.nil? || tax_amount == 0
23
23
 
24
24
  Spree.t tax_rate.included_in_price? ? :including_tax : :excluding_tax,
25
- scope: "shipping_rates.display_price",
25
+ scope: 'shipping_rates.display_price',
26
26
  price: price,
27
27
  tax_amount: display_tax_amount,
28
28
  tax_rate_name: tax_rate.name
29
29
  end
30
- alias_method :display_cost, :display_price
30
+ alias display_cost display_price
31
31
 
32
32
  def tax_amount
33
33
  @_tax_amount ||= tax_rate.calculator.compute_shipping_rate(self)
@@ -24,9 +24,9 @@ module Spree
24
24
  # blank is added elsewhere, if needed
25
25
  def self.states_group_by_country_id
26
26
  state_info = Hash.new { |h, k| h[k] = [] }
27
- self.order(:name).each { |state|
27
+ order(:name).each do |state|
28
28
  state_info[state.country_id.to_s].push [state.id, state.name]
29
- }
29
+ end
30
30
  state_info
31
31
  end
32
32
 
@@ -11,7 +11,7 @@ module Spree
11
11
  return if item_available?(line_item, quantity)
12
12
 
13
13
  variant = line_item.variant
14
- display_name = "#{variant.name}"
14
+ display_name = variant.name.to_s
15
15
  display_name += " (#{variant.options_text})" unless variant.options_text.blank?
16
16
 
17
17
  line_item.errors[:quantity] << Spree.t(
@@ -31,14 +31,13 @@ module Spree
31
31
  end
32
32
 
33
33
  def on_hand?
34
- state.to_s == "on_hand"
34
+ state.to_s == 'on_hand'
35
35
  end
36
36
 
37
37
  def backordered?
38
- state.to_s == "backordered"
38
+ state.to_s == 'backordered'
39
39
  end
40
40
 
41
-
42
41
  def amount
43
42
  price * quantity
44
43
  end
@@ -21,7 +21,7 @@ module Spree
21
21
  packages = estimate_packages(packages)
22
22
  end
23
23
 
24
- def build_packages(packages = Array.new)
24
+ def build_packages(packages = [])
25
25
  stock_locations_with_requested_variants.each do |stock_location|
26
26
  packer = build_packer(stock_location, inventory_units)
27
27
  packages += packer.packages
@@ -31,6 +31,7 @@ module Spree
31
31
  end
32
32
 
33
33
  private
34
+
34
35
  def stock_locations_with_requested_variants
35
36
  Spree::StockLocation.active.joins(:stock_items).
36
37
  where(spree_stock_items: { variant_id: requested_variant_ids }).distinct
@@ -57,7 +58,7 @@ module Spree
57
58
  Packer.new(stock_location, inventory_units, splitters(stock_location))
58
59
  end
59
60
 
60
- def splitters(stock_location)
61
+ def splitters(_stock_location)
61
62
  # extension point to return custom splitters for a location
62
63
  Rails.application.config.spree.stock_splitters
63
64
  end
@@ -16,11 +16,12 @@ module Spree
16
16
  end
17
17
 
18
18
  private
19
+
19
20
  def build_missing
20
21
  @missing = Hash.new(0)
21
22
  required.keys.each do |variant|
22
- missing = required[variant] - packed[variant]
23
- @missing[variant] = missing if missing > 0
23
+ missing = required[variant] - packed[variant]
24
+ @missing[variant] = missing if missing > 0
24
25
  end
25
26
  end
26
27
 
@@ -17,6 +17,7 @@ module Spree
17
17
  end
18
18
 
19
19
  private
20
+
20
21
  def choose_default_shipping_rate(shipping_rates)
21
22
  unless shipping_rates.empty?
22
23
  shipping_rates.min_by(&:cost).selected = true
@@ -31,10 +32,11 @@ module Spree
31
32
  shipping_methods(package, ui_filter).map do |shipping_method|
32
33
  cost = shipping_method.calculator.compute(package)
33
34
 
35
+ next unless cost
34
36
  shipping_method.shipping_rates.new(
35
37
  cost: gross_amount(cost, taxation_options_for(shipping_method)),
36
38
  tax_rate: first_tax_rate_for(shipping_method.tax_category)
37
- ) if cost
39
+ )
38
40
  end.compact
39
41
  end
40
42
 
@@ -59,10 +61,10 @@ module Spree
59
61
  calculator = ship_method.calculator
60
62
 
61
63
  ship_method.available_to_display?(display_filter) &&
62
- ship_method.include?(order.ship_address) &&
63
- calculator.available?(package) &&
64
- (calculator.preferences[:currency].blank? ||
65
- calculator.preferences[:currency] == currency)
64
+ ship_method.include?(order.ship_address) &&
65
+ calculator.available?(package) &&
66
+ (calculator.preferences[:currency].blank? ||
67
+ calculator.preferences[:currency] == currency)
66
68
  end
67
69
  end
68
70
  end
@@ -4,14 +4,14 @@ module Spree
4
4
  attr_reader :stock_location, :contents
5
5
  attr_accessor :shipping_rates
6
6
 
7
- def initialize(stock_location, contents=[])
7
+ def initialize(stock_location, contents = [])
8
8
  @stock_location = stock_location
9
9
  @contents = contents
10
- @shipping_rates = Array.new
10
+ @shipping_rates = []
11
11
  end
12
12
 
13
13
  def add(inventory_unit, state = :on_hand)
14
- # Remove find_item check as already taken care by prioritizer
14
+ # Remove find_item check as already taken care by prioritizer
15
15
  contents << ContentItem.new(inventory_unit, state)
16
16
  end
17
17
 
@@ -31,7 +31,7 @@ module Spree
31
31
  # Fix regression that removed package.order.
32
32
  # Find it dynamically through an inventory_unit.
33
33
  def order
34
- contents.detect {|item| !!item.try(:inventory_unit).try(:order) }.try(:inventory_unit).try(:order)
34
+ contents.detect { |item| !!item.try(:inventory_unit).try(:order) }.try(:inventory_unit).try(:order)
35
35
  end
36
36
 
37
37
  def weight
@@ -55,7 +55,7 @@ module Spree
55
55
 
56
56
  def quantity(state = nil)
57
57
  matched_contents = state.nil? ? contents : contents.select { |c| c.state.to_s == state.to_s }
58
- matched_contents.map(&:quantity).sum
58
+ matched_contents.sum(&:quantity)
59
59
  end
60
60
 
61
61
  def empty?
@@ -3,7 +3,7 @@ module Spree
3
3
  class Packer
4
4
  attr_reader :stock_location, :inventory_units, :splitters
5
5
 
6
- def initialize(stock_location, inventory_units, splitters=[Splitter::Base])
6
+ def initialize(stock_location, inventory_units, splitters = [Splitter::Base])
7
7
  @stock_location = stock_location
8
8
  @inventory_units = inventory_units
9
9
  @splitters = splitters
@@ -3,10 +3,10 @@ module Spree
3
3
  class Prioritizer
4
4
  attr_reader :packages
5
5
 
6
- def initialize(packages, adjuster_class=Adjuster)
6
+ def initialize(packages, adjuster_class = Adjuster)
7
7
  @packages = packages
8
8
  @adjuster_class = adjuster_class
9
- @adjusters = Hash.new
9
+ @adjusters = {}
10
10
  end
11
11
 
12
12
  def prioritized_packages
@@ -22,15 +22,13 @@ module Spree
22
22
  packages.each do |package|
23
23
  package.contents.each do |item|
24
24
  adjuster = find_adjuster(item)
25
- if adjuster.nil?
26
- adjuster = build_adjuster(item, package)
27
- end
25
+ adjuster = build_adjuster(item, package) if adjuster.nil?
28
26
  adjuster.adjust(package, item)
29
27
  end
30
28
  end
31
29
  end
32
30
 
33
- def build_adjuster(item, package)
31
+ def build_adjuster(item, _package)
34
32
  @adjusters[hash_item item] = @adjuster_class.new(item.inventory_unit)
35
33
  end
36
34
 
@@ -43,7 +41,7 @@ module Spree
43
41
  end
44
42
 
45
43
  def prune_packages
46
- packages.reject! { |pkg| pkg.empty? }
44
+ packages.reject!(&:empty?)
47
45
  end
48
46
 
49
47
  def hash_item(item)
@@ -23,7 +23,6 @@ module Spree
23
23
  def can_supply?(required = 1)
24
24
  variant.available? && (total_on_hand >= required || backorderable?)
25
25
  end
26
-
27
26
  end
28
27
  end
29
28
  end
@@ -2,21 +2,19 @@ module Spree
2
2
  module Stock
3
3
  module Splitter
4
4
  class Backordered < Spree::Stock::Splitter::Base
5
-
6
5
  def split(packages)
7
6
  split_packages = []
8
7
  packages.each do |package|
9
- if package.on_hand.size > 0
8
+ unless package.on_hand.empty?
10
9
  split_packages << build_package(package.on_hand)
11
10
  end
12
11
 
13
- if package.backordered.size > 0
12
+ unless package.backordered.empty?
14
13
  split_packages << build_package(package.backordered)
15
14
  end
16
15
  end
17
16
  return_next split_packages
18
17
  end
19
-
20
18
  end
21
19
  end
22
20
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  class Base
5
5
  attr_reader :packer, :next_splitter
6
6
 
7
- def initialize(packer, next_splitter=nil)
7
+ def initialize(packer, next_splitter = nil)
8
8
  @packer = packer
9
9
  @next_splitter = next_splitter
10
10
  end
@@ -15,11 +15,12 @@ module Spree
15
15
  end
16
16
 
17
17
  private
18
+
18
19
  def return_next(packages)
19
20
  next_splitter ? next_splitter.split(packages) : packages
20
21
  end
21
22
 
22
- def build_package(contents=[])
23
+ def build_package(contents = [])
23
24
  Spree::Stock::Package.new(stock_location, contents)
24
25
  end
25
26
  end
@@ -11,6 +11,7 @@ module Spree
11
11
  end
12
12
 
13
13
  private
14
+
14
15
  def split_by_category(package)
15
16
  categories = Hash.new { |hash, key| hash[key] = [] }
16
17
  package.contents.each do |item|
@@ -21,7 +22,7 @@ module Spree
21
22
 
22
23
  def hash_to_packages(categories)
23
24
  packages = []
24
- categories.each do |id, contents|
25
+ categories.each do |_id, contents|
25
26
  packages << build_package(contents)
26
27
  end
27
28
  packages
@@ -96,7 +96,7 @@ module Spree
96
96
  # the variant_id changes from nil when a new stock location is added
97
97
  stock_changed = (saved_change_to_count_on_hand? &&
98
98
  saved_change_to_count_on_hand.any?(&:zero?)) ||
99
- saved_change_to_variant_id?
99
+ saved_change_to_variant_id?
100
100
 
101
101
  variant.touch if !Spree::Config.binary_inventory_cache || stock_changed
102
102
  end