rnsap 0.4.2 → 0.4.10

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/helper/rfc_helper.rb +19 -15
  3. data/lib/helper/util_helper.rb +39 -0
  4. data/lib/po_detail/all.rb +27 -0
  5. data/lib/po_detail/po_account.rb +93 -0
  6. data/lib/po_detail/po_addrdelivery.rb +115 -0
  7. data/lib/po_detail/po_all_versions.rb +55 -0
  8. data/lib/po_detail/po_components.rb +53 -0
  9. data/lib/po_detail/po_cond.rb +91 -0
  10. data/lib/po_detail/po_cond_header.rb +91 -0
  11. data/lib/po_detail/po_confirmation.rb +39 -0
  12. data/lib/po_detail/po_contract_limits.rb +21 -0
  13. data/lib/po_detail/po_exp_imp_header.rb +7 -0
  14. data/lib/po_detail/po_exp_imp_item.rb +21 -0
  15. data/lib/po_detail/po_extension_out.rb +13 -0
  16. data/lib/po_detail/po_header.rb +131 -0
  17. data/lib/po_detail/po_history.rb +107 -0
  18. data/lib/po_detail/po_history_ma.rb +37 -0
  19. data/lib/po_detail/po_history_totals.rb +51 -0
  20. data/lib/po_detail/po_inv_plan_header.rb +49 -0
  21. data/lib/po_detail/po_inv_plan_item.rb +51 -0
  22. data/lib/po_detail/po_item.rb +359 -0
  23. data/lib/po_detail/po_limits.rb +47 -0
  24. data/lib/po_detail/po_partner.rb +11 -0
  25. data/lib/po_detail/po_schedule.rb +59 -0
  26. data/lib/po_detail/po_serial_number.rb +13 -0
  27. data/lib/po_detail/po_services.rb +137 -0
  28. data/lib/po_detail/po_shipping_exp.rb +53 -0
  29. data/lib/po_detail/po_srv_access_values.rb +17 -0
  30. data/lib/po_detail/po_text_header.rb +13 -0
  31. data/lib/po_detail/po_text_item.rb +13 -0
  32. data/lib/po_release_info/all.rb +1 -0
  33. data/lib/po_release_info/po_release_final.rb +53 -0
  34. data/lib/preq_detail/all.rb +8 -0
  35. data/lib/preq_release_info/all.rb +4 -0
  36. data/lib/rnsap.rb +270 -83
  37. data/lib/rnsap_spec.rb +93 -0
  38. metadata +36 -2
data/lib/rnsap.rb CHANGED
@@ -2,22 +2,20 @@
2
2
 
3
3
  require 'nwrfc'
4
4
  require 'read_table/table_column'
5
- require 'preq_detail/preq_item'
6
- require 'preq_detail/preq_acct_assignment'
7
- require 'preq_detail/preq_text'
8
- require 'preq_detail/preq_limits'
9
- require 'preq_detail/preq_contract_limits'
10
- require 'preq_detail/preq_services'
11
- require 'preq_detail/preq_services_texts'
12
- require 'preq_detail/preq_srv_accass_values'
13
- require 'preq_release_info/preq_gen_release_info'
14
- require 'preq_release_info/preq_release_prerequisites'
15
- require 'preq_release_info/preq_release_posted'
16
- require 'preq_release_info/preq_release_final'
5
+
17
6
  require 'return'
7
+
8
+ require 'preq_detail/all'
9
+ require 'preq_release_info/all'
10
+
11
+ require 'po_detail/all'
12
+ require 'po_release_info/all'
13
+
18
14
  require 'helper/rfc_helper'
15
+ require 'helper/util_helper'
19
16
 
20
17
  include NWRFC
18
+ include UtilHelper
21
19
 
22
20
  # Module for SAP helper methods. RnSap allows for a simpler
23
21
  # manner to access SAP servers calling RFC BAPIs.
@@ -33,6 +31,9 @@ module RnSap
33
31
  # keeps the SAP connection alive during the Sap instance lifecycle
34
32
  attr_reader :conn
35
33
 
34
+ INT_TYPES ||= ['b','N']
35
+ FLOAT_TYPES ||= ['P']
36
+ DATE_TYPES ||=['D']
36
37
  # Constructor requires to receive connection parameters,
