caboose-store 0.0.21 → 0.0.22

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NmYwMGM3MzgxNTEyNjlkYWNkNTI5MzU5NGFjM2Q2M2IzODM2N2FhMw==
4
+ OTE4N2M4ZWE4NjYwZDEzYzM2MmY3YTA5Y2ViNjc5ZjgwNWU5Yjc2MA==
5
5
  data.tar.gz: !binary |-
6
- Yzc3Zjg0MzQ4ZmQ3YzVjYTBkMTJmMjE4ZjgxOGNmMjhhY2NkNGM1NA==
6
+ MWZmZmYzNzMyMjJjYjA4MWRjOTk2YTI3ZWNhYzllNDU4NzZlNGI0Yw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NGU2YjIxZTU4ZTE1Mzg1NTYxMjZmYTkyOTgxYWIwZWMzNDRjYzFhOWYxY2Ey
10
- ODkwM2U0ZWRiNzc5NWVmMjgyYWU0ZTA0OGM1ZjQxZTg0YjlkZWQxOGJkMzdk
11
- Y2MzN2FkNTliNTJkODllOTVjYjk0MjY1MzA0OGExMTI0YTdiMTQ=
9
+ Yjg2MzI2OThmMWM1OTk3MzkxMThiM2ZlODk4M2Y4OGVlOWIxMjE5YTM1YjQ2
10
+ YWNhNzc0YWYzMmE3OTkzZmQzN2M2NWUyNzRhNTA5MjU4NGVkODM2MTk2MzM0
11
+ MjY4YTk3MzNlOTE1YmY2Y2U0ZWQyM2JmYWY2MDU0N2RhZDZmY2Y=
12
12
  data.tar.gz: !binary |-
