spree_core 2.1.4 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/spree/order/checkout.rb +8 -3
- data/app/models/spree/order.rb +3 -3
- data/app/models/spree/order_updater.rb +9 -3
- data/app/models/spree/payment.rb +7 -2
- data/app/models/spree/payment_method.rb +1 -1
- data/app/models/spree/price.rb +1 -0
- data/app/models/spree/promotion.rb +17 -14
- data/app/models/spree/return_authorization.rb +2 -1
- data/app/models/spree/shipping_method.rb +1 -1
- data/app/models/spree/variant.rb +19 -8
- data/config/locales/en.yml +16 -7
- data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +5 -0
- data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +5 -0
- data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +11 -0
- data/lib/spree/core/controller_helpers/auth.rb +5 -12
- data/lib/spree/core/controller_helpers/order.rb +5 -3
- data/lib/spree/core/product_duplicator.rb +10 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +1 -1
- data/lib/spree/promo/coupon_applicator.rb +6 -3
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 729f9d4f394bb9bbd17cf7dbb7142ae574a9183e
|
4
|
+
data.tar.gz: ae2d1dcd731873c1ae6523bf46a1eb6a63db882e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3527af7dec8d2acdf7736713929387e3c099fa6776227640bd9089d2a5814da0c0f41eb54a822e5b80662f9f41126aeea5f155b82c2bfbe8d3b6ba331737b2a
|
7
|
+
data.tar.gz: 238f664949e01954bf25eb9cf8cb14f1a5236b615100c8961d0ee445d9e712022e1527e19ce3ce27c1082751128d2b9f99cf2d6ee8108b5b6452108fedeab6d3
|
@@ -77,11 +77,16 @@ module Spree
|
|
77
77
|
|
78
78
|
before_transition :from => :cart, :do => :ensure_line_items_present
|
79
79
|
|
80
|
-
|
81
|
-
|
80
|
+
if states[:address]
|
81
|
+
before_transition :from => :address, :do => :create_tax_charge!
|
82
|
+
end
|
83
|
+
|
84
|
+
if states[:delivery]
|
85
|
+
before_transition :to => :delivery, :do => :create_proposed_shipments
|
86
|
+
before_transition :to => :delivery, :do => :ensure_available_shipping_rates
|
87
|
+
end
|
82
88
|
|
83
89
|
after_transition :to => :complete, :do => :finalize!
|
84
|
-
after_transition :to => :delivery, :do => :create_tax_charge!
|
85
90
|
after_transition :to => :resumed, :do => :after_resume
|
86
91
|
after_transition :to => :canceled, :do => :after_cancel
|
87
92
|
end
|
data/app/models/spree/order.rb
CHANGED
@@ -528,9 +528,9 @@ module Spree
|
|
528
528
|
|
529
529
|
def is_risky?
|
530
530
|
self.payments.where(%{
|
531
|
-
(avs_response IS NOT NULL and avs_response != 'D') or
|
531
|
+
(avs_response IS NOT NULL and avs_response != '' and avs_response != 'D' and avs_response != 'M') or
|
532
532
|
(cvv_response_code IS NOT NULL and cvv_response_code != 'M') or
|
533
|
-
cvv_response_message IS NOT NULL or
|
533
|
+
cvv_response_message IS NOT NULL and cvv_response_message != '' or
|
534
534
|
state = 'failed'
|
535
535
|
}.squish!).uniq.count > 0
|
536
536
|
end
|
@@ -566,7 +566,7 @@ module Spree
|
|
566
566
|
end
|
567
567
|
|
568
568
|
def has_available_payment
|
569
|
-
return unless delivery?
|
569
|
+
return unless has_step?("delivery") && delivery?
|
570
570
|
# errors.add(:base, :no_payment_methods_available) if available_payment_methods.empty?
|
571
571
|
end
|
572
572
|
|
@@ -102,10 +102,16 @@ module Spree
|
|
102
102
|
# The +payment_state+ value helps with reporting, etc. since it provides a quick and easy way to locate Orders needing attention.
|
103
103
|
def update_payment_state
|
104
104
|
|
105
|
-
#line_item are empty when user empties cart
|
105
|
+
# line_item are empty when user empties cart
|
106
106
|
if line_items.empty? || round_money(order.payment_total) < round_money(order.total)
|
107
|
-
if payments.present?
|
108
|
-
|
107
|
+
if payments.present?
|
108
|
+
if payments.last.state == 'failed'
|
109
|
+
order.payment_state = 'failed'
|
110
|
+
elsif payments.last.state == 'completed'
|
111
|
+
order.payment_state = 'credit_owed'
|
112
|
+
else
|
113
|
+
order.payment_state = 'balance_due'
|
114
|
+
end
|
109
115
|
else
|
110
116
|
order.payment_state = 'balance_due'
|
111
117
|
end
|
data/app/models/spree/payment.rb
CHANGED
@@ -119,11 +119,16 @@ module Spree
|
|
119
119
|
end
|
120
120
|
|
121
121
|
def is_avs_risky?
|
122
|
-
|
122
|
+
return false if avs_response == "D"
|
123
|
+
return false if avs_response.blank?
|
124
|
+
return true
|
123
125
|
end
|
124
126
|
|
125
127
|
def is_cvv_risky?
|
126
|
-
|
128
|
+
return false if cvv_response_code == "M"
|
129
|
+
return false if cvv_response_code.nil?
|
130
|
+
return false if cvv_response_message.present?
|
131
|
+
return true
|
127
132
|
end
|
128
133
|
|
129
134
|
private
|
data/app/models/spree/price.rb
CHANGED
@@ -30,21 +30,24 @@ module Spree
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def activate(payload)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
33
|
+
if order_activatable?(payload[:order]) && eligible?(payload[:order])
|
34
|
+
# make sure code is always downcased (old databases might have mixed case codes)
|
35
|
+
if code.present?
|
36
|
+
event_code = payload[:coupon_code]
|
37
|
+
return unless event_code == self.code.downcase.strip
|
38
|
+
end
|
39
|
+
|
40
|
+
if path.present?
|
41
|
+
return unless path == payload[:path]
|
42
|
+
end
|
43
|
+
|
44
|
+
actions.each do |action|
|
45
|
+
action.perform(payload)
|
46
|
+
end
|
47
|
+
|
48
|
+
return true
|
47
49
|
end
|
50
|
+
false
|
48
51
|
end
|
49
52
|
|
50
53
|
# called anytime order.update! happens
|
@@ -78,7 +78,8 @@ module Spree
|
|
78
78
|
def process_return
|
79
79
|
inventory_units.each do |iu|
|
80
80
|
iu.return!
|
81
|
-
Spree::
|
81
|
+
stock_item = Spree::StockItem.where(variant_id: iu.variant.id, stock_location_id: stock_location_id).first
|
82
|
+
Spree::StockMovement.create!(stock_item_id: stock_item.id, quantity: 1)
|
82
83
|
end
|
83
84
|
|
84
85
|
credit = Adjustment.new(amount: amount.abs * -1, label: Spree.t(:rma_credit))
|
@@ -6,7 +6,7 @@ module Spree
|
|
6
6
|
default_scope -> { where(deleted_at: nil) }
|
7
7
|
|
8
8
|
has_many :shipments
|
9
|
-
has_many :shipping_method_categories
|
9
|
+
has_many :shipping_method_categories, :dependent => :destroy
|
10
10
|
has_many :shipping_categories, through: :shipping_method_categories
|
11
11
|
has_many :shipping_rates, inverse_of: :shipping_method
|
12
12
|
|
data/app/models/spree/variant.rb
CHANGED
@@ -30,7 +30,7 @@ module Spree
|
|
30
30
|
dependent: :destroy
|
31
31
|
|
32
32
|
validate :check_price
|
33
|
-
validates :price, numericality: { greater_than_or_equal_to: 0 }
|
33
|
+
validates :price, numericality: { greater_than_or_equal_to: 0 }
|
34
34
|
|
35
35
|
validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
|
36
36
|
|
@@ -56,7 +56,9 @@ module Spree
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def options_text
|
59
|
-
values = self.option_values.
|
59
|
+
values = self.option_values.sort do |a, b|
|
60
|
+
a.option_type.position <=> b.option_type.position
|
61
|
+
end
|
60
62
|
|
61
63
|
values.map! do |ov|
|
62
64
|
"#{ov.option_type.presentation}: #{ov.presentation}"
|
@@ -76,6 +78,17 @@ module Spree
|
|
76
78
|
deleted_at
|
77
79
|
end
|
78
80
|
|
81
|
+
# Product may be created with deleted_at already set,
|
82
|
+
# which would make AR's default finder return nil.
|
83
|
+
# This is a stopgap for that little problem.
|
84
|
+
def product
|
85
|
+
Spree::Product.unscoped { super }
|
86
|
+
end
|
87
|
+
|
88
|
+
def default_price
|
89
|
+
Spree::Price.unscoped { super }
|
90
|
+
end
|
91
|
+
|
79
92
|
def options=(options = {})
|
80
93
|
options.each do |option|
|
81
94
|
set_option_value(option[:name], option[:value])
|
@@ -136,14 +149,12 @@ module Spree
|
|
136
149
|
"#{sku} #{options_text}".strip
|
137
150
|
end
|
138
151
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
def product
|
143
|
-
Spree::Product.unscoped { super }
|
152
|
+
def in_stock?(quantity=1)
|
153
|
+
puts %q{[DEPRECATION] In Spree 2.2, Variant#in_stock? will no longer take a quantity. Use Variant#can_supply? instead.}
|
154
|
+
can_stock?(quantity)
|
144
155
|
end
|
145
156
|
|
146
|
-
def
|
157
|
+
def can_stock?(quantity=1)
|
147
158
|
Spree::Stock::Quantifier.new(self).can_supply?(quantity)
|
148
159
|
end
|
149
160
|
|
data/config/locales/en.yml
CHANGED
@@ -318,13 +318,18 @@ en:
|
|
318
318
|
delivery_success: Test Mail sent successfully
|
319
319
|
error: ! 'Test Mail error: %{e}'
|
320
320
|
tab:
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
promotions:
|
327
|
-
|
321
|
+
configuration: Configuration
|
322
|
+
option_types: Option Types
|
323
|
+
orders: Orders
|
324
|
+
overview: Overview
|
325
|
+
products: Products
|
326
|
+
promotions: Promotions
|
327
|
+
properties: Properties
|
328
|
+
prototypes: Prototypes
|
329
|
+
reports: Reports
|
330
|
+
taxonomies: Taxonomies
|
331
|
+
taxons: Taxons
|
332
|
+
users: Users
|
328
333
|
administration: Administration
|
329
334
|
agree_to_privacy_policy: Agree to Privacy Policy
|
330
335
|
agree_to_terms_of_service: Agree to Terms of Service
|
@@ -356,6 +361,7 @@ en:
|
|
356
361
|
attachment_styles: Paperclip Styles
|
357
362
|
attachment_url: Attachments URL
|
358
363
|
authorization_failure: Authorization Failure
|
364
|
+
auto_capture: Auto Capture
|
359
365
|
available_on: Available On
|
360
366
|
avs_response: AVS Response
|
361
367
|
back: Back
|
@@ -600,6 +606,7 @@ en:
|
|
600
606
|
image_settings_updated: Image Settings successfully updated.
|
601
607
|
image_settings_warning: You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this.
|
602
608
|
images: Images
|
609
|
+
inactive: Inactive
|
603
610
|
included_in_price: Included in Price
|
604
611
|
included_price_validation: cannot be selected unless you have set a Default Tax Zone
|
605
612
|
instructions_to_reset_password: Please enter your email on the form below
|
@@ -926,6 +933,7 @@ en:
|
|
926
933
|
review: Review
|
927
934
|
risk: Risk
|
928
935
|
risk_analysis: Risk Analysis
|
936
|
+
risky: Risky
|
929
937
|
rma_credit: RMA Credit
|
930
938
|
rma_number: RMA Number
|
931
939
|
rma_value: RMA Value
|
@@ -1094,6 +1102,7 @@ en:
|
|
1094
1102
|
update: Update
|
1095
1103
|
updating: Updating
|
1096
1104
|
usage_limit: Usage Limit
|
1105
|
+
use_app_default: Use App Default
|
1097
1106
|
use_billing_address: Use Billing Address
|
1098
1107
|
use_new_cc: Use a new card
|
1099
1108
|
use_s3: Use Amazon S3 For Images
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class DefaultVariantWeightToZero < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
Spree::Variant.unscoped.where(weight: nil).update_all("weight = 0.0")
|
4
|
+
|
5
|
+
change_column :spree_variants, :weight, :decimal, precision: 8, scale: 2, default: 0.0
|
6
|
+
end
|
7
|
+
|
8
|
+
def down
|
9
|
+
change_column :spree_variants, :weight, :decimal, precision: 8, scale: 2
|
10
|
+
end
|
11
|
+
end
|
@@ -5,7 +5,6 @@ module Spree
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
before_filter :ensure_api_key
|
9
8
|
helper_method :try_spree_current_user
|
10
9
|
|
11
10
|
rescue_from CanCan::AccessDenied do |exception|
|
@@ -27,7 +26,11 @@ module Spree
|
|
27
26
|
redirect_to '/unauthorized'
|
28
27
|
else
|
29
28
|
store_location
|
30
|
-
|
29
|
+
if respond_to?(:spree_login_path)
|
30
|
+
redirect_to spree_login_path
|
31
|
+
else
|
32
|
+
redirect_to spree.respond_to?(:root_path) ? spree.root_path : root_path
|
33
|
+
end
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
@@ -57,16 +60,6 @@ module Spree
|
|
57
60
|
redirect_to(session["spree_user_return_to"] || default)
|
58
61
|
session["spree_user_return_to"] = nil
|
59
62
|
end
|
60
|
-
|
61
|
-
# Need to generate an API key for a user due to some actions potentially
|
62
|
-
# requiring authentication to the Spree API
|
63
|
-
def ensure_api_key
|
64
|
-
if user = try_spree_current_user
|
65
|
-
if user.respond_to?(:spree_api_key) && user.spree_api_key.blank?
|
66
|
-
user.generate_spree_api_key!
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
63
|
end
|
71
64
|
end
|
72
65
|
end
|
@@ -11,15 +11,17 @@ module Spree
|
|
11
11
|
end
|
12
12
|
|
13
13
|
# The current incomplete order from the session for use in cart and during checkout
|
14
|
-
def current_order(
|
14
|
+
def current_order(options = {})
|
15
|
+
options[:create_order_if_necessary] ||= false
|
16
|
+
options[:lock] ||= false
|
15
17
|
return @current_order if @current_order
|
16
18
|
|
17
19
|
if session[:order_id]
|
18
|
-
current_order = Spree::Order.includes(:adjustments).find_by(id: session[:order_id], currency: current_currency)
|
20
|
+
current_order = Spree::Order.includes(:adjustments).lock(options[:lock]).find_by(id: session[:order_id], currency: current_currency)
|
19
21
|
@current_order = current_order unless current_order.try(:completed?)
|
20
22
|
end
|
21
23
|
|
22
|
-
if create_order_if_necessary and (@current_order.nil? or @current_order.completed?)
|
24
|
+
if options[:create_order_if_necessary] and (@current_order.nil? or @current_order.completed?)
|
23
25
|
@current_order = Spree::Order.new(currency: current_currency)
|
24
26
|
@current_order.user ||= try_spree_current_user
|
25
27
|
# See issue #3346 for reasons why this line is here
|
@@ -23,12 +23,14 @@ module Spree
|
|
23
23
|
def duplicate_product
|
24
24
|
product.dup.tap do |new_product|
|
25
25
|
new_product.name = "COPY OF #{product.name}"
|
26
|
+
new_product.permalink = "copy-of-#{product.permalink}"
|
26
27
|
new_product.taxons = product.taxons
|
27
28
|
new_product.created_at = nil
|
28
29
|
new_product.deleted_at = nil
|
29
30
|
new_product.updated_at = nil
|
30
31
|
new_product.product_properties = reset_properties
|
31
32
|
new_product.master = duplicate_master
|
33
|
+
new_product.variants = product.variants.map { |variant| duplicate_variant variant }
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
@@ -43,6 +45,14 @@ module Spree
|
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
48
|
+
def duplicate_variant(variant)
|
49
|
+
new_variant = variant.dup
|
50
|
+
new_variant.sku = "COPY OF #{new_variant.sku}"
|
51
|
+
new_variant.deleted_at = nil
|
52
|
+
new_variant.option_values = variant.option_values.map { |option_value| option_value.dup}
|
53
|
+
new_variant
|
54
|
+
end
|
55
|
+
|
46
56
|
def duplicate_image(image)
|
47
57
|
new_image = image.dup
|
48
58
|
new_image.assign_attributes(:attachment => image.attachment.clone)
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/money.rb
CHANGED
@@ -199,7 +199,7 @@ module Spree
|
|
199
199
|
if options[:html]
|
200
200
|
# 1) prevent blank, breaking spaces
|
201
201
|
# 2) prevent escaping of HTML character entities
|
202
|
-
output = output.
|
202
|
+
output = output.sub(" ", " ").html_safe
|
203
203
|
end
|
204
204
|
output
|
205
205
|
end
|
@@ -32,9 +32,12 @@ module Spree
|
|
32
32
|
return promotion_usage_limit_exceeded if promotion.usage_limit_exceeded?
|
33
33
|
|
34
34
|
event_name = "spree.checkout.coupon_code_added"
|
35
|
-
promotion.activate(:coupon_code => @order.coupon_code, :order => @order)
|
36
|
-
|
37
|
-
|
35
|
+
if promotion.activate(:coupon_code => @order.coupon_code, :order => @order)
|
36
|
+
promo = @order.adjustments.includes(:originator).promotion.detect { |p| p.originator.promotion.code == @order.coupon_code }
|
37
|
+
determine_promotion_application_result(promo)
|
38
|
+
else
|
39
|
+
return { :coupon_applied? => false, :error => Spree.t(:coupon_code_not_eligible) }
|
40
|
+
end
|
38
41
|
end
|
39
42
|
|
40
43
|
def promotion_expired
|
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.1.
|
4
|
+
version: 2.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemerchant
|
@@ -511,6 +511,9 @@ files:
|
|
511
511
|
- db/migrate/20131120234456_add_updated_at_to_variants.rb
|
512
512
|
- db/migrate/20131211192741_unique_shipping_method_categories.rb
|
513
513
|
- db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb
|
514
|
+
- db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb
|
515
|
+
- db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb
|
516
|
+
- db/migrate/20140205181631_default_variant_weight_to_zero.rb
|
514
517
|
- db/seeds.rb
|
515
518
|
- lib/generators/spree/custom_user/custom_user_generator.rb
|
516
519
|
- lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt
|