spree_core 2.4.6 → 2.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/spree/base_helper.rb +1 -1
- data/app/helpers/spree/products_helper.rb +1 -1
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/order.rb +7 -0
- data/app/models/spree/product_property.rb +2 -0
- data/app/models/spree/promotion/actions/create_line_items.rb +12 -3
- data/app/models/spree/promotion.rb +11 -5
- data/app/models/spree/shipment.rb +2 -0
- data/app/models/spree/variant.rb +6 -1
- data/db/migrate/20140309033438_create_store_from_preferences.rb +7 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/permitted_attributes.rb +7 -3
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e70453c69a40765c3da043aaa45500faf53a473
|
4
|
+
data.tar.gz: 7f7d4d3f6d687e4ca780d632db70944a51ec4a17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cb8f296090b301cef84ba89770fb22df0bccb7a5d6e6baab595adb07e607d181d7608db28d8f29f820d5fe6ead85e5bc71411e523f31f6b296ad2e5e725a004
|
7
|
+
data.tar.gz: 1fd7c088dc684dd038214c82eee41278b4fd18ce874570adb45532fbe918a9c69bcb110e3628585975e66555f32ce93295026c6ba2f321baa3fb9f75dd95171c
|
@@ -105,7 +105,7 @@ module Spree
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def taxons_tree(root_taxon, current_taxon, max_level = 1)
|
108
|
-
return '' if max_level < 1 || root_taxon.
|
108
|
+
return '' if max_level < 1 || root_taxon.leaf?
|
109
109
|
content_tag :ul, class: 'taxons-list' do
|
110
110
|
root_taxon.children.map do |taxon|
|
111
111
|
css_class = (current_taxon && current_taxon.self_and_ancestors.include?(taxon)) ? 'current' : nil
|
@@ -45,7 +45,7 @@ module Spree
|
|
45
45
|
|
46
46
|
def line_item_description_text description_text
|
47
47
|
if description_text.present?
|
48
|
-
truncate(strip_tags(description_text.gsub(' ', ' ')), length: 100)
|
48
|
+
truncate(strip_tags(description_text.gsub(' ', ' ').squish), length: 100)
|
49
49
|
else
|
50
50
|
Spree.t(:product_has_no_description)
|
51
51
|
end
|
@@ -2,7 +2,7 @@ module Spree
|
|
2
2
|
class Classification < Spree::Base
|
3
3
|
self.table_name = 'spree_products_taxons'
|
4
4
|
acts_as_list scope: :taxon
|
5
|
-
belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications
|
5
|
+
belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications, touch: true
|
6
6
|
belongs_to :taxon, class_name: "Spree::Taxon", inverse_of: :classifications, touch: true
|
7
7
|
|
8
8
|
# For #3494
|
data/app/models/spree/order.rb
CHANGED
@@ -351,6 +351,13 @@ module Spree
|
|
351
351
|
def outstanding_balance
|
352
352
|
if state == 'canceled'
|
353
353
|
-1 * payment_total
|
354
|
+
elsif reimbursements.includes(:refunds).size > 0
|
355
|
+
reimbursed = reimbursements.includes(:refunds).inject(0) do |sum, reimbursement|
|
356
|
+
sum + reimbursement.refunds.sum(:amount)
|
357
|
+
end
|
358
|
+
# If reimbursement has happened add it back to total to prevent balance_due payment state
|
359
|
+
# See: https://github.com/spree/spree/issues/6229
|
360
|
+
total - (payment_total + reimbursed)
|
354
361
|
else
|
355
362
|
total - payment_total
|
356
363
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Spree
|
2
2
|
class ProductProperty < Spree::Base
|
3
|
+
acts_as_list scope: :product
|
4
|
+
|
3
5
|
belongs_to :product, touch: true, class_name: 'Spree::Product', inverse_of: :product_properties
|
4
6
|
belongs_to :property, class_name: 'Spree::Property', inverse_of: :product_properties
|
5
7
|
|
@@ -39,14 +39,23 @@ module Spree
|
|
39
39
|
order = options[:order]
|
40
40
|
return unless self.eligible? order
|
41
41
|
|
42
|
+
action_taken = false
|
42
43
|
promotion_action_line_items.each do |item|
|
43
44
|
current_quantity = order.quantity_of(item.variant)
|
44
|
-
if current_quantity < item.quantity
|
45
|
-
order.contents.add(item.variant, item.quantity - current_quantity)
|
45
|
+
if current_quantity < item.quantity && item_available?(item)
|
46
|
+
line_item = order.contents.add(item.variant, item.quantity - current_quantity)
|
47
|
+
action_taken = true if line_item.try(:valid?)
|
46
48
|
end
|
47
49
|
end
|
48
|
-
|
50
|
+
action_taken
|
49
51
|
end
|
52
|
+
|
53
|
+
# Checks that there's enough stock to add the line item to the order
|
54
|
+
def item_available?(item)
|
55
|
+
quantifier = Spree::Stock::Quantifier.new(item.variant)
|
56
|
+
quantifier.can_supply? item.quantity
|
57
|
+
end
|
58
|
+
|
50
59
|
end
|
51
60
|
end
|
52
61
|
end
|
@@ -91,23 +91,28 @@ module Spree
|
|
91
91
|
# Promotions without rules are eligible by default.
|
92
92
|
return [] if rules.none?
|
93
93
|
eligible = lambda { |r| r.eligible?(promotable, options) }
|
94
|
-
specific_rules = rules.
|
94
|
+
specific_rules = rules.select { |rule| rule.applicable?(promotable) }
|
95
95
|
return [] if specific_rules.none?
|
96
96
|
|
97
|
+
rule_eligibility = Hash[specific_rules.map do |rule|
|
98
|
+
[rule, rule.eligible?(promotable, options)]
|
99
|
+
end]
|
100
|
+
|
97
101
|
if match_all?
|
98
102
|
# If there are rules for this promotion, but no rules for this
|
99
103
|
# particular promotable, then the promotion is ineligible by default.
|
100
|
-
unless
|
104
|
+
unless rule_eligibility.values.all?
|
101
105
|
@eligibility_errors = specific_rules.map(&:eligibility_errors).detect(&:present?)
|
102
106
|
return nil
|
103
107
|
end
|
104
108
|
specific_rules
|
105
109
|
else
|
106
|
-
unless
|
110
|
+
unless rule_eligibility.values.any?
|
107
111
|
@eligibility_errors = specific_rules.map(&:eligibility_errors).detect(&:present?)
|
108
112
|
return nil
|
109
113
|
end
|
110
|
-
|
114
|
+
|
115
|
+
[rule_eligibility.detect { |_, eligibility| eligibility }.first]
|
111
116
|
end
|
112
117
|
end
|
113
118
|
|
@@ -120,7 +125,8 @@ module Spree
|
|
120
125
|
end
|
121
126
|
|
122
127
|
def adjusted_credits_count(promotable)
|
123
|
-
|
128
|
+
adjustments = promotable.is_a?(Order) ? promotable.all_adjustments : promotable.adjustments
|
129
|
+
credits_count - adjustments.promotion.where(:source_id => actions.pluck(:id)).count
|
124
130
|
end
|
125
131
|
|
126
132
|
def credits
|
data/app/models/spree/variant.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Spree
|
2
2
|
class Variant < Spree::Base
|
3
3
|
acts_as_paranoid
|
4
|
+
acts_as_list
|
4
5
|
|
5
6
|
include Spree::DefaultPrice
|
6
7
|
|
@@ -47,6 +48,10 @@ module Spree
|
|
47
48
|
joins(:prices).where(deleted_at: nil).where('spree_prices.currency' => currency || Spree::Config[:currency]).where('spree_prices.amount IS NOT NULL')
|
48
49
|
end
|
49
50
|
|
51
|
+
def self.having_orders
|
52
|
+
joins(:line_items).distinct
|
53
|
+
end
|
54
|
+
|
50
55
|
def tax_category
|
51
56
|
if self[:tax_category_id].nil?
|
52
57
|
product.tax_category
|
@@ -172,7 +177,7 @@ module Spree
|
|
172
177
|
return 0 unless options.present?
|
173
178
|
|
174
179
|
options.keys.map { |key|
|
175
|
-
m = "#{
|
180
|
+
m = "#{key}_price_modifier_amount".to_sym
|
176
181
|
if self.respond_to? m
|
177
182
|
self.send(m, options[key])
|
178
183
|
else
|
@@ -1,5 +1,12 @@
|
|
1
1
|
class CreateStoreFromPreferences < ActiveRecord::Migration
|
2
2
|
def change
|
3
|
+
# workaround for spree_i18n and Store translations
|
4
|
+
Spree::Store.class_eval do
|
5
|
+
def self.translated?(name)
|
6
|
+
false
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
3
10
|
preference_store = Spree::Preferences::Store.instance
|
4
11
|
if store = Spree::Store.where(default: true).first
|
5
12
|
store.meta_description = preference_store.get('spree/app_configuration/default_meta_description') {}
|
data/lib/spree/core/version.rb
CHANGED
@@ -61,7 +61,9 @@ module Spree
|
|
61
61
|
:meta_keywords, :price, :sku, :deleted_at, :prototype_id,
|
62
62
|
:option_values_hash, :weight, :height, :width, :depth,
|
63
63
|
:shipping_category_id, :tax_category_id,
|
64
|
-
:taxon_ids, :
|
64
|
+
:taxon_ids, :cost_currency, :cost_price,
|
65
|
+
option_type_ids: []
|
66
|
+
]
|
65
67
|
|
66
68
|
@@property_attributes = [:name, :presentation]
|
67
69
|
|
@@ -101,8 +103,10 @@ module Spree
|
|
101
103
|
|
102
104
|
@@variant_attributes = [
|
103
105
|
:name, :presentation, :cost_price, :lock_version,
|
104
|
-
:position, :
|
106
|
+
:position, :track_inventory,
|
105
107
|
:product_id, :product, :option_values_attributes, :price,
|
106
|
-
:weight, :height, :width, :depth, :sku, :cost_currency,
|
108
|
+
:weight, :height, :width, :depth, :sku, :cost_currency,
|
109
|
+
options: [:name, :value], option_value_ids: []
|
110
|
+
]
|
107
111
|
end
|
108
112
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemerchant
|
@@ -258,16 +258,16 @@ dependencies:
|
|
258
258
|
name: rails
|
259
259
|
requirement: !ruby/object:Gem::Requirement
|
260
260
|
requirements:
|
261
|
-
- -
|
261
|
+
- - '='
|
262
262
|
- !ruby/object:Gem::Version
|
263
|
-
version: 4.1.
|
263
|
+
version: 4.1.9
|
264
264
|
type: :runtime
|
265
265
|
prerelease: false
|
266
266
|
version_requirements: !ruby/object:Gem::Requirement
|
267
267
|
requirements:
|
268
|
-
- -
|
268
|
+
- - '='
|
269
269
|
- !ruby/object:Gem::Version
|
270
|
-
version: 4.1.
|
270
|
+
version: 4.1.9
|
271
271
|
- !ruby/object:Gem::Dependency
|
272
272
|
name: ransack
|
273
273
|
requirement: !ruby/object:Gem::Requirement
|