spree_core 0.40.4 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. data/README.md +6 -1
  2. data/app/controllers/admin/base_controller.rb +0 -57
  3. data/app/controllers/admin/configurations_controller.rb +1 -1
  4. data/app/controllers/admin/general_settings_controller.rb +1 -1
  5. data/app/controllers/admin/images_controller.rb +18 -8
  6. data/app/controllers/admin/inventory_settings_controller.rb +1 -1
  7. data/app/controllers/admin/mail_settings_controller.rb +1 -1
  8. data/app/controllers/admin/option_types_controller.rb +11 -0
  9. data/app/controllers/admin/orders_controller.rb +16 -20
  10. data/app/controllers/admin/overview_controller.rb +1 -1
  11. data/app/controllers/admin/payment_methods_controller.rb +6 -6
  12. data/app/controllers/admin/product_groups_controller.rb +10 -11
  13. data/app/controllers/admin/product_properties_controller.rb +5 -5
  14. data/app/controllers/admin/product_scopes_controller.rb +12 -4
  15. data/app/controllers/admin/products_controller.rb +17 -12
  16. data/app/controllers/admin/properties_controller.rb +7 -7
  17. data/app/controllers/admin/prototypes_controller.rb +15 -15
  18. data/app/controllers/admin/reports_controller.rb +12 -11
  19. data/app/controllers/admin/shipments_controller.rb +0 -5
  20. data/app/controllers/admin/shipping_categories_controller.rb +6 -6
  21. data/app/controllers/admin/shipping_methods_controller.rb +1 -2
  22. data/app/controllers/admin/states_controller.rb +12 -12
  23. data/app/controllers/admin/tax_categories_controller.rb +2 -2
  24. data/app/controllers/admin/tax_rates_controller.rb +8 -8
  25. data/app/controllers/admin/tax_settings_controller.rb +1 -1
  26. data/app/controllers/admin/taxonomies_controller.rb +3 -3
  27. data/app/controllers/admin/taxons_controller.rb +1 -8
  28. data/app/controllers/admin/trackers_controller.rb +1 -1
  29. data/app/controllers/admin/users_controller.rb +6 -9
  30. data/app/controllers/admin/variants_controller.rb +13 -2
  31. data/app/controllers/admin/zones_controller.rb +9 -9
  32. data/app/controllers/checkout_controller.rb +5 -5
  33. data/app/controllers/products_controller.rb +1 -1
  34. data/app/controllers/taxons_controller.rb +3 -1
  35. data/app/helpers/admin/navigation_helper.rb +36 -19
  36. data/app/helpers/admin/payments_helper.rb +1 -1
  37. data/app/helpers/admin/product_groups_helper.rb +1 -1
  38. data/app/helpers/admin/product_properties_helper.rb +5 -5
  39. data/app/helpers/admin/products_helper.rb +2 -2
  40. data/app/helpers/admin/users_helper.rb +5 -2
  41. data/app/helpers/hook_helper.rb +3 -3
  42. data/app/helpers/products_helper.rb +0 -19
  43. data/app/helpers/spree/base_helper.rb +33 -2
  44. data/app/helpers/taxons_helper.rb +3 -3
  45. data/app/mailers/order_mailer.rb +2 -2
  46. data/app/mailers/shipment_mailer.rb +2 -2
  47. data/app/models/address.rb +42 -9
  48. data/app/models/adjustment.rb +8 -8
  49. data/app/models/app_configuration.rb +0 -6
  50. data/app/models/billing_integration.rb +1 -1
  51. data/app/models/calculator/sales_tax.rb +3 -3
  52. data/app/models/configuration.rb +1 -1
  53. data/app/models/country.rb +4 -5
  54. data/app/models/creditcard.rb +38 -31
  55. data/app/models/gateway.rb +14 -14
  56. data/app/models/gateway/beanstream.rb +4 -4
  57. data/app/models/gateway/bogus.rb +6 -6
  58. data/app/models/gateway/braintree.rb +88 -0
  59. data/app/models/gateway/eway.rb +3 -3
  60. data/app/models/image.rb +5 -4
  61. data/app/models/option_type.rb +1 -0
  62. data/app/models/order.rb +60 -21
  63. data/app/models/payment.rb +5 -32
  64. data/app/models/preference.rb +7 -7
  65. data/app/models/product.rb +22 -7
  66. data/app/models/product_group.rb +22 -26
  67. data/app/models/product_property.rb +5 -5
  68. data/app/models/product_scope.rb +26 -6
  69. data/app/models/property.rb +1 -1
  70. data/app/models/state.rb +2 -3
  71. data/app/models/tax_category.rb +1 -0
  72. data/app/models/tax_rate.rb +1 -2
  73. data/app/models/taxon.rb +12 -10
  74. data/app/models/taxonomy.rb +7 -4
  75. data/app/models/tracker.rb +1 -1
  76. data/app/models/user.rb +4 -0
  77. data/app/models/variant.rb +1 -1
  78. data/app/models/zone.rb +1 -1
  79. data/app/models/zone_member.rb +3 -3
  80. data/app/views/admin/{shared → adjustments}/_adjustments_table.html.erb +7 -4
  81. data/app/views/admin/adjustments/edit.html.erb +1 -1
  82. data/app/views/admin/adjustments/index.html.erb +2 -2
  83. data/app/views/admin/adjustments/new.html.erb +2 -1
  84. data/app/views/admin/general_settings/edit.html.erb +4 -12
  85. data/app/views/admin/general_settings/show.html.erb +0 -5
  86. data/app/views/admin/images/index.html.erb +8 -5
  87. data/app/views/admin/inventory_settings/show.html.erb +1 -1
  88. data/app/views/admin/mail_methods/index.html.erb +4 -4
  89. data/app/views/admin/option_types/_form.html.erb +4 -4
  90. data/app/views/admin/option_types/_option_value_fields.html.erb +2 -2
  91. data/app/views/admin/option_types/edit.html.erb +4 -2
  92. data/app/views/admin/option_types/index.html.erb +5 -5
  93. data/app/views/admin/orders/_line_item.html.erb +2 -1
  94. data/app/views/admin/orders/history.html.erb +6 -2
  95. data/app/views/admin/orders/index.html.erb +22 -19
  96. data/app/views/admin/orders/show.html.erb +1 -1
  97. data/app/views/admin/orders/user.html.erb +1 -1
  98. data/app/views/admin/payment_methods/index.html.erb +7 -5
  99. data/app/views/admin/payments/_list.html.erb +3 -3
  100. data/app/views/admin/payments/index.html.erb +1 -1
  101. data/app/views/admin/payments/show.html.erb +2 -2
  102. data/app/views/admin/product_groups/edit.html.erb +7 -7
  103. data/app/views/admin/product_groups/index.html.erb +5 -3
  104. data/app/views/admin/product_groups/update.js.erb +4 -3
  105. data/app/views/admin/product_properties/_product_property_fields.html.erb +3 -3
  106. data/app/views/admin/product_properties/index.html.erb +10 -5
  107. data/app/views/admin/product_scopes/destroy.js.erb +1 -0
  108. data/app/views/admin/products/index.html.erb +32 -33
  109. data/app/views/admin/properties/_form.html.erb +2 -2
  110. data/app/views/admin/properties/index.html.erb +4 -4
  111. data/app/views/admin/prototypes/index.html.erb +4 -4
  112. data/app/views/admin/shared/_address_form.html.erb +1 -1
  113. data/app/views/admin/shared/_calculator_fields.html.erb +1 -1
  114. data/app/views/admin/shared/_destroy.js.erb +15 -2
  115. data/app/views/admin/shared/_order_tabs.html.erb +1 -1
  116. data/app/views/admin/shared/_report_criteria.html.erb +1 -1
  117. data/app/views/admin/shipments/_form.html.erb +6 -2
  118. data/app/views/admin/shipments/edit.html.erb +1 -1
  119. data/app/views/admin/shipments/index.html.erb +4 -2
  120. data/app/views/admin/shipping_methods/_form.html.erb +2 -0
  121. data/app/views/admin/shipping_methods/index.html.erb +3 -2
  122. data/app/views/admin/states/_state_list.html.erb +11 -5
  123. data/app/views/admin/tax_categories/index.html.erb +9 -4
  124. data/app/views/admin/tax_settings/show.html.erb +2 -2
  125. data/app/views/admin/taxonomies/_list.html.erb +4 -2
  126. data/app/views/admin/taxonomies/index.html.erb +2 -2
  127. data/app/views/admin/taxons/_form.html.erb +1 -1
  128. data/app/views/admin/trackers/index.html.erb +5 -5
  129. data/app/views/admin/users/_form.html.erb +3 -4
  130. data/app/views/admin/users/index.html.erb +7 -6
  131. data/app/views/admin/users/show.html.erb +3 -3
  132. data/app/views/admin/variants/index.html.erb +21 -6
  133. data/app/views/admin/zones/_form.html.erb +9 -9
  134. data/app/views/admin/zones/_member_type.html.erb +5 -5
  135. data/app/views/admin/zones/index.html.erb +7 -5
  136. data/app/views/checkout/_address.html.erb +2 -2
  137. data/app/views/checkout/_payment.html.erb +3 -6
  138. data/app/views/layouts/admin.html.erb +3 -9
  139. data/app/views/layouts/spree_application.html.erb +2 -1
  140. data/app/views/orders/_line_item.html.erb +1 -1
  141. data/app/views/orders/edit.html.erb +17 -16
  142. data/app/views/orders/show.html.erb +1 -1
  143. data/app/views/shared/_admin_head.html.erb +1 -1
  144. data/app/views/shared/_error_messages.html.erb +2 -2
  145. data/app/views/shared/_filters.html.erb +4 -4
  146. data/app/views/shared/_head.html.erb +2 -2
  147. data/app/views/shared/_nav_bar.html.erb +2 -2
  148. data/app/views/shared/_products.html.erb +4 -2
  149. data/app/views/shared/_taxonomies.html.erb +15 -8
  150. data/app/views/shipment_mailer/shipped_email.text.erb +2 -2
  151. data/config/cucumber.yml +10 -0
  152. data/config/initializers/form_builder.rb +1 -5
  153. data/config/initializers/workarounds_for_ruby19.rb +5 -5
  154. data/config/locales/en.yml +33 -6
  155. data/config/routes.rb +18 -13
  156. data/db/migrate/20090923100315_add_count_on_hand_to_variants_and_products.rb +5 -5
  157. data/db/migrate/20091213222815_creditcard_last_four_digits.rb +5 -5
  158. data/db/migrate/20100105132138_shipment_id_for_inventory_units.rb +2 -2
  159. data/db/migrate/20100209025806_create_payment_methods.rb +3 -3
  160. data/db/migrate/20100209144531_polymorphic_payments.rb +1 -1
  161. data/db/migrate/20100214212536_assign_creditcard_txns_to_payment.rb +2 -2
  162. data/db/migrate/20100224153127_deleted_at_for_payment_methods.rb +1 -1
  163. data/db/migrate/20100506185838_add_description_to_taxons.rb +1 -1
  164. data/db/migrate/20100816212146_shipping_method_id_for_orders.rb +1 -1
  165. data/db/migrate/20101026184808_migrate_checkout_to_orders.rb +2 -2
  166. data/db/migrate/20101223215658_add_position_to_variants.rb +9 -0
  167. data/db/migrate/20110110130847_add_next_state_to_state_events.rb +9 -0
  168. data/db/migrate/20110111122537_add_position_to_option_types.rb +9 -0
  169. data/db/migrate/20110314192118_remove_trailing_slashes_in_taxon_permalinks.rb +17 -0
  170. data/lib/custom_fixtures.rb +1 -1
  171. data/lib/{seo_assist.rb → middleware/seo_assist.rb} +14 -8
  172. data/lib/product_filters.rb +49 -43
  173. data/lib/redirect_legacy_product_url.rb +5 -5
  174. data/lib/scopes.rb +2 -2
  175. data/lib/scopes/dynamic.rb +9 -16
  176. data/lib/scopes/product.rb +33 -16
  177. data/lib/scopes/variant.rb +4 -3
  178. data/lib/spree/calculated_adjustments.rb +5 -2
  179. data/lib/spree/config.rb +2 -0
  180. data/lib/spree/current_order.rb +4 -4
  181. data/lib/spree/mail_settings.rb +3 -2
  182. data/lib/spree/search/base.rb +9 -10
  183. data/lib/spree_base.rb +22 -23
  184. data/lib/spree_core.rb +10 -69
  185. data/lib/spree_core/authorize_net_cim_hack.rb +1 -1
  186. data/lib/spree_core/delegate_belongs_to.rb +18 -24
  187. data/lib/spree_core/enumerable_constants.rb +38 -38
  188. data/lib/spree_core/find_by_param.rb +8 -6
  189. data/lib/spree_core/preferences/preference_definition.rb +7 -7
  190. data/lib/spree_core/railtie.rb +58 -0
  191. data/lib/spree_core/ssl_requirement.rb +4 -3
  192. data/lib/spree_core/testing_support/factories.rb +13 -0
  193. data/lib/spree_core/testing_support/factories/address_factory.rb +20 -0
  194. data/lib/spree_core/testing_support/factories/adjustment_factory.rb +6 -0
  195. data/lib/spree_core/testing_support/factories/calculator_factory.rb +5 -0
  196. data/lib/spree_core/testing_support/factories/configuraion_factory.rb +4 -0
  197. data/lib/spree_core/testing_support/factories/country_factory.rb +7 -0
  198. data/lib/spree_core/testing_support/factories/creditcard_factory.rb +11 -0
  199. data/lib/spree_core/testing_support/factories/inventory_unit_factory.rb +7 -0
  200. data/lib/spree_core/testing_support/factories/line_item_factory.rb +8 -0
  201. data/lib/spree_core/testing_support/factories/mail_method_factory.rb +4 -0
  202. data/lib/spree_core/testing_support/factories/options_factory.rb +10 -0
  203. data/lib/spree_core/testing_support/factories/order_factory.rb +18 -0
  204. data/lib/spree_core/testing_support/factories/payment_factory.rb +26 -0
  205. data/lib/spree_core/testing_support/factories/payment_method_factory.rb +17 -0
  206. data/lib/spree_core/testing_support/factories/product_factory.rb +16 -0
  207. data/lib/spree_core/testing_support/factories/product_group_factory.rb +3 -0
  208. data/lib/spree_core/testing_support/factories/product_option_type_factory.rb +4 -0
  209. data/lib/spree_core/testing_support/factories/product_property_factory.rb +4 -0
  210. data/lib/spree_core/testing_support/factories/product_scope_factory.rb +6 -0
  211. data/lib/spree_core/testing_support/factories/property_factory.rb +4 -0
  212. data/lib/spree_core/testing_support/factories/prototype_factory.rb +4 -0
  213. data/lib/spree_core/testing_support/factories/return_authorization_factory.rb +8 -0
  214. data/lib/spree_core/testing_support/factories/role_factory.rb +9 -0
  215. data/lib/spree_core/testing_support/factories/shipment_factory.rb +9 -0
  216. data/lib/spree_core/testing_support/factories/shipping_category_factory.rb +5 -0
  217. data/lib/spree_core/testing_support/factories/shipping_method_factory.rb +7 -0
  218. data/lib/spree_core/testing_support/factories/state_factory.rb +11 -0
  219. data/lib/spree_core/testing_support/factories/tax_category_factory.rb +8 -0
  220. data/lib/spree_core/testing_support/factories/tax_rate_factory.rb +5 -0
  221. data/lib/spree_core/testing_support/factories/taxon_factory.rb +5 -0
  222. data/lib/spree_core/testing_support/factories/taxonomy_factory.rb +3 -0
  223. data/lib/spree_core/testing_support/factories/tracker_factory.rb +5 -0
  224. data/lib/spree_core/testing_support/factories/user_factory.rb +15 -0
  225. data/lib/spree_core/testing_support/factories/variant_factory.rb +14 -0
  226. data/lib/spree_core/testing_support/factories/zone_factory.rb +18 -0
  227. data/lib/spree_core/theme_support/hook.rb +1 -1
  228. data/lib/spree_core/theme_support/more_patches.rb +20 -20
  229. data/lib/spree_core/version.rb +5 -0
  230. data/lib/tasks/common.rb +30 -0
  231. data/lib/tasks/install.rake +1 -1
  232. data/lib/tasks/rake_util.rb +19 -0
  233. data/lib/tasks/taxon.rake +14 -0
  234. data/public/images/reorder.jpg +0 -0
  235. data/public/javascripts/admin.js +0 -6
  236. data/public/javascripts/admin/unobtrusive_handlers.js +28 -0
  237. data/public/javascripts/checkout.js +3 -3
  238. data/public/stylesheets/admin/admin-forms.css +1 -6
  239. data/public/stylesheets/admin/admin.css +0 -28
  240. data/public/stylesheets/screen.css +0 -280
  241. metadata +81 -43
  242. data/app/controllers/countries_controller.rb +0 -11
  243. data/app/models/spree/alert.rb +0 -13
  244. data/app/models/state_monitor.rb +0 -25
  245. data/app/views/admin/shared/_alert.html.erb +0 -6
  246. data/app/views/countries/index.js.erb +0 -1
  247. data/app/views/shared/_doc_and_xmlns.html.erb +0 -2
  248. data/app/views/users/edit.html.erb +0 -9
  249. data/app/views/users/show.html.erb +0 -46
  250. data/lib/spree_core/validation_group.rb +0 -143
  251. data/public/stylesheets/scaffold.css +0 -54
