gotransverse-tract-api 0.3.4 → 0.4.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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/lib/gotransverse-tract-api.rb +51 -1
  3. data/lib/gotransverse-tract-api/api_data.rb +259 -0
  4. data/lib/gotransverse-tract-api/billing_account/adjustment.rb +205 -5
  5. data/lib/gotransverse-tract-api/billing_account/billing_account.rb +146 -13
  6. data/lib/gotransverse-tract-api/billing_account/invoice.rb +2 -1
  7. data/lib/gotransverse-tract-api/billing_account/payment.rb +90 -9
  8. data/lib/gotransverse-tract-api/billing_account/refund.rb +15 -1
  9. data/lib/gotransverse-tract-api/order/order_item.rb +179 -7
  10. data/lib/gotransverse-tract-api/order/organization.rb +15 -1
  11. data/lib/gotransverse-tract-api/order/people.rb +14 -16
  12. data/lib/gotransverse-tract-api/order/sales_order.rb +253 -6
  13. data/lib/gotransverse-tract-api/service/service.rb +273 -24
  14. data/lib/gotransverse-tract-api/service/service_resource.rb +65 -7
  15. data/lib/gotransverse-tract-api/usage/usage_event.rb +58 -3
  16. data/lib/gotransverse-tract-api/usage/usage_main.rb +19 -0
  17. data/lib/gotransverse-tract-api/usage/usage_some.rb +24 -0
  18. data/lib/gotransverse-tract-api/version.rb +1 -1
  19. data/spec/gotransverse-tract-api/billing_account/adjustment_spec.rb +190 -0
  20. data/spec/gotransverse-tract-api/billing_account/billing_account_spec.rb +380 -0
  21. data/spec/gotransverse-tract-api/billing_account/invoice_spec.rb +43 -0
  22. data/spec/gotransverse-tract-api/billing_account/payment_spec.rb +104 -2
  23. data/spec/gotransverse-tract-api/billing_account/refund_spec.rb +30 -0
  24. data/spec/gotransverse-tract-api/order/order_item_spec.rb +169 -0
  25. data/spec/gotransverse-tract-api/order/organization_spec.rb +32 -0
  26. data/spec/gotransverse-tract-api/order/people_spec.rb +32 -0
  27. data/spec/gotransverse-tract-api/order/sales_order_spec.rb +209 -0
  28. data/spec/gotransverse-tract-api/service/service_resource_spec.rb +83 -0
  29. data/spec/gotransverse-tract-api/service/service_spec.rb +194 -0
  30. data/spec/gotransverse-tract-api/usage/usage_event_spec.rb +57 -0
  31. metadata +27 -2
@@ -34,7 +34,21 @@ module GoTransverseTractApi
34
34
  # @param {Hash} address
35
35
  #
36
36
  def self.add_address eid, address
37
- GoTransverseTractApi.post_request_for(self, {eid: eid}, address, "addAddress")
37
+ data = {
38
+ :addAddressToParty => {},
39
+ :person => {eid: eid},
40
+ :postalAddress => {
41
+ :purpose => address[:purpose],
42
+ :country => address[:country],
43
+ :city => address[:city],
44
+ :regionOrState => address[:region_or_state],
45
+ :postalCode => address[:postal_code],
46
+ :line1 => address[:line1]
47
+ }
48
+ }
49
+
50
+ xml_data = GoTransverseTractApi.generateXML(data, 'addAddressToParty')
51
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "addAddress")
38
52
  end
39
53
 
40
54
  #
@@ -49,23 +49,21 @@ module GoTransverseTractApi
49
49
  # @param {Hash} address
50
50
  #
51
51
  def self.add_address eid, address
52
- GoTransverseTractApi.post_request_for(self, {eid: eid}, address, "addAddress")
53
- end
52
+ data = {
53
+ :addAddressToParty => {},
54
+ :person => {eid: eid},
55
+ :postalAddress => {
56
+ :purpose => address[:purpose],
57
+ :country => address[:country],
58
+ :city => address[:city],
59
+ :regionOrState => address[:region_or_state],
60
+ :postalCode => address[:postal_code],
61
+ :line1 => address[:line1]
62
+ }
63
+ }
54
64
 
