sysaid 0.1.1 → 0.2.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0519d826d111724b463a1f8cbb69929c01af2445
4
+ data.tar.gz: 688d94e4230f20f817a2bfe3286544fdc11ffdeb
5
+ SHA512:
6
+ metadata.gz: 477e368c753ae59ce4bc1f43f16232c33d6a9b488d399e679a992bc46abe9916f66894b08fef546f0525a619834947ab56becf24ddf9e558cbf369b98d41ad30
7
+ data.tar.gz: 1e9b146eef9d2be2b83063e4bb42096f76ee9244cfde39839a02daf6872ff16b8969c2d437138aa14fe4f43793ed20c176b47bc196163e1e6384e072bd692f56
data/lib/sysaid.rb CHANGED
@@ -1,63 +1,14 @@
1
+ require 'savon'
2
+
1
3
  # The main SysAid class
2
4
  class SysAid
3
5
  @@logged_in = false
4
6
  @@server_settings = {}
5
7
 
6
- # Implements find_by_* methods, e.g. find_by_id, find_by_responsibility, etc.
7
- def self.method_missing(meth, *args, &block)
8
- if meth.to_s =~ /^find_by_(.+)$/
9
- run_find_by_method($1, *args, &block)
10
- else
11
- super
12
- end
13
- end
14
-
15
- # Find tickets by ID, responsibility, status, etc.
16
- # Note: run_find_by_method is called from self.method_missing
17
- #
18
- # Example:
19
- # >> SysAid.find_by_id(34)
20
- # => hola mundo
21
- #
22
- # Arguments:
23
- # argument: (String or Integer)
24
- def self.run_find_by_method(attrs, *args, &block)
25
- # Make a key/value hash of attributes
26
- attrs = attrs.split('_and_')
27
- attrs_with_args = [attrs, args].transpose
28
- conditions = Hash[attrs_with_args]
29
-
30
- if self.logged_in? == false
31
- self.login
32
- end
33
-
34
- sr = ApiServiceRequest.new
35
- if conditions.keys[0] == "id"
36
- # ID requires we use loadById, not executeSelectQuery
37
- result = @@service.loadByStringId({:sessionId => @@session_id, :apiSysObj => sr, :id => conditions.values[0]})
38
- else
39
- result = @@service.executeSelectQuery({:sessionId => @@session_id, :apiSysObj => sr, :condition => "#{conditions.keys[0]} = '#{conditions.values[0]}'"})
40
- end
41
-
42
- if result.instance_variables.include?(:@v_return)
43
- return SysAid::Ticket.new(result.v_return)
44
- else
45
- return nil # ticket not found
46
- end
47
- end
48
-
49
- def self.respond_to?(meth)
50
- if meth.to_s =~ /^find_by_.*$/
51
- true
52
- else
53
- super
54
- end
55
- end
56
-
57
8
  # Accessor for internal SysaidApiService object.
58
9
  # Used by SysAid::Ticket
59
- def self.service
60
- @@service
10
+ def self.client
11
+ @@client
61
12
  end
62
13
 
63
14
  # Accessor for session ID returned by SysAid server.
@@ -74,8 +25,7 @@ class SysAid
74
25
  # => true
75
26
  def self.logged_in?
76
27
  # Until official word comes from the company, we're going to login every time
77
- # to avoid a problem with undetected timeouts
78
-
28
+ # to avoid a problem with undetected timeouts.
79
29
  #if @@logged_in == false
80
30
  login
81
31
  #end
@@ -87,32 +37,29 @@ class SysAid
87
37
  end
88
38
  end
89
39
 
90
- def self.server_settings
91
- @@server_settings
92
- end
93
-
94
- def self.server_settings=(server_settings)
95
- @@server_settings = server_settings
96
- end
97
-
98
- private
99
- def self.login
100
- @@service = SysaidApiService.new(@@server_settings[:endpoint])
101
-
102
- # see SOAP wiredumps (for debugging)
103
- unless @@server_settings[:debug].nil?
104
- @@service.wiredump_dev = @@server_settings[:debug]
40
+ # self.login does not require credentials be passed every time.
41
+ # SysAid sometimes times out the session and we can simply call 'login' again with the
42
+ # saved credentials to get around the timeout.
43
+ def self.login(account = nil, username = nil, password = nil, wsdl_uri = nil, debug = false)
44
+ if account and username and password and wsdl_uri
45
+ # Save server settings in case we need to log in again later
46
+ @@server_settings = { :account => account, :username => username, :password => password, :wsdl_uri => wsdl_uri, :debug => debug }
105
47
  end