@@ -1,15 +1,15 @@
1
1
  class ProductProperty < ActiveRecord::Base
2
2
  belongs_to :product
3
3
  belongs_to :property
4
-
4
+
5
5
  validates :property, :presence => true
6
-
6
+
7
7
  # virtual attributes for use with AJAX completion stuff
8
8
  def property_name
9
9
  property.name if property
10
10
  end
11
-
12
- def property_name=(name)
11
+
12
+ def property_name=(name)
13
13
  self.property = Property.find_by_name(name) unless name.blank?
14
- end
14
+ end
15
15
  end
@@ -16,14 +16,27 @@ class ProductScope < ActiveRecord::Base
16
16
 
17
17
  # Get all products with this scope
18
18
  def products
19
- if Product.condition?(self.name)
20
- Product.send(self.name, *self.arguments)
19
+ if Product.respond_to?(name)
20
+ Product.send(name, *arguments)
21
21
  end
22
22
  end
23
23
 
24
24
  # Applies product scope on Product model or another named scope
25
25
  def apply_on(another_scope)
26
- another_scope.send(self.name, *self.arguments)
26
+ array = *self.arguments
27
+ if Product.respond_to?(self.name.intern)
28
+ relation2 = if (array.blank? || array.size < 2)
29
+ Product.send(self.name.intern, array.try(:first))
30
+ else
31
+ Product.send(self.name.intern, *array)
32
+ end
33
+ else
34
+ relation2 = Product.search({self.name.intern => array}).relation
35
+ end
36
+ unless another_scope.class == ActiveRecord::Relation
37
+ another_scope = another_scope.send(:relation)
38
+ end
39
+ another_scope.merge(relation2)
27
40
  end
