spree_core 2.3.4 → 2.3.5

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +1 -1
  3. data/app/helpers/spree/products_helper.rb +7 -8
  4. data/app/models/spree/adjustment.rb +3 -1
  5. data/app/models/spree/asset.rb +1 -1
  6. data/app/models/spree/classification.rb +1 -1
  7. data/app/models/spree/credit_card.rb +2 -2
  8. data/app/models/spree/gateway/bogus.rb +3 -2
  9. data/app/models/spree/inventory_unit.rb +1 -1
  10. data/app/models/spree/item_adjustments.rb +8 -4
  11. data/app/models/spree/line_item.rb +5 -0
  12. data/app/models/spree/order.rb +8 -4
  13. data/app/models/spree/order/checkout.rb +2 -0
  14. data/app/models/spree/payment.rb +6 -3
  15. data/app/models/spree/payment_method.rb +7 -3
  16. data/app/models/spree/payment_method/check.rb +2 -0
  17. data/app/models/spree/price.rb +1 -13
  18. data/app/models/spree/product.rb +26 -24
  19. data/app/models/spree/promotion.rb +2 -2
  20. data/app/models/spree/promotion/actions/create_item_adjustments.rb +5 -3
  21. data/app/models/spree/promotion/actions/create_line_items.rb +1 -0
  22. data/app/models/spree/promotion_handler/coupon.rb +5 -1
  23. data/app/models/spree/return_authorization.rb +2 -2
  24. data/app/models/spree/shipping_category.rb +2 -2
  25. data/app/models/spree/shipping_method_category.rb +1 -1
  26. data/app/models/spree/stock_item.rb +1 -1
  27. data/app/models/spree/stock_location.rb +1 -1
  28. data/app/models/spree/store.rb +1 -1
  29. data/app/models/spree/tax_category.rb +2 -2
  30. data/app/models/spree/tax_rate.rb +7 -4
  31. data/app/models/spree/variant.rb +18 -17
  32. data/app/models/spree/zone.rb +15 -17
  33. data/app/models/spree/zone_member.rb +1 -1
  34. data/config/initializers/user_class_extensions.rb +10 -9
  35. data/config/locales/en.yml +4 -1
  36. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
  37. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +3 -5
  38. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +5 -0
  39. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +13 -0
  40. data/db/migrate/20141105213646_update_classifications_positions.rb +9 -0
  41. data/lib/generators/spree/install/install_generator.rb +3 -7
  42. data/lib/spree/core.rb +3 -3
  43. data/lib/spree/core/controller_helpers/order.rb +8 -7
  44. data/lib/spree/core/importer/order.rb +16 -3
  45. data/lib/spree/core/search/base.rb +1 -1
  46. data/lib/spree/core/validators/email.rb +1 -1
  47. data/lib/spree/core/version.rb +1 -1
  48. data/lib/spree/localized_number.rb +20 -0
  49. data/lib/spree/migrations.rb +7 -3
  50. data/lib/spree/money.rb +2 -2
  51. data/lib/spree/permitted_attributes.rb +3 -1
  52. data/lib/spree/testing_support/ability_helpers.rb +25 -25
  53. data/lib/spree/testing_support/capybara_ext.rb +2 -2
  54. data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
  55. data/lib/spree/testing_support/factories/order_factory.rb +1 -1
  56. data/lib/spree/testing_support/factories/promotion_factory.rb +4 -4
  57. data/lib/spree/testing_support/factories/stock_factory.rb +2 -2
  58. data/lib/spree/testing_support/flash.rb +2 -2
  59. metadata +16 -19
  60. data/vendor/assets/javascripts/jquery.validate/localization/messages_et.js +0 -23
  61. data/vendor/assets/javascripts/jquery.validate/localization/messages_eu.js +0 -25
  62. data/vendor/assets/javascripts/jquery.validate/localization/messages_hr.js +0 -25
  63. data/vendor/assets/javascripts/jquery.validate/localization/messages_ka.js +0 -25
  64. data/vendor/assets/javascripts/jquery.validate/localization/messages_ko.js +0 -25
  65. data/vendor/assets/javascripts/jquery.validate/localization/messages_my.js +0 -25
  66. data/vendor/assets/javascripts/jquery.validate/localization/messages_pt_BR.js +0 -26
  67. data/vendor/assets/javascripts/jquery.validate/localization/messages_pt_PT.js +0 -26
  68. data/vendor/assets/javascripts/jquery.validate/localization/messages_sl.js +0 -25
  69. data/vendor/assets/javascripts/jquery.validate/localization/messages_sv.js +0 -23
  70. data/vendor/assets/javascripts/jquery.validate/localization/messages_uk.js +0 -25
  71. data/vendor/assets/javascripts/jquery.validate/localization/messages_zh.js +0 -25
  72. data/vendor/assets/javascripts/jquery.validate/localization/messages_zh_TW.js +0 -26