106
-
48
+
49
+ @@client = Savon.client(wsdl: @@server_settings[:wsdl_uri], log: @@server_settings[:debug])
50
+
107
51
  # login
108
52
  unless @@server_settings[:account].nil?
109
- result = @@service.login({:accountId => @@server_settings[:account], :userName => @@server_settings[:username], :password => @@server_settings[:password]})
110
- @@session_id = result.v_return
111
-
53
+ # Call login
54
+ response = @@client.call(:login, message: { accountId: @@server_settings[:account], userName: @@server_settings[:username], password: @@server_settings[:password] })
55
+
56
+ # Retrieve response
57
+ @@session_id = response.to_hash[:login_response][:return]
58
+
112
59
  @@logged_in = true
113
60
  end
114
61
  end
115
62
  end
116
63
 
117
- require 'sysaid/driver/SysaidApiServiceServiceDriver'
118
64
  require 'sysaid/ticket'
65
+ require 'sysaid/user'
data/lib/sysaid/ticket.rb CHANGED
@@ -1,20 +1,39 @@
1
+ require 'date'
2
+
1
3
  class SysAid::Ticket
2
- # Creates a SysAid::Ticket object
3
- #
4
- # Example:
5
- # >> SysAid::Ticket.new
6
- # => SysAid::Ticket
7
- #
8
- # Arguments:
9
- # service_request: (ApiServiceRequest object, optional)
10
- def initialize(service_request = nil)
11
- @sr = service_request
4
+ attr_accessor :agreement, :assignCounter, :assignedTo, :ciid, :category, :currentSupportLevel, :custInt1,
5
+ :custInt2, :custList1, :custList2, :description, :escalation, :id, :location, :maxSupportLevel,
6
+ :parentLink, :priority, :projectID, :reopenCounter, :requestUser, :source, :srSubType, :srType,
7
+ :status, :subCategory, :submitUser, :successRating, :taskID, :title, :urgency, :version, :archive,
8
+ :assignedGroup, :assignedTo, :cc, :changeCategory, :closeTime, :closureInformation, :computerID,
9
+ :custNotes, :custText1, :custText2, :impact, :notes, :resolution, :solution, :thirdLevelCategory,
10
+ :updateTime, :updateUser, :userManager, :workaround
11
+
12
+ def initialize
13
+ self.closeTime = Date.new
14
+ self.updateTime = Date.new
15
+ end
16
+
17
+ def self.find_by_id(ticket_id)
18
+ ticket = SysAid::Ticket.new
12
19
 
13
- if service_request.nil?
14
- @sr = ApiServiceRequest.new
20
+ ticket.id = ticket_id
21
+
22
+ return nil unless ticket.refresh
23
+
24
+ return ticket
25
+ end
26
+
27
+ # Loads the latest user information from the SysAid server
28
+ def refresh
29
+ response = SysAid.client.call(:load_by_string_id, message: to_xml)
30
+
31
+ if response.to_hash[:load_by_string_id_response][:return]
32
+ set_self_from_response(response.to_hash[:load_by_string_id_response][:return])
33
+ return true
15
34
  end
16
35
 
17
- set_self_from_sr
36
+ return false
18
37
  end
19
38
 
20
39
  # Saves a ticket back to the SysAid server
@@ -24,17 +43,12 @@ class SysAid::Ticket
24
43
  # => true
25
44
  def save
26
45
  if SysAid.logged_in? == false
27
- raise "You must create a SysAid instance and log in before attempting to create a ticket."
46
+ raise "You must log in before creating or saving a ticket."
28
47
  end
29
48
 
30
- # Save public variables back to the ApiServiceRequest (@sr) variable
31
- set_sr_from_self
32
-
33
49
  # Save it via the SOAP API
34
- result = SysAid.service.save({:sessionId => SysAid.session_id, :apiSysObj => @sr})
35
- if result.v_return.to_i > 0
36
- self.instance_variable_set(:@id, result.v_return.to_i)
37
- @sr.instance_variable_set(:@id, result.v_return.to_i)
50
+ response = SysAid.client.call(:save, message: to_xml(false))
51
+ if response.to_hash[:save_response][:return]
38
52
  return true