37
38
  # a hash containint necessary information to logon to SAP
38
39
  # @param conn_parms [Hash] SAP Connection Parameters
@@ -45,36 +46,26 @@ module RnSap
45
46
  conn.disconnect
46
47
  end
47
48
 
48
- def commit()
49
+ def commit(conn)
50
+
49
51
  #-- Execute BAPI_TRANSACTION_COMMIT
50
- fn_commit = @conn.get_function('BAPI_REQUISITION_RELEASE')
52
+ fn_commit = conn.get_function('BAPI_TRANSACTION_COMMIT')
51
53
  fn_commit = fn_commit.get_function_call
52
- fn_commit[:NUMBER] = preq
53
- fn_commit[:REL_CODE] = rel_code
54
- fn_commit[:ITEM] = item
55
- fn_commit[:USE_EXCEPTIONS] = use_exeptions
56
- fn_commit[:NO_COMMIT_WORK] = no_commit
54
+ fn_commit[:WAIT] = 'X'
55
+
57
56
  fn_commit.invoke
58
- tb_return = get_object_list(fn_commit[:RETURN], Return.to_s)
59
- {
60
- tb_return: tb_return,
61
- }
57
+
58
+ api_return_success({tb_return: fn_commit[:RETURN]})
62
59
  end
63
60
 
64
- def rollback()
61
+ def rollback(conn)
65
62
  #-- Execute BAPI_TRANSACTION_ROLLBACK
66
- fn_rollback = @conn.get_function('BAPI_REQUISITION_RELEASE')
63
+ fn_rollback = conn.get_function('BAPI_TRANSACTION_ROLLBACK')
67
64
  fn_rollback = fn_rollback.get_function_call
68
- fn_rollback[:NUMBER] = preq
69
- fn_rollback[:REL_CODE] = rel_code
70
- fn_rollback[:ITEM] = item
71
- fn_rollback[:USE_EXCEPTIONS] = use_exeptions
72
- fn_rollback[:NO_COMMIT_WORK] = no_commit
65
+
73
66
  fn_rollback.invoke
74
- tb_return = get_object_list(fn_rollback[:RETURN], Return.to_s)
75
- {
76
- tb_return: tb_return,
77
- }
67
+
68
+ api_return_success({tb_return: fn_rollback[:RETURN]})
78
69
  end
79
70
 
80
71
  # Invokes SAP RFC_READ_TABLE function module remotely, passing
@@ -154,13 +145,38 @@ module RnSap
154
145
  end
155
146
 
156
147
  list = []
148
+
157
149
  fc_read_table[:DATA].each do |row|
158
150
  obj = base_obj.class.new
159
- wa = row[:WA]
151
+ wa = row[:WA].split('|')
152
+ pos = -1
160
153
  fields_down.each do |field|
154
+ pos = pos + 1
161
155
  column = columns_hash[field.upcase]
162
- value = wa[column.offset.to_i, column.length.to_i]
163
- eval("obj.#{field} = '#{value.strip}'")
156
+ # value = wa[column.offset.to_i, column.length.to_i]
157
+ if INT_TYPES.include?(column.type)
158
+ value = wa[pos].to_i
159
+ eval("obj.#{field} = #{value}")
160
+ elsif FLOAT_TYPES.include?(column.type)
161
+ value = wa[pos].to_f
162
+ eval("obj.#{field} = #{value}")
163
+ elsif DATE_TYPES.include?(column.type)
164
+ value = wa[pos].strip
165
+ if value == '00000000'
166
+ eval("obj.#{field} = nil")
167
+ else
168
+ value = Date.new(
169
+ value[0..3],
170
+ value[4..5],
171
+ value[6..7]
172
+ )
173
+ eval("obj.#{field} = #{value}")
174
+ end
175
+ else
176
+ value = wa[pos].strip
177
+ eval("obj.#{field} = '#{value}'")
178
+ end
179
+
164
180
  end
165
181
  list << obj
166
182
  end
@@ -182,27 +198,34 @@ module RnSap
182
198
  fc_preq_detail.invoke
183
199
 
184
200
  #-- Execute conversions for returned tables to a designated list (array)
