DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_MASSADD_PREP_ENERGY_PKG

Source


1 package body FA_MASSADD_PREP_ENERGY_PKG as
2   /* $Header: FAMAPREPEB.pls 120.12 2010/03/04 23:38:17 glchen ship $ */
3 
4   -- Private type declarations
5 
6   -- Private constant declarations
7 
8   -- Private variable declarations
9   -- Function and procedure implementations
10 
11   function create_new_asset(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
12                             p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
13     return boolean is
14     l_total_cost number;
15     l_debug_str  varchar2(1000);
16     l_calling_fn varchar2(40) := 'create_new_asset';
17   begin
18     if (px_mass_add_rec.EXPENSE_CODE_COMBINATION_ID is not null) and
19        (px_mass_add_rec.location_id is not null) and
20        (px_mass_add_rec.asset_category_id is not null) and
21        (px_mass_add_rec.asset_key_ccid is not null) then
22       l_debug_str := 'Check the cost';
23       if (p_log_level_rec.statement_level) then
24         fa_debug_pkg.add(l_calling_fn,
25                          l_debug_str,
26                          '',
27                          p_log_level_rec => p_log_level_rec);
28       end if;
29       select nvl(sum(fixed_assets_cost), 0)
30         into l_total_cost
31         from fa_mass_additions
32        where split_merged_code = 'MC'
33          and parent_mass_addition_id = px_mass_add_rec.mass_addition_id
34           or mass_addition_id = px_mass_add_rec.mass_addition_id;
35       if (l_total_cost >= 0) then
36         l_debug_str := 'Cost is positive';
37         update fa_mass_additions
38            set EXPENSE_CODE_COMBINATION_ID = px_mass_add_rec.EXPENSE_CODE_COMBINATION_ID,
39                location_id                 = px_mass_add_rec.location_id,
40                asset_category_id           = px_mass_add_rec.asset_category_id,
41                asset_key_ccid              = px_mass_add_rec.asset_key_ccid,
42                posting_status              = 'POST',
43                queue_name                  = 'POST',
44                last_update_date            = sysdate,
45                last_updated_by             = FND_GLOBAL.user_id
46         where mass_addition_id = px_mass_add_rec.mass_addition_id;
47       else
48         l_debug_str := 'Cost is negative';
49         if (p_log_level_rec.statement_level) then
50           fa_debug_pkg.add(l_calling_fn,
51                            l_debug_str,
52                            '',
53                            p_log_level_rec => p_log_level_rec);
54         end if;
55         update fa_mass_additions
56            set EXPENSE_CODE_COMBINATION_ID = px_mass_add_rec.EXPENSE_CODE_COMBINATION_ID,
57                location_id                 = px_mass_add_rec.location_id,
58                asset_category_id           = px_mass_add_rec.asset_category_id,
59                asset_key_ccid              = px_mass_add_rec.asset_key_ccid,
60                posting_status              = 'ON HOLD',
61                queue_name                  = 'ON HOLD',
62                last_update_date            = sysdate,
63                last_updated_by             = FND_GLOBAL.user_id
64         where mass_addition_id = px_mass_add_rec.mass_addition_id;
65 
66       end if;
67     else
68       l_debug_str := 'Expense Account not generated';
69       if (p_log_level_rec.statement_level) then
70         fa_debug_pkg.add(l_calling_fn,
71                          l_debug_str,
72                          '',
73                          p_log_level_rec => p_log_level_rec);
74       end if;
75       update fa_mass_additions
76          set EXPENSE_CODE_COMBINATION_ID = nvl(px_mass_add_rec.EXPENSE_CODE_COMBINATION_ID,
77                                                EXPENSE_CODE_COMBINATION_ID),
78              location_id                 = nvl(px_mass_add_rec.location_id,
79                                                location_id),
80              asset_category_id           = nvl(px_mass_add_rec.asset_category_id,
81                                                asset_category_id),
82              asset_key_ccid              = nvl(px_mass_add_rec.asset_key_ccid,
83                                                asset_key_ccid),
84              posting_status              = 'ON HOLD',
85              queue_name                  = 'ON HOLD',
86              last_update_date            = sysdate,
87              last_updated_by             = FND_GLOBAL.user_id
88         where mass_addition_id = px_mass_add_rec.mass_addition_id;
89 
90     end if;
91     commit;
92     return true;
93   EXCEPTION
94     WHEN no_data_found THEN
95       return false;
96     WHEN OTHERS THEN
97       ROLLBACK;
98       return false;
99   END;
100 
101   /*===============================End Of FUNCTION/PROCEDURE===============================*/
102   function cost_adjustment(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
103                            p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
104     return boolean is
105     l_total_cost number;
106     l_debug_str  varchar2(1000);
107     l_calling_fn varchar2(40) := 'cost_asjustment';
108   begin
109     if (px_mass_add_rec.add_to_asset_id is not null) then
110       l_debug_str := 'Check the cost validity';
111       if (p_log_level_rec.statement_level) then
112         fa_debug_pkg.add(l_calling_fn,
113                          l_debug_str,
114                          '',
115                          p_log_level_rec => p_log_level_rec);
116       end if;
117       select nvl(sum(fixed_assets_cost), 0)
118         into l_total_cost
119         from fa_mass_additions
120        where split_merged_code = 'MC'
121          and parent_mass_addition_id = px_mass_add_rec.mass_addition_id
122          and merged_code = 'MC'
123          and posting_status = 'MERGED';
124 
125       select l_total_cost + nvl(cost, 0)
126         into l_total_cost
127         from fa_books
128        where book_type_code = px_mass_add_rec.book_type_code
129          and asset_id = px_mass_add_rec.add_to_asset_id
130          and transaction_header_id_out is null;
131       if (l_total_cost > 0) then
132         l_debug_str := 'Cost is positive';
133         if (p_log_level_rec.statement_level) then
134           fa_debug_pkg.add(l_calling_fn,
135                            l_debug_str,
136                            '',
137                            p_log_level_rec => p_log_level_rec);
138         end if;
139         update fa_mass_additions
140            set add_to_asset_id  = px_mass_add_rec.add_to_asset_id,
141                posting_status   = 'POST',
142                queue_name       = 'POST',
143                last_update_date = sysdate,
144                last_updated_by  = FND_GLOBAL.user_id
145         where mass_addition_id = px_mass_add_rec.mass_addition_id;
146 
147       else
148         l_debug_str := 'Cost is negative';
149         if (p_log_level_rec.statement_level) then
150           fa_debug_pkg.add(l_calling_fn,
151                            l_debug_str,
152                            '',
153                            p_log_level_rec => p_log_level_rec);
154         end if;
155         update fa_mass_additions
156            set posting_status   = 'POST',
157                queue_name       = 'POST',
158                last_update_date = sysdate,
159                last_updated_by  = FND_GLOBAL.user_id
160         where mass_addition_id = px_mass_add_rec.mass_addition_id;
161 
162       end if;
163     end if;
164 
165     return true;
166   EXCEPTION
167     WHEN no_data_found THEN
168 
169       return false;
170     WHEN OTHERS THEN
171 
172       ROLLBACK;
173       return false;
174   END;
175   /*===============================End Of FUNCTION/PROCEDURE===============================*/
176   function check_addition_or_adj(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
177                                  x_status        OUT NOCOPY varchar2,
178                                  p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
179     return boolean is
180     l_asset_id number := 0;
181   begin
182     select ad.asset_id
183       into l_asset_id
184       from fa_additions ad, fa_books bk
185      where asset_key_ccid = px_mass_add_rec.asset_category_id
186        and asset_key_ccid = px_mass_add_rec.ASSET_KEY_CCID
187        and ad.asset_id = bk.asset_id
188        and bk.book_type_code = px_mass_add_rec.book_type_code
189        and bk.transaction_header_id_out is null
190        and rownum < 2;
191     px_mass_add_rec.add_to_asset_id := l_asset_id;
192     x_status                        := 'ADJUSTMENT';
193     return true;
194   exception
195     when no_data_found then
196       px_mass_add_rec.add_to_asset_id := null;
197       x_status                        := 'ADDITION';
198       return true;
199     when others then
200       x_status := 'FAILED';
201       return false;
202   end;
203   /*===============================End Of FUNCTION/PROCEDURE===============================*/
204   function prepare_asset_key(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
205                              p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
206     return boolean is
207 
208     TYPE varchar30_tbl IS TABLE OF varchar2(30) INDEX BY BINARY_INTEGER;
209     l_akey_segment varchar30_tbl;
210     l_akey_ccid    number;
211     akey_ccid_seq  number;
212     l_select       varchar2(2000);
213     l_from         varchar2(2000);
214     l_where        varchar2(2000);
215     l_query        varchar2(6000);
216     l_coa          NUMBER;
217     l_sob_id       NUMBER;
218     l_dyanmic_cur  number;
219 
220     l_segment    varchar30_tbl;
221     l_category   FA_Categories.Category_ID%TYPE;
222     l_key_ccid   FA_Asset_Keywords.Code_Combination_ID%TYPE;
223     l_asset_type FA_Mass_Additions.Asset_Type%TYPE;
224 
225     l_mass_addition_id    FA_Mass_Additions.Mass_Addition_ID%TYPE;
226     l_invoice_number      FA_Mass_Additions.Invoice_Number%TYPE;
227     l_feeder_sys_name     FA_Mass_Additions.Feeder_System_Name%TYPE;
228     l_fixed_assets_cost   FA_Mass_Additions.Fixed_Assets_Cost%TYPE;
229     l_description         FA_Mass_Additions.Description%TYPE;
230     l_queue_name          FA_Mass_Additions.Queue_Name%TYPE;
231     l_asset_Key_segment1  FA_Mass_Additions.Asset_Key_segment1%TYPE;
232     l_asset_Key_segment2  FA_Mass_Additions.Asset_Key_segment2%TYPE;
233     l_asset_Key_segment3  FA_Mass_Additions.Asset_Key_segment3%TYPE;
234     l_asset_Key_segment4  FA_Mass_Additions.Asset_Key_segment4%TYPE;
235     l_asset_Key_segment5  FA_Mass_Additions.Asset_Key_segment5%TYPE;
236     l_asset_Key_segment6  FA_Mass_Additions.Asset_Key_segment6%TYPE;
237     l_asset_Key_segment7  FA_Mass_Additions.Asset_Key_segment7%TYPE;
238     l_asset_Key_segment8  FA_Mass_Additions.Asset_Key_segment8%TYPE;
239     l_asset_Key_segment9  FA_Mass_Additions.Asset_Key_segment9%TYPE;
240     l_asset_Key_segment10 FA_Mass_Additions.Asset_Key_segment10%TYPE;
241     l_payables_ccid       FA_Mass_Additions.Payables_Code_Combination_ID%TYPE;
242     l_dist_ccid           NUMBER;
243     l_dist_line_num       NUMBER;
244     l_mass_add_rec        Fa_Mass_Additions%ROWTYPE;
245 
246     l_cur_status  number;
247     l_debug_str   varchar2(1000);
248     l_plsql_block VARCHAR2(500);
249     l_table       varchar(30);
250     l_product     varchar2(10);
251     TYPE AssetKeyCurType IS REF CURSOR;
252     l_AssetKeyCur AssetKeyCurType;
253     l_calling_fn  varchar2(40) := 'prepare_asset_key';
254   begin
255     l_query := null;
256     if (px_mass_add_rec.ASSET_KEY_CCID is null) then
257       l_debug_str := 'Getting SOB id and COA';
258       --code to get asset key using fedder system
259       SELECT Gl_sob.Set_Of_Books_id, Chart_Of_Accounts_ID
260         INTO l_sob_id, l_coa
261         FROM GL_Sets_Of_Books GL_sob, FA_Book_Controls FA_BC
262        WHERE GL_sob.Set_Of_Books_ID = FA_BC.Set_Of_Books_ID
263          AND Book_Type_Code = px_mass_add_rec.book_type_code;
264 
265       if (upper(px_mass_add_rec.FEEDER_SYSTEM_NAME) = 'ORACLE PAYABLES') then
266         l_debug_str   := 'Feeder System Oracle Payables';
267         l_table       := 'AP_INVOICE_DISTRIBUTIONS_ALL';
268         l_product     := 'AP';
269         l_plsql_block := 'BEGIN EJINMAP.get_asset_key_map(:l_table,:l_product,:l_sob_id,:l_select,:l_from,:l_where); END;';
270         EXECUTE IMMEDIATE l_plsql_block
271           USING l_table, l_product, l_sob_id, l_select, l_from, l_where;
272 
273         /*        EJINMAP.get_asset_key_map('AP_INVOICE_DISTRIBUTIONS_ALL',
274         'AP',
275         l_sob_id,
276         l_select,
277         l_from,
278         l_where);*/
279         l_query := 'select ' || l_select || ',Payables_Code_Combination_ID
280                    from ' || l_from ||
281                    ',FA_Mass_Additions FA  where ' || l_where ||
282                    ' AND TRANS.Invoice_ID= FA.Invoice_ID
283                     AND TRANS.Distribution_Line_Number=FA.AP_Distribution_Line_Number
284                     AND Posting_Status IN (''NEW'',''ON HOLD'')
285                     AND book_type_code=:px_mass_add_rec.book_type_code
286                     AND Feeder_System_Name=''ORACLE PAYABLES''';
287 
288       elsif (upper(px_mass_add_rec.FEEDER_SYSTEM_NAME) =
289             'ORACLE GENERAL LEDGER') then
290         l_debug_str := 'Feeder System Oracle General Ledger';
291         l_debug_str := 'Feeder System Oracle Payables';
292         l_table     := 'GL_JE_LINES';
293         l_product   := 'GL';
294 
295         l_plsql_block := 'BEGIN EJINMAP.get_asset_key_map(:l_table,:l_product,:l_sob_id,:l_select,:l_from,:l_where); END;';
296         EXECUTE IMMEDIATE l_plsql_block
297           USING l_table, l_product, l_sob_id, OUT l_select, OUT l_from, OUT l_where;
298 
299         l_query := 'SELECT AFF.Code_Combination_ID ,Mass_Addition_ID
300                    ,Invoice_Number ,FA.AP_Distribution_Line_Number
301                    ,Feeder_System_Name ,Fixed_Assets_Cost
302                    ,FA.Description Description ,Queue_Name ' ||
303                    l_select || ',Payables_Code_Combination_ID
304                    from ' || l_from ||
305                    ',FA_Mass_Additions FA  where ' || l_where ||
306                    'AND TRANS.Je_Header_ID = FA.Je_Header_ID
307                     AND TRANS.Je_Line_Num = FA.Je_Line_Num
308                     AND book_type_code = :px_mass_add_rec.book_type_code
309                     AND Posting_Status IN (''NEW'',''ON HOLD'')
310                     AND Feeder_System_Name = ''GL''';
311       else
312         l_debug_str := 'Feeder System Other';
313         --if (upper(px_mass_add_rec.FEEDER_SYSTEM_NAME) = 'OTHERS') then
314         SELECT asset_key_segment1,
315                asset_key_segment2,
316                asset_key_segment3,
317                asset_key_segment4,
318                asset_key_segment5,
319                asset_key_segment6,
320                asset_key_segment7,
321                asset_key_segment8,
322                asset_key_segment9,
323                asset_key_segment10
324           INTO l_akey_segment(1),
325                l_akey_segment(2),
326                l_akey_segment(3),
327                l_akey_segment(4),
328                l_akey_segment(5),
329                l_akey_segment(6),
330                l_akey_segment(7),
331                l_akey_segment(8),
332                l_akey_segment(9),
333                l_akey_segment(10)
334           FROM fa_mass_additions
335          WHERE mass_addition_id = px_mass_add_rec.mass_addition_id;
336 
337         BEGIN
338           l_debug_str := 'Get the Asset Key';
339           if (p_log_level_rec.statement_level) then
340             fa_debug_pkg.add(l_calling_fn,
341                              l_debug_str,
342                              '',
343                              p_log_level_rec => p_log_level_rec);
344           end if;
345           SELECT code_combination_id
346             INTO l_akey_ccid
347             FROM fa_asset_keywords
348            WHERE nvl(segment1, '-1') = nvl(l_akey_segment(1), '-1')
349              and nvl(segment2, '-1') = nvl(l_akey_segment(2), '-1')
350              and nvl(segment3, '-1') = nvl(l_akey_segment(3), '-1')
351              and nvl(segment4, '-1') = nvl(l_akey_segment(4), '-1')
352              and nvl(segment5, '-1') = nvl(l_akey_segment(5), '-1')
353              and nvl(segment6, '-1') = nvl(l_akey_segment(6), '-1')
354              and nvl(segment7, '-1') = nvl(l_akey_segment(7), '-1')
355              and nvl(segment8, '-1') = nvl(l_akey_segment(8), '-1')
356              and nvl(segment9, '-1') = nvl(l_akey_segment(9), '-1')
357              and nvl(segment10, '-1') = nvl(l_akey_segment(10), '-1');
358           px_mass_add_rec.asset_key_ccid := l_akey_ccid;
359         EXCEPTION
360           WHEN no_data_found THEN
361             SELECT FA_Asset_keywords_S.Nextval
362               INTO akey_ccid_seq
363               FROM DUAL;
364             l_debug_str := 'Insert the asset key';
365             if (p_log_level_rec.statement_level) then
366               fa_debug_pkg.add(l_calling_fn,
367                                l_debug_str,
368                                '',
369                                p_log_level_rec => p_log_level_rec);
370             end if;
371             INSERT INTO fa_asset_keywords
372               (CODE_COMBINATION_ID,
373                SEGMENT1,
374                SEGMENT2,
375                SEGMENT3,
376                SEGMENT4,
377                SEGMENT5,
378                SEGMENT6,
379                SEGMENT7,
380                SEGMENT8,
381                SEGMENT9,
382                SEGMENT10,
383                SUMMARY_FLAG,
384                ENABLED_FLAG,
385                START_DATE_ACTIVE,
386                END_DATE_ACTIVE,
387                LAST_UPDATE_DATE,
388                LAST_UPDATED_BY,
389                LAST_UPDATE_LOGIN)
390             VALUES
391               (akey_ccid_seq,
392                l_akey_segment(1),
393                l_akey_segment(2),
394                l_akey_segment(3),
395                l_akey_segment(4),
396                l_akey_segment(5),
397                l_akey_segment(6),
398                l_akey_segment(7),
399                l_akey_segment(8),
400                l_akey_segment(9),
401                l_akey_segment(10),
402                'Y',
403                'Y',
404                NULL,
405                NULL,
406                sysdate,
407                FND_GLOBAL.USER_ID,
408                -1);
409 
410             px_mass_add_rec.asset_key_ccid := akey_ccid_seq;
411           WHEN OTHERS THEN
412             ROLLBACK;
413         END;
414       end if;
415 
416       if (length(l_query) is not null) then
417         l_debug_str := 'Preparing the query, Define the Columns';
418         if (p_log_level_rec.statement_level) then
419           fa_debug_pkg.add(l_calling_fn,
420                            l_debug_str,
421                            '',
422                            p_log_level_rec => p_log_level_rec);
423         end if;
424         OPEN l_AssetKeyCur FOR l_query
425           using px_mass_add_rec.book_type_code;
426 
427         loop
428 
429           FETCH l_AssetKeyCur
430             INTO l_dist_ccid, l_mass_addition_ID, l_invoice_number, l_Dist_Line_Num, l_feeder_sys_name,
431                  l_fixed_assets_cost, l_description, l_queue_name, l_asset_Key_segment1, l_asset_Key_segment2,
432                  l_asset_Key_segment3, l_asset_Key_segment4, l_asset_Key_segment5, l_asset_Key_segment6,
433                  l_asset_Key_segment7, l_asset_Key_segment8, l_asset_Key_segment9, l_asset_Key_segment10,
434                  l_payables_ccid;
435 
436           EXIT WHEN l_AssetKeyCur%NOTFOUND;
437 
438           BEGIN
439             SELECT code_combination_id
440               INTO px_mass_add_rec.asset_key_ccid
441               FROM fa_asset_keywords
442              WHERE nvl(segment1, '-1') = nvl(l_asset_key_segment1, '-1')
443                and nvl(segment2, '-1') = nvl(l_asset_key_segment2, '-1')
444                and nvl(segment3, '-1') = nvl(l_asset_key_segment3, '-1')
445                and nvl(segment4, '-1') = nvl(l_asset_key_segment4, '-1')
446                and nvl(segment5, '-1') = nvl(l_asset_key_segment5, '-1')
447                and nvl(segment6, '-1') = nvl(l_asset_key_segment6, '-1')
448                and nvl(segment7, '-1') = nvl(l_asset_key_segment7, '-1')
449                and nvl(segment8, '-1') = nvl(l_asset_key_segment8, '-1')
450                and nvl(segment9, '-1') = nvl(l_asset_key_segment9, '-1')
451                and nvl(segment10, '-1') = nvl(l_asset_key_segment10, '-1');
452 
453           exception
454             when no_data_found then
455               SELECT FA_Asset_keywords_S.Nextval
456                 INTO akey_ccid_seq
457                 FROM DUAL;
458               INSERT INTO fa_asset_keywords
459                 (CODE_COMBINATION_ID,
460                  SEGMENT1,
461                  SEGMENT2,
462                  SEGMENT3,
463                  SEGMENT4,
464                  SEGMENT5,
465                  SEGMENT6,
466                  SEGMENT7,
467                  SEGMENT8,
468                  SEGMENT9,
469                  SEGMENT10,
470                  SUMMARY_FLAG,
471                  ENABLED_FLAG,
472                  START_DATE_ACTIVE,
473                  END_DATE_ACTIVE,
474                  LAST_UPDATE_DATE,
475                  LAST_UPDATED_BY,
476                  LAST_UPDATE_LOGIN)
477               VALUES
478                 (akey_ccid_seq,
479                  l_akey_segment(1),
480                  l_akey_segment(2),
481                  l_akey_segment(3),
482                  l_akey_segment(4),
483                  l_akey_segment(5),
484                  l_akey_segment(6),
485                  l_akey_segment(7),
486                  l_akey_segment(8),
487                  l_akey_segment(9),
488                  l_akey_segment(10),
489                  'Y',
490                  'Y',
491                  NULL,
492                  NULL,
493                  sysdate,
494                  -1,
495                  -1);
496 
497               px_mass_add_rec.asset_key_ccid := akey_ccid_seq;
498           end;
499         end loop;
500 
501         close l_AssetKeyCur;
502       end if;
503     end if;
504     return true;
505   exception
506     when others then
507       return false;
508   end;
509   /*===============================End Of FUNCTION/PROCEDURE===============================*/
510   function prepare_category(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
511                             p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
512     return boolean is
513     l_gl_ccid_rec  GL_CODE_COMBINATIONS%ROWTYPE;
514     l_mass_add_rec FA_MASSADD_PREPARE_PKG.mass_add_rec;
515     l_err_mesg     varchar2(500);
516     l_calling_fn   varchar2(40) := 'prepare_category';
517     TYPE varchar30_tbl IS TABLE OF varchar2(30) INDEX BY BINARY_INTEGER;
518     TYPE num_tbl IS TABLE OF number INDEX BY BINARY_INTEGER;
519     l_seg_num                   num_tbl;
520     l_segment                   varchar30_tbl;
521     l_major_category            varchar2(50);
522     l_minor_category            varchar2(50);
523     l_major_index               number;
524     l_minor_index               number;
525     l_major_ccid                number;
526     l_minor_ccid                number;
527     l_clearing_acct_ccid        number;
528     l_category_id               number;
529     l_gl_ccid_enabled_flag      varchar2(1);
530     l_ACCOUNTING_FLEX_STRUCTURE fa_book_controls.accounting_flex_structure%type;
531     l_bal_seg_num               NUMBER;
532     l_lookup_code               varchar2(30);
533     l_debug_str                 varchar2(1000);
534     h_chart_of_accounts_id    GL_SETS_OF_BOOKS.chart_of_accounts_id%TYPE;
535 
536     CURSOR lookup_cur(c_lookup_type varchar2) IS
537       select lookup_code
538         from fa_lookups
539        where lookup_type = c_lookup_type
540          and enabled_flag = 'Y';
541 
542   begin
543     Select sob.chart_of_accounts_id
544       into h_chart_of_accounts_id
545       From fa_book_controls bc, gl_sets_of_books sob
546      Where sob.set_of_books_id = bc.set_of_books_id
547        And bc.book_type_code = px_mass_add_rec.book_type_code;
548 
549     if (px_mass_add_rec.PAYABLES_CODE_COMBINATION_ID is not null) then
550       l_debug_str := 'Get the Accounting Flex Field';
551       if (p_log_level_rec.statement_level) then
552         fa_debug_pkg.add(l_calling_fn,
553                          l_debug_str,
554                          '',
555                          p_log_level_rec => p_log_level_rec);
556       end if;
557       for i in 1 .. 30 loop
558         l_segment(i) := null;
559         l_seg_num(i) := -1;
560       end loop;
561       l_debug_str := 'Get the Category Mapping';
562       if (p_log_level_rec.statement_level) then
563         fa_debug_pkg.add(l_calling_fn,
564                          l_debug_str,
565                          '',
566                          p_log_level_rec => p_log_level_rec);
567       end if;
568       FOR rec IN lookup_cur('CATEGORY MAPPING FOR COA') LOOP
569         l_seg_num(to_number(substr(rec.lookup_code, 8))) := 1;
570       END LOOP;
571 
572       select Segment1,
573              Segment2,
574              Segment3,
575              Segment4,
576              Segment5,
577              Segment6,
578              Segment7,
579              Segment8,
580              Segment9,
581              Segment10,
582              Segment11,
583              Segment12,
584              Segment13,
585              Segment14,
586              Segment15,
587              Segment16,
588              Segment17,
589              Segment18,
590              Segment19,
591              Segment20,
592              Segment21,
593              Segment22,
594              Segment23,
595              Segment24,
596              Segment25,
597              Segment26,
598              Segment27,
599              Segment28,
600              Segment29,
601              Segment30,
602              enabled_flag
603         into l_segment(1),
604              l_segment(2),
605              l_segment(3),
606              l_segment(4),
607              l_segment(5),
608              l_segment(6),
609              l_segment(7),
610              l_segment(8),
611              l_segment(9),
612              l_segment(10),
613              l_segment(11),
614              l_segment(12),
615              l_segment(13),
616              l_segment(14),
617              l_segment(15),
618              l_segment(16),
619              l_segment(17),
620              l_segment(18),
621              l_segment(19),
622              l_segment(20),
623              l_segment(21),
624              l_segment(22),
625              l_segment(23),
626              l_segment(24),
627              l_segment(25),
628              l_segment(26),
629              l_segment(27),
630              l_segment(28),
631              l_segment(29),
632              l_segment(30),
633              l_gl_ccid_enabled_flag
634         from gl_code_combinations
635         where code_combination_id =
636              px_mass_add_rec.payables_code_combination_id
637 	and chart_of_accounts_id = h_chart_of_accounts_id;
638 
639       for i in 1 .. 30 loop
640         IF (l_seg_num(i) < 0) THEN
641           l_segment(i) := null;
642         END IF;
643       end loop;
644       if (px_mass_add_rec.asset_type = 'CAPITALIZED') then
645         l_debug_str := 'Get the Clearing Account for Capitalized Assets';
646         if (p_log_level_rec.statement_level) then
647           fa_debug_pkg.add(l_calling_fn,
648                            l_debug_str,
649                            '',
650                            p_log_level_rec => p_log_level_rec);
651         end if;
652         select max(code_combination_id)
653           into l_clearing_acct_ccid
654           from gl_code_combinations gl_ccid
655          where decode(l_segment(1), null, '-1', gl_ccid.Segment1) =
656                nvl(l_segment(1), '-1')
657            and decode(l_segment(2), null, '-1', gl_ccid.Segment2) =
658                nvl(l_segment(2), '-1')
659            and decode(l_segment(3), null, '-1', gl_ccid.Segment3) =
660                nvl(l_segment(3), '-1')
661            and decode(l_segment(4), null, '-1', gl_ccid.Segment4) =
662                nvl(l_segment(4), '-1')
663            and decode(l_segment(5), null, '-1', gl_ccid.Segment5) =
664                nvl(l_segment(5), '-1')
665            and decode(l_segment(6), null, '-1', gl_ccid.Segment6) =
666                nvl(l_segment(6), '-1')
667            and decode(l_segment(7), null, '-1', gl_ccid.Segment7) =
668                nvl(l_segment(7), '-1')
669            and decode(l_segment(8), null, '-1', gl_ccid.Segment8) =
670                nvl(l_segment(8), '-1')
671            and decode(l_segment(9), null, '-1', gl_ccid.Segment9) =
672                nvl(l_segment(9), '-1')
673            and decode(l_segment(10), null, '-1', gl_ccid.Segment10) =
674                nvl(l_segment(10), '-1')
675            and decode(l_segment(11), null, '-1', gl_ccid.Segment11) =
676                nvl(l_segment(11), '-1')
677            and decode(l_segment(12), null, '-1', gl_ccid.Segment12) =
678                nvl(l_segment(12), '-1')
679            and decode(l_segment(13), null, '-1', gl_ccid.Segment13) =
680                nvl(l_segment(13), '-1')
681            and decode(l_segment(14), null, '-1', gl_ccid.Segment14) =
682                nvl(l_segment(14), '-1')
683            and decode(l_segment(15), null, '-1', gl_ccid.Segment15) =
684                nvl(l_segment(15), '-1')
685            and decode(l_segment(16), null, '-1', gl_ccid.Segment16) =
686                nvl(l_segment(16), '-1')
687            and decode(l_segment(17), null, '-1', gl_ccid.Segment17) =
688                nvl(l_segment(17), '-1')
689            and decode(l_segment(18), null, '-1', gl_ccid.Segment18) =
690                nvl(l_segment(18), '-1')
691            and decode(l_segment(19), null, '-1', gl_ccid.Segment19) =
692                nvl(l_segment(19), '-1')
693            and decode(l_segment(20), null, '-1', gl_ccid.Segment20) =
694                nvl(l_segment(20), '-1')
695            and decode(l_segment(21), null, '-1', gl_ccid.Segment21) =
696                nvl(l_segment(21), '-1')
697            and decode(l_segment(22), null, '-1', gl_ccid.Segment22) =
698                nvl(l_segment(22), '-1')
699            and decode(l_segment(23), null, '-1', gl_ccid.Segment23) =
700                nvl(l_segment(23), '-1')
701            and decode(l_segment(24), null, '-1', gl_ccid.Segment24) =
702                nvl(l_segment(24), '-1')
703            and decode(l_segment(25), null, '-1', gl_ccid.Segment25) =
704                nvl(l_segment(25), '-1')
705            and decode(l_segment(26), null, '-1', gl_ccid.Segment26) =
706                nvl(l_segment(26), '-1')
707            and decode(l_segment(27), null, '-1', gl_ccid.Segment27) =
708                nvl(l_segment(27), '-1')
709            and decode(l_segment(28), null, '-1', gl_ccid.Segment28) =
710                nvl(l_segment(28), '-1')
711            and decode(l_segment(29), null, '-1', gl_ccid.Segment29) =
712                nvl(l_segment(29), '-1')
713            and decode(l_segment(30), null, '-1', gl_ccid.Segment30) =
714                nvl(l_segment(30), '-1')
715            and chart_of_accounts_id = h_chart_of_accounts_id
716            and exists
717          (select 1
718                   from fa_category_books cat
719                  where cat.ASSET_CLEARING_ACCOUNT_CCID =
720                        gl_ccid.code_combination_id
721                    and cat.book_type_code = px_mass_add_rec.book_type_code);
722         l_debug_str := 'Get the Category for Capitalized Assets';
723         if (p_log_level_rec.statement_level) then
724           fa_debug_pkg.add(l_calling_fn,
725                            l_debug_str,
726                            '',
727                            p_log_level_rec => p_log_level_rec);
728         end if;
729         select category_id
730           into px_mass_add_rec.ASSET_CATEGORY_ID
731           from fa_category_books
732          where ASSET_CLEARING_ACCOUNT_CCID = l_clearing_acct_ccid
733            and book_type_code = px_mass_add_rec.book_type_code
734            and rownum = 1;
735       elsif (px_mass_add_rec.asset_type = 'CIP') then
736         l_debug_str := 'Get the Clearing Account for CIP Assets';
737         if (p_log_level_rec.statement_level) then
738           fa_debug_pkg.add(l_calling_fn,
739                            l_debug_str,
740                            '',
741                            p_log_level_rec => p_log_level_rec);
742         end if;
743         select max(code_combination_id)
744           into l_clearing_acct_ccid
745           from gl_code_combinations gl_ccid
746          where decode(l_segment(1), null, '-1', gl_ccid.Segment1) =
747                nvl(l_segment(1), '-1')
748            and decode(l_segment(2), null, '-1', gl_ccid.Segment2) =
749                nvl(l_segment(2), '-1')
750            and decode(l_segment(3), null, '-1', gl_ccid.Segment3) =
751                nvl(l_segment(3), '-1')
752            and decode(l_segment(4), null, '-1', gl_ccid.Segment4) =
753                nvl(l_segment(4), '-1')
754            and decode(l_segment(5), null, '-1', gl_ccid.Segment5) =
755                nvl(l_segment(5), '-1')
756            and decode(l_segment(6), null, '-1', gl_ccid.Segment6) =
757                nvl(l_segment(6), '-1')
758            and decode(l_segment(7), null, '-1', gl_ccid.Segment7) =
759                nvl(l_segment(7), '-1')
760            and decode(l_segment(8), null, '-1', gl_ccid.Segment8) =
761                nvl(l_segment(8), '-1')
762            and decode(l_segment(9), null, '-1', gl_ccid.Segment9) =
763                nvl(l_segment(9), '-1')
764            and decode(l_segment(10), null, '-1', gl_ccid.Segment10) =
765                nvl(l_segment(10), '-1')
766            and decode(l_segment(11), null, '-1', gl_ccid.Segment11) =
767                nvl(l_segment(11), '-1')
768            and decode(l_segment(12), null, '-1', gl_ccid.Segment12) =
769                nvl(l_segment(12), '-1')
770            and decode(l_segment(13), null, '-1', gl_ccid.Segment13) =
771                nvl(l_segment(13), '-1')
772            and decode(l_segment(14), null, '-1', gl_ccid.Segment14) =
773                nvl(l_segment(14), '-1')
774            and decode(l_segment(15), null, '-1', gl_ccid.Segment15) =
775                nvl(l_segment(15), '-1')
776            and decode(l_segment(16), null, '-1', gl_ccid.Segment16) =
777                nvl(l_segment(16), '-1')
778            and decode(l_segment(17), null, '-1', gl_ccid.Segment17) =
779                nvl(l_segment(17), '-1')
780            and decode(l_segment(18), null, '-1', gl_ccid.Segment18) =
781                nvl(l_segment(18), '-1')
782            and decode(l_segment(19), null, '-1', gl_ccid.Segment19) =
783                nvl(l_segment(19), '-1')
784            and decode(l_segment(20), null, '-1', gl_ccid.Segment20) =
785                nvl(l_segment(20), '-1')
786            and decode(l_segment(21), null, '-1', gl_ccid.Segment21) =
787                nvl(l_segment(21), '-1')
788            and decode(l_segment(22), null, '-1', gl_ccid.Segment22) =
789                nvl(l_segment(22), '-1')
790            and decode(l_segment(23), null, '-1', gl_ccid.Segment23) =
791                nvl(l_segment(23), '-1')
792            and decode(l_segment(24), null, '-1', gl_ccid.Segment24) =
793                nvl(l_segment(24), '-1')
794            and decode(l_segment(25), null, '-1', gl_ccid.Segment25) =
795                nvl(l_segment(25), '-1')
796            and decode(l_segment(26), null, '-1', gl_ccid.Segment26) =
797                nvl(l_segment(26), '-1')
798            and decode(l_segment(27), null, '-1', gl_ccid.Segment27) =
799                nvl(l_segment(27), '-1')
800            and decode(l_segment(28), null, '-1', gl_ccid.Segment28) =
801                nvl(l_segment(28), '-1')
802            and decode(l_segment(29), null, '-1', gl_ccid.Segment29) =
803                nvl(l_segment(29), '-1')
804            and decode(l_segment(30), null, '-1', gl_ccid.Segment30) =
805                nvl(l_segment(30), '-1')
806            and chart_of_accounts_id = h_chart_of_accounts_id
807            and exists
808          (select 1
809                   from fa_category_books cat
810                  where cat.WIP_CLEARING_ACCOUNT_CCID =
811                        gl_ccid.code_combination_id
812                    and cat.book_type_code = px_mass_add_rec.book_type_code);
813         l_debug_str := 'Get the Clearing Account for CIP Assets';
814         if (p_log_level_rec.statement_level) then
815           fa_debug_pkg.add(l_calling_fn,
816                            l_debug_str,
817                            '',
818                            p_log_level_rec => p_log_level_rec);
819         end if;
820         select category_id
821           into px_mass_add_rec.ASSET_CATEGORY_ID
822           from fa_category_books
823          where WIP_CLEARING_ACCOUNT_CCID = l_clearing_acct_ccid
824            and book_type_code = px_mass_add_rec.book_type_code
825            and rownum = 1;
826       END IF;
827 
828     end if;
829     return true;
830   exception
831     when too_many_rows then
832       return false;
833     when no_data_found then
834       return false;
835     when others then
836       return false;
837   end;
838   /*===============================End Of FUNCTION/PROCEDURE===============================*/
839   -- Author  : SKCHAWLA
840   -- Created : 5/16/2005 2:30:36 PM
841   -- Purpose : To Prepare asset key and category id for common customers
842 
843   function prep_asset_key_category(p_book_type_code varchar2,
844                                    p_log_level_rec  IN FA_API_TYPES.log_level_rec_type default null)
845     return boolean is
846     l_mass_add_rec FA_MASSADD_PREPARE_PKG.mass_add_rec;
847     l_batch_size   number := 500;
848     l_count        number;
849     Result         boolean;
850     l_status       number;
851     l_debug_str    varchar2(1000);
852 
853     l_mass_add_rec_tbl FA_MASSADD_PREPARE_PKG.mass_add_rec_tbl;
854 
855     --l_mass_add_dist_tbl mass_add_dist_tbl;
856     l_calling_fn        varchar2(40) := 'prepare_aset_key_category';
857     --Cursor to get all mass_addition lines
858     --check about the book_type_code
859     cursor GET_MASS_ADD(l_book varchar2) is
860       Select MASS_ADDITION_ID,
861              ASSET_NUMBER,
862              TAG_NUMBER,
863              DESCRIPTION,
864              ASSET_CATEGORY_ID,
865              MANUFACTURER_NAME,
866              SERIAL_NUMBER,
867              MODEL_NUMBER,
868              BOOK_TYPE_CODE,
869              DATE_PLACED_IN_SERVICE,
870              FIXED_ASSETS_COST,
871              PAYABLES_UNITS,
872              FIXED_ASSETS_UNITS,
873              PAYABLES_CODE_COMBINATION_ID,
874              EXPENSE_CODE_COMBINATION_ID,
875              LOCATION_ID,
876              ASSIGNED_TO,
877              FEEDER_SYSTEM_NAME,
878              CREATE_BATCH_DATE,
879              CREATE_BATCH_ID,
880              LAST_UPDATE_DATE,
881              LAST_UPDATED_BY,
882              REVIEWER_COMMENTS,
883              INVOICE_NUMBER,
884              INVOICE_LINE_NUMBER,
885              INVOICE_DISTRIBUTION_ID,
886              VENDOR_NUMBER,
887              PO_VENDOR_ID,
888              PO_NUMBER,
889              POSTING_STATUS,
890              QUEUE_NAME,
891              INVOICE_DATE,
892              INVOICE_CREATED_BY,
893              INVOICE_UPDATED_BY,
894              PAYABLES_COST,
895              INVOICE_ID,
896              PAYABLES_BATCH_NAME,
897              DEPRECIATE_FLAG,
898              PARENT_MASS_ADDITION_ID,
899              PARENT_ASSET_ID,
900              SPLIT_MERGED_CODE,
901              AP_DISTRIBUTION_LINE_NUMBER,
902              POST_BATCH_ID,
903              ADD_TO_ASSET_ID,
904              AMORTIZE_FLAG,
905              NEW_MASTER_FLAG,
906              ASSET_KEY_CCID,
907              ASSET_TYPE,
908              DEPRN_RESERVE,
909              YTD_DEPRN,
910              BEGINNING_NBV,
911              CREATED_BY,
912              CREATION_DATE,
913              LAST_UPDATE_LOGIN,
914              SALVAGE_VALUE,
915              ACCOUNTING_DATE,
916              ATTRIBUTE1,
917              ATTRIBUTE2,
918              ATTRIBUTE3,
919              ATTRIBUTE4,
920              ATTRIBUTE5,
921              ATTRIBUTE6,
922              ATTRIBUTE7,
923              ATTRIBUTE8,
924              ATTRIBUTE9,
925              ATTRIBUTE10,
926              ATTRIBUTE11,
927              ATTRIBUTE12,
928              ATTRIBUTE13,
929              ATTRIBUTE14,
930              ATTRIBUTE15,
931              ATTRIBUTE_CATEGORY_CODE,
932              FULLY_RSVD_REVALS_COUNTER,
933              MERGE_INVOICE_NUMBER,
934              MERGE_VENDOR_NUMBER,
935              PRODUCTION_CAPACITY,
936              REVAL_AMORTIZATION_BASIS,
937              REVAL_RESERVE,
938              UNIT_OF_MEASURE,
939              UNREVALUED_COST,
940              YTD_REVAL_DEPRN_EXPENSE,
941              ATTRIBUTE16,
942              ATTRIBUTE17,
943              ATTRIBUTE18,
944              ATTRIBUTE19,
945              ATTRIBUTE20,
946              ATTRIBUTE21,
947              ATTRIBUTE22,
948              ATTRIBUTE23,
949              ATTRIBUTE24,
950              ATTRIBUTE25,
951              ATTRIBUTE26,
952              ATTRIBUTE27,
953              ATTRIBUTE28,
954              ATTRIBUTE29,
955              ATTRIBUTE30,
956              MERGED_CODE,
957              SPLIT_CODE,
958              MERGE_PARENT_MASS_ADDITIONS_ID,
959              SPLIT_PARENT_MASS_ADDITIONS_ID,
960              PROJECT_ASSET_LINE_ID,
961              PROJECT_ID,
962              TASK_ID,
963              SUM_UNITS,
964              DIST_NAME,
965              GLOBAL_ATTRIBUTE1,
966              GLOBAL_ATTRIBUTE2,
967              GLOBAL_ATTRIBUTE3,
968              GLOBAL_ATTRIBUTE4,
969              GLOBAL_ATTRIBUTE5,
970              GLOBAL_ATTRIBUTE6,
971              GLOBAL_ATTRIBUTE7,
972              GLOBAL_ATTRIBUTE8,
973              GLOBAL_ATTRIBUTE9,
974              GLOBAL_ATTRIBUTE10,
975              GLOBAL_ATTRIBUTE11,
976              GLOBAL_ATTRIBUTE12,
977              GLOBAL_ATTRIBUTE13,
978              GLOBAL_ATTRIBUTE14,
979              GLOBAL_ATTRIBUTE15,
980              GLOBAL_ATTRIBUTE16,
981              GLOBAL_ATTRIBUTE17,
982              GLOBAL_ATTRIBUTE18,
983              GLOBAL_ATTRIBUTE19,
984              GLOBAL_ATTRIBUTE20,
985              GLOBAL_ATTRIBUTE_CATEGORY,
986              CONTEXT,
987              INVENTORIAL,
988              SHORT_FISCAL_YEAR_FLAG,
989              CONVERSION_DATE,
990              ORIGINAL_DEPRN_START_DATE,
991              GROUP_ASSET_ID,
992              CUA_PARENT_HIERARCHY_ID,
993              UNITS_TO_ADJUST,
994              BONUS_YTD_DEPRN,
995              BONUS_DEPRN_RESERVE,
996              AMORTIZE_NBV_FLAG,
997              AMORTIZATION_START_DATE,
998              TRANSACTION_TYPE_CODE,
999              TRANSACTION_DATE,
1000              WARRANTY_ID,
1001              LEASE_ID,
1002              LESSOR_ID,
1003              PROPERTY_TYPE_CODE,
1004              PROPERTY_1245_1250_CODE,
1005              IN_USE_FLAG,
1006              OWNED_LEASED,
1007              NEW_USED,
1008              ASSET_ID,
1009              MATERIAL_INDICATOR_FLAG,
1010              cast(multiset (select MASSADD_DIST_ID dist_id,
1011                           MASS_ADDITION_ID mass_add_id,
1012                           UNITS,
1013                           DEPRN_EXPENSE_CCID,
1014                           LOCATION_ID,
1015                           EMPLOYEE_ID
1016                      from FA_MASSADD_DISTRIBUTIONS mass_dist
1017                     where mass_dist.mass_addition_id =
1018                           mass_add.mass_addition_id) as
1019                   fa_mass_add_dist_tbl) dists
1020         FROM fa_mass_additions mass_add
1021        where posting_status in ('NEW', 'ON-HOLD', 'POST')
1022          and book_type_code = l_book
1023          and nvl(merged_code, '1') not in ('MC')
1024          and (asset_key_ccid is null or asset_category_id is null);
1025 
1026   begin
1027     --Open the cursor for the mass additions
1028     open GET_MASS_ADD(p_book_type_code);
1029 
1030     -- Process all the records
1031     while true loop
1032       l_debug_str := 'In Loop';
1033       if (p_log_level_rec.statement_level) then
1034         fa_debug_pkg.add(l_calling_fn,
1035                          l_debug_str,
1036                          '',
1037                          p_log_level_rec => p_log_level_rec);
1038       end if;
1039       --fetch the records as per batch size
1040       fetch GET_MASS_ADD BULK COLLECT
1041         INTO l_mass_add_rec_tbl limit l_batch_size;
1042 
1043       --exit from the loop if no more records
1044       if (GET_MASS_ADD%NOTFOUND) and (l_mass_add_rec_tbl.count < 1) then
1045         exit;
1046       end if;
1047 
1048       --Loop to get process each mass addition line
1049       for l_count in 1 .. l_mass_add_rec_tbl.count loop
1050         l_debug_str := 'Calling prepare_asset_key';
1051         if not prepare_asset_key(l_mass_add_rec_tbl(l_count)) then
1052           l_debug_str := 'prepare_asset_key returned failure';
1053           if (p_log_level_rec.statement_level) then
1054             fa_debug_pkg.add(l_calling_fn,
1055                              l_debug_str,
1056                              '',
1057                              p_log_level_rec => p_log_level_rec);
1058           end if;
1059         end if;
1060         l_debug_str := 'Calling prepare_category';
1061         if (p_log_level_rec.statement_level) then
1062           fa_debug_pkg.add(l_calling_fn,
1063                            l_debug_str,
1064                            '',
1065                            p_log_level_rec => p_log_level_rec);
1066         end if;
1067         if not prepare_category(l_mass_add_rec_tbl(l_count)) then
1068           l_debug_str := 'prepare_category returned failuer';
1069           if (p_log_level_rec.statement_level) then
1070             fa_debug_pkg.add(l_calling_fn,
1071                              l_debug_str,
1072                              '',
1073                              p_log_level_rec => p_log_level_rec);
1074           end if;
1075         end if;
1076       end loop;
1077       l_debug_str := 'Calling update_mass_additions';
1078       if (p_log_level_rec.statement_level) then
1079         fa_debug_pkg.add(l_calling_fn,
1080                          l_debug_str,
1081                          '',
1082                          p_log_level_rec => p_log_level_rec);
1083       end if;
1084       if not
1085           FA_MASSADD_PREPARE_PKG.update_mass_additions(l_mass_add_rec_tbl,
1086                                                        p_log_level_rec => p_log_level_rec) then
1087         l_debug_str := 'update_mass_additions returned failure';
1088       end if;
1089       commit;
1090     end loop;
1091     close GET_MASS_ADD;
1092     Result := True;
1093     return(Result);
1094   exception
1095     when others then
1096       return false;
1097   end prep_asset_key_category;
1098   /**********************Funtion to merge the mass addition lines****************************/
1099   function merge_lines(p_book_type_code varchar2,
1100                        p_log_level_rec  IN FA_API_TYPES.log_level_rec_type default null)
1101     return boolean is
1102 
1103     cursor parent_mass_add(l_book_type_code varchar2) is
1104       SELECT Mass_Addition_ID,
1105              Asset_Key_CCID,
1106              Asset_Category_ID,
1107              book_type_code
1108         FROM FA_Mass_Additions
1109        WHERE Posting_Status IN ('NEW', 'ON HOLD', 'POST')
1110          AND Asset_Category_ID IS NOT NULL
1111          AND Asset_Key_CCID IS NOT NULL
1112          and book_type_code = l_book_type_code
1113        order by asset_category_id,
1114                 asset_key_ccid,
1115                 decode(merged_code, 'MP', 1, NULL, 2), -->Use an existing parent if any
1116                 fixed_assets_cost desc,
1117                 decode(posting_status, 'POST', 1, 'NEW', 2, 'ON HOLD', 3);
1118 
1119     cursor child_mass_add(l_mass_add_id number, l_asset_key_ccid number, l_asset_category_id number, l_book_type_code varchar2) is
1120       select mass_addition_id, asset_category_id, asset_key_ccid
1121         from fa_mass_additions
1122        where posting_status in ('NEW', 'ON HOLD', 'POSTED')
1123          and mass_addition_id <> l_mass_add_id
1124          and asset_category_id = l_asset_category_id
1125          and asset_key_ccid = l_asset_key_ccid
1126          and merged_code is null
1127          and book_type_code = l_book_type_code;
1128 
1129     merged_parent number;
1130     Result        boolean;
1131   begin
1132     for parent_rec in parent_mass_add(p_book_type_code) loop
1133       merged_parent := -1;
1134       for child_rec in child_mass_add(parent_rec.mass_addition_id,
1135                                       parent_rec.asset_key_ccid,
1136                                       parent_rec.asset_category_id,
1137                                       parent_rec.book_type_code) loop
1138         update fa_mass_additions
1139            set posting_status                 = 'MERGED',
1140                MERGE_PARENT_MASS_ADDITIONS_ID = parent_rec.mass_addition_id,
1141                merged_code                    = 'MC',
1142                last_update_date               = sysdate,
1143                last_updated_by                = -1,
1144                last_update_login              = -1
1145          where mass_addition_id = child_rec.mass_addition_id;
1146         merged_parent := 1;
1147       end loop;
1148       if (merged_parent = 1) then
1149         update fa_mass_additions
1150            set merged_code       = 'MP',
1151                last_update_date  = sysdate,
1152                last_updated_by   = -1,
1153                last_update_login = -1
1154          where mass_addition_id = parent_rec.mass_addition_id;
1155       end if;
1156     end loop;
1157     commit;
1158     Result := True;
1159     return(Result);
1160   exception
1161     when no_data_found then
1162       return false;
1163     when others then
1164       return false;
1165 
1166   end merge_lines;
1167 
1168   /*********************Prepare Expense Account******************************************/
1169   function prepare_expense_ccid(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
1170                                 p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
1171     return boolean is
1172     l_exp_acct_col_name fnd_id_flex_segments.application_column_name%TYPE;
1173     TYPE varchar30_tbl IS TABLE OF varchar2(30) INDEX BY BINARY_INTEGER;
1174     l_segment                   varchar30_tbl;
1175     l_exp_acct_index            number;
1176     l_exp_acct_ccid             number;
1177     l_gl_ccid_enabled_flag      varchar2(1);
1178     l_ACCOUNTING_FLEX_STRUCTURE fa_book_controls.accounting_flex_structure%type;
1179 
1180     h_chart_of_accounts_id    GL_SETS_OF_BOOKS.chart_of_accounts_id%TYPE;
1181     h_flex_segment_delimiter  varchar2(5);
1182     h_flex_segment_number     number;
1183     h_num_of_segments         NUMBER;
1184     h_concat_array_segments   FND_FLEX_EXT.SEGMENTARRAY;
1185     h_new_deprn_exp_acct      VARCHAR2(26);
1186     h_cost_acct_ccid          NUMBER := 0;
1187     l_API_VERSION             NUMBER := 1.0;
1188     l_SOURCE_DISTRIB_ID_NUM_1 NUMBER;
1189     l_SOURCE_DISTRIB_ID_NUM_2 NUMBER;
1190     l_SOURCE_DISTRIB_ID_NUM_3 NUMBER;
1191     l_SOURCE_DISTRIB_ID_NUM_4 NUMBER;
1192     l_SOURCE_DISTRIB_ID_NUM_5 NUMBER;
1193     l_ACCOUNT_TYPE_CODE       VARCHAR2(30) := 'FA_EXPENSE_ACCOUNT';
1194     l_DEPRN_EXPENSE_ACCT_CCID NUMBER;
1195     l_PAYABLES_CCID           NUMBER;
1196     l_default_ccid            number;
1197 
1198     l_ACCOUNT_DEFINITION_TYPE_CODE VARCHAR2(30) := 'S';
1199     l_ACCOUNT_DEFINITION_CODE      VARCHAR2(30) := 'FA_EXPENSE_ACCOUNT';
1200     l_TRANSACTION_COA_ID           NUMBER := 101;
1201     l_MODE                         VARCHAR2(30) := 'ONLINE';
1202     l_RETURN_STATUS                VARCHAR2(1);
1203     l_MSG_COUNT                    NUMBER;
1204     l_MSG_DATA                     VARCHAR2(255);
1205 
1206     l_TARGET_CCID           NUMBER;
1207     l_CONCATENATED_SEGMENTS VARCHAR2(4000);
1208     l_plsql_block           varchar2(5000);
1209     l_calling_fn            varchar2(40) := 'prepare_expense_ccid';
1210   begin
1211 
1212     select FLEXBUILDER_DEFAULTS_CCID
1213     into l_default_ccid
1214     from fa_book_controls
1215     where book_type_code = px_mass_add_rec.book_type_code;
1216 
1217     SELECT deprn_expense_account_ccid, asset_cost_account_ccid
1218       INTO l_DEPRN_EXPENSE_ACCT_CCID, h_cost_acct_ccid
1219       FROM fa_category_books
1220      WHERE book_type_code = px_mass_add_rec.book_type_code
1221        AND category_id = px_mass_add_rec.asset_category_id;
1222 
1223     Select sob.chart_of_accounts_id
1224       into h_chart_of_accounts_id
1225       From fa_book_controls bc, gl_sets_of_books sob
1226      Where sob.set_of_books_id = bc.set_of_books_id
1227        And bc.book_type_code = px_mass_add_rec.book_type_code;
1228     l_TRANSACTION_COA_ID := h_chart_of_accounts_id;
1229 
1230     l_PAYABLES_CCID           := px_mass_add_rec.payables_code_combination_id;
1231 
1232     l_plsql_block := 'begin
1233                       fa_xla_tab_pkg.WRITE_ONLINE_TAB(
1234                       P_API_VERSION                  => :l_API_VERSION,
1235                       P_SOURCE_DISTRIB_ID_NUM_1      => :l_SOURCE_DISTRIB_ID_NUM_1,
1236                       P_SOURCE_DISTRIB_ID_NUM_2      => :l_SOURCE_DISTRIB_ID_NUM_2,
1237                       P_SOURCE_DISTRIB_ID_NUM_3      => :l_SOURCE_DISTRIB_ID_NUM_3,
1238                       P_SOURCE_DISTRIB_ID_NUM_4      => :l_SOURCE_DISTRIB_ID_NUM_4,
1239                       P_SOURCE_DISTRIB_ID_NUM_5      => :l_SOURCE_DISTRIB_ID_NUM_5,
1240                       P_ACCOUNT_TYPE_CODE            => :l_ACCOUNT_TYPE_CODE,
1241                       DEFAULT_CCID                   => :l_default_ccid,
1242                       DEPRN_EXPENSE_ACCOUNT_CCID     => :l_DEPRN_EXPENSE_ACCT_CCID,
1243                       PAYABLES_CCID                  => :l_PAYABLES_CCID,
1244                       X_RETURN_STATUS                => :l_RETURN_STATUS,
1245                       X_MSG_COUNT                    => :l_MSG_COUNT ,
1246                       X_MSG_DATA                     => :l_MSG_DATA);
1247                       end;';
1248 
1249     EXECUTE IMMEDIATE l_plsql_block
1250       USING l_API_VERSION, l_SOURCE_DISTRIB_ID_NUM_1, l_SOURCE_DISTRIB_ID_NUM_2, l_SOURCE_DISTRIB_ID_NUM_3,
1251       l_SOURCE_DISTRIB_ID_NUM_4, l_SOURCE_DISTRIB_ID_NUM_5, l_ACCOUNT_TYPE_CODE,l_default_ccid,
1252        l_DEPRN_EXPENSE_ACCT_CCID, l_PAYABLES_CCID, out l_RETURN_STATUS, out l_MSG_COUNT, out l_MSG_DATA;
1253 
1254     l_plsql_block := 'begin
1255                       FA_XLA_TAB_PKG.run(
1256                       P_API_VERSION                  => :l_API_VERSION,
1257                       P_ACCOUNT_DEFINITION_TYPE_CODE => :l_ACCOUNT_DEFINITION_TYPE_CODE,
1258                       P_ACCOUNT_DEFINITION_CODE      => :l_ACCOUNT_DEFINITION_CODE,
1259                       P_TRANSACTION_COA_ID           => :l_TRANSACTION_COA_ID ,
1260                       P_MODE                         => :l_MODE,
1261                       X_RETURN_STATUS                => :l_RETURN_STATUS,
1262                       X_MSG_COUNT                    => :l_MSG_COUNT,
1263                       X_MSG_DATA                     => :l_MSG_DATA);
1264                       end;';
1265 
1266     EXECUTE IMMEDIATE l_plsql_block
1267       USING l_API_VERSION, l_ACCOUNT_DEFINITION_TYPE_CODE, l_ACCOUNT_DEFINITION_CODE, l_TRANSACTION_COA_ID, l_MODE,
1268       out l_RETURN_STATUS, out l_MSG_COUNT, out l_MSG_DATA;
1269 
1270     l_plsql_block := 'begin
1271     fa_xla_tab_pkg.READ_ONLINE_TAB(
1272      P_API_VERSION                  => :l_API_VERSION,
1273      P_SOURCE_DISTRIB_ID_NUM_1      => :l_SOURCE_DISTRIB_ID_NUM_1,
1274      P_SOURCE_DISTRIB_ID_NUM_2      => :l_SOURCE_DISTRIB_ID_NUM_2,
1275      P_SOURCE_DISTRIB_ID_NUM_3      => :l_SOURCE_DISTRIB_ID_NUM_3,
1276      P_SOURCE_DISTRIB_ID_NUM_4      => :l_SOURCE_DISTRIB_ID_NUM_4,
1277      P_SOURCE_DISTRIB_ID_NUM_5      => :l_SOURCE_DISTRIB_ID_NUM_5,
1278      P_ACCOUNT_TYPE_CODE            => :l_ACCOUNT_TYPE_CODE,
1279      X_TARGET_CCID                  => :l_TARGET_CCID,
1280      X_CONCATENATED_SEGMENTS        => :l_CONCATENATED_SEGMENTS,
1281      X_RETURN_STATUS                => :l_RETURN_STATUS,
1282      X_MSG_COUNT                    => :l_MSG_COUNT ,
1283      X_MSG_DATA                     => :l_MSG_DATA);
1284      end;';
1285 
1286     EXECUTE IMMEDIATE l_plsql_block
1287       USING l_API_VERSION, l_SOURCE_DISTRIB_ID_NUM_1, l_SOURCE_DISTRIB_ID_NUM_2, l_SOURCE_DISTRIB_ID_NUM_3,
1288       l_SOURCE_DISTRIB_ID_NUM_4, l_SOURCE_DISTRIB_ID_NUM_5, l_ACCOUNT_TYPE_CODE, out l_TARGET_CCID,
1289       out l_CONCATENATED_SEGMENTS, out l_RETURN_STATUS, out l_MSG_COUNT, out l_MSG_DATA;
1290 
1291     px_mass_add_rec.expense_code_combination_id := l_target_ccid;
1292 
1293     return true;
1294   exception
1295     when no_data_found then
1296       return false;
1297     when too_many_rows then
1298       return false;
1299     when others then
1300       return false;
1301 
1302   end;
1303 
1304   /********************************Prepare Location*******************/
1305   function prepare_location_id(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
1306                                p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
1307     return boolean is
1308     l_location_col_name fnd_id_flex_segments.application_column_name%TYPE;
1309     TYPE varchar30_tbl IS TABLE OF varchar2(30) INDEX BY BINARY_INTEGER;
1310     TYPE num_tbl IS TABLE OF number INDEX BY BINARY_INTEGER;
1311     l_segment                   varchar30_tbl;
1312     l_seg_num                   num_tbl;
1313     l_location_index            number;
1314     l_location_seg              number;
1315     l_gl_ccid_enabled_flag      varchar2(1);
1316     l_ACCOUNTING_FLEX_STRUCTURE fa_book_controls.accounting_flex_structure%type;
1317     l_location_id               number;
1318     l_debug_str                 varchar2(1000);
1319     l_loc_seg_name              varchar2(30) := null;
1320     l_calling_fn                varchar2(40) := 'prepare_location_id';
1321     loc_seg_clr_acct_map        varchar30_tbl;
1322     loc_seg_clr_acct_map_index  num_tbl;
1323     l_loc_query                 varchar2(1000);
1324     TYPE LocationCurType IS REF CURSOR;
1325     l_LocationCur LocationCurType;
1326 
1327     CURSOR lookup_cur(c_lookup_type varchar2) IS
1328       select lookup_code
1329         from fa_lookups
1330        where lookup_type = c_lookup_type
1331          and enabled_flag = 'Y';
1332   begin
1333     for i in 1 .. 30 loop
1334       l_segment(i) := null;
1335       l_seg_num(i) := -1;
1336     end loop;
1337     select location_id
1338       into l_location_id
1339       from fa_locations
1340      where rownum = 1;
1341     l_debug_str := 'Getting Mapping for Location';
1342     if (p_log_level_rec.statement_level) then
1343       fa_debug_pkg.add(l_calling_fn,
1344                        l_debug_str,
1345                        '',
1346                        p_log_level_rec => p_log_level_rec);
1347     end if;
1348     FOR rec IN lookup_cur('LOCATION MAPPING CLEAR ACCT') LOOP
1349       l_loc_seg_name := rec.lookup_code;
1350       l_seg_num(to_number(substr(l_loc_seg_name, 8))) := 1;
1351     END LOOP;
1352     if (l_loc_seg_name is not null) then
1353       l_debug_str := 'Get values from payables_ccid';
1354       if (p_log_level_rec.statement_level) then
1355         fa_debug_pkg.add(l_calling_fn,
1356                          l_debug_str,
1357                          '',
1358                          p_log_level_rec => p_log_level_rec);
1359       end if;
1360       select Segment1,
1361              Segment2,
1362              Segment3,
1363              Segment4,
1364              Segment5,
1365              Segment6,
1366              Segment7,
1367              Segment8,
1368              Segment9,
1369              Segment10,
1370              Segment11,
1371              Segment12,
1372              Segment13,
1373              Segment14,
1374              Segment15,
1375              Segment16,
1376              Segment17,
1377              Segment18,
1378              Segment19,
1379              Segment20,
1380              Segment21,
1381              Segment22,
1382              Segment23,
1383              Segment24,
1384              Segment25,
1385              Segment26,
1386              Segment27,
1387              Segment28,
1388              Segment29,
1389              Segment30,
1390              enabled_flag
1391         into l_segment(1),
1392              l_segment(2),
1393              l_segment(3),
1394              l_segment(4),
1395              l_segment(5),
1396              l_segment(6),
1397              l_segment(7),
1398              l_segment(8),
1399              l_segment(9),
1400              l_segment(10),
1401              l_segment(11),
1402              l_segment(12),
1403              l_segment(13),
1404              l_segment(14),
1405              l_segment(15),
1406              l_segment(16),
1407              l_segment(17),
1408              l_segment(18),
1409              l_segment(19),
1410              l_segment(20),
1411              l_segment(21),
1412              l_segment(22),
1413              l_segment(23),
1414              l_segment(24),
1415              l_segment(25),
1416              l_segment(26),
1417              l_segment(27),
1418              l_segment(28),
1419              l_segment(29),
1420              l_segment(30),
1421              l_gl_ccid_enabled_flag
1422         from gl_code_combinations
1423        where code_combination_id =
1424              px_mass_add_rec.payables_code_combination_id;
1425 
1426       for i in 1 .. 30 loop
1427         IF (l_seg_num(i) < 0) THEN
1428           l_segment(i) := null;
1429         END IF;
1430       end loop;
1431       l_debug_str := 'Get the Loaction';
1432       if (p_log_level_rec.statement_level) then
1433         fa_debug_pkg.add(l_calling_fn,
1434                          l_debug_str,
1435                          '',
1436                          p_log_level_rec => p_log_level_rec);
1437       end if;
1438       /* Location lookups mapping */
1439 
1440       FOR rec IN lookup_cur('LOCATION SEGMENT1 CLEAR ACCT') LOOP
1441         loc_seg_clr_acct_map(1) := rec.lookup_code;
1442 
1443       END LOOP;
1444 
1445       FOR rec IN lookup_cur('LOCATION SEGMENT2 CLEAR ACCT') LOOP
1446         loc_seg_clr_acct_map(2) := rec.lookup_code;
1447 
1448       END LOOP;
1449       FOR rec IN lookup_cur('LOCATION SEGMENT3 CLEAR ACCT') LOOP
1450         loc_seg_clr_acct_map(3) := rec.lookup_code;
1451 
1452       END LOOP;
1453       FOR rec IN lookup_cur('LOCATION SEGMENT4 CLEAR ACCT') LOOP
1454         loc_seg_clr_acct_map(4) := rec.lookup_code;
1455 
1456       END LOOP;
1457       FOR rec IN lookup_cur('LOCATION SEGMENT5 CLEAR ACCT') LOOP
1458         loc_seg_clr_acct_map(5) := rec.lookup_code;
1459 
1460       END LOOP;
1461       FOR rec IN lookup_cur('LOCATION SEGMENT6 CLEAR ACCT') LOOP
1462         loc_seg_clr_acct_map(6) := rec.lookup_code;
1463 
1464       END LOOP;
1465       FOR rec IN lookup_cur('LOCATION SEGMENT7 CLEAR ACCT') LOOP
1466         loc_seg_clr_acct_map(7) := rec.lookup_code;
1467 
1468       END LOOP;
1469       l_loc_query := 'select max(location_id) from fa_locations fa_loc where fa_loc.' ||
1470                      l_loc_seg_name || '= ' ||
1471                      l_segment(to_number(substr(l_loc_seg_name, 8))) || '
1472                      and location_id in (select location_id
1473 			                 from fa_locations fa_loc2, gl_code_combinations gl_code
1474 					 where fa_loc.segment1 = gl_code.' ||
1475                      loc_seg_clr_acct_map(1) ||
1476                      ' and fa_loc.segment2 = gl_code.' ||
1477                      loc_seg_clr_acct_map(2) ||
1478                      ' and fa_loc.segment3 = gl_code.' ||
1479                      loc_seg_clr_acct_map(3) ||
1480                      ' and fa_loc.segment4 = gl_code.' ||
1481                      loc_seg_clr_acct_map(4) ||
1482                      ' and fa_loc.segment5 = gl_code.' ||
1483                      loc_seg_clr_acct_map(5) ||
1484                      ' and fa_loc.segment6 = gl_code.' ||
1485                      loc_seg_clr_acct_map(6) ||
1486                      ' and fa_loc.segment7 = gl_code.' ||
1487                      loc_seg_clr_acct_map(7);
1488       OPEN l_LocationCur FOR l_loc_query;
1489       FETCH l_LocationCur
1490         INTO px_mass_add_rec.LOCATION_ID;
1491       close l_LocationCur;
1492     else
1493 
1494       px_mass_add_rec.LOCATION_ID := l_location_id;
1495     END IF;
1496     if (px_mass_add_rec.LOCATION_ID is null) then
1497       px_mass_add_rec.LOCATION_ID := l_location_id;
1498     end if;
1499     return true;
1500   exception
1501     when no_data_found then
1502       px_mass_add_rec.LOCATION_ID := l_location_id;
1503       return true;
1504     when too_many_rows then
1505       px_mass_add_rec.LOCATION_ID := l_location_id;
1506       return true;
1507     when others then
1508       px_mass_add_rec.LOCATION_ID := l_location_id;
1509       return false;
1510   end;
1511   /*===============================End Of FUNCTION/PROCEDURE===============================*/
1512   function prepare_group_asset_id(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
1513                                   p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
1514     return boolean is
1515     l_debug_str       varchar2(1000);
1516     l_status          number;
1517     l_group_asset_rec FA_CREATE_GROUP_ASSET_PKG.group_asset_rec_type;
1518     l_calling_fn      varchar2(40) := 'prepare_group_asset';
1519   begin
1520     l_group_asset_rec.asset_id         := null;
1521     l_group_asset_rec.mass_addition_id := px_mass_add_rec.mass_addition_id;
1522     l_group_asset_rec.rec_mode         := 'PREPARE';
1523 
1524     l_debug_str := 'energy calling create_group_asset';
1525     if (p_log_level_rec.statement_level) then
1526       fa_debug_pkg.add(l_calling_fn,
1527                        l_debug_str,
1528                        '',
1529                        p_log_level_rec => p_log_level_rec);
1530     end if;
1531     if not
1532         FA_CREATE_GROUP_ASSET_PKG.create_group_asset(l_group_asset_rec,
1533                                                      p_log_level_rec => p_log_level_rec) then
1534       l_debug_str := 'energy create_group_asset returned failure';
1535       if (p_log_level_rec.statement_level) then
1536         fa_debug_pkg.add(l_calling_fn,
1537                          l_debug_str,
1538                          '',
1539                          p_log_level_rec => p_log_level_rec);
1540       end if;
1541     end if;
1542     px_mass_add_rec.group_asset_id := l_group_asset_rec.group_asset_id;
1543     return true;
1544   end;
1545   /*===============================End Of FUNCTION/PROCEDURE===============================*/
1546   function prepare_attributes(px_mass_add_rec IN out NOCOPY FA_MASSADD_PREPARE_PKG.mass_add_rec,
1547                               p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
1548     return boolean is
1549     l_status         varchar2(10);
1550     l_debug_str      varchar2(1000);
1551     old_expense_ccid number := -1;
1552     new_expense_ccid number := -1;
1553     l_calling_fn     varchar2(40) := 'prepare_attributes';
1554   begin
1555     if (px_mass_add_rec.location_id is null) then
1556       if not prepare_location_id(px_mass_add_rec,
1557                                  p_log_level_rec => p_log_level_rec) then
1558         l_debug_str := ' energy prepare_location_id returned failure';
1559         if (p_log_level_rec.statement_level) then
1560           fa_debug_pkg.add(l_calling_fn,
1561                            l_debug_str,
1562                            '',
1563                            p_log_level_rec => p_log_level_rec);
1564         end if;
1565       end if;
1566     end if;
1567     if (px_mass_add_rec.expense_code_combination_id is null) then
1568       if not prepare_expense_ccid(px_mass_add_rec,
1569                                   p_log_level_rec => p_log_level_rec) then
1570         l_debug_str := 'energy prepare_expense_ccid returned failure';
1571         if (p_log_level_rec.statement_level) then
1572           fa_debug_pkg.add(l_calling_fn,
1573                            l_debug_str,
1574                            '',
1575                            p_log_level_rec => p_log_level_rec);
1576         end if;
1577       end if;
1578     end if;
1579 
1580     update fa_mass_additions
1581     set location_id = px_mass_add_rec.location_id,
1582         expense_code_combination_id = px_mass_add_rec.expensE_code_combination_id
1583     where mass_addition_id = px_mass_add_rec.mass_addition_id;
1584     commit;
1585 
1586     if (px_mass_add_rec.group_asset_id is null) then
1587       if not prepare_group_asset_id(px_mass_add_rec,
1588                                     p_log_level_rec => p_log_level_rec) then
1589         l_debug_str := 'energy prepare group_asset_id returned failure';
1590         if (p_log_level_rec.statement_level) then
1591           fa_debug_pkg.add(l_calling_fn,
1592                            l_debug_str,
1593                            '',
1594                            p_log_level_rec => p_log_level_rec);
1595         end if;
1596       end if;
1597     end if;
1598     l_debug_str := 'Calling check_addition_or_adj';
1599     if not (check_addition_or_adj(px_mass_add_rec,
1600                                   l_status,
1601                                   p_log_level_rec => p_log_level_rec)) then
1602       l_debug_str := 'check_addition_or_adj';
1603       if (p_log_level_rec.statement_level) then
1604         fa_debug_pkg.add(l_calling_fn,
1605                          l_debug_str,
1606                          '',
1607                          p_log_level_rec => p_log_level_rec);
1608       end if;
1609     end if;
1610 
1611     if (l_status = 'ADDITION') then
1612       l_debug_str := 'Calling create_new_asset';
1613       if not (create_new_asset(px_mass_add_rec,
1614                                p_log_level_rec => p_log_level_rec)) then
1615         l_debug_str := 'create_new_asset';
1616         if (p_log_level_rec.statement_level) then
1617           fa_debug_pkg.add(l_calling_fn,
1618                            l_debug_str,
1619                            '',
1620                            p_log_level_rec => p_log_level_rec);
1621         end if;
1622       end if;
1623     end if;
1624 
1625     if (l_status = 'ADUSTMENT') then
1626       l_debug_str := 'Calling cost_adjustment';
1627       if not (cost_adjustment(px_mass_add_rec,
1628                               p_log_level_rec => p_log_level_rec)) then
1629         l_debug_str := 'cost_adjustment';
1630         if (p_log_level_rec.statement_level) then
1631           fa_debug_pkg.add(l_calling_fn,
1632                            l_debug_str,
1633                            '',
1634                            p_log_level_rec => p_log_level_rec);
1635         end if;
1636       end if;
1637     end if;
1638     l_debug_str := 'Validating expense account for distributions';
1639     if (p_log_level_rec.statement_level) then
1640       fa_debug_pkg.add(l_calling_fn,
1641                        l_debug_str,
1642                        '',
1643                        p_log_level_rec => p_log_level_rec);
1644     end if;
1645     if (px_mass_add_rec.distributions_table.count > 0) then
1646       old_expense_ccid := px_mass_add_rec.distributions_table(1)
1647                          .deprn_expense_ccid;
1648       for dist_count in 2 .. px_mass_add_rec.distributions_table.count loop
1649 
1650         new_expense_ccid := px_mass_add_rec.distributions_table(dist_count)
1651                            .deprn_expense_ccid;
1652         if (old_expense_ccid <> new_expense_ccid) then
1653           l_debug_str                    := 'Distributions has different expense account';
1654           px_mass_add_rec.POSTING_STATUS := 'ON HOLD';
1655           px_mass_add_rec.queue_name     := 'ON HOLD';
1656         end if;
1657         old_expense_ccid := new_expense_ccid;
1658       end loop;
1659     end if;
1660 
1661     return true;
1662   exception
1663     when others then
1664       return false;
1665   end;
1666 
1667 end FA_MASSADD_PREP_ENERGY_PKG;