39
53
  else
40
54
  return false
@@ -43,54 +57,133 @@ class SysAid::Ticket
43
57
 
44
58
  # Deletes a ticket from the SysAid server
45
59
  #
60
+ # No return value as SysAid's 'delete' call returns void. No idea why.
61
+ #
46
62
  # Example:
47
63
  # >> ticket_object.delete
48
64
  # => true
49
65
  def delete
50
- unless @sr.instance_variable_get(:@id).nil?
51
- SysAid.service.delete({:sessionId => SysAid.session_id, :apiSysObj => @sr})
52
-
53
- return true
54
- end
55
-
56
- false
57
- end
58
-
59
- # For dynamically creating attr_accessors
60
- # (from http://stackoverflow.com/questions/4082665/dynamically-create-class-attributes-with-attr-accessor)
61
- def create_method( name, &block )
62
- self.class.send( :define_method, name, &block )
63
- end
64
-
65
- def create_attr( name )
66
- create_method( "#{name}=".to_sym ) { |val|
67
- instance_variable_set( "@" + name, val)
68
- }
69
-
70
- create_method( name.to_sym ) {
71
- instance_variable_get( "@" + name )
72
- }
66
+ SysAid.client.call(:delete, message: to_xml(false))
73
67
  end
74
68
 
75
69
  private
76
- # Note: We sync between @sr and our instance variables for API convenience, i.e.
77
- # so one can say, ticket.title = "something" instead of
78
- # ticket.instance_variable_get(:@sr).instance_variable_set(:@title, "something").
79
70
 
