spree_core 2.3.4 → 2.3.5

Sign up to get free protection for your applications and to get access to all the features.
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