Class: Caboose::OrderPackagesController

Inherits:
ApplicationController show all
Defined in:
app/controllers/caboose/order_packages_controller.rb

Instance Method Summary collapse

Methods inherited from ApplicationController

#admin_bulk_add, #admin_bulk_delete, #admin_bulk_update, #admin_edit, #admin_index, #admin_json_single, #before_action, #before_before_action, #hashify_query_string, #init_cart, #logged_in?, #logged_in_user, #login_user, #logout_user, #parse_url_params, #reject_param, #user_is_allowed, #user_is_allowed_to, #validate_cookie, #validate_token, #var, #verify_logged_in

Instance Method Details

#admin_addObject

POST /admin/orders/:order_id/packages



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/controllers/caboose/order_packages_controller.rb', line 14

def admin_add
  return if !user_is_allowed('orders', 'add')
  
  resp = StdClass.new
                          
  if    params[:shipping_package_id].strip.length  == 0 then resp.error = "Please select a shipping package."
  elsif params[:shipping_method_id].strip.length   == 0 then resp.error = "Please select a shipping method."      
  else

    op = OrderPackage.new(
      :order_id            => params[:order_id],
      :shipping_package_id => params[:shipping_package_id],
      :shipping_method_id  => params[:shipping_method_id],
      :status              => OrderPackage::STATUS_PENDING          
    )        
    op.save        
    resp.new_id = op.id
    resp.redirect = "/admin/orders/#{params[:order_id]}/packages/#{op.id}"
    
  end
  
  render :json => resp
end

#admin_deleteObject

DELETE /admin/orders/:order_id/packages/:id



105
106
107
108
109
110
111
112
113
114
115
116
# File 'app/controllers/caboose/order_packages_controller.rb', line 105

def admin_delete
  return if !user_is_allowed('orders', 'delete')
  resp = StdClass.new
  op = OrderPackage.find(params[:id])
  if op.line_items.nil? || op.line_items.count == 0
    op.destroy
    resp.redirect = "/admin/orders/#{params[:order_id]}"
  else
    resp.error = "Only empty packages can be deleted."
  end
  render :json => resp
end

#admin_google_feedObject

GET /admin/orders/google-feed



267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'app/controllers/caboose/order_packages_controller.rb', line 267

def admin_google_feed
  d2 = DateTime.now
  d1 = DateTime.now
  if Caboose::Setting.exists?(:name => 'google_feed_date_last_submitted')                  
    d1 = Caboose::Setting.where(:name => 'google_feed_date_last_submitted').first.value      
    d1 = DateTime.parse(d1)
  elsif Order.exists?("status = 'shipped' and date_authorized is not null")
    d1 = Order.where("status = ? and date_authorized is not null", 'shipped').reorder("date_authorized DESC").limit(1).pluck('date_authorized')
    d1 = DateTime.parse(d1)
  end
  
  # Google Feed Docs
  # https://support.google.com/trustedstoresmerchant/answer/3272612?hl=en&ref_topic=3272286?hl=en
  tsv = ["merchant order id\ttracking number\tcarrier code\tother carrier name\tship date"]            
  if Order.exists?("status = 'shipped' and date_authorized > '#{d1.strftime("%F %T")}'")
    Order.where("status = ? and date_authorized > ?", 'shipped', d1).reorder(:id).all.each do |order|
      tracking_numbers = order.line_items.collect{ |li| li.tracking_number }.compact.uniq
      tn = tracking_numbers && tracking_numbers.count >= 1 ? tracking_numbers[0] : ""
      tsv << "#{order.id}\t#{tn}\tUPS\t\t#{order.date_shipped.strftime("%F")}"                              
    end
  end
  
  # Save when we made the last call
  setting = if Caboose::Setting.exists?(:name => 'google_feed_date_last_submitted')
    Caboose::Setting.where(:name => 'google_feed_date_last_submitted').first
  else
    Caboose::Setting.new(:name => 'google_feed_date_last_submitted')
  end
  
  setting.value = d2.strftime("%F %T")
  setting.save            
               
  # Print out the lines
  render :text => tsv.join("\n")
end

#admin_jsonObject

GET /admin/orders/:order_id/packages/json



5
6
7
8
9
10
11
# File 'app/controllers/caboose/order_packages_controller.rb', line 5

def admin_json      
  return if !user_is_allowed('orders', 'view')
  order = Order.find(params[:order_id])
  render :json => order.order_packages.as_json(
    :include => { :shipping_package => { :include => :shipping_methods} }
  )
end

#admin_line_item_status_optionsObject

GET /admin/orders/line-item-status-options



119
120
121
122
123
124
125
126
127
128
129
# File 'app/controllers/caboose/order_packages_controller.rb', line 119

