solidus_core 1.3.0.beta1 → 1.3.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of solidus_core might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/app/assets/images/noimage/large.png +0 -0
- data/app/assets/images/noimage/mini.png +0 -0
- data/app/assets/images/noimage/product.png +0 -0
- data/app/assets/images/noimage/small.png +0 -0
- data/app/models/spree/app_configuration.rb +9 -9
- data/app/models/spree/country.rb +1 -0
- data/app/models/spree/line_item.rb +7 -1
- data/app/models/spree/payment_method.rb +1 -1
- data/app/models/spree/preferences/preferable.rb +1 -0
- data/app/models/spree/preferences/statically_configurable.rb +2 -2
- data/app/models/spree/price.rb +30 -2
- data/app/models/spree/product.rb +4 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +2 -2
- data/app/models/spree/tax/tax_location.rb +4 -0
- data/app/models/spree/tax_rate.rb +2 -11
- data/app/models/spree/variant/price_selector.rb +35 -0
- data/app/models/spree/variant/pricing_options.rb +69 -4
- data/app/models/spree/variant/vat_price_generator.rb +58 -0
- data/app/models/spree/variant.rb +38 -16
- data/config/locales/en.yml +22 -1
- data/db/migrate/20140410141842_add_many_missing_indexes.rb +15 -13
- data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +40 -38
- data/db/migrate/20141217215630_update_product_slug_index.rb +4 -2
- data/db/migrate/20150723224133_remove_unnecessary_indexes.rb +2 -10
- data/db/migrate/20151219020209_add_stock_item_unique_index.rb +2 -2
- data/db/migrate/20160509181311_add_country_iso_to_prices.rb +8 -0
- data/lib/spree/core/class_constantizer.rb +31 -0
- data/lib/spree/core/engine.rb +55 -59
- data/lib/spree/core/environment/calculators.rb +6 -1
- data/lib/spree/core/environment.rb +5 -2
- data/lib/spree/core/environment_extension.rb +16 -12
- data/lib/spree/core/price_migrator.rb +32 -0
- data/lib/spree/core/search/base.rb +2 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +4 -0
- data/lib/spree/migration_helpers.rb +19 -0
- data/lib/spree/money.rb +41 -15
- data/lib/spree/promo/environment.rb +2 -1
- data/lib/spree/testing_support/controller_requests.rb +22 -7
- data/lib/spree/testing_support/factories/state_factory.rb +7 -0
- data/lib/spree/testing_support/factories/stock_location_factory.rb +4 -1
- data/lib/tasks/migrations/create_vat_prices.rake +11 -0
- data/lib/tasks/upgrade.rake +2 -1
- data/spec/lib/spree/core/class_constantizer_spec.rb +68 -0
- data/spec/lib/spree/core/environment_extension_spec.rb +33 -0
- data/spec/lib/spree/core/price_migrator_spec.rb +356 -0
- data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +9 -0
- data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +9 -0
- data/spec/lib/spree/money_spec.rb +75 -0
- data/spec/models/spree/app_configuration_spec.rb +5 -5
- data/spec/models/spree/country_spec.rb +16 -0
- data/spec/models/spree/line_item_spec.rb +6 -2
- data/spec/models/spree/preferences/preferable_spec.rb +5 -0
- data/spec/models/spree/preferences/statically_configurable_spec.rb +4 -0
- data/spec/models/spree/price_spec.rb +89 -0
- data/spec/models/spree/stock/coordinator_spec.rb +9 -0
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +30 -32
- data/spec/models/spree/tax/tax_location_spec.rb +14 -5
- data/spec/models/spree/tax/taxation_integration_spec.rb +15 -42
- data/spec/models/spree/variant/{pricer_spec.rb → price_selector_spec.rb} +41 -1
- data/spec/models/spree/variant/pricing_options_spec.rb +87 -4
- data/spec/models/spree/variant/vat_price_generator_spec.rb +69 -0
- data/spec/models/spree/variant_spec.rb +57 -8
- metadata +14 -5
- data/app/models/spree/product_scope/scopes.rb +0 -47
- data/app/models/spree/variant/pricer.rb +0 -19
@@ -4,15 +4,20 @@ describe Spree::Variant::PricingOptions do
|
|
4
4
|
subject { described_class.new }
|
5
5
|
|
6
6
|
context '.default_price_attributes' do
|
7
|
+
subject { described_class.default_price_attributes }
|
8
|
+
|
9
|
+
it { is_expected.to have_key(:currency) }
|
10
|
+
it { is_expected.to have_key(:country_iso) }
|
11
|
+
|
7
12
|
it 'can be passed into a WHERE clause on Spree::Prices' do
|
8
|
-
expect(Spree::Price.where(
|
13
|
+
expect(Spree::Price.where(subject).to_a).to eq([])
|
9
14
|
end
|
10
15
|
|
11
16
|
context "with a matching price present" do
|
12
17
|
let!(:price) { create(:price) }
|
13
18
|
|
14
19
|
it 'returns a matching price' do
|
15
|
-
expect(Spree::Price.where(
|
20
|
+
expect(Spree::Price.where(subject).to_a).to include(price)
|
16
21
|
end
|
17
22
|
end
|
18
23
|
end
|
@@ -25,9 +30,13 @@ describe Spree::Variant::PricingOptions do
|
|
25
30
|
expect(subject.desired_attributes[:currency]).to eq("USD")
|
26
31
|
end
|
27
32
|
|
33
|
+
it "takes the orders tax address country" do
|
34
|
+
expect(subject.desired_attributes[:country_iso]).to eq("US")
|
35
|
+
end
|
36
|
+
|
28
37
|
context "if line item has no order" do
|
29
38
|
before do
|
30
|
-
expect(line_item).to receive(:order).and_return(nil)
|
39
|
+
expect(line_item).to receive(:order).at_least(:once).and_return(nil)
|
31
40
|
end
|
32
41
|
|
33
42
|
it "returns the line item's currency" do
|
@@ -48,7 +57,7 @@ describe Spree::Variant::PricingOptions do
|
|
48
57
|
context "if neither order nor line item have a currency" do
|
49
58
|
before do
|
50
59
|
expect(line_item).to receive(:currency).and_return(nil)
|
51
|
-
expect(line_item).to receive(:order).and_return(nil)
|
60
|
+
expect(line_item).to receive(:order).at_least(:once).and_return(nil)
|
52
61
|
expect(Spree::Config).to receive(:currency).at_least(:once).and_return("RUB")
|
53
62
|
end
|
54
63
|
|
@@ -58,6 +67,17 @@ describe Spree::Variant::PricingOptions do
|
|
58
67
|
end
|
59
68
|
end
|
60
69
|
|
70
|
+
context ".from_price" do
|
71
|
+
let(:country) { create(:country) }
|
72
|
+
let(:price) { create(:price, country: country) }
|
73
|
+
|
74
|
+
subject { described_class.from_price(price) }
|
75
|
+
it "gets the currency from the previous price" do
|
76
|
+
expect(subject.currency).to eq(price.currency)
|
77
|
+
expect(subject.country_iso).to eq(country.iso)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
61
81
|
describe '#desired_attributes' do
|
62
82
|
context "when called with no arguments" do
|
63
83
|
it "returns the default pricing options" do
|
@@ -72,6 +92,14 @@ describe Spree::Variant::PricingOptions do
|
|
72
92
|
expect(subject.desired_attributes[:currency]).to eq("EUR")
|
73
93
|
end
|
74
94
|
end
|
95
|
+
|
96
|
+
context "when called with a different country_iso" do
|
97
|
+
subject { described_class.new(country_iso: "DE") }
|
98
|
+
|
99
|
+
it "returns a Hash with the correct country" do
|
100
|
+
expect(subject.desired_attributes[:country_iso]).to eq("DE")
|
101
|
+
end
|
102
|
+
end
|
75
103
|
end
|
76
104
|
|
77
105
|
describe "#currency" do
|
@@ -91,6 +119,23 @@ describe Spree::Variant::PricingOptions do
|
|
91
119
|
end
|
92
120
|
end
|
93
121
|
|
122
|
+
describe "#country_iso" do
|
123
|
+
context "when initialized with no country_iso" do
|
124
|
+
it "returns the default country_iso" do
|
125
|
+
expect(Spree::Config).to receive(:admin_vat_country_iso).and_return("US")
|
126
|
+
expect(subject.country_iso).to eq("US")
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context "when initialized with a different country_iso" do
|
131
|
+
subject { described_class.new(country_iso: "DE") }
|
132
|
+
|
133
|
+
it "returns that country_iso" do
|
134
|
+
expect(subject.country_iso).to eq("DE")
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
94
139
|
describe "#cache_key" do
|
95
140
|
it 'creates a cache key out of the values of the attributes hash' do
|
96
141
|
expect(subject.cache_key).to eq("USD")
|
@@ -98,9 +143,47 @@ describe Spree::Variant::PricingOptions do
|
|
98
143
|
|
99
144
|
context "with another currency" do
|
100
145
|
subject { described_class.new(currency: "EUR") }
|
146
|
+
|
101
147
|
it 'creates the correct cache key' do
|
102
148
|
expect(subject.cache_key).to eq("EUR")
|
103
149
|
end
|
150
|
+
|
151
|
+
context "and another country" do
|
152
|
+
subject { described_class.new(currency: "EUR", country_iso: "DE") }
|
153
|
+
|
154
|
+
it 'creates the correct cache key' do
|
155
|
+
expect(subject.cache_key).to eq("EUR/DE")
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
describe "#search_arguments" do
|
162
|
+
let!(:price) { create(:price, currency: "EUR") }
|
163
|
+
let(:options) { {} }
|
164
|
+
|
165
|
+
subject { described_class.new(options).search_arguments }
|
166
|
+
|
167
|
+
context "with a currency given" do
|
168
|
+
let(:options) { { currency: "EUR" } }
|
169
|
+
|
170
|
+
it 'can be passed into a `where` clause' do
|
171
|
+
expect(Spree::Price.where(subject)).to eq([price])
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "with no country given" do
|
176
|
+
it "is an array with only nil inside" do
|
177
|
+
expect(subject[:country_iso]).to eq([nil])
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
context "with a country given" do
|
182
|
+
let(:options) { { country_iso: "DE" } }
|
183
|
+
|
184
|
+
it "is an array with the country and nil" do
|
185
|
+
expect(subject[:country_iso]).to eq(["DE", nil])
|
186
|
+
end
|
104
187
|
end
|
105
188
|
end
|
106
189
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Spree::Variant::VatPriceGenerator do
|
4
|
+
let(:tax_category) { create(:tax_category) }
|
5
|
+
let(:product) { variant.product }
|
6
|
+
let(:variant) { create(:variant, price: 10, tax_category: tax_category) }
|
7
|
+
|
8
|
+
subject { described_class.new(variant).run }
|
9
|
+
|
10
|
+
context "with Germany as default admin country" do
|
11
|
+
let(:germany) { create(:country, iso: "DE") }
|
12
|
+
let(:germany_zone) { create(:zone, countries: [germany]) }
|
13
|
+
let!(:german_vat) { create(:tax_rate, included_in_price: true, amount: 0.19, zone: germany_zone, tax_category: tax_category) }
|
14
|
+
let(:france) { create(:country, iso: "FR") }
|
15
|
+
let(:france_zone) { create(:zone, countries: [france]) }
|
16
|
+
let!(:french_vat) { create(:tax_rate, included_in_price: true, amount: 0.20, zone: france_zone, tax_category: tax_category) }
|
17
|
+
|
18
|
+
before do
|
19
|
+
Spree::Config.admin_vat_country_iso = "DE"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "builds a correct price including VAT for all VAT countries" do
|
23
|
+
subject
|
24
|
+
variant.save
|
25
|
+
variant.reload
|
26
|
+
expect(variant.default_price.for_any_country?).to be false
|
27
|
+
expect(variant.prices.detect { |p| p.country_iso == "DE" }.try!(:amount)).to eq(10.00)
|
28
|
+
expect(variant.prices.detect { |p| p.country_iso == "FR" }.try!(:amount)).to eq(10.08)
|
29
|
+
expect(variant.prices.detect { |p| p.country_iso.nil? }.try!(:amount)).to eq(8.40)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "will not build prices that are already present" do
|
33
|
+
variant.prices.build(amount: 11, country_iso: "FR")
|
34
|
+
variant.prices.build(amount: 11, country_iso: nil)
|
35
|
+
expect { subject }.not_to change { variant.prices.length }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "with no default admin country" do
|
40
|
+
let(:germany) { create(:country, iso: "DE") }
|
41
|
+
let(:germany_zone) { create(:zone, countries: [germany]) }
|
42
|
+
let!(:german_vat) { create(:tax_rate, included_in_price: true, amount: 0.19, zone: germany_zone, tax_category: tax_category) }
|
43
|
+
let(:france) { create(:country, iso: "FR") }
|
44
|
+
let(:france_zone) { create(:zone, countries: [france]) }
|
45
|
+
let!(:french_vat) { create(:tax_rate, included_in_price: true, amount: 0.20, zone: france_zone, tax_category: tax_category) }
|
46
|
+
|
47
|
+
it "builds a correct price including VAT for all VAT countries" do
|
48
|
+
subject
|
49
|
+
variant.save
|
50
|
+
variant.reload
|
51
|
+
expect(variant.default_price.for_any_country?).to be true
|
52
|
+
expect(variant.prices.detect { |p| p.country_iso == "DE" }.try!(:amount)).to eq(11.90)
|
53
|
+
expect(variant.prices.detect { |p| p.country_iso == "FR" }.try!(:amount)).to eq(12.00)
|
54
|
+
expect(variant.prices.detect { |p| p.country_iso.nil? }.try!(:amount)).to eq(10.00)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "for a variant with not tax category" do
|
59
|
+
let(:tax_category) { nil }
|
60
|
+
|
61
|
+
before do
|
62
|
+
product.update(tax_category: nil)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "creates no addditional prices" do
|
66
|
+
expect { subject }.not_to change { variant.prices.length }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -52,6 +52,55 @@ describe Spree::Variant, type: :model do
|
|
52
52
|
it { expect(product.master).to_not be_in_stock }
|
53
53
|
end
|
54
54
|
end
|
55
|
+
|
56
|
+
context "when several countries have VAT" do
|
57
|
+
let(:germany) { create(:country, iso: "DE") }
|
58
|
+
let(:denmark) { create(:country, iso: "DK") }
|
59
|
+
let(:france) { create(:country, iso: "FR") }
|
60
|
+
|
61
|
+
let(:high_vat_zone) { create(:zone, countries: [germany, denmark]) }
|
62
|
+
let(:low_vat_zone) { create(:zone, countries: [france]) }
|
63
|
+
|
64
|
+
let(:tax_category) { create(:tax_category) }
|
65
|
+
|
66
|
+
let!(:high_vat) { create(:tax_rate, included_in_price: true, amount: 0.25, zone: high_vat_zone, tax_category: tax_category) }
|
67
|
+
let!(:low_vat) { create(:tax_rate, included_in_price: true, amount: 0.15, zone: low_vat_zone, tax_category: tax_category) }
|
68
|
+
|
69
|
+
let(:product) { create(:product, tax_category: tax_category) }
|
70
|
+
|
71
|
+
subject(:new_variant) { create(:variant, price: 15, product: product) }
|
72
|
+
|
73
|
+
it "creates the appropriate prices for them" do
|
74
|
+
# default price + FR, DE, DK
|
75
|
+
expect { new_variant }.to change { Spree::Price.count }.by(4)
|
76
|
+
expect(new_variant.prices.find_by(country_iso: "FR").amount).to eq(17.25)
|
77
|
+
expect(new_variant.prices.find_by(country_iso: "DE").amount).to eq(18.75)
|
78
|
+
expect(new_variant.prices.find_by(country_iso: "DK").amount).to eq(18.75)
|
79
|
+
expect(new_variant.prices.find_by(country_iso: nil).amount).to eq(15.00)
|
80
|
+
end
|
81
|
+
|
82
|
+
context "when the products price changes" do
|
83
|
+
context "and rebuild_vat_prices is set to true" do
|
84
|
+
subject { variant.update(price: 99, rebuild_vat_prices: true, tax_category: tax_category) }
|
85
|
+
|
86
|
+
it "creates new appropriate prices for this variant" do
|
87
|
+
expect { subject }.to change { Spree::Price.count }.by(3)
|
88
|
+
expect(variant.prices.find_by(country_iso: "FR").amount).to eq(113.85)
|
89
|
+
expect(variant.prices.find_by(country_iso: "DE").amount).to eq(123.75)
|
90
|
+
expect(variant.prices.find_by(country_iso: "DK").amount).to eq(123.75)
|
91
|
+
expect(variant.prices.find_by(country_iso: nil).amount).to eq(99.00)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context "and rebuild_vat_prices is not set" do
|
96
|
+
subject { variant.update(price: 99, tax_category: tax_category) }
|
97
|
+
|
98
|
+
it "does not create new prices" do
|
99
|
+
expect { subject }.not_to change { Spree::Price.count }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
55
104
|
end
|
56
105
|
|
57
106
|
context "product has other variants" do
|
@@ -182,23 +231,23 @@ describe Spree::Variant, type: :model do
|
|
182
231
|
end
|
183
232
|
end
|
184
233
|
|
185
|
-
context "#
|
186
|
-
subject { variant.
|
234
|
+
context "#price_selector" do
|
235
|
+
subject { variant.price_selector }
|
187
236
|
|
188
|
-
it "returns an instance of a
|
189
|
-
expect(variant.
|
237
|
+
it "returns an instance of a price selector" do
|
238
|
+
expect(variant.price_selector).to be_a(Spree::Config.variant_price_selector_class)
|
190
239
|
end
|
191
240
|
|
192
241
|
it "is instacached" do
|
193
|
-
expect(variant.
|
242
|
+
expect(variant.price_selector.object_id).to eq(variant.price_selector.object_id)
|
194
243
|
end
|
195
244
|
end
|
196
245
|
|
197
246
|
context "#price_for(price_options)" do
|
198
|
-
let(:price_options) { Spree::Config.
|
247
|
+
let(:price_options) { Spree::Config.variant_price_selector_class.pricing_options_class.new }
|
199
248
|
|
200
|
-
it "calls the
|
201
|
-
expect(variant.
|
249
|
+
it "calls the price selector with the given options object" do
|
250
|
+
expect(variant.price_selector).to receive(:price_for).with(price_options)
|
202
251
|
variant.price_for(price_options)
|
203
252
|
end
|
204
253
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solidus_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0.
|
4
|
+
version: 1.3.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Solidus Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemerchant
|
@@ -435,7 +435,6 @@ files:
|
|
435
435
|
- app/models/spree/product_option_type.rb
|
436
436
|
- app/models/spree/product_promotion_rule.rb
|
437
437
|
- app/models/spree/product_property.rb
|
438
|
-
- app/models/spree/product_scope/scopes.rb
|
439
438
|
- app/models/spree/promotion.rb
|
440
439
|
- app/models/spree/promotion/actions/create_adjustment.rb
|
441
440
|
- app/models/spree/promotion/actions/create_item_adjustments.rb
|
@@ -555,9 +554,10 @@ files:
|
|
555
554
|
- app/models/spree/user_stock_location.rb
|
556
555
|
- app/models/spree/validations/db_maximum_length_validator.rb
|
557
556
|
- app/models/spree/variant.rb
|
558
|
-
- app/models/spree/variant/
|
557
|
+
- app/models/spree/variant/price_selector.rb
|
559
558
|
- app/models/spree/variant/pricing_options.rb
|
560
559
|
- app/models/spree/variant/scopes.rb
|
560
|
+
- app/models/spree/variant/vat_price_generator.rb
|
561
561
|
- app/models/spree/variant_property_rule.rb
|
562
562
|
- app/models/spree/variant_property_rule_condition.rb
|
563
563
|
- app/models/spree/variant_property_rule_value.rb
|
@@ -880,6 +880,7 @@ files:
|
|
880
880
|
- db/migrate/20160308000300_disallow_adjustment_finalized_nulls.rb
|
881
881
|
- db/migrate/20160318145302_add_timestamps_to_prices.rb
|
882
882
|
- db/migrate/20160330204846_add_missing_timestamp_columns.rb
|
883
|
+
- db/migrate/20160509181311_add_country_iso_to_prices.rb
|
883
884
|
- db/seeds.rb
|
884
885
|
- lib/generators/spree/custom_user/custom_user_generator.rb
|
885
886
|
- lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt
|
@@ -901,6 +902,7 @@ files:
|
|
901
902
|
- lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css
|
902
903
|
- lib/solidus_core.rb
|
903
904
|
- lib/spree/core.rb
|
905
|
+
- lib/spree/core/class_constantizer.rb
|
904
906
|
- lib/spree/core/controller_helpers/auth.rb
|
905
907
|
- lib/spree/core/controller_helpers/common.rb
|
906
908
|
- lib/spree/core/controller_helpers/order.rb
|
@@ -920,6 +922,7 @@ files:
|
|
920
922
|
- lib/spree/core/importer/order.rb
|
921
923
|
- lib/spree/core/importer/product.rb
|
922
924
|
- lib/spree/core/permalinks.rb
|
925
|
+
- lib/spree/core/price_migrator.rb
|
923
926
|
- lib/spree/core/product_duplicator.rb
|
924
927
|
- lib/spree/core/product_filters.rb
|
925
928
|
- lib/spree/core/role_configuration.rb
|
@@ -935,6 +938,7 @@ files:
|
|
935
938
|
- lib/spree/localized_number.rb
|
936
939
|
- lib/spree/mailer_previews/carton_preview.rb
|
937
940
|
- lib/spree/mailer_previews/order_preview.rb
|
941
|
+
- lib/spree/migration_helpers.rb
|
938
942
|
- lib/spree/migrations.rb
|
939
943
|
- lib/spree/money.rb
|
940
944
|
- lib/spree/permission_sets.rb
|
@@ -1048,6 +1052,7 @@ files:
|
|
1048
1052
|
- lib/tasks/migrations/assure_store_on_orders.rake
|
1049
1053
|
- lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake
|
1050
1054
|
- lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake
|
1055
|
+
- lib/tasks/migrations/create_vat_prices.rake
|
1051
1056
|
- lib/tasks/migrations/migrate_shipping_rate_taxes.rake
|
1052
1057
|
- lib/tasks/migrations/migrate_user_addresses.rake
|
1053
1058
|
- lib/tasks/order_capturing.rake
|
@@ -1063,6 +1068,7 @@ files:
|
|
1063
1068
|
- spec/lib/i18n_spec.rb
|
1064
1069
|
- spec/lib/search/base_spec.rb
|
1065
1070
|
- spec/lib/search/variant_spec.rb
|
1071
|
+
- spec/lib/spree/core/class_constantizer_spec.rb
|
1066
1072
|
- spec/lib/spree/core/controller_helpers/auth_spec.rb
|
1067
1073
|
- spec/lib/spree/core/controller_helpers/order_spec.rb
|
1068
1074
|
- spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb
|
@@ -1072,7 +1078,9 @@ files:
|
|
1072
1078
|
- spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb
|
1073
1079
|
- spec/lib/spree/core/current_store_spec.rb
|
1074
1080
|
- spec/lib/spree/core/delegate_belongs_to_spec.rb
|
1081
|
+
- spec/lib/spree/core/environment_extension_spec.rb
|
1075
1082
|
- spec/lib/spree/core/importer/order_spec.rb
|
1083
|
+
- spec/lib/spree/core/price_migrator_spec.rb
|
1076
1084
|
- spec/lib/spree/core/role_configuration_spec.rb
|
1077
1085
|
- spec/lib/spree/core/stock_configuration_spec.rb
|
1078
1086
|
- spec/lib/spree/core/testing_support/factories/address_factory_spec.rb
|
@@ -1342,9 +1350,10 @@ files:
|
|
1342
1350
|
- spec/models/spree/unit_cancel_spec.rb
|
1343
1351
|
- spec/models/spree/user_spec.rb
|
1344
1352
|
- spec/models/spree/validations/db_maximum_length_validator_spec.rb
|
1345
|
-
- spec/models/spree/variant/
|
1353
|
+
- spec/models/spree/variant/price_selector_spec.rb
|
1346
1354
|
- spec/models/spree/variant/pricing_options_spec.rb
|
1347
1355
|
- spec/models/spree/variant/scopes_spec.rb
|
1356
|
+
- spec/models/spree/variant/vat_price_generator_spec.rb
|
1348
1357
|
- spec/models/spree/variant_property_rule_condition_spec.rb
|
1349
1358
|
- spec/models/spree/variant_property_rule_spec.rb
|
1350
1359
|
- spec/models/spree/variant_property_rule_value_spec.rb
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class ProductScope < Spree::Base
|
3
|
-
before_validation(on: :create) do
|
4
|
-
# Add default empty arguments so scope validates and errors aren't caused when previewing it
|
5
|
-
if name && args = self.class.arguments_for_scope_name(name)
|
6
|
-
self.arguments ||= [''] * args.length
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.all_scopes
|
11
|
-
{
|
12
|
-
# Scopes for selecting products based on taxon
|
13
|
-
taxon: {
|
14
|
-
taxons_name_eq: [:taxon_name],
|
15
|
-
in_taxons: [:taxon_names]
|
16
|
-
},
|
17
|
-
# product selection based on name, or search
|
18
|
-
search: {
|
19
|
-
in_name: [:words],
|
20
|
-
in_name_or_keywords: [:words],
|
21
|
-
in_name_or_description: [:words],
|
22
|
-
with_ids: [:ids]
|
23
|
-
},
|
24
|
-
# Scopes for selecting products based on option types and properties
|
25
|
-
values: {
|
26
|
-
with: [:value],
|
27
|
-
with_property: [:property],
|
28
|
-
with_property_value: [:property, :value],
|
29
|
-
with_option: [:option],
|
30
|
-
with_option_value: [:option, :value]
|
31
|
-
},
|
32
|
-
# product selection based upon master price
|
33
|
-
price: {
|
34
|
-
price_between: [:low, :high],
|
35
|
-
master_price_lte: [:amount],
|
36
|
-
master_price_gte: [:amount]
|
37
|
-
}
|
38
|
-
}
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.arguments_for_scope_name(name)
|
42
|
-
if group = all_scopes.detect { |_k, v| v[name.to_sym] }
|
43
|
-
group[1][name.to_sym]
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class Variant
|
3
|
-
class Pricer
|
4
|
-
def self.pricing_options_class
|
5
|
-
Spree::Variant::PricingOptions
|
6
|
-
end
|
7
|
-
|
8
|
-
attr_reader :variant
|
9
|
-
|
10
|
-
def initialize(variant)
|
11
|
-
@variant = variant
|
12
|
-
end
|
13
|
-
|
14
|
-
def price_for(price_options)
|
15
|
-
variant.prices.currently_valid.find_by(price_options.desired_attributes).try!(:money)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|