55
- #
56
- # @param {Long} eid
57
- # @param {Hash} person
58
- #
59
- def self.add_person eid, person
60
- GoTransverseTractApi.post_request_for(self, {eid: eid}, person, "addPerson")
61
- end
62
-
63
- #
64
- # @param {Long} eid
65
- # @param {Hash} person
66
- #
67
- def self.remove_person eid, person
68
- GoTransverseTractApi.post_request_for(self, {eid: eid}, person, "removePerson")
65
+ xml_data = GoTransverseTractApi.generateXML(data, 'addAddressToParty')
66
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "addAddress")
69
67
  end
70
68
 
71
69
  end
@@ -103,14 +103,67 @@ module GoTransverseTractApi
103
103
  # @param {Hash} sales_order
104
104
  #
105
105
  def confirm eid, sales_order
106
- GoTransverseTractApi.post_request_for(self, {eid: eid}, sales_order)
106
+ payment = sales_order[:payment]
107
+ sales_order = sales_order[:sales_order]
108
+
109
+ order_item_struct = prepare_products_struct(sales_order)
110
+
111
+ data = {
112
+ :confirmOrder => {},
113
+ :salesOrder => {
114
+ :attributes => {
115
+ :referral => sales_order[:referral],
116
+ :orderDate => sales_order[:order_date],
117
+ :orderStatus => sales_order[:order_status],
118
+ eid: eid
119
+ },
120
+ :orderItems => {
121
+ :attributes => GoTransverseTractApi::ApiData.new.get_page_info(sales_order[:order_items]),
122
+ :orderItem => order_item_struct
123
+ },
124
+ :billingAccount => {
125
+ :automaticRecurringPayment => sales_order[:billing_account][:automatic_recurring_payment],
126
+ eid: sales_order[:billing_account][:eid]
127
+ }
128
+ },
129
+ :payment => {
130
+ :attributes => {
131
+ :amount => payment[:amount],
132
+ :description => payment[:description]
133
+ },
134
+ :billingAccount => {
135
+ :automaticRecurringPayment => payment[:billing_account][:automatic_recurring_payment],
136
+ eid: payment[:billing_account][:eid]
137
+ },
138
+ :creditCardPayment => {
139
+ :cardType => payment[:credit_card_payment][:card_type],
140
+ :cardHolderFirstName => payment[:credit_card_payment][:card_holder_first_name],
141
+ :cardHolderMiddleName => payment[:credit_card_payment][:card_holder_middle_name],
142
+ :cardHolderLastName => payment[:credit_card_payment][:card_holder_last_name],
143
+ :cardIdentifierNumber => payment[:credit_card_payment][:card_identifier_number],
144
+ :cardExpiration => payment[:credit_card_payment][:card_expiration]
145
+ }
146
+ }
147
+ }
148
+
149
+ xml_data = GoTransverseTractApi.generateXML(data, 'confirmOrder')
150
+
151
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, 'confirm')
107
152
  end
108
153
 
109
154
  #
110
155
  # @param {Long} eid
111
156
  # @param {Hash} sales_order
112
157
  #
113
- def self.add_custom_field_value eid, sales_order
158
+ def add_custom_field_value(eid, sales_order)
159
+ data =
160
+ {
161
+ :addCustomFieldValue => {},
162
+ :order => { eid: eid },
163
+ :customFieldValue => { :value => sales_order[:value] }
164
+ }
165
+
166
+ xml_data = GoTransverseTractApi.generateXML(data,'addCustomFieldValue')
114
167
  GoTransverseTractApi.post_request_for(self, {eid: eid}, sales_order, "addCustomFieldValue")
115
168
  end
116
169
 
@@ -118,17 +171,211 @@ module GoTransverseTractApi
118
171
  # @param {Long} eid
119
172
  # @param {Hash} sales_order
