DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_MASSTFR_PKG

Source


1 PACKAGE BODY FA_MASSTFR_PKG as
2 /* $Header: FAMTFRB.pls 120.12.12010000.2 2008/07/31 06:46:07 sbhaskar ship $   */
3 
4 g_log_level_rec  fa_api_types.log_level_rec_type;
5 
6 PROCEDURE do_mass_transfer (
7                 p_mass_transfer_id     IN     NUMBER,
8                 p_parent_request_id    IN     NUMBER,
9                 p_total_requests       IN     NUMBER,
10                 p_request_number       IN     NUMBER,
11                 px_max_asset_id        IN OUT NOCOPY NUMBER,
12                 x_success_count           OUT NOCOPY number,
13                 x_failure_count           OUT NOCOPY number,
14                 x_return_status           OUT NOCOPY number) IS
15 
16 
17    -- used for bulk fetching
18    l_batch_size                 number;
19 
20    l_count                      number;
21    l_book_type_code             varchar2(15);
22    l_trans_date			date;
23    l_from_gl			number;
24    l_from_loc			number;
25    l_from_emp			number;
26    l_to_gl			number;
27    l_to_loc			number;
28    l_to_emp			number;
29    l_category_id                number;
30 
31    TYPE v30_tbl  IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
32    TYPE num_tbl  IS TABLE OF NUMBER       INDEX BY BINARY_INTEGER;
33 
34    l_asset_number               v30_tbl;
35    l_asset_id                   num_tbl;
36    l_dist_id                    num_tbl;
37    l_assigned_to                num_tbl;
38    l_loc_id                     num_tbl;
39    l_units_assigned             num_tbl;
40    l_ccid			num_tbl;
41    l_to_ccid			number;
42    l_to_loc_id			number;
43    l_to_emp_id			number;
44    l_txn_units			number;
45    l_success                    boolean;
46    l_rowcount                   number;
47    l_warn_status                boolean := FALSE;
48 
49    done_exc			EXCEPTION;
50    mtfr_err			EXCEPTION;
51    masstfr_err			EXCEPTION;
52 
53 
54    -- variables and structs used for api call
55    l_api_version                  NUMBER      := 1.0;
56    l_init_msg_list                VARCHAR2(1) := FND_API.G_FALSE;
57    l_commit                       VARCHAR2(1) := FND_API.G_FALSE;
58    l_validation_level             NUMBER      := FND_API.G_VALID_LEVEL_FULL;
59    l_return_status                VARCHAR2(1);
60    l_msg_count                    number := 0;
61    l_msg_data                     VARCHAR2(4000);
62    l_calling_fn                   VARCHAR2(40) := 'fa_masstfr_pkg.do_mass_transfer';
63 
64    l_trans_rec                    FA_API_TYPES.trans_rec_type;
65    l_asset_hdr_rec                FA_API_TYPES.asset_hdr_rec_type;
66    l_asset_dist_tbl               FA_API_TYPES.asset_dist_tbl_type;
67 
68    -- mass transfer info
69 
70    cursor c_mass_tfr_info is
71         SELECT famt.*
72         FROM   FA_MASS_TRANSFERS  famt
73         WHERE  MASS_TRANSFER_ID = p_mass_transfer_id;
74    mtfr_rec                       fa_mass_transfers%ROWTYPE;
75 
76    cursor CUA_C1 is
77       select faad.asset_id,
78              faad.asset_number,
79              fadh.distribution_id,
80              fadh.assigned_to,
81              fadh.location_id,
82              fadh.code_combination_id,
83              fadh.units_assigned
84       from fa_books fabk,
85            gl_code_combinations gcc,
86            fa_additions_b faad,
87            fa_distribution_history fadh
88       where    (fadh.code_combination_id = gcc.code_combination_id)
89       AND (fadh.asset_id = faad.asset_id)
90       AND (fabk.asset_id = faad.asset_id)
91       AND (fadh.book_type_code = l_book_type_code)
92       AND (fabk.book_type_code = fadh.book_type_code)
93       AND (faad.asset_category_id = nvl(l_category_id,faad.asset_category_id))
94       AND (faad.asset_type <> 'GROUP')
95       AND (nvl(l_from_loc,fadh.location_id) = fadh.location_id)
96       AND (nvl(l_from_emp,nvl(fadh.assigned_to,-99)) = nvl(fadh.assigned_to,-99))
97       AND (fadh.transaction_header_id_out is null)
98       AND (fadh.retirement_id is null)
99       AND (fabk.date_ineffective is null)
100       AND (fabk.period_counter_fully_retired is null)
101       AND (gcc.segment1 is NULL or
102            gcc.segment1 BETWEEN nvl(mtfr_rec.segment1_Low,gcc.segment1) AND nvl(mtfr_rec.segment1_High,gcc.segment1))
103       AND (gcc.segment2 is NULL or
104            gcc.segment2 BETWEEN nvl(mtfr_rec.segment2_Low,gcc.segment2) AND nvl(mtfr_rec.segment2_High,gcc.segment2))
105       AND (gcc.segment3 is NULL or
106            gcc.segment3 BETWEEN nvl(mtfr_rec.segment3_Low,gcc.segment3) AND nvl(mtfr_rec.segment3_High,gcc.segment3))
107       AND (gcc.segment4 is NULL or
108            gcc.segment4 BETWEEN nvl(mtfr_rec.segment4_Low,gcc.segment4) AND nvl(mtfr_rec.segment4_High,gcc.segment4))
109       AND (gcc.segment5 is NULL or
110            gcc.segment5 BETWEEN nvl(mtfr_rec.segment5_Low,gcc.segment5) AND nvl(mtfr_rec.segment5_High,gcc.segment5))
111       AND (gcc.segment6 is NULL or
112            gcc.segment6 BETWEEN nvl(mtfr_rec.segment6_Low,gcc.segment6) AND nvl(mtfr_rec.segment6_High,gcc.segment6))
113       AND (gcc.segment7 is NULL or
114            gcc.segment7 BETWEEN nvl(mtfr_rec.segment7_Low,gcc.segment7) AND nvl(mtfr_rec.segment7_High,gcc.segment7))
115       AND (gcc.segment8 is NULL or
116            gcc.segment8 BETWEEN nvl(mtfr_rec.segment8_Low,gcc.segment8) AND nvl(mtfr_rec.segment8_High,gcc.segment8))
117       AND (gcc.segment9 is NULL or
118            gcc.segment9 BETWEEN nvl(mtfr_rec.segment9_Low,gcc.segment9) AND nvl(mtfr_rec.segment9_High,gcc.segment9))
119       AND (gcc.segment10 is NULL or
120            gcc.segment10 BETWEEN nvl(mtfr_rec.segment10_Low,gcc.segment10) AND nvl(mtfr_rec.segment10_High,gcc.segment10))
121       AND (gcc.segment11 is NULL or
122            gcc.segment11 BETWEEN nvl(mtfr_rec.segment11_Low,gcc.segment11) AND nvl(mtfr_rec.segment11_High,gcc.segment11))
123       AND (gcc.segment12 is NULL or
124            gcc.segment12 BETWEEN nvl(mtfr_rec.segment12_Low,gcc.segment12) AND nvl(mtfr_rec.segment12_High,gcc.segment12))
125       AND (gcc.segment13 is NULL or
126            gcc.segment13 BETWEEN nvl(mtfr_rec.segment13_Low,gcc.segment13) AND nvl(mtfr_rec.segment13_High,gcc.segment13))
127       AND (gcc.segment14 is NULL or
128            gcc.segment14 BETWEEN nvl(mtfr_rec.segment14_Low,gcc.segment14) AND nvl(mtfr_rec.segment14_High,gcc.segment14))
129       AND (gcc.segment15 is NULL or
130            gcc.segment15 BETWEEN nvl(mtfr_rec.segment15_Low,gcc.segment15) AND nvl(mtfr_rec.segment15_High,gcc.segment15))
131       AND (gcc.segment16 is NULL or
132            gcc.segment16 BETWEEN nvl(mtfr_rec.segment16_Low,gcc.segment16) AND nvl(mtfr_rec.segment16_High,gcc.segment16))
133       AND (gcc.segment17 is NULL or
134            gcc.segment17 BETWEEN nvl(mtfr_rec.segment17_Low,gcc.segment17) AND nvl(mtfr_rec.segment17_High,gcc.segment17))
135       AND (gcc.segment18 is NULL or
136            gcc.segment18 BETWEEN nvl(mtfr_rec.segment18_Low,gcc.segment18) AND nvl(mtfr_rec.segment18_High,gcc.segment18))
137       AND (gcc.segment19 is NULL or
138            gcc.segment19 BETWEEN nvl(mtfr_rec.segment19_Low,gcc.segment19) AND nvl(mtfr_rec.segment19_High,gcc.segment19))
139       AND (gcc.segment20 is NULL or
140            gcc.segment20 BETWEEN nvl(mtfr_rec.segment20_Low,gcc.segment20) AND nvl(mtfr_rec.segment20_High,gcc.segment20))
141       AND (gcc.segment21 is NULL or
142            gcc.segment21 BETWEEN nvl(mtfr_rec.segment21_Low,gcc.segment21) AND nvl(mtfr_rec.segment21_High,gcc.segment21))
143       AND (gcc.segment22 is NULL or
144            gcc.segment22 BETWEEN nvl(mtfr_rec.segment22_Low,gcc.segment22) AND nvl(mtfr_rec.segment22_High,gcc.segment22))
145       AND (gcc.segment23 is NULL or
146            gcc.segment23 BETWEEN nvl(mtfr_rec.segment23_Low,gcc.segment23) AND nvl(mtfr_rec.segment23_High,gcc.segment23))
147       AND (gcc.segment24 is NULL or
148            gcc.segment24 BETWEEN nvl(mtfr_rec.segment24_Low,gcc.segment24) AND nvl(mtfr_rec.segment24_High,gcc.segment24))
149       AND (gcc.segment25 is NULL or
150            gcc.segment25 BETWEEN nvl(mtfr_rec.segment25_Low,gcc.segment25) AND nvl(mtfr_rec.segment25_High,gcc.segment25))
151       AND (gcc.segment26 is NULL or
152            gcc.segment26 BETWEEN nvl(mtfr_rec.segment26_Low,gcc.segment26) AND nvl(mtfr_rec.segment26_High,gcc.segment26))
153       AND (gcc.segment27 is NULL or
154            gcc.segment27 BETWEEN nvl(mtfr_rec.segment27_Low,gcc.segment27) AND nvl(mtfr_rec.segment27_High,gcc.segment27))
155       AND (gcc.segment28 is NULL or
156            gcc.segment28 BETWEEN nvl(mtfr_rec.segment28_Low,gcc.segment28) AND nvl(mtfr_rec.segment28_High,gcc.segment28))
157       AND (gcc.segment29 is NULL or
158            gcc.segment29 BETWEEN nvl(mtfr_rec.segment29_Low,gcc.segment29) AND nvl(mtfr_rec.segment29_High,gcc.segment29))
159       AND (gcc.segment30 is NULL or
160            gcc.segment30 BETWEEN nvl(mtfr_rec.segment30_Low,gcc.segment30) AND nvl(mtfr_rec.segment30_High,gcc.segment30))
161       AND not exists (select 1
162                       from   FA_ASSET_HIERARCHY ASH
163                       where  ASH.ASSET_ID            = FAAD.ASSET_ID
164                       and    ASH.PARENT_HIERARCHY_ID is not null
165 )
166       AND faad.asset_id > px_max_asset_id
167       AND MOD(faad.asset_id, p_total_requests) = (p_request_number - 1)
168       order by faad.asset_id;
169 
170 
171    cursor C1 is
172       select faad.asset_id,
173              faad.asset_number,
174              fadh.distribution_id,
175              fadh.assigned_to,
176              fadh.location_id,
177              fadh.code_combination_id,
178              fadh.units_assigned
179       from fa_books fabk,
180            fa_additions_b faad,
181            gl_code_combinations gcc,
182            fa_distribution_history fadh
183       where (fadh.code_combination_id = gcc.code_combination_id)
184       AND (fadh.asset_id = faad.asset_id)
185       AND (fabk.asset_id = faad.asset_id)
186       AND (fadh.book_type_code = l_book_type_code)
187       AND (fabk.book_type_code = fadh.book_type_code)
188       AND (faad.asset_category_id = nvl(l_category_id,faad.asset_category_id))
189       AND (faad.asset_type <> 'GROUP')
190       AND (nvl(l_from_loc,fadh.location_id) = fadh.location_id)
191       AND (nvl(l_from_emp,nvl(fadh.assigned_to,-99)) = nvl(fadh.assigned_to,-99))
192       AND (fadh.transaction_header_id_out is null)
193       AND (fadh.retirement_id is null)
194       AND (fabk.date_ineffective is null)
195       AND (fabk.period_counter_fully_retired is null)
196       AND (gcc.segment1 is NULL or
197            gcc.segment1 BETWEEN nvl(mtfr_rec.segment1_Low,gcc.segment1) AND nvl(mtfr_rec.segment1_High,gcc.segment1))
198       AND (gcc.segment2 is NULL or
199            gcc.segment2 BETWEEN nvl(mtfr_rec.segment2_Low,gcc.segment2) AND nvl(mtfr_rec.segment2_High,gcc.segment2))
200       AND (gcc.segment3 is NULL or
201            gcc.segment3 BETWEEN nvl(mtfr_rec.segment3_Low,gcc.segment3) AND nvl(mtfr_rec.segment3_High,gcc.segment3))
202       AND (gcc.segment4 is NULL or
203            gcc.segment4 BETWEEN nvl(mtfr_rec.segment4_Low,gcc.segment4) AND nvl(mtfr_rec.segment4_High,gcc.segment4))
204       AND (gcc.segment5 is NULL or
205            gcc.segment5 BETWEEN nvl(mtfr_rec.segment5_Low,gcc.segment5) AND nvl(mtfr_rec.segment5_High,gcc.segment5))
206       AND (gcc.segment6 is NULL or
207            gcc.segment6 BETWEEN nvl(mtfr_rec.segment6_Low,gcc.segment6) AND nvl(mtfr_rec.segment6_High,gcc.segment6))
208       AND (gcc.segment7 is NULL or
209            gcc.segment7 BETWEEN nvl(mtfr_rec.segment7_Low,gcc.segment7) AND nvl(mtfr_rec.segment7_High,gcc.segment7))
210       AND (gcc.segment8 is NULL or
211            gcc.segment8 BETWEEN nvl(mtfr_rec.segment8_Low,gcc.segment8) AND nvl(mtfr_rec.segment8_High,gcc.segment8))
212       AND (gcc.segment9 is NULL or
213            gcc.segment9 BETWEEN nvl(mtfr_rec.segment9_Low,gcc.segment9) AND nvl(mtfr_rec.segment9_High,gcc.segment9))
214       AND (gcc.segment10 is NULL or
215            gcc.segment10 BETWEEN nvl(mtfr_rec.segment10_Low,gcc.segment10) AND nvl(mtfr_rec.segment10_High,gcc.segment10))
216       AND (gcc.segment11 is NULL or
217            gcc.segment11 BETWEEN nvl(mtfr_rec.segment11_Low,gcc.segment11) AND nvl(mtfr_rec.segment11_High,gcc.segment11))
218       AND (gcc.segment12 is NULL or
219            gcc.segment12 BETWEEN nvl(mtfr_rec.segment12_Low,gcc.segment12) AND nvl(mtfr_rec.segment12_High,gcc.segment12))
220       AND (gcc.segment13 is NULL or
221            gcc.segment13 BETWEEN nvl(mtfr_rec.segment13_Low,gcc.segment13) AND nvl(mtfr_rec.segment13_High,gcc.segment13))
222       AND (gcc.segment14 is NULL or
223            gcc.segment14 BETWEEN nvl(mtfr_rec.segment14_Low,gcc.segment14) AND nvl(mtfr_rec.segment14_High,gcc.segment14))
224       AND (gcc.segment15 is NULL or
225            gcc.segment15 BETWEEN nvl(mtfr_rec.segment15_Low,gcc.segment15) AND nvl(mtfr_rec.segment15_High,gcc.segment15))
226       AND (gcc.segment16 is NULL or
227            gcc.segment16 BETWEEN nvl(mtfr_rec.segment16_Low,gcc.segment16) AND nvl(mtfr_rec.segment16_High,gcc.segment16))
228       AND (gcc.segment17 is NULL or
229            gcc.segment17 BETWEEN nvl(mtfr_rec.segment17_Low,gcc.segment17) AND nvl(mtfr_rec.segment17_High,gcc.segment17))
230       AND (gcc.segment18 is NULL or
231            gcc.segment18 BETWEEN nvl(mtfr_rec.segment18_Low,gcc.segment18) AND nvl(mtfr_rec.segment18_High,gcc.segment18))
232       AND (gcc.segment19 is NULL or
233            gcc.segment19 BETWEEN nvl(mtfr_rec.segment19_Low,gcc.segment19) AND nvl(mtfr_rec.segment19_High,gcc.segment19))
234       AND (gcc.segment20 is NULL or
235            gcc.segment20 BETWEEN nvl(mtfr_rec.segment20_Low,gcc.segment20) AND nvl(mtfr_rec.segment20_High,gcc.segment20))
236       AND (gcc.segment21 is NULL or
237            gcc.segment21 BETWEEN nvl(mtfr_rec.segment21_Low,gcc.segment21) AND nvl(mtfr_rec.segment21_High,gcc.segment21))
238       AND (gcc.segment22 is NULL or
239            gcc.segment22 BETWEEN nvl(mtfr_rec.segment22_Low,gcc.segment22) AND nvl(mtfr_rec.segment22_High,gcc.segment22))
240       AND (gcc.segment23 is NULL or
241            gcc.segment23 BETWEEN nvl(mtfr_rec.segment23_Low,gcc.segment23) AND nvl(mtfr_rec.segment23_High,gcc.segment23))
242       AND (gcc.segment24 is NULL or
243            gcc.segment24 BETWEEN nvl(mtfr_rec.segment24_Low,gcc.segment24) AND nvl(mtfr_rec.segment24_High,gcc.segment24))
244       AND (gcc.segment25 is NULL or
245            gcc.segment25 BETWEEN nvl(mtfr_rec.segment25_Low,gcc.segment25) AND nvl(mtfr_rec.segment25_High,gcc.segment25))
246       AND (gcc.segment26 is NULL or
247            gcc.segment26 BETWEEN nvl(mtfr_rec.segment26_Low,gcc.segment26) AND nvl(mtfr_rec.segment26_High,gcc.segment26))
248       AND (gcc.segment27 is NULL or
249            gcc.segment27 BETWEEN nvl(mtfr_rec.segment27_Low,gcc.segment27) AND nvl(mtfr_rec.segment27_High,gcc.segment27))
250       AND (gcc.segment28 is NULL or
251            gcc.segment28 BETWEEN nvl(mtfr_rec.segment28_Low,gcc.segment28) AND nvl(mtfr_rec.segment28_High,gcc.segment28))
252       AND (gcc.segment29 is NULL or
253            gcc.segment29 BETWEEN nvl(mtfr_rec.segment29_Low,gcc.segment29) AND nvl(mtfr_rec.segment29_High,gcc.segment29))
254       AND (gcc.segment30 is NULL or
255            gcc.segment30 BETWEEN nvl(mtfr_rec.segment30_Low,gcc.segment30) AND nvl(mtfr_rec.segment30_High,gcc.segment30))
256       AND faad.asset_id > px_max_asset_id
257       AND MOD(faad.asset_id, p_total_requests) = (p_request_number - 1)
258       order by faad.asset_id;
259 
260 
261 BEGIN
262 
263    if (not g_log_level_rec.initialized) then
264       if (NOT fa_util_pub.get_log_level_rec (
265                 x_log_level_rec =>  g_log_level_rec
266       )) then
267          raise masstfr_err;
268       end if;
269    end if;
270 
271    px_max_asset_id := nvl(px_max_asset_id, 0);
272    x_success_count := 0;
273    x_failure_count := 0;
274 
275    open c_mass_tfr_info;
276    fetch c_mass_tfr_info into mtfr_rec;
277 
278    if (c_mass_tfr_info%NOTFOUND) then
279       close c_mass_tfr_info;
280       raise masstfr_err;
281    end if;
282    close c_mass_tfr_info;
283 
284    l_book_type_code := mtfr_rec.book_type_code;
285    l_trans_date := mtfr_rec.transaction_date_entered;
286    l_from_gl := mtfr_rec.from_gl_ccid;
287    l_from_loc := mtfr_rec.from_location_id;
288    l_from_emp := mtfr_rec.from_employee_id;
289    l_to_gl := mtfr_rec.to_gl_ccid;
290    l_to_loc := mtfr_rec.to_location_id;
291    l_to_emp := mtfr_rec.to_employee_id;
292    l_category_id := mtfr_rec.category_id;
293 
294    if not fa_cache_pkg.fazcbc(X_book => l_book_type_code,
295                               p_log_level_rec =>  g_log_level_rec) then
296       raise masstfr_err;
297    end if;
298 
299    l_batch_size := nvl(fa_cache_pkg.fa_batch_size, 200);
300 
301    --dbms_output.put_line(to_char(l_category_id));
302    --dbms_output.put_line('before OPEN CURSOR');
303 
304    if (fa_cache_pkg.fa_crl_enabled) then
305       OPEN CUA_C1;
306       FETCH CUA_C1 BULK COLLECT INTO
307           l_asset_id,
308           l_asset_number,
309           l_dist_id,
310           l_assigned_to,
311           l_loc_id,
312           l_ccid,
313           l_units_assigned
314       LIMIT l_batch_size;
315       close CUA_C1;
316    else
317       OPEN C1;
318       FETCH C1 BULK COLLECT INTO
319            l_asset_id,
320            l_asset_number,
321            l_dist_id,
322            l_assigned_to,
323            l_loc_id,
324            l_ccid,
325            l_units_assigned
326       LIMIT l_batch_size;
327       close C1;
328    end if;
329 
330    if l_asset_id.count = 0 then
331          raise done_exc;
332    end if;
333 
334    --dbms_output.put_line('after the fetch');
335    for l_count in 1..l_asset_id.count loop
336 
337       -- clear the debug stack for each asset
338       FA_DEBUG_PKG.Initialize;
339       -- reset the message level to prevent bogus errors
340       FA_SRVR_MSG.Set_Message_Level(message_level => 10);
341 
342       BEGIN
343 
344          -- if partial segments were entered for destination
345          -- call famtgcc to generate new ccid(l_to_ccid)
346          if (l_to_gl is null) then
347              l_to_ccid := -99; -- set to -99 for NULL for famtgcc below to work correctly
348              l_success := FA_MASS_TRANSFERS_PKG.famtgcc(
349                                x_mass_transfer_id => p_mass_transfer_id,
350                                x_from_glccid      => l_ccid(l_count),
351                                x_to_glccid        => l_to_ccid,
352                                p_log_level_rec =>  g_log_level_rec);
353              if (not l_success) then
354                  raise mtfr_err;
355              end if;
356              if (l_to_ccid is null) then
357                 raise mtfr_err;
358              end if;
359          else
360             l_to_ccid := l_to_gl;
361          end if;
362 
363          if (l_to_loc is not null) then
364             l_to_loc_id := l_to_loc;
365          else
366             l_to_loc_id := l_loc_id(l_count);
367          end if;
368 
369          if (l_to_emp is not null) then
370             l_to_emp_id := l_to_emp;
371          else
372             l_to_emp_id := l_assigned_to(l_count);
373 
374             /* fix 2783537 - null out assigned_to column when invalid
375                employee is encountered. Also return warning status to calling program */
376 
377             if (l_assigned_to(l_count) is not null) then
378                select count(*)
379                into l_rowcount
380                from per_periods_of_service s, per_people_f p
381                where p.person_id = s.person_id
382                and trunc(l_trans_date) between
383                p.effective_start_date and p.effective_end_date
384                and nvl(s.actual_termination_date,l_trans_date) >= l_trans_date
385                and p.person_id = l_assigned_to(l_count);
386                if (l_rowcount = 0) then
387                   l_to_emp_id := NULL;  -- null out invalid employees
388                   fa_srvr_msg.add_message(
389                       calling_fn => NULL,
390                       name       => 'FA_INVALID_ASSIGNED_TO',
391 		      token1     => 'ASSET_NUMBER',
392                       value1     => l_asset_number(l_count),
393                       token2     => 'ASSIGNED_TO',
394                       value2     => l_assigned_to(l_count),
395                       p_log_level_rec =>  g_log_level_rec);
396                       l_warn_status := TRUE;
397                end if;
398             end if;
399          end if;
400 
401 
402          l_trans_rec                    := NULL;
403          l_asset_hdr_rec                := NULL;
404          l_asset_dist_tbl.delete;
405 
406          l_trans_rec.who_info.last_update_date   := sysdate;
407          l_trans_rec.who_info.last_updated_by    := FND_GLOBAL.USER_ID;
408          l_trans_rec.who_info.created_by         := FND_GLOBAL.USER_ID;
409          l_trans_rec.who_info.creation_date      := sysdate;
410          l_trans_rec.who_info.last_update_login  := FND_GLOBAL.CONC_LOGIN_ID;
411 
412          l_trans_rec.mass_reference_id           := p_parent_request_id;
413          l_trans_rec.mass_transaction_id         := p_mass_transfer_id;
414          l_trans_rec.calling_interface           := 'FAMTFR';
415 
416          l_trans_rec.transaction_date_entered     := l_trans_date;
417 
418          l_trans_rec.transaction_name             := mtfr_rec.description; --bug 7126485
419 
420          l_asset_hdr_rec.asset_id                 := l_asset_id(l_count);
421          l_asset_hdr_rec.book_type_code           := l_book_type_code;
422 
423          l_txn_units := l_units_assigned(l_count);
424 
425          l_asset_dist_tbl(1).distribution_id := l_dist_id(l_count);
426          l_asset_dist_tbl(1).transaction_units := -1 * l_txn_units;
427 
428          l_asset_dist_tbl(2).transaction_units := l_txn_units;
429          l_asset_dist_tbl(2).assigned_to := l_to_emp_id;
430          l_asset_dist_tbl(2).location_ccid := l_to_loc_id;
431          l_asset_dist_tbl(2).expense_ccid := l_to_ccid;
432 
433          if (g_log_level_rec.statement_level) then
434             fa_debug_pkg.add('FAMTFR','tbl-1:dist_id',l_asset_dist_tbl(1).distribution_id, p_log_level_rec =>  g_log_level_rec);
435             fa_debug_pkg.add('FAMTFR','tbl-1:txn_units',l_asset_dist_tbl(1).transaction_units,p_log_level_rec =>  g_log_level_rec);
436             fa_debug_pkg.add('FAMTFR','tbl-1:assignto',l_asset_dist_tbl(1).assigned_to,p_log_level_rec =>  g_log_level_rec);
437             fa_debug_pkg.add('FAMTFR','tbl-1:loc_id',l_asset_dist_tbl(1).location_ccid, p_log_level_rec =>  g_log_level_rec);
438             fa_debug_pkg.add('FAMTFR','tbl-1:exp_id',l_asset_dist_tbl(1).expense_ccid, p_log_level_rec =>  g_log_level_rec);
439 
440             fa_debug_pkg.add('FAMTFR','tbl-2:dist_id',l_asset_dist_tbl(2).distribution_id, p_log_level_rec =>  g_log_level_rec);
441             fa_debug_pkg.add('FAMTFR','tbl-2:txn_units',l_asset_dist_tbl(2).transaction_units, p_log_level_rec =>  g_log_level_rec);
442             fa_debug_pkg.add('FAMTFR','tbl-2:assignto',l_asset_dist_tbl(2).assigned_to, p_log_level_rec =>  g_log_level_rec);
443             fa_debug_pkg.add('FAMTFR','tbl-2:loc_id',l_asset_dist_tbl(2).location_ccid, p_log_level_rec =>  g_log_level_rec);
444             fa_debug_pkg.add('FAMTFR','tbl-2:exp_id',l_asset_dist_tbl(2).expense_ccid, p_log_level_rec =>  g_log_level_rec);
445          end if;
446          --dbms_output.put_line('before fa_transfer_pub');
447          FA_TRANSFER_PUB.do_transfer
448                      (p_api_version       => l_api_version,
449                       p_init_msg_list     => l_init_msg_list,
450                       p_commit            => l_commit,
451                       p_validation_level  => l_validation_level,
452                       x_return_status     => l_return_status,
453                       x_msg_count         => l_msg_count,
454                       x_msg_data          => l_msg_data,
455                       p_calling_fn        => l_calling_fn,
456                       px_trans_rec        => l_trans_rec,
457                       px_asset_hdr_rec    => l_asset_hdr_rec,
458                       px_asset_dist_tbl   => l_asset_dist_tbl);
459 
460          if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
461            raise mtfr_err;
462          end if;
463 
464          --dbms_output.put_line('after fa_transfer_pub');
465          x_success_count := x_success_count + 1;
466              fa_srvr_msg.add_message(
467                 calling_fn => NULL,
468                 name       => 'FA_TAXUP_ASSET_SUCCESS',
469                 token1     => 'NUMBER',
470                 value1     => l_asset_number(l_count),
471                 p_log_level_rec =>  g_log_level_rec);
472 
473       EXCEPTION
474          when mtfr_err then
475                --dbms_output.put_line('when mtfr_err');
476                FND_CONCURRENT.AF_ROLLBACK;
477 
478 -- Commented for bugfix 4672237
479 --               if (g_log_level_rec.statement_level) then
480 --                  fa_debug_pkg.dump_debug_messages(max_mesgs => 0);
481 --               end if;
482                x_failure_count := x_failure_count + 1;
483                fa_srvr_msg.add_message(
484                   calling_fn => l_calling_fn,
485                   name       => 'FA_TAXUP_ASSET_FAILURE',
486                   token1     => 'NUMBER',
487                   value1     => l_asset_number(l_count),
488                   p_log_level_rec =>  g_log_level_rec);
489 
490          when others then
491                --dbms_output.put_line('when others');
492                FND_CONCURRENT.AF_ROLLBACK;
493 
494 -- Commented for bugfix 4672237
495 --               if (g_log_level_rec.statement_level) then
496 --                  fa_debug_pkg.dump_debug_messages(max_mesgs => 0);
497 --               end if;
498                x_failure_count := x_failure_count + 1;
499                fa_srvr_msg.add_message(
500                   calling_fn => l_calling_fn,
501                   name       => 'FA_TAXUP_ASSET_FAILURE',
502                   token1     => 'NUMBER',
503                   value1     => l_asset_number(l_count),
504                   p_log_level_rec =>  g_log_level_rec);
505       END;
506 
507       -- commit each record
508       FND_CONCURRENT.AF_COMMIT;
509 
510    end loop;  -- main bulk fetch loop
511 
512    --dbms_output.put_line('after loop');
513    px_max_asset_id := l_asset_id(l_asset_id.count);
514    if (l_warn_status) then
515       x_return_status := 1;  -- return warning
516    else
517       x_return_status := 0;  -- success
518    end if;
519 
520 EXCEPTION
521    when done_exc then
522      --dbms_output.put_line('when done_exc');
523    if (l_warn_status) then
524       x_return_status := 1;
525    else
526       x_return_status :=  0;
527    end if;
528 
529    when masstfr_err then
530       --dbms_output.put_line('when masstfr_err 2');
531       FND_CONCURRENT.AF_ROLLBACK;
532       fa_srvr_msg.add_message(calling_fn => l_calling_fn,
533                               p_log_level_rec =>  g_log_level_rec);
534 
535 -- Commented for bugfix 4672237
536 --      if (g_log_level_rec.statement_level) then
537 --         FA_DEBUG_PKG.dump_debug_messages(max_mesgs => 0);
538 --      end if;
539       x_return_status :=  2;
540 
541    when others then
542       --dbms_output.put_line('when others then');
543       FND_CONCURRENT.AF_ROLLBACK;
544       fa_srvr_msg.add_message(calling_fn => l_calling_fn
545             ,p_log_level_rec => g_log_level_rec);
546       x_return_status :=  2;
547 
548 END do_mass_transfer;
549 
550 END FA_MASSTFR_PKG;