13
- MmMzYTM0YmM0MzYyODA5MDA4ZmRmNGJjOWZkMzgyM2RhNmRlNTNhOTI1MTlk
14
- YzNhM2QyMDBiNWEzNWM0N2E2MzdjNzI3Y2QxY2RkZjY0M2Y2NDkwZTQ2MTA3
15
- OGVjNTZmOWU1OWVhMDcxMWFjMjVmNzgxZGMwZTJkMzRhMjY5ZDc=
13
+ NDg1OTllZjE0MWJhMDY4MDAzMzA0MmU3MmI3NTFhYTcwMjRjNGQ4YzU4YTY4
14
+ M2FkYmY0MTkzZmU3MGM0ZjVlZjIxNDE3YTc0MzdhY2FkMTI0MTg0NGE4NjU0
15
+ NjZlZTI3ZTg4ZDliZjg4YzgyOTc0OWJlOTkzNDNjYjJiOWIwMDU=
@@ -21,6 +21,9 @@ Caboose.Store.Modules.Product = (function() {
21
21
 
22
22
  $.get('/products/' + self.$product.data('id') + '/info', function(response) {
23
23
  self.product = response.product;
24
+ self.option1_values = response.option1_values;
25
+ self.option2_values = response.option2_values;
26
+ self.option3_values = response.option3_values;
24
27
  self.render();
25
28
  self.bindEvents();
26
29
  self.setVariant(self.getInitialVariant());
@@ -173,14 +176,20 @@ Caboose.Store.Modules.Product = (function() {
173
176
  };
174
177
 
175
178
  self.getOptionsWithAllValues = function() {
176
- return _.map(self.getOptionsFromProduct(), function(optionName) {
177
- return {
178
- name: optionName,
179
- values: _.uniq(_.map(self.product.variants, function(variant) {
180
- return variant[self.getOptionAttribute(optionName)];
181
- }))
182
- };
183
- });
179
+ //return _.map(self.getOptionsFromProduct(), function(optionName) {
180
+ // return {
181
+ // name: optionName,
182
+ // values: _.uniq(_.map(self.product.variants, function(variant) {
183
+ // return variant[self.getOptionAttribute(optionName)];
184
+ // }))
185
+ // };
186
+ //});
187
+
188
+ var options = [];
189
+ if (self.product.option1) options.push({ name: self.product.option1, values: self.option1_values });
190
+ if (self.product.option2) options.push({ name: self.product.option2, values: self.option2_values });
191
+ if (self.product.option3) options.push({ name: self.product.option3, values: self.option3_values });
192
+ return options;
184
193
  };
185
194
 
186
195
  self.getOptionAttribute = function(option) {
@@ -37,6 +37,15 @@ module CabooseStore
37
37
  redirect_to '/checkout/step-two' and return if @order.shipping_address.nil? || @order.billing_address.nil?
38
38
  redirect_to '/checkout/step-three' and return if @order.shipping_code.nil?
39
39
 
40
+ # Make sure all the variants still exist
41
+ @order.line_items.each do |li|
42
+ v = Variant.where(:id => li.variant_id).first
43
+ if v.nil? || v.status == 'Deleted'
44
+ render :file => 'caboose_store/checkout/deleted_variant'
45
+ return
46
+ end
47
+ end
48
+
40
49
  case CabooseStore::payment_processor
41
50
  when 'authorize.net'
42
51
  @sim_transaction = AuthorizeNet::SIM::Transaction.new(
@@ -97,7 +97,13 @@ module CabooseStore
97
97
 
98
98
  # GET /product/info
99
99
  def info
100
- render :json => { :product => Product.find(params[:id]) }
100
+ p = Product.find(params[:id])
101
+ render :json => {
102
+ :product => p,
103
+ :option1_values => p.option1_values,
104
+ :option2_values => p.option2_values,
105
+ :option3_values => p.option3_values
106
+ }
101
107
  end
102
108
 
103
109
  # GET /api/products
@@ -458,6 +464,13 @@ module CabooseStore
458
464
  render :layout => 'caboose/admin'
459
465
  end
460
466
 
467
+ # GET /admin/products/:id/variants/sort-order
468
+ def admin_edit_variant_sort_order
469
+ return if !user_is_allowed('products', 'edit')
470
+ @product = Product.find(params[:id])
471
+ render :layout => 'caboose/admin'
472
+ end
473
+
461
474
  # GET /admin/products/:id/delete
462
475
  def admin_delete_form
463
476
  return if !user_is_allowed('products', 'edit')
@@ -638,8 +651,40 @@ module CabooseStore
638
651
  def admin_update_sort_order
639
652
  params[:product_ids].each_with_index do |product_id, index|
640
653
  Product.find(product_id.to_i).update_attribute(:sort_order, index)
641
- end
642
-
654
+ end
655
+ render :json => { :success => true }
656
+ end
657
+
658
+ # PUT /admin/products/:id/variants/option1-sort-order
659
+ def admin_update_variant_option1_sort_order
660
+ product_id = params[:id]
661
+ params[:values].each_with_index do |value, i|
662
+ Variant.where(:product_id => product_id, :option1 => value).all.each do |v|
663
+ v.update_attribute(:option1_sort_order, i)
664
+ end
665
+ end
666
+ render :json => { :success => true }
667
+ end
668
+
669
+ # PUT /admin/products/:id/variants/option1-sort-order
670
+ def admin_update_variant_option2_sort_order
671
+ product_id = params[:id]
672
+ params[:values].each_with_index do |value, i|
673
+ Variant.where(:product_id => product_id, :option2 => value).all.each do |v|
674
+ v.update_attribute(:option2_sort_order, i)
675
+ end
676
+ end
677
+ render :json => { :success => true }
678
+ end
679
+
680
+ # PUT /admin/products/:id/variants/option1-sort-order
681
+ def admin_update_variant_option3_sort_order
682
+ product_id = params[:id]
683
+ params[:values].each_with_index do |value, i|
684
+ Variant.where(:product_id => product_id, :option3 => value).all.each do |v|
685
+ v.update_attribute(:option3_sort_order, i)
686
+ end
687
+ end
643
688
  render :json => { :success => true }
644
689
  end
645
690
  end
@@ -8,7 +8,7 @@ module CabooseStore
8
8
  has_many :customization_memberships, :class_name => 'CabooseStore::CustomizationMembership'
9
9
  has_many :categories, :class_name => 'CabooseStore::Category', :through => :category_memberships
10
10
  has_many :category_memberships, :class_name => 'CabooseStore::CategoryMembership'
11
- has_many :variants, :class_name => 'CabooseStore::Variant'
11
+ has_many :variants, :class_name => 'CabooseStore::Variant', :order => 'sort_order'
12
12
  has_many :product_images, :class_name => 'CabooseStore::ProductImage'
13
13
  has_many :proudct_inputs, :class_name => 'CabooseStore::ProductInput'
14
14
  has_many :reviews, :class_name => 'CabooseStore::Review'
@@ -130,5 +130,17 @@ module CabooseStore
130
130
  # Return variants that haven't been "deleted"
131
131
  self.variants.where(:status => ['Active', 'Inactive'])
132
132
  end
133
+
134
+ def option1_values
135
+ arr = self.variants.reorder(:option1_sort_order).pluck(:option1).uniq.reject { |x| x.nil? || x.empty? }
136
+ end
137
+
138
+ def option2_values
139
+ self.variants.reorder(:option2_sort_order).pluck(:option2).uniq.reject { |x| x.nil? || x.empty? }
140
+ end
141
+
142
+ def option3_values
143
+ self.variants.reorder(:option3_sort_order).pluck(:option3).uniq.reject { |x| x.nil? || x.empty? }
144
+ end
133
145
  end
134
146
  end
@@ -197,7 +197,10 @@ class CabooseStore::Schema < Caboose::Utilities::Schema
197
197
  [ :product_id , :integer ],
198
198
  [ :shipping_unit_value , :numeric ],
199
199
  [ :alternate_id , :string ],
200
- [ :status , :string ]
200
+ [ :status , :string ],
201
+ [ :option1_sort_order , :integer , { :defult => 0 }],
202
+ [ :option2_sort_order , :integer , { :defult => 0 }],
203
+ [ :option3_sort_order , :integer , { :defult => 0 }]
201
204
  ],
202
205
 
203
206
  CabooseStore::Vendor => [
@@ -15,11 +15,11 @@ tabs = {
15
15
  "/admin/products/#{@product.id}/categories" => 'Categories'
16
16
  }
17
17
 
18
- tabs["/admin/products/#{@product.id}/options" ] = 'Options <span style="font-size: 65%">(size, color, style, etc.)</span>' if @product.options && @product.options.count > 0
19
- tabs["/admin/products/#{@product.id}/variants" ] = 'Inventory & variants'
20
- # tabs["/admin/products/#{@product.id}/variants/group" ] = 'Group Variants'
21
- tabs["/admin/products/#{@product.id}/images" ] = 'Images'
22
- tabs["/admin/products/#{@product.id}/delete" ] = 'Delete Product'
18
+ tabs["/admin/products/#{@product.id}/options" ] = 'Options <span style="font-size: 65%">(size, color, style, etc.)</span>' if @product.options && @product.options.count > 0
19
+ tabs["/admin/products/#{@product.id}/variants/sort-order" ] = 'Sort Option Values' if @product.options && @product.options.count > 0
20
+ tabs["/admin/products/#{@product.id}/variants" ] = 'Inventory & Variants'
21
+ tabs["/admin/products/#{@product.id}/images" ] = 'Images'
22
+ tabs["/admin/products/#{@product.id}/delete" ] = 'Delete Product'
23
23
 
24
24
  #tabs["/admin/products/#{@product.id}/seo" ] = 'SEO'
25
25
 
@@ -0,0 +1,63 @@
1
+ <%
2
+ p = @product
3
+ %>
4
+
5
+ <%= render :partial => 'caboose_store/products/admin_header' %>
6
+
7
+ <div id='options'>
8
+ <% if p.option1 %><div id='option1_container'><h2><%= p.option1 %></h2><ul id='option1'><% p.option1_values.each do |option| %><li id='values_<%= option %>'><%= option %></li><% end %></ul></div><% end %>
9
+ <% if p.option2 %><div id='option2_container'><h2><%= p.option2 %></h2><ul id='option2'><% p.option2_values.each do |option| %><li id='values_<%= option %>'><%= option %></li><% end %></ul></div><% end %>
10
+ <% if p.option3 %><div id='option3_container'><h2><%= p.option3 %></h2><ul id='option3'><% p.option3_values.each do |option| %><li id='values_<%= option %>'><%= option %></li><% end %></ul></div><% end %>
11
+ </div>
12
+
13
+ <div id='message'></div>
14
+
15
+ <%= render :partial => 'caboose_store/products/admin_footer' %>
16
+
17
+ <% content_for :caboose_css do %>
18
+ <style type='text/css'>
19
+ #options div { width: 33%; float: left; }
20
+ #options ul { margin: 0 10px 0 0; padding: 0; list-style: none; }
21
+ #options li { margin: 0; padding: 4px 8px; list-style: none; border: #ccc 1px solid; }
22
+ #message { clear: left; }
23
+ </style>
24
+ <% end %>
25
+
26
+ <% content_for :caboose_js do %>
27
+ <script type='text/javascript'>
28
+
29
+ $(document).ready(function() {
30
+ $('#option1').sortable({
31
+ update: function(event, ui) {
32
+ $.ajax({
33
+ url: '/admin/products/<%= p.id %>/variants/option1-sort-order',
34
+ type: 'put',
35
+ data: $('#option1').sortable('serialize'),
36
+ success: function(resp) {}
37
+ });
38
+ }
39
+ });
40
+ $('#option2').sortable({
41
+ update: function(event, ui) {
42
+ $.ajax({
43
+ url: '/admin/products/<%= p.id %>/variants/option2-sort-order',
44
+ type: 'put',
45
+ data: $('#option2').sortable('serialize'),
46
+ success: function(resp) {}
47
+ });
48
+ }
49
+ });
50
+ $('#option3').sortable({
51
+ update: function(event, ui) {
52
+ $.ajax({
53
+ url: '/admin/products/<%= p.id %>/variants/option3-sort-order',
54
+ type: 'put',
55
+ data: $('#option3').sortable('serialize'),
56
+ success: function(resp) {}
57
+ });
58
+ }
59
+ });
60
+ });
61
+
62
+ </script>
63
+ <% end %>
@@ -30,60 +30,64 @@ end
30
30
  %></div>
31
31
 
32
32
  <div id='variants_wrapper'>
33
- <table id='variants'>
34
- <tr>
35
- <% if @cols['option1' ] && p.option1 %><th valign='bottom'><%= p.option1 %></th><% end %>
36
- <% if @cols['option2' ] && p.option2 %><th valign='bottom'><%= p.option2 %></th><% end %>
37
- <% if @cols['option3' ] && p.option3 %><th valign='bottom'><%= p.option3 %></th><% end %>
38
- <% if @cols['status' ] == true %><th valign='bottom'>Status </th><% end %>
39
- <% if @cols['alternate_id' ] == true %><th valign='bottom'>Alternate ID </th><% end %>
40
- <% if @cols['barcode' ] == true %><th valign='bottom'>Barcode </th><% end %>
41
- <% if @cols['price' ] == true %><th valign='bottom'>Price </th><% end %>
42
- <% if @cols['quantity_in_stock' ] == true %><th valign='bottom'>Quantity </th><% end %>
43
- <% if @cols['weight' ] == true %><th valign='bottom'>Weight </th><% end %>
44
- <% if @cols['length' ] == true %><th valign='bottom'>Length </th><% end %>
45
- <% if @cols['width' ] == true %><th valign='bottom'>Width </th><% end %>
46
- <% if @cols['height' ] == true %><th valign='bottom'>Height </th><% end %>
47
- <% if @cols['cylinder' ] == true %><th valign='bottom'>Cylinder </th><% end %>
48
- <% if @cols['requires_shipping' ] == true %><th valign='bottom'>Requires Shipping </th><% end %>
49
- <% if @cols['allow_backorder' ] == true %><th valign='bottom'>Allow Backorder </th><% end %>
50
- <% if @cols['taxable' ] == true %><th valign='bottom'>Taxable </th><% end %>
51
- <th>&nbsp;</th>
52
- <th>&nbsp;</th>
53
- </tr>
54
- <% Caboose.log p.variants.where(:status => ['Active', 'Inactive']).first %>
55
- <% p.variants.where(:status => ['Active', 'Inactive']).each do |v| %>
56
- <tr <% if @highlight_variant_id && v.id == @highlight_variant_id %>class='highlight'<% end %>>
57
- <% if @cols['option1' ] && p.option1 %><td><div id='variant_<%= v.id %>_option1' ></div></td><% end %>
58
- <% if @cols['option2' ] && p.option2 %><td><div id='variant_<%= v.id %>_option2' ></div></td><% end %>
59
- <% if @cols['option3' ] && p.option3 %><td><div id='variant_<%= v.id %>_option3' ></div></td><% end %>
60
- <% if @cols['status' ] == true %><td><div id='variant_<%= v.id %>_status' ></div></td><% end %>
61
- <% if @cols['alternate_id' ] == true %><td><div id='variant_<%= v.id %>_alternate_id' ></div></td><% end %>
62
- <% if @cols['barcode' ] == true %><td><div id='variant_<%= v.id %>_barcode' ></div></td><% end %>
63
- <% if @cols['price' ] == true %><td><div id='variant_<%= v.id %>_price' ></div></td><% end %>
64
- <% if @cols['quantity_in_stock' ] == true %><td><div id='variant_<%= v.id %>_quantity_in_stock' ></div></td><% end %>
65
- <% if @cols['weight' ] == true %><td><div id='variant_<%= v.id %>_weight' ></div></td><% end %>
66
- <% if @cols['length' ] == true %><td><div id='variant_<%= v.id %>_length' ></div></td><% end %>
67
- <% if @cols['width' ] == true %><td><div id='variant_<%= v.id %>_width' ></div></td><% end %>
68
- <% if @cols['height' ] == true %><td><div id='variant_<%= v.id %>_height' ></div></td><% end %>
69
- <% if @cols['cylinder' ] == true %><td><div id='variant_<%= v.id %>_cylinder' ></div></td><% end %>
70
- <% if @cols['requires_shipping' ] == true %><td><div id='variant_<%= v.id %>_requires_shipping' ></div></td><% end %>
71
- <% if @cols['allow_backorder' ] == true %><td><div id='variant_<%= v.id %>_allow_backorder' ></div></td><% end %>
72
- <% if @cols['taxable' ] == true %><td><div id='variant_<%= v.id %>_taxable' ></div></td><% end %>
73
- <td class='edit'><a href='/admin/products/<%= p.id %>/variants/<%= v.id %>/edit'>Edit</a></td>
74
- <td class='delete'><a href='#' onclick='delete_variant(<%= v.id %>);'>Delete</a></td>
75
- </tr>
76
- <% end %>
77
- </table>
78
-
33
+ <table id='variants'>
34
+ <tr>
35
+ <th>&nbsp;</th>
36
+ <% if @cols['option1' ] && p.option1 %><th valign='bottom'><%= p.option1 %></th><% end %>
37
+ <% if @cols['option2' ] && p.option2 %><th valign='bottom'><%= p.option2 %></th><% end %>
38
+ <% if @cols['option3' ] && p.option3 %><th valign='bottom'><%= p.option3 %></th><% end %>
39
+ <% if @cols['status' ] == true %><th valign='bottom'>Status </th><% end %>
40
+ <% if @cols['alternate_id' ] == true %><th valign='bottom'>Alternate ID </th><% end %>
41
+ <% if @cols['barcode' ] == true %><th valign='bottom'>Barcode </th><% end %>
42
+ <% if @cols['price' ] == true %><th valign='bottom'>Price </th><% end %>
43
+ <% if @cols['quantity_in_stock' ] == true %><th valign='bottom'>Quantity </th><% end %>
44
+ <% if @cols['weight' ] == true %><th valign='bottom'>Weight </th><% end %>
45
+ <% if @cols['length' ] == true %><th valign='bottom'>Length </th><% end %>
46
+ <% if @cols['width' ] == true %><th valign='bottom'>Width </th><% end %>
47
+ <% if @cols['height' ] == true %><th valign='bottom'>Height </th><% end %>
48
+ <% if @cols['cylinder' ] == true %><th valign='bottom'>Cylinder </th><% end %>
49
+ <% if @cols['requires_shipping' ] == true %><th valign='bottom'>Requires Shipping </th><% end %>
50
+ <% if @cols['allow_backorder' ] == true %><th valign='bottom'>Allow Backorder </th><% end %>
51
+ <% if @cols['taxable' ] == true %><th valign='bottom'>Taxable </th><% end %>
52
+ <th>&nbsp;</th>
53
+ <th>&nbsp;</th>
54
+ </tr>
55
+ <tbody id='variants_tbody'>
56
+ <% p.variants.where(:status => ['Active', 'Inactive']).each do |v| %>
57
+ <tr id='variant_<%= v.id %>' <% if @highlight_variant_id && v.id == @highlight_variant_id %>class='highlight'<% end %>>
58
+ <td class='sort_handle'>&nbsp;</td>
59
+ <% if @cols['option1' ] && p.option1 %><td><div id='variant_<%= v.id %>_option1' ></div></td><% end %>
60
+ <% if @cols['option2' ] && p.option2 %><td><div id='variant_<%= v.id %>_option2' ></div></td><% end %>
61
+ <% if @cols['option3' ] && p.option3 %><td><div id='variant_<%= v.id %>_option3' ></div></td><% end %>
62
+ <% if @cols['status' ] == true %><td><div id='variant_<%= v.id %>_status' ></div></td><% end %>
63
+ <% if @cols['alternate_id' ] == true %><td><div id='variant_<%= v.id %>_alternate_id' ></div></td><% end %>
64
+ <% if @cols['barcode' ] == true %><td><div id='variant_<%= v.id %>_barcode' ></div></td><% end %>
65
+ <% if @cols['price' ] == true %><td><div id='variant_<%= v.id %>_price' ></div></td><% end %>
66
+ <% if @cols['quantity_in_stock' ] == true %><td><div id='variant_<%= v.id %>_quantity_in_stock' ></div></td><% end %>
67
+ <% if @cols['weight' ] == true %><td><div id='variant_<%= v.id %>_weight' ></div></td><% end %>
68
+ <% if @cols['length' ] == true %><td><div id='variant_<%= v.id %>_length' ></div></td><% end %>
69
+ <% if @cols['width' ] == true %><td><div id='variant_<%= v.id %>_width' ></div></td><% end %>
70
+ <% if @cols['height' ] == true %><td><div id='variant_<%= v.id %>_height' ></div></td><% end %>
71
+ <% if @cols['cylinder' ] == true %><td><div id='variant_<%= v.id %>_cylinder' ></div></td><% end %>
72
+ <% if @cols['requires_shipping' ] == true %><td><div id='variant_<%= v.id %>_requires_shipping' ></div></td><% end %>
73
+ <% if @cols['allow_backorder' ] == true %><td><div id='variant_<%= v.id %>_allow_backorder' ></div></td><% end %>
74
+ <% if @cols['taxable' ] == true %><td><div id='variant_<%= v.id %>_taxable' ></div></td><% end %>
75
+ <td class='edit'><a href='/admin/products/<%= p.id %>/variants/<%= v.id %>/edit'>Edit</a></td>
76
+ <td class='delete'><a href='#' onclick='delete_variant(<%= v.id %>);'>Delete</a></td>
77
+ </tr>
78
+ <% end %>
79
+ </tbody>
80
+ </table>
79
81
  </div>
82
+
80
83
  <p><input type='button' value='New Variant' onclick="add_variant(<%= p.id %>);" /></p>
81
84
 
82
85
  <%= render :partial => 'caboose_store/products/admin_footer' %>
83
86
 
84
87
  <% content_for :caboose_css do %>
85
88
  <style type='text/css'>
86
- tr.highlight td { background: #ffff99 }
89
+ tr.highlight td { background: #ffff99 }
90
+ td.sort_handle { background: #ccc; width: 20px; }
87
91
  </style>
88
92
  <% end %>
89
93
 
@@ -117,7 +121,19 @@ $(document).ready(function() {
117
121
  <% if @cols['allow_backorder' ] == true %>{ name: 'allow_backorder' , nice_name: 'Allow backorder' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.allow_backorder ) %>, width: 50, fixed_placeholder: false } <% end %>
118
122
  ]
119
123
  });
120
- <% end %>
124
+ <% end %>
125
+
126
+ $('#variants_tbody').sortable({
127
+ handle: '.sort_handle',
128
+ update: function(event, ui) {
129
+ $.ajax({
130
+ url: '/admin/products/<%= p.id %>/variants/sort-order',
131
+ type: 'put',
132
+ data: $('#variants_tbody').sortable('serialize', { key: 'variant_ids[]' }),
133
+ success: function(resp) {}
134
+ });
135
+ }
136
+ });
121
137
  });
122
138
 
123
139
  var modal = false;
data/config/routes.rb CHANGED
@@ -66,7 +66,7 @@ CabooseStore::Engine.routes.draw do
66
66
 
67
67
  get "/admin/products" => "products#admin_index"
68
68
  get '/admin/products/sort' => 'products#admin_sort'
69
- put '/admin/products/update-sort-order' => 'products#admin_update_sort_order'
69
+ put '/admin/products/update-sort-order' => 'products#admin_update_sort_order'
70
70
  put "/admin/products/update-vendor-status/:id" => "products#admin_update_vendor_status"
71
71
  get "/admin/products/new" => "products#admin_new"
72
72
  get "/admin/products/status-options" => "products#admin_status_options"
@@ -78,7 +78,11 @@ CabooseStore::Engine.routes.draw do
78
78
  get "/admin/products/:id/variants" => "products#admin_edit_variants"
79
79
  get "/admin/products/:id/variants/json" => "products#admin_variants_json"
80
80
  get "/admin/products/:id/variant-cols" => "products#admin_edit_variant_columns"
81
- put "/admin/products/:id/variant-cols" => "products#admin_update_variant_columns"
81
+ put "/admin/products/:id/variant-cols" => "products#admin_update_variant_columns"
82
+ get "/admin/products/:id/variants/sort-order" => "products#admin_edit_variant_sort_order"
83
+ put '/admin/products/:id/variants/option1-sort-order' => 'products#admin_update_variant_option1_sort_order'
84
+ put '/admin/products/:id/variants/option2-sort-order' => 'products#admin_update_variant_option2_sort_order'
85
+ put '/admin/products/:id/variants/option3-sort-order' => 'products#admin_update_variant_option3_sort_order'
82
86
  get "/admin/products/:id/images" => "products#admin_edit_images"
83
87
  post "/admin/products/:id/images" => "products#admin_add_image"
84
88
  get "/admin/products/:id/collections" => "products#admin_edit_collections"
@@ -1,3 +1,3 @@
1
1
  module CabooseStore
2
- VERSION = '0.0.21'
2
+ VERSION = '0.0.22'
3
3
  end
@@ -12,4 +12,16 @@ namespace :caboose_store do
12
12
 
13
13
  desc "Loads data into caboose tables"
14
14
  task :load_data => :environment do CabooseStore::Schema.load_data end
15
+
16
+ desc "Fix variant sort order"
17
+ task :set_variant_sort_order => :environment do
18
+ CabooseStore::Product.all.each do |p|
19
+ puts "Setting sort order for product #{p.id}..."
20
+ i = 1
21
+ CabooseStore::Variant.where(:product_id => p.id).reorder(:id).all.each do |v|
22
+ v.update_attribute('sort_order', i)
23
+ i = i + 1
24
+ end
25
+ end
26
+ end
15
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.21
4
+ version: 0.0.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
@@ -200,6 +200,7 @@ files:
200
200
  - app/views/caboose_store/products/admin_edit_options.html.erb
201
201
  - app/views/caboose_store/products/admin_edit_seo.html.erb
202
202
  - app/views/caboose_store/products/admin_edit_variant_columns.html.erb
203
+ - app/views/caboose_store/products/admin_edit_variant_sort_order.html.erb
203
204
  - app/views/caboose_store/products/admin_edit_variants.html.erb
204
205
  - app/views/caboose_store/products/admin_edit_variants_single.html.erb
205
206
  - app/views/caboose_store/products/admin_group_variants.html.erb