caboose-cms 0.9.54 → 0.9.55
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 +4 -4
- data/app/assets/javascripts/caboose/admin_edit_invoice.js +3 -2
- data/app/controllers/caboose/categories_controller.rb +14 -0
- data/app/controllers/caboose/products_controller.rb +14 -0
- data/app/views/caboose/categories/admin_edit.html.erb +52 -1
- data/app/views/caboose/products/admin_index.html.erb +2 -1
- data/lib/caboose/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dc18c2e49fc407aa002965dc15a63e6b7864c11
|
4
|
+
data.tar.gz: eef019aa5e4bd43cd13796d400db2d61cc3a8859
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d97e70be118cf75c6c4c4fa2dea38f36f3f90e2742fba4e65eb74f43dc8b12bf8ca1f23fb4a6dff08eac0d1581f5165fd236f23833d4ff5ff0d247593f218af
|
7
|
+
data.tar.gz: 91c99bba2178d298a31c68317793b794cd1ddcbda9420c919eaff1bd81c8550db4ae0db95c12fcf9c31587c94e5dd3f18c7f13e7b7341bf878a56924da45484f
|
@@ -119,7 +119,7 @@ InvoiceController.prototype = {
|
|
119
119
|
{ name: 'tax' , nice_name: 'Tax' , type: 'text' , value: curr(that.invoice.tax) , width: 100, fixed_placeholder: false, align: 'right' , after_update: function() { that.refresh_invoice(); }},
|
120
120
|
{ name: 'handling' , nice_name: 'Handling' , type: 'text' , value: curr(that.invoice.handling) , width: 100, fixed_placeholder: false, align: 'right' , after_update: function() { that.refresh_invoice(); }},
|
121
121
|
{ name: 'custom_discount' , nice_name: 'Discount' , type: 'text' , value: curr(that.invoice.custom_discount) , width: 100, fixed_placeholder: false, align: 'right' , after_update: function() { that.refresh_invoice(); }},
|
122
|
-
{ name: 'notes' , nice_name: 'Notes (not public)' , type: 'textarea' , value: that.invoice.notes , width:
|
122
|
+
{ name: 'notes' , nice_name: 'Notes (not public)' , type: 'textarea' , value: that.invoice.notes , width: 500, fixed_placeholder: false, align: 'left' , after_update: function() { that.refresh_invoice(); }, height: 100 },
|
123
123
|
{ name: 'customer_notes' , nice_name: 'Customer Notes' , type: 'textarea' , value: that.invoice.notes , width: 100, fixed_placeholder: false, align: 'left' , after_update: function() { that.refresh_invoice(); }, height: 50 }
|
124
124
|
]
|
125
125
|
});
|
@@ -316,7 +316,8 @@ InvoiceController.prototype = {
|
|
316
316
|
.append($('<div/>').attr('id', 'invoice_' + that.invoice.id + '_financial_status'))
|
317
317
|
.append($('<div/>').attr('id', 'transactions').attr('align', 'center').append(transactions))
|
318
318
|
);
|
319
|
-
table.append(tr);
|
319
|
+
table.append(tr);
|
320
|
+
table.append($('<tr/>').append($('<td/>').attr('align', 'left').html('Internal Notes')).append($('<td/>').attr('align','right').attr('colspan', '2').append($('<div/>').attr('id', 'invoice_' + that.invoice.id + '_notes'))));
|
320
321
|
return table;
|
321
322
|
},
|
322
323
|
|
@@ -166,6 +166,20 @@ module Caboose
|
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
169
|
+
# @route PUT /admin/categories/:category_id/products/:product_id/add
|
170
|
+
def admin_add_product
|
171
|
+
resp = Caboose::StdClass.new
|
172
|
+
resp.success = false
|
173
|
+
cat = Category.find(params[:category_id])
|
174
|
+
prod = Product.find(params[:product_id])
|
175
|
+
if cat && prod && cat.site_id == prod.site_id
|
176
|
+
cm = CategoryMembership.where(:product_id => prod.id, :category_id => cat.id).first
|
177
|
+
cm = CategoryMembership.create(:product_id => prod.id, :category_id => cat.id) if cm.nil?
|
178
|
+
resp.success = true
|
179
|
+
end
|
180
|
+
render :json => resp
|
181
|
+
end
|
182
|
+
|
169
183
|
end
|
170
184
|
end
|
171
185
|
|
@@ -275,6 +275,7 @@ module Caboose
|
|
275
275
|
'vendor_name' => '',
|
276
276
|
'search_like' => '',
|
277
277
|
'category_id' => '',
|
278
|
+
'status' => 'Active',
|
278
279
|
'price' => params[:filters] && params[:filters][:missing_prices] ? 0 : ''
|
279
280
|
}, {
|
280
281
|
'model' => 'Caboose::Product',
|
@@ -637,6 +638,16 @@ module Caboose
|
|
637
638
|
def api_index
|
638
639
|
render :json => Product.where(:status => 'Active')
|
639
640
|
end
|
641
|
+
|
642
|
+
# @route GET /api/products/keyword
|
643
|
+
def api_keyword
|
644
|
+
query = params[:query]
|
645
|
+
resp = Caboose::StdClass.new({'products' => {}})
|
646
|
+
if query && !query.blank?
|
647
|
+
resp.products = Product.select('title, id').where(:site_id => @site.id).where('title ILIKE (?)',"%#{query}%").order(:title).limit(30)
|
648
|
+
end
|
649
|
+
render :json => resp
|
650
|
+
end
|
640
651
|
|
641
652
|
# @route GET /api/products/:id
|
642
653
|
def api_details
|
@@ -649,6 +660,9 @@ module Caboose
|
|
649
660
|
p = Product.where(:id => params[:id]).first
|
650
661
|
render :json => p ? p.variants : { :error => 'Invalid product ID' }
|
651
662
|
end
|
663
|
+
|
664
|
+
|
665
|
+
|
652
666
|
|
653
667
|
end
|
654
668
|
end
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<h2>Products</h2>
|
10
10
|
|
11
11
|
<% if @category.products.any? %>
|
12
|
-
<ul>
|
12
|
+
<ul id="cat-products">
|
13
13
|
<% @category.products.each do |product| %>
|
14
14
|
<li><a href="/admin/products/<%= product.id %>/general"><%= product.title %></a></li>
|
15
15
|
<% end %>
|
@@ -18,6 +18,12 @@
|
|
18
18
|
<p>This category has no associated products.</p>
|
19
19
|
<% end %>
|
20
20
|
|
21
|
+
<div class="add-form">
|
22
|
+
<h5>Add Product to This Category</h5>
|
23
|
+
<input type="text" id="product-finder" placeholder="Product name" />
|
24
|
+
<ul id="product-results"></ul>
|
25
|
+
</div>
|
26
|
+
<br /><br />
|
21
27
|
<div id="message"></div>
|
22
28
|
<p>
|
23
29
|
<input type="button" value="< Back" onclick="window.location='/admin/categories';" />
|
@@ -30,6 +36,12 @@
|
|
30
36
|
<% content_for :caboose_css do %>
|
31
37
|
<style>
|
32
38
|
.push-below { margin-bottom: 24px; }
|
39
|
+
#product-results li {
|
40
|
+
cursor: pointer;
|
41
|
+
}
|
42
|
+
#product-results li:hover {
|
43
|
+
color: blue;
|
44
|
+
}
|
33
45
|
</style>
|
34
46
|
<% end %>
|
35
47
|
|
@@ -53,6 +65,45 @@ $(document).ready(function() {
|
|
53
65
|
});
|
54
66
|
});
|
55
67
|
|
68
|
+
function add_product_to_category(product_id, title) {
|
69
|
+
$.ajax({
|
70
|
+
url: '/admin/categories/<%= @category.id %>/products/' + product_id + '/add',
|
71
|
+
type: 'put',
|
72
|
+
success: function(resp) {
|
73
|
+
$("#product-results").html("");
|
74
|
+
if ( resp && resp.success ) {
|
75
|
+
var a = $("<a />").attr('href','/admin/products' + product_id + '/general').text(title);
|
76
|
+
var li = $("<li />").append(a);
|
77
|
+
$("#cat-products").append(li);
|
78
|
+
$("#message").html("<p class='note success'>Product added to category.</p>");
|
79
|
+
}
|
80
|
+
}
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
$("#product-finder").keyup(function() {
|
85
|
+
var q = $("#product-finder").val();
|
86
|
+
var ul = $("#product-results");
|
87
|
+
ul.html("");
|
88
|
+
if ( q && q != '' ) {
|
89
|
+
$.ajax({
|
90
|
+
url: '/api/products/keyword',
|
91
|
+
data: {
|
92
|
+
query: q
|
93
|
+
},
|
94
|
+
type: 'get',
|
95
|
+
success: function(resp) {
|
96
|
+
if ( resp && resp.products && resp.products.length > 0 ) {
|
97
|
+
$.each(resp.products, function(k,v) {
|
98
|
+
var li = $("<li />").attr('onclick',"add_product_to_category(" + v.id + ",'" + v.title + "');return false;").text(v.title);
|
99
|
+
ul.append(li);
|
100
|
+
});
|
101
|
+
}
|
102
|
+
}
|
103
|
+
});
|
104
|
+
}
|
105
|
+
});
|
106
|
+
|
56
107
|
function delete_category(cat_id, confirm) {
|
57
108
|
if (!confirm) {
|
58
109
|
var p = $('<p/>').addClass('note error').css('margin-bottom', '10px')
|
@@ -4,7 +4,8 @@
|
|
4
4
|
<p style="margin: 12px 0">
|
5
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
|
7
|
+
<a href="/admin/products/alternate-ids">Alternate IDs</a><span style="margin: 0 3px">|</span>
|
8
|
+
<a href="/admin/products#status=Deleted">Deleted Products</a>
|
8
9
|
<!-- <a href='#'>Search Form</a> -->
|
9
10
|
</p>
|
10
11
|
|
data/lib/caboose/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.55
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|