spree_core 2.2.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +26 -0
- data/app/helpers/spree/taxons_helper.rb +2 -2
- data/app/models/concerns/spree/user_api_authentication.rb +13 -0
- data/app/models/concerns/spree/user_reporting.rb +27 -0
- data/app/models/spree/adjustment.rb +3 -2
- data/app/models/spree/app_configuration.rb +1 -0
- data/app/models/spree/calculator/default_tax.rb +5 -1
- data/app/models/spree/calculator.rb +2 -2
- data/app/models/spree/credit_card.rb +11 -5
- data/app/models/spree/gateway.rb +25 -0
- data/app/models/spree/item_adjustments.rb +2 -0
- data/app/models/spree/legacy_user.rb +2 -3
- data/app/models/spree/line_item.rb +7 -0
- data/app/models/spree/order/checkout.rb +19 -7
- data/app/models/spree/order/currency_updater.rb +40 -0
- data/app/models/spree/order.rb +19 -3
- data/app/models/spree/order_updater.rb +1 -1
- data/app/models/spree/payment.rb +5 -2
- data/app/models/spree/payment_method.rb +1 -0
- data/app/models/spree/product/scopes.rb +13 -17
- data/app/models/spree/product.rb +10 -2
- data/app/models/spree/promotion/actions/free_shipping.rb +4 -2
- data/app/models/spree/promotion/rules/product.rb +0 -9
- data/app/models/spree/promotion.rb +1 -1
- data/app/models/spree/shipment.rb +19 -14
- data/app/models/spree/shipping_method.rb +2 -2
- data/app/models/spree/shipping_rate.rb +15 -9
- data/app/models/spree/stock/estimator.rb +4 -1
- data/app/models/spree/stock_location.rb +1 -0
- data/app/models/spree/tax_rate.rb +81 -7
- data/config/initializers/user_class_extensions.rb +3 -0
- data/config/locales/en.yml +26 -0
- data/db/default/spree/countries.rb +2 -1
- data/db/migrate/20130213191427_create_default_stock.rb +3 -3
- data/db/migrate/20130417120035_update_adjustment_states.rb +2 -2
- data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +1 -1
- data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +1 -1
- data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +5 -7
- data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +13 -0
- data/lib/generators/spree/dummy/templates/rails/database.yml +6 -6
- data/lib/spree/core/controller_helpers/auth.rb +10 -1
- data/lib/spree/core/controller_helpers/order.rb +1 -1
- data/lib/spree/core/controller_helpers/respond_with.rb +6 -1
- data/lib/spree/core/importer/order.rb +168 -0
- data/lib/spree/core/importer.rb +8 -0
- data/lib/spree/core/product_duplicator.rb +1 -1
- data/lib/spree/core/user_address.rb +2 -0
- data/lib/spree/core/user_payment_source.rb +20 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +4 -0
- data/lib/spree/migrations.rb +1 -1
- data/lib/spree/permitted_attributes.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +23 -1
- data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -6
- data/lib/spree/testing_support/factories/order_factory.rb +8 -8
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +3 -1
- data/lib/spree/testing_support/factories/user_factory.rb +5 -0
- metadata +11 -3
@@ -6,7 +6,7 @@ module Spree
|
|
6
6
|
belongs_to :address, class_name: 'Spree::Address', inverse_of: :shipments
|
7
7
|
belongs_to :stock_location, class_name: 'Spree::StockLocation'
|
8
8
|
|
9
|
-
has_many :shipping_rates, dependent: :delete_all
|
9
|
+
has_many :shipping_rates, -> { order('cost ASC') }, dependent: :delete_all
|
10
10
|
has_many :shipping_methods, through: :shipping_rates
|
11
11
|
has_many :state_changes, as: :stateful
|
12
12
|
has_many :inventory_units, dependent: :delete_all, inverse_of: :shipment
|
@@ -94,7 +94,7 @@ module Spree
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def add_shipping_method(shipping_method, selected = false)
|
97
|
-
shipping_rates.create(shipping_method: shipping_method, selected: selected)
|
97
|
+
shipping_rates.create(shipping_method: shipping_method, selected: selected, cost: cost)
|
98
98
|
end
|
99
99
|
|
100
100
|
def selected_shipping_rate
|
@@ -167,6 +167,10 @@ module Spree
|
|
167
167
|
Spree::Money.new(discounted_cost, { currency: currency })
|
168
168
|
end
|
169
169
|
|
170
|
+
def display_final_price
|
171
|
+
Spree::Money.new(final_price, { currency: currency })
|
172
|
+
end
|
173
|
+
|
170
174
|
def display_item_cost
|
171
175
|
Spree::Money.new(item_cost, { currency: currency })
|
172
176
|
end
|
@@ -178,12 +182,16 @@ module Spree
|
|
178
182
|
ManifestItem = Struct.new(:line_item, :variant, :quantity, :states)
|
179
183
|
|
180
184
|
def manifest
|
181
|
-
|
182
|
-
|
185
|
+
# Grouping by the ID means that we don't have to call out to the association accessor
|
186
|
+
# This makes the grouping by faster because it results in less SQL cache hits.
|
187
|
+
inventory_units.group_by(&:variant_id).map do |variant_id, units|
|
188
|
+
units.group_by(&:line_item_id).map do |line_item_id, units|
|
183
189
|
|
184
190
|
states = {}
|
185
191
|
units.group_by(&:state).each { |state, iu| states[state] = iu.count }
|
186
192
|
|
193
|
+
line_item = units.first.line_item
|
194
|
+
variant = units.first.variant
|
187
195
|
ManifestItem.new(line_item, variant, units.length, states)
|
188
196
|
end
|
189
197
|
end.flatten
|
@@ -269,17 +277,14 @@ module Spree
|
|
269
277
|
)
|
270
278
|
end
|
271
279
|
|
272
|
-
def persist_cost
|
273
|
-
self.cost = selected_shipping_rate.cost
|
274
|
-
update_amounts
|
275
|
-
end
|
276
|
-
|
277
280
|
def update_amounts
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
281
|
+
if selected_shipping_rate
|
282
|
+
self.update_columns(
|
283
|
+
cost: selected_shipping_rate.cost,
|
284
|
+
adjustment_total: adjustments.additional.map(&:update!).compact.sum,
|
285
|
+
updated_at: Time.now,
|
286
|
+
)
|
287
|
+
end
|
283
288
|
end
|
284
289
|
|
285
290
|
private
|
@@ -1,15 +1,15 @@
|
|
1
1
|
module Spree
|
2
2
|
class ShippingMethod < ActiveRecord::Base
|
3
|
+
acts_as_paranoid
|
3
4
|
include Spree::Core::CalculatedAdjustments
|
4
5
|
DISPLAY = [:both, :front_end, :back_end]
|
5
6
|
|
6
7
|
default_scope -> { where(deleted_at: nil) }
|
7
8
|
|
8
|
-
has_many :adjustments, as: :source
|
9
|
-
has_many :shipments
|
10
9
|
has_many :shipping_method_categories, :dependent => :destroy
|
11
10
|
has_many :shipping_categories, through: :shipping_method_categories
|
12
11
|
has_many :shipping_rates, inverse_of: :shipping_method
|
12
|
+
has_many :shipments, :through => :shipping_rates
|
13
13
|
|
14
14
|
has_and_belongs_to_many :zones, :join_table => 'spree_shipping_methods_zones',
|
15
15
|
:class_name => 'Spree::Zone',
|
@@ -4,11 +4,6 @@ module Spree
|
|
4
4
|
belongs_to :shipping_method, class_name: 'Spree::ShippingMethod', inverse_of: :shipping_rates
|
5
5
|
belongs_to :tax_rate, class_name: 'Spree::TaxRate'
|
6
6
|
|
7
|
-
scope :with_shipping_method,
|
8
|
-
-> { includes(:shipping_method).
|
9
|
-
references(:shipping_method).
|
10
|
-
order("cost ASC") }
|
11
|
-
|
12
7
|
delegate :order, :currency, to: :shipment
|
13
8
|
delegate :name, to: :shipping_method
|
14
9
|
|
@@ -16,17 +11,24 @@ module Spree
|
|
16
11
|
Spree::Money.new(cost, currency: currency)
|
17
12
|
end
|
18
13
|
|
19
|
-
def
|
20
|
-
|
14
|
+
def calculate_tax_amount
|
15
|
+
tax_rate.calculator.compute_shipping_rate(self)
|
21
16
|
end
|
22
17
|
|
23
18
|
def display_price
|
24
19
|
price = display_base_price.to_s
|
25
20
|
if tax_rate
|
26
|
-
|
21
|
+
tax_amount = calculate_tax_amount
|
27
22
|
if tax_rate.included_in_price?
|
28
|
-
|
23
|
+
if tax_amount > 0
|
24
|
+
amount = "#{display_tax_amount(tax_amount)} #{tax_rate.name}"
|
25
|
+
price += " (incl. #{amount})"
|
26
|
+
else
|
27
|
+
amount = "#{display_tax_amount(tax_amount*-1)} #{tax_rate.name}"
|
28
|
+
price += " (excl. #{amount})"
|
29
|
+
end
|
29
30
|
else
|
31
|
+
amount = "#{display_tax_amount(tax_amount)} #{tax_rate.name}"
|
30
32
|
price += " (+ #{amount})"
|
31
33
|
end
|
32
34
|
end
|
@@ -34,6 +36,10 @@ module Spree
|
|
34
36
|
end
|
35
37
|
alias_method :display_cost, :display_price
|
36
38
|
|
39
|
+
def display_tax_amount(tax_amount)
|
40
|
+
Spree::Money.new(tax_amount, currency: currency)
|
41
|
+
end
|
42
|
+
|
37
43
|
def shipping_method
|
38
44
|
Spree::ShippingMethod.unscoped { super }
|
39
45
|
end
|
@@ -32,7 +32,10 @@ module Spree
|
|
32
32
|
tax_category = shipping_method.tax_category
|
33
33
|
if tax_category
|
34
34
|
tax_rate = tax_category.tax_rates.detect do |rate|
|
35
|
-
rate
|
35
|
+
# If the rate's zone matches the order's zone, a positive adjustment will be applied.
|
36
|
+
# If the rate is from the default tax zone, then a negative adjustment will be applied.
|
37
|
+
# See the tests in shipping_rate_spec.rb for an example of this.d
|
38
|
+
rate.zone == package.order.tax_zone || rate.zone.default_tax?
|
36
39
|
end
|
37
40
|
end
|
38
41
|
|
@@ -26,9 +26,28 @@ module Spree
|
|
26
26
|
# Gets the array of TaxRates appropriate for the specified order
|
27
27
|
def self.match(order)
|
28
28
|
return [] unless order.tax_zone
|
29
|
-
all.select do |rate|
|
30
|
-
|
31
|
-
|
29
|
+
rates = all.select do |rate|
|
30
|
+
# Why "potentially"?
|
31
|
+
# Go see the documentation for that method.
|
32
|
+
rate.potentially_applicable?(order)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Imagine with me this scenario:
|
36
|
+
# You are living in Spain and you have a store which ships to France.
|
37
|
+
# Spain is therefore your default tax rate.
|
38
|
+
# When you ship to Spain, you want the Spanish rate to apply.
|
39
|
+
# When you ship to France, you want the French rate to apply.
|
40
|
+
#
|
41
|
+
# Normally, Spree would notice that you have two potentially applicable
|
42
|
+
# tax rates for one particular item.
|
43
|
+
# When you ship to Spain, only the Spanish one will apply.
|
44
|
+
# When you ship to France, you'll see a Spanish refund AND a French tax.
|
45
|
+
# This little bit of code at the end stops the Spanish refund from appearing.
|
46
|
+
#
|
47
|
+
# For further discussion, see #4397 and #4327.
|
48
|
+
rates.delete_if do |rate|
|
49
|
+
rate.included_in_price? &&
|
50
|
+
(rates - [rate]).map(&:tax_category).include?(rate.tax_category)
|
32
51
|
end
|
33
52
|
end
|
34
53
|
|
@@ -48,6 +67,7 @@ module Spree
|
|
48
67
|
end
|
49
68
|
end
|
50
69
|
|
70
|
+
# This method is best described by the documentation on #potentially_applicable?
|
51
71
|
def self.adjust(order, items)
|
52
72
|
rates = self.match(order)
|
53
73
|
tax_categories = rates.map(&:tax_category)
|
@@ -75,13 +95,62 @@ module Spree
|
|
75
95
|
rate || 0
|
76
96
|
end
|
77
97
|
|
98
|
+
|
99
|
+
# Tax rates can *potentially* be applicable to an order.
|
100
|
+
# We do not know if they are/aren't until we attempt to apply these rates to
|
101
|
+
# the items contained within the Order itself.
|
102
|
+
# For instance, if a rate passes the criteria outlined in this method,
|
103
|
+
# but then has a tax category that doesn't match against any of the line items
|
104
|
+
# inside of the order, then that tax rate will not be applicable to anything.
|
105
|
+
# For instance:
|
106
|
+
#
|
107
|
+
# Zones:
|
108
|
+
# - Spain (default tax zone)
|
109
|
+
# - France
|
110
|
+
#
|
111
|
+
# Tax rates: (note: amounts below do not actually reflect real VAT rates)
|
112
|
+
# 21% inclusive - "Clothing" - Spain
|
113
|
+
# 18% inclusive - "Clothing" - France
|
114
|
+
# 10% inclusive - "Food" - Spain
|
115
|
+
# 8% inclusive - "Food" - France
|
116
|
+
# 5% inclusive - "Hotels" - Spain
|
117
|
+
# 2% inclusive - "Hotels" - France
|
118
|
+
#
|
119
|
+
# Order has:
|
120
|
+
# Line Item #1 - Tax Category: Clothing
|
121
|
+
# Line Item #2 - Tax Category: Food
|
122
|
+
#
|
123
|
+
# Tax rates that should be selected:
|
124
|
+
#
|
125
|
+
# 21% inclusive - "Clothing" - Spain
|
126
|
+
# 10% inclusive - "Food" - Spain
|
127
|
+
#
|
128
|
+
# If the order's address changes to one in France, then the tax will be recalculated:
|
129
|
+
#
|
130
|
+
# 18% inclusive - "Clothing" - France
|
131
|
+
# 8% inclusive - "Food" - France
|
132
|
+
#
|
133
|
+
# Note here that the "Hotels" tax rates will not be used at all.
|
134
|
+
# This is because there are no items which have the tax category of "Hotels".
|
135
|
+
#
|
136
|
+
# Under no circumstances should negative adjustments be applied for the Spanish tax rates.
|
137
|
+
#
|
138
|
+
# Those rates should never come into play at all and only the French rates should apply.
|
139
|
+
def potentially_applicable?(order)
|
140
|
+
# If the rate's zone matches the order's tax zone, then it's applicable.
|
141
|
+
self.zone == order.tax_zone ||
|
142
|
+
# If the rate's zone *contains* the order's tax zone, then it's applicable.
|
143
|
+
self.zone.contains?(order.tax_zone) ||
|
144
|
+
# 1) The rate's zone is the default zone, then it's always applicable.
|
145
|
+
(self.included_in_price? && self.zone.default_tax)
|
146
|
+
end
|
147
|
+
|
78
148
|
# Creates necessary tax adjustments for the order.
|
79
149
|
def adjust(order, item)
|
80
|
-
amount =
|
150
|
+
amount = compute_amount(item)
|
81
151
|
return if amount == 0
|
82
152
|
|
83
|
-
included = included_in_price &&
|
84
|
-
Zone.default_tax.contains?(item.order.tax_zone)
|
153
|
+
included = included_in_price && default_zone_or_zone_match?(item)
|
85
154
|
|
86
155
|
if amount < 0
|
87
156
|
label = Spree.t(:refund) + ' ' + create_label
|
@@ -99,7 +168,7 @@ module Spree
|
|
99
168
|
# This method is used by Adjustment#update to recalculate the cost.
|
100
169
|
def compute_amount(item)
|
101
170
|
if included_in_price
|
102
|
-
if
|
171
|
+
if default_zone_or_zone_match?(item)
|
103
172
|
calculator.compute(item)
|
104
173
|
else
|
105
174
|
# In this case, it's a refund.
|
@@ -110,6 +179,11 @@ module Spree
|
|
110
179
|
end
|
111
180
|
end
|
112
181
|
|
182
|
+
def default_zone_or_zone_match?(item)
|
183
|
+
Zone.default_tax.contains?(item.order.tax_zone) ||
|
184
|
+
item.order.tax_zone == self.zone
|
185
|
+
end
|
186
|
+
|
113
187
|
private
|
114
188
|
|
115
189
|
def create_label
|
@@ -1,6 +1,9 @@
|
|
1
1
|
Spree::Core::Engine.config.to_prepare do
|
2
2
|
if Spree.user_class
|
3
3
|
Spree.user_class.class_eval do
|
4
|
+
|
5
|
+
include Spree::UserReporting
|
6
|
+
include Spree::UserApiAuthentication
|
4
7
|
has_and_belongs_to_many :spree_roles,
|
5
8
|
:join_table => 'spree_roles_users',
|
6
9
|
:foreign_key => "user_id",
|
data/config/locales/en.yml
CHANGED
@@ -189,6 +189,9 @@ en:
|
|
189
189
|
spree/state:
|
190
190
|
one: State
|
191
191
|
other: States
|
192
|
+
spree/stock_movement:
|
193
|
+
one: Stock Movement
|
194
|
+
other: Stock Movements
|
192
195
|
spree/stock_location:
|
193
196
|
one: Stock Location
|
194
197
|
other: Stock Locations
|
@@ -229,6 +232,10 @@ en:
|
|
229
232
|
attributes:
|
230
233
|
base:
|
231
234
|
card_expired: "Card has expired"
|
235
|
+
spree/line_item:
|
236
|
+
attributes:
|
237
|
+
currency:
|
238
|
+
must_match_order_currency: "Must match order currency"
|
232
239
|
devise:
|
233
240
|
confirmations:
|
234
241
|
confirmed: Your account was successfully confirmed. You are now signed in.
|
@@ -339,6 +346,15 @@ en:
|
|
339
346
|
taxonomies: Taxonomies
|
340
347
|
taxons: Taxons
|
341
348
|
users: Users
|
349
|
+
user:
|
350
|
+
account: Account
|
351
|
+
addresses: Addresses
|
352
|
+
items: Items
|
353
|
+
items_purchased: Items Purchased
|
354
|
+
order_history: Order History
|
355
|
+
order_num: "Order #"
|
356
|
+
orders: Orders
|
357
|
+
user_information: User Information
|
342
358
|
administration: Administration
|
343
359
|
agree_to_privacy_policy: Agree to Privacy Policy
|
344
360
|
agree_to_terms_of_service: Agree to Terms of Service
|
@@ -370,6 +386,7 @@ en:
|
|
370
386
|
authorization_failure: Authorization Failure
|
371
387
|
auto_capture: Auto Capture
|
372
388
|
available_on: Available On
|
389
|
+
average_order_value: Average Order Value
|
373
390
|
avs_response: AVS Response
|
374
391
|
back: Back
|
375
392
|
back_end: Backend
|
@@ -430,6 +447,7 @@ en:
|
|
430
447
|
choose_a_taxon_to_sort_products_for: "Choose a taxon to sort products for"
|
431
448
|
choose_currency: Choose Currency
|
432
449
|
choose_dashboard_locale: Choose Dashboard Locale
|
450
|
+
choose_location: Choose location
|
433
451
|
city: City
|
434
452
|
clone: Clone
|
435
453
|
close: Close
|
@@ -571,6 +589,7 @@ en:
|
|
571
589
|
count_on_hand_setter: Cannot set count_on_hand manually, as it is set automatically by the recalculate_count_on_hand callback. Please use `update_column(:count_on_hand, value)` instead.
|
572
590
|
expiration: Expiration
|
573
591
|
extension: Extension
|
592
|
+
existing_shipments: Existing shipments
|
574
593
|
failed_payment_attempts: Failed Payment Attempts
|
575
594
|
filename: Filename
|
576
595
|
fill_in_customer_info: Please fill in customer info
|
@@ -624,6 +643,7 @@ en:
|
|
624
643
|
intercept_email_address: Intercept Email Address
|
625
644
|
intercept_email_instructions: Override email recipient and replace with this address.
|
626
645
|
internal_name: Internal Name
|
646
|
+
invalid_credit_card: Invalid credit card.
|
627
647
|
invalid_payment_provider: Invalid payment provider.
|
628
648
|
invalid_promotion_action: Invalid promotion action.
|
629
649
|
invalid_promotion_rule: Invalid promotion rule.
|
@@ -646,6 +666,7 @@ en:
|
|
646
666
|
last_name: Last Name
|
647
667
|
last_name_begins_with: Last Name Begins With
|
648
668
|
learn_more: Learn More
|
669
|
+
lifetime_stats: Lifetime Stats
|
649
670
|
line_item_adjustments: "Line item adjustments"
|
650
671
|
list: List
|
651
672
|
listing_countries: Listing Countries
|
@@ -686,6 +707,7 @@ en:
|
|
686
707
|
all: All
|
687
708
|
none: None
|
688
709
|
max_items: Max Items
|
710
|
+
member_since: Member Since
|
689
711
|
meta_description: Meta Description
|
690
712
|
meta_keywords: Meta Keywords
|
691
713
|
metadata: Metadata
|
@@ -715,6 +737,7 @@ en:
|
|
715
737
|
new_return_authorization: New Return Authorization
|
716
738
|
new_shipping_category: New Shipping Category
|
717
739
|
new_shipping_method: New Shipping Method
|
740
|
+
new_shipment_at_location: New shipment at location
|
718
741
|
new_state: New State
|
719
742
|
new_stock_location: New Stock Location
|
720
743
|
new_stock_movement: New Stock Movement
|
@@ -755,6 +778,7 @@ en:
|
|
755
778
|
product_not_deleted: Product could not be deleted
|
756
779
|
variant_deleted: Variant has been deleted
|
757
780
|
variant_not_deleted: Variant could not be deleted
|
781
|
+
num_orders: "# Orders"
|
758
782
|
on_hand: On Hand
|
759
783
|
open: Open
|
760
784
|
open_all_adjustments: Open All Adjustments
|
@@ -1055,6 +1079,7 @@ en:
|
|
1055
1079
|
stock_location: Stock Location
|
1056
1080
|
stock_location_info: Stock location info
|
1057
1081
|
stock_locations: Stock Locations
|
1082
|
+
stock_locations_need_a_default_country: You must create a default country before creating a stock location.
|
1058
1083
|
stock_management: Stock Management
|
1059
1084
|
stock_management_requires_a_stock_location: Please create a stock location in order to manage stock.
|
1060
1085
|
stock_movements: Stock Movements
|
@@ -1104,6 +1129,7 @@ en:
|
|
1104
1129
|
to_add_variants_you_must_first_define: To add variants, you must first define
|
1105
1130
|
total: Total
|
1106
1131
|
total_price: Total price
|
1132
|
+
total_sales: Total Sales
|
1107
1133
|
track_inventory: Track Inventory
|
1108
1134
|
tracking: Tracking
|
1109
1135
|
tracking_number: Tracking Number
|
@@ -225,6 +225,7 @@ Spree::Country.create!([
|
|
225
225
|
{ name: "Macedonia", iso3: "MKD", iso: "MK", iso_name: "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF", numcode: "807" },
|
226
226
|
{ name: "New Zealand", iso3: "NZL", iso: "NZ", iso_name: "NEW ZEALAND", numcode: "554" },
|
227
227
|
{ name: "Saint Kitts and Nevis", iso3: "KNA", iso: "KN", iso_name: "SAINT KITTS AND NEVIS", numcode: "659", states_required: true },
|
228
|
-
{ name: "Serbia", iso3: "SRB", iso: "RS", "iso_name" => "SERBIA", numcode: "999" }
|
228
|
+
{ name: "Serbia", iso3: "SRB", iso: "RS", "iso_name" => "SERBIA", numcode: "999" },
|
229
|
+
{ name: "Montenegro", iso3: "MNE", iso: "ME", iso_name: "MONTENEGRO", numcode: "499" }
|
229
230
|
])
|
230
231
|
Spree::Config[:default_country_id] = Spree::Country.find_by(name: "United States").id
|
@@ -5,11 +5,11 @@ class CreateDefaultStock < ActiveRecord::Migration
|
|
5
5
|
location = Spree::StockLocation.new(name: 'default')
|
6
6
|
location.save(validate: false)
|
7
7
|
|
8
|
-
Spree::Variant.
|
8
|
+
Spree::Variant.find_each do |variant|
|
9
9
|
stock_item = Spree::StockItem.unscoped.build(stock_location: location, variant: variant)
|
10
10
|
stock_item.send(:count_on_hand=, variant.count_on_hand)
|
11
11
|
# Avoid running default_scope defined by acts_as_paranoid, related to #3805,
|
12
|
-
# validations would run a query with a delete_at column
|
12
|
+
# validations would run a query with a delete_at column that might not be present yet
|
13
13
|
stock_item.save! validate: false
|
14
14
|
end
|
15
15
|
|
@@ -19,7 +19,7 @@ class CreateDefaultStock < ActiveRecord::Migration
|
|
19
19
|
def down
|
20
20
|
add_column :spree_variants, :count_on_hand, :integer
|
21
21
|
|
22
|
-
Spree::StockItem.
|
22
|
+
Spree::StockItem.find_each do |stock_item|
|
23
23
|
stock_item.variant.update_column :count_on_hand, stock_item.count_on_hand
|
24
24
|
end
|
25
25
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
class UpdateAdjustmentStates < ActiveRecord::Migration
|
2
2
|
def up
|
3
|
-
Spree::Order.complete.
|
3
|
+
Spree::Order.complete.find_each do |order|
|
4
4
|
order.adjustments.update_all(:state => 'closed')
|
5
5
|
end
|
6
6
|
|
7
|
-
Spree::Shipment.shipped.
|
7
|
+
Spree::Shipment.shipped.includes(:adjustment).find_each do |shipment|
|
8
8
|
shipment.adjustment.update_column(:state, 'finalized') if shipment.adjustment
|
9
9
|
end
|
10
10
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class AddShippingRatesToShipments < ActiveRecord::Migration
|
2
2
|
def up
|
3
|
-
Spree::Shipment.
|
3
|
+
Spree::Shipment.find_each do |shipment|
|
4
4
|
shipment.shipping_rates.create(:shipping_method_id => shipment.shipping_method_id,
|
5
5
|
:cost => shipment.cost,
|
6
6
|
:selected => true)
|
@@ -6,7 +6,7 @@ class AddNumberToStockTransfer < ActiveRecord::Migration
|
|
6
6
|
rename_column :spree_stock_transfers, :reference_number, :reference
|
7
7
|
add_column :spree_stock_transfers, :number, :string
|
8
8
|
|
9
|
-
Spree::StockTransfer.
|
9
|
+
Spree::StockTransfer.find_each do |transfer|
|
10
10
|
transfer.send(:generate_stock_transfer_number)
|
11
11
|
transfer.save!
|
12
12
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
class MigrateTaxCategoriesToLineItems < ActiveRecord::Migration
|
2
2
|
def change
|
3
|
-
Spree::LineItem.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
line_item.update_column(:tax_category_id, line_item.product.tax_category_id)
|
9
|
-
end
|
3
|
+
Spree::LineItem.find_each do |line_item|
|
4
|
+
next if line_item.variant.nil?
|
5
|
+
next if line_item.variant.product.nil?
|
6
|
+
next if line_item.product.nil?
|
7
|
+
line_item.update_column(:tax_category_id, line_item.product.tax_category_id)
|
10
8
|
end
|
11
9
|
end
|
12
10
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class AddUserIdToSpreeCreditCards < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
unless Spree::CreditCard.column_names.include? "user_id"
|
4
|
+
add_column :spree_credit_cards, :user_id, :integer
|
5
|
+
add_index :spree_credit_cards, :user_id
|
6
|
+
end
|
7
|
+
|
8
|
+
unless Spree::CreditCard.column_names.include? "payment_method_id"
|
9
|
+
add_column :spree_credit_cards, :payment_method_id, :integer
|
10
|
+
add_index :spree_credit_cards, :payment_method_id
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -16,21 +16,21 @@ production:
|
|
16
16
|
<% when 'mysql' %>
|
17
17
|
development:
|
18
18
|
adapter: mysql2
|
19
|
-
database: <%= database_prefix %>
|
19
|
+
database: <%= database_prefix %><%= options[:lib_name] %>_spree_development
|
20
20
|
encoding: utf8
|
21
21
|
test:
|
22
22
|
adapter: mysql2
|
23
|
-
database: <%= database_prefix %>
|
23
|
+
database: <%= database_prefix %><%= options[:lib_name] %>_spree_test
|
24
24
|
encoding: utf8
|
25
25
|
production:
|
26
26
|
adapter: mysql2
|
27
|
-
database: <%= database_prefix %>
|
27
|
+
database: <%= database_prefix %><%= options[:lib_name] %>_spree_production
|
28
28
|
encoding: utf8
|
29
29
|
<% when 'postgres' %>
|
30
30
|
<% db_host = ENV['DB_HOST'] -%>
|
31
31
|
development:
|
32
32
|
adapter: postgresql
|
33
|
-
database: <%= database_prefix %>
|
33
|
+
database: <%= database_prefix %><%= options[:lib_name] %>_spree_development
|
34
34
|
username: postgres
|
35
35
|
min_messages: warning
|
36
36
|
<% unless db_host.blank? %>
|
@@ -38,7 +38,7 @@ development:
|
|
38
38
|
<% end %>
|
39
39
|
test:
|
40
40
|
adapter: postgresql
|
41
|
-
database: <%= database_prefix %>
|
41
|
+
database: <%= database_prefix %><%= options[:lib_name] %>_spree_test
|
42
42
|
username: postgres
|
43
43
|
min_messages: warning
|
44
44
|
<% unless db_host.blank? %>
|
@@ -46,7 +46,7 @@ test:
|
|
46
46
|
<% end %>
|
47
47
|
production:
|
48
48
|
adapter: postgresql
|
49
|
-
database: <%= database_prefix %>
|
49
|
+
database: <%= database_prefix %><%= options[:lib_name] %>_spree_production
|
50
50
|
username: postgres
|
51
51
|
min_messages: warning
|
52
52
|
<% unless db_host.blank? %>
|
@@ -53,7 +53,16 @@ module Spree
|
|
53
53
|
# proxy method to *possible* spree_current_user method
|
54
54
|
# Authentication extensions (such as spree_auth_devise) are meant to provide spree_current_user
|
55
55
|
def try_spree_current_user
|
56
|
-
|
56
|
+
# This one will be defined by apps looking to hook into Spree
|
57
|
+
# As per authentication_helpers.rb
|
58
|
+
if respond_to?(:spree_current_user)
|
59
|
+
spree_current_user
|
60
|
+
# This one will be defined by Devise
|
61
|
+
elsif respond_to?(:current_spree_user)
|
62
|
+
current_spree_user
|
63
|
+
else
|
64
|
+
nil
|
65
|
+
end
|
57
66
|
end
|
58
67
|
|
59
68
|
def redirect_back_or_default(default)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'spree/responder'
|
2
|
+
|
1
3
|
module ActionController
|
2
4
|
class Base
|
3
5
|
def respond_with(*resources, &block)
|
@@ -17,7 +19,8 @@ module ActionController
|
|
17
19
|
# The action name is needed for processing
|
18
20
|
options.merge!(:action_name => action_name.to_sym)
|
19
21
|
# If responder is not specified then pass in Spree::Responder
|
20
|
-
|
22
|
+
responder = options.delete(:responder) || self.responder
|
23
|
+
responder.call(self, resources, options)
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
@@ -33,6 +36,8 @@ module Spree
|
|
33
36
|
included do
|
34
37
|
cattr_accessor :spree_responders
|
35
38
|
self.spree_responders = {}
|
39
|
+
|
40
|
+
self.responder = Spree::Responder
|
36
41
|
end
|
37
42
|
|
38
43
|
module ClassMethods
|