185
- preq_items = get_object_list(fc_preq_detail[:REQUISITION_ITEMS], PreqItem.to_s)
186
- preq_acct_assignment = get_object_list(fc_preq_detail[:REQUISITION_ACCOUNT_ASSIGNMENT], PreqAcctAssignment.to_s)
187
- preq_text = get_object_list(fc_preq_detail[:REQUISITION_TEXT], PreqText.to_s)
188
- preq_limits = get_object_list(fc_preq_detail[:REQUISITION_LIMITS], PreqLimits.to_s)
189
- preq_contract_limits = get_object_list(fc_preq_detail[:REQUISITION_CONTRACT_LIMITS], PreqContractLimits.to_s)
190
- preq_services = get_object_list(fc_preq_detail[:REQUISITION_SERVICES], PreqItem.to_s)
191
- preq_services_texts = get_object_list(fc_preq_detail[:REQUISITION_SERVICES_TEXTS], PreqServicesText.to_s)
192
- preq_srv_accass_values = get_object_list(fc_preq_detail[:REQUISITION_SRV_ACCASS_VALUES], PreqServicesAccassValues.to_s)
193
- tb_return = get_object_list(fc_preq_detail[:RETURN], Return.to_s)
194
-
195
- {
196
- preq_items: preq_items,
197
- preq_acct_assignment: preq_acct_assignment,
198
- preq_text: preq_text,
199
- preq_limits: preq_limits,
200
- preq_contract_limits: preq_contract_limits,
201
- preq_services: preq_services,
202
- preq_services_texts: preq_services_texts,
203
- preq_srv_accass_values: preq_srv_accass_values,
204
- tb_return: tb_return,
205
- }
201
+ preq_items = get_object_list(fc_preq_detail[:REQUISITION_ITEMS], PreqItem)
202
+ preq_acct_assignment = get_object_list(fc_preq_detail[:REQUISITION_ACCOUNT_ASSIGNMENT], PreqAcctAssignment)
203
+ preq_text = get_object_list(fc_preq_detail[:REQUISITION_TEXT], PreqText)
204
+ preq_limits = get_object_list(fc_preq_detail[:REQUISITION_LIMITS], PreqLimits)
205
+ preq_contract_limits = get_object_list(fc_preq_detail[:REQUISITION_CONTRACT_LIMITS], PreqContractLimits)
206
+ preq_services = get_object_list(fc_preq_detail[:REQUISITION_SERVICES], PreqItem)
207
+ preq_services_texts = get_object_list(fc_preq_detail[:REQUISITION_SERVICES_TEXTS], PreqServicesText)
208
+ preq_srv_accass_values = get_object_list(fc_preq_detail[:REQUISITION_SRV_ACCASS_VALUES], PreqServicesAccassValues)
209
+ tb_return = get_object_list(fc_preq_detail[:RETURN], Return)
210
+
211
+ retcode = tb_return.detect{|r| r.type == 'E'}
212
+
213
+ if retcode
214
+ api_return_error(retcode)
215
+ else
216
+ api_return_success({
217
+ preq_items: preq_items,
218
+ preq_acct_assignment: preq_acct_assignment,
219
+ preq_text: preq_text,
220
+ preq_limits: preq_limits,
221
+ preq_contract_limits: preq_contract_limits,
222
+ preq_services: preq_services,
223
+ preq_services_texts: preq_services_texts,
224
+ preq_srv_accass_values: preq_srv_accass_values,
225
+ tb_return: tb_return,
226
+ })
227
+ end
228
+
206
229
  end
207
230
 
208
231
  def preq_release_strategy_info(preq = 0, item = "00000", rel_code = "")
@@ -217,50 +240,214 @@ module RnSap
217
240
  fn_preq_rel_strat_info.invoke
218
241
 
219
242
  #-- Execute conversions for returned tables to a designated list (array)