28
41
 
29
42
  before_validation(:on => :create) {
@@ -32,12 +45,19 @@ class ProductScope < ActiveRecord::Base
32
45
  self.arguments ||= ['']*args.length
33
46
  end
34
47
  }
35
-
48
+
36
49
  # checks validity of the named scope (if its safe and can be applied on Product)
37
50
  def check_validity_of_scope
38
- errors.add(:name, "is not a valid scope name") unless Product.condition?(self.name)
51
+ errors.add(:name, "is not a valid scope name") unless Product.respond_to?(self.name.intern)
39
52
  apply_on(Product).limit(0) != nil
40
- rescue Exception
53
+ rescue Exception => e
54
+ unless Rails.env.production?
55
+
56
+ puts "name: #{self.name}"
57
+ puts "arguments: #{self.arguments.inspect}"
58
+ puts e.message
59
+ puts e.backtrace
60
+ end
41
61
  errors.add(:arguments, "are incorrect")
42
62
  end
43
63
 
@@ -6,7 +6,7 @@ class Property < ActiveRecord::Base
6
6
 
7
7
  validates :name, :presentation, :presence => true
8
8
 
9
- scope :sorted, order(:name)
9
+ scope :sorted, lambda { order(:name) }
10
10
 
11
11
  def self.find_all_by_prototype(prototype)
