aceroute 0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +6 -0
- data/LICENSE +22 -0
- data/LICENSE.txt +21 -0
- data/README.md +63 -0
- data/Rakefile +3 -0
- data/aceroute.gemspec +34 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/doc/.yardoc/checksums +3 -0
- data/doc/.yardoc/object_types +0 -0
- data/doc/.yardoc/objects/root.dat +0 -0
- data/doc/.yardoc/proxy_types +0 -0
- data/doc/AceRoute_API.pdf +0 -0
- data/doc/Aceroute/Base.html +135 -0
- data/doc/Aceroute/Customer.html +949 -0
- data/doc/Aceroute/Location.html +1111 -0
- data/doc/Aceroute/Order.html +1458 -0
- data/doc/Aceroute.html +1401 -0
- data/doc/Hashit.html +212 -0
- data/doc/_index.html +183 -0
- data/doc/class_list.html +58 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +156 -0
- data/doc/file_list.html +60 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +156 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +181 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +345 -0
- data/doc/top-level-namespace.html +114 -0
- data/lib/aceroute/base.rb +20 -0
- data/lib/aceroute/core.rb +192 -0
- data/lib/aceroute/customer.rb +69 -0
- data/lib/aceroute/hashit.rb +12 -0
- data/lib/aceroute/location.rb +62 -0
- data/lib/aceroute/order.rb +81 -0
- data/lib/aceroute/version.rb +3 -0
- data/lib/aceroute.rb +5 -0
- metadata +146 -0
@@ -0,0 +1,114 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6
|
+
<title>
|
7
|
+
Top Level Namespace
|
8
|
+
|
9
|
+
— Documentation by YARD 0.8.7.6
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
16
|
+
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
18
|
+
hasFrames = window.top.frames.main ? true : false;
|
19
|
+
relpath = '';
|
20
|
+
framesUrl = "frames.html#!top-level-namespace.html";
|
21
|
+
</script>
|
22
|
+
|
23
|
+
|
24
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
25
|
+
|
26
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
27
|
+
|
28
|
+
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="header">
|
32
|
+
<div id="menu">
|
33
|
+
|
34
|
+
<a href="_index.html">Index</a> »
|
35
|
+
|
36
|
+
|
37
|
+
<span class="title">Top Level Namespace</span>
|
38
|
+
|
39
|
+
|
40
|
+
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
|
41
|
+
</div>
|
42
|
+
|
43
|
+
<div id="search">
|
44
|
+
|
45
|
+
<a class="full_list_link" id="class_list_link"
|
46
|
+
href="class_list.html">
|
47
|
+
Class List
|
48
|
+
</a>
|
49
|
+
|
50
|
+
<a class="full_list_link" id="method_list_link"
|
51
|
+
href="method_list.html">
|
52
|
+
Method List
|
53
|
+
</a>
|
54
|
+
|
55
|
+
<a class="full_list_link" id="file_list_link"
|
56
|
+
href="file_list.html">
|
57
|
+
File List
|
58
|
+
</a>
|
59
|
+
|
60
|
+
</div>
|
61
|
+
<div class="clear"></div>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
<iframe id="search_frame"></iframe>
|
65
|
+
|
66
|
+
<div id="content"><h1>Top Level Namespace
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
</h1>
|
71
|
+
|
72
|
+
<dl class="box">
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
</dl>
|
82
|
+
<div class="clear"></div>
|
83
|
+
|
84
|
+
<h2>Defined Under Namespace</h2>
|
85
|
+
<p class="children">
|
86
|
+
|
87
|
+
|
88
|
+
<strong class="modules">Modules:</strong> <span class='object_link'><a href="Aceroute.html" title="Aceroute (module)">Aceroute</a></span>
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
<strong class="classes">Classes:</strong> <span class='object_link'><a href="Hashit.html" title="Hashit (class)">Hashit</a></span>
|
93
|
+
|
94
|
+
|
95
|
+
</p>
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
</div>
|
106
|
+
|
107
|
+
<div id="footer">
|
108
|
+
Generated on Sun Dec 4 11:17:52 2016 by
|
109
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
110
|
+
0.8.7.6 (ruby-2.3.1).
|
111
|
+
</div>
|
112
|
+
|
113
|
+
</body>
|
114
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Aceroute
|
2
|
+
|
3
|
+
|
4
|
+
# Base class for all other Aceroute module classes to extend.
|
5
|
+
class Base
|
6
|
+
|
7
|
+
|
8
|
+
protected
|
9
|
+
#takes a Hashit class, extracts the instance variables, and sets them on our instance
|
10
|
+
# @param hashit [Hashit] Hashit object, typically created from a response from Aceroute API
|
11
|
+
def update_attrs(hashit)
|
12
|
+
hashit.instance_variables.each do |name|
|
13
|
+
singleton_class.class_eval {attr_accessor "#{name[1..-1]}"} #remove leading @ from varname
|
14
|
+
send("#{name[1..-1]}=", hashit.instance_variable_get(name))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'httparty'
|
3
|
+
require 'aceroute/base'
|
4
|
+
require 'aceroute/hashit'
|
5
|
+
require 'aceroute/customer'
|
6
|
+
require 'aceroute/location'
|
7
|
+
require 'aceroute/order'
|
8
|
+
|
9
|
+
module Aceroute
|
10
|
+
include HTTParty
|
11
|
+
@@DEBUG = false
|
12
|
+
debug_output $stdout if @@DEBUG
|
13
|
+
attr_accessor :http_result
|
14
|
+
|
15
|
+
|
16
|
+
base_uri 'http://air.aceroute.com'
|
17
|
+
@@API_KEY = ENV['ACEROUTE_API_TOKEN']
|
18
|
+
|
19
|
+
|
20
|
+
@@query_params = {
|
21
|
+
token: @@API_KEY,
|
22
|
+
updsince: '0'
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
# List all customers
|
27
|
+
# @return [Hash] list of customer objects
|
28
|
+
def self.list_customers
|
29
|
+
customers = []
|
30
|
+
res = self.call_api("customer.list", nil)
|
31
|
+
res.cnts.cnt.each do |r|
|
32
|
+
c = Aceroute::Customer.new(name: r['nm'], email: r['eml'], cid: r['cid'])
|
33
|
+
customers << c
|
34
|
+
#find corresponding addresses for this customer
|
35
|
+
locations = res.locs.loc.find_all{|l| l["cid"] == c.cid }
|
36
|
+
locations.each do |a|
|
37
|
+
c.locations << Aceroute::Location.new(address1: a['adr'], address2: a['adr2'],
|
38
|
+
phone: a['tel'], description: a['nm'])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
customers
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
# Create a new customer
|
46
|
+
# @param customer [Hash]
|
47
|
+
# * :name (String) the name of customer
|
48
|
+
# * :email (String) the email for this customer
|
49
|
+
# * :address [Hash]
|
50
|
+
# * :description (String) the description of this address, eg 'home'
|
51
|
+
# * :address1 (String) line 1 of the address, eg '123 Fake Street'
|
52
|
+
# * :address2 (String) line 2 of the address, eg 'New York, NY 12345'
|
53
|
+
# * :name (String) address name
|
54
|
+
# * :phone (String) address phone number
|
55
|
+
# @return [Hash] customer and address
|
56
|
+
def self.create_customer(customer)
|
57
|
+
recs = "<data>
|
58
|
+
<cst>
|
59
|
+
<nm>#{customer[:name]}</nm>
|
60
|
+
<locnm>#{customer[:address][:description]}</locnm>
|
61
|
+
<adr>#{customer[:address][:address1]}</adr>
|
62
|
+
<adr2>#{customer[:address][:address2]}</adr2>
|
63
|
+
<cntnm>#{customer[:address][:name]}</cntnm>
|
64
|
+
<tel>#{customer[:address][:phone]}</tel>
|
65
|
+
<eml>#{customer[:email]}</eml>
|
66
|
+
</cst>
|
67
|
+
</data>"
|
68
|
+
|
69
|
+
data = self.call_api("customer.create", recs)
|
70
|
+
location = data.locs.loc
|
71
|
+
customer = data.cnts.cnt
|
72
|
+
return customer, location
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
# Delete a customer
|
77
|
+
# @param customer_id [Integer] id of Aceroute Customer object
|
78
|
+
# @return success or failure hash
|
79
|
+
def self.delete_customer(customer_id)
|
80
|
+
recs = "<data><del><id>#{customer_id}</id></del></data>"
|
81
|
+
self.call_api("customer.delete", recs)
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
# Create a new location
|
86
|
+
# @param location [Hash]
|
87
|
+
# * :id (Integer)
|
88
|
+
# * :description (String) the description of this address, eg 'home'
|
89
|
+
# * :address1 (String) line 1 of the address, eg '123 Fake Street'
|
90
|
+
# * :address2 (String) line 2 of the address, eg 'New York, NY 12345'
|
91
|
+
# * :customer
|
92
|
+
# * :cid (Integer) cid from Aceroute Customer object
|
93
|
+
# @return Aceroute location object
|
94
|
+
def self.create_location(location)
|
95
|
+
recs = "<data><loc><id>#{location[:id]}</id>
|
96
|
+
<cid>#{location[:customer][:cid]}</cid>
|
97
|
+
<nm>#{location[:description]}</nm>
|
98
|
+
<adr>#{location[:address1]}</adr>
|
99
|
+
<adr2>#{location[:address2]}</adr2>
|
100
|
+
</loc></data>"
|
101
|
+
data = self.call_api("customer.location.save", recs)
|
102
|
+
loc = data.loc
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
# Delete a location
|
107
|
+
# @param location_id (Integer) id from Aceroute Location object
|
108
|
+
# @return nil
|
109
|
+
def self.delete_location(location_id)
|
110
|
+
recs = "<data><del><id>#{location_id}</id></del></data>"
|
111
|
+
types = self.call_api("customer.location.delete", recs).otype
|
112
|
+
end
|
113
|
+
|
114
|
+
# List order types
|
115
|
+
# @return list of available order types for this account
|
116
|
+
def self.list_order_types
|
117
|
+
self.call_api("order.type.list", nil)
|
118
|
+
end
|
119
|
+
|
120
|
+
# List service types
|
121
|
+
# @return list of available service types for this account
|
122
|
+
def self.list_service_types
|
123
|
+
self.call_api("product.type.list", nil)
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
# List all workers
|
128
|
+
# @return list of available workers for this account
|
129
|
+
def self.list_workers
|
130
|
+
workers = self.call_api("worker.list", nil).res
|
131
|
+
end
|
132
|
+
|
133
|
+
# List all orders
|
134
|
+
# @return list of all orders in this account
|
135
|
+
def self.list_orders
|
136
|
+
workers = self.call_api("order.list", nil).event
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
# Create new order
|
143
|
+
# @param order [Hash]
|
144
|
+
# * :cid (Integer) Aceroute customer id
|
145
|
+
# * :nm (String) 'name', descriptive field for this order
|
146
|
+
# * :dir (Integer) 'duration', in 5 minute increments
|
147
|
+
# * :sched (Integer) 1 = scheduled, 0 = unscheduled
|
148
|
+
# * :start_epoch (Integer) time in msec since epoch
|
149
|
+
# * :lid (Integer) optional -- customer location id
|
150
|
+
# * :cntid (Integer) optional -- customer contact id
|
151
|
+
# * :rid (Integer) optional -- worker id, to assign this order to a specific worker
|
152
|
+
# * :dtl (String) optional -- order summary
|
153
|
+
# * po (String) optional -- 'purchase order', descriptive field for use as desired
|
154
|
+
# @return Aceroute Order object
|
155
|
+
def self.create_order(order)
|
156
|
+
recs = "<data>
|
157
|
+
<event>
|
158
|
+
<cid>#{order[:cid]}</cid>
|
159
|
+
<nm>#{order[:nm]}</nm>
|
160
|
+
<dur>#{order[:dur]}</dur>
|
161
|
+
<schd>#{order[:schd]}</schd>
|
162
|
+
<start_epoch>#{order[:start_epoch]}</start_epoch>
|
163
|
+
<lid>#{order[:lid]}</lid>
|
164
|
+
<cntid>#{order[:cntid]}</cntid>
|
165
|
+
<rid>#{order[:rid]}</rid>
|
166
|
+
<dtl>#{order[:dtl]}</dtl>
|
167
|
+
<po>#{order[:po]}</po>
|
168
|
+
</event>
|
169
|
+
</data>"
|
170
|
+
puts recs if @@DEBUG
|
171
|
+
data = self.call_api("order.create", recs)
|
172
|
+
puts data if @@DEBUG
|
173
|
+
order = data.event
|
174
|
+
end
|
175
|
+
|
176
|
+
# Delete an order
|
177
|
+
def self.delete_order(order_id)
|
178
|
+
recs = "<data><del><id>#{order_id}</id></del></data>"
|
179
|
+
self.call_api("order.delete", recs)
|
180
|
+
end
|
181
|
+
|
182
|
+
private
|
183
|
+
def self.call_api(method, recs)
|
184
|
+
params = @@query_params.merge!({method: method})
|
185
|
+
params[:recs] = recs unless recs.nil?
|
186
|
+
options = {query: params}
|
187
|
+
http_result = self.get("/api", options).parsed_response
|
188
|
+
puts http_result if @@DEBUG
|
189
|
+
data = Hashit.new(http_result['data'])
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Aceroute
|
2
|
+
class Customer < Base
|
3
|
+
attr_accessor :locations
|
4
|
+
attr_accessor :email
|
5
|
+
attr_accessor :name
|
6
|
+
attr_accessor :cid, :id
|
7
|
+
|
8
|
+
#Creates a new Aceroute::Customer object. Note this does not
|
9
|
+
#persist the Customer to Aceroute, that can be done by calling the
|
10
|
+
#create! method on the new object.
|
11
|
+
# @param name [String] customer name
|
12
|
+
# @param email [String] customer email
|
13
|
+
# @param location [Hash] customer Location, optional
|
14
|
+
# @param cid [Integer] Aceroute customer id, optional; useful for instantiating Customer objects from Aceroute API response
|
15
|
+
# @return [Aceroute::Customer]
|
16
|
+
def initialize(name, email, location = {}, cid = nil)
|
17
|
+
self.locations = []
|
18
|
+
#create getters/setters for each param
|
19
|
+
self.email = email
|
20
|
+
self.name = name
|
21
|
+
self.cid = cid
|
22
|
+
|
23
|
+
if !location.empty?
|
24
|
+
locations << Aceroute::Location.new(location[:address1], location[:address2], location[:description],
|
25
|
+
location[:name], location[:phone])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
# Persists Customer object to Aceroute API.
|
31
|
+
# @return [Aceroute::Customer]
|
32
|
+
def create!
|
33
|
+
recs = "<data>
|
34
|
+
<cst>
|
35
|
+
<nm>#{self.name}</nm>
|
36
|
+
<locnm>#{self.locations.first.description}</locnm>
|
37
|
+
<adr>#{self.locations.first.address1}</adr>
|
38
|
+
<adr2>#{self.locations.first.address2}</adr2>
|
39
|
+
<cntnm>#{self.locations.first.name}</cntnm>
|
40
|
+
<tel>#{self.locations.first.phone}</tel>
|
41
|
+
<eml>#{self.email}</eml>
|
42
|
+
</cst>
|
43
|
+
</data>"
|
44
|
+
|
45
|
+
#puts recs
|
46
|
+
data = Aceroute::call_api("customer.create", recs)
|
47
|
+
location = data.locs.loc
|
48
|
+
customer = data.cnts.cnt
|
49
|
+
update_attrs(customer)
|
50
|
+
self.cid = customer.cid
|
51
|
+
locations.first.update_attrs(location)
|
52
|
+
return self
|
53
|
+
end
|
54
|
+
|
55
|
+
# Deletes this Aceroute::Customer object (self) from Aceroute;
|
56
|
+
def destroy!(id = nil)
|
57
|
+
Customer.delete(id ? id : self.cid)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Deletes Aceroute::Customer of given id from Aceroute
|
61
|
+
# @param id [Integer]
|
62
|
+
def self.delete(id)
|
63
|
+
recs = "<data><del><id>#{id}</id></del></data>"
|
64
|
+
ret = Aceroute::call_api("customer.delete", recs)
|
65
|
+
ret.success == "true" ? true : false
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Hashit
|
2
|
+
def initialize(hash)
|
3
|
+
hash.nil? ? return : nil
|
4
|
+
hash.each do |k,v|
|
5
|
+
self.instance_variable_set("@#{k}", v.is_a?(Hash) ? Hashit.new(v) : v)
|
6
|
+
self.class.send(:define_method, k, proc{self.instance_variable_get("@#{k}")})
|
7
|
+
self.class.send(:define_method, "#{k}=", proc{|v| self.instance_variable_set("@#{k}", v)})
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Aceroute
|
2
|
+
class Location < Base
|
3
|
+
attr_accessor :address1
|
4
|
+
attr_accessor :address2
|
5
|
+
attr_accessor :description
|
6
|
+
attr_accessor :name
|
7
|
+
attr_accessor :phone
|
8
|
+
attr_accessor :cid, :id
|
9
|
+
|
10
|
+
|
11
|
+
#Creates a new Aceroute::Location object. Note this does not
|
12
|
+
#persist the Location to Aceroute, that can be done by calling the
|
13
|
+
#create! method on the new object.
|
14
|
+
# @param address1 [String] customer address line 1 (street)
|
15
|
+
# @param address2 [String] customer address line 2 (eg apartment number)
|
16
|
+
# @param description [String] description of address (eg 'Home')
|
17
|
+
# @param name [String] name of address (eg 'Home')
|
18
|
+
# @param phone [String] phone number associated with this address
|
19
|
+
# @param cid [Integer] Aceroute customer id, optional; associates this Location with that Customer
|
20
|
+
# @param id [Integer] Aceroute location id, optional; useful for instantiating Location objects from Aceroute API response
|
21
|
+
# @return [Aceroute::Location]
|
22
|
+
def initialize(address1, address2, description, name, phone, cid = nil, id= nil)
|
23
|
+
self.address1 = address1
|
24
|
+
self.address2 = address2
|
25
|
+
self.description = description
|
26
|
+
self.name = name
|
27
|
+
self.phone = phone
|
28
|
+
self.cid = cid
|
29
|
+
self.id = id
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
# Persists Aceroute::Location object to Aceroute API.
|
34
|
+
# @return [Aceroute::Location]
|
35
|
+
def create!
|
36
|
+
recs = "<data><loc><id>0</id>
|
37
|
+
<cid>#{self.cid}</cid>
|
38
|
+
<nm>#{self.description}</nm>
|
39
|
+
<adr>#{self.address1}</adr>
|
40
|
+
<adr2>#{self.address2}</adr2>
|
41
|
+
</loc></data>"
|
42
|
+
data = Aceroute::call_api("customer.location.save", recs)
|
43
|
+
loc = data.loc
|
44
|
+
update_attrs(loc)
|
45
|
+
return self
|
46
|
+
end
|
47
|
+
|
48
|
+
# Deletes this Aceroute::Location object (self) from Aceroute
|
49
|
+
def destroy!(id = nil)
|
50
|
+
Location.delete(id ? id : self.id)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Deletes Aceroute::Location of given id from Aceroute
|
54
|
+
# @param id [Integer]
|
55
|
+
def self.delete(id)
|
56
|
+
req = "<data><del><id>#{id}</id></del></data>"
|
57
|
+
ret = Aceroute::call_api("customer.location.delete", req)
|
58
|
+
ret.success == "true" ? true : false #maybe raise error here instead
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Aceroute
|
2
|
+
class Order < Base
|
3
|
+
attr_accessor :customer, :location, :start_time #in msec (not sec) since epoch
|
4
|
+
attr_accessor :description, :duration, :scheduled, :worker, :summary, :purchase_order #any freeform text here
|
5
|
+
attr_accessor :cid, :id
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
#Creates a new Aceroute::Order object. Note this does not
|
12
|
+
#persist the Location to Aceroute, that can be done by calling the
|
13
|
+
#create! method on the new object.
|
14
|
+
# @param customer [Aceroute::Customer] recipient of this Order
|
15
|
+
# @param location [Aceroute::Location] location of this Order (delivery destination)
|
16
|
+
# @param start_time [Integer] start time of Order, in msec since epoch (note: msec not sec)
|
17
|
+
# @param description [String] description of Order (e.g., contents of order)
|
18
|
+
# @param duration [Integer] duration of Order in minutes (time to service customer); used to aid in route optimization. Defaults to 10 minutes
|
19
|
+
# @param scheduled [Boolean] whether this Order is scheduled or not; defaults to true
|
20
|
+
# @param worker [Integer] Worker ID of aceroute worker to assign this Order to; defaults to nil (not implemented)
|
21
|
+
# @param summary [String] Summary of order, to be displated in app. Defaults to none.
|
22
|
+
# @param purchase_order [String] arbitrary string to indicate PO or other note, if needed
|
23
|
+
# @return [Aceroute::Order]
|
24
|
+
def initialize(customer, location, start_time, description = nil, duration = 10,
|
25
|
+
scheduled = true, worker = nil, summary = nil, purchase_order = nil)
|
26
|
+
self.customer = customer
|
27
|
+
self.location = location
|
28
|
+
self.start_time = start_time
|
29
|
+
#FIXME: taking a DateTime argument is friendlier
|
30
|
+
#self.start_time = start_time.to_i * 1000 #DateTime object
|
31
|
+
self.description = description
|
32
|
+
self.duration = duration
|
33
|
+
self.scheduled = scheduled
|
34
|
+
self.worker = worker
|
35
|
+
self.summary = summary
|
36
|
+
self.purchase_order = purchase_order
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
# Persists Aceroute::Order object to Aceroute API.
|
42
|
+
# @return [Aceroute::Order]
|
43
|
+
def create!
|
44
|
+
recs = "<data>
|
45
|
+
<event>
|
46
|
+
<cid>#{self.customer.cid}</cid>
|
47
|
+
<nm>#{self.description}</nm>
|
48
|
+
<dur>#{self.duration}</dur>
|
49
|
+
<schd>#{self.scheduled ? 1 : 0}</schd>
|
50
|
+
<start_epoch>#{self.start_time}</start_epoch>
|
51
|
+
<lid>#{self.location.id}</lid>
|
52
|
+
<cntid>#{0}</cntid>
|
53
|
+
<rid>#{self.worker}</rid>
|
54
|
+
<dtl>#{self.summary}</dtl>
|
55
|
+
<po>#{self.purchase_order}</po>
|
56
|
+
</event>
|
57
|
+
</data>"
|
58
|
+
data = Aceroute::call_api("order.create", recs)
|
59
|
+
order = data.event
|
60
|
+
update_attrs(order)
|
61
|
+
return self
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# Deletes this Aceroute::Order object (self) from Aceroute
|
66
|
+
def destroy!(id = nil)
|
67
|
+
Order.delete(id ? id : self.id)
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
# Deletes Aceroute::Location of given id from Aceroute
|
72
|
+
# @param id [Integer]
|
73
|
+
def self.delete(id)
|
74
|
+
req = "<data><del><id>#{id}</id></del></data>"
|
75
|
+
ret = Aceroute::call_api("order.delete", req)
|
76
|
+
ret.success == "true" ? true : false #maybe raise error here instead
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|