@@ -45,6 +45,7 @@ module Spree
45
45
  order.contents.add(item.variant, item.quantity - current_quantity)
46
46
  end
47
47
  end
48
+ true
48
49
  end
49
50
  end
50
51
  end
@@ -72,11 +72,15 @@ module Spree
72
72
  end
73
73
  }
74
74
 
75
+ # Check for applied adjustments.
75
76
  discount = order.line_item_adjustments.promotion.detect(&detector)
76
77
  discount ||= order.shipment_adjustments.promotion.detect(&detector)
77
78
  discount ||= order.adjustments.promotion.detect(&detector)
78
79
 
79
- if discount.eligible
80
+ # Check for applied line items.
81
+ created_line_items = promotion.actions.detect { |a| a.type == 'Spree::Promotion::Actions::CreateLineItems' }
82
+
83
+ if (discount && discount.eligible) || created_line_items
80
84
  order.update_totals
81
85
  order.persist_totals
82
86
  self.success = Spree.t(:coupon_code_applied)
@@ -1,8 +1,8 @@
1
1
  module Spree
2
2
  class ReturnAuthorization < Spree::Base
3
- belongs_to :order, class_name: 'Spree::Order'
3
+ belongs_to :order, class_name: 'Spree::Order', inverse_of: :return_authorizations
4
4
 
5
- has_many :inventory_units, dependent: :nullify
5
+ has_many :inventory_units, dependent: :nullify, inverse_of: :return_authorization
6
6
  belongs_to :stock_location
7
7
  before_create :generate_number
8
8
  before_save :force_positive_amount
@@ -2,7 +2,7 @@ module Spree
2
2
  class ShippingCategory < Spree::Base
3
3
  validates :name, presence: true
4
4
  has_many :products, inverse_of: :shipping_category
5
- has_many :shipping_method_categories
5
+ has_many :shipping_method_categories, inverse_of: :shipping_method
6
6
  has_many :shipping_methods, through: :shipping_method_categories
7
7
  end
8
- end
8
+ end
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class ShippingMethodCategory < Spree::Base
3
3
  belongs_to :shipping_method, class_name: 'Spree::ShippingMethod'
4
- belongs_to :shipping_category, class_name: 'Spree::ShippingCategory'
4
+ belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :shipping_method_categories
5
5
  end
6
6
  end
@@ -2,7 +2,7 @@ module Spree
2
2
  class StockItem < Spree::Base
3
3
  acts_as_paranoid
4
4
 
5
- belongs_to :stock_location, class_name: 'Spree::StockLocation'
5
+ belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :stock_items
6
6
  belongs_to :variant, class_name: 'Spree::Variant', inverse_of: :stock_items
7
7
  has_many :stock_movements, inverse_of: :stock_item
8
8
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class StockLocation < Spree::Base
3
3
  has_many :shipments
4
- has_many :stock_items, dependent: :delete_all
4
+ has_many :stock_items, dependent: :delete_all, inverse_of: :stock_location
5
5
  has_many :stock_movements, through: :stock_items
6
6
 
7
7
  belongs_to :state, class_name: 'Spree::State'
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class Store < Spree::Base
3
3
 
4
- validates :code, presence: true, uniqueness: true
4
+ validates :code, presence: true, uniqueness: { allow_blank: true }
5
5
  validates :name, presence: true
6
6
  validates :url, presence: true
7
7
  validates :mail_from_address, presence: true
@@ -1,9 +1,9 @@
1
1
  module Spree
2
2
  class TaxCategory < Spree::Base
3
3
  acts_as_paranoid
4
- validates :name, presence: true, uniqueness: { scope: :deleted_at }
4
+ validates :name, presence: true, uniqueness: { scope: :deleted_at, allow_blank: true }
5
5
 