220
- preq_gen_release_info = get_object_list(fn_preq_rel_strat_info[:GENERAL_RELEASE_INFO], PreqGenReleaseInfo.to_s)
221
- preq_release_prerequisites = get_object_list(fn_preq_rel_strat_info[:RELEASE_PREREQUISITES], PreqReleasePrerequisites.to_s)
222
- preq_release_posted = get_object_list(fn_preq_rel_strat_info[:RELEASE_ALREADY_POSTED], PreqReleasePosted.to_s)
223
- preq_release_final = get_object_list(fn_preq_rel_strat_info[:RELEASE_FINAL], PreqReleaseFinal.to_s)
224
- tb_return = get_object_list(fn_preq_rel_strat_info[:RETURN], Return.to_s)
225
-
226
- {
227
- preq_gen_release_info: preq_gen_release_info,
228
- preq_release_prerequisites: preq_release_prerequisites,
229
- preq_release_posted: preq_release_posted,
230
- preq_release_final: preq_release_final,
231
- tb_return: tb_return,
232
- }
243
+ preq_gen_release_info = get_object_list(fn_preq_rel_strat_info[:GENERAL_RELEASE_INFO], PreqGenReleaseInfo)
244
+ preq_release_prerequisites = get_object_list(fn_preq_rel_strat_info[:RELEASE_PREREQUISITES], PreqReleasePrerequisites)
245
+ preq_release_posted = get_object_list(fn_preq_rel_strat_info[:RELEASE_ALREADY_POSTED], PreqReleasePosted)
246
+ preq_release_final = get_object_list(fn_preq_rel_strat_info[:RELEASE_FINAL], PreqReleaseFinal)
247
+ tb_return = get_object_list(fn_preq_rel_strat_info[:RETURN], Return)
233
248
 
249
+ retcode = tb_return.detect{|r| r.type == 'E'}
250
+
251
+ if retcode
252
+ api_return_error(retcode)
253
+ else
254
+ api_return_success({
255
+ preq_gen_release_info: preq_gen_release_info,
256
+ preq_release_prerequisites: preq_release_prerequisites,
257
+ preq_release_posted: preq_release_posted,
258
+ preq_release_final: preq_release_final,
259
+ tb_return: tb_return,
260
+ })
261
+ end
234
262
  end
235
263
 
236
- def preq_release(preq = 0, rel_code = "", no_commit="", item="0000", use_exeptions="X")
264
+ def preq_release(preq = 0, rel_code = "", no_commit="", item="00000", use_exceptions="")
237
265
  #Validate if will release by item ou general
238
- if item = "0000" or item = nil or item.empty?
266
+ if item == "00000" or item == nil or item.empty?
239
267
  #-- Execute BAPI_REQUISITION_RELEASE_GEN
240
268
  fn_preq_exec_release = @conn.get_function('BAPI_REQUISITION_RELEASE_GEN')
269
+ fn_preq_exec_release = fn_preq_exec_release.get_function_call
241
270
  else
242
271
  #-- Execute BAPI_REQUISITION_RELEASE
243
272
  fn_preq_exec_release = @conn.get_function('BAPI_REQUISITION_RELEASE')
273
+ fn_preq_exec_release = fn_preq_exec_release.get_function_call
244
274
  fn_preq_exec_release[:ITEM] = item
245
- fn_preq_exec_release[:USE_EXCEPTIONS] = use_exeptions
275
+ fn_preq_exec_release[:USE_EXCEPTIONS] = use_exceptions
246
276
  end
247
- fn_preq_exec_release = fn_preq_exec_release.get_function_call
277
+
248
278
  fn_preq_exec_release[:NUMBER] = preq
249
279
  fn_preq_exec_release[:REL_CODE] = rel_code
250
280
  fn_preq_exec_release[:NO_COMMIT_WORK] = no_commit
281
+
251
282
  fn_preq_exec_release.invoke