12
12
  id = prototype
data/app/models/state.rb CHANGED
@@ -1,9 +1,8 @@
1
1
  class State < ActiveRecord::Base
2
2
  belongs_to :country
3
- scope :order_by_name, order(:name)
4
3
 
5
- has_one :zone_member, :as => :zoneable
6
- has_one :zone, :through => :zone_member
4
+ has_one :zone_member, :as => :zoneable
5
+ has_one :zone, :through => :zone_member
7
6
 
8
7
  validates :country, :name, :presence => true
9
8
 
@@ -2,6 +2,7 @@ class TaxCategory < ActiveRecord::Base
2
2
  validates :name, :presence => true, :uniqueness => true
3
3
 
4
4
  has_many :tax_rates
5
+
5
6
  before_save :set_default_category
6
7
 
7
8
  def set_default_category
@@ -11,7 +11,6 @@ class TaxRate < ActiveRecord::Base
11
11
  # To be considered for a match, the Zone must include the supplied address. If multiple matches are
12
12
  # found, the Zone with the highest rate will be returned. This method will return +nil+ if no match is found.
13
13
  def self.match(address)
14
- matching_rates = TaxRate.all.select { |rate| rate.zone.include? address }
15
- matching_rates.max { |a, b| a.amount <=> b.amount }
14
+ TaxRate.all.select { |rate| rate.zone.include? address }
16
15
  end
