spree_core 2.0.13 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/base_controller.rb +3 -0
  3. data/app/helpers/spree/base_helper.rb +6 -16
  4. data/app/helpers/spree/products_helper.rb +3 -8
  5. data/app/helpers/spree/taxons_helper.rb +1 -1
  6. data/app/mailers/spree/base_mailer.rb +0 -5
  7. data/app/models/spree/ability.rb +10 -7
  8. data/app/models/spree/address.rb +7 -17
  9. data/app/models/spree/adjustment.rb +15 -11
  10. data/app/models/spree/app_configuration.rb +0 -5
  11. data/app/models/spree/billing_integration.rb +0 -1
  12. data/app/models/spree/calculator/flat_percent_item_total.rb +1 -3
  13. data/app/models/spree/calculator/flat_rate.rb +2 -4
  14. data/app/models/spree/calculator/flexi_rate.rb +6 -9
  15. data/app/models/spree/calculator/per_item.rb +2 -4
  16. data/app/models/spree/calculator/percent_per_item.rb +1 -3
  17. data/app/models/spree/calculator/price_sack.rb +4 -9
  18. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -2
  19. data/app/models/spree/calculator/shipping/flat_rate.rb +2 -4
  20. data/app/models/spree/calculator/shipping/flexi_rate.rb +4 -9
  21. data/app/models/spree/calculator/shipping/per_item.rb +2 -3
  22. data/app/models/spree/calculator/shipping/price_sack.rb +4 -9
  23. data/app/models/spree/classification.rb +0 -3
  24. data/app/models/spree/country.rb +1 -3
  25. data/app/models/spree/credit_card.rb +37 -38
  26. data/app/models/spree/gateway/bogus_simple.rb +0 -8
  27. data/app/models/spree/gateway.rb +1 -3
  28. data/app/models/spree/image.rb +1 -3
  29. data/app/models/spree/inventory_unit.rb +5 -8
  30. data/app/models/spree/legacy_user.rb +0 -4
  31. data/app/models/spree/line_item.rb +2 -15
  32. data/app/models/spree/option_type.rb +2 -5
  33. data/app/models/spree/option_value.rb +1 -3
  34. data/app/models/spree/order/checkout.rb +4 -13
  35. data/app/models/spree/order.rb +47 -99
  36. data/app/models/spree/order_contents.rb +4 -7
  37. data/app/models/spree/order_inventory.rb +4 -8
  38. data/app/models/spree/order_updater.rb +13 -12
  39. data/app/models/spree/payment/processing.rb +12 -19
  40. data/app/models/spree/payment.rb +17 -30
  41. data/app/models/spree/payment_method.rb +2 -3
  42. data/app/models/spree/preference.rb +1 -1
  43. data/app/models/spree/preferences/configuration.rb +1 -1
  44. data/app/models/spree/preferences/preferable.rb +1 -1
  45. data/app/models/spree/preferences/store.rb +1 -1
  46. data/app/models/spree/price.rb +0 -7
  47. data/app/models/spree/product/scopes.rb +16 -17
  48. data/app/models/spree/product.rb +27 -62
  49. data/app/models/spree/product_property.rb +3 -5
  50. data/app/models/spree/promotion/actions/create_adjustment.rb +9 -8
  51. data/app/models/spree/promotion/actions/create_line_items.rb +1 -2
  52. data/app/models/spree/promotion/rules/first_order.rb +1 -1
  53. data/app/models/spree/promotion/rules/item_total.rb +2 -4
  54. data/app/models/spree/promotion/rules/product.rb +2 -2
  55. data/app/models/spree/promotion/rules/user.rb +1 -3
  56. data/app/models/spree/promotion.rb +23 -24
  57. data/app/models/spree/promotion_action.rb +0 -2
  58. data/app/models/spree/promotion_action_line_item.rb +1 -3
  59. data/app/models/spree/promotion_rule.rb +0 -2
  60. data/app/models/spree/property.rb +2 -4
  61. data/app/models/spree/prototype.rb +0 -2
  62. data/app/models/spree/return_authorization.rb +6 -9
  63. data/app/models/spree/role.rb +0 -2
  64. data/app/models/spree/shipment.rb +19 -25
  65. data/app/models/spree/shipping_calculator.rb +0 -2
  66. data/app/models/spree/shipping_category.rb +0 -2
  67. data/app/models/spree/shipping_method.rb +6 -20
  68. data/app/models/spree/shipping_rate.rb +12 -10
  69. data/app/models/spree/state.rb +2 -4
  70. data/app/models/spree/stock/availability_validator.rb +2 -2
  71. data/app/models/spree/stock/estimator.rb +6 -20
  72. data/app/models/spree/stock/packer.rb +1 -1
  73. data/app/models/spree/stock/quantifier.rb +2 -3
  74. data/app/models/spree/stock/splitter/base.rb +1 -1
  75. data/app/models/spree/stock_item.rb +8 -18
  76. data/app/models/spree/stock_location.rb +2 -11
  77. data/app/models/spree/stock_movement.rb +2 -5
  78. data/app/models/spree/stock_transfer.rb +0 -2
  79. data/app/models/spree/tax_category.rb +0 -2
  80. data/app/models/spree/tax_rate.rb +12 -12
  81. data/app/models/spree/taxon.rb +1 -13
  82. data/app/models/spree/taxonomy.rb +3 -6
  83. data/app/models/spree/tracker.rb +0 -2
  84. data/app/models/spree/variant/scopes.rb +2 -2
  85. data/app/models/spree/variant.rb +13 -31
  86. data/app/models/spree/zone.rb +2 -7
  87. data/app/models/spree/zone_member.rb +0 -2
  88. data/app/views/spree/payments/_payment.html.erb +1 -3
  89. data/config/locales/en.yml +11 -26
  90. data/db/default/spree/countries.rb +230 -229
  91. data/db/default/spree/states.rb +57 -56
  92. data/db/default/spree/zones.rb +5 -5
  93. data/db/migrate/20130213191427_create_default_stock.rb +4 -7
  94. data/db/migrate/20130417120035_update_adjustment_states.rb +2 -2
  95. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +1 -1
  96. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +1 -1
  97. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
  98. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +5 -0
  99. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +9 -0
  100. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +9 -0
  101. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +4 -5
  102. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +1 -1
  103. data/lib/generators/spree/dummy/dummy_generator.rb +3 -14
  104. data/lib/generators/spree/dummy/templates/rails/database.yml +0 -10
  105. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -7
  106. data/lib/generators/spree/install/install_generator.rb +11 -8
  107. data/lib/spree/core/calculated_adjustments.rb +9 -8
  108. data/lib/spree/core/controller_helpers/auth.rb +2 -3
  109. data/lib/spree/core/controller_helpers/order.rb +8 -13
  110. data/lib/spree/core/controller_helpers/ssl.rb +13 -22
  111. data/lib/spree/core/controller_helpers/strong_parameters.rb +36 -0
  112. data/lib/spree/core/delegate_belongs_to.rb +0 -2
  113. data/lib/spree/core/engine.rb +1 -5
  114. data/lib/spree/core/ext/active_record.rb +2 -9
  115. data/lib/spree/core/permalinks.rb +1 -5
  116. data/lib/spree/core/product_duplicator.rb +2 -16
  117. data/lib/spree/core/product_filters.rb +37 -33
  118. data/lib/spree/core/search/base.rb +1 -1
  119. data/lib/spree/core/version.rb +1 -1
  120. data/lib/spree/core.rb +3 -31
  121. data/lib/spree/i18n.rb +0 -1
  122. data/lib/spree/money.rb +2 -177
  123. data/lib/spree/permitted_attributes.rb +95 -0
  124. data/lib/spree/promo/coupon_applicator.rb +4 -12
  125. data/lib/spree/testing_support/capybara_ext.rb +13 -17
  126. data/lib/spree/testing_support/common_rake.rb +1 -1
  127. data/lib/spree/testing_support/controller_requests.rb +3 -3
  128. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  129. data/lib/spree/testing_support/factories/product_factory.rb +0 -4
  130. data/lib/spree/testing_support/factories/shipping_method_factory.rb +1 -3
  131. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  132. data/lib/spree/testing_support/factories/variant_factory.rb +0 -15
  133. data/lib/spree/testing_support/factories.rb +1 -1
  134. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  135. data/lib/tasks/core.rake +2 -2
  136. data/vendor/assets/javascripts/jquery.payment.js +497 -0
  137. metadata +166 -172
  138. data/app/views/spree/admin/shared/_report_order_criteria.html.erb +0 -17
  139. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +0 -5
  140. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +0 -15
  141. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +0 -19
  142. data/db/migrate/20130909115621_change_states_required_for_countries.rb +0 -9
  143. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +0 -12
  144. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +0 -5
  145. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +0 -5
  146. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +0 -5
  147. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +0 -11
  148. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +0 -5
  149. data/lib/spree/core/preference_rescue.rb +0 -25