def admin_line_item_status_options
  arr = ['pending', 'ready to ship', 'shipped', 'backordered', 'canceled']
  options = []
  arr.each do |status|
    options << {
      :value => status,
      :text  => status
    }
  end
  render :json => options
end

#admin_mail_test_gmailObject

GET /admin/orders/test-gmail



261
262
263
264
# File 'app/controllers/caboose/order_packages_controller.rb', line 261

def admin_mail_test_gmail
  TestMailer.test_gmail.deliver
  render :text => "Sent email to [email protected] on #{DateTime.now.strftime("%F %T")}"
end

#admin_mail_test_infoObject

GET /admin/orders/test-info



255
256
257
258
# File 'app/controllers/caboose/order_packages_controller.rb', line 255

def admin_mail_test_info
  TestMailer.test_info.deliver
  render :text => "Sent email to [email protected] on #{DateTime.now.strftime("%F %T")}"
end

#admin_status_optionsObject

GET /admin/orders/status-options



241
242
243
244
245
246
247
248
249
250
251
252
# File 'app/controllers/caboose/order_packages_controller.rb', line 241

def admin_status_options
  return if !user_is_allowed('categories', 'view')
  statuses = ['cart', 'pending', 'ready to ship', 'shipped', 'canceled']
  options = []
  statuses.each do |s|
    options << {
      'text' => s,
      'value' => s
    }
  end       
  render :json => options    
end

#admin_updateObject

PUT /admin/orders/:order_id/packages/:id



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'app/controllers/caboose/order_packages_controller.rb', line 39

def admin_update
  return if !user_is_allowed('orders', 'edit')
  
  resp = Caboose::StdClass.new
  op = OrderPackage.find(params[:id])    
  
  save = true    
  params.each do |name,value|
    case name
      when 'order_id'            then op.order_id              = value
      when 'shipping_method_id'  then op.shipping_method_id    = value
      when 'shipping_package_id' then op.shipping_package_id   = value
      when 'status'              then op.status                = value
      when 'tracking_number'     then op.tracking_number       = value
      when 'total'               then op.total                 = value
      when 'package_method'      then
        arr = value.split('_')
        op.shipping_package_id = arr[0]
        op.shipping_method_id = arr[1]                      
    end
  end
  op.order.calculate_total    
  resp.success = save && op.save
  render :json => resp
end

#admin_update_line_itemObject

PUT /admin/orders/:order_id/line-items/:id



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'app/controllers/caboose/order_packages_controller.rb', line 66

def admin_update_line_item
  return if !user_is_allowed('orders', 'edit')
  
  resp = Caboose::StdClass.new({'attributes' => {}})
  li = LineItem.find(params[:id])    
  
  save = true
  send_status_email = false    
  params.each do |name,value|
    case name
      when 'quantity'
        li.quantity = value
        li.save
                  	  
        # Recalculate everything
        r = ShippingCalculator.rate(li.order, li.order.shipping_method_code)
        li.order.shipping = r['negotiated_rate'] / 100
        li.order.handling = (r['negotiated_rate'] / 100) * 0.05
        li.order.tax = TaxCalculator.tax(li.order)            
        li.order.calculate_total
        li.order.save
        
      when 'tracking_number'
        li.tracking_number = value
        send_status_email = true
      when 'status'
        li.status = value
        resp.attributes['status'] = {'text' => value}
        send_status_email = true
    end
  end
  if send_status_email       
    OrdersMailer.configure_for_site(@site.id).customer_status_updated(li.order).deliver
  end
  resp.success = save && li.save
  render :json => resp
end

#capture_fundsObject

GET /admin/orders/:id/capture



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'app/controllers/caboose/order_packages_controller.rb', line 132

def capture_funds
  return if !user_is_allowed('orders', 'edit')
  
  response = Caboose::StdClass.new({
    'refresh' => nil,
    'error'   => nil,
    'success' => nil
  })
  
  order = Order.find(params[:id])
  
  if order.financial_status == 'captured'
    resp.error = "Funds for this order have already been captured."    
  elsif order.total > order.auth_amount
    resp.error = "The order total exceeds the authorized amount."
  else
    if PaymentProcessor.capture(order)
      order.update_attribute(:financial_status, 'captured')
      response.success = 'Captured funds successfully'
    else
      response.error = 'Error capturing funds'
    end
      
    #if (order.discounts.any? && order.total < order.discounts.first.amount_current) || PaymentProcessor.capture(order)
    #  order.financial_status = 'captured'
    #  order.save
    #  
    #  if order.discounts.any?
    #    order.update_attribute(:amount_discounted, order.discounts.first.amount_current)
    #    order.update_gift_cards
    #  end
    #  
    #  response.success = "Captured funds successfully"
    #else
    #  response.error = "Error capturing funds."
    #end
  end
  
  render :json => response
end