17
16
  end
data/app/models/taxon.rb CHANGED
@@ -4,7 +4,6 @@ class Taxon < ActiveRecord::Base
4
4
  belongs_to :taxonomy
5
5
  has_and_belongs_to_many :products
6
6
  before_create :set_permalink
7
- before_save :ensure_trailing_slash
8
7
 
9
8
  validates :name, :presence => true
10
9
  has_attached_file :icon,
@@ -14,14 +13,16 @@ class Taxon < ActiveRecord::Base
14
13
  :path => ":rails_root/public/assets/taxons/:id/:style/:basename.:extension",
15
14
  :default_url => "/images/default_taxon.png"
16
15
 
16
+
17
+ include ::ProductFilters # for detailed defs of filters
18
+
17
19
  # indicate which filters should be used for a taxon
18
20
  # this method should be customized to your own site
19
- include ::ProductFilters # for detailed defs of filters
20
21
  def applicable_filters
21
22
  fs = []
22
23
  # fs << ProductFilters.taxons_below(self)
23
24
  ## unless it's a root taxon? left open for demo purposes
24
-
25
+
25
26
  fs << ProductFilters.price_filter if ProductFilters.respond_to?(:price_filter)
26
27
  fs << ProductFilters.brand_filter if ProductFilters.respond_to?(:brand_filter)