120
173
  #
121
- def self.remove_custom_field_value eid, sales_order
174
+ def remove_custom_field_value eid, sales_order
175
+ data = {
176
+ :removeCustomFieldValue => {},
177
+ :order => { eid: eid },
178
+ :customFieldValue => { eid: sales_order[:eid] }
179
+ }
180
+
181
+ xml_data = GoTransverseTractApi.generateXML(data,'removeCustomFieldValue')
122
182
  GoTransverseTractApi.post_request_for(self, {eid: eid}, sales_order, "removeCustomFieldValue")
123
183
  end
124
184
 
125
185
  #
126
- # @param {Hash} person
186
+ # @param {Hash} sales_order
127
187
  #
128
- def self.create_sales_order sales_order
129
- GoTransverseTractApi.post_request_for(self, {}, sales_order, "")
188
+ def create_sales_order sales_order
189
+ data = {
190
+ :salesOrder => {
191
+ :note => sales_order[:note],
192
+ :purchaseOrderNumber => sales_order[:purchase_order_number]
193
+ },
194
+ :orderItems => {
195
+ :attributes => {},
196
+ :orderItem => get_product_struct(sales_order)
197
+ },
198
+ :billingAccount => {
199
+ :attributes => {
200
+ :billType => sales_order[:billing_account][:bill_type],
201
+ :automaticRecurringPayment => sales_order[:billing_account][:automatic_recurring_payment]
202
+ },
203
+ :dailyBillCycle => {
204
+ :attributes => {
205
+ eid: sales_order[:billing_account][:daily_bill_cycle][:eid]
206
+ }
207
+ },
208
+ :organization => {
209
+ :attributes => {
210
+ :name => sales_order[:billing_account][:organization][:name],
211
+ :taxIdNumber => sales_order[:billing_account][:organization][:tax_id_number]
212
+ },
213
+ :addresses => {
214
+ :attributes => {},
215
+ :postalAddress => get_address_struct(sales_order),
216
+ :telecomAddress => {
217
+ :attributes => {
218
+ :dialingPrefix => sales_order[:billing_account][:organization][:addresses][:telecom_address][:dialing_prefix],
219
+ :countryCode => sales_order[:billing_account][:organization][:addresses][:telecom_address][:country_code],
220
+ :areaCode => sales_order[:billing_account][:organization][:addresses][:telecom_address][:area_code],
221
+ :number => sales_order[:billing_account][:organization][:addresses][:telecom_address][:number],
222
+ :extension => sales_order[:billing_account][:organization][:addresses][:telecom_address][:extension],
223
+ :purpose => sales_order[:billing_account][:organization][:addresses][:telecom_address][:purpose]
224
+ }
225
+ },
226
+ :emailAddress => {
227
+ :attributes => {
228
+ :email => sales_order[:billing_account][:organization][:addresses][:email_address][:email],
229
+ :purpose => sales_order[:billing_account][:organization][:addresses][:email_address][:purpose]
230
+ }
231
+ }
232
+ }
233
+ },
234
+ :billingAccountCategory => {
235
+ :attributes => {
236
+ eid: sales_order[:billing_account][:billing_account_category][:eid]
237
+ }
238
+ }
239
+ }
240
+ }
241
+
242
+ xml_data = GoTransverseTractApi.generateXML(data, 'salesOrder')
243
+ GoTransverseTractApi.post_request_for(self, xml_data, "")
244
+ end
245
+
246
+
247
+
248
+ private
249
+
250
+ #
251
+ # @param {Hash} sales_order
252
+ # Return {Hash} products
253
+ #
254
+ def get_product_struct(sales_order)
255
+ products = {}
256
+ items = []
257
+
258
+ order_item = {
259
+ :attributes => {
260
+ :quantity => sales_order[:order_items][:order_item][:quantity],
261
+ :sequence => sales_order[:order_items][:order_item][:sequence],
262
+ :description => sales_order[:order_items][:order_item][:description]
263
+ }
264
+ }
265
+
266
+ items = sales_order[:order_items][:order_item][:product]
267
+ (0..items.size - 1).each do|i|
268
+ products = {
269
+ :product => {
270
+ :attributes => {
271
+ eid: items[i][:eid]
272
+ }
273
+ }
274
+ }
275
+ end
276
+
277
+ order_item.merge products
130
278
  end