80
- # Updates instance variables to match what is in @sr
81
- def set_self_from_sr
82
- @sr_symbols = []
83
- @sr.instance_variables.each do |field|
84
- @sr_symbols << field
85
- self.create_attr(field.to_s[1..-1])
86
- self.instance_variable_set(field, @sr.instance_variable_get(field.to_sym))
87
- end
71
+ def to_xml(include_id = true)
72
+ builder = Builder::XmlMarkup.new
73
+
74
+ builder.sessionId(SysAid.session_id)
75
+ xml = builder.apiSysObj('xsi:type' => "tns:apiServiceRequest") { |b|
76
+ b.agreement(self.agreement, 'xsi:type' => 'xsd:int')
77
+ b.archive(self.archive, 'xsi:type' => 'xsd:boolean')
78
+ b.assignCounter(self.assignCounter, 'xsi:type' => 'xsd:int')
79
+ b.assignedGroup(self.assignedGroup, 'xsi:type' => 'xsd:string')
80
+ b.assignedTo(self.assignedTo, 'xsi:type' => 'xsd:string')
81
+ b.CIId(self.ciid, 'xsi:type' => 'xsd:int')
82
+ b.category(self.category, 'xsi:type' => 'xsd:string')
83
+ b.cc(self.cc, 'xsi:type' => 'xsd:string')
84
+ b.changeCategory(self.changeCategory, 'xsi:type' => 'xsd:int')
85
+ b.closeTime(self.closeTime.rfc3339, 'xsi:type' => 'xsd:dateTime')
86
+ b.closureInformation(self.closureInformation, 'xsi:type' => 'xsd:int')
87
+ b.computerID(self.computerID, 'xsi:type' => 'xsd:string')
88
+ b.currentSupportLevel(self.currentSupportLevel, 'xsi:type' => 'xsd:int')
89
+ b.custInt1(self.custInt1, 'xsi:type' => 'xsd:int')
90
+ b.custInt2(self.custInt2, 'xsi:type' => 'xsd:int')
91
+ b.custList1(self.custList1, 'xsi:type' => 'xsd:int')
92
+ b.custList2(self.custList2, 'xsi:type' => 'xsd:int')
93
+ b.custNotes(self.custNotes, 'xsi:type' => 'xsd:string')
94
+ b.custText1(self.custText1, 'xsi:type' => 'xsd:string')
95
+ b.custText2(self.custText2, 'xsi:type' => 'xsd:string')
96
+ b.customDateFields
97
+ #b.customFields
98
+ b.description(self.description, 'xsi:type' => 'xsd:string')
99
+ # <emailAccount xsi:type="xsd:string"></emailAccount>
100
+ b.escalation(self.escalation, 'xsi:type' => 'xsd:int')
101
+ # <followupText xsi:type="xsd:string"></followupText>
102
+ b.id(self.id, 'xsi:type' => 'xsd:int')
103
+ b.impact(self.impact, 'xsi:type' => 'xsd:int')
104
+ # <insertTime xsi:type="xsd:dateTime">
105
+ # 2012-06-13T17:42:03.053Z</insertTime>
106
+ b.location(self.location, 'xsi:type' => 'xsd:int')
107
+ b.maxSupportLevel(self.maxSupportLevel, 'xsi:type' => 'xsd:int')
108
+ b.notes(self.notes, 'xsi:type' => 'xsd:string')
109
+ b.parentLink(self.parentLink, 'xsi:type' => 'xsd:int')
110
+ b.priority(self.priority, 'xsi:type' => 'xsd:int')
111
+ b.projectID(self.projectID, 'xsi:type' => 'xsd:int')
112
+ b.reopenCounter(self.reopenCounter, 'xsi:type' => 'xsd:int')
113
+ b.requestUser(self.requestUser, 'xsi:type' => 'xsd:string')
114
+ b.resolution(self.resolution, 'xsi:type' => 'xsd:string')
115
+ b.solution(self.solution, 'xsi:type' => 'xsd:string')
116
+ b.source(self.source, 'xsi:type' => 'xsd:int')
117
+ b.srSubType(self.srSubType, 'xsi:type' => 'xsd:int')
118
+ b.srType(self.srType, 'xsi:type' => 'xsd:int')
119
+ b.status(self.status, 'xsi:type' => 'xsd:int')
120
+ b.subCategory(self.subCategory, 'xsi:type' => 'xsd:string')
121
+ b.successRating(self.successRating, 'xsi:type' => 'xsd:int')
122
+ b.taskID(self.taskID, 'xsi:type' => 'xsd:int')
123
+ b.thirdLevelCategory(self.thirdLevelCategory, 'xsi:type' => 'xsd:string')
124
+ b.title(self.title, 'xsi:type' => 'xsd:string')
125
+ b.updateTime(self.updateTime.rfc3339, 'xsi:type' => 'xsd:dateTime')
126
+ b.updateUser(self.updateUser, 'xsi:type' => 'xsd:string')
127
+ b.urgency(self.urgency, 'xsi:type' => 'xsd:int')
128
+ b.userManager(self.userManager, 'xsi:type' => 'xsd:string')
129
+ b.version(self.version, 'xsi:type' => 'xsd:int')
130
+ b.workaround(self.workaround, 'xsi:type' => 'xsd:string')
131
+ }
132
+ xml = builder.id(self.id) if include_id
133
+
134
+ xml
88
135
  end
89
136
 
90
- # Updates @sr to match what is in our instance variables
91
- def set_sr_from_self
92
- @sr_symbols.each do |symbol|
93
- @sr.instance_variable_set(symbol, self.instance_variable_get(symbol))
94
- end
137
+ # Update instance variables to match what is in response
138
+ def set_self_from_response(response)
139
+ self.agreement = response[:agreement]
140
+ self.archive = response[:archive]
141
+ self.assignCounter = response[:assignCounter]
142
+ self.assignedGroup = response[:assignGroup]
143
+ self.assignedTo = response[:assignTo]
144
+ self.ciid = response[:CIId]
145
+ self.category = response[:category]
146
+ self.cc = response[:cc]
147
+ self.changeCategory = response[:changeCategory]
148
+ self.closeTime = Date.parse(response[:closeTime]) if response[:closeTime]
149
+ self.closureInformation = response[:closureInformation]
150
+ self.computerID = response[:computerID]
151
+ self.currentSupportLevel = response[:currentSupportLevel]
152
+ self.custInt1 = response[:custInt1]
153
+ self.custInt2 = response[:custInt2]
154
+ self.custList1 = response[:custList1]
155
+ self.custList2 = response[:custList2]
156
+ self.custNotes = response[:custNotes]
157
+ self.custText1 = response[:custText1]
158
+ self.custText2 = response[:custText2]
159
+ self.description = response[:description]
160
+ self.escalation = response[:escalation]
161
+ self.id = response[:id]
162
+ self.impact = response[:impact]
163
+ self.location = response[:location]
164
+ self.maxSupportLevel = response[:maxSupportLevel]
165
+ self.notes = response[:notes]
166
+ self.parentLink = response[:parentLink]
167
+ self.priority = response[:priority]
168
+ self.projectID = response[:projectID]
169
+ self.reopenCounter = response[:reopenCounter]
170
+ self.requestUser = response[:requestUser]
171
+ self.resolution = response[:resolution]
172
+ self.solution = response[:solution]
173
+ self.source = response[:source]
174
+ self.srSubType = response[:srSubType]
175
+ self.srType = response[:srType]
176
+ self.status = response[:status]
177
+ self.subCategory = response[:subCategory]
178
+ self.successRating = response[:successRating]
179
+ self.taskID = response[:taskID]
180
+ self.thirdLevelCategory = response[:thirdLevelCategory]
181
+ self.title = response[:title]
182
+ self.updateTime = Date.parse(response[:updateTime]) if response[:updateTime]
183
+ self.updateUser = response[:updateUser]
184
+ self.urgency = response[:urgency]
185
+ self.userManager = response[:userManager]
186
+ self.version = response[:version]
187
+ self.workaround = response[:workaround]
95
188
  end