@@ -9,8 +9,8 @@ module Spree
9
9
  end
10
10
 
11
11
  def total_on_hand
12
- if @variant.should_track_inventory?
13
- stock_items.sum(:count_on_hand)
12
+ if Spree::Config.track_inventory_levels
13
+ stock_items.to_a.sum(&:count_on_hand)
14
14
  else
15
15
  Float::INFINITY
16
16
  end
@@ -23,7 +23,6 @@ module Spree
23
23
  def can_supply?(required)
24
24
  total_on_hand >= required || backorderable?
25
25
  end
26
-
27
26
  end
28
27
  end
29
28
  end
@@ -8,7 +8,7 @@ module Spree
8
8
  @packer = packer
9
9
  @next_splitter = next_splitter
10
10
  end
11
- delegate :stock_location, :order, :to => :packer
11
+ delegate :stock_location, :order, to: :packer
12
12
 
13
13
  def split(packages)
14
14
  return_next(packages)
@@ -7,11 +7,9 @@ module Spree
7
7
  has_many :stock_movements
8
8
 
9
9
  validates_presence_of :stock_location, :variant
10
- validates_uniqueness_of :variant_id, scope: [:stock_location_id, :deleted_at]
10
+ validates_uniqueness_of :variant_id, scope: :stock_location_id
11
11
 
