caboose-cms 0.9.23 → 0.9.24

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59f9739998eaf8c55b5dc7dadf1415f48b204749
4
- data.tar.gz: 32ed06ef7e5f79a0011a3783bd8be9759fc6f79f
3
+ metadata.gz: 239f83b3bb1cc285a84046bf35ceb6bc8fefc781
4
+ data.tar.gz: f298f72d54aff977624e70e0bd86831732ca3877
5
5
  SHA512:
6
- metadata.gz: 39e4656764424870785429abe0c26cf7fce8c8d38d4992e0a0785d77bd8cbf013e15c7dc4df36b29af5a2678037a98a80191eef6622004ae4e3894b17fb114c7
7
- data.tar.gz: 82cce5d558e8894faa429a9a0104b8d2f04000c090545d78c4455770eac656885ac4f3e3dfd9b73e20310977ae24c7614a9f85b2d8c195b18d4fd9f2546e7e62
6
+ metadata.gz: dd27c86158c9aa067c4d7633740f91f71a8c782c1cc83ddf02dc271b01f207860a67185e0f548deb8d9b7de835b6721eb92e0cf99cbb4d10a965723957a2a9db
7
+ data.tar.gz: 95dc6d8d51f02e062c6b9f487f110057d7ef71bcfaa7c5f6ed6f3864687a5de9f429f3e092b33026519d9f0158ad372542cd74bd9339f0a75858d74801046f0e
@@ -104,10 +104,10 @@ Caboose.Store.Modules.Cart = (function() {
104
104
  self.render_item_count(response.item_count);
105
105
  if (self.$add_to_cart.length) self.$add_to_cart.trigger('added');
106
106
 
107
- if (!self.$add_to_cart.find('.message').length) {
107
+ if (!self.$add_to_cart.find('.message').length) {
108
108
  self.$add_to_cart
109
109
  .append($('<div/>').hide().addClass('message')
110
- .append($('<p/>').text('Successfully added to cart'))
110
+ .append($('<p/>').text(response.quantity_message ? response.quantity_message : 'Successfully added to cart'))
111
111
  .append($('<p/>')
112
112
  .append($('<a/>').attr('href', '/cart').html('View cart')).append(' | ')
113
113
  .append($('<a/>').attr('href', '/checkout').html('Continue to checkout'))
@@ -120,8 +120,16 @@ Caboose.Store.Modules.Cart = (function() {
120
120
  // self.$add_to_cart.find('.message').fadeOut(function() { $(this).remove() });
121
121
  //}, 5000);
122
122
  }
123
- } else {
124
- alert(response.errors[0]);
123
+ } else {
124
+ if (!self.$add_to_cart.find('.message').length) {
125
+ self.$add_to_cart
126
+ .append($('<div/>').hide().addClass('note error')
127
+ .append($('<p/>').text(resp.error ? resp.error : (resp.errors ? resp.errors[0] : "Error adding to cart")))
128
+ .append($('<p/>').append($('<a/>').attr('href', '/cart').html('View cart')))
129
+ );
130
+ self.$add_to_cart.find('.message').fadeIn();
131
+ }
132
+ //alert(response.errors[0]);
125
133
  }
126
134
  }
127
135
  });
@@ -927,7 +927,29 @@ IndexTable.prototype = {
927
927
  async: false
928
928
  });
929
929
  }
930
- });
930
+ });
931
+
932
+ //var arr = [];
933
+ //$.each(this.new_model_fields, function(i, f) {
934
+ // if (f.options_url && !f.options)
935
+ // {
936
+ // console.log("Testing1");
937
+ // arr.push($.ajax({
938
+ // url: f.options_url,
939
+ // type: 'get'
940
+ // }));
941
+ // }
942
+ //});
943
+ //if (arr.length > 0)
944
+ //{
945
+ // console.log("Testing");
946
+ // that.show_message($('<p/>').addClass('loading').html("Getting options..."));
947
+ // $.when.apply(null, arr).done(function(resp) {
948
+ // console.log(resp);
949
+ // //that.new_form();
950
+ // });
951
+ // return;
952
+ //}
931
953
 
932
954
  var form = $('<form/>').attr('id', 'new_form')
933
955
  .append($('<input/>').attr('type', 'hidden').attr('name', 'authenticity_token').val(that.form_authenticity_token));
