Class: Xpost::Orders

Inherits:
Object
  • Object
show all
Defined in:
lib/xpost/orders.rb

Class Method Summary collapse

Class Method Details

.all(auth_token, status = nil) ⇒ Object

cant actually get all orders since its paginated



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/xpost/orders.rb', line 13

def self.all(auth_token, status = nil)
  valid_xpost_statuses = ["pending", "confirmed", "for_pickup", "picked_up",
                          "failed_pickup", "failed_delivery", "claimed",
                          "return_in_transit", "returned", "failed_return",
                          "out_for_delivery", "for_consolidation", "consolidated",
                          "for_dropoff", "dropped_off", "for_transfer", "for_acceptance",
                          "accepted", "canceled", "in_transit", "delivered"]

  if valid_xpost_statuses.include?(status)
    all_orders_url = "orders?status=#{status}"
  else
    all_orders_url = "orders"
  end

  get_url(all_orders_url, headers: auth_header(auth_token))
end

.cancel(auth_token, tracking_number) ⇒ Object



73
74
75
76
77
78
79
# File 'lib/xpost/orders.rb', line 73

def self.cancel(auth_token, tracking_number)
  cancel_order_url = "orders/#{tracking_number}/cancel"
  raise "Order isn't pending" if Xpost::Orders.find(auth_token, tracking_number)[:status] != "pending"

  res = put_url(cancel_order_url, headers: auth_header(auth_token))
  res = res[:message] == "Not Found" ? "Not Found" : res
end

.confirm(auth_token, tracking_number, payment_reference_id = nil) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/xpost/orders.rb', line 62

def self.confirm(auth_token, tracking_number, payment_reference_id = nil)
  # TODO: these checks are expensive (potentially three back and forth requests)
  raise "Order not found" unless Xpost::Orders.exists?(auth_token, tracking_number)
  raise "Order isn't pending" if Xpost::Orders.find(auth_token, tracking_number)[:status] != "pending"

  confirm_order_url = "orders/#{tracking_number}/confirm"

  res = put_url(confirm_order_url, data: payment_reference_id, headers: auth_header(auth_token))
  res = res[:message] == "Not Found" ? "Not Found" : res
end

.create(auth_token, order = nil, shipment = nil, reference_id = nil) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/xpost/orders.rb', line 52

def self.create(auth_token, order = nil, shipment = nil, reference_id = nil)
  raise "Missing order data" if order.nil?
  raise "Missing shipment data" if shipment.nil?

  order.shipment = shipment
  order.reference_id = reference_id

  res = post_url("orders", data: order, headers: auth_header(auth_token))
end

.exists?(auth_token, tracking_number) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
50
# File 'lib/xpost/orders.rb', line 46

def self.exists?(auth_token, tracking_number)
  find_order_url  = "orders/#{tracking_number}"
  res = get_url(find_order_url, headers: auth_header(auth_token))
  res[:status] != 404 && res[:message] != "Not Found"
end

.find(auth_token, tracking_number) ⇒ Object

gets all the details of an order



31
32
33
34
35
36
# File 'lib/xpost/orders.rb', line 31

def self.find(auth_token, tracking_number)
  find_order_url  = "orders/#{tracking_number}"

  res = get_url(find_order_url, headers: auth_header(auth_token))
  res = res[:message] == "Not Found" ? "Not Found" : res
end

.for_pickup(auth_token, tracking_number, pickup_address) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
# File 'lib/xpost/orders.rb', line 81

def self.for_pickup(auth_token, tracking_number, pickup_address)
  raise "Order isn't confirmed" if Xpost::Orders.find(auth_token, tracking_number)[:status] != "confirmed"
  for_pickup_url = "orders/#{tracking_number}/for-pickup"

  raise "Missing pickup address" if pickup_address.nil?
  raise "Invalid pickup address" unless pickup_address.valid?
  pickup_address = { pickup_address: pickup_address.attributes }

  res = put_url(for_pickup_url, data: pickup_address, headers: auth_header(auth_token))
  res = res[:message] == "Not Found" ? "Not Found" : res
end

.get_shipping_labels(auth_token, tracking_number) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/xpost/orders.rb', line 93

def self.get_shipping_labels(auth_token, tracking_number)
  if tracking_number.kind_of?(Array)
    shipping_labels_url = "orders/download/awb/zebra"

    res = post_url(shipping_labels_url, data: tracking_number, headers: auth_header(auth_token))
    res = res[:message] == "Not Found" ? "Not Found" : res
  else
    raise "Order isn't for_pickup" if Xpost::Orders.find(auth_token, tracking_number)[:status] != "for_pickup"
    shipping_label_url = "orders/#{tracking_number}/awb?type=zebra"

    res = get_url(shipping_label_url, headers: auth_header(auth_token))
    res = res[:message] == "Not Found" ? "Not Found" : res
  end
end

.track(auth_token, tracking_number) ⇒ Object

only gets the order tat (turnaround time) info



39
40
41
42
43
44
# File 'lib/xpost/orders.rb', line 39

def self.track(auth_token, tracking_number)
  track_order_url = "orders/#{tracking_number}"

  res = get_url(track_order_url, headers: auth_header(auth_token))
  res = res[:message] == "Not Found" ? "Not Found" : { timeline: res[:tat], events: res[:events] }
end