96
189
  end
@@ -0,0 +1,155 @@
1
+ class SysAid::User
2
+ attr_accessor :username, :display_name, :email, :phone, :first_name, :last_name, :admin, :agreement, :building,
3
+ :car_number, :cellphone, :company, :cubic, :custInt1, :custInt2, :custList1, :custList2, :custNotes,
4
+ :custText1, :custText2, :department, :disable, :emailNotifications, :enableLoginToEup, :floor, :location,
5
+ :manager, :notes, :sms, :userManagerName, :loginDomain, :loginUser, :secondaryEmail
6
+
7
+ # Creates a SysAid::User object
8
+ #
9
+ # Example:
10
+ # >> SysAid::User.new
11
+ # => SysAid::User
12
+ #
13
+ # Arguments:
14
+ # username: (SysAid username, optional)
15
+ def initialize(username = nil)
16
+ self.username = username
17
+ end
18
+
19
+ def self.find_by_username(username)
20
+ user = SysAid::User.new(username)
21
+
22
+ return nil unless user.refresh
23
+
24
+ return user
25
+ end
26
+
27
+ # Loads the latest user information from the SysAid server
28
+ def refresh
29
+ response = SysAid.client.call(:load_by_string_id, message: to_xml.to_s )
30
+ if response.to_hash[:load_by_string_id_response][:return]
31
+ set_self_from_response(response.to_hash[:load_by_string_id_response][:return])
32
+ return true
33
+ end
34
+
35
+ return false
36
+ end
37
+
38
+ # Saves a user back to the SysAid server
39
+ #
40
+ # Example:
41
+ # >> user_object.save
42
+ # => true
43
+ def save
44
+ if SysAid.logged_in? == false
45
+ raise "You must log in before creating or saving a user."
46
+ end
47
+
48
+ # Save it via the SOAP API
49
+ response = SysAid.client.call(:save, message: to_xml(false).to_s )
50
+ if response.to_hash[:save_response][:return]
51
+ return true
52
+ else
53
+ return false
54
+ end
55
+ end
56
+
57
+ # Deletes a ticket from the SysAid server
58
+ #
59
+ # Example:
60
+ # >> ticket_object.delete
61
+ # => true
62
+ def delete
63
+ response = SysAid.client.call(:delete, message: to_xml(false).to_s )
64
+
65
+ #response.to_hash[:delete_response]
66
+
67
+ # The SysAid API doesn't return anything on delete.
68
+ # Think about that for a minute.
69
+ end
70
+
71
+ private
72
+
73
+ def to_xml(include_id = true)
74
+ builder = Builder::XmlMarkup.new
75
+
76
+ builder.sessionId(SysAid.session_id)
77
+ xml = builder.apiSysObj('xsi:type' => "tns:apiSysAidUser") { |b|
78
+ b.admin(self.admin, 'xsi:type' => 'xsd:boolean')
79
+ b.agreement(self.agreement, 'xsi:type' => 'xsd:int')
80
+ b.building(self.building, 'xsi:type' => 'xsd:string')
81
+ b.carNumber(self.car_number, 'xsi:type' => 'xsd:string')
82
+ b.cellphone(self.cellphone, 'xsi:type' => 'xsd:string')
83
+ b.company(self.company, 'xsi:type' => 'xsd:int')
84
+ b.cubic(self.cubic, 'xsi:type' => 'xsd:string')
85
+ b.custInt1(self.custInt1, 'xsi:type' => 'xsd:int')
86
+ b.custInt2(self.custInt2, 'xsi:type' => 'xsd:int')
87
+ b.custList1(self.custList1, 'xsi:type' => 'xsd:int')
88
+ b.custList2(self.custList2, 'xsi:type' => 'xsd:int')
89
+ b.custNotes(self.custNotes, 'xsi:type' => 'xsd:string')
90
+ b.custText1(self.custText1, 'xsi:type' => 'xsd:string')
91
+ b.custText2(self.custText2, 'xsi:type' => 'xsd:string')
92
+ b.customDateFields
93
+ b.customFields
94
+ b.department(self.department, 'xsi:type' => 'xsd:int')
95
+ b.disable(self.disable, 'xsi:type' => 'xsd:boolean')
96
+ b.displayName(self.display_name, 'xsi:type' => 'xsd:string')
97
+ b.email(self.email, 'xsi:type' => 'xsd:string')
98
+ b.emailNotifications(self.emailNotifications, 'xsi:type' => 'xsd:boolean')
99
+ b.enableLoginToEup(self.enableLoginToEup, 'xsi:type' => 'xsd:boolean')
100
+ b.firstName(self.first_name, 'xsi:type' => 'xsd:string')
101
+ b.floor(self.floor, 'xsi:type' => 'xsd:string')
102
+ b.lastName(self.last_name, 'xsi:type' => 'xsd:string')
103
+ b.location(self.location, 'xsi:type' => 'xsd:int')
104
+ b.loginDomain(self.loginDomain, 'xsi:type' => 'xsd:string')
105
+ b.loginUser(self.loginUser, 'xsi:type' => 'xsd:string')
106
+ b.manager(self.manager, 'xsi:type' => 'xsd:boolean')
107
+ b.notes(self.notes, 'xsi:type' => 'xsd:string')
108
+ b.phone(self.phone, 'xsi:type' => 'xsd:string')
109
+ b.secondaryEmail(self.secondaryEmail, 'xsi:type' => 'xsd:string')
110
+ b.sms(self.sms, 'xsi:type' => 'xsd:string')
111
+ b.userManagerName(self.userManagerName, 'xsi:type' => 'xsd:string')
112
+ b.userName(self.username, 'xsi:type' => 'xsd:string')
113
+ }
114
+ xml = builder.id(self.username) if include_id
115
+
116
+ xml
117
+ end
118
+
119
+ # Update instance variables to match what is in response
120
+ def set_self_from_response(response)
121
+ self.username = response[:user_name]
122
+ self.display_name = response[:display_name]
123
+ self.email = response[:email]
124
+ self.phone = response[:phone]
125
+ self.first_name = response[:first_name]
126
+ self.last_name = response[:last_name]
127
+ self.admin = response[:admin]
128
+ self.agreement = response[:agreement]
129
+ self.building = response[:building]
130
+ self.car_number = response[:carNumber]
131
+ self.cellphone = response[:cellphone]
132
+ self.company = response[:company]
133
+ self.cubic = response[:cubic]
134
+ self.custInt1 = response[:custInt1]
135
+ self.custInt2 = response[:custInt2]
136
+ self.custList1 = response[:custList1]
137
+ self.custList2 = response[:custList2]
138
+ self.custNotes = response[:custNotes]
139
+ self.custText1 = response[:custText1]
140
+ self.custText2 = response[:custText2]
141
+ self.department = response[:department]
142
+ self.disable = response[:disable]
143
+ self.emailNotifications = response[:emailNotifications]
144
+ self.enableLoginToEup = response[:enableLoginToEup]
145
+ self.floor = response[:floor]
146
+ self.location = response[:location]
147
+ self.manager = response[:manager]
148
+ self.notes = response[:notes]
149
+ self.sms = response[:sms]
150
+ self.userManagerName = response[:userManagerName]
151
+ self.loginDomain = response[:loginDomain]
152
+ self.loginUser = response[:loginUser]
153
+ self.secondaryEmail = response[:secondaryEmail]
154
+ end
155
+ end