131
279
 
280
+ #
281
+ # @param {Hash} sales_order
282
+ # Return {Hash} postal_addresses
283
+ #
284
+ def get_address_struct(sales_order)
285
+ postal_addresses = []
286
+ items = []
287
+
288
+ items = sales_order[:billing_account][:organization][:addresses][:postal_address]
289
+
290
+ (0..items.size - 1).each do|i|
291
+ postal_addresses << {
292
+ :postalAddress => {
293
+ :attributes => {
294
+ :purpose => items[i][:purpose],
295
+ :country => items[i][:country],
296
+ :city => items[i][:city],
297
+ :regionOrState => items[i][:region_or_state],
298
+ :postalCode => items[i][:postal_code],
299
+ :line1 => items[i][:line1],
300
+ :line2 => items[i][:line2]
301
+ }
302
+ }
303
+ }
304
+ end
305
+
306
+ postal_addresses
307
+ end
308
+
309
+
310
+ #
311
+ # @param {Hash} sales_order
312
+ # Return {Hash} products
313
+ #
314
+ def prepare_products_struct(sales_order)
315
+ products = {}
316
+ items = []
317
+
318
+ order_item = {
319
+ :attributes => {
320
+ :quantity => sales_order[:order_items][:order_item][:quantity]
321
+ }
322
+ }
323
+
324
+ items = sales_order[:order_items][:order_item][:product]
325
+ (0..items.size - 1).each do|i|
326
+ products = {
327
+ :product => {
328
+ :attributes => {
329
+ :name => items[i][:name],
330
+ :description => items[i][:description],
331
+ :shortDescription => items[i][:short_description],
332
+ :productTypeCode => items[i][:product_type_code],
333
+ :productState => items[i][:product_state],
334
+ :requiresAgreement => items[i][:requires_agreement],
335
+ :serialized => items[i][:serialized],
336
+ :taxable => items[i][:taxable],
337
+ :trial => items[i][:trial],
338
+ :defaultQuantity => items[i][:default_quantity],
339
+ :minServiceResources => items[i][:min_service_resources],
340
+ :maxServiceResources => items[i][:max_service_resources],
341
+ :trialOverride => items[i][:trial_override],
342
+ eid: items[i][:eid]
343
+ },
344
+ :productPrices => {
345
+ :attributes => GoTransverseTractApi::ApiData.new.get_page_info(items[i][:product_prices]),
346
+ :productPrice => {
347
+ :attributes => {
348
+ :fromDate => items[i][:product_prices][:product_price][:from_date],
349
+ :priceOverride => items[i][:product_prices][:product_price][:price_override],
350
+ :type => items[i][:product_prices][:product_price][:type],
351
+ :recurringPaymentRequired => items[i][:product_prices][:product_price][:recurring_payment_required],
352
+ eid: items[i][:product_prices][:product_price][:eid]
353
+ },
354
+ :priceRanges => {
355
+ :attributes => GoTransverseTractApi::ApiData.new.get_page_info(items[i][:product_prices][:product_price][:price_ranges]),
356
+ :priceRange => {
357
+ :quantityBeginRange => items[i][:product_prices][:product_price][:price_ranges][:price_range][:quantity_begin_range],
358
+ :price => items[i][:product_prices][:product_price][:price_ranges][:price_range][:price],
359
+ :level => items[i][:product_prices][:product_price][:price_ranges][:price_range][:level],
360
+ eid: items[i][:product_prices][:product_price][:price_ranges][:price_range][:eid]
361
+ }
362
+ }
363
+ }
364
+ },
365
+ :productCategory => {
366
+ :name => items[i][:product_category][:name],
367
+ :description => items[i][:product_category][:description],
368
+ :status => items[i][:product_category][:status],
369
+ eid: items[i][:product_category][:eid]
370
+ },
371
+ :actions => GoTransverseTractApi::ApiData.new.get_page_info(items[i][:actions]),
372
+ :productUsageRules => GoTransverseTractApi::ApiData.new.get_page_info(items[i][:product_usage_rules])
373
+ }
374
+ }
375
+ end
376
+
377
+ order_item.merge products
378
+ end
132
379
 
