DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_FA_TIEBACK_PVT

Source


1 PACKAGE BODY PA_FA_TIEBACK_PVT AS
2 /* $Header: PACFATBB.pls 115.5 2003/08/18 14:31:28 ajdas noship $ */
3 
4 
5  PROCEDURE ASSETS_TIEBACK
6 	(errbuf                  OUT NOCOPY VARCHAR2,
7     retcode                  OUT NOCOPY VARCHAR2) IS
8 
9 
10     CURSOR project_assets_cur IS
11     SELECT  pa.project_asset_id,
12             pa.asset_number
13     FROM    pa_project_assets pa
14     WHERE   pa.project_asset_type = 'AS-BUILT'
15     AND     pa.capitalized_flag = 'Y'
16     AND     pa.fa_period_name IS NULL;
17 
18     project_assets_rec          project_assets_cur%ROWTYPE;
19 
20 
21     CURSOR earliest_asset_period_cur(x_project_asset_id  NUMBER) IS
22     SELECT  fdp.period_name, MIN(fit.date_effective)
23     FROM    fa_deprn_periods fdp,
24             fa_asset_invoices fai,
25             fa_invoice_transactions fit,
26             pa_project_asset_lines_all pal
27     WHERE   fai.project_asset_line_id = pal.project_asset_line_id
28     AND		pal.project_asset_id = x_project_asset_id
29     AND     fai.invoice_transaction_id_in = fit.invoice_transaction_id
30     AND     fit.transaction_type = 'MASS ADDITION'
31     AND     fit.book_type_code = fdp.book_type_code
32     AND     fit.date_effective BETWEEN fdp.period_open_date
33                AND NVL(fdp.period_close_date,fit.date_effective)
34     GROUP BY fdp.period_name
35     ORDER BY MIN(fit.date_effective);
36 
37     earliest_asset_period_rec       earliest_asset_period_cur%ROWTYPE;
38 
39 
40     CURSOR asset_lines_cur IS
41     SELECT  pal.project_asset_line_id,
42             pal.current_asset_cost
43     FROM    pa_project_assets pa,
44             pa_project_asset_lines_all pal
45     WHERE   pa.project_asset_id = pal.project_asset_id
46     AND     pa.project_asset_type = 'AS-BUILT'
47     AND     pal.transfer_status_code = 'T'
48     AND     pal.line_type = 'C'
49     AND     pal.fa_period_name IS NULL;
50 
51     asset_lines_rec          asset_lines_cur%ROWTYPE;
52 
53 
54     CURSOR asset_line_period_cur(x_project_asset_line_id  NUMBER) IS
55     SELECT  fdp.period_name,
56 	        SUM(payables_cost) payables_cost
57     FROM    fa_deprn_periods fdp,
58             fa_asset_invoices fai,
59             fa_invoice_transactions fit
60     WHERE   fai.project_asset_line_id = x_project_asset_line_id
61     AND     fai.invoice_transaction_id_in = fit.invoice_transaction_id
62     AND     fit.transaction_type = 'MASS ADDITION'
63     AND     fit.book_type_code = fdp.book_type_code
64     AND     fit.date_effective BETWEEN fdp.period_open_date
65                AND NVL(fdp.period_close_date,fit.date_effective)
66     GROUP BY fdp.period_name;
67 
68     asset_line_period_rec       asset_line_period_cur%ROWTYPE;
69 
70 
71     CURSOR fa_assets_cur(x_project_asset_id  NUMBER) IS
72     SELECT 	fa.asset_id, fa.asset_number
73     FROM   	fa_additions fa,
74    			fa_asset_invoices fai,
75     		pa_project_asset_lines_all pal
76     WHERE   fai.project_asset_line_id = pal.project_asset_line_id
77     AND		pal.project_asset_id = x_project_asset_id
78     AND		fai.asset_id = fa.asset_id
79     GROUP BY fa.asset_id, fa.asset_number;
80 
81     fa_assets_rec       fa_assets_cur%ROWTYPE;
82 
83     v_user                      NUMBER := FND_GLOBAL.user_id;
84     v_login                     NUMBER := FND_GLOBAL.login_id;
85     v_request_id                NUMBER := FND_GLOBAL.conc_request_id;
86     v_program_application_id    NUMBER := FND_GLOBAL.prog_appl_id;
87     v_program_id                NUMBER := FND_GLOBAL.conc_program_id;
88 
89     v_asset_count               NUMBER := 0;
90     v_asset_number_count        NUMBER := 0;
91     v_asset_number              fa_additions.asset_number%TYPE;
92     v_asset_id                  fa_additions.asset_id%TYPE;
93     v_fa_period_name            fa_deprn_periods.period_name%TYPE;
94     v_asset_line_count          NUMBER := 0;
95 
96     PG_DEBUG varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
97 
98     l_commit_count              NUMBER := 0;
99 
100 
101  BEGIN
102     --Initialize variables
103     retcode := 0;
104     errbuf := NULL;
105 
106     PA_DEBUG.SET_PROCESS(x_process    => 'PLSQL',
107                          x_debug_mode => PG_DEBUG);
108 
109     PA_DEBUG.WRITE_FILE('LOG', TO_CHAR(SYSDATE,'HH:MI:SS')||': PA_DEBUG_MODE: '||PG_DEBUG);
110 
111 
112 
113     --Print report heading
114     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,TO_CHAR(sysdate,'DD-MON-YYYY')||
115                                 '                                   '||
116                                 'PACFATBP - Tieback Asset Lines from Oracle Assets');
117     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,fnd_global.local_chr(10));
118 
119 
120     IF PG_DEBUG = 'Y' THEN
121        PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Opening project_assets_cur');
122     END IF;
123 
124     --Tieback all Project Assets that have not yet been Tied back
125     FOR project_assets_rec IN project_assets_cur LOOP
126 
127         v_asset_number := NULL;
128         v_asset_id := NULL;
129         v_asset_number_count := 0;
130 
131         IF PG_DEBUG = 'Y' THEN
132             PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Processing project asset id: '||project_assets_rec.project_asset_id);
133             PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Opening earliest_asset_period_cur');
134         END IF;
135 
136         --Get the earliest period posted into for any line related to the project asset
137         OPEN earliest_asset_period_cur(project_assets_rec.project_asset_id);
138         FETCH earliest_asset_period_cur INTO earliest_asset_period_rec;
139         IF (earliest_asset_period_cur%NOTFOUND) THEN
140             v_fa_period_name := NULL;
141             IF PG_DEBUG = 'Y' THEN
142                 PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'earliest_asset_period_cur NOTFOUND');
143             END IF;
144         ELSE
145             v_fa_period_name := earliest_asset_period_rec.period_name;
146             IF PG_DEBUG = 'Y' THEN
147                 PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Earliest asset period: '||v_fa_period_name);
148             END IF;
149         END IF;
150         CLOSE earliest_asset_period_cur;
151 
152 
153         IF PG_DEBUG = 'Y' THEN
154             PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Opening fa_assets_cur');
155         END IF;
156 
157         --Determine if all asset lines are associated with a single asset id
158         FOR fa_assets_rec IN fa_assets_cur(project_assets_rec.project_asset_id) LOOP
159 
160             IF NVL(v_asset_id,-1) <> fa_assets_rec.asset_id THEN
161             	v_asset_number_count := v_asset_number_count + 1;
162                 v_asset_number := fa_assets_rec.asset_number;
163                 v_asset_id := fa_assets_rec.asset_id;
164             END IF;
165 
166         END LOOP;
167 
168 
169         IF v_asset_number_count = 1 THEN --If this is zero, the asset has not yet been posted.
170             --If it is > 1, an asset line has been split and the asset cannot be tied back
171 
172 
173        	    IF PG_DEBUG = 'Y' THEN
174                 PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Single asset id: '||v_asset_id);
175             END IF;
176 
177 
178             IF  v_fa_period_name IS NOT NULL THEN
179 
180                 IF  v_asset_number <> NVL(project_assets_rec.asset_number,'X') OR
181                     project_assets_rec.asset_number IS NULL THEN
182 
183                	    IF PG_DEBUG = 'Y' THEN
184                         PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Tieback project asset with asset number, fa_asset_id and fa period');
185                     END IF;
186 
187                     --Update project asset with asset number and FA period name
188                     UPDATE  pa_project_assets_all
189                     SET     asset_number = v_asset_number,
190                             fa_asset_id = v_asset_id,
191                             fa_period_name = v_fa_period_name,
192                             last_update_date = SYSDATE,
193                             last_updated_by = v_user,
194                             last_update_login = v_login,
195                             request_id = v_request_id,
196                             program_application_id = v_program_application_id,
197                             program_id = v_program_id
198                     WHERE   project_asset_id = project_assets_rec.project_asset_id;
199 
200                     v_asset_count := v_asset_count + 1;
201                     l_commit_count := l_commit_count + 1;
202 
203                 ELSE
204                	    IF PG_DEBUG = 'Y' THEN
205                         PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Tieback project asset with fa_asset_id and fa period');
206                     END IF;
207 
208                     --Just update the FA Period Name and FA Asset ID
209                     UPDATE  pa_project_assets_all
210                     SET     fa_period_name = v_fa_period_name,
211                             fa_asset_id = v_asset_id,
212                             last_update_date = SYSDATE,
213                             last_updated_by = v_user,
214                             last_update_login = v_login,
215                             request_id = v_request_id,
216                             program_application_id = v_program_application_id,
217                             program_id = v_program_id
218                     WHERE   project_asset_id = project_assets_rec.project_asset_id;
219 
220                     v_asset_count := v_asset_count + 1;
221                     l_commit_count := l_commit_count + 1;
222 
223                 END IF; --v_asset_number differs from current asset number (or current asset number IS NULL)
224 
225             END IF; --v_fa_period_name IS NOT NULL
226 
227         END IF; --v_asset_number_count = 1
228 
229         If l_commit_count > 1000 Then
230            COMMIT;
231            l_commit_count := 0;
232         End If;
233 
234     END LOOP; --Project Assets
235 
236     IF PG_DEBUG = 'Y' THEN
237        PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'l_commit_count = '||l_commit_count);
238     END IF;
239 
240     Commit;
241     l_commit_count := 0;
242 
243     IF PG_DEBUG = 'Y' THEN
244        PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Opening asset_lines_cur');
245     END IF;
246 
247     --Tieback all Project Asset Lines that have not yet been tied back
248     FOR asset_lines_rec IN asset_lines_cur LOOP
249 
250         IF PG_DEBUG = 'Y' THEN
251             PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Processing asset line id: '||asset_lines_rec.project_asset_line_id);
252             PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Opening asset_line_period_cur');
253         END IF;
254 
255         --Loop through FA periods posted, checking if the entire line was posted into a single period
256         FOR asset_line_period_rec IN asset_line_period_cur(asset_lines_rec.project_asset_line_id) LOOP
257 
258             --Check if entire line posted into single period.  Will also avoid "header" lines where payables_cost = 0
259             IF  asset_lines_rec.current_asset_cost = asset_line_period_rec.payables_cost THEN
260 
261                 IF PG_DEBUG = 'Y' THEN
262                     PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'Tieback project asset line with fa period: '||asset_line_period_rec.period_name);
263                 END IF;
264 
265                 --Update asset line with FA Period Name
266                 UPDATE  pa_project_asset_lines_all
267                 SET     fa_period_name = asset_line_period_rec.period_name,
268                         last_update_date = SYSDATE,
269                         last_updated_by = v_user,
270                         last_update_login = v_login,
271                         request_id = v_request_id,
272                         program_application_id = v_program_application_id,
273                         program_id = v_program_id
274                 WHERE   project_asset_line_id = asset_lines_rec.project_asset_line_id;
275 
276                 v_asset_line_count := v_asset_line_count + 1;
277                 l_commit_count := l_commit_count + 1;
278 
279             END IF; --Entire asset line has been posted into a single period
280 
281         END LOOP; --Asset line periods
282 
283         If l_commit_count > 1000 Then
284            COMMIT;
285            l_commit_count := 0;
286         End If;
287 
288     END LOOP; --Asset Lines
289 
290     IF PG_DEBUG = 'Y' THEN
291        PA_DEBUG.WRITE_FILE('LOG',TO_CHAR(SYSDATE,'HH:MI:SS')||': '||'l_commit_count = '||l_commit_count);
292     END IF;
293     Commit;
294 
295     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'Tieback completed successfully.');
296     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,fnd_global.local_chr(10));
297 
298 
299     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,v_asset_count||' project assets were tied back.');
300     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,v_asset_line_count||' project asset lines were tied back.');
301     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,fnd_global.local_chr(10));
302 
303 
304  EXCEPTION
305 
306     WHEN OTHERS THEN
307         Rollback;
308         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'Unexpected error: '||SQLCODE||' '||SQLERRM);
309         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,fnd_global.local_chr(10));
310 
311         FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error: '||SQLCODE||' '||SQLERRM);
312         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,fnd_global.local_chr(10));
313 
314         retcode := SQLCODE;
315         errbuf := SQLERRM;
316         RAISE;
317 
318  END ASSETS_TIEBACK;
319 
320 END PA_FA_TIEBACK_PVT;