caboose-cms 0.8.85 → 0.8.87
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/caboose/model/index_table.js +24 -0
- data/app/controllers/caboose/application_controller.rb +8 -0
- data/app/controllers/caboose/cart_controller.rb +53 -10
- data/app/controllers/caboose/invoice_packages_controller.rb +30 -2
- data/app/controllers/caboose/invoices_controller.rb +38 -15
- data/app/controllers/caboose/line_items_controller.rb +46 -27
- data/app/controllers/caboose/my_account_invoices_controller.rb +2 -3
- data/app/models/caboose/invoice.rb +2 -17
- data/app/models/caboose/invoice_log.rb +30 -0
- data/app/models/caboose/invoice_package.rb +3 -2
- data/app/models/caboose/line_item.rb +7 -5
- data/app/models/caboose/schema.rb +18 -0
- data/app/views/caboose/invoices/admin_edit.html.erb +5 -0
- data/app/views/caboose/invoices/admin_index.html.erb +29 -2
- data/lib/caboose/version.rb +1 -1
- data/lib/tasks/caboose.rake +5 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0af06f8f26a6c537627299c1ccd323b5ca9033d3
|
4
|
+
data.tar.gz: 47d8742aac68010be20aa7b4f8d90a28b20a6601
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebd290abf21ca8bbb0c02ebea94925725e9e4aad05659d667fd405cf177a58075f4dc6ca3224ee4c878f8038a7cde5ff9abd438d708563d8e075345cbcac1f8f
|
7
|
+
data.tar.gz: d1003bc8a568bbb802122cfe3eaeaadf6d481c19f19caf9527fe2633864d6e2e1121224e7ab95990df2ec6d84c501368d476c19f0bdca3b73a45a41e04314d51
|
@@ -1044,6 +1044,30 @@ IndexTable.prototype = {
|
|
1044
1044
|
});
|
1045
1045
|
td.append(select);
|
1046
1046
|
}
|
1047
|
+
//else if (f.type == 'checkbox_multiple')
|
1048
|
+
//{
|
1049
|
+
// var options = false;
|
1050
|
+
// if (!f.options && f.options_url)
|
1051
|
+
// {
|
1052
|
+
// $.ajax({
|
1053
|
+
// url: f.options_url,
|
1054
|
+
// type: 'get',
|
1055
|
+
// success: function(resp) { f.options = resp; },
|
1056
|
+
// async: false
|
1057
|
+
// });
|
1058
|
+
// }
|
1059
|
+
// var div = $('<div/>');
|
1060
|
+
// //if (f.empty_option_text)
|
1061
|
+
// //{
|
1062
|
+
// // div.append($('<input/>').attr('type', 'checkbox').attr('id', f.name + '_empty').val(''))
|
1063
|
+
// // .append($('<label/>').attr('for', f.name + '_empty').html(f.empty_option_text));
|
1064
|
+
// //}
|
1065
|
+
// $.each(f.options, function(j, option) {
|
1066
|
+
// div.append($('<input/>').attr('type', 'checkbox').attr('id', f.name + '_' + j).val(option.value).prop('checked', pp[f.name].indexOf(option.value) > -1))
|
1067
|
+
// .append($('<label/>').attr('for', f.name + '_' + j).html(option.text));
|
1068
|
+
// });
|
1069
|
+
// td.append(div);
|
1070
|
+
//}
|
1047
1071
|
tr.append(td);
|
1048
1072
|
tbody.append(tr);
|
1049
1073
|
});
|
@@ -83,6 +83,14 @@ module Caboose
|
|
83
83
|
@invoice.landing_page_ref = params[:ref] || nil
|
84
84
|
@invoice.payment_terms = @site.store_config.default_payment_terms
|
85
85
|
@invoice.save
|
86
|
+
|
87
|
+
InvoiceLog.create(
|
88
|
+
:invoice_id => @invoice.id,
|
89
|
+
:user_id => logged_in_user.id,
|
90
|
+
:date_logged => DateTime.now.utc,
|
91
|
+
:invoice_action => InvoiceLog::ACTION_INVOICE_CREATED
|
92
|
+
)
|
93
|
+
|
86
94
|
# Save the cart ID in the session
|
87
95
|
session[:cart_id] = @invoice.id
|
88
96
|
end
|
@@ -42,29 +42,45 @@ module Caboose
|
|
42
42
|
v = Variant.find(params[:variant_id])
|
43
43
|
qty = params[:quantity] ? params[:quantity].to_i : 1
|
44
44
|
|
45
|
+
resp = StdClass.new
|
46
|
+
|
45
47
|
if @invoice.line_items.exists?(:variant_id => v.id)
|
46
48
|
li = @invoice.line_items.find_by_variant_id(v.id)
|
47
49
|
li.quantity += qty
|
48
50
|
li.subtotal = li.unit_price * li.quantity
|
51
|
+
InvoiceLog.create(
|
52
|
+
:invoice_id => @invoice.id,
|
53
|
+
:line_item_id => li.id,
|
54
|
+
:user_id => logged_in_user.id,
|
55
|
+
:date_logged => DateTime.now.utc,
|
56
|
+
:invoice_action => InvoiceLog::ACTION_LINE_ITEM_UPDATED,
|
57
|
+
:field => 'quantity',
|
58
|
+
:old_value => li.quantity - qty,
|
59
|
+
:new_value => li.quantity
|
60
|
+
)
|
49
61
|
else
|
50
62
|
unit_price = v.clearance && v.clearance_price ? v.clearance_price : (v.on_sale? ? v.sale_price : v.price)
|
51
|
-
li = LineItem.
|
63
|
+
li = LineItem.create(
|
52
64
|
:invoice_id => @invoice.id,
|
53
65
|
:variant_id => v.id,
|
54
66
|
:quantity => qty,
|
55
67
|
:unit_price => unit_price,
|
56
68
|
:subtotal => unit_price * qty,
|
57
69
|
:status => 'pending'
|
70
|
+
)
|
71
|
+
InvoiceLog.create(
|
72
|
+
:invoice_id => @invoice.id,
|
73
|
+
:line_item_id => li.id,
|
74
|
+
:user_id => logged_in_user.id,
|
75
|
+
:date_logged => DateTime.now.utc,
|
76
|
+
:invoice_action => InvoiceLog::ACTION_LINE_ITEM_CREATED
|
58
77
|
)
|
59
78
|
end
|
60
|
-
|
61
79
|
GA.delay(:queue => 'caboose_store').event(@site.id, 'cart', 'add', "Product #{v.product.id}, Variant #{v.id}")
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
:item_count => @invoice.item_count
|
67
|
-
}
|
80
|
+
|
81
|
+
resp.success = true
|
82
|
+
resp.item_count = @invoice.item_count
|
83
|
+
render :json => resp
|
68
84
|
end
|
69
85
|
|
70
86
|
# @route PUT /cart/:line_item_id
|
@@ -73,7 +89,20 @@ module Caboose
|
|
73
89
|
li = LineItem.find(params[:line_item_id])
|
74
90
|
|
75
91
|
save = true
|
92
|
+
fields_to_log = ['quantity', 'is_gift', 'include_gift_message', 'gift_message', 'gift_wrap', 'hide_prices']
|
76
93
|
params.each do |name,value|
|
94
|
+
if fields_to_log.include?(name)
|
95
|
+
InvoiceLog.create(
|
96
|
+
:invoice_id => @invoice.id,
|
97
|
+
:line_item_id => li.id,
|
98
|
+
:user_id => logged_in_user.id,
|
99
|
+
:date_logged => DateTime.now.utc,
|
100
|
+
:invoice_action => InvoiceLog::ACTION_LINE_ITEM_UPDATED,
|
101
|
+
:field => name,
|
102
|
+
:old_value => li[name.to_sym],
|
103
|
+
:new_value => value
|
104
|
+
)
|
105
|
+
end
|
77
106
|
case name
|
78
107
|
when 'quantity' then
|
79
108
|
if value.to_i != li.quantity
|
@@ -92,6 +121,13 @@ module Caboose
|
|
92
121
|
li.quantity = value.to_i
|
93
122
|
if li.quantity == 0
|
94
123
|
li.destroy
|
124
|
+
InvoiceLog.create(
|
125
|
+
:invoice_id => @invoice.id,
|
126
|
+
:line_item_id => li.id,
|
127
|
+
:user_id => logged_in_user.id,
|
128
|
+
:date_logged => DateTime.now.utc,
|
129
|
+
:invoice_action => InvoiceLog::ACTION_LINE_ITEM_DELETED
|
130
|
+
)
|
95
131
|
else
|
96
132
|
li.subtotal = li.unit_price * li.quantity
|
97
133
|
li.save
|
@@ -112,7 +148,14 @@ module Caboose
|
|
112
148
|
|
113
149
|
# @route DELETE /cart/:line_item_id
|
114
150
|
def remove
|
115
|
-
li = LineItem.find(params[:line_item_id]).destroy
|
151
|
+
li = LineItem.find(params[:line_item_id]).destroy
|
152
|
+
InvoiceLog.create(
|
153
|
+
:invoice_id => @invoice.id,
|
154
|
+
:line_item_id => params[:line_item_id],
|
155
|
+
:user_id => logged_in_user.id,
|
156
|
+
:date_logged => DateTime.now.utc,
|
157
|
+
:invoice_action => InvoiceLog::ACTION_LINE_ITEM_DELETED
|
158
|
+
)
|
116
159
|
op = li.invoice_package
|
117
160
|
if op
|
118
161
|
op.shipping_method_id = nil
|
@@ -140,7 +183,7 @@ module Caboose
|
|
140
183
|
elsif gc.card_type == GiftCard::CARD_TYPE_AMOUNT && gc.balance <= 0 then resp.error = "That gift card has a zero balance."
|
141
184
|
elsif gc.min_invoice_total && @invoice.total < gc.min_invoice_total then resp.error = "Your invoice must be at least $#{sprintf('%.2f',gc.min_invoice_total)} to use this gift card."
|
142
185
|
elsif Discount.where(:invoice_id => @invoice.id, :gift_card_id => gc.id).exists? then resp.error = "That gift card has already been applied to this invoice."
|
143
|
-
else
|
186
|
+
else
|
144
187
|
# Create the discount and recalculate the invoice
|
145
188
|
d = Discount.create(:invoice_id => @invoice.id, :gift_card_id => gc.id, :amount => 0.0)
|
146
189
|
d.calculate_amount
|
@@ -26,7 +26,15 @@ module Caboose
|
|
26
26
|
:shipping_method_id => params[:shipping_method_id],
|
27
27
|
:status => InvoicePackage::STATUS_PENDING
|
28
28
|
)
|
29
|
-
op.save
|
29
|
+
op.save
|
30
|
+
|
31
|
+
InvoiceLog.create(
|
32
|
+
:invoice_id => params[:invoice_id],
|
33
|
+
:invoice_packag_id => op.id,
|
34
|
+
:user_id => logged_in_user.id,
|
35
|
+
:date_logged => DateTime.now.utc,
|
36
|
+
:invoice_action => InvoiceLog::ACTION_INVOICE_PACKAGE_CREATED
|
37
|
+
)
|
30
38
|
resp.new_id = op.id
|
31
39
|
resp.redirect = "/admin/invoices/#{params[:invoice_id]}/packages/#{op.id}"
|
32
40
|
|
@@ -42,8 +50,21 @@ module Caboose
|
|
42
50
|
resp = Caboose::StdClass.new
|
43
51
|
op = InvoicePackage.find(params[:id])
|
44
52
|
|
45
|
-
save = true
|
53
|
+
save = true
|
54
|
+
fields_to_log = ['invoice_id','shipping_method_id','shipping_package_id','status','tracking_number','total','package_method']
|
46
55
|
params.each do |name,value|
|
56
|
+
if fields_to_log.include?(name)
|
57
|
+
InvoiceLog.create(
|
58
|
+
:invoice_id => params[:invoice_id],
|
59
|
+
:invoice_package_id => op.id,
|
60
|
+
:user_id => logged_in_user.id,
|
61
|
+
:date_logged => DateTime.now.utc,
|
62
|
+
:invoice_action => InvoiceLog::ACTION_INVOICE_PACKAGE_UPDATED,
|
63
|
+
:field => name,
|
64
|
+
:old_value => op[name.to_sym],
|
65
|
+
:new_value => value
|
66
|
+
)
|
67
|
+
end
|
47
68
|
case name
|
48
69
|
when 'invoice_id' then op.invoice_id = value
|
49
70
|
when 'shipping_method_id' then op.shipping_method_id = value
|
@@ -113,6 +134,13 @@ module Caboose
|
|
113
134
|
op = InvoicePackage.find(params[:id])
|
114
135
|
if op.line_items.nil? || op.line_items.count == 0
|
115
136
|
op.destroy
|
137
|
+
InvoiceLog.create(
|
138
|
+
:invoice_id => params[:invoice_id],
|
139
|
+
:invoice_package_id => params[:id],
|
140
|
+
:user_id => logged_in_user.id,
|
141
|
+
:date_logged => DateTime.now.utc,
|
142
|
+
:invoice_action => InvoiceLog::ACTION_INVOICE_PACKAGE_DELETED
|
143
|
+
)
|
116
144
|
resp.redirect = "/admin/invoices/#{params[:invoice_id]}"
|
117
145
|
else
|
118
146
|
resp.error = "Only empty packages can be deleted."
|
@@ -17,7 +17,7 @@ module Caboose
|
|
17
17
|
@pager = Caboose::PageBarGenerator.new(params, {
|
18
18
|
'site_id' => @site.id,
|
19
19
|
'customer_id' => params[:user_id] ? params[:user_id] : '',
|
20
|
-
'status' => Invoice::STATUS_PENDING,
|
20
|
+
'status' => Invoice::STATUS_PENDING,
|
21
21
|
'shipping_method_code' => '',
|
22
22
|
'id' => '',
|
23
23
|
'invoice_number' => '',
|
@@ -67,7 +67,13 @@ module Caboose
|
|
67
67
|
:status => Invoice::STATUS_PENDING,
|
68
68
|
:financial_status => Invoice::FINANCIAL_STATUS_PENDING,
|
69
69
|
:invoice_number => @site.store_config.next_invoice_number
|
70
|
-
)
|
70
|
+
)
|
71
|
+
InvoiceLog.create(
|
72
|
+
:invoice_id => invoice.id,
|
73
|
+
:user_id => logged_in_user.id,
|
74
|
+
:date_logged => DateTime.now.utc,
|
75
|
+
:invoice_action => InvoiceLog::ACTION_INVOICE_CREATED
|
76
|
+
)
|
71
77
|
render :json => { :sucess => true, :redirect => "/admin/invoices/#{invoice.id}" }
|
72
78
|
end
|
73
79
|
|
@@ -216,8 +222,20 @@ module Caboose
|
|
216
222
|
resp = Caboose::StdClass.new({'attributes' => {}})
|
217
223
|
invoice = Invoice.find(params[:id])
|
218
224
|
|
219
|
-
save = true
|
220
|
-
|
225
|
+
save = true
|
226
|
+
fields_to_log = ['tax','handling','custom_discount','financial_status','customer_id','notes','customer_notes','payment_terms','date_due','status']
|
227
|
+
params.each do |name,value|
|
228
|
+
if fields_to_log.include?(name)
|
229
|
+
InvoiceLog.create(
|
230
|
+
:invoice_id => invoice.id,
|
231
|
+
:user_id => logged_in_user.id,
|
232
|
+
:date_logged => DateTime.now.utc,
|
233
|
+
:invoice_action => InvoiceLog::ACTION_INVOICE_UPDATED,
|
234
|
+
:field => name,
|
235
|
+
:old_value => invoice[name.to_sym],
|
236
|
+
:new_value => value
|
237
|
+
)
|
238
|
+
end
|
221
239
|
case name
|
222
240
|
when 'tax'
|
223
241
|
invoice.tax = value
|
@@ -229,9 +247,9 @@ module Caboose
|
|
229
247
|
invoice.custom_discount = value
|
230
248
|
invoice.discount = invoice.calculate_discount
|
231
249
|
invoice.total = invoice.calculate_total
|
232
|
-
when 'status'
|
233
|
-
invoice.status = value
|
234
|
-
invoice.
|
250
|
+
when 'status'
|
251
|
+
invoice.status = value
|
252
|
+
invoice.date_processed = DateTime.now.utc if value == Invoice::STATUS_PROCESSED
|
235
253
|
|
236
254
|
when 'financial_status' then invoice.financial_status = value
|
237
255
|
when 'customer_id' then invoice.customer_id = value
|
@@ -240,7 +258,7 @@ module Caboose
|
|
240
258
|
when 'payment_terms' then invoice.payment_terms = value
|
241
259
|
when 'date_due' then invoice.date_due = value
|
242
260
|
|
243
|
-
end
|
261
|
+
end
|
244
262
|
end
|
245
263
|
|
246
264
|
#invoice.calculate
|
@@ -254,7 +272,13 @@ module Caboose
|
|
254
272
|
# @route DELETE /admin/invoices/:id
|
255
273
|
def admin_delete
|
256
274
|
return if !user_is_allowed('invoices', 'delete')
|
257
|
-
Invoice.find(params[:id]).destroy
|
275
|
+
Invoice.find(params[:id]).destroy
|
276
|
+
InvoiceLog.create(
|
277
|
+
:invoice_id => params[:id],
|
278
|
+
:user_id => logged_in_user.id,
|
279
|
+
:date_logged => DateTime.now.utc,
|
280
|
+
:invoice_action => InvoiceLog::ACTION_INVOICE_DELETED
|
281
|
+
)
|
258
282
|
render :json => Caboose::StdClass.new({
|
259
283
|
:redirect => '/admin/invoices'
|
260
284
|
})
|
@@ -309,8 +333,7 @@ module Caboose
|
|
309
333
|
Invoice::STATUS_CART,
|
310
334
|
Invoice::STATUS_PENDING,
|
311
335
|
Invoice::STATUS_READY_TO_SHIP,
|
312
|
-
Invoice::
|
313
|
-
Invoice::STATUS_PAID,
|
336
|
+
Invoice::STATUS_PROCESSED,
|
314
337
|
Invoice::STATUS_CANCELED
|
315
338
|
]
|
316
339
|
options = statuses.collect{ |s| { 'text' => s.capitalize, 'value' => s }}
|
@@ -346,16 +369,16 @@ module Caboose
|
|
346
369
|
if Caboose::Setting.exists?(:name => 'google_feed_date_last_submitted')
|
347
370
|
d1 = Caboose::Setting.where(:name => 'google_feed_date_last_submitted').first.value
|
348
371
|
d1 = DateTime.parse(d1)
|
349
|
-
elsif Invoice.exists?("status = ? and date_authorized is not null", Invoice::
|
350
|
-
d1 = Invoice.where("status = ? and date_authorized is not null", Invoice::
|
372
|
+
elsif Invoice.exists?("status = ? and date_authorized is not null", Invoice::STATUS_PROCESSED)
|
373
|
+
d1 = Invoice.where("status = ? and date_authorized is not null", Invoice::STATUS_PROCESSED).reorder("date_authorized DESC").limit(1).pluck('date_authorized')
|
351
374
|
d1 = DateTime.parse(d1)
|
352
375
|
end
|
353
376
|
|
354
377
|
# Google Feed Docs
|
355
378
|
# https://support.google.com/trustedstoresmerchant/answer/3272612?hl=en&ref_topic=3272286?hl=en
|
356
379
|
tsv = ["merchant invoice id\ttracking number\tcarrier code\tother carrier name\tship date"]
|
357
|
-
if Invoice.exists?("status = ? and date_authorized > '#{d1.strftime("%F %T")}'", Invoice::
|
358
|
-
Invoice.where("status = ? and date_authorized > ?", Invoice::
|
380
|
+
if Invoice.exists?("status = ? and date_authorized > '#{d1.strftime("%F %T")}'", Invoice::STATUS_PROCESSED)
|
381
|
+
Invoice.where("status = ? and date_authorized > ?", Invoice::STATUS_PROCESSED, d1).reorder(:id).all.each do |invoice|
|
359
382
|
tracking_numbers = invoice.line_items.collect{ |li| li.tracking_number }.compact.uniq
|
360
383
|
tn = tracking_numbers && tracking_numbers.count >= 1 ? tracking_numbers[0] : ""
|
361
384
|
tsv << "#{invoice.id}\t#{tn}\tUPS\t\t#{invoice.date_shipped.strftime("%F")}"
|
@@ -21,15 +21,24 @@ module Caboose
|
|
21
21
|
|
22
22
|
resp = StdClass.new
|
23
23
|
v = Variant.find(params[:variant_id])
|
24
|
-
li = LineItem.
|
25
|
-
:invoice_id
|
24
|
+
li = LineItem.create(
|
25
|
+
:invoice_id => params[:invoice_id],
|
26
26
|
:variant_id => params[:variant_id],
|
27
27
|
:quantity => 1,
|
28
28
|
:unit_price => v.price,
|
29
29
|
:subtotal => v.price,
|
30
|
-
:status =>
|
31
|
-
)
|
32
|
-
resp.success =
|
30
|
+
:status => LineItem::STATUS_PENDING
|
31
|
+
)
|
32
|
+
resp.success = true
|
33
|
+
resp.new_id = li.id
|
34
|
+
|
35
|
+
InvoiceLog.create(
|
36
|
+
:invoice_id => params[:invoice_id],
|
37
|
+
:line_item_id => li.id,
|
38
|
+
:user_id => logged_in_user.id,
|
39
|
+
:date_logged => DateTime.now.utc,
|
40
|
+
:invoice_action => InvoiceLog::ACTION_LINE_ITEM_CREATED
|
41
|
+
)
|
33
42
|
render :json => resp
|
34
43
|
end
|
35
44
|
|
@@ -42,7 +51,20 @@ module Caboose
|
|
42
51
|
|
43
52
|
save = true
|
44
53
|
send_status_email = false
|
45
|
-
|
54
|
+
fields_to_log = ['invoice_id','invoice_package_id','variant_id','parent_id','notes','custom1','custom2','custom3','unit_price','quantity','tracking_number','status']
|
55
|
+
params.each do |name,value|
|
56
|
+
if fields_to_log.include?(name)
|
57
|
+
InvoiceLog.create(
|
58
|
+
:invoice_id => params[:invoice_id],
|
59
|
+
:line_item_id => li.id,
|
60
|
+
:user_id => logged_in_user.id,
|
61
|
+
:date_logged => DateTime.now.utc,
|
62
|
+
:invoice_action => InvoiceLog::ACTION_LINE_ITEM_UPDATED,
|
63
|
+
:field => name,
|
64
|
+
:old_value => li[name.to_sym],
|
65
|
+
:new_value => value
|
66
|
+
)
|
67
|
+
end
|
46
68
|
case name
|
47
69
|
when 'invoice_id' then li.invoice_id = value
|
48
70
|
when 'invoice_package_id' then li.invoice_package_id = value
|
@@ -53,15 +75,14 @@ module Caboose
|
|
53
75
|
when 'custom1' then li.custom1 = value
|
54
76
|
when 'custom2' then li.custom2 = value
|
55
77
|
when 'custom3' then li.custom3 = value
|
56
|
-
when 'unit_price'
|
57
|
-
Caboose.log("li.unit_price = #{li.unit_price}")
|
78
|
+
when 'unit_price'
|
58
79
|
li.unit_price = value
|
59
|
-
li.save
|
60
|
-
Caboose.log("li.unit_price = #{li.unit_price}")
|
80
|
+
li.save
|
61
81
|
li.subtotal = li.unit_price * li.quantity
|
62
82
|
li.save
|
63
83
|
li.invoice.subtotal = li.invoice.calculate_subtotal
|
64
84
|
li.invoice.total = li.invoice.calculate_total
|
85
|
+
|
65
86
|
when 'quantity'
|
66
87
|
li.quantity = value
|
67
88
|
li.subtotal = li.unit_price * li.quantity
|
@@ -69,14 +90,6 @@ module Caboose
|
|
69
90
|
li.invoice.subtotal = li.invoice.calculate_subtotal
|
70
91
|
li.invoice.total = li.invoice.calculate_total
|
71
92
|
|
72
|
-
# Recalculate everything
|
73
|
-
#r = ShippingCalculator.rate(li.invoice, li.invoice.shipping_method_code)
|
74
|
-
#li.invoice.shipping = r['negotiated_rate'] / 100
|
75
|
-
#li.invoice.handling = (r['negotiated_rate'] / 100) * 0.05
|
76
|
-
#li.invoice.tax = TaxCalculator.tax(li.invoice)
|
77
|
-
#li.invoice.calculate_total
|
78
|
-
#li.invoice.save
|
79
|
-
|
80
93
|
when 'tracking_number'
|
81
94
|
li.tracking_number = value
|
82
95
|
send_status_email = true
|
@@ -104,6 +117,14 @@ module Caboose
|
|
104
117
|
invoice.total = invoice.calculate_total
|
105
118
|
invoice.save
|
106
119
|
|
120
|
+
InvoiceLog.create(
|
121
|
+
:invoice_id => params[:invoice_id],
|
122
|
+
:line_item_id => params[:id],
|
123
|
+
:user_id => logged_in_user.id,
|
124
|
+
:date_logged => DateTime.now.utc,
|
125
|
+
:invoice_action => InvoiceLog::ACTION_LINE_ITEM_DELETED
|
126
|
+
)
|
127
|
+
|
107
128
|
render :json => Caboose::StdClass.new({
|
108
129
|
:redirect => '/admin/invoices'
|
109
130
|
})
|
@@ -118,15 +139,13 @@ module Caboose
|
|
118
139
|
end
|
119
140
|
|
120
141
|
# @route GET /admin/invoices/line-items/status-options
|
121
|
-
def admin_status_options
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
}
|
129
|
-
end
|
142
|
+
def admin_status_options
|
143
|
+
options = [
|
144
|
+
{ :value => LineItem::STATUS_PENDING , :text => 'Pending' },
|
145
|
+
{ :value => LineItem::STATUS_BACKORDERED , :text => 'Backordered' },
|
146
|
+
{ :value => LineItem::STATUS_CANCELED , :text => 'Canceled' },
|
147
|
+
{ :value => LineItem::STATUS_PROCESSED , :text => 'Processed' }
|
148
|
+
]
|
130
149
|
render :json => options
|
131
150
|
end
|
132
151
|
|
@@ -61,8 +61,7 @@ module Caboose
|
|
61
61
|
end
|
62
62
|
|
63
63
|
# @route POST /my-account/confirm
|
64
|
-
def confirm
|
65
|
-
Caboose::log(params)
|
64
|
+
def confirm
|
66
65
|
sc = @site.store_config
|
67
66
|
@invoice = Invoice.find(params[:id])
|
68
67
|
|
@@ -111,7 +110,7 @@ module Caboose
|
|
111
110
|
capture_resp = @invoice.capture_funds
|
112
111
|
if capture_resp.success == true
|
113
112
|
@invoice.take_gift_card_funds
|
114
|
-
@invoice.status = Caboose::Invoice::
|
113
|
+
@invoice.status = Caboose::Invoice::STATUS_PROCESSED
|
115
114
|
end
|
116
115
|
end
|
117
116
|
end
|
@@ -54,8 +54,7 @@ module Caboose
|
|
54
54
|
STATUS_PENDING = 'pending'
|
55
55
|
STATUS_CANCELED = 'canceled'
|
56
56
|
STATUS_READY_TO_SHIP = 'ready to ship'
|
57
|
-
|
58
|
-
STATUS_PAID = 'paid'
|
57
|
+
STATUS_PROCESSED = 'processed'
|
59
58
|
STATUS_TESTING = 'testing'
|
60
59
|
|
61
60
|
# New
|
@@ -99,21 +98,7 @@ module Caboose
|
|
99
98
|
scope :captured , where('financial_status = ?', 'captured')
|
100
99
|
scope :refunded , where('financial_status = ?', 'refunded')
|
101
100
|
scope :voided , where('financial_status = ?', 'voided')
|
102
|
-
|
103
|
-
#
|
104
|
-
# Validations
|
105
|
-
#
|
106
|
-
|
107
|
-
validates :status, :inclusion => {
|
108
|
-
:in => ['cart', 'pending', 'canceled', 'ready to ship', 'shipped', 'paid', 'testing'],
|
109
|
-
:message => "%{value} is not a valid status. Must be either 'pending' or 'shipped'"
|
110
|
-
}
|
111
|
-
|
112
|
-
validates :financial_status, :inclusion => {
|
113
|
-
:in => ['pending', 'authorized', 'captured', 'refunded', 'voided', 'paid by check', 'paid by other means'],
|
114
|
-
:message => "%{value} is not a valid financial status. Must be 'authorized', 'captured', 'refunded' or 'voided'"
|
115
|
-
}
|
116
|
-
|
101
|
+
|
117
102
|
after_initialize :check_nil_fields
|
118
103
|
|
119
104
|
def check_nil_fields
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Caboose
|
2
|
+
class InvoiceLog < ActiveRecord::Base
|
3
|
+
self.table_name = 'store_invoice_logs'
|
4
|
+
|
5
|
+
belongs_to :invoice
|
6
|
+
belongs_to :user
|
7
|
+
attr_accessible :id ,
|
8
|
+
:invoice_id ,
|
9
|
+
:invoice_package_id ,
|
10
|
+
:line_item_id ,
|
11
|
+
:user_id ,
|
12
|
+
:date_logged ,
|
13
|
+
:invoice_action ,
|
14
|
+
:field ,
|
15
|
+
:old_value ,
|
16
|
+
:new_value
|
17
|
+
|
18
|
+
ACTION_INVOICE_CREATED = 'invoice created'
|
19
|
+
ACTION_INVOICE_UPDATED = 'invoice updated'
|
20
|
+
ACTION_INVOICE_DELETED = 'invoice deleted'
|
21
|
+
ACTION_INVOICE_PACKAGE_CREATED = 'invoice package created'
|
22
|
+
ACTION_INVOICE_PACKAGE_UPDATED = 'invoice package updated'
|
23
|
+
ACTION_INVOICE_PACKAGE_DELETED = 'invoice package deleted'
|
24
|
+
ACTION_LINE_ITEM_CREATED = 'line item created'
|
25
|
+
ACTION_LINE_ITEM_UPDATED = 'line item updated'
|
26
|
+
ACTION_LINE_ITEM_DELETED = 'line item deleted'
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -30,15 +30,17 @@ module Caboose
|
|
30
30
|
:date_starts ,
|
31
31
|
:date_ends
|
32
32
|
|
33
|
-
STATUS_PENDING
|
34
|
-
|
33
|
+
STATUS_PENDING = 'pending'
|
34
|
+
STATUS_BACKORDERED = 'backordered'
|
35
|
+
STATUS_CANCELED = 'canceled'
|
36
|
+
STATUS_PROCESSED = 'processed'
|
35
37
|
|
36
38
|
#
|
37
39
|
# Scopes
|
38
40
|
#
|
39
|
-
scope :pending, where('status = ?', 'pending')
|
40
|
-
scope :fulfilled, where('status = ?', 'shipped')
|
41
|
-
scope :unfulfilled, where('status != ?', 'shipped')
|
41
|
+
scope :pending , where('status = ?', 'pending')
|
42
|
+
scope :fulfilled , where('status = ?', 'shipped')
|
43
|
+
scope :unfulfilled , where('status != ?', 'shipped')
|
42
44
|
|
43
45
|
#validates :quantity, :numericality => { :greater_than_or_equal_to => 0 }
|
44
46
|
#validate :quantity_in_stock
|
@@ -408,6 +408,17 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
408
408
|
[ :invoice_id , :integer ],
|
409
409
|
[ :discount_id , :integer ]
|
410
410
|
],
|
411
|
+
Caboose::InvoiceLog => [
|
412
|
+
[ :invoice_id , :integer ],
|
413
|
+
[ :invoice_package_id , :integer ],
|
414
|
+
[ :line_item_id , :integer ],
|
415
|
+
[ :user_id , :integer ],
|
416
|
+
[ :date_logged , :datetime ],
|
417
|
+
[ :invoice_action , :string ],
|
418
|
+
[ :field , :string ],
|
419
|
+
[ :old_value , :text ],
|
420
|
+
[ :new_value , :text ]
|
421
|
+
],
|
411
422
|
Caboose::InvoicePackage => [
|
412
423
|
[ :invoice_id , :integer ],
|
413
424
|
[ :instore_pickup , :boolean , { :default => false }],
|
@@ -444,6 +455,7 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
444
455
|
[ :date_authorized , :datetime ],
|
445
456
|
[ :date_captured , :datetime ],
|
446
457
|
[ :date_shipped , :datetime ],
|
458
|
+
[ :date_processed , :datetime ],
|
447
459
|
[ :date_due , :date ],
|
448
460
|
[ :referring_site , :text ],
|
449
461
|
[ :landing_page , :string ],
|
@@ -1162,5 +1174,11 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
1162
1174
|
smtp.save
|
1163
1175
|
end
|
1164
1176
|
|
1177
|
+
# Change the invoice statuses
|
1178
|
+
Caboose::Invoice.where("status = ? or status = ?", 'shipped', 'paid').all.each do |invoice|
|
1179
|
+
invoice.status = 'processed'
|
1180
|
+
invoice.save
|
1181
|
+
end
|
1182
|
+
|
1165
1183
|
end
|
1166
1184
|
end
|
@@ -2,6 +2,11 @@
|
|
2
2
|
<% if @edituser %>
|
3
3
|
<%= render :partial => 'caboose/users/admin_header' %>
|
4
4
|
<% else %>
|
5
|
+
<div id='crumbtrail'>
|
6
|
+
<a href='/admin'>Admin</a> >
|
7
|
+
<a href='/admin/invoices'>Invoices</a> >
|
8
|
+
Invoice #<%= @invoice.id %>
|
9
|
+
</div>
|
5
10
|
<h1>Edit Invoice #<%= @invoice.id %></h1>
|
6
11
|
<% end %>
|
7
12
|
|
@@ -2,6 +2,10 @@
|
|
2
2
|
<% if @edituser %>
|
3
3
|
<%= render :partial => 'caboose/users/admin_header' %>
|
4
4
|
<% else %>
|
5
|
+
<div id='crumbtrail'>
|
6
|
+
<a href='/admin'>Admin</a> >
|
7
|
+
Invoices
|
8
|
+
</div>
|
5
9
|
<h1>Invoices</h1>
|
6
10
|
<% end %>
|
7
11
|
|
@@ -33,7 +37,9 @@
|
|
33
37
|
<% end %>
|
34
38
|
<p><input type='text' name='total_gte' placeholder='Total Min' value="<%= @pager.params['total_gte'] %>" style='width: 100px;' /></p>
|
35
39
|
<p><input type='text' name='total_lte' placeholder='Total Max' value="<%= @pager.params['total_lte'] %>" style='width: 100px;' /></p>
|
36
|
-
<p
|
40
|
+
<p>
|
41
|
+
<!--
|
42
|
+
<select name='status'>
|
37
43
|
<optgroup label='Status'>
|
38
44
|
<option value=''>-- All statuses --</option>
|
39
45
|
<% statuses = ['cart','pending','canceled','ready to ship','shipped','paid'] %>
|
@@ -41,7 +47,28 @@
|
|
41
47
|
<option value='<%= status %>'<%= @pager.params['status'] == status ? " selected='true'" : '' %>><%= status.capitalize %></option>
|
42
48
|
<% end %>
|
43
49
|
</optgroup>
|
44
|
-
</select
|
50
|
+
</select>
|
51
|
+
-->
|
52
|
+
<%
|
53
|
+
statuses = [
|
54
|
+
Caboose::Invoice::STATUS_CART ,
|
55
|
+
Caboose::Invoice::STATUS_PENDING ,
|
56
|
+
Caboose::Invoice::STATUS_READY_TO_SHIP ,
|
57
|
+
Caboose::Invoice::STATUS_PROCESSED ,
|
58
|
+
Caboose::Invoice::STATUS_CANCELED
|
59
|
+
]
|
60
|
+
all_checked = true
|
61
|
+
statuses.each do |status|
|
62
|
+
all_checked = false if !@pager.params['status'].include?(status)
|
63
|
+
end
|
64
|
+
Caboose.log(@pager.params['status'])
|
65
|
+
%>
|
66
|
+
Status:
|
67
|
+
<% statuses.each do |status| %>
|
68
|
+
<input type='checkbox' name='status[]' id='status_<%= status %>' value='<%= status %>' <% if @pager.params['status'].include?(status) %> checked='true'<% end %> />
|
69
|
+
<label for='status_<%= status %>'><%= status.capitalize %></label>
|
70
|
+
<% end %>
|
71
|
+
</p>
|
45
72
|
<p>
|
46
73
|
<input type='submit' value='Search' />
|
47
74
|
<input type='button' value='Clear' onclick="window.location='/admin<%= @edituser ? "/users/#{@edituser.id}" : '' %>/invoices';" />
|
data/lib/caboose/version.rb
CHANGED
data/lib/tasks/caboose.rake
CHANGED
@@ -7,6 +7,10 @@ namespace :caboose do
|
|
7
7
|
Caboose::Subscription.migrate_from_user_subscriptions
|
8
8
|
end
|
9
9
|
|
10
|
+
task :create_subscription_invoices => :environment do
|
11
|
+
Caboose::Subscription.create_invoices
|
12
|
+
end
|
13
|
+
|
10
14
|
desc "Save sample asset"
|
11
15
|
task :save_sample_asset => :environment do
|
12
16
|
|
@@ -151,7 +155,7 @@ namespace :caboose do
|
|
151
155
|
|
152
156
|
desc "Calculate invoice profits"
|
153
157
|
task :calculate_invoice_profits => :environment do
|
154
|
-
Caboose::Invoice.where("status = ? or status = ? or status = ?", Caboose::Invoice::STATUS_PENDING, Caboose::Invoice::STATUS_READY_TO_SHIP, Caboose::Invoice::
|
158
|
+
Caboose::Invoice.where("status = ? or status = ? or status = ?", Caboose::Invoice::STATUS_PENDING, Caboose::Invoice::STATUS_READY_TO_SHIP, Caboose::Invoice::STATUS_PROCESSED).reinvoice(:id).all.each do |invoice|
|
155
159
|
invoice.update_column(:cost , invoice.calculate_cost )
|
156
160
|
invoice.update_column(:profit , invoice.calculate_profit )
|
157
161
|
end
|
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.8.
|
4
|
+
version: 0.8.87
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -881,6 +881,7 @@ files:
|
|
881
881
|
- app/models/caboose/gift_card.rb
|
882
882
|
- app/models/caboose/invoice.rb
|
883
883
|
- app/models/caboose/invoice_discount.rb
|
884
|
+
- app/models/caboose/invoice_log.rb
|
884
885
|
- app/models/caboose/invoice_package.rb
|
885
886
|
- app/models/caboose/invoice_package_calculator.rb
|
886
887
|
- app/models/caboose/invoice_pdf.rb
|