DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_ASSET_REVERSAL_PVT

Source


1 PACKAGE BODY PA_ASSET_REVERSAL_PVT AS
2 /* $Header: PACAREVB.pls 120.2 2011/08/26 12:52:58 lamalviy ship $ */
3 
4 ---  The purpose of these procedures is to perform a check when an asset is
5 ---  about to be reversed which will identify all other Project Assets that
6 ---  have asset lines that are "shared" with the current asset.  Asset Lines
7 ---  that have been manually Split or automatically Allocated across multiple
8 ---  project assets are "shared" asset lines.  By identifying all project assets
9 ---  that share lines with the current asset, the user can choose to reverse all
10 ---  of the assets at once, thereby allowing full reversal of all CDLs/Asset Line
11 ---  Details, which enables complete re-Generation of the lines.  This is highly
12 ---  desirable in cases where the user wishes to reverse a project capitalization
13 ---  in order to re-allocate the costs across the assets using a different Asset
14 ---  Cost Allocation method, or a different set of assets, or different Allocation
15 ---  basis values.
16 
17 
18 PROCEDURE CHECK_PROJECT_ASSET
19 	(p_project_asset_id     IN	    NUMBER,
20     x_project_assets           OUT NOCOPY PA_ASSET_REVERSAL_PVT.project_assets_tbl_type,
21     x_related_assets_exist     OUT NOCOPY BOOLEAN,
22     x_return_status            OUT NOCOPY VARCHAR2,
23     x_msg_data                 OUT NOCOPY VARCHAR2) IS
24 
25 
26     i   NUMBER;
27 
28 BEGIN
29     x_return_status := 'S';
30     x_related_assets_exist := FALSE;
31 
32     G_project_assets_tbl.delete;
33 
34     i := G_project_assets_tbl.COUNT + 1;
35     G_project_assets_tbl(i).PROJECT_ASSET_ID := p_project_asset_id;
36 
37     check_asset_lines(p_project_asset_id);
38 
39     x_project_assets := G_project_assets_tbl;
40 
41     --Test to see if any other Project Asset IDs share Asset Lines with the same Detail ID
42     i := G_project_assets_tbl.FIRST;
43 
44     WHILE i IS NOT NULL LOOP
45         --Print table results if Debug is ON
46         IF PG_DEBUG = 'Y' THEN
47             PA_DEBUG.WRITE_FILE('LOG','Project Asset ID '||i||': '||G_project_assets_tbl(i).PROJECT_ASSET_ID);
48         END IF;
49 
50         IF G_project_assets_tbl(i).PROJECT_ASSET_ID <> p_project_asset_id THEN
51             x_related_assets_exist := TRUE;
52         END IF;
53 
54         i := G_project_assets_tbl.NEXT(i);
55     END LOOP;
56 
57 
58 EXCEPTION
59 
60     WHEN OTHERS THEN
61         x_return_status := 'U';
62         x_msg_data := 'Unexpected error for project asset id '||p_project_asset_id||': '||SQLCODE||' '||SQLERRM;
63         RAISE;
64 
65 END CHECK_PROJECT_ASSET;
66 
67 
68 PROCEDURE CHECK_ASSET_LINES
69 	(p_project_asset_id     IN	    NUMBER) IS
70 
71     --This cursor logic borrowed from PA_FAXFACE.reverse_asset_lines
72 
73 	-- Cursor for getting the project_asset_line_detail_id
74 	-- for all the project asset line which need to be reversed
75 
76 
77 	CURSOR seldetailids_cur IS
78         SELECT  pal.project_asset_line_detail_id
79         FROM    pa_project_asset_lines pal
80         WHERE   pal.project_asset_id = p_project_asset_id
81 	    AND     pal.transfer_status_code||'' = 'T'
82         AND     pal.rev_proj_asset_line_id is NULL
83 	    AND    NOT EXISTS
84 	           ( SELECT    'This Line was adjusted before'
85 	             FROM	   pa_project_asset_lines ppal
86 	             WHERE	   ppal.rev_proj_asset_line_id = pal.project_asset_line_id
87    	            )
88     	GROUP by project_asset_line_detail_id;
89 
90     seldetailids_rec    seldetailids_cur%ROWTYPE;
91 
92 
93 
94     --This cursor borrowed from PA_FAXFACE.check_asset_to_be_reversed
95     CURSOR check_asset_line_cur(x_proj_asset_line_detail_id  NUMBER) IS
96 	SELECT project_asset_id
97     FROM   pa_project_asset_lines pal
98     WHERE  pal.project_asset_line_detail_id = x_proj_asset_line_detail_id
99 	AND NOT EXISTS
100 	    ( SELECT   'This Line was adjusted before'
101 	      FROM	   pa_project_asset_lines ppal
102 	      WHERE	   ppal.rev_proj_asset_line_id = pal.project_asset_line_id
103 	     )
104 	AND    pal.project_asset_id NOT IN
105 	    ( SELECT   project_asset_id
106 	      FROM     pa_project_assets pas
107 	      WHERE    pas.reverse_flag = 'Y'
108           AND      pas.project_id = pal.project_id
109 	     )
110 	UNION
111 	SELECT project_asset_id
112 	FROM   pa_project_asset_lines pal
113     WHERE  pal.project_asset_line_detail_id = x_proj_asset_line_detail_id
114 	AND    pal.transfer_status_code <> 'T'
115 	AND    pal.rev_proj_asset_line_id IS NULL
116 	AND    pal.project_asset_id IN
117 	    ( SELECT   project_asset_id
118 	      FROM	   pa_project_assets pas
119 	      WHERE    pas.reverse_flag = 'Y'
120           AND      pas.project_id = pal.project_id
121 	     );
122 
123     check_asset_line_rec    check_asset_line_cur%ROWTYPE;
124 
125     i   NUMBER;
126 
127     p_force_exit                 varchar2(1) := 'N';
128 
129 BEGIN
130 
131     <<outer>>             /*5046289*/
132     FOR seldetailids_rec IN seldetailids_cur LOOP
133 
134         FOR check_asset_line_rec IN check_asset_line_cur(seldetailids_rec.project_asset_line_detail_id) LOOP
135 
136 /*Bug#12853543 : Added IF check_asset_line_rec.project_asset_id <> 0  condition  */
137 
138             IF check_asset_line_rec.project_asset_id <> 0 and check_asset_line_rec.project_asset_id <> p_project_asset_id THEN
139 
140                 IF NOT asset_in_tbl(check_asset_line_rec.project_asset_id) THEN
141                     i := G_project_assets_tbl.COUNT + 1;
142                     G_project_assets_tbl(i).PROJECT_ASSET_ID := check_asset_line_rec.project_asset_id;
143 
144 		    /*5046289- start*/
145 		    p_force_exit := 'Y';
146                     EXIT outer;
147                   /*check_asset_lines(check_asset_line_rec.project_asset_id);*/
148 		  /*5046289- end*/
149                 END IF;
150 
151             END IF;
152 
153         END LOOP; --Asset Lines
154 
155     END LOOP; --Detail IDs
156 
157     /*5046289- start*/
158     IF p_force_exit = 'Y' THEN
159        p_force_exit := 'N';
160 
161     check_asset_lines(G_project_assets_tbl(i).PROJECT_ASSET_ID);
162     END IF;
163     /*5046289- end*/
164 
165 
166 EXCEPTION
167 
168     WHEN OTHERS THEN
169         RAISE;
170 
171 END CHECK_ASSET_LINES;
172 
173 
174 
175 FUNCTION ASSET_IN_TBL
176     (p_project_asset_id     IN	    NUMBER) RETURN BOOLEAN IS
177 
178 i   NUMBER;
179 
180 BEGIN
181 
182     i := G_project_assets_tbl.FIRST;
183 
184     WHILE i IS NOT NULL LOOP
185 
186         IF p_project_asset_id = G_project_assets_tbl(i).PROJECT_ASSET_ID THEN
187             RETURN(TRUE);
188         END IF;
189 
190         i := G_project_assets_tbl.NEXT(i);
191     END LOOP;
192 
193     RETURN(FALSE);
194 
195 EXCEPTION
196     WHEN OTHERS THEN
197         RAISE;
198 END;
199 
200 
201 PROCEDURE Upd_RelAssets_RevFlag
202 	(x_project_assets       IN            PA_ASSET_REVERSAL_PVT.project_assets_tbl_type,
203          x_update_count       OUT NOCOPY NUMBER,
204     x_return_status            OUT NOCOPY VARCHAR2,
205     x_msg_data                 OUT NOCOPY VARCHAR2) IS
206 
207 
208 i   NUMBER;
209 v_user_id                   NUMBER := FND_GLOBAL.user_id;
210 v_login_id                  NUMBER := FND_GLOBAL.login_id;
211 v_project_asset_id          PA_PROJECT_ASSETS_ALL.project_asset_id%TYPE;
212 
213 l_update_count              NUMBER := 0;
214 
215 BEGIN
216 
217     x_return_status := 'S';
218 
219     i := x_project_assets.FIRST;
220 
221     WHILE i IS NOT NULL LOOP
222 
223         v_project_asset_id := x_project_assets(i).PROJECT_ASSET_ID;
224 
225         UPDATE  pa_project_assets
226         SET     reverse_flag = 'Y',
227         	    last_update_date = SYSDATE,
228 	            last_updated_by = v_user_id,
229 	            last_update_login = v_login_id
230         WHERE   project_asset_id = x_project_assets(i).PROJECT_ASSET_ID;
231 
232         l_update_count := l_update_count + SQL%ROWCOUNT;
233 
234         i := x_project_assets.NEXT(i);
235 
236     END LOOP;
237 
238     x_update_count := l_update_count;
239 
240 EXCEPTION
241 
242     WHEN OTHERS THEN
243         x_return_status := 'U';
244         x_msg_data := 'Unexpected error for project asset id '||v_project_asset_id||': '||SQLCODE||' '||SQLERRM;
245         RAISE;
246 
247 END Upd_RelAssets_RevFlag;
248 
249 
250 
251 END PA_ASSET_REVERSAL_PVT;