12
- attr_accessible :count_on_hand, :variant, :stock_location, :backorderable, :variant_id
13
-
14
- delegate :weight, :should_track_inventory?, to: :variant
12
+ delegate :weight, to: :variant
15
13
 
16
14
  def backordered_inventory_units
17
15
  Spree::InventoryUnit.backordered_for_stock_item(self)
@@ -24,7 +22,7 @@ module Spree
24
22
  def adjust_count_on_hand(value)
25
23
  self.with_lock do
26
24
  self.count_on_hand = self.count_on_hand + value
27
- process_backorders(count_on_hand - count_on_hand_was)
25
+ process_backorders if in_stock?
28
26
 
29
27
  self.save!
30
28
  end
@@ -32,7 +30,7 @@ module Spree
32
30
 
33
31
  def set_count_on_hand(value)
34
32
  self.count_on_hand = value
35
- process_backorders(count_on_hand - count_on_hand_was)
33
+ process_backorders if in_stock?
36
34
 
37
35
  self.save!
38
36
  end
@@ -46,23 +44,15 @@ module Spree
46
44
  self.in_stock? || self.backorderable?
47
45
  end
48
46
 
49
- def variant
50
- Spree::Variant.unscoped { super }
51
- end
52
-
53
47
  private
54
48
  def count_on_hand=(value)
55
49
  write_attribute(:count_on_hand, value)
56
50
  end
57
51
 
58
- # Process backorders based on amount of stock received
59
- # If stock was -20 and is now -15 (increase of 5 units), then we should process 5 inventory orders.
60
- # If stock was -20 but then was -25 (decrease of 5 units), do nothing.
61
- def process_backorders(number)
62
- if number > 0
63
- backordered_inventory_units.first(number).each do |unit|
64
- unit.fill_backorder
65
- end
52
+ def process_backorders
53
+ backordered_inventory_units.each do |unit|
54
+ return unless in_stock?
55
+ unit.fill_backorder
66
56
  end
67
57
  end
68
58
  end
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class StockLocation < ActiveRecord::Base
3
- has_many :stock_items, dependent: :destroy
3
+ has_many :stock_items, dependent: :delete_all
4
4
  has_many :stock_movements, through: :stock_items
5
5
 