@@ -38,16 +38,46 @@ module Caboose
38
38
  end
39
39
 
40
40
  # @route POST /cart
41
- def add
41
+ def add
42
+ resp = StdClass.new
43
+
42
44
  v = Variant.find(params[:variant_id])
43
45
  qty = params[:quantity] ? params[:quantity].to_i : 1
46
+ if @invoice.line_items.exists?(:variant_id => v.id)
47
+ li = @invoice.line_items.find_by_variant_id(v.id)
48
+ qty = li.quantity + qty
49
+ end
50
+
51
+ # Check the variant limits
52
+ vl = VariantLimit.where(:variant_id => v.id, :user_id => @logged_in_user.id).first
53
+ vl = VariantLimit.where(:variant_id => v.id, :user_id => User.logged_out_user_id(@site.id)).first if vl.nil?
54
+ if vl && vl.no_purchases_allowed
55
+ resp.error = "You don't have permission to purchase this item."
56
+ resp.error << "You may have different purchase permissions if you <a href='/login'>login</a>." if !logged_in?
57
+ render :json => resp
58
+ return
59
+ end
60
+ qty2 = logged_in? && vl && vl.current_value ? qty + vl.current_value : qty
61
+ if vl && !vl.qty_within_range(qty2)
62
+ resp.quantity_message = vl.quantity_message
63
+ if !logged_in?
64
+ resp.quantity_message << "You may have different purchase permissions if you <a href='/login'>login</a>." if !logged_in?
65
+ if vl.qty_too_low(qty) then qty = vl.min_quantity
66
+ elsif vl.qty_too_high(qty) then qty = vl.max_quantity
67
+ end
68
+ else
69
+ if vl.qty_too_low(qty)
70
+ qty = vl.min_quantity
71
+ resp.quantity_message = "You must purchase at least #{vl.min_quantity} of this item, your cart has been updated."
72
+ elsif vl.qty_too_high(qty2)
73
+ qty = vl.max_quantity - vl.current_value
74
+ resp.quantity_message = "You can only purchase #{vl.max_quantity} of this item, your cart has been updated."
75
+ end
76
+ end
77
+ end
44
78
 
45
- resp = StdClass.new
46
-
47
79
  if @invoice.line_items.exists?(:variant_id => v.id)
48
80
  li = @invoice.line_items.find_by_variant_id(v.id)
49
- li.quantity += qty
50
- li.subtotal = li.unit_price * li.quantity
51
81
  InvoiceLog.create(
52
82
  :invoice_id => @invoice.id,
53
83
  :line_item_id => li.id,
@@ -55,11 +85,14 @@ module Caboose
55
85
  :date_logged => DateTime.now.utc,
56
86
  :invoice_action => InvoiceLog::ACTION_LINE_ITEM_UPDATED,
57
87
  :field => 'quantity',
58
- :old_value => li.quantity - qty,
59
- :new_value => li.quantity
88
+ :old_value => li.quantity,
89
+ :new_value => qty
60
90
  )
91
+ li.quantity = qty
92
+ li.subtotal = li.unit_price * qty
93
+ li.save
61
94
  else