252
- tb_return = get_object_list(fn_preq_exec_release[:RETURN], Return.to_s)
253
- {
254
- tb_return: tb_return,
255
- }
283
+
284
+ tb_return = get_object_list(fn_preq_exec_release[:RETURN], Return)
285
+
286
+ retcode = tb_return.detect{|r| r.type == 'E'}
287
+
288
+ if retcode
289
+ api_return_error(retcode)
290
+ else
291
+ api_return_success({
292
+ status_new: fn_preq_exec_release[:REL_STATUS_NEW],
293
+ indicator_new: fn_preq_exec_release[:REL_INDICATOR_NEW],
294
+ tb_return: tb_return,
295
+ })
296
+ end
297
+ end
298
+
299
+ def po_detail(po = 0, acc_assignment = "", item_text = "", header_text = "", delivery_address = "", version = "", services = "", serialnumbers = "", invoiceplan = "")
300
+ #-- Execute BAPI_PO_GETDETAIL1
301
+ fn_po_detail = @conn.get_function('BAPI_PO_GETDETAIL1')
302
+ fc_po_detail = fn_po_detail.get_function_call
303
+
304
+ fc_po_detail[:PURCHASEORDER] = po
305
+ fc_po_detail[:ACCOUNT_ASSIGNMENT] = acc_assignment
306
+ fc_po_detail[:ITEM_TEXT] = item_text
307
+ fc_po_detail[:HEADER_TEXT] = header_text
308
+ fc_po_detail[:DELIVERY_ADDRESS] = delivery_address
309
+ fc_po_detail[:VERSION] = version
310
+ fc_po_detail[:SERVICES] = services
311
+ fc_po_detail[:SERIALNUMBERS] = serialnumbers
312
+ fc_po_detail[:INVOICEPLAN] = invoiceplan
313
+
314
+ fc_po_detail.invoke
315
+
316
+ #-- Execute conversions for returned tables to a designated list (array)
317
+ po_item = get_object_list(fc_po_detail[:POITEM], PoItem)
318
+ po_addrdelivery = get_object_list(fc_po_detail[:POADDRDELIVERY], PoAddrDelivery)
319
+ po_schedule = get_object_list(fc_po_detail[:POSCHEDULE], PoSchedule)
320
+ po_account = get_object_list(fc_po_detail[:POACCOUNT], PoAccount)
321
+ po_cond_header = get_object_list(fc_po_detail[:POCONDHEADER], PoCondHeader)
322
+ po_cond = get_object_list(fc_po_detail[:POCOND], PoCond)
323
+ po_limits = get_object_list(fc_po_detail[:POLIMITS], PoLimits)
324
+ po_contract_limits = get_object_list(fc_po_detail[:POCONTRACTLIMITS], PoContractLimits)
325
+ po_services = get_object_list(fc_po_detail[:POSERVICES], PoServices)
326
+ po_srv_access_values = get_object_list(fc_po_detail[:POSRVACCESSVALUES], PoSrvAccessValues)
327
+ po_text_header = get_object_list(fc_po_detail[:POTEXTHEADER], PoTextHeader)
328
+ po_text_item = get_object_list(fc_po_detail[:POTEXTITEM], PoTextItem)
329
+ po_exp_imp_item = get_object_list(fc_po_detail[:POEXPIMPITEM], PoExpImpItem)
330
+ po_components = get_object_list(fc_po_detail[:POCOMPONENTS], PoComponents)
331
+ po_shipping_exp = get_object_list(fc_po_detail[:POSHIPPINGEXP], PoShippingExp)
332
+ po_history = get_object_list(fc_po_detail[:POHISTORY], PoHistory)
333
+ po_history_totals = get_object_list(fc_po_detail[:POHISTORY_TOTALS], PoHistoryTotals)
334
+ po_confirmation = get_object_list(fc_po_detail[:POCONFIRMATION], PoConfirmation)
335
+ po_all_versions = get_object_list(fc_po_detail[:ALLVERSIONS], PoAllVersions)
336
+ po_partner = get_object_list(fc_po_detail[:POPARTNER], PoPartner)
337
+ po_extension_out = get_object_list(fc_po_detail[:EXTENSIONOUT], PoExtensionOut)
338
+ po_serial_number = get_object_list(fc_po_detail[:SERIALNUMBER], PoSerialNumber)
339
+ po_inv_plan_header = get_object_list(fc_po_detail[:INVPLANHEADER], PoInvPlanHeader)
340
+ po_inv_plan_item = get_object_list(fc_po_detail[:INVPLANITEM], PoInvPlanItem)
341
+ po_history_ma = get_object_list(fc_po_detail[:POHISTORY_MA], PoHistoryMa)
342
+ po_header = get_object(fc_po_detail[:POHEADER], PoHeader)
343
+ po_exp_imp_header = get_object(fc_po_detail[:POEXPIMPHEADER], PoExpImpHeader)
344
+ tb_return = get_object_list(fc_po_detail[:RETURN], Return)
345
+
346
+ retcode = tb_return.detect{|r| r.type == 'E'}
347
+
348
+ if retcode
349
+ api_return_error(retcode)
350
+ else
351
+ api_return_success({
352
+ po_item: po_item,
353
+ po_addrdelivery: po_addrdelivery,
354
+ po_schedule: po_schedule,
355
+ po_account: po_account,
356
+ po_cond_header: po_cond_header,
357
+ po_cond: po_cond,
358
+ po_limits: po_limits,
359
+ po_contract_limits: po_contract_limits,
360
+ po_services: po_services,
361
+ po_srv_access_values: po_srv_access_values,
362
+ po_text_header: po_text_header,
363
+ po_text_item: po_text_item,
364
+ po_exp_imp_item: po_exp_imp_item,
365
+ po_components: po_components,
366
+ po_shipping_exp: po_shipping_exp,
367
+ po_history: po_history,
368
+ po_history_totals: po_history_totals,
369
+ po_confirmation: po_confirmation,
370
+ po_all_versions: po_all_versions,
371
+ po_partner: po_partner,
372
+ po_extension_out: po_extension_out,
373
+ po_serial_number: po_serial_number,
374
+ po_inv_plan_header: po_inv_plan_header,
375
+ po_inv_plan_item: po_inv_plan_item,
376
+ po_history_ma: po_history_ma,
377
+ po_header: po_header,
378
+ po_exp_imp_header: po_exp_imp_header,
379
+ tb_return: tb_return,
380
+ })
381
+ end
382
+ end
383
+
384
+ def po_release_strategy_info(po = 0, po_rel_code = "")
385
+ #-- Execute BAPI_PO_GETRELINFO
386
+ fn_po_rel_strat_info = @conn.get_function('BAPI_PO_GETRELINFO')
387
+ fc_po_rel_strat_info = fn_po_rel_strat_info.get_function_call
388
+
389
+ fc_po_rel_strat_info[:PURCHASEORDER] = po
390
+ fc_po_rel_strat_info[:PO_REL_CODE] = po_rel_code
391
+
392
+ fc_po_rel_strat_info.invoke
393
+
394
+ #-- Execute conversions for returned tables to a designated list (array)
395
+ po_release_final = get_object_list(fc_po_rel_strat_info[:RELEASE_FINAL], PoReleaseFinal.to_s)
396
+ tb_return = get_object_list(fc_po_rel_strat_info[:RETURN], Return.to_s)
397
+
398
+ retcode = tb_return.detect{|r| r.type == 'E'}
399
+
400
+ if retcode
401
+ api_return_error(retcode)
402
+ else
403
+ api_return_success({
404
+ po_release_final: po_release_final,
405
+ tb_return: tb_return,
406
+ })
407
+ end
408
+ end
409
+
410
+ # Performs SAP Authority check on a certain authorization
411
+ # object. For more details on SAP authorization,
412
+ # this link will provide good details:
413
+ # * https://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/a92195a9-0b01-0010-909c-f330ea4a585c&overridelayout=true
414
+ # * https://blogs.sap.com/2020/11/14/some-important-information-about-sap-authorization-objects/
415
+ # @param user [String] SAP userid for which authorization will be performed
416
+ # @param auth_object [String] Authorization object to be checked in SAP
417
+ # @param field [String] Authorization field checked within the authorization object
418
+ # @param value [String] Authorization value to be checked. (i.e. 01 for creation, 02 for change, XX for release code)
419
+ def authority_check(user, auth_object, field, value)
420
+ #-- Execute AUTHORITY_CHECK
421
+ function = @conn.get_function('AUTHORITY_CHECK')
422
+ fun_call = function.get_function_call
423
+
424
+ fun_call[:USER] = user
425
+ fun_call[:OBJECT] = auth_object
426
+ fun_call[:FIELD1] = field
427
+ fun_call[:VALUE1] = value
428
+
429
+ begin
430
+ fun_call.invoke
431
+ rescue Exception => ex
432
+ if ex.to_s.include?('USER_IS_AUTHORIZED')
433
+ api_return(0,'Authorized');
434
+ else
435
+ api_return(8,'User is not authorized.')
436
+ end
437
+ end
438
+
439
+ end
440
+
441
+ def api_return_success(obj=nil )
442
+ UtilHelper.api_return(0, 'Success!', obj)
256
443
  end
