caboose-cms 0.5.64 → 0.5.66
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 +8 -8
- data/app/assets/javascripts/caboose/admin.js +1 -1
- data/app/assets/javascripts/caboose/admin_edit_order.js +724 -0
- data/app/assets/javascripts/caboose/cart2.js +4 -4
- data/app/assets/javascripts/caboose/model/index_table.js +122 -80
- data/app/assets/stylesheets/caboose/admin_main.css +8 -0
- data/app/controllers/caboose/application_controller.rb +1 -1
- data/app/controllers/caboose/block_type_sources_controller.rb +1 -1
- data/app/controllers/caboose/block_types_controller.rb +1 -1
- data/app/controllers/caboose/calendars_controller.rb +1 -1
- data/app/controllers/caboose/cart_controller.rb +8 -1
- data/app/controllers/caboose/checkout_controller.rb +17 -9
- data/app/controllers/caboose/line_items_controller.rb +135 -0
- data/app/controllers/caboose/order_packages_controller.rb +304 -0
- data/app/controllers/caboose/orders_controller.rb +31 -74
- data/app/controllers/caboose/pages_controller.rb +2 -1
- data/app/controllers/caboose/product_images_controller.rb +11 -0
- data/app/controllers/caboose/products_controller.rb +25 -8
- data/app/controllers/caboose/shipping_addresses_controller.rb +46 -0
- data/app/controllers/caboose/shipping_packages_controller.rb +125 -54
- data/app/controllers/caboose/sites_controller.rb +2 -79
- data/app/controllers/caboose/smtp_controller.rb +52 -0
- data/app/controllers/caboose/store_controller.rb +94 -0
- data/app/controllers/caboose/vendors_controller.rb +25 -4
- data/app/models/caboose/address.rb +1 -3
- data/app/models/caboose/caboose_plugin.rb +1 -1
- data/app/models/caboose/category.rb +18 -0
- data/app/models/caboose/core_plugin.rb +21 -19
- data/app/models/caboose/order.rb +12 -7
- data/app/models/caboose/order_package.rb +5 -2
- data/app/models/caboose/order_transaction.rb +25 -0
- data/app/models/caboose/page.rb +1 -1
- data/app/models/caboose/schema.rb +50 -22
- data/app/models/caboose/shipping_calculator.rb +26 -30
- data/app/models/caboose/shipping_package.rb +45 -5
- data/app/models/caboose/store_config.rb +18 -6
- data/app/models/caboose/tax_calculator.rb +6 -5
- data/app/views/caboose/blocks/admin_edit.html.erb +1 -1
- data/app/views/caboose/line_items/admin_new.html.erb +100 -0
- data/app/views/caboose/orders/admin_edit.html.erb +21 -247
- data/app/views/caboose/orders/admin_edit_old.html.erb +155 -0
- data/app/views/caboose/orders/admin_new.html.erb +8 -23
- data/app/views/caboose/products/#Untitled-1# +0 -0
- data/app/views/caboose/products/admin_edit_images.html.erb +20 -4
- data/app/views/caboose/products/admin_index.html.erb +9 -3
- data/app/views/caboose/products/admin_sort.html.erb +138 -142
- data/app/views/caboose/roles/index.html.erb +1 -1
- data/app/views/caboose/shipping_packages/admin_edit.html.erb +52 -137
- data/app/views/caboose/shipping_packages/admin_index.html.erb +56 -19
- data/app/views/caboose/sites/_admin_header.html.erb +3 -5
- data/app/views/caboose/sites/admin_edit.html.erb +5 -3
- data/app/views/caboose/smtp/admin_edit.html.erb +41 -0
- data/app/views/caboose/station/index.html.erb +1 -1
- data/app/views/caboose/store/admin_edit.html.erb +96 -0
- data/app/views/caboose/vendors/admin_edit.html.erb +7 -3
- data/app/views/layouts/caboose/_station.html.erb +1 -1
- data/config/routes.rb +67 -25
- data/lib/caboose/engine.rb +1 -1
- data/lib/caboose/version.rb +1 -1
- metadata +28 -5
- data/app/views/caboose/shipping_packages/admin_new.html.erb +0 -33
- data/app/views/caboose/sites/admin_edit_smtp_config.html.erb +0 -51
- data/app/views/caboose/sites/admin_edit_store_config.html.erb +0 -77
@@ -0,0 +1,135 @@
|
|
1
|
+
module Caboose
|
2
|
+
class LineItemsController < Caboose::ApplicationController
|
3
|
+
|
4
|
+
# GET /admin/orders/:id/line-items/json
|
5
|
+
def admin_json
|
6
|
+
return if !user_is_allowed('orders', 'edit')
|
7
|
+
order = Order.find(params[:id])
|
8
|
+
render :json => order.line_items.as_json(:include => :order_package)
|
9
|
+
end
|
10
|
+
|
11
|
+
# GET /admin/orders/:order_id/line-items/new
|
12
|
+
def admin_new
|
13
|
+
return if !user_is_allowed('orders', 'edit')
|
14
|
+
render :layout => 'caboose/modal'
|
15
|
+
end
|
16
|
+
|
17
|
+
# POST /admin/orders/:order_id/line-items
|
18
|
+
def admin_add
|
19
|
+
return if !user_is_allowed('orders', 'edit')
|
20
|
+
|
21
|
+
resp = StdClass.new
|
22
|
+
v = Variant.find(params[:variant_id])
|
23
|
+
li = LineItem.new(
|
24
|
+
:order_id => params[:order_id],
|
25
|
+
:variant_id => params[:variant_id],
|
26
|
+
:quantity => 1,
|
27
|
+
:price => v.price,
|
28
|
+
:status => 'pending'
|
29
|
+
)
|
30
|
+
resp.success = li.save
|
31
|
+
render :json => resp
|
32
|
+
end
|
33
|
+
|
34
|
+
# PUT /admin/orders/:order_id/line-items/:id
|
35
|
+
def admin_update
|
36
|
+
return if !user_is_allowed('orders', 'edit')
|
37
|
+
|
38
|
+
resp = Caboose::StdClass.new({'attributes' => {}})
|
39
|
+
li = LineItem.find(params[:id])
|
40
|
+
|
41
|
+
save = true
|
42
|
+
send_status_email = false
|
43
|
+
params.each do |name,value|
|
44
|
+
case name
|
45
|
+
when 'order_id' then li.order_id = value
|
46
|
+
when 'order_package_id' then li.order_package_id = value
|
47
|
+
when 'variant_id' then li.variant_id = value
|
48
|
+
when 'parent_id' then li.parent_id = value
|
49
|
+
when 'price' then li.price = value
|
50
|
+
when 'notes' then li.notes = value
|
51
|
+
when 'custom1' then li.custom1 = value
|
52
|
+
when 'custom2' then li.custom2 = value
|
53
|
+
when 'custom3' then li.custom3 = value
|
54
|
+
when 'quantity'
|
55
|
+
li.quantity = value
|
56
|
+
li.save
|
57
|
+
|
58
|
+
# Recalculate everything
|
59
|
+
r = ShippingCalculator.rate(li.order, li.order.shipping_method_code)
|
60
|
+
li.order.shipping = r['negotiated_rate'] / 100
|
61
|
+
li.order.handling = (r['negotiated_rate'] / 100) * 0.05
|
62
|
+
tax_rate = TaxCalculator.tax_rate(li.order.shipping_address)
|
63
|
+
li.order.tax = li.order.subtotal * tax_rate
|
64
|
+
li.order.calculate_total
|
65
|
+
li.order.save
|
66
|
+
|
67
|
+
when 'tracking_number'
|
68
|
+
li.tracking_number = value
|
69
|
+
send_status_email = true
|
70
|
+
when 'status'
|
71
|
+
li.status = value
|
72
|
+
resp.attributes['status'] = {'text' => value}
|
73
|
+
send_status_email = true
|
74
|
+
end
|
75
|
+
end
|
76
|
+
if send_status_email
|
77
|
+
OrdersMailer.customer_status_updated(li.order).deliver
|
78
|
+
end
|
79
|
+
resp.success = save && li.save
|
80
|
+
render :json => resp
|
81
|
+
end
|
82
|
+
|
83
|
+
# DELETE /admin/orders/:order_id/line-items/:id
|
84
|
+
def admin_delete
|
85
|
+
return if !user_is_allowed('orders', 'delete')
|
86
|
+
li = LineItem.find(params[:id])
|
87
|
+
order = li.order
|
88
|
+
li.destroy
|
89
|
+
order.calculate_total
|
90
|
+
order.save
|
91
|
+
render :json => Caboose::StdClass.new({
|
92
|
+
:redirect => '/admin/orders'
|
93
|
+
})
|
94
|
+
end
|
95
|
+
|
96
|
+
# GET /admin/orders/:order_id/line-items/:id/highlight
|
97
|
+
def admin_highlight
|
98
|
+
return if !user_is_allowed('orders', 'view')
|
99
|
+
li = LineItem.find(params[:id])
|
100
|
+
v = li.variant
|
101
|
+
redirect_to "/admin/products/#{v.product_id}/variants?highlight=#{v.id}"
|
102
|
+
end
|
103
|
+
|
104
|
+
# GET /admin/orders/line-items/status-options
|
105
|
+
def admin_status_options
|
106
|
+
arr = ['pending', 'ready to ship', 'shipped', 'backordered', 'canceled']
|
107
|
+
options = []
|
108
|
+
arr.each do |status|
|
109
|
+
options << {
|
110
|
+
:value => status,
|
111
|
+
:text => status
|
112
|
+
}
|
113
|
+
end
|
114
|
+
render :json => options
|
115
|
+
end
|
116
|
+
|
117
|
+
# GET /admin/line-items/product-stubs
|
118
|
+
def admin_product_stubs
|
119
|
+
title = params[:title].strip.downcase.split(' ')
|
120
|
+
render :json => [] and return if title.length == 0
|
121
|
+
where = []
|
122
|
+
query = [""]
|
123
|
+
title.each do |str|
|
124
|
+
where << 'lower(title) like ?'
|
125
|
+
query << "%#{str}%"
|
126
|
+
end
|
127
|
+
where = where.join(' and ')
|
128
|
+
query[0] = "select id, title from store_products where #{where} order by title limit 20"
|
129
|
+
rows = ActiveRecord::Base.connection.select_rows(ActiveRecord::Base.send(:sanitize_sql_array, query))
|
130
|
+
arr = rows.collect{ |row| { :id => row[0], :title => row[1] }}
|
131
|
+
render :json => arr
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,304 @@
|
|
1
|
+
module Caboose
|
2
|
+
class OrderPackagesController < Caboose::ApplicationController
|
3
|
+
|
4
|
+
# GET /admin/orders/:order_id/packages/json
|
5
|
+
def admin_json
|
6
|
+
return if !user_is_allowed('orders', 'view')
|
7
|
+
order = Order.find(params[:order_id])
|
8
|
+
render :json => order.packages.as_json(
|
9
|
+
:include => { :shipping_package => { :include => :shipping_methods} }
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
# POST /admin/orders/:order_id/packages
|
14
|
+
def admin_add
|
15
|
+
return if !user_is_allowed('orders', 'add')
|
16
|
+
|
17
|
+
resp = StdClass.new
|
18
|
+
|
19
|
+
if params[:shipping_package_id].strip.length == 0 then resp.error = "Please select a shipping package."
|
20
|
+
elsif params[:shipping_method_id].strip.length == 0 then resp.error = "Please select a shipping method."
|
21
|
+
else
|
22
|
+
|
23
|
+
op = OrderPackage.new(
|
24
|
+
:order_id => params[:order_id],
|
25
|
+
:shipping_package_id => params[:shipping_package_id],
|
26
|
+
:shipping_method_id => params[:shipping_method_id],
|
27
|
+
:status => OrderPackage::STATUS_PENDING
|
28
|
+
)
|
29
|
+
op.save
|
30
|
+
resp.new_id = op.id
|
31
|
+
resp.redirect = "/admin/orders/#{params[:order_id]}/packages/#{op.id}"
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
render :json => resp
|
36
|
+
end
|
37
|
+
|
38
|
+
# PUT /admin/orders/:order_id/packages/:id
|
39
|
+
def admin_update
|
40
|
+
return if !user_is_allowed('orders', 'edit')
|
41
|
+
|
42
|
+
resp = Caboose::StdClass.new
|
43
|
+
op = OrderPackage.find(params[:id])
|
44
|
+
|
45
|
+
save = true
|
46
|
+
params.each do |name,value|
|
47
|
+
case name
|
48
|
+
when 'order_id' then op.order_id = value
|
49
|
+
when 'shipping_method_id' then op.shipping_method_id = value
|
50
|
+
when 'shipping_package_id' then op.shipping_package_id = value
|
51
|
+
when 'status' then op.status = value
|
52
|
+
when 'tracking_number' then op.tracking_number = value
|
53
|
+
when 'total' then op.total = value
|
54
|
+
when 'package_method' then
|
55
|
+
arr = value.split('_')
|
56
|
+
op.shipping_package_id = arr[0]
|
57
|
+
op.shipping_method_id = arr[1]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
op.order.calculate_total
|
61
|
+
resp.success = save && op.save
|
62
|
+
render :json => resp
|
63
|
+
end
|
64
|
+
|
65
|
+
# PUT /admin/orders/:order_id/line-items/:id
|
66
|
+
def admin_update_line_item
|
67
|
+
return if !user_is_allowed('orders', 'edit')
|
68
|
+
|
69
|
+
resp = Caboose::StdClass.new({'attributes' => {}})
|
70
|
+
li = LineItem.find(params[:id])
|
71
|
+
|
72
|
+
save = true
|
73
|
+
send_status_email = false
|
74
|
+
params.each do |name,value|
|
75
|
+
case name
|
76
|
+
when 'quantity'
|
77
|
+
li.quantity = value
|
78
|
+
li.save
|
79
|
+
|
80
|
+
# Recalculate everything
|
81
|
+
r = ShippingCalculator.rate(li.order, li.order.shipping_method_code)
|
82
|
+
li.order.shipping = r['negotiated_rate'] / 100
|
83
|
+
li.order.handling = (r['negotiated_rate'] / 100) * 0.05
|
84
|
+
tax_rate = TaxCalculator.tax_rate(li.order.shipping_address)
|
85
|
+
li.order.tax = li.order.subtotal * tax_rate
|
86
|
+
li.order.calculate_total
|
87
|
+
li.order.save
|
88
|
+
|
89
|
+
when 'tracking_number'
|
90
|
+
li.tracking_number = value
|
91
|
+
send_status_email = true
|
92
|
+
when 'status'
|
93
|
+
li.status = value
|
94
|
+
resp.attributes['status'] = {'text' => value}
|
95
|
+
send_status_email = true
|
96
|
+
end
|
97
|
+
end
|
98
|
+
if send_status_email
|
99
|
+
OrdersMailer.customer_status_updated(li.order).deliver
|
100
|
+
end
|
101
|
+
resp.success = save && li.save
|
102
|
+
render :json => resp
|
103
|
+
end
|
104
|
+
|
105
|
+
# DELETE /admin/orders/:order_id/packages/:id
|
106
|
+
def admin_delete
|
107
|
+
return if !user_is_allowed('orders', 'delete')
|
108
|
+
resp = StdClass.new
|
109
|
+
op = OrderPackage.find(params[:id])
|
110
|
+
if op.line_items.nil? || op.line_items.count == 0
|
111
|
+
op.destroy
|
112
|
+
resp.redirect = "/admin/orders/#{params[:order_id]}"
|
113
|
+
else
|
114
|
+
resp.error = "Only empty packages can be deleted."
|
115
|
+
end
|
116
|
+
render :json => resp
|
117
|
+
end
|
118
|
+
|
119
|
+
# GET /admin/orders/line-item-status-options
|
120
|
+
def admin_line_item_status_options
|
121
|
+
arr = ['pending', 'ready to ship', 'shipped', 'backordered', 'canceled']
|
122
|
+
options = []
|
123
|
+
arr.each do |status|
|
124
|
+
options << {
|
125
|
+
:value => status,
|
126
|
+
:text => status
|
127
|
+
}
|
128
|
+
end
|
129
|
+
render :json => options
|
130
|
+
end
|
131
|
+
|
132
|
+
# GET /admin/orders/:id/capture
|
133
|
+
def capture_funds
|
134
|
+
return if !user_is_allowed('orders', 'edit')
|
135
|
+
|
136
|
+
response = Caboose::StdClass.new({
|
137
|
+
'refresh' => nil,
|
138
|
+
'error' => nil,
|
139
|
+
'success' => nil
|
140
|
+
})
|
141
|
+
|
142
|
+
order = Order.find(params[:id])
|
143
|
+
|
144
|
+
if order.financial_status == 'captured'
|
145
|
+
resp.error = "Funds for this order have already been captured."
|
146
|
+
elsif order.total > order.auth_amount
|
147
|
+
resp.error = "The order total exceeds the authorized amount."
|
148
|
+
else
|
149
|
+
if PaymentProcessor.capture(order)
|
150
|
+
order.update_attribute(:financial_status, 'captured')
|
151
|
+
response.success = 'Captured funds successfully'
|
152
|
+
else
|
153
|
+
response.error = 'Error capturing funds'
|
154
|
+
end
|
155
|
+
|
156
|
+
#if (order.discounts.any? && order.total < order.discounts.first.amount_current) || PaymentProcessor.capture(order)
|
157
|
+
# order.financial_status = 'captured'
|
158
|
+
# order.save
|
159
|
+
#
|
160
|
+
# if order.discounts.any?
|
161
|
+
# order.update_attribute(:amount_discounted, order.discounts.first.amount_current)
|
162
|
+
# order.update_gift_cards
|
163
|
+
# end
|
164
|
+
#
|
165
|
+
# response.success = "Captured funds successfully"
|
166
|
+
#else
|
167
|
+
# response.error = "Error capturing funds."
|
168
|
+
#end
|
169
|
+
end
|
170
|
+
|
171
|
+
render :json => response
|
172
|
+
end
|
173
|
+
|
174
|
+
# GET /admin/orders/:id/void
|
175
|
+
#def void
|
176
|
+
# return if !user_is_allowed('orders', 'edit')
|
177
|
+
#
|
178
|
+
# response = Caboose::StdClass.new({
|
179
|
+
# 'refresh' => nil,
|
180
|
+
# 'error' => nil,
|
181
|
+
# 'success' => nil
|
182
|
+
# })
|
183
|
+
#
|
184
|
+
# order = Order.find(params[:id])
|
185
|
+
#
|
186
|
+
# if order.financial_status == 'captured'
|
187
|
+
# response.error = "This order has already been captured, you will need to refund instead"
|
188
|
+
# else
|
189
|
+
# if order.total < order.amount_discounted || PaymentProcessor.void(order)
|
190
|
+
# order.financial_status = 'cancelled'
|
191
|
+
# order.status = 'voided'
|
192
|
+
# order.save
|
193
|
+
#
|
194
|
+
# response.success = "Order voided successfully"
|
195
|
+
# else
|
196
|
+
# response.error = "Error voiding order."
|
197
|
+
# end
|
198
|
+
# end
|
199
|
+
#
|
200
|
+
# render json: response
|
201
|
+
#end
|
202
|
+
|
203
|
+
# GET /admin/orders/:id/refund
|
204
|
+
# def refund
|
205
|
+
# return if !user_is_allowed('orders', 'edit')
|
206
|
+
#
|
207
|
+
# response = Caboose::StdClass.new({
|
208
|
+
# 'refresh' => nil,
|
209
|
+
# 'error' => nil,
|
210
|
+
# 'success' => nil
|
211
|
+
# })
|
212
|
+
#
|
213
|
+
# order = Order.find(params[:id])
|
214
|
+
#
|
215
|
+
# if order.financial_status != 'captured'
|
216
|
+
# response.error = "This order hasn't been captured yet, you will need to void instead"
|
217
|
+
# else
|
218
|
+
# ap order.total
|
219
|
+
# ap order.amount_discounted
|
220
|
+
#
|
221
|
+
# if order.total < order.amount_discounted || PaymentProcessor.refund(order)
|
222
|
+
# order.financial_status = 'refunded'
|
223
|
+
# order.status = 'refunded'
|
224
|
+
# order.save
|
225
|
+
#
|
226
|
+
# discount = order.discounts.first
|
227
|
+
# ap '==========================='
|
228
|
+
# ap order.amount_discounted + discount.amount_current
|
229
|
+
# ap '==========================='
|
230
|
+
# discount.update_attribute(:amount_current, order.amount_discounted + discount.amount_current) if order.discounts.any?
|
231
|
+
#
|
232
|
+
# response.success = "Order refunded successfully"
|
233
|
+
# else
|
234
|
+
# response.error = "Error refunding order."
|
235
|
+
# end
|
236
|
+
# end
|
237
|
+
#
|
238
|
+
# render json: response
|
239
|
+
# end
|
240
|
+
|
241
|
+
# GET /admin/orders/status-options
|
242
|
+
def admin_status_options
|
243
|
+
return if !user_is_allowed('categories', 'view')
|
244
|
+
statuses = ['cart', 'pending', 'ready to ship', 'shipped', 'canceled']
|
245
|
+
options = []
|
246
|
+
statuses.each do |s|
|
247
|
+
options << {
|
248
|
+
'text' => s,
|
249
|
+
'value' => s
|
250
|
+
}
|
251
|
+
end
|
252
|
+
render :json => options
|
253
|
+
end
|
254
|
+
|
255
|
+
# GET /admin/orders/test-info
|
256
|
+
def admin_mail_test_info
|
257
|
+
TestMailer.test_info.deliver
|
258
|
+
render :text => "Sent email to info@tuskwearcollection.com on #{DateTime.now.strftime("%F %T")}"
|
259
|
+
end
|
260
|
+
|
261
|
+
# GET /admin/orders/test-gmail
|
262
|
+
def admin_mail_test_gmail
|
263
|
+
TestMailer.test_gmail.deliver
|
264
|
+
render :text => "Sent email to william@nine.is on #{DateTime.now.strftime("%F %T")}"
|
265
|
+
end
|
266
|
+
|
267
|
+
# GET /admin/orders/google-feed
|
268
|
+
def admin_google_feed
|
269
|
+
d2 = DateTime.now
|
270
|
+
d1 = DateTime.now
|
271
|
+
if Caboose::Setting.exists?(:name => 'google_feed_date_last_submitted')
|
272
|
+
d1 = Caboose::Setting.where(:name => 'google_feed_date_last_submitted').first.value
|
273
|
+
d1 = DateTime.parse(d1)
|
274
|
+
elsif Order.exists?("status = 'shipped' and date_authorized is not null")
|
275
|
+
d1 = Order.where("status = ? and date_authorized is not null", 'shipped').reorder("date_authorized DESC").limit(1).pluck('date_authorized')
|
276
|
+
d1 = DateTime.parse(d1)
|
277
|
+
end
|
278
|
+
|
279
|
+
# Google Feed Docs
|
280
|
+
# https://support.google.com/trustedstoresmerchant/answer/3272612?hl=en&ref_topic=3272286?hl=en
|
281
|
+
tsv = ["merchant order id\ttracking number\tcarrier code\tother carrier name\tship date"]
|
282
|
+
if Order.exists?("status = 'shipped' and date_authorized > '#{d1.strftime("%F %T")}'")
|
283
|
+
Order.where("status = ? and date_authorized > ?", 'shipped', d1).reorder(:id).all.each do |order|
|
284
|
+
tracking_numbers = order.line_items.collect{ |li| li.tracking_number }.compact.uniq
|
285
|
+
tn = tracking_numbers && tracking_numbers.count >= 1 ? tracking_numbers[0] : ""
|
286
|
+
tsv << "#{order.id}\t#{tn}\tUPS\t\t#{order.date_shipped.strftime("%F")}"
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
# Save when we made the last call
|
291
|
+
setting = if Caboose::Setting.exists?(:name => 'google_feed_date_last_submitted')
|
292
|
+
Caboose::Setting.where(:name => 'google_feed_date_last_submitted').first
|
293
|
+
else
|
294
|
+
Caboose::Setting.new(:name => 'google_feed_date_last_submitted')
|
295
|
+
end
|
296
|
+
|
297
|
+
setting.value = d2.strftime("%F %T")
|
298
|
+
setting.save
|
299
|
+
|
300
|
+
# Print out the lines
|
301
|
+
render :text => tsv.join("\n")
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
@@ -27,10 +27,19 @@ module Caboose
|
|
27
27
|
|
28
28
|
# GET /admin/orders/new
|
29
29
|
def admin_new
|
30
|
-
return if !user_is_allowed('orders', 'add')
|
31
|
-
@products = Product.by_title
|
30
|
+
return if !user_is_allowed('orders', 'add')
|
32
31
|
render :layout => 'caboose/admin'
|
33
32
|
end
|
33
|
+
|
34
|
+
# POST /admin/orders
|
35
|
+
def admin_add
|
36
|
+
return if !user_is_allowed('orders', 'add')
|
37
|
+
order = Order.create(
|
38
|
+
:status => 'pending',
|
39
|
+
:financial_status => 'pending'
|
40
|
+
)
|
41
|
+
render :json => { :sucess => true, :redirect => "/admin/orders/#{order.id}" }
|
42
|
+
end
|
34
43
|
|
35
44
|
# GET /admin/orders/:id
|
36
45
|
def admin_edit
|
@@ -160,7 +169,19 @@ module Caboose
|
|
160
169
|
def admin_json
|
161
170
|
return if !user_is_allowed('orders', 'edit')
|
162
171
|
order = Order.find(params[:id])
|
163
|
-
|
172
|
+
if order.shipping_address_id.nil?
|
173
|
+
sa = Address.create
|
174
|
+
order.shipping_address_id = sa.id
|
175
|
+
order.save
|
176
|
+
end
|
177
|
+
render :json => order.as_json(:include => [
|
178
|
+
{ :line_items => { :include => { :variant => { :include => :product }}}},
|
179
|
+
{ :order_packages => { :include => [:shipping_package, :shipping_method] }},
|
180
|
+
:customer,
|
181
|
+
:shipping_address,
|
182
|
+
:billing_address,
|
183
|
+
:order_transactions
|
184
|
+
])
|
164
185
|
end
|
165
186
|
|
166
187
|
# GET /admin/orders/:id/print
|
@@ -185,17 +206,12 @@ module Caboose
|
|
185
206
|
save = true
|
186
207
|
params.each do |name,value|
|
187
208
|
case name
|
188
|
-
when 'tax'
|
189
|
-
|
190
|
-
when '
|
191
|
-
|
192
|
-
when '
|
193
|
-
|
194
|
-
when 'discount'
|
195
|
-
order.discount = value
|
196
|
-
when 'status'
|
197
|
-
order.status = value
|
198
|
-
resp.attributes['status'] = {'text' => value}
|
209
|
+
when 'tax' then order.tax = value
|
210
|
+
when 'shipping' then order.shipping = value
|
211
|
+
when 'handling' then order.handling = value
|
212
|
+
when 'discount' then order.discount = value
|
213
|
+
when 'status' then order.status = value
|
214
|
+
when 'customer_id' then order.customer_id = value
|
199
215
|
end
|
200
216
|
end
|
201
217
|
order.calculate_total
|
@@ -203,46 +219,6 @@ module Caboose
|
|
203
219
|
render :json => resp
|
204
220
|
end
|
205
221
|
|
206
|
-
# PUT /admin/orders/:order_id/line-items/:id
|
207
|
-
def admin_update_line_item
|
208
|
-
return if !user_is_allowed('orders', 'edit')
|
209
|
-
|
210
|
-
resp = Caboose::StdClass.new({'attributes' => {}})
|
211
|
-
li = OrderLineItem.find(params[:id])
|
212
|
-
|
213
|
-
save = true
|
214
|
-
send_status_email = false
|
215
|
-
params.each do |name,value|
|
216
|
-
case name
|
217
|
-
when 'quantity'
|
218
|
-
li.quantity = value
|
219
|
-
li.save
|
220
|
-
|
221
|
-
# Recalculate everything
|
222
|
-
r = ShippingCalculator.rate(li.order, li.order.shipping_method_code)
|
223
|
-
li.order.shipping = r['negotiated_rate'] / 100
|
224
|
-
li.order.handling = (r['negotiated_rate'] / 100) * 0.05
|
225
|
-
tax_rate = TaxCalculator.tax_rate(li.order.shipping_address)
|
226
|
-
li.order.tax = li.order.subtotal * tax_rate
|
227
|
-
li.order.calculate_total
|
228
|
-
li.order.save
|
229
|
-
|
230
|
-
when 'tracking_number'
|
231
|
-
li.tracking_number = value
|
232
|
-
send_status_email = true
|
233
|
-
when 'status'
|
234
|
-
li.status = value
|
235
|
-
resp.attributes['status'] = {'text' => value}
|
236
|
-
send_status_email = true
|
237
|
-
end
|
238
|
-
end
|
239
|
-
if send_status_email
|
240
|
-
OrdersMailer.customer_status_updated(li.order).deliver
|
241
|
-
end
|
242
|
-
resp.success = save && li.save
|
243
|
-
render :json => resp
|
244
|
-
end
|
245
|
-
|
246
222
|
# DELETE /admin/orders/:id
|
247
223
|
def admin_delete
|
248
224
|
return if !user_is_allowed('orders', 'delete')
|
@@ -252,19 +228,6 @@ module Caboose
|
|
252
228
|
})
|
253
229
|
end
|
254
230
|
|
255
|
-
# GET /admin/orders/line-item-status-options
|
256
|
-
def admin_line_item_status_options
|
257
|
-
arr = ['pending', 'ready to ship', 'shipped', 'backordered', 'canceled']
|
258
|
-
options = []
|
259
|
-
arr.each do |status|
|
260
|
-
options << {
|
261
|
-
:value => status,
|
262
|
-
:text => status
|
263
|
-
}
|
264
|
-
end
|
265
|
-
render :json => options
|
266
|
-
end
|
267
|
-
|
268
231
|
# GET /admin/orders/:id/capture
|
269
232
|
def capture_funds
|
270
233
|
return if !user_is_allowed('orders', 'edit')
|
@@ -378,13 +341,7 @@ module Caboose
|
|
378
341
|
def admin_status_options
|
379
342
|
return if !user_is_allowed('categories', 'view')
|
380
343
|
statuses = ['cart', 'pending', 'ready to ship', 'shipped', 'canceled']
|
381
|
-
options =
|
382
|
-
statuses.each do |s|
|
383
|
-
options << {
|
384
|
-
'text' => s,
|
385
|
-
'value' => s
|
386
|
-
}
|
387
|
-
end
|
344
|
+
options = statuses.collect{ |s| { 'text' => s, 'value' => s }}
|
388
345
|
render :json => options
|
389
346
|
end
|
390
347
|
|