6
- has_many :tax_rates, dependent: :destroy
6
+ has_many :tax_rates, dependent: :destroy, inverse_of: :tax_category
7
7
 
8
8
  before_save :set_default_category
9
9
 
@@ -11,10 +11,15 @@ end
11
11
  module Spree
12
12
  class TaxRate < Spree::Base
13
13
  acts_as_paranoid
14
+
15
+ # Need to deal with adjustments before calculator is destroyed.
16
+ before_destroy :deals_with_adjustments_for_deleted_source
17
+
14
18
  include Spree::Core::CalculatedAdjustments
15
19
  include Spree::Core::AdjustmentSource
16
- belongs_to :zone, class_name: "Spree::Zone"
17
- belongs_to :tax_category, class_name: "Spree::TaxCategory"
20
+
21
+ belongs_to :zone, class_name: "Spree::Zone", inverse_of: :tax_rates
22
+ belongs_to :tax_category, class_name: "Spree::TaxCategory", inverse_of: :tax_rates
18
23
 
19
24
  has_many :adjustments, as: :source
20
25
 
@@ -22,8 +27,6 @@ module Spree
22
27
  validates :tax_category_id, presence: true
23
28
  validates_with DefaultTaxZoneValidator
24
29
 
25
- before_destroy :deals_with_adjustments_for_deleted_source
26
-
27
30
  scope :by_zone, ->(zone) { where(zone_id: zone) }
28
31
 
29
32
  # Gets the array of TaxRates appropriate for the specified order
@@ -9,7 +9,7 @@ module Spree
9
9
  :shipping_category_id, :meta_description, :meta_keywords,
10
10
  :shipping_category
11
11
 
12
- has_many :inventory_units
12
+ has_many :inventory_units, inverse_of: :variant
13
13
  has_many :line_items, inverse_of: :variant
14
14
  has_many :orders, through: :line_items
15
15
 
@@ -23,7 +23,8 @@ module Spree
23
23
  has_one :default_price,
24
24
  -> { where currency: Spree::Config[:currency] },
25
25
  class_name: 'Spree::Price',
26
- dependent: :destroy
26
+ dependent: :destroy,
27
+ inverse_of: :variant
27
28
 
28
29
  delegate_belongs_to :default_price, :display_price, :display_amount, :price, :price=, :currency
29
30
 
@@ -32,16 +33,19 @@ module Spree
32
33
  dependent: :destroy,
33
34
  inverse_of: :variant
34
35
 
36
+ before_validation :set_cost_currency
37
+
35
38
  validate :check_price
39
+
36
40
  validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
37
- validates :price, numericality: { greater_than_or_equal_to: 0 }
41
+ validates :price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
38
42
  validates_uniqueness_of :sku, allow_blank: true, conditions: -> { where(deleted_at: nil) }
39
43
 
40
- before_validation :set_cost_currency
41
44
  after_save :save_default_price
45
+
42
46
  after_create :create_stock_items
43
47
  after_create :set_position
44
- after_create :set_master_out_of_stock, :unless => :is_master?
48
+ after_create :set_master_out_of_stock, unless: :is_master?
45
49
 
46
50
  after_touch :clear_in_stock_cache
47
51
 
@@ -58,7 +62,11 @@ module Spree
58
62
  end
59
63
 
60
64
  def cost_price=(price)
61
- self[:cost_price] = parse_price(price) if price.present?
65
+ self[:cost_price] = Spree::LocalizedNumber.parse(price) if price.present?
66
+ end
67
+
68
+ def weight=(weight)
69
+ self[:weight] = Spree::LocalizedNumber.parse(weight) if weight.present?
62
70
  end
63
71
 
64
72
  # returns number of units currently on backorder for this variant.
@@ -66,6 +74,10 @@ module Spree
66
74
  inventory_units.with_state('backordered').size
67
75
  end
68
76
 
77
+ def is_backorderable?
78
+ Spree::Stock::Quantifier.new(self).backorderable?
79
+ end
80
+
69
81
  def options_text
70
82
  values = self.option_values.sort do |a, b|
71
83
  a.option_type.position <=> b.option_type.position
@@ -177,17 +189,6 @@ module Spree
177
189
  end
178
190
 
179
191
  private
