spree_core 1.1.1 → 1.1.2.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/admin/admin.js.erb +55 -13
- data/app/assets/javascripts/admin/checkouts/edit.js +1 -1
- data/app/assets/javascripts/admin/image_settings.js +2 -2
- data/app/assets/javascripts/admin/orders/edit.js +1 -1
- data/app/assets/javascripts/admin/orders/edit_form.js +1 -1
- data/app/assets/javascripts/admin/spree.routes.js.erb +30 -0
- data/app/assets/javascripts/admin/taxonomy.js +1 -1
- data/app/assets/javascripts/store/cart.js +1 -1
- data/app/assets/javascripts/store/product.js +3 -3
- data/app/assets/stylesheets/admin/admin.css.erb +3 -1
- data/app/assets/stylesheets/store/screen.css.scss +18 -66
- data/app/assets/stylesheets/store/variables.css.scss +58 -0
- data/app/controllers/spree/admin/configurations_controller.rb +1 -1
- data/app/controllers/spree/admin/general_settings_controller.rb +1 -1
- data/app/controllers/spree/admin/image_settings_controller.rb +1 -1
- data/app/controllers/spree/admin/inventory_settings_controller.rb +1 -1
- data/app/controllers/spree/admin/inventory_units_controller.rb +1 -1
- data/app/controllers/spree/admin/line_items_controller.rb +4 -3
- data/app/controllers/spree/admin/mail_settings_controller.rb +1 -1
- data/app/controllers/spree/admin/option_types_controller.rb +16 -0
- data/app/controllers/spree/admin/orders/customer_details_controller.rb +4 -3
- data/app/controllers/spree/admin/orders_controller.rb +5 -3
- data/app/controllers/spree/admin/overview_controller.rb +1 -1
- data/app/controllers/spree/admin/payments_controller.rb +1 -1
- data/app/controllers/spree/admin/product_properties_controller.rb +5 -0
- data/app/controllers/spree/admin/products_controller.rb +3 -3
- data/app/controllers/spree/admin/reports_controller.rb +3 -3
- data/app/controllers/spree/admin/shipments_controller.rb +30 -32
- data/app/controllers/spree/admin/shipping_methods_controller.rb +11 -0
- data/app/controllers/spree/admin/tax_settings_controller.rb +1 -1
- data/app/controllers/spree/admin/taxons_controller.rb +1 -1
- data/app/controllers/spree/admin/users_controller.rb +1 -1
- data/app/controllers/spree/admin/zones_controller.rb +2 -2
- data/app/helpers/spree/admin/base_helper.rb +2 -7
- data/app/helpers/spree/admin/navigation_helper.rb +6 -45
- data/app/helpers/spree/products_helper.rb +1 -1
- data/app/models/spree/address.rb +3 -3
- data/app/models/spree/app_configuration.rb +1 -0
- data/app/models/spree/calculator/default_tax.rb +2 -0
- data/app/models/spree/calculator/flat_percent_item_total.rb +2 -0
- data/app/models/spree/calculator/flat_rate.rb +2 -0
- data/app/models/spree/calculator/flexi_rate.rb +2 -0
- data/app/models/spree/calculator/per_item.rb +20 -4
- data/app/models/spree/calculator/price_sack.rb +2 -0
- data/app/models/spree/country.rb +3 -3
- data/app/models/spree/creditcard.rb +1 -1
- data/app/models/spree/image.rb +1 -0
- data/app/models/spree/inventory_unit.rb +7 -5
- data/app/models/spree/line_item.rb +3 -3
- data/app/models/spree/option_type.rb +3 -3
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order.rb +39 -15
- data/app/models/spree/payment.rb +2 -2
- data/app/models/spree/payment/processing.rb +13 -4
- data/app/models/spree/preference.rb +10 -9
- data/app/models/spree/product.rb +4 -11
- data/app/models/spree/product/scopes.rb +39 -34
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_property.rb +2 -2
- data/app/models/spree/return_authorization.rb +1 -1
- data/app/models/spree/shipment.rb +5 -5
- data/app/models/spree/shipping_method.rb +3 -2
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/state_change.rb +1 -1
- data/app/models/spree/tax_rate.rb +7 -3
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/user.rb +2 -2
- data/app/models/spree/variant.rb +8 -1
- data/app/models/spree/zone_member.rb +1 -1
- data/app/views/spree/admin/adjustments/_adjustments_table.html.erb +1 -1
- data/app/views/spree/admin/line_items/destroy.js.erb +1 -0
- data/app/views/spree/admin/mail_methods/_form.html.erb +1 -1
- data/app/views/spree/admin/option_types/_option_value_fields.html.erb +2 -2
- data/app/views/spree/admin/option_types/edit.html.erb +2 -2
- data/app/views/spree/admin/orders/_line_item.html.erb +1 -4
- data/app/views/spree/admin/payment_methods/_form.html.erb +1 -1
- data/app/views/spree/admin/payments/source_forms/_gateway.html.erb +3 -3
- data/app/views/spree/admin/product_properties/index.html.erb +1 -4
- data/app/views/spree/admin/trackers/_form.html.erb +1 -1
- data/app/views/spree/checkout/_address.html.erb +16 -16
- data/app/views/spree/checkout/edit.html.erb +1 -1
- data/app/views/spree/checkout/payment/_gateway.html.erb +3 -3
- data/app/views/spree/layouts/spree_application.html.erb +1 -1
- data/app/views/spree/order_mailer/cancel_email.text.erb +4 -4
- data/app/views/spree/order_mailer/confirm_email.text.erb +1 -1
- data/app/views/spree/orders/_form.html.erb +5 -5
- data/app/views/spree/orders/_line_item.html.erb +7 -7
- data/app/views/spree/orders/edit.html.erb +14 -12
- data/app/views/spree/products/_taxons.html.erb +1 -1
- data/app/views/spree/shared/_filters.html.erb +1 -1
- data/app/views/spree/shared/_products.html.erb +5 -5
- data/config/routes.rb +4 -4
- data/db/migrate/20120523061241_convert_sales_tax_to_default_tax.rb +9 -0
- data/db/migrate/20120604030249_add_deleted_at_to_spree_shipping_methods.rb +5 -0
- data/db/migrate/20120605211305_make_users_email_index_unique.rb +10 -0
- data/lib/generators/spree/dummy/templates/rails/application.rb +1 -1
- data/lib/spree/core/current_order.rb +2 -1
- data/lib/spree/core/engine.rb +11 -7
- data/lib/spree/core/relation_serialization.rb +9 -0
- data/lib/spree/core/respond_with.rb +1 -1
- data/lib/spree/core/search/base.rb +2 -16
- data/lib/spree/core/ssl_requirement.rb +2 -2
- data/lib/spree/core/testing_support/controller_requests.rb +6 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/product_filters.rb +34 -23
- metadata +43 -42
@@ -56,47 +56,12 @@ module Spree
|
|
56
56
|
link_to_with_icon('exclamation', t(:clone), clone_admin_product_url(resource), options)
|
57
57
|
end
|
58
58
|
|
59
|
-
def link_to_delete(resource, options
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
options.reverse_merge! :dataType => 'script'
|
66
|
-
options.reverse_merge! :success => "function(r){ $('##{spree_dom_id resource}').fadeOut('hide'); }"
|
67
|
-
options.reverse_merge! :error => "function(jqXHR, textStatus, errorThrown){ show_flash_error(jqXHR.responseText); }"
|
68
|
-
options.reverse_merge! :name => icon('delete') + ' ' + t(:delete)
|
69
|
-
|
70
|
-
link_to_function_delete(options, html_options)
|
71
|
-
#link_to_function_delete_native(options, html_options)
|
72
|
-
end
|
73
|
-
|
74
|
-
# this function does not use jConfirm
|
75
|
-
def link_to_function_delete_native(options, html_options)
|
76
|
-
fn = %Q{
|
77
|
-
var answer = confirm("#{t(:are_you_sure)}");
|
78
|
-
if (!!answer) { #{link_to_function_delete_ajax(options)} };
|
79
|
-
}
|
80
|
-
link_to_function options[:name], fn, html_options
|
81
|
-
end
|
82
|
-
|
83
|
-
def link_to_function_delete(options, html_options)
|
84
|
-
link_to_function options[:name], "jConfirm('#{options[:caption]}', '#{options[:title]}', function(r) {
|
85
|
-
if(r){ #{link_to_function_delete_ajax(options)} }
|
86
|
-
});", html_options
|
87
|
-
end
|
88
|
-
|
89
|
-
def link_to_function_delete_ajax(options)
|
90
|
-
%Q{
|
91
|
-
$.ajax({
|
92
|
-
type: 'POST',
|
93
|
-
url: '#{options[:url]}',
|
94
|
-
data: ({_method: 'delete', authenticity_token: AUTH_TOKEN}),
|
95
|
-
dataType:'#{options[:dataType]}',
|
96
|
-
success: #{options[:success]},
|
97
|
-
error: #{options[:error]}
|
98
|
-
});
|
99
|
-
}
|
59
|
+
def link_to_delete(resource, options={})
|
60
|
+
url = options[:url] || object_url(resource)
|
61
|
+
name = options[:name] || icon('delete') + ' ' + t(:delete)
|
62
|
+
link_to name, url,
|
63
|
+
:class => "delete-resource",
|
64
|
+
:data => { :confirm => t(:are_you_sure) }
|
100
65
|
end
|
101
66
|
|
102
67
|
def link_to_with_icon(icon_name, text, url, options = {})
|
@@ -129,10 +94,6 @@ module Spree
|
|
129
94
|
end
|
130
95
|
end
|
131
96
|
|
132
|
-
def button_link_to_function(text, function, html_options = {})
|
133
|
-
link_to_function(text_for_button_link(text, html_options), function, html_options_for_button_link(html_options))
|
134
|
-
end
|
135
|
-
|
136
97
|
def text_for_button_link(text, html_options)
|
137
98
|
s = ''
|
138
99
|
if html_options[:icon]
|
@@ -14,7 +14,7 @@ module Spree
|
|
14
14
|
|
15
15
|
# converts line breaks in product description into <p> tags (for html display purposes)
|
16
16
|
def product_description(product)
|
17
|
-
raw(product.description.gsub(
|
17
|
+
raw(product.description.gsub(/(.*?)\n\n/m, '<p>\1</p>\n\n'))
|
18
18
|
end
|
19
19
|
|
20
20
|
def variant_images_hash(product)
|
data/app/models/spree/address.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Spree
|
2
2
|
class Address < ActiveRecord::Base
|
3
|
-
belongs_to :country
|
4
|
-
belongs_to :state
|
3
|
+
belongs_to :country, :class_name => "Spree::Country"
|
4
|
+
belongs_to :state, :class_name => "Spree::State"
|
5
5
|
|
6
|
-
has_many :shipments
|
6
|
+
has_many :shipments, :class_name => "Spree::Shipment"
|
7
7
|
|
8
8
|
validates :firstname, :lastname, :address1, :city, :zipcode, :country, :phone, :presence => true
|
9
9
|
validate :state_validate
|
@@ -68,6 +68,7 @@ module Spree
|
|
68
68
|
# Preferences related to image settings
|
69
69
|
preference :attachment_default_url, :string, :default => '/spree/products/:id/:style/:basename.:extension'
|
70
70
|
preference :attachment_path, :string, :default => ':rails_root/public/spree/products/:id/:style/:basename.:extension'
|
71
|
+
preference :attachment_url, :string, :default => '/spree/products/:id/:style/:basename.:extension'
|
71
72
|
preference :attachment_styles, :string, :default => "{\"mini\":\"48x48>\",\"small\":\"100x100>\",\"product\":\"240x240>\",\"large\":\"600x600>\"}"
|
72
73
|
preference :attachment_default_style, :string, :default => 'product'
|
73
74
|
preference :s3_access_key, :string
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_dependency 'spree/calculator'
|
2
|
+
|
1
3
|
module Spree
|
2
4
|
class Calculator::PerItem < Calculator
|
3
5
|
preference :amount, :decimal, :default => 0
|
@@ -11,14 +13,28 @@ module Spree
|
|
11
13
|
def compute(object=nil)
|
12
14
|
return 0 if object.nil?
|
13
15
|
self.preferred_amount * object.line_items.reduce(0) do |sum, value|
|
14
|
-
|
16
|
+
if !matching_products || matching_products.include?(value.product)
|
17
|
+
value_to_add = value.quantity
|
18
|
+
else
|
19
|
+
value_to_add = 0
|
20
|
+
end
|
15
21
|
sum + value_to_add
|
16
22
|
end
|
17
23
|
end
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
|
25
|
+
# Returns all products that match this calculator, but only if the calculator
|
26
|
+
# is attached to a promotion. If attached to a ShippingMethod, nil is returned.
|
27
|
+
def matching_products
|
28
|
+
# Regression check for #1596
|
29
|
+
# Calculator::PerItem can be used in two cases.
|
30
|
+
# The first is in a typical promotion, providing a discount per item of a particular item
|
31
|
+
# The second is a ShippingMethod, where it applies to an entire order
|
32
|
+
#
|
33
|
+
# Shipping methods do not have promotions attached, but promotions do
|
34
|
+
# Therefore we must check for promotions
|
35
|
+
if self.calculable.respond_to?(:promotion)
|
36
|
+
self.calculable.promotion.rules.map(&:products).flatten
|
37
|
+
end
|
22
38
|
end
|
23
39
|
end
|
24
40
|
end
|
data/app/models/spree/country.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Spree
|
2
2
|
class Country < ActiveRecord::Base
|
3
|
-
has_many :states, :order => "name ASC"
|
3
|
+
has_many :states, :order => "name ASC", :class_name => "Spree::State"
|
4
4
|
|
5
|
-
has_one :zone_member, :as => :zoneable
|
6
|
-
has_one :zone, :through => :zone_member
|
5
|
+
has_one :zone_member, :as => :zoneable, :class_name => "Spree::ZoneMember"
|
6
|
+
has_one :zone, :through => :zone_member, :class_name => "Spree::Zone"
|
7
7
|
|
8
8
|
validates :name, :iso_name, :presence => true
|
9
9
|
|
data/app/models/spree/image.rb
CHANGED
@@ -25,6 +25,7 @@ module Spree
|
|
25
25
|
|
26
26
|
Spree::Image.attachment_definitions[:attachment][:styles] = ActiveSupport::JSON.decode(Spree::Config[:attachment_styles])
|
27
27
|
Spree::Image.attachment_definitions[:attachment][:path] = Spree::Config[:attachment_path]
|
28
|
+
Spree::Image.attachment_definitions[:attachment][:url] = Spree::Config[:attachment_url]
|
28
29
|
Spree::Image.attachment_definitions[:attachment][:default_url] = Spree::Config[:attachment_default_url]
|
29
30
|
Spree::Image.attachment_definitions[:attachment][:default_style] = Spree::Config[:attachment_default_style]
|
30
31
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Spree
|
2
2
|
class InventoryUnit < ActiveRecord::Base
|
3
|
-
belongs_to :variant
|
4
|
-
belongs_to :order
|
5
|
-
belongs_to :shipment
|
6
|
-
belongs_to :return_authorization
|
3
|
+
belongs_to :variant, :class_name => "Spree::Variant"
|
4
|
+
belongs_to :order, :class_name => "Spree::Order"
|
5
|
+
belongs_to :shipment, :class_name => "Spree::Shipment"
|
6
|
+
belongs_to :return_authorization, :class_name => "Spree::ReturnAuthorization"
|
7
7
|
|
8
8
|
scope :backorder, where(:state => 'backordered')
|
9
9
|
|
@@ -81,7 +81,9 @@ module Spree
|
|
81
81
|
variant_units = order.inventory_units.group_by(&:variant_id)
|
82
82
|
return unless variant_units.include? variant.id
|
83
83
|
|
84
|
-
variant_units = variant_units[variant.id].
|
84
|
+
variant_units = variant_units[variant.id].reject do |variant_unit|
|
85
|
+
variant_unit.state == 'shipped'
|
86
|
+
end.sort_by(&:state)
|
85
87
|
|
86
88
|
quantity.times do
|
87
89
|
inventory_unit = variant_units.shift
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Spree
|
2
2
|
class LineItem < ActiveRecord::Base
|
3
3
|
before_validation :adjust_quantity
|
4
|
-
belongs_to :order
|
5
|
-
belongs_to :variant
|
4
|
+
belongs_to :order, :class_name => "Spree::Order"
|
5
|
+
belongs_to :variant, :class_name => "Spree::Variant"
|
6
6
|
|
7
7
|
has_one :product, :through => :variant
|
8
|
-
has_many :adjustments, :as => :adjustable
|
8
|
+
has_many :adjustments, :as => :adjustable, :class_name => "Spree::Adjustment"
|
9
9
|
|
10
10
|
before_validation :copy_price
|
11
11
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Spree
|
2
2
|
class OptionType < ActiveRecord::Base
|
3
|
-
has_many :option_values, :order => :position, :dependent => :destroy
|
4
|
-
has_many :product_option_types, :dependent => :destroy
|
5
|
-
has_and_belongs_to_many :prototypes, :join_table => 'spree_option_types_prototypes'
|
3
|
+
has_many :option_values, :order => :position, :dependent => :destroy, :class_name => "Spree::OptionValue"
|
4
|
+
has_many :product_option_types, :dependent => :destroy, :class_name => "Spree::ProductOptionType"
|
5
|
+
has_and_belongs_to_many :prototypes, :join_table => 'spree_option_types_prototypes', :class_name => "Spree::Prototype"
|
6
6
|
|
7
7
|
attr_accessible :name, :presentation
|
8
8
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Spree
|
2
2
|
class OptionValue < ActiveRecord::Base
|
3
|
-
belongs_to :option_type
|
3
|
+
belongs_to :option_type, :class_name => "Spree::OptionType"
|
4
4
|
acts_as_list :scope => :option_type
|
5
|
-
has_and_belongs_to_many :variants, :join_table => 'spree_option_values_variants'
|
5
|
+
has_and_belongs_to_many :variants, :join_table => 'spree_option_values_variants', :class_name => "Spree::Variant"
|
6
6
|
|
7
7
|
attr_accessible :name, :presentation
|
8
8
|
end
|
data/app/models/spree/order.rb
CHANGED
@@ -6,7 +6,7 @@ module Spree
|
|
6
6
|
:ship_address, :bill_address, :line_items_attributes, :number,
|
7
7
|
:shipping_method_id, :email, :use_billing, :special_instructions
|
8
8
|
|
9
|
-
belongs_to :user
|
9
|
+
belongs_to :user, :class_name => "Spree::User"
|
10
10
|
|
11
11
|
belongs_to :bill_address, :foreign_key => 'bill_address_id', :class_name => 'Spree::Address'
|
12
12
|
alias_method :billing_address, :bill_address
|
@@ -16,7 +16,7 @@ module Spree
|
|
16
16
|
alias_method :shipping_address, :ship_address
|
17
17
|
alias_method :shipping_address=, :ship_address=
|
18
18
|
|
19
|
-
belongs_to :shipping_method
|
19
|
+
belongs_to :shipping_method, :class_name => "Spree::ShippingMethod"
|
20
20
|
|
21
21
|
has_many :state_changes, :as => :stateful
|
22
22
|
has_many :line_items, :dependent => :destroy
|
@@ -24,7 +24,7 @@ module Spree
|
|
24
24
|
has_many :payments, :dependent => :destroy
|
25
25
|
has_many :shipments, :dependent => :destroy
|
26
26
|
has_many :return_authorizations, :dependent => :destroy
|
27
|
-
has_many :adjustments, :as => :adjustable, :dependent => :destroy
|
27
|
+
has_many :adjustments, :as => :adjustable, :dependent => :destroy, :order => "created_at ASC"
|
28
28
|
|
29
29
|
accepts_nested_attributes_for :line_items
|
30
30
|
accepts_nested_attributes_for :bill_address
|
@@ -43,18 +43,6 @@ module Spree
|
|
43
43
|
validate :has_available_shipment
|
44
44
|
validate :has_available_payment
|
45
45
|
|
46
|
-
#delegate :ip_address, :to => :checkout
|
47
|
-
def ip_address
|
48
|
-
'192.168.1.100'
|
49
|
-
end
|
50
|
-
|
51
|
-
scope :by_number, lambda { |number| where(:number => number) }
|
52
|
-
scope :between, lambda { |*dates| where('created_at BETWEEN ? AND ?', dates.first.to_date, dates.last.to_date) }
|
53
|
-
scope :by_customer, lambda { |customer| joins(:user).where("#{Spree::User.table_name}.email = ?", customer) }
|
54
|
-
scope :by_state, lambda { |state| where(:state => state) }
|
55
|
-
scope :complete, where('completed_at IS NOT NULL')
|
56
|
-
scope :incomplete, where(:completed_at => nil)
|
57
|
-
|
58
46
|
make_permalink :field => :number
|
59
47
|
|
60
48
|
class_attribute :update_hooks
|
@@ -110,6 +98,30 @@ module Spree
|
|
110
98
|
|
111
99
|
end
|
112
100
|
|
101
|
+
def self.by_number(number)
|
102
|
+
where(:number => number)
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.between(start_date, end_date)
|
106
|
+
where(:created_at => start_date..end_date)
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.by_customer(customer)
|
110
|
+
joins(:user).where("#{Spree::User.table_name}.email" => customer)
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.by_state(state)
|
114
|
+
where(:state => state)
|
115
|
+
end
|
116
|
+
|
117
|
+
def self.complete
|
118
|
+
where('completed_at IS NOT NULL')
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.incomplete
|
122
|
+
where(:completed_at => nil)
|
123
|
+
end
|
124
|
+
|
113
125
|
# Use this method in other gems that wish to register their own custom logic that should be called after Order#updat
|
114
126
|
def self.register_update_hook(hook)
|
115
127
|
self.update_hooks.add(hook)
|
@@ -284,6 +296,7 @@ module Spree
|
|
284
296
|
current_item.update_attribute(field[:name].gsub(' ', '_').downcase, value)
|
285
297
|
end
|
286
298
|
|
299
|
+
self.reload
|
287
300
|
current_item
|
288
301
|
end
|
289
302
|
|
@@ -414,6 +427,10 @@ module Spree
|
|
414
427
|
end.compact.sort_by { |r| r.cost }
|
415
428
|
end
|
416
429
|
|
430
|
+
def paid?
|
431
|
+
payment_state == 'paid'
|
432
|
+
end
|
433
|
+
|
417
434
|
def payment
|
418
435
|
payments.first
|
419
436
|
end
|
@@ -446,6 +463,13 @@ module Spree
|
|
446
463
|
line_items.select &:insufficient_stock?
|
447
464
|
end
|
448
465
|
|
466
|
+
def merge!(order)
|
467
|
+
order.line_items.each do |line_item|
|
468
|
+
self.add_variant(line_item.variant, line_item.quantity)
|
469
|
+
end
|
470
|
+
order.destroy
|
471
|
+
end
|
472
|
+
|
449
473
|
private
|
450
474
|
def create_user
|
451
475
|
self.email = user.email if self.user and not user.anonymous?
|
data/app/models/spree/payment.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Spree
|
2
2
|
class Payment < ActiveRecord::Base
|
3
3
|
include Spree::Payment::Processing
|
4
|
-
belongs_to :order
|
4
|
+
belongs_to :order, :class_name => "Spree::Order"
|
5
5
|
belongs_to :source, :polymorphic => true, :validate => true
|
6
|
-
belongs_to :payment_method
|
6
|
+
belongs_to :payment_method, :class_name => "Spree::PaymentMethod"
|
7
7
|
|
8
8
|
has_many :offsets, :class_name => 'Spree::Payment', :foreign_key => 'source_id', :conditions => "source_type = 'Spree::Payment' AND amount < 0 AND state = 'completed'"
|
9
9
|
has_many :log_entries, :as => :source
|
@@ -50,7 +50,14 @@ module Spree
|
|
50
50
|
protect_from_connection_error do
|
51
51
|
check_environment
|
52
52
|
|
53
|
-
|
53
|
+
if payment_method.payment_profiles_supported?
|
54
|
+
# Gateways supporting payment profiles will need access to creditcard object because this stores the payment profile information
|
55
|
+
# so supply the authorization itself as well as the creditcard, rather than just the authorization code
|
56
|
+
response = payment_method.void(self.response_code, source, gateway_options)
|
57
|
+
else
|
58
|
+
# Standard ActiveMerchant void usage
|
59
|
+
response = payment_method.void(self.response_code, gateway_options)
|
60
|
+
end
|
54
61
|
record_response(response)
|
55
62
|
|
56
63
|
if response.success?
|
@@ -129,8 +136,10 @@ module Spree
|
|
129
136
|
record_response(response)
|
130
137
|
|
131
138
|
if response.success?
|
132
|
-
|
133
|
-
|
139
|
+
unless response.authorization.nil?
|
140
|
+
self.response_code = response.authorization
|
141
|
+
self.avs_response = response.avs_result['code']
|
142
|
+
end
|
134
143
|
self.send("#{success_state}!")
|
135
144
|
else
|
136
145
|
self.send("#{failure_state}!")
|
@@ -145,7 +154,7 @@ module Spree
|
|
145
154
|
def gateway_options
|
146
155
|
options = { :email => order.email,
|
147
156
|
:customer => order.email,
|
148
|
-
:ip =>
|
157
|
+
:ip => '192.168.1.100', # TODO: Use real IP address
|
149
158
|
:order_id => order.number }
|
150
159
|
|
151
160
|
options.merge!({ :shipping => order.ship_total * 100,
|
@@ -35,23 +35,24 @@ class Spree::Preference < ActiveRecord::Base
|
|
35
35
|
# to preferences definition types. This code should eventually be removed.
|
36
36
|
# it is called during the load_preferences of the Preferences::Store
|
37
37
|
def self.convert_old_value_types(preference)
|
38
|
-
|
39
|
-
|
38
|
+
classes = [Symbol.to_s, Fixnum.to_s, Bignum.to_s,
|
39
|
+
Float.to_s, TrueClass.to_s, FalseClass.to_s]
|
40
|
+
return unless classes.map(&:downcase).include? preference.value_type.downcase
|
40
41
|
|
41
|
-
case preference.value_type
|
42
|
-
when
|
42
|
+
case preference.value_type.downcase
|
43
|
+
when "symbol"
|
43
44
|
preference.value_type = 'string'
|
44
|
-
when
|
45
|
+
when "fixnum"
|
45
46
|
preference.value_type = 'integer'
|
46
|
-
when
|
47
|
+
when "bignum"
|
47
48
|
preference.value_type = 'integer'
|
48
49
|
preference.value = preference.value.to_f.to_i
|
49
|
-
when
|
50
|
+
when "float"
|
50
51
|
preference.value_type = 'decimal'
|
51
|
-
when
|
52
|
+
when "trueclass"
|
52
53
|
preference.value_type = 'boolean'
|
53
54
|
preference.value = "true"
|
54
|
-
when
|
55
|
+
when "falseclass"
|
55
56
|
preference.value_type = 'boolean'
|
56
57
|
preference.value = "false"
|
57
58
|
end
|