133
380
  end
134
381
 
@@ -81,7 +81,13 @@ module GoTransverseTractApi
81
81
  # @param {Hash} service
82
82
  #
83
83
  def resume eid, service
84
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "resume")
84
+ data = {
85
+ :resumeService => {},
86
+ :service => {eid: eid}
87
+ }
88
+
89
+ xml_data = GoTransverseTractApi.generateXML(data, 'resumeService')
90
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "resume")
85
91
  end
86
92
 
87
93
  #
@@ -89,79 +95,247 @@ module GoTransverseTractApi
89
95
  # @param {Hash} service
90
96
  #
91
97
  def suspend eid, service
92
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "suspend")
98
+ data = {
99
+ :suspendService => {},
100
+ :service => {eid: eid}
101
+ }
102
+
103
+ xml_data = GoTransverseTractApi.generateXML(data, 'suspendService')
104
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "suspend")
93
105
  end
94
106
 
95
107
  #
96
108
  # @param {Long} eid
97
109
  # @param {Hash} service
98
110
  #
99
- def self.add_service_resource eid, service
100
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "addServiceResource")
111
+ def add_service_resource eid, service
112
+ data = {
113
+ :addServiceResourceToService => {},
114
+ :service => {eid: eid},
115
+ :serviceResource => {
116
+ :attributes => {
117
+ :identifier => service[:service_resource][:identifier]
118
+ },
119
+ :category => {
120
+ eid: :service[:service_resource][:category][:eid]
121
+ }
122
+ }
123
+ }
124
+
125
+ xml_data = GoTransverseTractApi.generateXML(data, 'addServiceResourceToService')
126
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "addServiceResource")
101
127
  end
102
128
 
103
129
  #
104
130
  # @param {Long} eid
105
131
  # @param {Hash} service
106
132
  #
107
- def self.remove_service_resource eid, service
108
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "removeServiceResource")
133
+ def remove_service_resource eid, service
134
+ data = {
135
+ :removeServiceResourceFromService => {},
136
+ :service => {eid: eid},
137
+ :serviceResource => {eid: service[:service_resource][:eid]}
138
+ }
139
+
140
+ xml_data = GoTransverseTractApi.generateXML(data, 'removeServiceResourceFromService')
141
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "removeServiceResource")
109
142
  end
110
143
 
111
144
  #
112
145
  # @param {Long} eid
113
146
  # @param {Hash} service
114
147
  #
115
- def self.add_service_usage_rule_to_service eid, service
116
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "addServiceUsageRuleToService")
148
+ def add_service_usage_rule_to_service eid, service
149
+ data = {
150
+ :addServiceUsageRuleToService => {},
151
+ :service => {eid: eid},
152
+ :matchAllServiceUsageRule => {
153
+ :attributes => {
154
+ :limit => service[:match_all_service_usage_rule][:limit],
155
+ :usageUom => service[:match_all_service_usage_rule][:usage_uom],
156
+ :name => service[:match_all_service_usage_rule][:name],
157
+ :order => service[:match_all_service_usage_rule][:order],
158
+ :proratedOnOrder => service[:match_all_service_usage_rule][:prorated_on_order],
159
+ :proratedOnCancel => service[:match_all_service_usage_rule][:prorated_on_cancel],
160
+ :rollOverType => service[:match_all_service_usage_rule][:roll_over_type],
161
+ :allowanceType => service[:match_all_service_usage_rule][:allowance_type],
162
+ :validFrom => service[:match_all_service_usage_rule][:valid_from],
163
+ :validTo => service[:match_all_service_usage_rule][:valid_to],
164
+ :ruleType => service[:match_all_service_usage_rule][:rule_type],
165
+ :status => service[:match_all_service_usage_rule][:status]
166
+ },
167
+ :chargeCategory => {
168
+ eid: service[:match_all_service_usage_rule][:charge_categroy][:eid]
169
+ },
170
+ :flatUsageRate => {
171
+ :uom => service[:match_all_service_usage_rule][:flat_usage_rate][:uom],
172
+ :validFrom => service[:match_all_service_usage_rule][:flat_usage_rate][:valid_from],
173
+ :validTo => service[:match_all_service_usage_rule][:flat_usage_rate][:valid_to],
174
+ :rate => service[:match_all_service_usage_rule][:flat_usage_rate][:rate]
175
+ }
176
+ }
177
+ }
178
+
179
+ xml_data = GoTransverseTractApi.generateXML(data, 'addServiceUsageRuleToService')
180
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "addServiceUsageRule")
117
181
  end