257
444
 
258
- def po_detail(po = 0)
259
- []
445
+ def api_return_error(obj={}, exception=nil)
446
+ UtilHelper.api_return(8, 'Error.', obj, exception)
260
447
  end
261
448
 
262
- def po_release_strategy_info(po = 1)
263
- []
449
+ def api_return(rc=0, message ='', obj=nil, exception=nil )
450
+ UtilHelper.api_return(rc, message, obj, exception)
264
451
  end
265
452
 
266
453
  private
data/lib/rnsap_spec.rb ADDED
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'yaml'
5
+ require_relative '../lib/rnsap'
6
+ require_relative '../lib/preq_detail/preq_item'
7
+
8
+ describe RnSap::Sap do
9
+ let(:params) do
10
+ file = File.expand_path(File.join(File.dirname(__FILE__), '..', 'secrets.yml'))
11
+ YAML.safe_load(File.read(file))
12
+ end
13
+
14
+ let(:logon_info) do
15
+ { 'user' => params['user'],
16
+ 'passwd' => params['password'],
17
+ 'trace' => params['trace'],
18
+ 'client' => params['client'],
19
+ 'ashost' => params['ashost'],
20
+ 'sysnr' => params['sysnr'] }
21
+ end
22
+
23
+ let(:test_data) do
24
+ file = File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_data.yml'))
25
+ YAML.safe_load(File.read(file))
26
+ end
27
+
28
+ let(:conn) do
29
+ RnSap::Sap.new(logon_info)
30
+ end
31
+
32
+ context 'Based on connection available parameters' do
33
+ it 'connects to SAP' do
34
+ expect(conn).not_to be_nil
35
+ end
36
+ end
37
+
38
+ context 'Reads table information from SAP' do
39
+ it 'gets at least one vendor' do
40
+ list = conn.read_table('lfa1', %w[NAME1 LIFNR LAND1])
41
+ expect(list.count).to be > 0
42
+ end
43
+ it 'gets at least one Raw material' do
44
+ list = conn.read_table('mara', %w[matnr ernam], ["MTART = 'ROH'"])
45
+ expect(list.count).to be > 0
46
+ end
47
+
48
+ it 'gets a two Raw materials skipping the first in the database' do
49
+ list = conn.read_table({ name: 'mara', fields: %w[matnr ernam], clauses: ["MTART = 'ROH'"], row_skip: 1, row_count: 2 })
50
+ expect(list.count).to eq(2)
51
+ end
52
+ end
53
+
54
+ context 'Gets information from a Purchase Requisition' do
55
+ it 'Obtains details from purchase requisition' do
56
+ pr = test_data['preqs']['number']
57
+ puts " -> Pesquisando P.Req: #{pr}"
58
+ details = conn.preq_detail(pr)
59
+
60
+ expect(details).not_to be_nil
61
+ expect(details.class).to be(Hash)
62
+ end
63
+
64
+ it 'gets purchase requisition Release Strategy info' do
65
+ pr = test_data['preqs']['number']
66
+ details = conn.preq_release_strategy_info(pr)
67
+
68
+ expect(details).not_to be_nil
69
+ expect(details.class).to be(Hash)
70
+ end
71
+ end
72
+
73
+ context 'Gets information from a Purchase Order' do
74
+ it 'Obtains details from purchase requisition' do
75
+ po = test_data['po']['number']
76
+ puts " -> Pesquisando P.Order: #{po}"
77
+ details = conn.po_detail(po)
78
+
79
+ expect(details).not_to be_nil
80
+ expect(details.class).to be(Array)
81
+ end
82
+
83
+ it 'gets purchase requisition Release Strategy info' do
84
+ po = test_data['po']['number']
85
+ details = conn.po_release_strategy_info(po)
86
+
87
+ expect(details).not_to be_nil
88
+ expect(details.class).to be(Array)
89
+ end
90
+ end
91
+
92
+
93
+ end