1 PACKAGE BODY Ozf_Acct_Generator AS
2 /*$Header: ozfactgb.pls 120.12.12020000.2 2012/07/17 11:07:05 bkunjan ship $*/
3 G_PKG_NAME CONSTANT VARCHAR2(30) := 'Ozf_Acct_Generator';
4 G_DEBUG_HIGH_ON BOOLEAN := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_high);
5
6 -- Start of Comments
7 -- API name ams_acct_generator
8 -- Type Private
9 -- Version Current version = 1.0
10 -- Initial version = 1.0
11 -- nirprasa 18-Dec-2008 Fixed bug 7491702.
12 --Name of the function gl_post_account
13
14 FUNCTION Get_User_Role
15 RETURN VARCHAR2
16 IS
17
18 CURSOR c_user (p_user_id in number) IS
19 SELECT employee_id
20 FROM fnd_user
21 WHERE user_id = p_user_id ;
22
23 l_user_id number;
24 l_person_id number;
25 l_role_display_name varchar2(240);
26 l_role_name varchar2(240) := null;
27
28 BEGIN
29
30 l_user_id := FND_GLOBAL.user_id;
31
32 OPEN c_user(l_user_id);
33 FETCH c_user INTO l_person_id ;
34 IF c_user%NOTFOUND THEN
35 l_role_name := null;
36 END IF;
37 CLOSE c_user ;
38
39 IF l_person_id is not null THEN
40 -- Pass the Employee ID to get the Role
41 WF_DIRECTORY.getrolename(
42 p_orig_system => 'PER',
43 p_orig_system_id => l_person_id ,
44 p_name => l_role_name,
45 p_display_name => l_role_display_name );
46 END IF;
47
48 IF G_DEBUG_HIGH_ON THEN
49 ozf_utility_pvt.debug_message('Role: ' || l_role_name );
50 ozf_utility_pvt.debug_message('Role Name: ' || l_role_display_name );
51 END IF;
52
53 return l_role_name;
54
55 EXCEPTION
56 WHEN OTHERS THEN
57 l_role_name := null;
58 return l_role_name;
59 END Get_User_Role;
60
61 /* This function is used to determine the ccid of the account type.
62 There are three possible types,
63 A.'Accrued Promotion Liability'
64 B.'Deduction Adjustment Clearing'
65 C.'Deduction Adjustment Account'.
66 In case A and C - ccid is derive from ozf_funds_all_b
67 case of B the value is derived from ozf_sys_parameters_all.
68 This function can be customized based on customer needs */
69
70 FUNCTION gl_post_account(
71 p_api_version_number IN NUMBER,
72 p_account_type IN VARCHAR2,
73 p_budget_id IN NUMBER,
74 p_utilization_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
75 x_msg_count OUT NOCOPY NUMBER,
76 x_msg_data OUT NOCOPY VARCHAR2,
77 x_return_status OUT NOCOPY VARCHAR2)
78 RETURN NUMBER
79 IS
80 l_post_account NUMBER := 0;
81 l_api_version_number CONSTANT NUMBER := 1.0;
82 l_api_name CONSTANT VARCHAR2(30) := 'gl_post_account';
83
84 l_fund_expense_account number;
85 l_fund_accrual_liability number;
86 l_cat_expense_account number;
87 l_cat_accrual_liability number;
88
89 l_expense_account number;
90 l_accrual_liability number;
91 l_ven_clearing number;
92 l_rec_clearing number;
93
94 --//BugFix : 7708324
95 l_adj_fund_expense_account NUMBER := NULL;
96 l_adj_fund_accrual_liability NUMBER := NULL;
97
98 CURSOR get_fund_accounts_csr (p_budget_id in number) IS
99 select f.ded_adjustment_account
100 , f.accrued_liable_account
101 , c.ded_adjustment_account
102 , c.accrued_liability_account
103 from ozf_funds_all_b f
104 , ams_categories_b c
105 where f.category_id = c.category_id
106 and f.fund_id = p_budget_id;
107
108 -- default accounts
109 /*CURSOR get_sys_param_csr(p_id in number) IS
110 select osp.gl_id_ded_adj -- expense account
111 , osp.gl_id_accr_promo_liab -- accrual liability account
112 , osp.gl_id_ded_clearing -- vendor clearing account
113 , osp.gl_rec_clearing_account -- receivables clearing account
114 FROM ozf_sys_parameters_all osp
115 --, ozf_funds_utilized_all_b ofa
116 , ozf_funds_all_b f
117 WHERE osp.org_id = NVL(f.org_id, -99)
118 --AND ofa.fund_id = f.fund_id
119 AND f.fund_id = p_id;*/
120
121 -- nirprasa, 18-Dec-2008 For bug 7491702
122 --don't use budget's org_id, since it can be null. Use util rec's org_id.
123 --//BugFix : 7708324 Removed ozf_funds_all table from query.
124 CURSOR get_sys_param_csr(p_org_id in number) IS
125 select osp.gl_id_ded_adj -- expense account
126 , osp.gl_id_accr_promo_liab -- accrual liability account
127 , osp.gl_id_ded_clearing -- vendor clearing account
128 , osp.gl_rec_clearing_account -- receivables clearing account
129 FROM ozf_sys_parameters_all osp
130 WHERE osp.org_id = NVL(p_org_id, -99);
131
132 -- utilization's org_id 7491702
133 CURSOR get_util_org_csr IS
134 select org_id
135 FROM ozf_funds_utilized_all_b
136 WHERE utilization_id = p_utilization_id;
137
138 --//BugFix : 7708324
139 CURSOR get_adj_acct_cur(p_utilization_id IN NUMBER) IS
140 SELECT ctype.gl_id_ded_adj,
141 ctype.gl_id_accr_promo_liab
142 FROM ozf_funds_utilized_all_b util,
143 ozf_claim_types_all_b ctype
144 WHERE util.adjustment_type_id = ctype.claim_type_id
145 AND util.utilization_id = p_utilization_id
146 AND util.adjustment_type_id > -1
147 AND util.utilization_type = 'ADJUSTMENT';
148
149 l_org_id NUMBER;
150
151 BEGIN
152
153 IF G_DEBUG_HIGH_ON THEN
154 OZF_UTILITY_PVT.debug_message('Private Api: ' || l_api_name || ' START');
155 END IF;
156 IF NOT FND_API.Compatible_API_Call
157 (l_api_version_number
158 ,p_api_version_number
159 ,l_api_name
160 ,G_PKG_NAME
161 )
162 THEN
163 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
164 END IF;
165
166 -- get account from the fund
167 IF p_budget_id is not null OR
168 p_budget_id <> FND_API.G_MISS_NUM
169 THEN
170 --7491702
171 IF G_DEBUG_HIGH_ON THEN
172 OZF_UTILITY_PVT.debug_message('p_utilization_id: ' || p_utilization_id);
173 END IF;
174
175 OPEN get_util_org_csr;
176 FETCH get_util_org_csr INTO l_org_id;
177 CLOSE get_util_org_csr;
178
179 IF G_DEBUG_HIGH_ON THEN
180 OZF_UTILITY_PVT.debug_message('l_org_id: ' || l_org_id);
181 END IF;
182 -- get default accounts from system parameters
183 OPEN get_sys_param_csr(l_org_id);
184 FETCH get_sys_param_csr INTO l_expense_account,
185 l_accrual_liability,
186 l_ven_clearing,
187 l_rec_clearing;
188 CLOSE get_sys_param_csr;
189
190 IF G_DEBUG_HIGH_ON THEN
191 OZF_UTILITY_PVT.debug_message('l_expense_account: ' || l_expense_account);
192 OZF_UTILITY_PVT.debug_message('l_accrual_liability: ' || l_accrual_liability);
193 OZF_UTILITY_PVT.debug_message('l_ven_clearing: ' || l_ven_clearing);
194 OZF_UTILITY_PVT.debug_message('l_rec_clearing: ' || l_rec_clearing);
195 END IF;
196
197 OPEN get_fund_accounts_csr(p_budget_id);
198 FETCH get_fund_accounts_csr INTO l_fund_expense_account,
199 l_fund_accrual_liability,
200 l_cat_expense_account,
201 l_cat_accrual_liability;
202 CLOSE get_fund_accounts_csr;
203 END IF;
204
205 --//BugFix : 7708324
206 OPEN get_adj_acct_cur(p_utilization_id);
207 FETCH get_adj_acct_cur INTO l_adj_fund_expense_account,
208 l_adj_fund_accrual_liability;
209 CLOSE get_adj_acct_cur;
210
211 IF l_adj_fund_expense_account IS NOT NULL THEN
212 l_fund_expense_account := l_adj_fund_expense_account;
213 END IF;
214 IF l_adj_fund_accrual_liability IS NOT NULL THEN
215 l_fund_accrual_liability := l_adj_fund_accrual_liability;
216 END IF;
217
218 --//End
219
220 -- default budgets expense account
221 IF l_fund_expense_account is null THEN
222 IF l_cat_expense_account is null THEN
223 l_fund_expense_account := l_expense_account;
224 ELSE
225 l_fund_expense_account := l_cat_expense_account;
226 END IF;
227 END IF;
228
229 -- default funds accrual liability account
230 IF l_fund_accrual_liability is null THEN
231 IF l_cat_accrual_liability is null THEN
232 l_fund_accrual_liability := l_accrual_liability;
233 ELSE
234 l_fund_accrual_liability := l_cat_accrual_liability;
235 END IF;
236 END IF;
237
238 --DBMS_OUTPUT.PUT_LINE('Entering the api gl_post_account');
239 IF p_account_type = 'ACCRUAL_LIABILITY' THEN
240 IF l_fund_accrual_liability is null THEN
241 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
242 FND_MESSAGE.set_name('OZF', 'OZF_GL_NO_ACC_LIAB_ACCT');
243 FND_MSG_PUB.add;
244 END IF;
245 x_return_status := FND_API.g_ret_sts_error;
246 ELSE
247 l_post_account := l_fund_accrual_liability;
248 END IF;
249 ELSIF p_account_type = 'EXPENSE ACCOUNT' THEN
250 IF l_fund_expense_account is null THEN
251 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
252 FND_MESSAGE.set_name('OZF', 'OZF_GL_NO_EXP_ACCT');
253 FND_MSG_PUB.add;
254 END IF;
255 x_return_status := FND_API.g_ret_sts_error;
256 ELSE
257 l_post_account := l_fund_expense_account;
258 END IF;
259 ELSIF p_account_type = 'VEN_CLEARING' THEN
260 IF l_ven_clearing is null THEN
261 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
262 FND_MESSAGE.set_name('OZF', 'OZF_GL_NO_VEN_CLEAR_ACCT');
263 FND_MSG_PUB.add;
264 END IF;
265 x_return_status := FND_API.g_ret_sts_error;
266 ELSE
267 l_post_account := l_ven_clearing;
268 END IF;
269 ELSIF p_account_type = 'REC_CLEARING' THEN
270 IF l_rec_clearing is null THEN
271 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
272 FND_MESSAGE.set_name('OZF', 'OZF_GL_NO_REC_CLEAR_ACCT');
273 FND_MSG_PUB.add;
274 END IF;
275 x_return_status := FND_API.g_ret_sts_error;
276 ELSE
277 l_post_account := l_rec_clearing;
278 END IF;
279 ELSE
280 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
281 FND_MESSAGE.set_name('OZF', 'OZF_GL_INVALID_ACCT_EVENT');
282 FND_MSG_PUB.add;
283 END IF;
284 l_post_account := null;
285 END IF;
286
287 FND_MSG_PUB.Count_And_Get
288 (p_count => x_msg_count,
289 p_data => x_msg_data);
290
291 IF G_DEBUG_HIGH_ON THEN
292 OZF_UTILITY_PVT.debug_message('Private Api: ' || l_api_name || ' END');
293 END IF;
294 RETURN l_post_account;
295
296 EXCEPTION
297 WHEN NO_DATA_FOUND THEN
298 l_post_account := 0;
299 -- Standard call to get message count and if count=1, get the message
300 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
301 FND_MESSAGE.SET_NAME('OZF','OZF_INVALID_ACCOUNT');
302 FND_MESSAGE.SET_TOKEN('CCID',l_post_account);
303 FND_MSG_PUB.ADD;
304 END IF;
305 FND_MSG_PUB.Count_And_Get
306 (p_count => x_msg_count,
307 p_data => x_msg_data);
308 x_return_status := FND_API.g_ret_sts_error;
309 RETURN l_post_account;
310 WHEN FND_API.G_EXC_ERROR THEN
311 l_post_account := 0;
312 -- Standard call to get message count and if count=1, get the message
313 FND_MSG_PUB.Count_And_Get (
314 p_encoded => FND_API.G_FALSE,
315 p_count => x_msg_count,
316 p_data => x_msg_data);
317 x_return_status := FND_API.g_ret_sts_error;
318 RETURN l_post_account;
319 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
320 l_post_account := 0;
321 -- Standard call to get message count and if count=1, get the message
322 FND_MSG_PUB.Count_And_Get (
323 p_encoded => FND_API.G_FALSE,
324 p_count => x_msg_count,
325 p_data => x_msg_data);
326 x_return_status := FND_API.g_ret_sts_unexp_error;
327 RETURN l_post_account;
328 WHEN OTHERS THEN
329 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
330 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
331 END IF;
332 l_post_account := 0;
333 -- Standard call to get message count and if count=1, get the message
334 FND_MSG_PUB.Count_And_Get (
335 p_encoded => FND_API.G_FALSE,
336 p_count => x_msg_count,
337 p_data => x_msg_data);
338 RETURN l_post_account;
339 END gl_post_account;
340 -------------------------------------------------------------------------------
341 /*===========================================================================+
342 | Name: START_PROCESS |
343 | Purpose: Runs the Workflow process to generate accounts below: |
344 | 'Accrued Promotion Liability' |
345 | 'Sales Expense Account' |
346 +===========================================================================*/
347 PROCEDURE Start_Process (
348 p_api_version_number IN NUMBER,
349 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
350 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
351
352 x_return_status OUT NOCOPY VARCHAR2,
353 x_msg_count OUT NOCOPY NUMBER,
354 x_msg_data OUT NOCOPY VARCHAR2,
355
356 p_account_type IN VARCHAR2,
357 p_claim_id IN NUMBER,
358 p_budget_id IN NUMBER,
359 p_utilization_id IN NUMBER,
360 p_offer_id IN NUMBER,
361 p_order_id IN NUMBER,
362 p_line_id IN NUMBER,
363 p_item_type IN VARCHAR2,
364 p_item_id IN NUMBER,
365 p_price_adj_id IN NUMBER,
366 p_cust_account_id IN NUMBER,
367
368 x_return_ccid IN OUT NOCOPY NUMBER,
369 x_concat_segs IN OUT NOCOPY VARCHAR2,
370 x_concat_ids IN OUT NOCOPY VARCHAR2,
371 x_concat_descrs IN OUT NOCOPY VARCHAR2 )
372 IS
373 l_api_name CONSTANT VARCHAR2(30) := 'Start_Process';
374 l_api_version_number CONSTANT NUMBER := 1.0;
375 l_full_name CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
376 --
377
378 l_org_id NUMBER;
379 l_chart_of_accounts_id NUMBER;
380 l_account_id NUMBER;
381
382 l_line_id NUMBER;
383 l_reference_line_id NUMBER;
384 l_line_category_code VARCHAR2(30);
385
386 l_header_id NUMBER := p_order_id;
387 l_ship_from_org_id NUMBER;
388 l_sold_to_org_id NUMBER;
389 l_commitment_id NUMBER;
390 l_salesrep_id NUMBER;
391 l_inventory_item_id NUMBER;
392 l_item_category_id NUMBER;
393 l_item_type_code VARCHAR2(30);
394
395 l_order_category_code VARCHAR2(30);
396 l_order_type_id NUMBER;
397
398 l_option_flag VARCHAR2(1);
399 l_errmsg VARCHAR2(2000);
400 l_new_comb BOOLEAN := TRUE;
401 l_itemtype VARCHAR2(30) := 'OZFACCTG';
402 l_itemkey VARCHAR2(38);
403 l_role_name varchar2(240) := null;
404 l_debug_flag varchar2(30);
405 l_default_gl_account VARCHAR2(1);
406 l_result BOOLEAN;
407 l_tp_util NUMBER := 0;
408
409 CURSOR price_adj_csr(p_price_adj_id in number) IS
410 SELECT HEADER_ID,
411 LINE_ID
412 FROM OE_PRICE_ADJUSTMENTS
413 WHERE PRICE_ADJUSTMENT_ID = p_price_adj_id;
414
415 CURSOR line_detail_csr(p_line_id in number) IS
416 SELECT HEADER_ID,
417 ORG_ID,
418 SHIP_FROM_ORG_ID,
419 SOLD_TO_ORG_ID,
420 COMMITMENT_ID,
421 SALESREP_ID,
422 INVENTORY_ITEM_ID,
423 ITEM_TYPE_CODE
424 FROM oe_order_lines_all
425 WHERE LINE_ID = p_line_id;
426
427 CURSOR header_detail_csr(p_header_id in number) IS
428 SELECT HEADER_ID,
429 ORG_ID,
430 SHIP_FROM_ORG_ID,
431 SOLD_TO_ORG_ID,
432 SALESREP_ID
433 FROM oe_order_headers_all
434 WHERE HEADER_ID = p_header_id;
435
436 CURSOR order_line_csr(p_line_id in number) IS
437 SELECT REFERENCE_LINE_ID,
438 LINE_CATEGORY_CODE
439 FROM OE_ORDER_LINES_ALL
440 WHERE LINE_ID = p_line_id;
441
442 CURSOR order_header_csr(p_header_id in number) IS
443 SELECT ORDER_CATEGORY_CODE,
444 ORDER_TYPE_ID
445 FROM OE_ORDER_HEADERS_ALL
446 WHERE HEADER_ID = p_header_id;
447
448 CURSOR budget_org_csr(p_budget_id in number) IS
449 SELECT org_id
450 FROM ozf_funds_all_b
451 WHERE fund_id = p_budget_id;
452
453 CURSOR claim_org_csr(p_claim_id in number) IS
454 SELECT org_id
455 FROM ozf_claims_all
456 WHERE claim_id = p_claim_id;
457
458 CURSOR chart_of_acct_csr(p_org_id in number)IS
459 select chart_of_accounts_id
460 from gl_sets_of_books sob
461 , ozf_sys_parameters_all osp
462 where osp.set_of_books_id = sob.set_of_books_id
463 and osp.org_id = NVL(p_org_id, -99);
464
465 --7491702
466 CURSOR chart_of_acct_csr1 IS
467 select chart_of_accounts_id
468 from gl_sets_of_books sob
469 , ozf_funds_all_b fund
470 where sob.set_of_books_id = fund.ledger_id
471 and fund.fund_id = p_budget_id;
472
473
474 CURSOR c_third_party_util IS
475 SELECT 1
476 FROM ozf_funds_utilized_all_b
477 WHERE utilization_id = p_utilization_id
478 AND object_type = 'TP_ORDER';
479
480 BEGIN
481 IF G_DEBUG_HIGH_ON THEN
482 OZF_UTILITY_PVT.debug_message('Private Api: ' || l_full_name || ' START');
483 END IF;
484 IF NOT FND_API.Compatible_API_Call
485 (l_api_version_number
486 ,p_api_version_number
487 ,l_api_name
488 ,G_PKG_NAME
489 )
490 THEN
491 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
492 END IF;
493 --Initialize message list if p_init_msg_list is TRUE.
494 IF FND_API.To_Boolean (p_init_msg_list) THEN
495 FND_MSG_PUB.initialize;
496 END IF;
497 -- Initialize API return status to sucess
498 x_return_status := FND_API.G_RET_STS_SUCCESS;
499
500 IF G_DEBUG_HIGH_ON THEN
501 OZF_UTILITY_PVT.debug_message('Retreiving Chart Of Accounts Id');
502 END IF;
503 /* get org id */
504 IF p_budget_id <> FND_API.G_MISS_NUM OR
505 p_budget_id IS NOT NULL
506 THEN
507 OPEN budget_org_csr(p_budget_id);
508 FETCH budget_org_csr INTO l_org_id;
509 CLOSE budget_org_csr;
510 END IF;
511
512 /* Retreive the Chart of accounts Id */
513 --7491702
514 OPEN chart_of_acct_csr1;
515 FETCH chart_of_acct_csr1 INTO l_chart_of_accounts_id;
516 CLOSE chart_of_acct_csr1;
517 /*OPEN chart_of_acct_csr(p_budget_id);
518 FETCH chart_of_acct_csr INTO l_chart_of_accounts_id;
519 CLOSE chart_of_acct_csr;*/
520
521 IF G_DEBUG_HIGH_ON THEN
522 OZF_UTILITY_PVT.debug_message('l_chart_of_accounts_id '||l_chart_of_accounts_id);
523 END IF;
524
525 IF l_chart_of_accounts_id is null THEN
526 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
527 FND_MESSAGE.SET_NAME('OZF','OZF_GL_CHART_OF_ACCT_MISSING');
528 FND_MESSAGE.SET_TOKEN('BUDGET',p_budget_id);
529 END IF;
530 RAISE FND_API.G_EXC_ERROR;
531 END IF;
532
533 IF G_DEBUG_HIGH_ON THEN
534 OZF_UTILITY_PVT.debug_message('B4 calling gl_post_account ');
535 OZF_UTILITY_PVT.debug_message('p_utilization_id '||p_utilization_id);
536 OZF_UTILITY_PVT.debug_message('p_budget_id '|| p_budget_id);
537 END IF;
538
539 /* This will retrieve the account_id for gl_posting purposes*/
540 l_account_id := gl_post_account(p_api_version_number => 1.0,
541 p_account_type => p_account_type,
542 p_budget_id => p_budget_id,
543 p_utilization_id => p_utilization_id,
544 x_msg_count => x_msg_count,
545 x_msg_data => x_msg_data,
546 x_return_status => x_return_status);
547
548 IF G_DEBUG_HIGH_ON THEN
549 OZF_UTILITY_PVT.debug_message('After gl_post_account ');
550 OZF_UTILITY_PVT.debug_message('l_account_id '|| l_account_id);
551 END IF;
552
553 IF x_return_status = FND_API.g_ret_sts_error THEN
554 RAISE FND_API.G_EXC_ERROR;
555 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
556 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
557 END IF;
558
559 -- call account generator workflow to get the cost of sale account
560 -- get order header/line details from price adjustment
561 IF p_price_adj_id <> FND_API.G_MISS_NUM OR
562 p_price_adj_id IS NOT NULL
563 THEN
564
565 --kdass 16-Aug-07 bug 6345327 - for third party utilizations, do not pass line_id and header_id
566 l_header_id := NULL;
567 l_line_id := NULL;
568
569 OPEN c_third_party_util;
570 FETCH c_third_party_util INTO l_tp_util;
571 CLOSE c_third_party_util;
572
573 -- if not third party utilization
574 IF l_tp_util <> 1 THEN
575 OPEN price_adj_csr(p_price_adj_id);
576 FETCH price_adj_csr INTO l_header_id, l_line_id;
577 CLOSE price_adj_csr;
578
579 -- if line not found then set line_id to IN parameter
580 IF l_line_id is null THEN
581 l_line_id := p_line_id;
582 END IF;
583 -- if header not found then set order_id to IN parameter
584 IF l_header_id is null THEN
585 l_header_id := p_order_id;
586 END IF;
587
588 END IF;
589 END IF;
590
591 -- line id is found -- Accruals at Order Line level
592 IF l_line_id <> FND_API.G_MISS_NUM OR
593 l_line_id IS NOT NULL
594 THEN
595 IF G_DEBUG_HIGH_ON THEN
596 OZF_UTILITY_PVT.debug_message('Checking Order Category');
597 END IF;
598 OPEN order_line_csr(l_line_id);
599 FETCH order_line_csr INTO l_reference_line_id, l_line_category_code;
600 CLOSE order_line_csr;
601
602 -- for returns set the reference line id
603 IF l_line_category_code = 'RETURN' AND
604 l_reference_line_id IS NOT NULL
605 THEN
606 l_line_id := l_reference_line_id;
607 END IF;
608
609 IF G_DEBUG_HIGH_ON THEN
610 OZF_UTILITY_PVT.debug_message('Retreiving Line Header');
611 END IF;
612 /* Retreive the header and line details */
613 OPEN line_detail_csr(l_line_id);
614 FETCH line_detail_csr
615 INTO l_header_id,
616 l_org_id,
617 l_ship_from_org_id,
618 l_sold_to_org_id,
619 l_commitment_id,
620 l_salesrep_id,
621 l_inventory_item_id,
622 l_item_type_code;
623 CLOSE line_detail_csr;
624 IF l_header_id is null THEN
625 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
626 FND_MESSAGE.SET_NAME('OZF','OZF_GL_HEADER_DETAIL_MISSING');
627 FND_MESSAGE.SET_TOKEN('LINE_ID',l_line_id);
628 FND_MSG_PUB.ADD;
629 END IF;
630 RAISE FND_API.G_EXC_ERROR;
631 END IF;
632
633 IF l_ship_from_org_id IS NULL THEN
634 -- 19-JUL-2004 yizhang: bill only orders do not have ship from org
635 /*
636 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
637 FND_MESSAGE.SET_NAME('OZF','OZF_WAREHOUSE_MISSING');
638 FND_MESSAGE.SET_TOKEN('LINE_ID',l_line_id);
639 FND_MSG_PUB.ADD;
640 END IF;
641 RAISE FND_API.G_EXC_ERROR;
642 */
643 l_ship_from_org_id := l_org_id;
644 END IF;
645
646 IF G_DEBUG_HIGH_ON THEN
647 OZF_UTILITY_PVT.debug_message('Retreiving Order Category');
648 END IF;
649 /* Retreive Order category and order type */
650 OPEN order_header_csr(l_header_id);
651 FETCH order_header_csr INTO l_order_category_code, l_order_type_id;
652 CLOSE order_header_csr;
653
654 IF G_DEBUG_HIGH_ON THEN
655 OZF_UTILITY_PVT.debug_message('Retreiving Chart Of Accounts Id');
656 END IF;
657 /* Retreive the Chart of accounts Id */
658 OPEN chart_of_acct_csr(l_ship_from_org_id);
659 FETCH chart_of_acct_csr INTO l_chart_of_accounts_id;
660 CLOSE chart_of_acct_csr;
661
662 -- line is null and header is found -- Accruals at Order header level
663 ELSIF l_header_id <> FND_API.G_MISS_NUM OR
664 l_header_id IS NOT NULL
665 THEN
666 IF G_DEBUG_HIGH_ON THEN
667 OZF_UTILITY_PVT.debug_message('Retreiving Header');
668 END IF;
669 /* Retreive the header and line details */
670 OPEN header_detail_csr(l_header_id);
671 FETCH header_detail_csr
672 INTO l_header_id,
673 l_org_id,
674 l_ship_from_org_id,
675 l_sold_to_org_id,
676 l_salesrep_id;
677 CLOSE header_detail_csr;
678
679 IF G_DEBUG_HIGH_ON THEN
680 OZF_UTILITY_PVT.debug_message('Retreiving Order Category');
681 END IF;
682 /* Retreive Order category and order type */
683 OPEN order_header_csr(l_header_id);
684 FETCH order_header_csr INTO l_order_category_code, l_order_type_id;
685 CLOSE order_header_csr;
686
687 IF p_item_type = 'PRODUCT' THEN
688 -- set the inventory item id
689 l_inventory_item_id := p_item_id;
690 ELSIF p_item_type = 'FAMILY' THEN
691 -- set the item category
692 l_item_category_id := p_item_id;
693 END IF;
694
695 IF l_ship_from_org_id IS NULL THEN
696 l_ship_from_org_id := l_org_id;
697 END IF;
698
699 IF G_DEBUG_HIGH_ON THEN
700 OZF_UTILITY_PVT.debug_message('Retreiving Chart Of Accounts Id');
701 END IF;
702 /* Retreive the Chart of accounts Id */
703 OPEN chart_of_acct_csr(l_ship_from_org_id);
704 FETCH chart_of_acct_csr INTO l_chart_of_accounts_id;
705 CLOSE chart_of_acct_csr;
706
707 -- line id and header is null and item id passed -- Lumpsums
708 ELSIF p_item_id <> FND_API.G_MISS_NUM OR
709 p_item_id is not null
710 THEN
711 IF p_item_type = 'PRODUCT' THEN
712 -- set the inventory item id
713 l_inventory_item_id := p_item_id;
714 l_ship_from_org_id := l_org_id;
715 ELSIF p_item_type = 'FAMILY' THEN
716 -- set the item category
717 l_item_category_id := p_item_id;
718 l_ship_from_org_id := l_org_id;
719 END IF;
720 l_sold_to_org_id := p_cust_account_id;
721
722 -- Manual adjustments without product/order
723 ELSE
724 l_ship_from_org_id := l_org_id;
725 l_sold_to_org_id := p_cust_account_id;
726 END IF; -- order line is not passed
727
728 /* Initialize the workflow item attributes */
729 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
730 FND_MESSAGE.SET_NAME('OZF','INITIALIZE_WORK_FLOW');
731 END IF;
732
733 l_itemkey := Fnd_Flex_Workflow.INITIALIZE
734 ('SQLGL',
735 'GL#',
736 l_chart_of_accounts_id,
737 'OZFACCTG');
738
739 IF G_DEBUG_HIGH_ON THEN
740 OZF_UTILITY_PVT.debug_message('Item Key: ' || l_itemkey);
741 END IF;
742
743 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
744 itemkey => l_itemkey,
745 aname =>'COMMITMENT_ID',
746 avalue =>l_commitment_id);
747
748 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
749 itemkey => l_itemkey,
750 aname =>'CUSTOMER_ID',
751 avalue =>l_sold_to_org_id);
752
753 wf_engine.SetItemAttrText(itemtype => l_itemtype,
754 itemkey => l_itemkey,
755 aname => 'ORDER_CATEGORY',
756 avalue => l_order_category_code);
757
758 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
759 itemkey => l_itemkey,
760 aname => 'HEADER_ID',
761 avalue => l_header_id);
762
763 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
764 itemkey => l_itemkey,
765 aname => 'LINE_ID',
766 avalue => l_line_id);
767
768 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
769 itemkey => l_itemkey,
770 aname => 'ORDER_TYPE_ID',
771 avalue => l_order_type_id);
772
773 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
774 itemkey => l_itemkey,
775 aname => 'ORGANIZATION_ID',
776 avalue => l_ship_from_org_id);
777
778 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
779 itemkey => l_itemkey,
780 aname => 'ORG_ID',
781 avalue => l_org_id);
782
783 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
784 itemkey => l_itemkey,
785 aname =>'CHART_OF_ACCOUNTS_ID',
786 avalue =>l_chart_of_accounts_id);
787
788 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
789 itemkey => l_itemkey,
790 aname =>'SALESREP_ID',
791 avalue =>l_salesrep_id);
792
793 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
794 itemkey => l_itemkey,
795 aname =>'INVENTORY_ITEM_ID',
796 avalue =>l_inventory_item_id);
797
798 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
799 itemkey => l_itemkey,
800 aname =>'ITEM_CATEGORY_ID',
801 avalue =>l_item_category_id);
802
803 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
804 itemkey => l_itemkey,
805 aname =>'BUDGET_ID',
806 avalue =>p_budget_id);
807
808 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
809 itemkey => l_itemkey,
810 aname =>'OFFER_ID',
811 avalue =>p_offer_id);
812
813 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
814 itemkey => l_itemkey,
815 aname =>'PRICE_ADJ_ID',
816 avalue =>p_price_adj_id);
817
818 wf_engine.SetItemAttrText(itemtype => l_itemtype,
819 itemkey => l_itemkey,
820 aname =>'ACCOUNT_ID',
821 avalue =>l_account_id);
822
823 wf_engine.SetItemAttrText(itemtype => l_itemtype,
824 itemkey => l_itemkey,
825 aname =>'ACCOUNT_TYPE',
826 avalue =>p_account_type);
827
828 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
829 itemkey => l_itemkey,
830 aname =>'CLAIM_ID',
831 avalue =>p_claim_id);
832
833 wf_engine.SetItemAttrNumber(itemtype => l_itemtype,
834 itemkey => l_itemkey,
835 aname =>'UTILIZATION_ID',
836 avalue =>p_utilization_id);
837
838 IF l_item_type_code = Oe_Globals.G_ITEM_OPTION THEN --for future use
839 l_option_flag := 'Y';
840 ELSE
841 l_option_flag := 'N';
842 END IF;
843
844 wf_engine.SetItemAttrText(itemtype => l_itemtype,
845 itemkey => l_itemkey,
846 aname =>'OPTION_FLAG',
847 avalue =>l_option_flag);
848
849 l_debug_flag := fnd_profile.value('ACCOUNT_GENERATOR:DEBUG_MODE');
850 l_default_gl_account := NVL(fnd_profile.value('OZF_DEFAULT_ACCOUNTS_ON_ACCTGEN_FAILURE'),'Y');
851
852 IF G_DEBUG_HIGH_ON THEN
853 OZF_UTILITY_PVT.debug_message('Debug Flag: ' || l_debug_flag );
854 OZF_UTILITY_PVT.debug_message('Default GL Accounts profile: ' || l_default_gl_account);
855 END IF;
856
857 IF l_debug_flag = 'Y' THEN
858
859 l_role_name := Get_User_Role;
860
861 wf_engine.SetItemOwner(itemtype => l_itemtype,
862 itemkey => l_itemkey,
863 owner => l_role_name);
864 END IF;
865
866 /*kdass: bug 8669319 - set the ledger context to NULL before calling account generator
867 workflow as per suggestion by GL team in bug 8761502
868 */
869 GL_GLOBAL.set_aff_validation(context_type => 'LG'
870 ,context_id => null
871 );
872
873 IF G_DEBUG_HIGH_ON THEN
874 OZF_UTILITY_PVT.debug_message('submitting the fnd_flex_workflow_generate process');
875 END IF;
876 l_result := Fnd_Flex_Workflow.GENERATE('OZFACCTG',
877 l_itemkey,
878 TRUE,
879 x_return_ccid,
880 x_concat_segs,
881 x_concat_ids,
882 x_concat_descrs,
883 l_errmsg,
884 l_new_comb);
885
886 IF l_result THEN
887 IF G_DEBUG_HIGH_ON THEN
888 OZF_UTILITY_PVT.debug_message('Success OZFACCTG WF'||'-'||x_return_ccid);
889 END IF;
890 x_return_status := FND_API.G_RET_STS_SUCCESS;
891
892 ELSE
893
894 /*kdass: bug 8669319 - When Account Generator Workflow errors out, then the profile
895 "Default GL accounts in case of Account Generator failure" comes into picture.
896 If the value of profile is Yes, then default GL accounts derived from budget/ system parameters
897 will be used. If the value of profile if No, then GL posting will fail and GL Posted flag
898 will be F in ozf_funds_utilized_all_b table. On running, Funds Accrual Engine with "Repost Failed GL"
899 flag set to Yes, the GL posting will happen to accounts derived from Account Generator workflow.
900 */
901 IF l_default_gl_account = 'Y' THEN
902 IF G_DEBUG_HIGH_ON THEN
903 OZF_UTILITY_PVT.debug_message('Returning Default on Error'||'-'||l_account_id);
904 END IF;
905 x_return_ccid := l_account_id;
906 x_return_status := FND_API.G_RET_STS_SUCCESS;
907
908 ELSE
909
910 IF G_DEBUG_HIGH_ON THEN
911 OZF_UTILITY_PVT.debug_message('Error in OZFACCTG WF'||'-'||x_return_ccid);
912 END IF;
913 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
914 FND_MESSAGE.SET_NAME('OZF','OZF_GL_ACC_GEN_FAILED');
915 FND_MSG_PUB.ADD;
916 END IF;
917 x_return_status := FND_API.G_RET_STS_ERROR;
918
919 END IF; --IF l_default_gl_account = 'Y' THEN
920
921 END IF; --IF l_result THEN
922
923 IF G_DEBUG_HIGH_ON THEN
924 OZF_UTILITY_PVT.debug_message('Final Account Returned'||'-'||x_return_ccid);
925 END IF;
926 --Incase of Success also it was returning the default CCID
927 --x_return_ccid := l_account_id;
928 x_return_status := FND_API.G_RET_STS_SUCCESS;
929 --END IF;
930 IF G_DEBUG_HIGH_ON THEN
931 OZF_UTILITY_PVT.debug_message('Private Api: ' || l_api_name || ' END');
932 END IF;
933 --Standard call to get message count and if count=1, get the message
934 FND_MSG_PUB.Count_And_Get (
935 p_encoded => FND_API.G_FALSE,
936 p_count => x_msg_count,
937 p_data => x_msg_data
938 );
939 EXCEPTION
940 WHEN NO_DATA_FOUND THEN
941 x_return_status := FND_API.G_RET_STS_ERROR;
942 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
943 FND_MESSAGE.SET_NAME('OZF','OZF_COGS_NOT_FOUND');
944 FND_MESSAGE.SET_TOKEN('LINE_ID',l_line_id);
945 FND_MSG_PUB.ADD;
946 END IF;
947 FND_MSG_PUB.Count_And_Get (
948 p_encoded => FND_API.G_FALSE,
949 p_count => x_msg_count,
950 p_data => x_msg_data
951 );
952 WHEN FND_API.G_EXC_ERROR THEN
953 x_return_status := FND_API.G_RET_STS_ERROR;
954 -- Standard call to get message count and if count=1, get the message
955 FND_MSG_PUB.Count_And_Get (
956 p_encoded => FND_API.G_FALSE,
957 p_count => x_msg_count,
958 p_data => x_msg_data
959 );
960 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
961 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
962 -- Standard call to get message count and if count=1, get the message
963 FND_MSG_PUB.Count_And_Get (
964 p_encoded => FND_API.G_FALSE,
965 p_count => x_msg_count,
966 p_data => x_msg_data
967 );
968 WHEN OTHERS THEN
969 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
970 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
971 THEN
972 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
973 END IF;
974 -- Standard call to get message count and if count=1, get the message
975 FND_MSG_PUB.Count_And_Get (
976 p_encoded => FND_API.G_FALSE,
977 p_count => x_msg_count,
978 p_data => x_msg_data
979 );
980 END Start_Process; /* START_PROCESS */
981
982 /*===========================================================================+
983 | Name: GET_COST_SALE_ITEM_DERIVED |
984 | Purpose: Derives the COGS account for a line regardless of the option flag|
985 +===========================================================================*/
986 PROCEDURE Get_Cost_Sale_Item_Derived
987 (
988 itemtype IN VARCHAR2,
989 itemkey IN VARCHAR2,
990 actid IN NUMBER,
991 funcmode IN VARCHAR2,
992 result OUT NOCOPY VARCHAR2)
993 IS
994 l_cost_sale_item_derived VARCHAR2(240) DEFAULT NULL;
995 l_line_id NUMBER;
996 l_organization_id NUMBER;
997 l_inventory_item_id NUMBER;
998 fb_error_msg VARCHAR2(240) DEFAULT NULL;
999 l_error_msg VARCHAR2(240) DEFAULT NULL;
1000 l_item_type_code VARCHAR2(30);
1001 l_link_to_line_id NUMBER;
1002 l_api_name VARCHAR2(240):= 'Get_Cost_Sale_Item_Derived';
1003
1004 CURSOR item_type_csr(p_line_id in number) IS
1005 SELECT LINK_TO_LINE_ID,
1006 ITEM_TYPE_CODE
1007 FROM OE_ORDER_LINES_ALL
1008 WHERE LINE_ID = p_line_id;
1009
1010 CURSOR cost_of_sales_acct_csr(p_line_id in number) IS
1011 SELECT NVL(M.COST_OF_SALES_ACCOUNT,0)
1012 FROM OE_ORDER_LINES_ALL OL,
1013 MTL_SYSTEM_ITEMS M
1014 WHERE OL.LINE_ID = p_line_id
1015 AND M.ORGANIZATION_ID = OL.SHIP_FROM_ORG_ID
1016 AND M.INVENTORY_ITEM_ID = OL.INVENTORY_ITEM_ID;
1017
1018 CURSOR cogs_acct_csr( p_inventory_item_id in number
1019 ,p_organization_id in number) IS
1020 SELECT NVL(COST_OF_SALES_ACCOUNT,0)
1021 FROM MTL_SYSTEM_ITEMS
1022 WHERE INVENTORY_ITEM_ID = P_INVENTORY_ITEM_ID
1023 AND ORGANIZATION_ID = P_ORGANIZATION_ID;
1024
1025 BEGIN
1026 IF G_DEBUG_HIGH_ON THEN
1027 OZF_UTILITY_PVT.debug_message('Private Api: ' || l_api_name || ' START');
1028 END IF;
1029
1030 IF (FUNCMODE = 'RUN') THEN
1031 l_line_id := wf_engine.GetItemAttrNumber(itemtype,itemkey,'LINE_ID');
1032 l_organization_id := wf_engine.GetItemAttrNumber(itemtype,
1033 itemkey,
1034 'ORGANIZATION_ID');
1035 l_inventory_item_id := wf_engine.GetItemAttrNumber(itemtype,
1036 itemkey,
1037 'INVENTORY_ITEM_ID');
1038 l_cost_sale_item_derived := NULL;
1039
1040 IF G_DEBUG_HIGH_ON THEN
1041 OZF_UTILITY_PVT.debug_message('line_id = ' || l_line_id);
1042 OZF_UTILITY_PVT.debug_message('organization_id = ' || l_organization_id);
1043 OZF_UTILITY_PVT.debug_message('inventory_item_id = ' || l_inventory_item_id);
1044 END IF;
1045
1046 IF l_line_id IS NOT NULL THEN
1047 OPEN cost_of_sales_acct_csr(l_line_id);
1048 FETCH cost_of_sales_acct_csr INTO l_cost_sale_item_derived;
1049 CLOSE cost_of_sales_acct_csr;
1050
1051 IF l_cost_sale_item_derived is null THEN
1052 OPEN item_type_csr(l_line_id);
1053 FETCH item_type_csr INTO l_link_to_line_id, l_item_type_code;
1054 CLOSE item_type_csr;
1055
1056 IF l_item_type_code <> Oe_Globals.G_ITEM_CONFIG
1057 THEN
1058 FND_MESSAGE.SET_NAME('OZF','OZF_GENERATE_CCID_FAILED');
1059 FB_ERROR_MSG := FND_MESSAGE.GET_ENCODED;
1060 FND_MESSAGE.SET_ENCODED(fb_error_msg);
1061 l_error_msg := FND_MESSAGE.GET;
1062 wf_engine.setItemAttrText(itemtype,
1063 itemkey,
1064 'ERROR_MESSAGE',
1065 l_error_msg);
1066 result := 'COMPLETE:FAILURE';
1067 RETURN;
1068 ELSE -- if l_item_type_code = Oe_Globals.G_ITEM_CONFIG
1069 OPEN cost_of_sales_acct_csr(l_link_to_line_id);
1070 FETCH cost_of_sales_acct_csr INTO l_cost_sale_item_derived;
1071 CLOSE cost_of_sales_acct_csr;
1072 IF l_cost_sale_item_derived IS NULL THEN
1073 FND_MESSAGE.SET_NAME('ONT','OE_COGS_CCID_GEN_FAILED');
1074 FND_MESSAGE.SET_TOKEN('PARAM1','Inventory Item id');
1075 FND_MESSAGE.SET_TOKEN('PARAM2','/Warehouse ');
1076 FND_MESSAGE.SET_TOKEN('VALUE1',l_inventory_item_id);
1077 FND_MESSAGE.SET_TOKEN('VALUE2',l_organization_id);
1078 FB_ERROR_MSG := FND_MESSAGE.GET_ENCODED;
1079 FND_MESSAGE.SET_ENCODED(fb_error_msg);
1080 l_error_msg := FND_MESSAGE.GET;
1081 wf_engine.setItemAttrText(itemtype,
1082 itemkey,
1083 'ERROR_MESSAGE',
1084 l_error_msg);
1085 result := 'COMPLETE:FAILURE';
1086 RETURN;
1087 END IF;
1088 END IF;
1089 END IF;
1090 ELSE
1091 IF l_inventory_item_id IS NOT NULL THEN
1092 OPEN cogs_acct_csr(l_inventory_item_id, l_organization_id);
1093 FETCH cogs_acct_csr INTO l_cost_sale_item_derived;
1094 CLOSE cogs_acct_csr;
1095 END IF;
1096 END IF; -- line id not null
1097
1098 IF l_cost_sale_item_derived = 0 THEN
1099 FND_MESSAGE.SET_NAME('OZF','OE_COGS_CCID_GEN_FAILED');
1100 FND_MESSAGE.SET_TOKEN('PARAM1','Inventory Item id');
1101 FND_MESSAGE.SET_TOKEN('PARAM2','/Warehouse ');
1102 FND_MESSAGE.SET_TOKEN('VALUE1',l_inventory_item_id);
1103 FND_MESSAGE.SET_TOKEN('VALUE2',l_organization_id);
1104 fb_error_msg := FND_MESSAGE.GET_ENCODED;
1105 FND_MESSAGE.SET_ENCODED(fb_error_msg);
1106 l_error_msg := FND_MESSAGE.GET;
1107 wf_engine.setItemAttrText(itemtype,
1108 itemkey,
1109 'ERROR_MESSAGE',
1110 l_error_msg);
1111 result := 'COMPLETE:FAILURE';
1112 RETURN;
1113 END IF;
1114
1115 IF l_cost_sale_item_derived is not null THEN
1116 wf_engine.setItemAttrNumber(itemtype,
1117 itemkey,
1118 'GENERATED_CCID',
1119 TO_NUMBER(l_cost_sale_item_derived));
1120 result := 'COMPLETE:SUCCESS';
1121 RETURN;
1122 ELSE
1123 result := 'COMPLETE:FAILURE';
1124 RETURN;
1125 END IF;
1126
1127 ELSIF (funcmode = 'CANCEL') THEN
1128 result := wf_engine.eng_completed;
1129 RETURN;
1130 ELSE
1131 result := '';
1132 RETURN;
1133 END IF;
1134 IF G_DEBUG_HIGH_ON THEN
1135 OZF_UTILITY_PVT.debug_message('Private Api: ' || l_api_name || 'END');
1136 END IF;
1137
1138 EXCEPTION
1139 WHEN OTHERS THEN
1140 wf_core.context('AMS_ACCT_GENERATOR','GET_COST_SALE_ITEM_DERIVED',
1141 itemtype,itemkey,TO_CHAR(actid),funcmode);
1142 result := 'COMPLETE:FAILURE';
1143 RAISE;
1144 END GET_COST_SALE_ITEM_DERIVED;
1145
1146 END Ozf_Acct_Generator;