27
28
  fs
@@ -30,21 +31,22 @@ class Taxon < ActiveRecord::Base
30
31
  # Creates permalink based on .to_url method provided by stringx gem
31
32
  def set_permalink
32
33
  if parent_id.nil?
33
- self.permalink = name.to_url + "/" if self.permalink.blank?
34
+ self.permalink = name.to_url if self.permalink.blank?
34
35
  else
35
36
  parent_taxon = Taxon.find(parent_id)
36
- self.permalink = parent_taxon.permalink + (self.permalink.blank? ? name.to_url : self.permalink.split("/").last) + "/"
37
+ self.permalink = [parent_taxon.permalink, (self.permalink.blank? ? name.to_url : self.permalink.split("/").last)].join('/')
37
38
  end
38
39
  end
39
40
 
41
+ def active_products
42
+ scope = self.products.active
43
+ scope = scope.on_hand unless Spree::Config[:show_zero_stock_products]
44
+ scope
45
+ end
46
+
40
47
  private
41
48
  # obsolete, kept for backwards compat
42
49
  def escape(str)
43
50
  str.blank? ? "" : str.to_url
44
51
  end
45
-
46
- def ensure_trailing_slash
47
- set_permalink if self.permalink.blank?
48
- self.permalink += "/" unless self.permalink[-1..-1] == "/"
49
- end
50
52
  end
@@ -1,17 +1,20 @@
1
1
  class Taxonomy < ActiveRecord::Base
2
+
3
+ validates :name, :presence => true
4
+
2
5
  has_many :taxons, :dependent => :destroy
3
6
  has_one :root, :class_name => 'Taxon', :conditions => "parent_id is null"
4
7
 
5
8
  after_save :set_name
6
9
 
10
+ private
11
+
7
12
  def set_name
8
13
  if self.root
9
14
  self.root.update_attribute(:name, self.name)
10
15
  else
11
- self.root = Taxon.create!({
12
- :taxonomy_id => self.id,
13
- :name => self.name
14
- })
16
+ self.root = Taxon.create!({ :taxonomy_id => self.id, :name => self.name })
15
17
  end
16
18
  end
19
+
17
20
  end
@@ -1,5 +1,5 @@
1
1
  class Tracker < ActiveRecord::Base
2
2
  def self.current
3
- Tracker.find(:first, :conditions => {:active => true, :environment => ENV['RAILS_ENV']})
3
+ Tracker.find(:first, :conditions => {:active => true, :environment => ENV['RAILS_ENV']})
4
4
  end
5
5
  end
data/app/models/user.rb CHANGED
@@ -4,6 +4,7 @@ class User < ActiveRecord::Base
4
4
  has_many :orders
5
5
  belongs_to :ship_address, :foreign_key => "ship_address_id", :class_name => "Address"
6
6
  belongs_to :bill_address, :foreign_key => "bill_address_id", :class_name => "Address"
7
+ scope :registered
7
8
 
8
9
  def anonymous?
9
10
  false
@@ -14,4 +15,7 @@ class User < ActiveRecord::Base
14
15
  User.create
15
16
  end
16
17
 
18
+ attr_accessor :password
19
+ attr_accessor :password_confirmation
20
+
17
21
  end
@@ -74,7 +74,7 @@ class Variant < ActiveRecord::Base
74
74
  end
75
75
 
76
76
  def options_text
77
- self.option_values.map { |ov| "#{ov.option_type.presentation}: #{ov.presentation}" }.to_sentence({:words_connector => ", ", :two_words_connector => ", "})
77
+ self.option_values.sort{|ov1, ov2| ov1.option_type.position <=> ov2.option_type.position}.map { |ov| "#{ov.option_type.presentation}: #{ov.presentation}" }.to_sentence({:words_connector => ", ", :two_words_connector => ", "})
78
78
  end
79
79
 
80
80
  def gross_profit
data/app/models/zone.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  class Zone < ActiveRecord::Base
2
2
  has_many :zone_members
3
- has_many :tax_rates
3
+ has_many :tax_rates, :dependent => :destroy
4
4
  has_many :shipping_methods
5
5
 
6
6
  validates :name, :presence => true, :uniqueness => true
@@ -1,8 +1,8 @@
1
1
  class ZoneMember < ActiveRecord::Base
2
2
  belongs_to :zone
3
- belongs_to :zoneable, :polymorphic => true
4
-
5
- def name
3
+ belongs_to :zoneable, :polymorphic => true
4
+
5
+ def name
6
6
  return nil if zoneable.nil?
7
7
  zoneable.name
8
8
  end
@@ -5,15 +5,18 @@
5
5
  <th><%= t("amount") %></th>
6
6
  <th></th>
7
7
  </tr>
