caboose-cms 0.8.78 → 0.8.79
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 +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
|