6
6
  belongs_to :state, class_name: 'Spree::State'
@@ -8,15 +8,11 @@ module Spree
8
8
 
9
9
  validates_presence_of :name
10
10
 
11
- attr_accessible :name, :active, :address1, :address2, :city, :zipcode,
12
- :backorderable_default, :state_name, :state_id, :country_id, :phone,
13
- :country_id, :propagate_all_variants, :admin_name
14
-
15
11
  scope :active, -> { where(active: true) }
16
12
 
17
13
  after_create :create_stock_items, :if => "self.propagate_all_variants?"
18
14
 
19
- # Wrapper for creating a new stock item respecting the backorderable config
15
+ # Wrapper for creating a new stock item respecting the backorderable config
20
16
  def propagate_variant(variant)
21
17
  self.stock_items.create!(variant: variant, backorderable: self.backorderable_default)
22
18
  end
@@ -48,11 +44,6 @@ module Spree
48
44
  move(variant, quantity, originator)
49
45
  end
50
46
 
51
- def restock_backordered(variant, quantity, originator = nil)
52
- item = stock_item_or_create(variant)
53
- item.update_column(:count_on_hand, item.count_on_hand + quantity)
54
- end
55
-
56
47
  def unstock(variant, quantity, originator = nil)
57
48
  move(variant, -quantity, originator)
58
49
  end
@@ -3,26 +3,23 @@ module Spree
3
3
  belongs_to :stock_item, class_name: 'Spree::StockItem'
4
4
  belongs_to :originator, polymorphic: true
5
5
 
6
- attr_accessible :quantity, :stock_item, :stock_item_id, :originator, :action
7
6
 
8
7
  after_create :update_stock_item_quantity
9
8
 
10
9
  validates :stock_item, presence: true
11
10
  validates :quantity, presence: true
12
11
 
13
- scope :recent, order("#{quoted_table_name}.created_at DESC")
12
+ scope :recent, -> { order('created_at DESC') }
14
13
 
15
14
  def readonly?
16
15
  !new_record?
17
16
  end
18
17
 
19
18
  private
20
-
21
19
  def update_stock_item_quantity
22
- return unless self.stock_item.should_track_inventory?
20
+ return unless Spree::Config[:track_inventory_levels]
23
21
  stock_item.adjust_count_on_hand quantity
24
22
  end
25
-
26
23
  end
27
24
  end
28
25
 
@@ -7,8 +7,6 @@ module Spree
7
7
 
8
8
  make_permalink field: :number, prefix: 'T'
9
9
 
10
- attr_accessible :reference
11
-
12
10
  def to_param
13
11
  number
14
12
  end
@@ -5,8 +5,6 @@ module Spree
5
5
 
6
6
  has_many :tax_rates, dependent: :destroy
7
7
 
8
- attr_accessible :name, :description, :is_default
9
-
10
8
  before_save :set_default_category
11
9
 
12
10
  def set_default_category
@@ -21,15 +21,12 @@ module Spree
21
21
 
22
22
  scope :by_zone, ->(zone) { where(zone_id: zone) }
23
23
 
24
- attr_accessible :amount, :tax_category_id, :calculator, :zone_id, :name,
25
- :included_in_price, :show_rate_in_label
26
-
27
24
  # Gets the array of TaxRates appropriate for the specified order
28
25
  def self.match(order)
29
- order_zone = order.tax_zone
30
- return [] unless order_zone
31
- includes(zone: { zone_members: :zoneable }).all.select do |rate|
32
- rate.zone == order_zone || rate.zone.contains?(order_zone) || rate.zone.default_tax
26
+ return [] unless order.tax_zone
27
+ all.select do |rate|
28
+ (!rate.included_in_price && (rate.zone == order.tax_zone || rate.zone.contains?(order.tax_zone) || (order.tax_address.nil? && rate.zone.default_tax))) ||
29
+ (rate.included_in_price && !order.tax_address.nil? && !rate.zone.contains?(order.tax_zone) && rate.zone.default_tax)
33
30
  end
34
31
  end
35
32
 
@@ -64,11 +61,14 @@ module Spree
64
61
  else
65
62
  amount = -1 * calculator.compute(order)
66
63
  label = Spree.t(:refund) + label
