1 PACKAGE BODY IBY_FD_USER_API_PUB AS
2 /*$Header: ibyfduab.pls 120.11 2006/09/17 23:48:07 eliu noship $*/
3
4 --
5 -- Declare Global variables
6 --
7 SRA_INVALID_INSTR EXCEPTION;
8
9 --
10 -- Forward Declarations
11 --
12 PROCEDURE print_debuginfo(p_module IN VARCHAR2,
13 p_debug_text IN VARCHAR2);
14
15 PROCEDURE Validate_Method_and_Profile (
16 p_api_version IN NUMBER,
17 p_init_msg_list IN VARCHAR2 default FND_API.G_FALSE,
18 p_payment_method_code IN VARCHAR2,
19 p_ppp_id IN NUMBER,
20 p_payment_document_id IN NUMBER,
21 p_crt_instr_flag IN VARCHAR2,
22 p_int_bank_acc_arr IN Int_Bank_Acc_Tab_Type,
23 p_le_arr IN Legal_Entity_Tab_Type,
24 p_org_arr IN Org_Tab_Type,
25 p_curr_arr IN Currency_Tab_Type,
26 x_return_status OUT NOCOPY VARCHAR2,
27 x_msg_count OUT NOCOPY NUMBER,
28 x_msg_data OUT NOCOPY VARCHAR2
29 )
30 IS
31 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Method_and_Profile';
32 l_api_version CONSTANT NUMBER := 1.0;
33 l_module_name CONSTANT VARCHAR2(200) := G_PKG_NAME || '.Validate_Method_and_Profile';
34
35 l_count NUMBER;
36 l_le_name VARCHAR2(240);
37 l_org_name VARCHAR2(240);
38 l_acc_name VARCHAR2(240);
39 l_profile_name VARCHAR2(100);
40 l_method_name VARCHAR2(100);
41 l_payment_document_id NUMBER;
42 l_proc_type VARCHAR2(30);
43
44 CURSOR method_appl_cur (p_method_code VARCHAR2,
45 p_driver_type VARCHAR2,
46 p_driver_value VARCHAR2)
47 IS
48 select count(APPLICABLE_PMT_MTHD_ID)
49 from iby_applicable_pmt_mthds
50 where payment_method_code = p_method_code
51 and applicable_type_code = p_driver_type
52 and (applicable_value_to is null or applicable_value_to = p_driver_value);
53
54 CURSOR profile_appl_cur (p_profile_id NUMBER,
55 p_driver_type VARCHAR2,
56 p_driver_value VARCHAR2)
57 IS
58 select count(ap.applicable_pmt_prof_id)
59 from iby_applicable_pmt_profs ap,
60 iby_payment_profiles p
61 where ap.system_profile_code = p.system_profile_code
62 and p.payment_profile_id = p_profile_id
63 and ap.applicable_type_code = p_driver_type
64 and (ap.applicable_value_to is null OR ap.applicable_value_to = p_driver_value);
65
66 CURSOR profile_org_appl_cur (p_profile_id NUMBER,
67 p_driver_id_value VARCHAR2,
68 p_driver_type_value VARCHAR2)
69 IS
70 select count(ap.applicable_pmt_prof_id)
71 from iby_applicable_pmt_profs ap,
72 iby_payment_profiles p
73 where ap.system_profile_code = p.system_profile_code
74 and p.payment_profile_id = p_profile_id
75 and ap.applicable_type_code = 'PAYER_ORG'
76 and ((ap.applicable_value_to is null AND ap.applicable_value_from is null) OR
77 (ap.applicable_value_to = p_driver_id_value AND
78 ap.applicable_value_from = p_driver_type_value));
79
80
81 BEGIN
82 -- Standard call to check for call compatibility.
83 IF NOT FND_API.Compatible_API_Call(l_api_version,
84 p_api_version,
85 l_api_name,
86 G_PKG_NAME) THEN
87 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
88 END IF;
89
90 -- Initialize message list if p_init_msg_list is set to TRUE.
91 IF FND_API.to_Boolean(p_init_msg_list) THEN
92 FND_MSG_PUB.initialize;
93 END IF;
94
95 -- Initialize API return status to success
96 x_return_status := FND_API.G_RET_STS_SUCCESS;
97
98 IF p_payment_method_code is not null THEN
99 print_debuginfo(l_module_name,'Payment method ' || p_payment_method_code || ' is to be validated.');
100
101 select payment_method_name
102 into l_method_name
103 from IBY_PAYMENT_METHODS_VL
104 where payment_method_code = p_payment_method_code;
105
106 -- Validate legal entities for the payment method
107 IF (p_le_arr.COUNT > 0) THEN
108 FOR i in p_le_arr.FIRST..p_le_arr.LAST LOOP
109 OPEN method_appl_cur(p_payment_method_code, 'PAYER_LE', to_char(p_le_arr(i)));
110 FETCH method_appl_cur INTO l_count;
111 CLOSE method_appl_cur;
112
113 IF l_count = 0 THEN
114 select name
115 into l_le_name
116 from XLE_FIRSTPARTY_INFORMATION_V
117 where legal_entity_id = p_le_arr(i);
118
119 FND_MESSAGE.set_name('IBY', 'IBY_AP_VLDT_METHOD_LE');
120 FND_MESSAGE.SET_TOKEN('METHOD', l_method_name);
121 FND_MESSAGE.SET_TOKEN('OBJECT', l_le_name);
122 FND_MSG_PUB.Add;
123
124 x_return_status := FND_API.G_RET_STS_ERROR;
125 END IF;
126 END LOOP;
127 END IF;
128
129 -- Validate organizations for the payment method
130 IF (p_org_arr.COUNT > 0) THEN
131 FOR i in p_org_arr.FIRST..p_org_arr.LAST LOOP
132 OPEN method_appl_cur(p_payment_method_code, 'PAYER_ORG', to_char(p_org_arr(i).org_id));
133 FETCH method_appl_cur INTO l_count;
134 CLOSE method_appl_cur;
135
136 IF l_count = 0 THEN
137 select name
138 into l_org_name
139 from HR_ALL_ORGANIZATION_UNITS_VL
140 where organization_id = p_org_arr(i).org_id;
141
142 FND_MESSAGE.set_name('IBY', 'IBY_AP_VLDT_METHOD_ORG');
143 FND_MESSAGE.SET_TOKEN('METHOD', l_method_name);
144 FND_MESSAGE.SET_TOKEN('OBJECT', l_org_name);
145 FND_MSG_PUB.Add;
146
147 x_return_status := FND_API.G_RET_STS_ERROR;
148 END IF;
149 END LOOP;
150 END IF;
151
152 END IF; -- if payment method is not null
153
154 IF p_ppp_id is not null THEN
155 print_debuginfo(l_module_name,'Payment profile ' || p_ppp_id || ' is to be validated.');
156
157 select payment_profile_name
158 into l_profile_name
159 from IBY_PAYMENT_PROFILES
160 where payment_profile_id = p_ppp_id;
161
162 -- Validate legal entities for the payment profile
163 IF (p_int_bank_acc_arr.COUNT > 0) THEN
164 FOR i in p_int_bank_acc_arr.FIRST..p_int_bank_acc_arr.LAST LOOP
165 OPEN profile_appl_cur(p_ppp_id, 'INTERNAL_BANK_ACCOUNT', to_char(p_int_bank_acc_arr(i)));
166 FETCH profile_appl_cur INTO l_count;
167 CLOSE profile_appl_cur;
168
169 IF l_count = 0 THEN
170 select bank_account_name
171 into l_acc_name
172 from CE_INTERNAL_BANK_ACCOUNTS_V
173 where bank_account_id = p_int_bank_acc_arr(i);
174
175 FND_MESSAGE.set_name('IBY', 'IBY_AP_VLDT_PROF_ACC');
176 FND_MESSAGE.SET_TOKEN('PROFILE', l_profile_name);
177 FND_MESSAGE.SET_TOKEN('OBJECT', l_acc_name);
178 FND_MSG_PUB.Add;
179
180 x_return_status := FND_API.G_RET_STS_ERROR;
181 END IF;
182 END LOOP;
183 END IF;
184
185 -- Validate organizations for the payment profile
186 IF (p_org_arr.COUNT > 0) THEN
187 FOR i in p_org_arr.FIRST..p_org_arr.LAST LOOP
188 OPEN profile_org_appl_cur(p_ppp_id, p_org_arr(i).org_id, p_org_arr(i).org_type);
189 FETCH profile_org_appl_cur INTO l_count;
190 CLOSE profile_org_appl_cur;
191
192 IF l_count = 0 THEN
193 select name
194 into l_org_name
195 from HR_ALL_ORGANIZATION_UNITS_VL
196 where organization_id = p_org_arr(i).org_id;
197
198 FND_MESSAGE.set_name('IBY', 'IBY_AP_VLDT_PROF_ORG');
199 FND_MESSAGE.SET_TOKEN('PROFILE', l_profile_name);
200 FND_MESSAGE.SET_TOKEN('OBJECT', l_org_name);
201 FND_MSG_PUB.Add;
202
203 x_return_status := FND_API.G_RET_STS_ERROR;
204 END IF;
205 END LOOP;
206 END IF;
207
208 -- Validate currencies for the payemnt profile
209 IF (p_curr_arr.COUNT > 0) THEN
210 FOR i in p_curr_arr.FIRST..p_curr_arr.LAST LOOP
211 OPEN profile_appl_cur(p_ppp_id, 'CURRENCY_CODE', p_curr_arr(i));
212 FETCH profile_appl_cur INTO l_count;
213 CLOSE profile_appl_cur;
214
215 IF l_count = 0 THEN
216 FND_MESSAGE.set_name('IBY', 'IBY_AP_VLDT_PROF_CURR');
217 FND_MESSAGE.SET_TOKEN('PROFILE', l_profile_name);
218 FND_MESSAGE.SET_TOKEN('OBJECT', p_curr_arr(i));
219 FND_MSG_PUB.Add;
220
221 x_return_status := FND_API.G_RET_STS_ERROR;
222 END IF;
223 END LOOP;
224 END IF;
225
226 -- Validate payment method for the payemnt profile
227 IF p_payment_method_code is not null THEN
228 select count(ap.applicable_pmt_prof_id)
229 into l_count
230 from iby_applicable_pmt_profs ap,
231 iby_payment_profiles p
232 where ap.system_profile_code = p.system_profile_code
233 and p.payment_profile_id = p_ppp_id
234 and ap.applicable_type_code = 'PAYMENT_METHOD'
235 and (ap.applicable_value_to is null OR ap.applicable_value_to = p_payment_method_code);
236
237 IF l_count = 0 THEN
238 FND_MESSAGE.set_name('IBY', 'IBY_AP_VLDT_PROF_METHOD');
239 FND_MESSAGE.SET_TOKEN('PROFILE', l_profile_name);
240 FND_MESSAGE.SET_TOKEN('OBJECT', l_method_name);
241 FND_MSG_PUB.Add;
242
243 x_return_status := FND_API.G_RET_STS_ERROR;
244 END IF;
245 END IF;
246
247 END IF; -- if payment profile is not null
248
249 -- Validate Create Instruction Flag, etc.
250 IF p_crt_instr_flag = 'Y' THEN
251 IF p_ppp_id is null THEN
252 FND_MESSAGE.set_name('IBY', 'IBY_BUILD_INV_PARAMS');
253 FND_MSG_PUB.Add;
254
255 x_return_status := FND_API.G_RET_STS_ERROR;
256 ELSE
257 IF p_payment_document_id is null THEN
258 select nvl(DEFAULT_PAYMENT_DOCUMENT_ID, -1),
259 processing_type
260 into l_payment_document_id,
261 l_proc_type
262 from iby_payment_profiles
263 where payment_profile_id = p_ppp_id;
264
265 IF (l_payment_document_id = -1) and
266 (l_proc_type = 'PRINTED') THEN
267 FND_MESSAGE.set_name('IBY', 'IBY_APSUB_NO_DEFAULT_PMT_DOC');
268 FND_MSG_PUB.Add;
269
270 x_return_status := FND_API.G_RET_STS_ERROR;
271 END IF;
272 END IF;
273 END IF;
274 END IF;
275
276 IF p_payment_document_id is not null THEN
277 IF p_ppp_id is null OR p_int_bank_acc_arr.COUNT = 0 THEN
278 FND_MESSAGE.set_name('IBY', 'IBY_BUILD_MISS_PMT_DOC_REL_PAR');
279 FND_MSG_PUB.Add;
280
281 x_return_status := FND_API.G_RET_STS_ERROR;
282 END IF;
283 END IF;
284
285 -- End of API body.
286
287 -- Standard call to get message count and if count is 1, get message info.
288 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
289
290 print_debuginfo(l_module_name, 'RETURN Validate_Method_Profile');
291
292 EXCEPTION
293 WHEN FND_API.G_EXC_ERROR THEN
294 x_return_status := FND_API.G_RET_STS_ERROR;
295 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
296 print_debuginfo(l_module_name,'ERROR: Exception occured during call to API ');
297 print_debuginfo(l_module_name,'SQLerr is :' || substr(SQLERRM, 1, 150));
298
299 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
300 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
301 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
302 print_debuginfo(l_module_name,'Unexpected ERROR: Exception occured during call to API ');
303 print_debuginfo(l_module_name,'SQLerr is :' || substr(SQLERRM, 1, 150));
304
305 WHEN OTHERS THEN
306 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
307 IF (FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
308 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
309 END IF;
310 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
311 print_debuginfo(l_module_name,'Other ERROR: Exception occured during call to API ');
312 print_debuginfo(l_module_name,'SQLerr is :' || substr(SQLERRM, 1, 150));
313
314 END Validate_Method_and_Profile;
315
316 FUNCTION Payment_Instruction_Action (
317 p_instruction_status IN VARCHAR2
318 ) RETURN VARCHAR2 IS
319 l_action VARCHAR2(100);
320 BEGIN
321 if p_instruction_status = 'CREATION_ERROR' then
322 l_action := 'IBY_FD_INSTRUCTION_VALIDATE';
323 elsif p_instruction_status = 'FORMATTED_READY_TO_TRANSMIT' then
324 l_action := 'IBY_FD_INSTRUCTION_TRANSMIT';
325 elsif p_instruction_status = 'TRANSMISSION_FAILED' then
326 l_action := 'IBY_FD_INSTRUCTION_TRANS_ERR';
327 elsif p_instruction_status = 'FORMATTED_READY_FOR_PRINTING' then
328 l_action := 'IBY_FD_PAYMENT_PRINT';
329 elsif p_instruction_status = 'SUBMITTED_FOR_PRINTING' then
330 l_action := 'IBY_FD_INSTRUCTION_DETAIL';
331 elsif p_instruction_status = 'CREATED_READY_FOR_PRINTING' then
332 l_action := 'IBY_FD_PAYMENT_PRINT';
333 elsif p_instruction_status = 'CREATED_READY_FOR_FORMATTING' then
334 l_action := 'IBY_FD_PAYMENT_PRINT';
335 elsif p_instruction_status = 'FORMATTED' then
336 l_action := 'IBY_FD_PAYMENT_PRINT_RECORD';
337 elsif p_instruction_status = 'CREATED' then
338 l_action := 'FNDCPSRSSSWA';
339 else
340 l_action := 'Dummy';
341 end if;
342
343 return l_action;
344 EXCEPTION
345 when others then
346 return 'Dummy';
347 END Payment_Instruction_Action;
348
349 FUNCTION Pmt_Instr_Action_Enabled (
350 p_instruction_status IN VARCHAR2,
351 p_org_id IN NUMBER,
352 p_instruction_id IN NUMBER,
353 p_request_id IN NUMBER DEFAULT NULL
354 ) RETURN VARCHAR2 IS
355
356 l_action VARCHAR2(100);
357 l_access NUMBER;
358 l_request_status VARCHAR2(100);
359
360 BEGIN
361 if p_org_id is null then
362 declare
363 d_access NUMBER;
364 begin
365 select 0
366 into l_access
367 from dual
368 where exists
369 (select null
370 from iby_payments_all
371 where payment_instruction_id = p_instruction_id
372 and org_id <> -1
373 and MO_GLOBAL.CHECK_ACCESS(org_id) = 'N');
374
375 l_access := 0;
376
377 exception
378 when no_data_found then
379 l_access := 1;
380 when others then
381 raise;
382 end;
383
384 elsif MO_GLOBAL.CHECK_ACCESS(p_org_id) = 'Y' then
385 l_access := 1;
386 else
387 l_access := 0;
388 end if;
389
390 IF NOT (l_access = 1) THEN
391 -- If not MOAC access to all payments
392 l_action := 'TakeActionDisabled';
393
394 ELSE
395 IF (p_instruction_status IN ('CREATION_ERROR',
396 'FORMATTED_READY_TO_TRANSMIT',
397 'TRANSMISSION_FAILED',
398 'FORMATTED_READY_FOR_PRINTING',
399 'SUBMITTED_FOR_PRINTING',
400 'CREATED_READY_FOR_PRINTING',
401 'CREATED_READY_FOR_FORMATTING',
402 'FORMATTED',
403 'CREATED')) THEN
404
405 l_request_status := iby_disburse_ui_api_pub_pkg.get_conc_request_status(p_request_id);
406
407 IF (l_request_status = 'SUCCESS') THEN
408 l_action := 'TakeActionEnabled';
409 ELSIF (l_request_status = 'ERROR') THEN
410 l_action := 'WarningIndEvenActive';
411 ELSE
412 l_action := 'InProgressIndStatus';
413 END IF;
414
415 ELSE
416 l_action := 'TakeActionDisabled';
417 END IF;
418 END IF;
419
420 RETURN l_action;
421 EXCEPTION
422 when others then
423 return 'TakeActionDisabled';
424
425 END Pmt_Instr_Action_Enabled;
426
427 PROCEDURE retrieve_default_sra_format(
428 p_api_version IN NUMBER,
429 p_init_msg_list IN VARCHAR2 default FND_API.G_FALSE,
430 p_instr_id IN NUMBER,
431 x_default_sra_format_code OUT NOCOPY VARCHAR2,
432 x_default_sra_format_name OUT NOCOPY VARCHAR2,
433 x_return_status OUT NOCOPY VARCHAR2,
434 x_msg_count OUT NOCOPY NUMBER,
435 x_msg_data OUT NOCOPY VARCHAR2)
436 IS
437 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Method_and_Profile';
438 l_api_version CONSTANT NUMBER := 1.0;
439 l_module_name CONSTANT VARCHAR2(200) := G_PKG_NAME || '.retrieve_default_sra_format';
440
441 l_instr_sra_ok NUMBER;
442 BEGIN
443 -- Standard call to check for call compatibility.
444 IF NOT FND_API.Compatible_API_Call(l_api_version,
445 p_api_version,
446 l_api_name,
447 G_PKG_NAME) THEN
448 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
449 END IF;
450
451 -- Initialize message list if p_init_msg_list is set to TRUE.
452 IF FND_API.to_Boolean(p_init_msg_list) THEN
453 FND_MSG_PUB.initialize;
454 END IF;
455
456 -- Initialize API return status to success
457 x_return_status := FND_API.G_RET_STS_SUCCESS;
458
459 IF p_instr_id is null THEN
460 FND_MESSAGE.set_name('IBY', 'IBY_SRA_SUBMIT_INVALID_INSTR');
461 FND_MESSAGE.SET_TOKEN('INSTR_ID', p_instr_id);
462 FND_MSG_PUB.Add;
463 raise SRA_INVALID_INSTR;
464 END IF;
465
466 select count(*)
467 into l_instr_sra_ok
468 from IBY_PAY_INSTRUCTIONS_ALL
469 where generate_sep_remit_advice_flag = 'Y'
470 and (REMITTANCE_ADVICE_CREATED_FLAG = 'N' or
471 IBY_FD_POST_PICP_PROGS_PVT.get_allow_multiple_sra_flag(p_instr_id) = 'Y')
472 and payment_instruction_status not in ('CREATION_ERROR', 'RETRY_CREATION', 'TERMINATED')
473 and IBY_FD_POST_PICP_PROGS_PVT.val_instruction_accessible(p_instr_id) = 'Y';
474
475 IF l_instr_sra_ok = 0 THEN
476 FND_MESSAGE.set_name('IBY', 'IBY_SRA_SUBMIT_INVALID_INSTR');
477 FND_MESSAGE.SET_TOKEN('INSTR_ID', p_instr_id);
478 FND_MSG_PUB.Add;
479 raise SRA_INVALID_INSTR;
480 ELSE
481 select sra_setup.remittance_advice_format_code,
482 f.format_name
483 into x_default_sra_format_code,
484 x_default_sra_format_name
485 from iby_pay_instructions_all ins,
486 iby_payment_profiles pp,
487 iby_remit_advice_setup sra_setup,
488 iby_formats_vl f
489 where ins.payment_instruction_id = p_instr_id
490 and pp.payment_profile_id = ins.payment_profile_id
491 and pp.system_profile_code = sra_setup.system_profile_code
492 and sra_setup.remittance_advice_format_code = f.FORMAT_CODE (+);
493 END IF;
494
495 -- End of API body.
496
497 -- Standard call to get message count and if count is 1, get message info.
498 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
499
500 print_debuginfo(l_module_name, 'RETURN retrieve_default_sra_format');
501
502 EXCEPTION
503 WHEN FND_API.G_EXC_ERROR THEN
504 x_return_status := FND_API.G_RET_STS_ERROR;
505 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
506 print_debuginfo(l_module_name,'ERROR: Exception occured during call to API ');
507 print_debuginfo(l_module_name,'SQLerr is :' || substr(SQLERRM, 1, 150));
508
509 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
510 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
511 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
512 print_debuginfo(l_module_name,'Unexpected ERROR: Exception occured during call to API ');
513 print_debuginfo(l_module_name,'SQLerr is :' || substr(SQLERRM, 1, 150));
514
515 WHEN SRA_INVALID_INSTR THEN
516 x_return_status := FND_API.G_RET_STS_ERROR;
517 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
518 print_debuginfo(l_module_name,'ERROR: The payment instruction is not available for SRA. ');
519
520 WHEN OTHERS THEN
521 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
522 IF (FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
523 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
524 END IF;
525 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
526 print_debuginfo(l_module_name,'Other ERROR: Exception occured during call to API ');
527 print_debuginfo(l_module_name,'SQLerr is :' || substr(SQLERRM, 1, 150));
528
529 END retrieve_default_sra_format;
530
531
532 --
533 --
534 --
535 PROCEDURE print_debuginfo(p_module IN VARCHAR2,
536 p_debug_text IN VARCHAR2)
537 IS
538 BEGIN
539 --
540 -- Writing debug text to the pl/sql debug file.
541 --
542 FND_FILE.PUT_LINE(FND_FILE.LOG, p_module||p_debug_text);
543
544 IBY_DEBUG_PUB.add(substr(RPAD(p_module,55)||' : '|| p_debug_text, 0, 150),
545 FND_LOG.G_CURRENT_RUNTIME_LEVEL,
546 G_DEBUG_MODULE);
547
548 END print_debuginfo;
549
550 END IBY_FD_USER_API_PUB;