8
- <% @order.adjustments.each do |adjustment| %>
8
+ <% @order.adjustments.each do |adjustment|
9
+ @edit_url = edit_admin_order_adjustment_path(@order, adjustment)
10
+ @delete_url = admin_order_adjustment_path(@order, adjustment)
11
+ %>
9
12
  <tr id="<%= dom_id(adjustment) %>">
10
13
  <td><%= adjustment.created_at.to_s(:date_time24) %></td>
11
14
  <td><%= adjustment.label %></td>
12
15
  <td><%= number_to_currency(adjustment.amount) %></td>
13
- <td>
14
- <%= link_to_edit adjustment %>
16
+ <td class='actions'>
17
+ <%= link_to_edit adjustment, :class => 'edit' %>
15
18
  &nbsp;
16
- <%= link_to_delete adjustment %>
19
+ <%= link_to_delete adjustment, {}, :class => 'delete' %>
17
20
  </td>
18
21
 
19
22
  </tr>
@@ -3,7 +3,7 @@
3
3
  <h2><%= t("adjustment")%></h2>
4
4
 
5
5
  <%= render "shared/error_messages", :target => @adjustment %>
6
- <%= form_for(@adjustment, :url => object_url, :html => { :method => :put}) do |f| %>
6
+ <%= form_for(@adjustment, :url => admin_order_adjustment_path(@order, @adjustment), :html => { :method => :put}) do |f| %>
7
7
  <%= render :partial => "form", :locals => {:f => f} %>
8
8
 
9
9
  <p class="form-buttons">
@@ -1,4 +1,4 @@
1
1
  <%= render 'admin/shared/new_adjustment_button' %>
2
2
  <%= render :partial => 'admin/shared/order_tabs', :locals => {:current => "Adjustments"} %>
3
- <%= render 'admin/shared/adjustments_table' %>
4
- <%= button_link_to t('continue'), @order.cart? ? new_admin_order_payment_url(@order) : admin_orders_url %>
3
+ <%= render 'adjustments_table' %>
4
+ <%= button_link_to t('continue'), @order.cart? ? new_admin_order_payment_url(@order) : admin_orders_url %>
@@ -3,7 +3,8 @@
3
3
  <h2><%= t("new_adjustment")%></h2>
4
4
 
5
5
  <%= render "shared/error_messages", :target => @adjustment %>
6
- <%= form_for @adjustment, :url => collection_url do |f| %>
6
+
7
+ <%= form_for @adjustment, :url => admin_order_adjustments_path do |f| %>
7
8
  <%= render :partial => "form", :locals => {:f => f} %>
8
9
 
9
10
  <p class="form-buttons">
@@ -1,6 +1,6 @@
1
1
  <%= render :partial => 'admin/shared/configuration_menu' %>
2
2
 
3
- <h1><%= t('general_settings') %></h1>
3
+ <h1><%= t('edit_general_settings') %></h1>
4
4
 
5
5
  <%= form_tag(admin_general_settings_path, :method => :put) do %>
6
6
 
@@ -11,7 +11,7 @@
11
11
  <p>
12
12
  <label><%= t('site_url') %></label>
13
13
  <%= text_field_tag('preferences[site_url]', Spree::Config[:site_url])%>
14
- </p>
14
+ </p>
15
15
  <p>
16
16
  <label>
17
17
  <input name="preferences[allow_ssl_in_production]" type="hidden" value="0" />
@@ -22,22 +22,14 @@
22
22
 
23
23
  <p>
24
24
  <label>
25
- <input name="preferences[allow_ssl_in_development_and_test]" type="hidden" value="0" />
25
+ <input name="preferences[allow_ssl_in_development_and_test]" type="hidden" value="0" />
26
26
  <%= check_box_tag('preferences[allow_ssl_in_development_and_test]', "1", Spree::Config[:allow_ssl_in_development_and_test]) %>
27
27
  <%= t('allow_ssl_to_be_used_when_in_developement_and_test_modes') %>
28
28
  </label>
29
29
  </p>
30
30
 
31
- <p>
32
- <label>
33
- <input name="preferences[check_for_spree_alerts]" type="hidden" value="0" />
34
- <%= check_box_tag('preferences[check_for_spree_alerts]', "1", Spree::Config[:check_for_spree_alerts]) %>
35
- <%= t('spree_alert_checking') %>
36
- </label>
37
- </p>
38
-
39
31
  <p class="form-buttons">
40
- <%= button t('update') %>
32
+ <%= button t('update') %>
41
33
  <%= t("or") %> <%= link_to t("cancel"), admin_general_settings_url %>
42
34
  </p>
43
35
  <% end %>
@@ -21,11 +21,6 @@
21
21
  <%= (Spree::Config[:allow_ssl_in_development_and_test] ? t("ssl_will_be_used_in_development_and_test_modes") : t("ssl_will_not_be_used_in_development_and_test_modes")) %>
