caboose-cms 0.8.78 → 0.8.79
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/admin_edit_invoice.js +45 -18
- data/app/controllers/caboose/invoices_controller.rb +20 -10
- data/app/controllers/caboose/subscriptions_controller.rb +60 -58
- data/app/controllers/caboose/variants_controller.rb +80 -97
- data/app/models/caboose/core_plugin.rb +1 -2
- data/app/models/caboose/line_item.rb +2 -1
- data/app/models/caboose/schema.rb +64 -67
- data/app/models/caboose/subscription.rb +130 -20
- data/app/models/caboose/variant.rb +21 -1
- data/app/views/caboose/invoices/admin_edit.html.erb +11 -3
- data/app/views/caboose/invoices/admin_index.html.erb +26 -13
- data/app/views/caboose/invoices/admin_user_edit.html.erb +60 -0
- data/app/views/caboose/subscriptions/admin_edit.html.erb +25 -60
- data/app/views/caboose/subscriptions/admin_index.html.erb +17 -18
- data/app/views/caboose/subscriptions/admin_user_index.html.erb +41 -0
- data/app/views/caboose/users/_admin_header.html.erb +3 -1
- data/app/views/caboose/variants/admin_edit.html.erb +26 -1
- data/lib/caboose/version.rb +1 -1
- data/lib/tasks/caboose.rake +4 -0
- metadata +4 -7
- data/app/controllers/caboose/user_subscriptions_controller.rb +0 -146
- data/app/models/caboose/user_subscription.rb +0 -144
- data/app/views/caboose/user_subscriptions/admin_edit.html.erb +0 -38
- data/app/views/caboose/user_subscriptions/admin_index.html.erb +0 -38
- data/app/views/caboose/user_subscriptions/admin_user_index.html.erb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbd447044fa644c9f566598042ea9b67b7f23faa
|
4
|
+
data.tar.gz: 4cf0ab42e9c3abb072dbb4a6a738d8a1026b2292
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28d6a8ae3983ca9b3856ce3951878223c5789794c06d1aa949bf577513fa167e505852d5cd47e29e632127b3ef7e9099cb7204e5963e337d3b7418f800a7e354
|
7
|
+
data.tar.gz: 7e958ad18045db7b8b6dadf7fca9e12b13ee00a59ad2784ad0335a182f9ba128f2b582f988fda26a885646e9daa9eb204dc7f90a30dca6a7e77ac0cbe8c33490
|
@@ -87,18 +87,24 @@ InvoiceController.prototype = {
|
|
87
87
|
]
|
88
88
|
});
|
89
89
|
});
|
90
|
-
$.each(that.invoice.line_items, function(i, li) {
|
90
|
+
$.each(that.invoice.line_items, function(i, li) {
|
91
|
+
var arr = [
|
92
|
+
{ name: 'status' , nice_name: 'Status' , type: 'select' , align: 'left' , value: li.status , text: li.status, width: 150, fixed_placeholder: false, options_url: '/admin/invoices/line-items/status-options' },
|
93
|
+
{ name: 'tracking_number' , nice_name: 'Tracking Number' , type: 'text' , align: 'left' , value: li.tracking_number , width: 200, fixed_placeholder: false },
|
94
|
+
{ name: 'unit_price' , nice_name: 'Unit Price' , type: 'text' , align: 'right', value: curr(li.unit_price) , width: 75, fixed_placeholder: false, after_update: function() { that.refresh_invoice(); } },
|
95
|
+
{ name: 'quantity' , nice_name: 'Quantity' , type: 'text' , align: 'right', value: li.quantity , width: 75, fixed_placeholder: false, after_update: function() { that.refresh_invoice(); } }
|
96
|
+
];
|
97
|
+
if (li.subscription_id)
|
98
|
+
{
|
99
|
+
arr.push({ name: 'date_starts' , nice_name: 'Starts' , type: 'date' , align: 'left' , value: li.date_starts , width: 100, fixed_placeholder: false, date_format: 'Y-m-d' });
|
100
|
+
arr.push({ name: 'date_ends' , nice_name: 'Ends' , type: 'date' , align: 'left' , value: li.date_ends , width: 100, fixed_placeholder: false, date_format: 'Y-m-d' });
|
101
|
+
}
|
91
102
|
new ModelBinder({
|
92
103
|
name: 'Lineitem',
|
93
104
|
id: li.id,
|
94
105
|
update_url: '/admin/invoices/' + li.invoice_id + '/line-items/' + li.id,
|
95
106
|
authenticity_token: that.authenticity_token,
|
96
|
-
attributes:
|
97
|
-
{ name: 'status' , nice_name: 'Status' , type: 'select' , align: 'left' , value: li.status , text: li.status, width: 150, fixed_placeholder: false, options_url: '/admin/invoices/line-items/status-options' },
|
98
|
-
{ name: 'tracking_number' , nice_name: 'Tracking Number' , type: 'text' , align: 'left' , value: li.tracking_number , width: 200, fixed_placeholder: false },
|
99
|
-
{ name: 'unit_price' , nice_name: 'Unit Price' , type: 'text' , align: 'right', value: curr(li.unit_price) , width: 75, fixed_placeholder: false, after_update: function() { that.refresh_invoice(); } },
|
100
|
-
{ name: 'quantity' , nice_name: 'Quantity' , type: 'text' , align: 'right', value: li.quantity , width: 75, fixed_placeholder: false, after_update: function() { that.refresh_invoice(); } }
|
101
|
-
]
|
107
|
+
attributes: arr
|
102
108
|
});
|
103
109
|
});
|
104
110
|
new ModelBinder({
|
@@ -107,12 +113,14 @@ InvoiceController.prototype = {
|
|
107
113
|
update_url: '/admin/invoices/' + that.invoice.id,
|
108
114
|
authenticity_token: that.authenticity_token,
|
109
115
|
attributes: [
|
110
|
-
{ name: 'status' , nice_name: 'Status'
|
111
|
-
{ name: 'financial_status' , nice_name: 'Status'
|
112
|
-
{ name: 'payment_terms' , nice_name: 'Terms'
|
113
|
-
{ name: 'tax' , nice_name: 'Tax'
|
114
|
-
{ name: 'handling' , nice_name: 'Handling'
|
115
|
-
{ name: 'custom_discount' , nice_name: 'Discount'
|
116
|
+
{ name: 'status' , nice_name: 'Status' , type: 'select' , value: that.invoice.status , width: 100, fixed_placeholder: false, options_url: '/admin/invoices/status-options' },
|
117
|
+
{ name: 'financial_status' , nice_name: 'Status' , type: 'select' , value: that.invoice.financial_status , width: 100, fixed_placeholder: true , width: 200, options_url: '/admin/invoices/financial-status-options' },
|
118
|
+
{ name: 'payment_terms' , nice_name: 'Terms' , type: 'select' , value: that.invoice.payment_terms , width: 200, fixed_placeholder: true , width: 200, options_url: '/admin/invoices/payment-terms-options' },
|
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
|
+
{ 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
|
+
{ 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: 100, fixed_placeholder: false, align: 'left' , after_update: function() { that.refresh_invoice(); }, height: 50 },
|
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 }
|
116
124
|
]
|
117
125
|
});
|
118
126
|
},
|
@@ -507,13 +515,14 @@ InvoiceController.prototype = {
|
|
507
515
|
if (j == 0)
|
508
516
|
{
|
509
517
|
tr.append($('<td/>').attr('rowspan', line_items.length).attr('valign', 'top').append(that.package_summary(op, line_items)));
|
510
|
-
}
|
518
|
+
}
|
511
519
|
tr.append($('<td/>')
|
512
520
|
.append(that.line_item_link(li))
|
521
|
+
.append(that.subscription_dates(li))
|
513
522
|
.append(that.line_item_weight(li))
|
514
523
|
.append(that.gift_options(li))
|
515
524
|
.append($('<div/>').attr('id', 'line_item_' + li.id + '_message'))
|
516
|
-
);
|
525
|
+
);
|
517
526
|
tr.append($('<td/>').append($('<div/>').attr('id', 'lineitem_' + li.id + '_status')))
|
518
527
|
//tr.append($('<td/>').attr('align', 'right').html(curr(li.unit_price)));
|
519
528
|
tr.append($('<td/>').attr('align', 'right').append($('<div/>').attr('id', 'lineitem_' + li.id + '_unit_price')));
|
@@ -705,10 +714,12 @@ InvoiceController.prototype = {
|
|
705
714
|
}
|
706
715
|
|
707
716
|
tr.append($('<td/>')
|
708
|
-
.append(that.line_item_link(li))
|
709
|
-
.append(that.
|
717
|
+
.append(that.line_item_link(li))
|
718
|
+
.append(that.subscription_dates(li))
|
719
|
+
.append(that.gift_options(li))
|
710
720
|
.append($('<div/>').attr('id', 'line_item_' + li.id + '_message'))
|
711
|
-
);
|
721
|
+
);
|
722
|
+
|
712
723
|
tr.append($('<td/>').append($('<div/>').attr('id', 'lineitem_' + li.id + '_status')))
|
713
724
|
//tr.append($('<td/>').attr('align', 'right').html(curr(li.unit_price)));
|
714
725
|
tr.append($('<td/>').attr('align', 'right').append($('<div/>').attr('id', 'lineitem_' + li.id + '_unit_price')));
|
@@ -718,6 +729,22 @@ InvoiceController.prototype = {
|
|
718
729
|
});
|
719
730
|
},
|
720
731
|
|
732
|
+
// Show the invoice summary
|
733
|
+
subscription_dates: function(li)
|
734
|
+
{
|
735
|
+
var that = this;
|
736
|
+
if (!li.subscription_id)
|
737
|
+
return $('<div/>');
|
738
|
+
|
739
|
+
return $('<table/>').addClass('subscription_dates')
|
740
|
+
.append($('<tbody/>')
|
741
|
+
.append($('<tr/>')
|
742
|
+
.append($('<td/>').append($('<div/>').attr('id', 'lineitem_' + li.id + '_date_starts' )))
|
743
|
+
.append($('<td/>').append($('<div/>').attr('id', 'lineitem_' + li.id + '_date_ends' )))
|
744
|
+
)
|
745
|
+
);
|
746
|
+
},
|
747
|
+
|
721
748
|
// Show the invoice summary
|
722
749
|
summary_table: function(table)
|
723
750
|
{
|
@@ -10,25 +10,29 @@ module Caboose
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# @route GET /admin/invoices
|
13
|
+
# @route GET /admin/users/:user_id/invoices
|
13
14
|
def admin_index
|
14
15
|
return if !user_is_allowed('invoices', 'view')
|
15
16
|
|
16
17
|
@pager = Caboose::PageBarGenerator.new(params, {
|
17
18
|
'site_id' => @site.id,
|
18
|
-
'customer_id' => '',
|
19
|
+
'customer_id' => params[:user_id] ? params[:user_id] : '',
|
19
20
|
'status' => Invoice::STATUS_PENDING,
|
20
21
|
'shipping_method_code' => '',
|
21
22
|
'id' => '',
|
22
|
-
'invoice_number' => ''
|
23
|
+
'invoice_number' => '',
|
24
|
+
'total_lte' => '',
|
25
|
+
'total_gte' => ''
|
23
26
|
}, {
|
24
27
|
'model' => 'Caboose::Invoice',
|
25
28
|
'sort' => 'id',
|
26
29
|
'desc' => 1,
|
27
|
-
'base_url' =>
|
30
|
+
'base_url' => params[:user_id] ? "/admin/users/#{params[:user_id]}/invoices" : "/admin/invoices",
|
28
31
|
'use_url_params' => false,
|
29
32
|
'items_per_page' => 100
|
30
33
|
})
|
31
34
|
|
35
|
+
@edituser = params[:user_id] ? User.find(params[:user_id]) : nil
|
32
36
|
@invoices = @pager.items
|
33
37
|
@customers = Caboose::User.where(:site_id => @site.id).reorder('last_name, first_name').all
|
34
38
|
|
@@ -66,13 +70,15 @@ module Caboose
|
|
66
70
|
)
|
67
71
|
render :json => { :sucess => true, :redirect => "/admin/invoices/#{invoice.id}" }
|
68
72
|
end
|
69
|
-
|
73
|
+
|
70
74
|
# @route_priority 50
|
71
75
|
# @route GET /admin/invoices/:id
|
76
|
+
# @route GET /admin/users/:user_id/invoices/:id
|
72
77
|
def admin_edit
|
73
78
|
return if !user_is_allowed('invoices', 'edit')
|
74
79
|
@invoice = Invoice.where(:id => params[:id]).first
|
75
|
-
|
80
|
+
@edituser = params[:user_id] ? User.find(params[:user_id]) : nil
|
81
|
+
|
76
82
|
if params[:id].nil? || @invoice.nil?
|
77
83
|
render :file => 'caboose/invoices/admin_invalid_invoice', :layout => 'caboose/admin'
|
78
84
|
return
|
@@ -225,11 +231,15 @@ module Caboose
|
|
225
231
|
invoice.total = invoice.calculate_total
|
226
232
|
when 'status'
|
227
233
|
invoice.status = value
|
228
|
-
invoice.date_shipped = DateTime.now.utc if value == 'Shipped'
|
229
|
-
|
230
|
-
|
231
|
-
when 'customer_id'
|
232
|
-
|
234
|
+
invoice.date_shipped = DateTime.now.utc if value == 'Shipped'
|
235
|
+
|
236
|
+
when 'financial_status' then invoice.financial_status = value
|
237
|
+
when 'customer_id' then invoice.customer_id = value
|
238
|
+
when 'notes' then invoice.notes = value
|
239
|
+
when 'customer_notes' then invoice.customer_notes = value
|
240
|
+
when 'payment_terms' then invoice.payment_terms = value
|
241
|
+
when 'date_due' then invoice.date_due = value
|
242
|
+
|
233
243
|
end
|
234
244
|
end
|
235
245
|
|
@@ -8,79 +8,83 @@ module Caboose
|
|
8
8
|
|
9
9
|
# @route GET /admin/subscriptions
|
10
10
|
def admin_index
|
11
|
+
return if !user_is_allowed('subscriptions', 'view')
|
12
|
+
render :layout => 'caboose/admin'
|
13
|
+
end
|
14
|
+
|
15
|
+
# @route GET /admin/users/:user_id/subscriptions
|
16
|
+
def admin_user_index
|
11
17
|
return if !user_is_allowed('subscriptions', 'view')
|
18
|
+
@edituser = User.find(params[:user_id])
|
12
19
|
render :layout => 'caboose/admin'
|
13
20
|
end
|
14
21
|
|
15
22
|
# @route GET /admin/subscriptions/json
|
23
|
+
# @route GET /admin/users/:user_id/subscriptions/json
|
16
24
|
def admin_json
|
17
25
|
return if !user_is_allowed('subscriptions', 'view')
|
18
26
|
|
19
27
|
pager = PageBarGenerator.new(params, {
|
20
|
-
'
|
21
|
-
'
|
22
|
-
'
|
23
|
-
'
|
24
|
-
'
|
25
|
-
'
|
26
|
-
'
|
27
|
-
'prorate_flat_amount' => '',
|
28
|
-
'start_on_day' => '',
|
29
|
-
'start_day' => '',
|
30
|
-
'start_month' => ''
|
28
|
+
'variant_id' => '',
|
29
|
+
'user_id' => params[:user_id] ? params[:user_id] : '',
|
30
|
+
'date_started_gte' => '',
|
31
|
+
'date_started_lte' => '',
|
32
|
+
'date_started_full_gte' => '',
|
33
|
+
'date_started_full_lte' => '',
|
34
|
+
'status' => ''
|
31
35
|
},{
|
32
36
|
'model' => 'Caboose::Subscription',
|
33
|
-
'sort' => '
|
37
|
+
'sort' => 'date_started',
|
34
38
|
'desc' => false,
|
35
|
-
'base_url' => "/admin/subscriptions",
|
39
|
+
'base_url' => params[:user_id] ? "/admin/users/#{params[:user_id]}/subscriptions" : '/admin/subscriptions',
|
36
40
|
'use_url_params' => false
|
37
41
|
})
|
38
42
|
render :json => {
|
39
43
|
:pager => pager,
|
40
|
-
:models => pager.items
|
44
|
+
:models => pager.items.as_json(:include => [:user, { :variant => { :include => :product }}])
|
41
45
|
}
|
42
46
|
end
|
43
47
|
|
44
48
|
# @route GET /admin/subscriptions/:id
|
49
|
+
# @route GET /admin/users/:user_id/subscriptions/:id
|
45
50
|
def admin_edit
|
46
51
|
return if !user_is_allowed('subscriptions', 'edit')
|
47
|
-
@subscription = Subscription.find(params[:id])
|
52
|
+
@subscription = Subscription.find(params[:id])
|
53
|
+
@edituser = @subscription.user
|
48
54
|
render :layout => 'caboose/admin'
|
49
55
|
end
|
50
56
|
|
51
|
-
# @route GET /admin/subscriptions/:id/json
|
57
|
+
# @route GET /admin/users/:user_id/subscriptions/:id/json
|
52
58
|
def admin_json_single
|
53
59
|
return if !user_is_allowed('subscriptions', 'view')
|
54
60
|
s = Subscription.find(params[:id])
|
55
61
|
render :json => s
|
56
62
|
end
|
57
63
|
|
58
|
-
# @route POST /admin/subscriptions
|
64
|
+
# @route POST /admin/users/:user_id/subscriptions
|
59
65
|
def admin_add
|
60
66
|
return unless user_is_allowed('subscriptions', 'add')
|
61
67
|
|
62
68
|
resp = Caboose::StdClass.new
|
63
|
-
|
69
|
+
v = params[:variant_id] ? Variant.where(:id => params[:variant_id]).first : nil
|
64
70
|
|
65
|
-
if
|
66
|
-
resp.error = "A
|
67
|
-
elsif Subscription.where(:site_id => @site.id, :name => params[:name]).exists?
|
68
|
-
resp.error = "A subscription with that name already exists."
|
71
|
+
if params[:variant_id].nil? || v.nil? || v.product.site_id != @site.id || !v.is_subscription
|
72
|
+
resp.error = "A valid subscription variant is required."
|
69
73
|
else
|
70
74
|
s = Subscription.create(
|
71
|
-
:
|
72
|
-
:
|
73
|
-
:
|
74
|
-
:
|
75
|
-
:
|
75
|
+
:variant_id => v.id,
|
76
|
+
:user_id => params[:user_id],
|
77
|
+
:date_started => Date.today,
|
78
|
+
:date_started_full => Date.today,
|
79
|
+
:status => UserSubcription::STATUS_ACTIVE
|
76
80
|
)
|
77
|
-
resp.redirect = "/admin/subscriptions/#{s.id}"
|
81
|
+
resp.redirect = "/admin/users/#{params[:user_id]}/subscriptions/#{s.id}"
|
78
82
|
resp.success = true
|
79
83
|
end
|
80
84
|
render :json => resp
|
81
85
|
end
|
82
86
|
|
83
|
-
# @route PUT /admin/subscriptions/:id
|
87
|
+
# @route PUT /admin/users/:user_id/subscriptions/:id
|
84
88
|
def admin_update
|
85
89
|
return unless user_is_allowed('subscriptions', 'edit')
|
86
90
|
|
@@ -89,39 +93,41 @@ module Caboose
|
|
89
93
|
|
90
94
|
params.each do |k, v|
|
91
95
|
case k
|
92
|
-
when '
|
93
|
-
when '
|
94
|
-
when '
|
95
|
-
when '
|
96
|
-
when '
|
97
|
-
when 'prorate_method' then models.each{ |s| s.prorate_method = v }
|
98
|
-
when 'prorate_flat_amount' then models.each{ |s| s.prorate_flat_amount = v }
|
99
|
-
when 'prorate_function' then models.each{ |s| s.prorate_function = v }
|
100
|
-
when 'start_on_day' then models.each{ |s| s.start_on_day = v }
|
101
|
-
when 'start_day' then models.each{ |s| s.start_day = v }
|
102
|
-
when 'start_month' then models.each{ |s| s.start_month = v }
|
96
|
+
when 'variant_id' then models.each{ |s| s.variant_id = v }
|
97
|
+
when 'user_id' then models.each{ |s| s.user_id = v }
|
98
|
+
when 'date_started' then models.each{ |s| s.date_started = v }
|
99
|
+
when 'date_started_full' then models.each{ |s| s.date_started_full = v }
|
100
|
+
when 'status' then models.each{ |s| s.status = v }
|
103
101
|
end
|
104
102
|
end
|
105
103
|
models.each{ |s| s.save }
|
106
104
|
resp.success = true
|
107
105
|
render :json => resp
|
108
106
|
end
|
107
|
+
|
108
|
+
# @route POST /admin/users/:user_id/subscriptions/:id/invoices
|
109
|
+
def admin_create_invoices
|
110
|
+
return if !user_is_allowed('subscriptions', 'edit')
|
111
|
+
s = Subscription.find(params[:id])
|
112
|
+
s.create_invoices
|
113
|
+
render :json => { :success => true }
|
114
|
+
end
|
109
115
|
|
110
|
-
# @route DELETE /admin/subscriptions/:id
|
116
|
+
# @route DELETE /admin/users/:user_id/subscriptions/:id
|
111
117
|
def admin_delete
|
112
118
|
return unless user_is_allowed('subscriptions', 'delete')
|
113
119
|
|
114
120
|
model_ids = params[:id] == 'bulk' ? params[:model_ids] : [params[:id]]
|
115
121
|
model_ids.each do |model_id|
|
116
|
-
|
117
|
-
Subscription.where(:id => model_id).destroy_all
|
122
|
+
Subscription.where(:id => model_id).destroy_all
|
118
123
|
end
|
119
124
|
|
120
125
|
render :json => { :sucess => true }
|
121
126
|
end
|
122
127
|
|
123
128
|
# @route_priority 1
|
124
|
-
# @route GET /admin/subscriptions/:field-options
|
129
|
+
# @route GET /admin/subscriptions/:field-options
|
130
|
+
# @route GET /admin/users/:user_id/subscriptions/:field-options
|
125
131
|
def admin_options
|
126
132
|
if !user_is_allowed('subscriptions', 'edit')
|
127
133
|
render :json => false
|
@@ -130,21 +136,17 @@ module Caboose
|
|
130
136
|
|
131
137
|
options = []
|
132
138
|
case params[:field]
|
133
|
-
when '
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
]
|
138
|
-
when 'prorate-method'
|
139
|
+
when 'variant'
|
140
|
+
arr = Variant.joins(:product).where("store_products.site_id = ? and is_subscription = ?", @site.id, true).reorder("store_products.title").all
|
141
|
+
options = arr.collect{ |v| { 'value' => v.id, 'text' => v.product.title }}
|
142
|
+
when 'status'
|
139
143
|
options = [
|
140
|
-
{ 'value' => Subscription::
|
141
|
-
{ 'value' => Subscription::
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
options =
|
146
|
-
when 'start-month'
|
147
|
-
options = (1..12).collect{ |i| { 'value' => i, 'text' => Date.new(2000, i, 1).strftime('%B') }}
|
144
|
+
{ 'value' => Subscription::STATUS_ACTIVE , 'text' => 'Active' },
|
145
|
+
{ 'value' => Subscription::STATUS_INACTIVE , 'text' => 'Inactive' }
|
146
|
+
]
|
147
|
+
when 'user'
|
148
|
+
arr = User.where(:site_id => @site.id).reorder('last_name, first_name').all
|
149
|
+
options = arr.collect{ |u| { 'value' => u.id, 'text' => "#{u.first_name} #{u.last_name}" }}
|
148
150
|
end
|
149
151
|
render :json => options
|
150
152
|
end
|
@@ -243,41 +243,63 @@ module Caboose
|
|
243
243
|
render :json => { :success => true }
|
244
244
|
end
|
245
245
|
|
246
|
-
# @route PUT /admin/products/:product_id/variants
|
247
|
-
|
246
|
+
# @route PUT /admin/products/:product_id/variants/:id
|
247
|
+
# @route PUT /admin/products/:product_id/variants/bulk
|
248
|
+
def admin_update
|
248
249
|
return unless user_is_allowed_to 'edit', 'sites'
|
249
250
|
|
250
251
|
resp = Caboose::StdClass.new
|
251
|
-
variants = params[:model_ids].collect{ |variant_id| Variant.find(variant_id) }
|
252
|
+
variants = params[:id] == 'bulk' ? params[:model_ids].collect{ |variant_id| Variant.find(variant_id) } : [Variant.find(params[:id])]
|
252
253
|
|
253
254
|
save = true
|
254
255
|
params.each do |k,value|
|
255
256
|
case k
|
256
|
-
when 'alternate_id'
|
257
|
-
when 'sku'
|
258
|
-
when 'barcode'
|
259
|
-
when '
|
260
|
-
when '
|
261
|
-
when '
|
262
|
-
when '
|
263
|
-
when '
|
264
|
-
when '
|
265
|
-
when '
|
266
|
-
when '
|
267
|
-
when '
|
268
|
-
when '
|
269
|
-
when '
|
270
|
-
when '
|
271
|
-
when '
|
272
|
-
when '
|
273
|
-
when '
|
274
|
-
when '
|
275
|
-
when '
|
276
|
-
when '
|
277
|
-
when '
|
278
|
-
when '
|
279
|
-
when '
|
280
|
-
|
257
|
+
when 'alternate_id' then variants.each { |v| v.alternate_id = value }
|
258
|
+
when 'sku' then variants.each { |v| v.sku = value }
|
259
|
+
when 'barcode' then variants.each { |v| v.barcode = value }
|
260
|
+
when 'cost' then variants.each { |v| v.cost = value }
|
261
|
+
when 'price' then variants.each { |v| v.price = value }
|
262
|
+
when 'quantity_in_stock' then variants.each { |v| v.quantity_in_stock = value }
|
263
|
+
when 'ignore_quantity' then variants.each { |v| v.ignore_quantity = value }
|
264
|
+
when 'allow_backorder' then variants.each { |v| v.allow_backorder = value }
|
265
|
+
when 'clearance' then variants.each { |v| v.clearance = value }
|
266
|
+
when 'clearance_price' then variants.each { |v| v.clearance_price = value }
|
267
|
+
when 'status' then variants.each { |v| v.status = value }
|
268
|
+
when 'weight' then variants.each { |v| v.weight = value }
|
269
|
+
when 'length' then variants.each { |v| v.length = value }
|
270
|
+
when 'width' then variants.each { |v| v.width = value }
|
271
|
+
when 'height' then variants.each { |v| v.height = value }
|
272
|
+
when 'option1' then variants.each { |v| v.option1 = value }
|
273
|
+
when 'option2' then variants.each { |v| v.option2 = value }
|
274
|
+
when 'option3' then variants.each { |v| v.option3 = value }
|
275
|
+
when 'option1_media_id' then variants.each { |v| v.option1_media_id = value }
|
276
|
+
when 'option2_media_id' then variants.each { |v| v.option2_media_id = value }
|
277
|
+
when 'option3_media_id' then variants.each { |v| v.option3_media_id = value }
|
278
|
+
when 'requires_shipping' then variants.each { |v| v.requires_shipping = value }
|
279
|
+
when 'taxable' then variants.each { |v| v.taxable = value }
|
280
|
+
when 'downloadable' then variants.each { |v| v.downloadable = value }
|
281
|
+
when 'download_path' then variants.each { |v| v.download_path = value }
|
282
|
+
when 'is_subscription' then variants.each { |v| v.is_subscription = value }
|
283
|
+
when 'subscription_interval' then variants.each { |v| v.subscription_interval = value }
|
284
|
+
when 'subscription_prorate' then variants.each { |v| v.subscription_prorate = value }
|
285
|
+
when 'subscription_prorate_method' then variants.each { |v| v.subscription_prorate_method = value }
|
286
|
+
when 'subscription_prorate_flat_amount' then variants.each { |v| v.subscription_prorate_flat_amount = value }
|
287
|
+
when 'subscription_prorate_function' then variants.each { |v| v.subscription_prorate_function = value }
|
288
|
+
when 'subscription_start_on_day' then variants.each { |v| v.subscription_start_on_day = value }
|
289
|
+
when 'subscription_start_day' then variants.each { |v| v.subscription_start_day = value }
|
290
|
+
when 'subscription_start_month' then variants.each { |v| v.subscription_start_month = value }
|
291
|
+
when 'is_bundle' then variants.each { |v| v.is_bundle = value }
|
292
|
+
when 'flat_rate_shipping' then variants.each { |v| v.flat_rate_shipping = value }
|
293
|
+
when 'flat_rate_shipping_single' then variants.each { |v| v.flat_rate_shipping_single = value }
|
294
|
+
when 'flat_rate_shipping_combined' then variants.each { |v| v.flat_rate_shipping_combined = value }
|
295
|
+
when 'flat_rate_shipping_package_id' then variants.each { |v| v.flat_rate_shipping_package_id = value }
|
296
|
+
when 'flat_rate_shipping_method_id' then variants.each { |v| v.flat_rate_shipping_method_id = value }
|
297
|
+
when 'flat_rate_shipping_package_method_id' then
|
298
|
+
arr = value.split('_')
|
299
|
+
variants.each do |v|
|
300
|
+
v.flat_rate_shipping_package_id = arr[0].to_i
|
301
|
+
v.flat_rate_shipping_method_id = arr[1].to_i
|
302
|
+
end
|
281
303
|
when 'sale_price'
|
282
304
|
variants.each_with_index do |v, i|
|
283
305
|
v.sale_price = value
|
@@ -323,67 +345,6 @@ module Caboose
|
|
323
345
|
resp.success = true
|
324
346
|
render :json => resp
|
325
347
|
end
|
326
|
-
|
327
|
-
# @route PUT /admin/products/:product_id/variants/:id
|
328
|
-
def admin_update
|
329
|
-
return if !user_is_allowed('variants', 'edit')
|
330
|
-
|
331
|
-
resp = Caboose::StdClass.new({'attributes' => {}})
|
332
|
-
v = Variant.find(params[:id])
|
333
|
-
|
334
|
-
save = true
|
335
|
-
params.each do |name,value|
|
336
|
-
case name
|
337
|
-
when 'alternate_id' then v.alternate_id = value
|
338
|
-
when 'sku' then v.sku = value
|
339
|
-
when 'barcode' then v.barcode = value
|
340
|
-
when 'cost' then v.cost = value
|
341
|
-
when 'price' then v.price = value
|
342
|
-
when 'quantity_in_stock' then v.quantity_in_stock = value
|
343
|
-
when 'ignore_quantity' then v.ignore_quantity = value
|
344
|
-
when 'allow_backorder' then v.allow_backorder = value
|
345
|
-
when 'clearance' then v.clearance = value
|
346
|
-
when 'clearance_price' then v.clearance_price = value
|
347
|
-
when 'status' then v.status = value
|
348
|
-
when 'weight' then v.weight = value
|
349
|
-
when 'length' then v.length = value
|
350
|
-
when 'width' then v.width = value
|
351
|
-
when 'height' then v.height = value
|
352
|
-
when 'option1' then v.option1 = value
|
353
|
-
when 'option2' then v.option2 = value
|
354
|
-
when 'option3' then v.option3 = value
|
355
|
-
when 'requires_shipping' then v.requires_shipping = value
|
356
|
-
when 'taxable' then v.taxable = value
|
357
|
-
when 'is_bundle' then v.is_bundle = value
|
358
|
-
when 'flat_rate_shipping' then v.flat_rate_shipping = value
|
359
|
-
when 'flat_rate_shipping_single' then v.flat_rate_shipping_single = value
|
360
|
-
when 'flat_rate_shipping_combined' then v.flat_rate_shipping_combined = value
|
361
|
-
when 'flat_rate_shipping_package_id' then v.flat_rate_shipping_package_id = value
|
362
|
-
when 'flat_rate_shipping_method_id' then v.flat_rate_shipping_method_id = value
|
363
|
-
when 'flat_rate_shipping_package_method_id' then
|
364
|
-
arr = value.split('_')
|
365
|
-
v.flat_rate_shipping_package_id = arr[0].to_i
|
366
|
-
v.flat_rate_shipping_method_id = arr[1].to_i
|
367
|
-
when 'downloadable' then v.downloadable = value
|
368
|
-
when 'download_path' then v.download_path = value
|
369
|
-
|
370
|
-
when 'sale_price'
|
371
|
-
v.sale_price = value
|
372
|
-
v.product.delay(:run_at => 3.seconds.from_now, :queue => 'caboose_store').update_on_sale
|
373
|
-
when 'date_sale_starts'
|
374
|
-
v.date_sale_starts = ModelBinder.local_datetime_to_utc(value, @logged_in_user.timezone)
|
375
|
-
v.product.delay(:run_at => v.date_sale_starts, :queue => 'caboose_store').update_on_sale
|
376
|
-
v.product.delay(:run_at => 3.seconds.from_now, :queue => 'caboose_store').update_on_sale
|
377
|
-
when 'date_sale_ends'
|
378
|
-
v.date_sale_ends = ModelBinder.local_datetime_to_utc(value, @logged_in_user.timezone)
|
379
|
-
v.product.delay(:run_at => v.date_sale_ends , :queue => 'caboose_store').update_on_sale
|
380
|
-
v.product.delay(:run_at => 3.seconds.from_now, :queue => 'caboose_store').update_on_sale
|
381
|
-
|
382
|
-
end
|
383
|
-
end
|
384
|
-
resp.success = save && v.save
|
385
|
-
render :json => resp
|
386
|
-
end
|
387
348
|
|
388
349
|
# @route GET /admin/variants/group
|
389
350
|
def admin_group
|
@@ -528,17 +489,39 @@ module Caboose
|
|
528
489
|
#===========================================================================
|
529
490
|
|
530
491
|
# @route_priority 1
|
531
|
-
# @route GET /admin/variants
|
532
|
-
def
|
533
|
-
|
492
|
+
# @route GET /admin/variants/:field-options
|
493
|
+
def admin_options
|
494
|
+
if !user_is_allowed('variants', 'edit')
|
495
|
+
render :json => false
|
496
|
+
return
|
497
|
+
end
|
498
|
+
|
534
499
|
options = []
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
500
|
+
case params[:field]
|
501
|
+
when 'subscription-interval'
|
502
|
+
options = [
|
503
|
+
{ 'value' => Variant::SUBSCRIPTION_INTERVAL_MONTHLY , 'text' => 'Monthly' },
|
504
|
+
{ 'value' => Variant::SUBSCRIPTION_INTERVAL_YEARLY , 'text' => 'Yearly' }
|
505
|
+
]
|
506
|
+
when 'subscription-prorate-method'
|
507
|
+
options = [
|
508
|
+
{ 'value' => Variant::SUBSCRIPTION_PRORATE_METHOD_FLAT , 'text' => 'Flat Amount' },
|
509
|
+
{ 'value' => Variant::SUBSCRIPTION_PRORATE_METHOD_PERCENTAGE , 'text' => 'Percentage of Interval' },
|
510
|
+
{ 'value' => Variant::SUBSCRIPTION_PRORATE_METHOD_CUSTOM , 'text' => 'Custom' }
|
511
|
+
]
|
512
|
+
when 'subscription-start-day'
|
513
|
+
options = (1..31).collect{ |i| { 'value' => i, 'text' => i }}
|
514
|
+
when 'subscription-start-month'
|
515
|
+
options = (1..12).collect{ |i| { 'value' => i, 'text' => Date.new(2000, i, 1).strftime('%B') }}
|
516
|
+
when 'status'
|
517
|
+
options = [
|
518
|
+
{ 'value' => Variant::STATUS_ACTIVE , 'text' => 'Active' },
|
519
|
+
{ 'value' => Variant::STATUS_INACTIVE , 'text' => 'Inactive' },
|
520
|
+
{ 'value' => Variant::STATUS_DELETED , 'text' => 'Deleted' }
|
521
|
+
]
|
540
522
|
end
|
541
523
|
render :json => options
|
542
524
|
end
|
525
|
+
|
543
526
|
end
|
544
527
|
end
|