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.
- checksums.yaml +4 -4
- data/lib/helper/rfc_helper.rb +19 -15
- data/lib/helper/util_helper.rb +39 -0
- data/lib/po_detail/all.rb +27 -0
- data/lib/po_detail/po_account.rb +93 -0
- data/lib/po_detail/po_addrdelivery.rb +115 -0
- data/lib/po_detail/po_all_versions.rb +55 -0
- data/lib/po_detail/po_components.rb +53 -0
- data/lib/po_detail/po_cond.rb +91 -0
- data/lib/po_detail/po_cond_header.rb +91 -0
- data/lib/po_detail/po_confirmation.rb +39 -0
- data/lib/po_detail/po_contract_limits.rb +21 -0
- data/lib/po_detail/po_exp_imp_header.rb +7 -0
- data/lib/po_detail/po_exp_imp_item.rb +21 -0
- data/lib/po_detail/po_extension_out.rb +13 -0
- data/lib/po_detail/po_header.rb +131 -0
- data/lib/po_detail/po_history.rb +107 -0
- data/lib/po_detail/po_history_ma.rb +37 -0
- data/lib/po_detail/po_history_totals.rb +51 -0
- data/lib/po_detail/po_inv_plan_header.rb +49 -0
- data/lib/po_detail/po_inv_plan_item.rb +51 -0
- data/lib/po_detail/po_item.rb +359 -0
- data/lib/po_detail/po_limits.rb +47 -0
- data/lib/po_detail/po_partner.rb +11 -0
- data/lib/po_detail/po_schedule.rb +59 -0
- data/lib/po_detail/po_serial_number.rb +13 -0
- data/lib/po_detail/po_services.rb +137 -0
- data/lib/po_detail/po_shipping_exp.rb +53 -0
- data/lib/po_detail/po_srv_access_values.rb +17 -0
- data/lib/po_detail/po_text_header.rb +13 -0
- data/lib/po_detail/po_text_item.rb +13 -0
- data/lib/po_release_info/all.rb +1 -0
- data/lib/po_release_info/po_release_final.rb +53 -0
- data/lib/preq_detail/all.rb +8 -0
- data/lib/preq_release_info/all.rb +4 -0
- data/lib/rnsap.rb +270 -83
- data/lib/rnsap_spec.rb +93 -0
- 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
|
-
|
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 =
|
52
|
+
fn_commit = conn.get_function('BAPI_TRANSACTION_COMMIT')
|
51
53
|
fn_commit = fn_commit.get_function_call
|
52
|
-
fn_commit[:
|
53
|
-
|
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
|
-
|
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 =
|
63
|
+
fn_rollback = conn.get_function('BAPI_TRANSACTION_ROLLBACK')
|
67
64
|
fn_rollback = fn_rollback.get_function_call
|
68
|
-
|
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
|
-
|
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
|
-
|
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
|
186
|
-
preq_acct_assignment = get_object_list(fc_preq_detail[:REQUISITION_ACCOUNT_ASSIGNMENT], PreqAcctAssignment
|
187
|
-
preq_text = get_object_list(fc_preq_detail[:REQUISITION_TEXT], PreqText
|
188
|
-
preq_limits = get_object_list(fc_preq_detail[:REQUISITION_LIMITS], PreqLimits
|
189
|
-
preq_contract_limits = get_object_list(fc_preq_detail[:REQUISITION_CONTRACT_LIMITS], PreqContractLimits
|
190
|
-
preq_services = get_object_list(fc_preq_detail[:REQUISITION_SERVICES], PreqItem
|
191
|
-
preq_services_texts = get_object_list(fc_preq_detail[:REQUISITION_SERVICES_TEXTS], PreqServicesText
|
192
|
-
preq_srv_accass_values = get_object_list(fc_preq_detail[:REQUISITION_SRV_ACCASS_VALUES], PreqServicesAccassValues
|
193
|
-
tb_return = get_object_list(fc_preq_detail[:RETURN], Return
|
194
|
-
|
195
|
-
{
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
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
|
221
|
-
preq_release_prerequisites = get_object_list(fn_preq_rel_strat_info[:RELEASE_PREREQUISITES], PreqReleasePrerequisites
|
222
|
-
preq_release_posted = get_object_list(fn_preq_rel_strat_info[:RELEASE_ALREADY_POSTED], PreqReleasePosted
|
223
|
-
preq_release_final = get_object_list(fn_preq_rel_strat_info[:RELEASE_FINAL], PreqReleaseFinal
|
224
|
-
tb_return = get_object_list(fn_preq_rel_strat_info[:RETURN], Return
|
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="
|
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
|
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] =
|
275
|
+
fn_preq_exec_release[:USE_EXCEPTIONS] = use_exceptions
|
246
276
|
end
|
247
|
-
|
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
|
-
|
253
|
-
|
254
|
-
|
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
|
259
|
-
|
445
|
+
def api_return_error(obj={}, exception=nil)
|
446
|
+
UtilHelper.api_return(8, 'Error.', obj, exception)
|
260
447
|
end
|
261
448
|
|
262
|
-
def
|
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
|