67
- order.adjustments.create({ amount: amount,
68
- source: order,
69
- originator: self,
70
- state: "closed",
71
- label: label }, without_protection: true)
64
+
65
+ order.adjustments.create(
66
+ amount: amount,
67
+ source: order,
68
+ originator: self,
69
+ state: "closed",
70
+ label: label
71
+ )
72
72
  end
73
73
  else
74
74
  create_adjustment(label, order, order)
@@ -2,15 +2,12 @@ module Spree
2
2
  class Taxon < ActiveRecord::Base
3
3
  acts_as_nested_set dependent: :destroy
4
4
 
5
- belongs_to :taxonomy, class_name: 'Spree::Taxonomy'
5
+ belongs_to :taxonomy, class_name: 'Spree::Taxonomy', :touch => true
6
6
  has_many :classifications, dependent: :delete_all
7
7
  has_many :products, through: :classifications
8
8
 
9
9
  before_create :set_permalink
10
10
 
11
- attr_accessible :name, :parent_id, :icon, :description, :permalink, :taxonomy_id,
12
- :meta_description, :meta_keywords, :meta_title, :child_index
13
-
14
11
  validates :name, presence: true
15
12
 
16
13
  has_attached_file :icon,
@@ -72,14 +69,5 @@ module Spree
72
69
  ancestor_chain + "#{name}"
73
70
  end
74
71
 
75
- # awesome_nested_set sorts by :lft and :rgt. This call re-inserts the child
76
- # node so that its resulting position matches the observable 0-indexed position.
77
- # ** Note ** no :position column needed - a_n_s doesn't handle the reordering if
78
- # you bring your own :order_column.
79
- #
80
- # See #3390 for background.
81
- def child_index=(idx)
82
- move_to_child_with_index(parent, idx.to_i)
83
- end
84
72
  end
85
73
  end
@@ -2,22 +2,19 @@ module Spree
2
2
  class Taxonomy < ActiveRecord::Base
3
3
  validates :name, presence: true
4
4
 
5
- attr_accessible :name
6
-
7
5
  has_many :taxons
8
- has_one :root, conditions: { parent_id: nil }, class_name: "Spree::Taxon",
9
- dependent: :destroy
6
+ has_one :root, -> { where parent_id: nil }, class_name: "Spree::Taxon", dependent: :destroy
10
7
 
11
8
  after_save :set_name
12
9
 
13
- default_scope order: "#{quoted_table_name}.position"
10
+ default_scope -> { order("#{self.table_name}.position") }
14
11
 
15
12
  private
16
13
  def set_name
17
14
  if root
18
15
  root.update_column(:name, name)
19
16
  else
20
- self.root = Taxon.create!({ taxonomy_id: id, name: name }, without_protection: true)
17
+ self.root = Taxon.create!(taxonomy_id: id, name: name)
21
18
  end
22
19
  end
23
20
 
@@ -1,7 +1,5 @@
1
1
  module Spree
2
2
  class Tracker < ActiveRecord::Base
3
- attr_accessible :analytics_id, :environment, :active
4
-
5
3
  def self.current
6
4
  tracker = where(active: true, environment: Rails.env).first
7
5
  tracker.analytics_id.present? ? tracker : nil if tracker
@@ -1,14 +1,14 @@
1
1
  module Spree
2
2
  class Variant < ActiveRecord::Base
3
3
  #FIXME WARNING tested only under sqlite and postgresql
4
- scope :descend_by_popularity, order("COALESCE((SELECT COUNT(*) FROM #{LineItem.quoted_table_name} GROUP BY #{LineItem.quoted_table_name}.variant_id HAVING #{LineItem.quoted_table_name}.variant_id = #{Variant.quoted_table_name}.id), 0) DESC")
4
+ scope :descend_by_popularity, -> { order("COALESCE((SELECT COUNT(*) FROM #{LineItem.quoted_table_name} GROUP BY #{LineItem.quoted_table_name}.variant_id HAVING #{LineItem.quoted_table_name}.variant_id = #{Variant.quoted_table_name}.id), 0) DESC") }
5
5
 
6
6
  class << self
7
7
  # Returns variants that match a given option value
8
8
  #
9
9
  # Example:
10
10
  #
11
- # product.variants_including_master.has_option(OptionType.find_by_name("shoe-size"),OptionValue.find_by_name("8"))
11
+ # product.variants_including_master.has_option(OptionType.find_by(name: 'shoe-size'), OptionValue.find_by(name: '8'))
12
12
  def has_option(option_type, *option_values)
13
13
  option_types = OptionType.table_name
14
14
 
@@ -8,25 +8,19 @@ module Spree
8
8
  :tax_category_id, :shipping_category_id, :meta_description,
9
9
  :meta_keywords, :tax_category, :shipping_category
10
10
 
11
- attr_accessible :name, :presentation, :cost_price, :lock_version,
12
- :position, :option_value_ids,
13
- :product_id, :option_values_attributes, :price,
14
- :weight, :height, :width, :depth, :sku, :cost_currency,
15
- :track_inventory, :options
16
-
17
11
  has_many :inventory_units
18
12
  has_many :line_items
19
13
 
20
- has_many :stock_items, dependent: :destroy, :order => "id ASC"
14
+ has_many :stock_items, dependent: :destroy
21
15
  has_many :stock_locations, through: :stock_items
22
16
  has_many :stock_movements
23
17
 
24
18
  has_and_belongs_to_many :option_values, join_table: :spree_option_values_variants
25
- has_many :images, as: :viewable, order: :position, dependent: :destroy, class_name: "Spree::Image"
19
+ has_many :images, -> { order(:position) }, as: :viewable, dependent: :destroy, class_name: "Spree::Image"
26
20
 
27
21
  has_one :default_price,
22
+ -> { where currency: Spree::Config[:currency] },
28
23
  class_name: 'Spree::Price',
29
- conditions: proc { { currency: Spree::Config[:currency] } },
30
24
  dependent: :destroy
31
25
 
32
26
  delegate_belongs_to :default_price, :display_price, :display_amount, :price, :price=, :currency if Spree::Price.table_exists?
@@ -36,7 +30,7 @@ module Spree
36
30
  dependent: :destroy
37
31
 
38
32
  validate :check_price
39
- validates :price, numericality: { greater_than_or_equal_to: 0 }
33
+ validates :price, numericality: { greater_than_or_equal_to: 0 }, presence: true, if: proc { Spree::Config[:require_master_price] }
40
34
  validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true } if self.table_exists? && self.column_names.include?('cost_price')
41
35
 
42
36
  before_validation :set_cost_currency
@@ -45,7 +39,7 @@ module Spree
45
39
  after_create :set_position
46
40
 
47
41
  # default variant scope only lists non-deleted variants
48
- scope :deleted, lambda { where("#{quoted_table_name}.deleted_at IS NOT NULL") }
42
+ scope :deleted, lambda { where('deleted_at IS NOT NULL') }
49
43
 
50
44
  def self.active(currency = nil)
51
45
  joins(:prices).where(deleted_at: nil).where('spree_prices.currency' => currency || Spree::Config[:currency]).where('spree_prices.amount IS NOT NULL')
@@ -61,7 +55,7 @@ module Spree
61
55
  end
62
56
 
63
57
  def options_text
64
- values = self.option_values.joins(:option_type).order("#{Spree::OptionType.quoted_table_name}.position asc")
58
+ values = self.option_values.joins(:option_type).order("#{Spree::OptionType.table_name}.position asc")
65
59
 
66
60
  values.map! do |ov|
67
61
  "#{ov.option_type.presentation}: #{ov.presentation}"
@@ -78,13 +72,7 @@ module Spree
78
72
  # allows extensions to override deleted? if they want to provide
79
73
  # their own definition.
80
74
  def deleted?
81
- !!deleted_at
82
- end
83
-
84
- def options=(options = {})
85
- options.each do |option|
86
- set_option_value(option[:name], option[:value])
87
- end
75
+ deleted_at
88
76
  end
89
77
 
90
78
  def set_option_value(opt_name, opt_value)
@@ -138,25 +126,19 @@ module Spree
138
126
  "#{name} - #{sku}"
139
127
  end
140
128
 