180
- # strips all non-price-like characters from the price, taking into account locale settings
181
- def parse_price(price)
182
- return price unless price.is_a?(String)
183
-
184
- separator, delimiter = I18n.t([:'number.currency.format.separator', :'number.currency.format.delimiter'])
185
- non_price_characters = /[^0-9\-#{separator}]/
186
- price.gsub!(non_price_characters, '') # strip everything else first
187
- price.gsub!(separator, '.') unless separator == '.' # then replace the locale-specific decimal separator with the standard separator if necessary
188
-
189
- price.to_d
190
- end
191
192
 
192
193
  def set_master_out_of_stock
193
194
  if product.master && product.master.in_stock?
@@ -1,10 +1,10 @@
1
1
  module Spree
2
2
  class Zone < Spree::Base
3
- has_many :zone_members, dependent: :destroy, class_name: "Spree::ZoneMember"
4
- has_many :tax_rates, dependent: :destroy
3
+ has_many :zone_members, dependent: :destroy, class_name: "Spree::ZoneMember", inverse_of: :zone
4
+ has_many :tax_rates, dependent: :destroy, inverse_of: :zone
5
5
  has_and_belongs_to_many :shipping_methods, :join_table => 'spree_shipping_methods_zones'
6
6
 
7
- validates :name, presence: true, uniqueness: true
7
+ validates :name, presence: true, uniqueness: { allow_blank: true }
8
8
  after_save :remove_defunct_members
9
9
  after_save :remove_previous_default
10
10
 
@@ -92,23 +92,11 @@ module Spree
92
92
  end
93
93
 
94
94
  def country_ids=(ids)
95
- zone_members.destroy_all
96
- ids.reject{ |id| id.blank? }.map do |id|
97
- member = ZoneMember.new
98
- member.zoneable_type = 'Spree::Country'
99
- member.zoneable_id = id
100
- members << member
101
- end
95
+ set_zone_members(ids, 'Spree::Country')
102
96
  end
103
97
 
104
98
  def state_ids=(ids)
105
- zone_members.destroy_all
106
- ids.reject{ |id| id.blank? }.map do |id|
107
- member = ZoneMember.new
108
- member.zoneable_type = 'Spree::State'
109
- member.zoneable_id = id
110
- members << member
111
- end
99
+ set_zone_members(ids, 'Spree::State')
112
100
  end
113
101
 
114
102
  # Indicates whether the specified zone falls entirely within the zone performing
@@ -136,5 +124,15 @@ module Spree
136
124
  def remove_previous_default
137
125
  Spree::Zone.where('id != ?', self.id).update_all(default_tax: false) if default_tax
138
126
  end
127
+
128
+ def set_zone_members(ids, type)
129
+ zone_members.destroy_all
130
+ ids.reject{ |id| id.blank? }.map do |id|
131
+ member = ZoneMember.new
132
+ member.zoneable_type = type
133
+ member.zoneable_id = id
134
+ members << member
135
+ end
136
+ end
139
137
  end
140
138
  end
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class ZoneMember < Spree::Base
3
- belongs_to :zone, class_name: 'Spree::Zone', counter_cache: true
3
+ belongs_to :zone, class_name: 'Spree::Zone', counter_cache: true, inverse_of: :zone_members
4
4
  belongs_to :zoneable, polymorphic: true
5
5
 
6
6
  def name
@@ -2,25 +2,26 @@ Spree::Core::Engine.config.to_prepare do
2
2
  if Spree.user_class
3
3
  Spree.user_class.class_eval do
4
4
 
5
- include Spree::UserReporting
6
5
  include Spree::UserApiAuthentication
6
+ include Spree::UserReporting
7
+
7
8
  has_and_belongs_to_many :spree_roles,
8
- :join_table => 'spree_roles_users',
9
- :foreign_key => "user_id",
10
- :class_name => "Spree::Role"
9
+ join_table: 'spree_roles_users',
10
+ foreign_key: "user_id",
11
+ class_name: "Spree::Role"
11
12
 
12
- has_many :spree_orders, :foreign_key => "user_id", :class_name => "Spree::Order"
13
+ has_many :spree_orders, foreign_key: "user_id", class_name: "Spree::Order"
13
14
 
14
- belongs_to :ship_address, :class_name => 'Spree::Address'
15
- belongs_to :bill_address, :class_name => 'Spree::Address'
15
+ belongs_to :ship_address, class_name: 'Spree::Address'
16
+ belongs_to :bill_address, class_name: 'Spree::Address'
16
17
 
17
18
  # has_spree_role? simply needs to return true or false whether a user has a role or not.
18
19
  def has_spree_role?(role_in_question)
19
- spree_roles.where(:name => role_in_question.to_s).any?
20
+ spree_roles.where(name: role_in_question.to_s).any?
20
21
  end
21
22
 
22
23
  def last_incomplete_spree_order
23
- spree_orders.incomplete.where(:created_by_id => self.id).order('created_at DESC').first
24
+ spree_orders.incomplete.where(user_id: self.id).order('created_at DESC').first
24
25
  end
25
26
  end
26
27
  end
@@ -474,7 +474,7 @@ en:
474
474
  choose_dashboard_locale: Choose Dashboard Locale
475
475
  choose_location: Choose location
476
476
  city: City
477
- click_and_drag_on_the_products_to_sort_them: 'Click &amp; drag on the products to sort them.'
477
+ click_and_drag_on_the_products_to_sort_them: Click and drag on the products to sort them
478
478
  clone: Clone
479
479
  close: Close
480
480
  close_all_adjustments: Close All Adjustments
@@ -719,6 +719,7 @@ en:
719
719
  logout: Logout
720
720
  look_for_similar_items: Look for similar items
721
721
  make_refund: Make refund
722
+ manage_variants: Manage Variants
722
723
  master_price: Master Price
723
724
  match_choices:
724
725
  all: All
@@ -812,6 +813,7 @@ en:
812
813
  or_over_price: ! '%{price} or over'
813
814
  order: Order
814
815
  order_adjustments: Order adjustments
816
+ order_already_updated: The order has already been updated.
815
817
  order_approved: Order approved
816
818
  order_canceled: Order canceled
817
819
  order_details: Order Details
@@ -1073,6 +1075,7 @@ en:
1073
1075
  show_only_considered_risky: Only show risky orders
1074
1076
  show_rate_in_label: Show rate in label
1075
1077
  sku: SKU
1078
+ skus: SKU's
1076
1079
  slug: Slug
1077
1080
  source: Source
1078
1081
  special_instructions: Special Instructions
@@ -10,7 +10,7 @@ class MoveOrderTokenFromTokenizedPermission < ActiveRecord::Migration
10
10
  Spree::Order.includes(:tokenized_permission).each do |o|
11
11
  o.update_column :guest_token, o.tokenized_permission.token
12
12
  end
13
- when 'Mysql2'
13
+ when 'Mysql2', 'MySQL'
14
14
  execute "UPDATE spree_orders, spree_tokenized_permissions
15
15
  SET spree_orders.guest_token = spree_tokenized_permissions.token
16
16
  WHERE spree_tokenized_permissions.permissable_id = spree_orders.id
@@ -3,10 +3,8 @@ class SetShipmentTotalForUsersUpgrading < ActiveRecord::Migration
3
3
  # NOTE You might not need this at all unless you're upgrading from Spree 2.1.x
4
4
  # or below. For those upgrading this should populate the Order#shipment_total
5
5
  # for legacy orders
6
- execute "UPDATE spree_orders
7
- SET shipment_total = (SELECT SUM(spree_shipments.cost) AS sum_id
8
- FROM spree_shipments
9
- WHERE spree_shipments.order_id = spree_orders.id)
10
- WHERE spree_orders.completed_at IS NOT NULL AND spree_orders.shipment_total = 0"
6
+ Spree::Order.complete.where('shipment_total = ?', 0).includes(:shipments).find_each do |order|
7
+ order.update_column(:shipment_total, order.shipments.sum(:cost))
8
+ end
11
9
  end
12
10
  end
@@ -0,0 +1,5 @@
1
+ class AddStateLockVersionToOrder < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_orders, :state_lock_version, :integer, default: 0, null: false
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ class FixAdjustmentOrderPresence < ActiveRecord::Migration
2
+ def change
3
+ say 'Fixing adjustments without direct order reference'
4
+ Spree::Adjustment.where(order: nil).find_each do |adjustment|
5
+ adjustable = adjustment.adjustable
6
+ if adjustable.is_a? Spree::Order
7
+ adjustment.update_attributes!(order_id: adjustable.id)
8
+ else
9
+ adjustment.update_attributes!(adjustable: adjustable.order)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ class UpdateClassificationsPositions < ActiveRecord::Migration
2
+ def up
3
+ Spree::Taxon.all.each do |taxon|
4
+ taxon.classifications.each_with_index do |c12n, i|
5
+ c12n.set_list_position(i + 1)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -53,14 +53,10 @@ User-agent: *
53
53
  Disallow: /checkout
54
54
  Disallow: /cart
55
55
  Disallow: /orders
56
- Disallow: /countries
57
- Disallow: /line_items
58
- Disallow: /password_resets
59
- Disallow: /states
60
- Disallow: /user_sessions
61
- Disallow: /user_registrations
62
- Disallow: /users
56
+ Disallow: /user
63
57
  Disallow: /account
58
+ Disallow: /api
59
+ Disallow: /password
64
60
  ROBOTS
65
61
  end
66
62
 
@@ -57,12 +57,14 @@ require 'spree/migrations'
57
57
  require 'spree/core/engine'
58
58
 
59
59
  require 'spree/i18n'
60
+ require 'spree/localized_number'
60
61
  require 'spree/money'
61
-
62
62
  require 'spree/permitted_attributes'
63
63
  require 'spree/core/user_address'
64
64
  require 'spree/core/user_payment_source'
65
+
65
66
  require 'spree/core/delegate_belongs_to'
67
+ require 'spree/core/importer'
66
68
  require 'spree/core/permalinks'
67
69
  require 'spree/core/calculated_adjustments'
68
70
  require 'spree/core/adjustment_source'
@@ -73,8 +75,6 @@ require 'spree/core/controller_helpers/ssl'
73
75
  require 'spree/core/controller_helpers/store'
74
76
  require 'spree/core/controller_helpers/strong_parameters'
75
77
 
76
- require 'spree/core/importer'
77
-
78
78
  # Hack waiting on https://github.com/pluginaweek/state_machine/pull/275
79
79
  module StateMachine
80
80
  module Integrations
@@ -22,13 +22,14 @@ module Spree
22
22
  if @simple_current_order
23
23
  @simple_current_order.last_ip_address = ip_address
24
24
  return @simple_current_order
25
+ else
26
+ @simple_current_order = Spree::Order.new
25
27
  end
26
28
  end
27
29
 
28
30
  # The current incomplete order from the guest_token for use in cart and during checkout
29
31
  def current_order(options = {})
30
32
  options[:create_order_if_necessary] ||= false
31
- options[:lock] ||= false
32
33
 
33
34
  return @current_order if @current_order
34
35
 
@@ -56,11 +57,9 @@ module Spree
56
57
  end
57
58
 
58
59
  def set_current_order
59
- if user = try_spree_current_user
60
- if cookies.signed[:guest_token].nil? && last_incomplete_order
61
- cookies.permanent.signed[:guest_token] = last_incomplete_order.guest_token
62
- elsif current_order && last_incomplete_order && current_order != last_incomplete_order
63
- current_order.merge!(last_incomplete_order, user)
60
+ if try_spree_current_user && current_order
61
+ try_spree_current_user.orders.incomplete.where('id != ?', current_order.id).each do |order|
62
+ current_order.merge!(order, try_spree_current_user)
64
63
  end
65
64
  end
66
65
  end
@@ -74,6 +73,7 @@ module Spree
74
73
  end
75
74
 
76
75
  private
76
+
77
77
  def last_incomplete_order
78
78
  @last_incomplete_order ||= try_spree_current_user.last_incomplete_spree_order
79
79
  end
@@ -83,13 +83,14 @@ module Spree
83
83
  end
84
84
 
85
85
  def find_order_by_token_or_user(options={})
86
+ options[:lock] ||= false
86
87
 
87
88
  # Find any incomplete orders for the guest_token
88
89
  order = Spree::Order.incomplete.includes(:adjustments).lock(options[:lock]).find_by(current_order_params)
89
90
 
90
91
  # Find any incomplete orders for the current user
91
92
  if order.nil? && try_spree_current_user
92
- order = Spree::Order.incomplete.order('id DESC').where({ currency: current_currency, user_id: try_spree_current_user.try(:id)}).first
93
+ order = last_incomplete_order
93
94
  end
94
95
 
95
96
  order