spree_core 3.3.6 → 3.4.0.rc1

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.
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