141
- def in_stock?(quantity=1)
142
- Spree::Stock::Quantifier.new(self).can_supply?(quantity)
143
- end
144
-
145
- def total_on_hand
146
- Spree::Stock::Quantifier.new(self).total_on_hand
147
- end
148
-
149
129
  # Product may be created with deleted_at already set,
150
130
  # which would make AR's default finder return nil.
151
131
  # This is a stopgap for that little problem.
152
132
  def product
153
133
  Spree::Product.unscoped { super }
154
134
  end
135
+
136
+ def in_stock?(quantity=1)
137
+ Spree::Stock::Quantifier.new(self).can_supply?(quantity)
138
+ end
155
139
 
156
- # Shortcut method to determine if inventory tracking is enabled for this variant
157
- # This considers both variant tracking flag and site-wide inventory tracking settings
158
- def should_track_inventory?
159
- self.track_inventory? && Spree::Config.track_inventory_levels
140
+ def total_on_hand
141
+ Spree::Stock::Quantifier.new(self).total_on_hand
160
142
  end
161
143
 
162
144
  private
@@ -2,9 +2,7 @@ module Spree
2
2
  class Zone < ActiveRecord::Base
3
3
  has_many :zone_members, dependent: :destroy, class_name: "Spree::ZoneMember"
4
4
  has_many :tax_rates, dependent: :destroy
5
- has_and_belongs_to_many :shipping_methods, :join_table => 'spree_shipping_methods_zones',
6
- :class_name => 'Spree::ShippingMethod',
7
- :foreign_key => 'zone_id'
5
+ has_and_belongs_to_many :shipping_methods, :join_table => 'spree_shipping_methods_zones'
8
6
 
9
7
  validates :name, presence: true, uniqueness: true
10
8
  after_save :remove_defunct_members
@@ -13,9 +11,6 @@ module Spree
13
11
  alias :members :zone_members
14
12
  accepts_nested_attributes_for :zone_members, allow_destroy: true, reject_if: proc { |a| a['zoneable_id'].blank? }
15
13
 
16
- attr_accessible :name, :description, :default_tax, :kind, :zone_members,
17
- :zone_members_attributes, :state_ids, :country_ids
18
-
19
14
  def kind
20
15
  if members.any? && !members.any? { |member| member.try(:zoneable_type).nil? }
21
16
  members.last.zoneable_type.demodulize.underscore
@@ -133,7 +128,7 @@ module Spree
133
128
 
134
129
  def remove_defunct_members
135
130
  if zone_members.any?
136
- zone_members.where('zoneable_id IS NULL OR zoneable_type != ?', "Spree::#{kind.classify}").destroy_all
131
+ zone_members.where('zoneable_id IS NULL OR zoneable_type != ?', "Spree::#{kind.capitalize}").destroy_all
137
132
  end
138
133
  end
139
134
 
@@ -3,8 +3,6 @@ module Spree
3
3
  belongs_to :zone, class_name: 'Spree::Zone', counter_cache: true
4
4
  belongs_to :zoneable, polymorphic: true
5
5
 
6
- attr_accessible :zone, :zone_id, :zoneable, :zoneable_id, :zoneable_type
7
-
8
6
  def name
9
7
  return nil if zoneable.nil?
10
8
  zoneable.name
@@ -4,9 +4,7 @@
4
4
  <% unless (cc_type = source.cc_type).blank? %>
5
5
  <%= image_tag "credit_cards/icons/#{cc_type}.png" %>
6
6
  <% end %>
7
- <% if source.last_digits %>
8
- <%= Spree.t(:ending_in) %> <%= source.last_digits %>
9
- <% end %>
7
+ <%= Spree.t(:ending_in) %> <%= source.last_digits %>
10
8
  </span>
11
9
  <br />
12
10
  <span class="full-name">
@@ -18,6 +18,7 @@ en:
18
18
  name: Name
19
19
  numcode: ISO Code
20
20
  spree/credit_card:
21
+ base: ''
21
22
  cc_type: Type
22
23
  month: Month
23
24
  number: Number
@@ -63,7 +64,6 @@ en:
63
64
  zipcode: Shipping address zipcode
64
65
  spree/payment:
65
66
  amount: Amount
66
- one: "Payment"
67
67
  spree/payment_method:
68
68
  name: Name
69
69
  spree/product:
@@ -214,10 +214,6 @@ en:
214
214
  other: Zones
215
215
  errors:
216
216
  models:
217
- spree/classification:
218
- attributes:
219
- taxon_id:
220
- already_linked: "is already linked to this product"
221
217
  spree/credit_card:
222
218
  attributes:
223
219
  base:
@@ -318,18 +314,13 @@ en:
318
314
  delivery_success: Test Mail sent successfully
319
315
  error: ! 'Test Mail error: %{e}'
320
316
  tab:
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
317
+ overview: "Overview"
318
+ orders: "Orders"
319
+ products: "Products"
320
+ reports: "Reports"
321
+ configuration: "Configuration"
322
+ promotions: "Promotions"
323
+ users: "Users"
333
324
  administration: Administration
334
325
  agree_to_privacy_policy: Agree to Privacy Policy
335
326
  agree_to_terms_of_service: Agree to Terms of Service
@@ -404,7 +395,6 @@ en:
404
395
  capture: Capture
405
396
  card_code: Card Code
406
397
  card_number: Card Number
407
- card_type: Brand
408
398
  card_type_is: Card type is
409
399
  cart: Cart
410
400
  categories: Categories
@@ -649,6 +639,7 @@ en:
649
639
  login_name: Login
650
640
  logout: Logout
651
641
  look_for_similar_items: Look for similar items
642
+ maestro_or_solo_cards: Maestro/Solo cards
652
643
  mail_method_settings: Mail Method Settings
653
644
  mail_methods: Mail Methods
654
645
  make_refund: Make refund
@@ -707,7 +698,6 @@ en:
707
698
  no_rules_added: No rules added
708
699
  no_resource_found: ! 'No %{resource} found'
709
700
  no_shipping_methods_found: No shipping methods found
710
- no_eligible_shipping_methods_found: No eligible shipping methods found
711
701
  no_trackers_found: No Trackers Found
712
702
  no_stock_locations_found: No stock locations found
713
703
  no_tracking_present: No tracking details provided.
@@ -761,7 +751,6 @@ en:
761
751
  order_number: Order
762
752
  order_populator:
763
753
  out_of_stock: ! '%{item} is out of stock.'
764
- selected_quantity_not_available: ! 'Selected quantity of %{item} is not available.'
765
754
  please_enter_reasonable_quantity: Please enter a reasonable quantity.
766
755
  order_processed_successfully: Your order has been processed successfully
767
756
  order_state:
@@ -795,8 +784,8 @@ en:
795
784
  payment_information: Payment Information
796
785
  payment_method: Payment Method
797
786
  payment_methods: Payment Methods
798
- payment_processing_failed: Payment could not be processed, please check the details you entered
799
787
  payment_method_not_supported: That payment method is unsupported. Please choose another one.
788
+ payment_processing_failed: Payment could not be processed, please check the details you entered
800
789
  payment_processor_choose_banner_text: If you need help choosing a payment processor, please visit
801
790
  payment_processor_choose_link: our payments page
802
791
  payment_state: Payment State
@@ -960,7 +949,6 @@ en:
960
949
  shipment_state: Shipment State
961
950
  shipment_states:
962
951
  backorder: backorder
963
- canceled: canceled
964
952
  partial: partial
965
953
  pending: pending
966
954
  ready: ready
@@ -1001,9 +989,8 @@ en:
1001
989
  special_instructions: Special Instructions
1002
990
  split: Split
1003
991
  spree_gateway_error_flash_for_checkout: There was a problem with your payment information. Please check your information and try again.
1004
- ssl:
1005
- change_protocol: "Please switch to using HTTP (rather than HTTPS) and retry this request."
1006
992
  start: Start
993
+ start_date: Valid from
1007
994
  state: State
1008
995
  state_based: State Based
1009
996
  states: States
@@ -1059,8 +1046,6 @@ en:
1059
1046
  time: Time
1060
1047
  to_add_variants_you_must_first_define: To add variants, you must first define
1061
1048
  total: Total
1062
- total_price: Total price
1063
- track_inventory: Track Inventory
1064
1049
  tracking: Tracking
1065
1050
  tracking_number: Tracking Number
1066
1051
  tracking_url: Tracking URL