22
22
  </td>
23
23
  </tr>
24
- <tr>
25
- <td colspan="2">
26
- <%= (Spree::Config[:check_for_spree_alerts] ? t("spree_alert_checking") : t("spree_alert_not_checking")) %>
27
- </td>
28
- </tr>
29
24
  </table>
30
25
 
31
26
  <p><%= link_to_with_icon 'edit', t("edit"), edit_admin_general_settings_path, :id => 'admin_general_settings_link' %></p>
@@ -2,7 +2,7 @@
2
2
 
3
3
  <%= render :partial => 'admin/shared/product_tabs', :locals => {:current => "Images"} %>
4
4
 
5
- <table class="index">
5
+ <table class="index sortable">
6
6
  <tr>
7
7
  <th><%= t("thumbnail") %></th>
8
8
  <% if @product.has_variants? %>
@@ -14,13 +14,16 @@
14
14
 
15
15
  <% @product.images.each do |image| %>
16
16
  <tr id="<%= dom_id(image) %>">
17
- <td><%= link_to(image_tag(image.attachment.url(:mini)), image.attachment.url(:product)) %></td>
17
+ <td>
18
+ <span class="handle"></span>
19
+ <%= link_to(image_tag(image.attachment.url(:mini)), image.attachment.url(:product)) %>
20
+ </td>
18
21
  <% if @product.has_variants? %>
19
22
  <td><%= t('all') %></td>
20
23
  <% end %>
21
24
  <td><%= image.alt %></td>
22
25
  <td class="actions">
23
- <%= link_to_with_icon('edit', t("edit"), edit_admin_product_image_url(@product, image)) %>
26
+ <%= link_to_with_icon('edit', t("edit"), edit_admin_product_image_url(@product, image), :class => 'edit') %>
24
27
  &nbsp;
25
28
  <%= link_to_delete image, {:url => admin_product_image_url(@product, image) }%>
26
29
  </td>
@@ -30,7 +33,7 @@
30
33
  <% @product.variants.each do |variant| %>
31
34
  <% variant.images.each do |image| %>
32
35
  <tr id="<%= dom_id(image) %>">
33
- <td><%= link_to(image_tag(image.attachment.url(:mini)), image.attachment.url(:product)) %></td>
36
+ <td><span class="handle"></span><%= link_to(image_tag(image.attachment.url(:mini)), image.attachment.url(:product)) %></td>
34
37
  <% if @product.has_variants? %>
35
38
  <td><%= variant.options_text %></td>
36
39
  <% end %>
@@ -63,4 +66,4 @@
63
66
 
64
67
  });
65
68
  </script>
66
- <% end %>
69
+ <% end %>
@@ -5,5 +5,5 @@
5
5
  <h4><%= t("products_with_zero_inventory_display", :not => show_not(Spree::Config[:show_zero_stock_products])) %> </h4>
6
6
  <h4><%= t("backordering_is_allowed", :not => show_not(Spree::Config[:allow_backorders])) %></h4>
7
7
 
8
- <%= link_to_with_icon 'edit', t("edit"), edit_admin_inventory_settings_path %>
8
+ <%= link_to_with_icon 'edit', t("edit"), edit_admin_inventory_settings_path, :id => 'admin_inventory_settings_link' %>
9
9
 
@@ -3,7 +3,7 @@
3
3
  <div class='toolbar'>
4
4
  <ul class='actions'>
5
5
  <li>
6
- <%= button_link_to t("new_mail_method"), new_object_url, :icon => 'add' %>
6
+ <%= button_link_to t("new_mail_method"), new_object_url, :icon => 'add', :id => 'admin_new_mail_method_link' %>
7
7
  </li>
8
8
  </ul>
9
9
  <br class='clear' />
@@ -11,7 +11,7 @@
11
11
 
12
12
  <h1><%= t("mail_methods") %></h1>
13
13
 
14
- <table class="index">
14
+ <table class="index" id='mail_methods_listing'>
15
15
  <thead>
16
16
  <%= hook :admin_mail_methods_index_headers do %>
17
17
  <th><%= t("environment") %></th>
@@ -31,11 +31,11 @@
31
31
  <% end %>
32
32
  <td width="140px">
33
33
  <%= hook :admin_mail_methods_index_row_actions, locals do %>
34
- <%= link_to_edit method %> &nbsp;
34
+ <%= link_to_edit method, :class => 'edit' %> &nbsp;
35
35
  <%= link_to_delete method %>
36
36
  <% end %>
37
37
  </td>
38
38
  </tr>
39
39
  <% end %>
40
40
  </tbody>
41
- </table>
41
+ </table>