118
182
 
119
183
  #
120
184
  # @param {Long} eid
121
185
  # @param {Hash} service
122
186
  #
123
- def self.remove_service_usage_rule_from_service eid, service
124
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "removeServiceUsageRuleFromService")
187
+ def remove_service_usage_rule_from_service eid, service
188
+ data = {
189
+ :removeServiceUsageRuleFromService => {},
190
+ :service => {eid: eid},
191
+ :matchAllServiceUsageRule => {
192
+ eid: service[:match_all_service_usage_rule][:eid]
193
+ }
194
+ }
195
+ xml_data = GoTransverseTractApi.generateXML(data, 'removeServiceUsageRuleFromService')
196
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "removeServiceUsageRule")
125
197
  end
126
198
 
127
199
  #
128
200
  # @param {Long} eid
129
201
  # @param {Hash} service
130
202
  #
131
- def self.add_agreement eid, service
132
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "addAgreement")
203
+ def add_agreement eid, service
204
+ data = {
205
+ :addAgreementToService => {},
206
+ :service => {eid: eid},
207
+ :agreementService=> {
208
+ :attributes => {
209
+ :endAction => service[:agreement_service][:end_action],
210
+ :endDate => service[:agreement_service][:end_date],
211
+ :startDate => service[:agreement_service][:start_date]
212
+ },
213
+ :agreement => {
214
+ eid: service[:agreement_service][:agreement][:eid]
215
+ }
216
+ }
217
+ }
218
+
219
+ xml_data = GoTransverseTractApi.generateXML(data, 'addAgreementToService')
220
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "addAgreement")
133
221
  end
134
222
 
135
223
  #
136
224
  # @param {Long} eid
137
225
  # @param {Hash} service
138
226
  #
139
- def self.add_counter eid, service
140
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "addCounter")
227
+ def add_counter eid, service
228
+ data = {
229
+ :addCounterToService => {},
230
+ :service => {eid: eid},
231
+ :usageRuleCounter => {
232
+ :attributes => {
233
+ :name => service[:usage_rule_counter][:name],
234
+ :description => service[:usage_rule_counter][:description],
235
+ :status => service[:usage_rule_counter][:status],
236
+ :entityRelationType => service[:usage_rule_counter][:entity_relation_type],
237
+ :uom => service[:usage_rule_counter][:uom],
238
+ :threshold => service[:usage_rule_counter][:threshold]
239
+ },
240
+ :servicePeriodCounterResetCriteria => {}
241
+ }
242
+ }
243
+
244
+ xml_data = GoTransverseTractApi.generateXML(data, 'addCounterToService')
245
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "addCounter")
141
246
  end
142
247
 
143
248
  #
144
249
  # @param {Long} eid
145
250
  # @param {Hash} service
146
251
  #