62
- unit_price = v.clearance && v.clearance_price ? v.clearance_price : (v.on_sale? ? v.sale_price : v.price)
95
+ unit_price = v.clearance && v.clearance_price ? v.clearance_price : (v.on_sale? ? v.sale_price : v.price)
63
96
  li = LineItem.create(
64
97
  :invoice_id => @invoice.id,
65
98
  :variant_id => v.id,
@@ -105,7 +138,35 @@ module Caboose
105
138
  end
106
139
  case name
107
140
  when 'quantity' then
108
- if value.to_i != li.quantity
141
+
142
+ value = value.to_i
143
+ qty = value
144
+
145
+ # Check the variant limits
146
+ vl = VariantLimit.where(:variant_id => li.variant_id, :user_id => @logged_in_user.id).first
147
+ vl = VariantLimit.where(:variant_id => li.variant_id, :user_id => User.logged_out_user_id(@site.id)).first if vl.nil?
148
+ if vl && vl.no_purchases_allowed
149
+ resp.error = "You don't have permission to purchase this item."
150
+ resp.error << "You may have different purchase permissions if you <a href='/login'>login</a>." if !logged_in?
151
+ render :json => resp
152
+ return
153
+ end
154
+ qty2 = logged_in? && vl && vl.current_value ? qty + vl.current_value : qty
155
+ if vl && !vl.qty_within_range(qty2)
156
+ resp.quantity_message = vl.quantity_message
157
+ if !logged_in?
158
+ resp.quantity_message << "You may have different purchase permissions if you <a href='/login'>login</a>." if !logged_in?
159
+ if vl.qty_too_low(qty) then qty = vl.min_quantity
160
+ elsif vl.qty_too_high(qty) then qty = vl.max_quantity
161
+ end
162
+ else
163
+ if vl.qty_too_low(qty) then qty = (qty == 0 ? 0 : vl.min_quantity)
164
+ elsif vl.qty_too_high(qty2) then qty = vl.max_quantity - vl.current_value
165
+ end
166
+ end
167
+ end
168
+
169
+ if qty != li.quantity
109
170
  op = li.invoice_package
110
171
  if op
111
172
  op.shipping_method_id = nil
@@ -118,7 +179,7 @@ module Caboose
118
179
  li.invoice.calculate
119
180
  end
120
181
  end
121
- li.quantity = value.to_i
182
+ li.quantity = qty
122
183
  if li.quantity == 0
123
184
  li.destroy
124
185
  InvoiceLog.create(
@@ -211,9 +211,13 @@ module Caboose
211
211
  # Make sure all the variants still exist
212
212
  @invoice.line_items.each do |li|
213
213
  v = Variant.where(:id => li.variant_id).first
214
+ vl = VariantLimit.where(:variant_id => v.id, :user_id => @invoice.customer_id).first
214
215
  if v.nil? || v.status == 'Deleted'
215
216
  render :json => { :error => 'One or more of the products you are purchasing are no longer available.' }
216
217
  return
218
+ elsif !vl.qty_within_range( vl.current_value + li.quantity )
219
+ render :json => { :error => 'You have exceeded the limit you are allowed to purchase.' }
220
+ return
217
221
  end
218
222
  end
219
223
 
@@ -262,6 +266,15 @@ module Caboose
262
266
 
263
267
  @invoice.status = Invoice::STATUS_PENDING
264
268
  @invoice.invoice_number = @site.store_config.next_invoice_number
269
+
270
+ # Update variant limits to reflect this purchase
271
+ @invoice.line_items.each do |li|
272
+ vl = VariantLimit.where(:user_id => @invoice.customer_id, :variant_id => li.variant_id).first
273
+ if vl
274
+ vl.current_value += li.quantity
275
+ vl.save
276
+ end
277
+ end
265
278
 
266
279
  # Send out emails
267
280
  begin
@@ -71,7 +71,7 @@ module Caboose
71
71
 
72
72
  elsif params[:id].to_i > 0 && Product.exists?(params[:id])
73
73
  @product = Product.find(params[:id])
74
- render 'product/not_available' and return if @product.status == 'Inactive'
74
+ render 'product/not_available' and return if @product.status == 'Inactive' || @product.site_id != @site.id
75
75
 
76
76
  @category = @product.categories.first
77
77
  @review = Review.new
@@ -0,0 +1,95 @@
1
+ module Caboose
2
+ class VariantLimitsController < ApplicationController
3
+ layout 'caboose/admin'
4
+
5
+ # @route GET /admin/variant-limits/json
6
+ def admin_json
7
+ render :json => false and return if !user_is_allowed_to 'view', 'variantlimits'
8
+ pager = Caboose::Pager.new(params, {
9
+ 'variant_id' => '',
10
+ 'user_id' => params[:user_id]
11
+ },
12
+ {
13
+ 'model' => 'Caboose::VariantLimit',
14
+ 'sort' => 'variant_id',
15
+ 'desc' => 'false',
16
+ 'base_url' => '/admin/variant-limits',
17
+ 'items_per_page' => 100
18
+ })
19
+ render :json => {
20
+ :pager => pager,
21
+ :models => pager.items.as_json(:include => [:variant])
22
+ }
23
+ end
24
+
25
+ # @route GET /admin/variant-limits/:id/json
26
+ def admin_json_single
27
+ render :json => false and return if !user_is_allowed_to 'edit', 'variantlimits'
28
+ variantlimit = VariantLimit.find(params[:id])
29
+ render :json => variantlimit.as_json(:include => [:variant])
30
+ end
31
+
32
+ # @route POST /admin/variant-limits
33
+ def admin_add
34
+ return unless (user_is_allowed_to 'edit', 'variantlimits')
35
+ resp = Caboose::StdClass.new
36
+ if VariantLimit.where(:user_id => params[:user_id], :variant_id => params[:variant_id]).exists?
37
+ resp.error = 'That variant is already added to this user.'
38
+ else
39
+ c = VariantLimit.new
40
+ c.user_id = params[:user_id]
41
+ c.variant_id = params[:variant_id]
42
+ c.min_quantity = 0
43
+ c.max_quantity = 0
44
+ c.current_value = 0
45
+ c.save
46
+ resp.success = true
47
+ end
48
+ render :json => resp
49
+ end
50
+
51
+ # @route PUT /admin/variant-limits/:id
52
+ def admin_update
53
+ return unless (user_is_allowed_to 'edit', 'variantlimits')
54
+ resp = Caboose::StdClass.new
55
+ variantlimit = VariantLimit.find(params[:id])
56
+ user = logged_in_user
57
+ if user
58
+
59
+ params.each do |k,v|
60
+ case k
61
+ when "user_id" then variantlimit.user_id = v
62
+ when "variant_id" then variantlimit.variant_id = v
63
+ when "min_quantity" then variantlimit.min_quantity = v
64
+ when "max_quantity" then variantlimit.max_quantity = v
65
+ when "current_value" then variantlimit.current_value = v
66
+ end
67
+ end
68
+
69
+ resp.success = variantlimit.save
70
+ end
71
+ render :json => resp
72
+ end
73
+
74
+ # @route GET /admin/users/:user_id/variant-limits
75
+ def admin_edit
76
+ return unless (user_is_allowed_to 'edit', 'users')
77
+ @edituser = Caboose::User.find(params[:user_id])
78
+ end
79
+
80
+ # @route_priority 1
81
+ # @route GET /admin/variant-limits/variant-options
82
+ def admin_variant_options
83
+ return unless user_is_allowed('edit', 'users')
84
+ options = [{ 'value' => nil, 'text' => 'Select a Variant' }]
85
+ products = Caboose::Product.where(:site_id => @site.id).all
86
+ products.each do |p|
87
+ p.variants.each do |v|
88
+ options << { 'value' => v.id, 'text' => v.full_title }
89
+ end
90
+ end
91
+ render :json => options
92
+ end
93
+
94
+ end
95
+ end
@@ -95,6 +95,7 @@ module Caboose
95
95
 
96
96
  # @route_priority 1
97
97
  # @route GET /admin/store/vendors/options
98
+ # @route GET /admin/vendors/options
98
99
  def options
99
100
  render :json => Vendor.where(:site_id => @site.id).reorder(:name).all.collect{ |v| { :value => v.id, :text => v.name }}
100
101
  end
@@ -971,6 +971,13 @@ class Caboose::Schema < Caboose::Utilities::Schema
971
971
  [ :downloadable , :boolean , { :default => false }],
972
972
  [ :is_bundle , :boolean , { :default => false }]
973
973
  ],
974
+ Caboose::VariantLimit => [
975
+ [ :variant_id , :integer ],
976
+ [ :user_id , :integer ],
977
+ [ :min_quantity , :integer ],
978
+ [ :max_quantity , :integer ],
979
+ [ :current_value , :integer ]
980
+ ],
974
981
  Caboose::Vendor => [
975
982
  [ :site_id , :integer ],
976
983
  [ :alternate_id , :string ],
@@ -0,0 +1,50 @@
1
+ module Caboose
2
+ class VariantLimit < ActiveRecord::Base
3
+ self.table_name = 'store_variant_limits'
4
+
5
+ belongs_to :variant
6
+ belongs_to :user
7
+ attr_accessible :id ,
8
+ :variant_id ,
9
+ :user_id ,
10
+ :min_quantity ,
11
+ :max_quantity ,
12
+ :current_value
13
+
14
+ def quantity_message
15
+ if self.min_quantity == 0 && self.max_quantity == 0
16
+ return "You are not allowed to purchase this item."
17
+ end
18
+ if self.max_quantity
19
+ if self.min_quantity && self.min_quantity > 0
20
+ return "You are allowed to purchase between #{self.min_quantity} and #{self.max_quantity} of this item."
21
+ else
22
+ return "You are allowed to purchase up to #{self.max_quantity} of this item."
23
+ end
24
+ end
25
+ if self.min_quantity && self.min_quantity > 0
26
+ return "You must purchase at least #{self.min_quantity} of this item."
27
+ end
28
+ return nil
29
+ end
30
+
31
+ def no_purchases_allowed
32
+ return self.min_quantity == 0 && self.max_quantity == 0
33
+ end
34
+
35
+ def qty_within_range(qty)
36
+ return false if self.min_quantity && qty < self.min_quantity
37
+ return false if self.max_quantity && qty > self.max_quantity
38
+ return true
39
+ end
40
+
41
+ def qty_too_low(qty)
42
+ return self.min_quantity && qty < self.min_quantity
43
+ end
44
+
45
+ def qty_too_high(qty)
46
+ return self.max_quantity && qty > self.max_quantity
47
+ end
48
+
49
+ end
50
+ end
@@ -85,15 +85,15 @@ tr.invoice_totals_header td { border: 0; }
85
85
  #invoice_1_instore_pickup_background { border: none; }
86
86
  #invoice_1_instore_pickup { top: 0; width: 30px; height: 30px; }
87
87
 
88
- .mb_container.first_name { display: block; width: 50% !important; float: left; } .mb_container.first_name input { width: 100% !important; border-color: #b9b9b9; border-right: none; border-bottom: none; }
89
- .mb_container.last_name { display: block; width: 50% !important; } .mb_container.last_name input { width: 100% !important; border-color: #b9b9b9; border-bottom: none; }
90
- .mb_container.company { display: block; width: 100% !important; clear:left; } .mb_container.company input { width: 100% !important; border-color: #b9b9b9; border-bottom: none; }
91
- .mb_container.address1 { display: block; width: 100% !important; } .mb_container.address1 input { width: 100% !important; border-color: #b9b9b9; border-bottom: none; }
92
- .mb_container.address2 { display: block; width: 100% !important; } .mb_container.address2 input { width: 100% !important; border-color: #b9b9b9; border-bottom: none; }
93
- .mb_container.city { display: block; width: 50% !important; float: left; } .mb_container.city input { width: 100% !important; border-color: #b9b9b9; border-right: none; }
94
- .mb_container.state { display: block; width: 25% !important; float: left; } .mb_container.state select { width: 100% !important; border-color: #b9b9b9; border-right: none; border-left: 1px; border-bottom: 1px; border-top: 1px; height: 36px !important; font-size: 1em; }
95
- .mb_container.state input { width: 100% !important; border-color: #b9b9b9; border-right: none; }
96
- .mb_container.zip { display: block; width: 25% !important; } .mb_container.zip input { width: 100% !important; border-color: #b9b9b9; }
88
+ .mb_container.first_name { display: block; width: 49% !important; float: left; margin-right: 2%; } .mb_container.first_name input { width: 100% !important; border-color: #b9b9b9; margin-bottom: 10px; }
89
+ .mb_container.last_name { display: block; width: 49% !important; } .mb_container.last_name input { width: 100% !important; border-color: #b9b9b9; }
90
+ .mb_container.company { display: block; width: 100% !important; clear:left; margin-bottom: 10px; } .mb_container.company input { width: 100% !important; border-color: #b9b9b9; }
91
+ .mb_container.address1 { display: block; width: 100% !important; margin-bottom: 10px; } .mb_container.address1 input { width: 100% !important; border-color: #b9b9b9; }
92
+ .mb_container.address2 { display: block; width: 100% !important; margin-bottom: 10px; } .mb_container.address2 input { width: 100% !important; border-color: #b9b9b9; }
93
+ .mb_container.city { display: block; width: 48% !important; float: left; margin-right: 2%; margin-bottom: 10px; } .mb_container.city input { width: 100% !important; border-color: #b9b9b9; }
94
+ .mb_container.state { display: block; width: 23% !important; float: left; margin-right: 2%; margin-bottom: 10px; } .mb_container.state select { width: 100% !important; border-color: #b9b9b9; border-left: 1px; border-bottom: 1px; border-top: 1px; height: 36px !important; font-size: 1em; }
95
+ .mb_container.state input { width: 100% !important; border-color: #b9b9b9; }
96
+ .mb_container.zip { display: block; width: 25% !important; } .mb_container.zip input { width: 100% !important; border-color: #b9b9b9; }
97
97
 
98
98
  #gift_cards_container p { float: right; margin-bottom: 0 !important; }
99
99
  #gift_cards_container input[type="text"] { margin-top: 0px !important; margin-right: 10px !important; display: block; float: right; }
@@ -1,7 +1,10 @@
1
+
2
+ <div id="checkout-thanks-wrapper" style="max-width:1000px;margin:0 auto;padding:20px 2%;">
1
3
  <h3>All Finished!</h3>
2
4
  <p>Thank you for your order! Your order has been submitted.</p>
3
5
  <p>Please allow up to 48 hours for your order to be processed. Orders are processed during normal business hours Monday through Friday.</p>
4
6
 
7
+
5
8
  <% if @last_invoice.has_downloadable_items? %>
6
9
  <% sc = Caboose::StoreConfig.where(:site_id => @site.id).last %>
7
10
  <% instr = (sc && !sc.download_instructions.blank?) ? sc.download_instructions : "Your order contained downloadable items. Download your items with the links below:" %>
@@ -15,7 +18,10 @@
15
18
  </ul>
16
19
  <% end %>
17
20
 
18
- <p><a href="/">Continue Shopping</a></p>
21
+ <br />
22
+ <p><a href="/products" class="btn">Continue Shopping</a></p>
23
+
24
+ </div>
19
25
 
20
26
 
21
27
  <%= content_for :caboose_css do %>
@@ -3,7 +3,7 @@
3
3
  <!-- <h1>Thank you for your invoice!</h1> -->
4
4
  <h1>New Order Received</h1>
5
5
 
6
- <h4><a href="<%= @invoice.site.store_config.authnet_relay_domain %>/admin/invoices/<%= @invoice.id %>" target="_blank" title="View Order">View Order</a></h4>
6
+ <h4><a href="http://<%= @invoice.site.primary_domain.domain %>/admin/invoices/<%= @invoice.id %>" target="_blank" title="View Order">View Order</a></h4>
7
7
 
8
8
  <h2>Order Details</h2>
9
9
 
@@ -2,10 +2,10 @@
2
2
  <h1>Products</h1>
3
3
 
4
4
  <p style="margin: 12px 0">
5
- <a href="/admin/vendors/new">New Vendor</a><span style="margin: 0 3px">|</span>
5
+ <a href="/admin/store/vendors/new">New Vendor</a><span style="margin: 0 3px">|</span>
6
6
  <a href="/admin/products/sort">Sort Products</a><span style="margin: 0 3px">|</span>
7
- <a href="/admin/products/alternate-ids">Alternate IDs</a><span style="margin: 0 3px">|</span>
8
- <a href='#'>Search Form</a>
7
+ <a href="/admin/products/alternate-ids">Alternate IDs</a><!-- <span style="margin: 0 3px">|</span> -->
8
+ <!-- <a href='#'>Search Form</a> -->
9
9
  </p>
10
10
 
11
11
  <form action="/admin/products" method="get" id="search_form" style="margin: 0 0 12px">
@@ -13,11 +13,16 @@ tabs = {
13
13
  'Login Logs' => "/admin/login-logs?user_id=#{@edituser.id}",
14
14
  'Password' => "/admin/users/#{@edituser.id}/password",
15
15
  'Roles' => "/admin/users/#{@edituser.id}/roles",
16
- 'Subscriptions' => "/admin/users/#{@edituser.id}/subscriptions",
17
16
  'Delete' => "/admin/users/#{@edituser.id}/delete"
18
17
  }
19
18
  if @site.use_store
20
19
  arr = tabs.to_a.insert(1, ['Payment Method', "/admin/users/#{@edituser.id}/payment-method"])
20
+ tabs = Hash[arr]
21
+ arr = tabs.to_a.insert(5, ['Variant Limits', "/admin/users/#{@edituser.id}/variant-limits#user_id=#{@edituser.id}"])
22
+ tabs = Hash[arr]
23
+ end
24
+ if Caboose::Subscription.where(:site_id => @site.id).exists?
25
+ arr = tabs.to_a.insert(6, ['Subscriptions', "/admin/users/#{@edituser.id}/subscriptions"])
21
26
  tabs = Hash[arr]
22
27
  end
23
28
  tabs = Caboose.plugin_hook('admin_user_tabs', tabs, @edituser, @site)
@@ -0,0 +1,36 @@
1
+ <%= render :partial => 'caboose/users/admin_header' %>
2
+
3
+ <div id='variant-limits'></div>
4
+
5
+ <%= render :partial => 'caboose/users/admin_footer' %>
6
+
7
+ <% content_for :caboose_js do %>
8
+ <%= javascript_include_tag 'caboose/model/all' %>
9
+ <script type='text/javascript'>
10
+
11
+ $(document).ready(function() {
12
+ var that = this;
13
+ var table = new IndexTable({
14
+ form_authenticity_token: '<%= form_authenticity_token %>',
15
+ container: 'variant-limits',
16
+ base_url: '/admin/variant-limits',
17
+ allow_bulk_edit: false,
18
+ allow_bulk_delete: false,
19
+ allow_duplicate: false,
20
+ allow_advanced_edit: false,
21
+ allow_import: false,
22
+ fields: [
23
+ { show: true , editable: true, bulk_edit: false, name: 'variant_id' , nice_name: 'Product Variant' , sort: 'variant_id' , type: 'select' , value: function(r) { return r.variant_id }, text: function(r) { return (r.variant ? (r.variant.alternate_id ? r.variant.alternate_id : r.variant.id) : '') }, width: 150, options_url: '/admin/variant-limits/variant-options' },
24
+ { show: true , editable: true, bulk_edit: false, name: 'min_quantity' , nice_name: 'Min Qty' , sort: 'min_quantity' , type: 'text' , value: function(r) { return r.min_quantity }, width: 150 },
25
+ { show: true , editable: true, bulk_edit: false, name: 'max_quantity' , nice_name: 'Max Qty' , sort: 'max_quantity' , type: 'text' , value: function(r) { return (r.max_quantity == null || r.max_quantity == '' ? 0 : r.max_quantity) }, width: 150 },
26
+ { show: true , editable: false, bulk_edit: false, name: 'current_value' , nice_name: 'Purchased' , sort: 'current_value' , type: 'text' , value: function(r) { return (r.current_value ) }, width: 150 }
27
+ ],
28
+ new_model_text: 'New Variant Limit',
29
+ new_model_fields: [
30
+ { name: 'variant_id', nice_name: 'Product', type: 'select', width: 400, options_url: '/admin/variant-limits/variant-options' },
31
+ { name: 'user_id', nice_name: 'User', type: 'hidden', width: 400, value: <%= @edituser.id %> }
32
+ ]
33
+ });
34
+ });
35
+ </script>
36
+ <% end %>
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.9.23'
2
+ VERSION = '0.9.24'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.23
4
+ version: 0.9.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
@@ -828,6 +828,7 @@ files:
828
828
  - app/controllers/caboose/subscriptions_controller.rb
829
829
  - app/controllers/caboose/users_controller.rb
830
830
  - app/controllers/caboose/variant_children_controller.rb
831
+ - app/controllers/caboose/variant_limits_controller.rb
831
832
  - app/controllers/caboose/variants_controller.rb
832
833
  - app/controllers/caboose/vendors_controller.rb
833
834
  - app/helpers/caboose/application_helper.rb
@@ -953,6 +954,7 @@ files:
953
954
  - app/models/caboose/variant.rb
954
955
  - app/models/caboose/variant_child.rb
955
956
  - app/models/caboose/variant_default.rb
957
+ - app/models/caboose/variant_limit.rb
956
958
  - app/models/caboose/vendor.rb
957
959
  - app/models/caboose/wish_list.rb
958
960
  - app/models/caboose/wish_list_line_item.rb
@@ -1237,6 +1239,7 @@ files:
1237
1239
  - app/views/caboose/users/admin_index.html.erb
1238
1240
  - app/views/caboose/users/admin_new.html.erb
1239
1241
  - app/views/caboose/users/admin_update_pic.html.erb
1242
+ - app/views/caboose/variant_limits/admin_edit.html.erb
1240
1243
  - app/views/caboose/variants/admin_edit.html.erb
1241
1244
  - app/views/caboose/variants/admin_edit_option1_media.html.erb
1242
1245
  - app/views/caboose/variants/admin_edit_option2_media.html.erb