DBA Data[Home] [Help]

PACKAGE BODY: APPS.OZF_ACCT_GENERATOR

Source


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;