147
- def self.add_custom_field_value eid, service
148
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "addCustomFieldValue")
252
+ def add_custom_field_value eid, service
253
+ data = {
254
+ :addCustomFieldValueToService => {},
255
+ :service => {eid: eid},
256
+ :customFieldValue => {
257
+ :attributes => {
258
+ :value => service[:custom_field_value][:value]
259
+ },
260
+ :customField => {
261
+ eid: service[:custom_field_value][:custom_field][:eid]
262
+ }
263
+ }
264
+ }
265
+
266
+ xml_data = GoTransverseTractApi.generateXML(data, 'addCustomFieldValueToService')
267
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "addCustomFieldValue")
149
268
  end
150
269
 
151
270
  #
152
271
  # @param {Long} eid
153
272
  # @param {Hash} service
154
273
  #
155
- def self.remove_custom_field_value eid, service
156
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "removeCustomFieldValue")
274
+ def remove_custom_field_value eid, service
275
+ data = {
276
+ :removeCustomFieldValueFromService => {},
277
+ :service => {eid: eid},
278
+ :customFieldValue => {
279
+ eid: service[:custom_field_value][:eid]
280
+ }
281
+ }
282
+
283
+ xml_data = GoTransverseTractApi.generateXML(data, 'removeCustomFieldValueFromService')
284
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "removeCustomFieldValue")
157
285
  end
158
286
 
159
287
  #
160
288
  # @param {Long} eid
161
289
  # @param {Hash} service
162
290
  #
163
- def self.add_discount_identifier eid, service
164
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "addDiscountIdentifier")
291
+ def add_discount_identifier eid, service
292
+ api_data = GoTransverseTractApi::ApiData.new
293
+
294
+ data = {
295
+ :addDiscountIdentifierToService => {},
296
+ :service => {
297
+ :attributes => {
298
+ :amount => service[:amount],
299
+ :startDate => service[:start_date],
300
+ :status => service[:status],
301
+ :description => service[:description],
302
+ :renewalCount => service[:renewal_count],
303
+ eid: service[:eid],
304
+ :queryScope => service[:query_scope]
305
+ },
306
+ :billingAccount => {
307
+ eid: service[:billing_account][:eid],
308
+ :queryScope => service[:billing_account][:query_scope]
309
+ },
310
+ :serviceResources => GoTransverseTractApi::ApiData.new.get_page_info(service[:service_resources]),
311
+ :product => {
312
+ eid: service[:product][:eid],
313
+ :queryScope => service[:product][:query_scope]
314
+ },
315
+ :servicePeriods => api_data.get_page_info(service[:service_periods]),
316
+ :servicePrices => api_data.get_page_info(service[:service_prices]),
317
+ :serviceUsageRules => api_data.get_page_info(service[:service_usage_rules]),
318
+ :counters => api_data.get_page_info(service[:counters]),
319
+ :customFieldValues => api_data.get_page_info(service[:custom_field_values])
320
+ },
321
+ :discountIdentifier => {
322
+ :attributes => {
323
+ :status => service[:discount_identifier][:status],
324
+ :unlimited => service[:discount_identifier][:unlimited],
325
+ :uses => service[:discount_identifier][:uses],
326
+ :identifier => service[:discount_identifier][:identifier],
327
+ eid: service[:discount_identifier][:eid],
328
+ :queryScope => service[:discount_identifier][:query_scope]
329
+ },
330
+ :category => {
331
+ eid: service[:discount_identifier][:category][:eid],
332
+ :queryScope => service[:discount_identifier][:category][:query_scope]
333
+ }
334
+ }
335
+ }
336
+
337
+ xml_data = GoTransverseTractApi.generateXML(data, 'addDiscountIdentifierToService')
338
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "addDiscountIdentifier")
165
339
  end
166
340
 
167
341
  #
@@ -169,7 +343,17 @@ module GoTransverseTractApi
169
343
  # @param {Hash} service
170
344
  #
171
345
  def change_price eid, service
172
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "changePrice")
346
+ data = {
347
+ :changeServicePrice => {
348
+ :attributes => {
349
+ :newRecurringUnitPrice => service[:new_recurring_unit_price]
350
+ },
351
+ :service => {eid: eid}
352
+ }
353
+ }
354
+
355
+ xml_data = GoTransverseTractApi.generateXML(data, 'changeServicePrice')
356
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "changePrice")
173
357
  end
174
358
 
175
359
  #
@@ -177,7 +361,18 @@ module GoTransverseTractApi
177
361
  # @param {Hash} service
178
362
  #
179
363
  def change_quantity eid, service
180
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "changeQuantity")
364
+ data = {
365
+ :changeServiceQuantity => {
366
+ :attributes => {
367
+ :newQuantity => service[:new_quantity],
368
+ :effectiveDate => service[:effective_date]
369
+ },
370
+ :service => {eid: eid}
371
+ }
372
+ }
373
+
374
+ xml_data = GoTransverseTractApi.generateXML(data, 'changeServiceQuantity')
375
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "changeQuantity")
181
376
  end
182
377
 
183
378
  #
@@ -185,7 +380,55 @@ module GoTransverseTractApi
185
380
  # @param {Hash} service
186
381
  #
187
382
  def renew eid, service
188
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "renew")
383
+ data = {
384
+ :renewService => {},
385
+ :service => {
386
+ :attributes => {eid: eid},
387
+ :billingAccount => {
388
+ eid: service[:billing_account][:eid]
389
+ }
390
+ },
391
+ :order => {
392
+ :attributes => {},
393
+ :orderItems => {
394
+ :attributes => {},
395
+ :orderItem => {
396
+ :attributes => {
397
+ :quantity => service[:order][:order_items][:order_item][:quantity],
398
+ :sequence => service[:order][:order_items][:order_item][:sequence]
399
+ },
400
+ :product => {
401
+ eid: service[:order][:order_items][:order_item][:product][:eid]
402
+ },
403
+ :selectedAgreement => {
404
+ eid: service[:order][:order_items][:order_item][:selected_agreement][:eid]
405
+ }
406
+ }
407
+ },
408
+ :billingAccount => { eid: service[:order][:billing_account][:eid] },
409
+ :payments => {
410
+ :attributes => {},
411
+ :payment => {
412
+ :attributes => {
413
+ :amount => service[:order][:payments][:payment][:amount],
414
+ :description => service[:order][:payments][:payment][:description]
415
+ },
416
+ :billingAccount => { eid: service[:order][:payments][:payment][:billing_account][:eid] },
417
+ :creditCardPayment => {
418
+ :cardType => service[:order][:payments][:payment][:credit_card_payment][:card_type],
419
+ :cardHolderFirstName => service[:order][:payments][:payment][:credit_card_payment][:card_holder_first_name],
420
+ :cardHolderMiddleName => service[:order][:payments][:payment][:credit_card_payment][:card_holder_middle_name],
421
+ :cardHolderLastName => service[:order][:payments][:payment][:credit_card_payment][:card_holder_last_name],
422
+ :cardIdentifierNumber => service[:order][:payments][:payment][:credit_card_payment][:card_identifier_number],
423
+ :cardExpiration => service[:order][:payments][:payment][:credit_card_payment][:card_expiration]
424
+ }
425
+ }
426
+ }
427
+ }
428
+ }
429
+
430
+ xml_data = GoTransverseTractApi.generateXML(data, 'renewService')
431
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "renew")
189
432
  end
190
433
 
191
434
  #
@@ -193,7 +436,13 @@ module GoTransverseTractApi
193
436
  # @param {Hash} service
194
437
  #
195
438
  def deactivate eid, service
196
- GoTransverseTractApi.post_request_for(self, {eid: eid}, service, "deactivate")
439
+ data = {
440
+ :deactivateService => {},
441
+ :service => {eid: eid}
442
+ }
443
+
444
+ xml_data = GoTransverseTractApi.generateXML(data, 'deactivateService')
445
+ GoTransverseTractApi.post_request_for(self, {eid: eid}, xml_data, "deactivate")
197
446
  end
198
447
 
199
448
  #