DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_BUDGET_PUB

Source


1 package body PA_BUDGET_PUB as
2 --$Header: PAPMBUPB.pls 120.37.12020000.7 2013/05/24 10:10:15 djambhek ship $
3 
4 --package global to be used during updates
5 G_USER_ID         CONSTANT NUMBER := FND_GLOBAL.user_id;
6 G_LOGIN_ID        CONSTANT NUMBER := FND_GLOBAL.login_id;
7 l_pm_product_code VARCHAR2(2) :='Z'; /*for bug 2413400 a new variable defined.*/
8 
9 -- Bug Fix: 4569365. Removed MRC code.
10 -- g_mrc_exception   EXCEPTION; /* FPB2 */
11 
12 g_module_name     VARCHAR2(100) := 'pa.plsql.PA_BUDGET_PUB';
13 
14 
15 /*new cursor for bug no 2413400*/
16 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
17   Is
18   Select 'X'
19   from pa_lookups
20   where lookup_type='PM_PRODUCT_CODE'
21    and lookup_code = p_pm_product_code;
22 
23 -- Added by Xin Liu 24-APR-03
24 
25 FUNCTION get_project_id return pa_projects_all.project_id%type
26 is
27 BEGIN
28   return PA_BUDGET_PUB.G_PROJECT_ID;
29 END;
30 
31 PROCEDURE set_project_id (p_project_id IN PA_PROJECTS_ALL.project_id%type) is
32 BEGIN
33   PA_BUDGET_PUB.G_Project_Id := p_project_id;
34 END;
35 
36 
37 
38 
39 ----------------------------------------------------------------------------------------
40 --Name:               create_draft_budget
41 --Type:               Procedure
42 --Description:        This procedure can be used to create a draft budget with budget lines
43 --
44 --
45 --Called subprograms:   PA_BUDGET_UTILS.create_draft
46 --          pa_budget_pvt.insert_budget_line
47 --          pa_budget_lines_v_pkg.check_overlapping_dates
48 --          PA_BUDGET_UTILS.summerize_project_totals
49 --                      PA_BUDGET_FUND_PKG.get_budget_ctrl_options
50 --
51 --
52 --
53 --History:
54 --    19-SEP-1996        L. de Werker    Created
55 --    19-NOV-1996    L. de Werker    Changed for use of PA_BUDGET_PVT.INSERT_BUDGET_LINE
56 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
57 --    29-NOV-1996    L. de Werker    Added parameter p_pm_budget_reference
58 --    05-DEC-1996    L. de Werker    Added validation for change_reason_code
59 --    07-DEC-1996    L. de Werker    Added locking mechanism, because previous draft budget is deleted
60 --    12-DEC-1996    L. de Werker    Added update for pm_budget_reference and pm_product_code
61 --    12-DEC-1996    L. de Werker    Added raising error when working budget is already submitted.
62 --
63 --    02-MAY-01         jwhite      As per the Non-Project Budget Ingtegration
64 --                                      development effort, if budget is enabled for budgetary
65 --                                      controls, the baseline process will be
66 --                                      aborted.
67 --
68 --    11-FEB-02        Srikanth     Added the changes required for AMG due to finplan model
69 
70 
71 PROCEDURE create_draft_budget
72 ( p_api_version_number            IN  NUMBER
73  ,p_commit                        IN  VARCHAR2        := FND_API.G_FALSE
74  ,p_init_msg_list                 IN  VARCHAR2        := FND_API.G_FALSE
75  ,p_msg_count                     OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
76  ,p_msg_data                      OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
77  ,p_return_status                 OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
78  ,p_pm_product_code               IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
79  ,p_pm_budget_reference           IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
80 , p_budget_version_name           IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
81  ,p_pa_project_id                 IN  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
82  ,p_pm_project_reference          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
83  ,p_budget_type_code              IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
84  ,p_change_reason_code            IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
85  ,p_description                   IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
86  ,p_entry_method_code             IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
87  ,p_resource_list_name            IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
88  ,p_resource_list_id              IN  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
89  ,p_attribute_category            IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
90  ,p_attribute1                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
91  ,p_attribute2                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
92  ,p_attribute3                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
93  ,p_attribute4                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
94  ,p_attribute5                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
95  ,p_attribute6                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
96  ,p_attribute7                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
97  ,p_attribute8                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
98  ,p_attribute9                    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
99  ,p_attribute10                   IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
100  ,p_attribute11                   IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
101  ,p_attribute12                   IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
102  ,p_attribute13                   IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
103  ,p_attribute14                   IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
104  ,p_attribute15                   IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
105  ,p_budget_lines_in               IN  budget_line_in_tbl_type
106  ,p_budget_lines_out              OUT NOCOPY budget_line_out_tbl_type
107 
108  /*Parameters due fin plan model */
109  ,p_fin_plan_type_id              IN   pa_fin_plan_types_b.fin_plan_type_id%TYPE
110  ,p_fin_plan_type_name            IN   pa_fin_plan_types_vl.name%TYPE
111  ,p_version_type                  IN   pa_budget_versions.version_type%TYPE
112  ,p_fin_plan_level_code           IN   pa_proj_fp_options.cost_fin_plan_level_code%TYPE
113  ,p_time_phased_code              IN   pa_proj_fp_options.cost_time_phased_code%TYPE
114  ,p_plan_in_multi_curr_flag       IN   pa_proj_fp_options.plan_in_multi_curr_flag%TYPE
115  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE
116  ,p_projfunc_cost_rate_date_typ   IN   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
117  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE
118  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE
119  ,p_projfunc_rev_rate_date_typ    IN   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
120  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE
121  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE
122  ,p_project_cost_rate_date_typ    IN   pa_proj_fp_options.project_cost_rate_date_type%TYPE
123  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE
124  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE
125  ,p_project_rev_rate_date_typ     IN   pa_proj_fp_options.project_rev_rate_date_type%TYPE
126  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE
127  ,p_raw_cost_flag                 IN   VARCHAR2
128  ,p_burdened_cost_flag            IN   VARCHAR2
129  ,p_revenue_flag                  IN   VARCHAR2
130  ,p_cost_qty_flag                 IN   VARCHAR2
131  ,p_revenue_qty_flag              IN   VARCHAR2
132  ,P_all_qty_flag                  IN   VARCHAR2
133  ,p_create_new_curr_working_flag  IN   VARCHAR2
134  ,p_replace_current_working_flag  IN   VARCHAR2
135  ,p_using_resource_lists_flag   IN   VARCHAR2
136 )
137       IS
138 
139       --Cursor to get the budget version id in the old budget model
140       CURSOR l_budget_version_csr
141             ( c_project_id NUMBER
142              ,c_budget_type_code VARCHAR2  )
143       IS
144       SELECT budget_version_id
145             ,budget_status_code
146       FROM   pa_budget_versions
147       WHERE  project_id = c_project_id
148       AND    budget_type_code = c_budget_type_code
149       AND    budget_status_code IN ('W','S')
150       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
151 
152 
153       l_budget_version_rec             l_budget_version_csr%ROWTYPE;
154 
155       --Cursor to lock the budget version .
156       CURSOR l_lock_old_budget_csr( c_budget_version_id NUMBER )
157       IS
158       SELECT 'x'
159       FROM   pa_budget_versions bv
160             ,pa_resource_assignments ra
161             ,pa_budget_lines bl
162       WHERE  bv.budget_version_id = c_budget_version_id
163       AND    bv.budget_version_id = ra.budget_version_id (+)
164       AND    ra.resource_assignment_id = bl.resource_assignment_id (+)
165       AND    bv.ci_id IS NULL         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
166       FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
167 
168 
169 
170       l_api_name           CONSTANT    VARCHAR2(30)        := 'create_draft_budget';
171       l_return_status                  VARCHAR2(1);
172 
173       l_project_id                     pa_projects_all.project_id%TYPE;
174       l_resource_list_id               pa_resource_lists_all_bg.resource_list_id%TYPE;
175       l_budget_version_id              pa_budget_versions.budget_version_id%TYPE;
176       l_err_code                       NUMBER;
177       l_err_stage                      VARCHAR2(120);
178       l_err_stack                      VARCHAR2(630);
179       i                                NUMBER;
180       l_budget_line_in_rec             pa_budget_pub.budget_line_in_rec_type;
181       l_budget_entry_method_rec        pa_budget_entry_methods%rowtype;
182       l_budget_amount_code             pa_budget_types.budget_amount_code%type;
183       l_description                    VARCHAR2(255);
184       l_resource_name                  pa_resource_lists_tl.Name%type;
185       l_dummy                          VARCHAR2(1);
186       l_attribute_category             VARCHAR2(30);
187       l_attribute1                     VARCHAR2(150);
188       l_attribute2                     VARCHAR2(150);
189       l_attribute3                     VARCHAR2(150);
190       l_attribute4                     VARCHAR2(150);
191       l_attribute5                     VARCHAR2(150);
192       l_attribute6                     VARCHAR2(150);
193       l_attribute7                     VARCHAR2(150);
194       l_attribute8                     VARCHAR2(150);
195       l_attribute9                     VARCHAR2(150);
196       l_attribute10                    VARCHAR2(150);
197       l_attribute11                    VARCHAR2(150);
198       l_attribute12                    VARCHAR2(150);
199       l_attribute13                    VARCHAR2(150);
200       l_attribute14                    VARCHAR2(150);
201       l_attribute15                    VARCHAR2(150);
202       l_pm_budget_reference            pa_budget_versions.pm_budget_reference%type; --Bug 3231587
203       l_change_reason_code             pa_budget_versions.change_reason_code%type;
204       l_budget_version_name            VARCHAR2(60);
205       l_budget_rlmid                   NUMBER;
206       l_budget_alias                   VARCHAR2(80); --bug 3711693
207 
208       l_fin_plan_type_id               pa_fin_plan_types_b.fin_plan_type_id%TYPE ;
209       l_fin_plan_type_name             pa_fin_plan_types_vl.name%TYPE ;
210       l_version_type                   pa_budget_versions.version_type%TYPE ;
211       l_fin_plan_level_code            pa_proj_fp_options.cost_fin_plan_level_code%TYPE ;
212       l_time_phased_code               pa_proj_fp_options.cost_time_phased_code%TYPE ;
213       l_plan_in_multi_curr_flag        pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
214       l_projfunc_cost_rate_type        pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
215       l_projfunc_cost_rate_date_typ    pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
216       l_projfunc_cost_rate_date        pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
217       l_projfunc_rev_rate_type         pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
218       l_projfunc_rev_rate_date_typ     pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
219       l_projfunc_rev_rate_date         pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
220       l_project_cost_rate_type         pa_proj_fp_options.project_cost_rate_type%TYPE ;
221       l_project_cost_rate_date_typ     pa_proj_fp_options.project_cost_rate_date_type%TYPE  ;
222       l_project_cost_rate_date         pa_proj_fp_options.project_cost_rate_date%TYPE ;
223       l_project_rev_rate_type          pa_proj_fp_options.project_rev_rate_type%TYPE  ;
224       l_project_rev_rate_date_typ      pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
225       l_project_rev_rate_date          pa_proj_fp_options.project_rev_rate_date%TYPE ;
226       l_raw_cost_flag                  VARCHAR2(1) ;
227       l_burdened_cost_flag             VARCHAR2(1);
228       l_revenue_flag                   VARCHAR2(1);
229       l_cost_qty_flag                  VARCHAR2(1);
230       l_revenue_qty_flag               VARCHAR2(1);
231       l_all_qty_flag                   VARCHAR2(1);
232       l_create_new_working_flag        VARCHAR2(1);
233       l_replace_current_working_flag   VARCHAR2(1);
234       l_allow_cost_budget_entry_flag   VARCHAR2(1);
235       l_allow_rev_budget_entry_flag    VARCHAR2(1);
236       p_multiple_task_msg              VARCHAR2(1) := 'T';
237       l_resource_list_name             pa_resource_lists_tl.Name%TYPE;
238       l_msg_count                      NUMBER := 0;
239       l_data                           VARCHAR2(2000);
240       l_msg_data                       VARCHAR2(2000);
241       l_msg_index_out                  NUMBER;
242       l_budget_lines_in                budget_line_in_tbl_type;
243       l_allow_qty_flag                 VARCHAR2(1);
244       l_uncategorized_res_list_id      pa_resource_list_members.resource_list_id%TYPE;
245       l_uncategorized_rlmid            pa_resource_list_members.resource_list_member_id%TYPE;
246       l_uncategorized_resid            pa_resource_list_members.resource_id%TYPE;
247       l_time_phased_type_code          pa_budget_entry_methods.time_phased_type_code%TYPE;
248       l_categorization_code            pa_budget_entry_methods.categorization_code%TYPE;
249       l_entry_level_code               pa_budget_entry_methods.entry_level_code%TYPE;
250       l_amg_segment1                   pa_projects_all.segment1%TYPE;
251       l_finplan_lines_tab              pa_fin_plan_pvt.budget_lines_tab;
252       l_unit_of_measure                pa_resources.unit_of_measure%TYPE;
253       l_track_as_labor_flag            pa_resource_list_members.track_as_labor_flag%TYPE;
254       l_unc_track_as_labor_flag        pa_resource_list_members.track_as_labor_flag%TYPE;
255       l_unc_unit_of_measure            pa_resources.unit_of_measure%TYPE;
256       l_debug_mode                     VARCHAR2(1);
257       l_module_name                    VARCHAR2(80);
258       l_debug_level3          CONSTANT NUMBER := 3;
259       l_debug_level5          CONSTANT NUMBER := 5;
260       j                                NUMBER;
261       l_proj_fp_options_id             pa_proj_fp_options.proj_fp_options_id%TYPE;
262       l_CW_version_id                  pa_budget_versions.budget_version_id%TYPE;
263       l_CW_record_version_number       pa_budget_versions.record_Version_number%TYPE;
264       l_user_id                        NUMBER := 0;
265       l_resp_id                        NUMBER := 0;
266       l_using_resource_lists_flag          VARCHAR2(1);
267       l_refresh_required_flag          VARCHAR2(1) := NULL;
268       l_request_id                     NUMBER(15)  := NULL;
269       l_process_code                   VARCHAR2(30) := NULL;
270 --      l_fp_type_id                     pa_budget_versions.fin_plan_type_id%TYPE; --3569883
271 --      l_old_model                      VARCHAR2(1):=null; --3569883
272 
273       -- added for bug Bug 3986129: FP.M Web ADI Dev changes
274       l_mfc_cost_type_id_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
275       l_etc_method_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
276       l_spread_curve_id_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
277 
278       l_locked_by_person_id       pa_budget_versions.locked_by_person_id%TYPE;
279 
280 	    l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
281 
282 BEGIN
283 
284       --Standard begin of API savepoint
285       SAVEPOINT create_draft_budget_pub;
286       p_msg_count := 0;
287       p_return_status := FND_API.G_RET_STS_SUCCESS;
288       l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
289       l_module_name :=  'create_draft_budget' || g_module_name;
290 
291       -- Changes for bug 3182963
292       IF l_debug_mode = 'Y' THEN
293             pa_debug.set_curr_function( p_function   => 'create_draft_budget',
294                                       p_debug_mode => l_debug_mode );
295       END IF;
296 
297 
298 
299       --  Standard call to check for call compatibility.
300       IF NOT FND_API.Compatible_API_Call ( PA_BUDGET_PUB.g_api_version_number ,
301                                          p_api_version_number   ,
302                                          l_api_name             ,
303                                          G_PKG_NAME             )
304       THEN
305             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
306       END IF;
307 
308       --dbms_output.put_line('copying input parameters to local variables');
309 
310       --Copy the input parametes into the local variables.
311 
312       l_resource_list_name            :=   p_resource_list_name           ;
313 
314       -- G_MISS_NUM can not fit in l_resource_list_id . Hence make it null
315       IF p_resource_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
316              -- dbms_output.put_line('Copying the miss num to l_resource_list_id');
317             l_resource_list_id        :=   NULL;
318       ELSE
319             l_resource_list_id        :=   p_resource_list_id;
320       END IF;
321 
322 --Check if input parameters is G_PA_MISS_XXX. If true set to NULL
323 --Changes made by Xin Liu for post_fpk. 24-APR-03
324 
325     IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
326        l_fin_plan_type_id := NULL;
327     ELSE
328       l_fin_plan_type_id              :=   p_fin_plan_type_id             ;
329     END IF;
330 
331     IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
332        l_fin_plan_type_name := NULL;
333     ELSE
334       l_fin_plan_type_name            :=   p_fin_plan_type_name           ;
335     END IF;
336 
337     IF p_version_type =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
338        l_version_type := NULL;
339     ELSE
340       l_version_type                  :=   p_version_type                 ;
341     END IF;
342 
343     IF p_fin_plan_level_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
344        l_fin_plan_level_code := NULL;
345     ELSE
346       l_fin_plan_level_code           :=   p_fin_plan_level_code          ;
347     END IF;
348 
349     IF p_time_phased_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
350        l_time_phased_code := NULL;
351     ELSE
352       l_time_phased_code              :=   p_time_phased_code             ;
353     END IF;
354 
355     IF p_plan_in_multi_curr_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
356        l_plan_in_multi_curr_flag := NULL; --Bug 4586948.
357     ELSE
358       l_plan_in_multi_curr_flag       :=   p_plan_in_multi_curr_flag      ;
359     END IF;
360 
361     IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
362       l_projfunc_cost_rate_type := NULL;
363     ELSE
364       l_projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
365     END IF;
366 
367      IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
368       l_projfunc_cost_rate_date_typ  := NULL;
369     ELSE
370       l_projfunc_cost_rate_date_typ   :=   p_projfunc_cost_rate_date_typ  ;
371     END IF;
372 
373     IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
374       l_projfunc_cost_rate_date := NULL;
375     ELSE
376       l_projfunc_cost_rate_date       :=   p_projfunc_cost_rate_date      ;
377     END IF;
378 
379     IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
380       l_projfunc_rev_rate_type := NULL;
381     ELSE
382       l_projfunc_rev_rate_type        :=   p_projfunc_rev_rate_type       ;
383     END IF;
384 
385     IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
386       l_projfunc_rev_rate_date_typ  := NULL;
387     ELSE
388       l_projfunc_rev_rate_date_typ    :=   p_projfunc_rev_rate_date_typ   ;
389     END IF;
390 
391     IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
392       l_projfunc_rev_rate_date := NULL;
393     ELSE
394       l_projfunc_rev_rate_date        :=   p_projfunc_rev_rate_date       ;
395     END IF;
396 
397     IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
398       l_project_cost_rate_type := NULL;
399     ELSE
400       l_project_cost_rate_type        :=   p_project_cost_rate_type       ;
401     END IF;
402 
403     IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
404       l_project_cost_rate_date_typ  := NULL;
405     ELSE
406       l_project_cost_rate_date_typ    :=   p_project_cost_rate_date_typ   ;
407     END IF;
408 
409     IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
410       l_project_cost_rate_date := NULL;
411     ELSE
412       l_project_cost_rate_date        :=   p_project_cost_rate_date       ;
413     END IF;
414 
415     IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
416       l_project_rev_rate_type := NULL;
417     ELSE
418       l_project_rev_rate_type         :=   p_project_rev_rate_type        ;
419     END IF;
420 
421     IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
422       l_project_rev_rate_date_typ  := NULL;
423     ELSE
424       l_project_rev_rate_date_typ     :=   p_project_rev_rate_date_typ    ;
425     END IF;
426 
427     IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
428       l_project_rev_rate_date := NULL;
429     ELSE
430       l_project_rev_rate_date         :=   p_project_rev_rate_date        ;
431     END IF;
432 
433     IF p_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
434       l_raw_cost_flag  := 'N';
435     ELSE
436       l_raw_cost_flag                 :=   p_raw_cost_flag                ;
437     END IF;
438 
439     IF p_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
440       l_burdened_cost_flag  := 'N';
441     ELSE
442       l_burdened_cost_flag            :=   p_burdened_cost_flag           ;
443     END IF;
444 
445     IF p_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
446       l_revenue_flag  := 'N';
447     ELSE
448       l_revenue_flag                  :=   p_revenue_flag                 ;
449     END IF;
450 
451     IF p_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
452       l_cost_qty_flag  := 'N';
453     ELSE
454       l_cost_qty_flag                 :=   p_cost_qty_flag                ;
455     END IF;
456 
457     IF p_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
458       l_revenue_qty_flag  := 'N';
459     ELSE
460       l_revenue_qty_flag              :=   p_revenue_qty_flag             ;
461     END IF;
462 
463     IF p_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
464       l_all_qty_flag  := 'N';
465     ELSE
466       l_all_qty_flag                  :=   p_all_qty_flag                 ;
467     END IF;
468 
469     IF p_create_new_curr_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
470       l_create_new_working_flag  := 'N';
471     ELSE
472       l_create_new_working_flag       :=   p_create_new_curr_working_flag ;
473     END IF;
474 
475     IF p_replace_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
476       l_replace_current_working_flag  := 'N';
477     ELSE
478       l_replace_current_working_flag  :=   p_replace_current_working_flag ;
479     END IF;
480 
481     IF p_using_resource_lists_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
482       l_using_resource_lists_flag  := 'Y';
483     ELSE
484       l_using_resource_lists_flag  :=   p_using_resource_lists_flag ;
485     END IF;
486 
487 
488       -- G_MISS_NUM can not fit in l_project_id . Hence make it null
489       IF p_pa_project_id= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
490       --dbms_output.put_line('Copying the miss num to l_project_id');
491             l_project_id                :=   NULL;
492       ELSE
493             l_project_id                :=   p_pa_project_id;
494       END IF;
495       --Get the user id and responsibility Ids
496       l_user_id := FND_GLOBAL.User_id;
497       l_resp_id := FND_GLOBAL.Resp_id;
498 
499       -- This api will initialize the data that will be used by the map_new_amg_msg.
500       -- Commented out the procedure call as required by Venkatesh. 25-APR-03
501    /*
502         PA_INTERFACE_UTILS_PUB.Set_Global_Info
503         ( p_api_version_number => 1.0
504          ,p_responsibility_id  => l_resp_id
505          ,p_user_id            => l_user_id
506          ,p_calling_mode       => 'AMG'     --bug 2783845
507          ,p_msg_count          => p_msg_count
508          ,p_msg_data           => p_msg_data
509          ,p_return_status      => p_return_status);
510 
511       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
512             RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
513       END IF;
514    */
515 
516       IF l_debug_mode = 'Y' THEN
517             pa_debug.g_err_stage := 'About to call validate header info';
518             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
519       END IF;
520 
521       --Call the api that validates the input information
522       pa_budget_pvt.Validate_Header_Info
523       ( p_api_version_number           => p_api_version_number
524       /* Bug 3133930- parameter included to pass version name */
525       ,p_budget_version_name           => p_budget_version_name
526       ,p_init_msg_list                 => p_init_msg_list
527       ,px_pa_project_id                => l_project_id
528       ,p_pm_project_reference          => p_pm_project_reference
529       ,p_pm_product_code               => p_pm_product_code
530       ,p_budget_type_code              => p_budget_type_code
531       ,p_entry_method_code             => p_entry_method_code
532       ,px_resource_list_name           => l_resource_list_name
533       ,px_resource_list_id             => l_resource_list_id
534       ,px_fin_plan_type_id             => l_fin_plan_type_id
535       ,px_fin_plan_type_name           => l_fin_plan_type_name
536       ,px_version_type                 => l_version_type
537       ,px_fin_plan_level_code          => l_fin_plan_level_code
538       ,px_time_phased_code             => l_time_phased_code
539       ,px_plan_in_multi_curr_flag      => l_plan_in_multi_curr_flag
540       ,px_projfunc_cost_rate_type      => l_projfunc_cost_rate_type
541       ,px_projfunc_cost_rate_date_typ  => l_projfunc_cost_rate_date_typ
542       ,px_projfunc_cost_rate_date      => l_projfunc_cost_rate_date
543       ,px_projfunc_rev_rate_type       => l_projfunc_rev_rate_type
544       ,px_projfunc_rev_rate_date_typ   => l_projfunc_rev_rate_date_typ
545       ,px_projfunc_rev_rate_date       => l_projfunc_rev_rate_date
546       ,px_project_cost_rate_type       => l_project_cost_rate_type
547       ,px_project_cost_rate_date_typ   => l_project_cost_rate_date_typ
548       ,px_project_cost_rate_date       => l_project_cost_rate_date
549       ,px_project_rev_rate_type        => l_project_rev_rate_type
550       ,px_project_rev_rate_date_typ    => l_project_rev_rate_date_typ
551       ,px_project_rev_rate_date        => l_project_rev_rate_date
552       ,px_raw_cost_flag                => l_raw_cost_flag
553       ,px_burdened_cost_flag           => l_burdened_cost_flag
554       ,px_revenue_flag                 => l_revenue_flag
555       ,px_cost_qty_flag                => l_cost_qty_flag
556       ,px_revenue_qty_flag             => l_revenue_qty_flag
557       ,px_all_qty_flag                 => l_all_qty_flag
558       ,p_create_new_curr_working_flag  => l_create_new_working_flag
559       ,p_replace_current_working_flag  => l_replace_current_working_flag
560       ,p_change_reason_code            => p_change_reason_code
561       ,p_calling_module                => 'PA_PM_CREATE_DRAFT_BUDGET'
562       ,p_using_resource_lists_flag     => p_using_resource_lists_flag
563       ,x_budget_amount_code            => l_budget_amount_code   -- Added for bug 4224464
564       ,x_msg_count                     => p_msg_count
565       ,x_msg_data                      => p_msg_data
566       ,x_return_status                 => p_return_status);
567 
568       IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
569 
570          RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
571 
572       END IF;
573 
574       IF l_debug_mode = 'Y' THEN
575             pa_debug.g_err_stage := 'Validate Header got executed successfully';
576             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
577       END IF;
578 
579       -- Copy the input pl/sql table to a local pl/sql table. This is necessary since the
580       -- input table is a IN variable and hence read only.
581       l_budget_lines_in := p_budget_lines_in;
582 
583 
584       -- Budget type code and budget entry method,project id should be valid at this point
585       -- Hence exception handling is not done
586 
587       IF (p_budget_type_code IS NOT NULL AND
588            p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
589 
590             SELECT  budget_amount_code
591             INTO    l_budget_amount_code
592             FROM    pa_budget_types
593             WHERE   budget_type_code = p_budget_type_code;
594 
595             SELECT time_phased_type_code
596                   ,categorization_code
597                   ,entry_level_code
598             INTO   l_time_phased_type_code
599                   ,l_categorization_code
600                   ,l_entry_level_code
601             FROM   pa_budget_entry_methods
602             WHERE  budget_entry_method_code = p_entry_method_code
603             AND    trunc(sysdate) BETWEEN trunc(start_date_active) and trunc(nvl(end_date_active,sysdate));
604 
605       END IF;
606 
607       SELECT segment1
608       INTO   l_amg_segment1
609       FROM   pa_projects_all
610       WHERE  project_id=l_project_id;
611 
612       IF l_debug_mode = 'Y' THEN
613             pa_debug.g_err_stage := 'Got the budget type details and segment1 of the project';
614             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
615       END IF;
616 
617 
618 /* After bug fix for bug 4052562, note that the below API returns UOM from rlm table as DOLLARS instead of
619  * pa_resources table. Due to this, the below api may not be suitable for usage
620  * for old budgets model which retrieves UOM from pa_resources (HOURS). As such,
621  * since UOM is not used in create_draft_budget api FOR OLD BUDGETS MODEL, reusing
622  * the below api for both old and new budget model resource lists. If for some
623  * reason in future, UOM of uncatrlm is to be used even for old budgets model,
624  * we should consider using pa_get_resource.get_uncateg_Resource_info. Not
625  * changing it now, since, pa_get_resource.get_uncateg_resource_info owned by RF
626  * team, as of now, has the same performance issue of full table scans on RLM
627  * and pa_resources tables.  */
628       --Get the uncategorized resource list info.
629       pa_fin_plan_utils.Get_Uncat_Resource_List_Info
630         (x_resource_list_id           => l_uncategorized_res_list_id,
631          x_resource_list_member_id    => l_uncategorized_rlmid,
632          x_track_as_labor_flag        => l_unc_track_as_labor_flag,
633          x_unit_of_measure            => l_unc_unit_of_measure,
634          x_return_status              => p_return_status,
635          x_msg_count                  => p_msg_count,
636          x_msg_data                   => p_msg_data     );
637 
638       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
639             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
640       --  RAISE  FND_API.G_EXC_ERROR;
641       END IF; -- IF l_err_code <> 0 THEN
642 
643       IF l_debug_mode = 'Y' THEN
644             pa_debug.g_err_stage := 'Got the uncategorized res list info';
645             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
646       END IF;
647 
648       --Added by Xin Liu for supporting Project Connect 4.0
649       --5/6/2003
650 
651       If l_using_resource_lists_flag = 'N' THEN
652 
653        l_resource_list_id :=l_uncategorized_res_list_id;
654 
655       END IF;
656 
657       --When description is not passed, set value to NULL
658 
659       IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
660       THEN
661             l_description := NULL;
662       ELSE
663             l_description := p_description;
664       END IF;
665 
666       /*   -- dbms_output.put_line('Before setting flex fields to NULL, when not passed'); */
667 
668       --When descriptive flex fields are not passed set them to NULL
669       IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
670       THEN
671             l_attribute_category := NULL;
672       ELSE
673            l_attribute_category := p_attribute_category;
674       END IF;
675       IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
676       THEN
677             l_attribute1 := NULL;
678       ELSE
679             l_attribute1 := p_attribute1;
680       END IF;
681       IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
682       THEN
683             l_attribute2 := NULL;
684       ELSE
685             l_attribute2 := p_attribute2;
686       END IF;
687       IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
688       THEN
689             l_attribute3 := NULL;
690       ELSE
691             l_attribute3 := p_attribute3;
692       END IF;
693       IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
694       THEN
695             l_attribute4 := NULL;
696       ELSE
697             l_attribute4 := p_attribute4;
698       END IF;
699 
700       IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
701       THEN
702             l_attribute5 := NULL;
703       ELSE
704             l_attribute5 := p_attribute5;
705       END IF;
706 
707       IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
708       THEN
709             l_attribute6 := NULL;
710       ELSE
711             l_attribute6 := p_attribute6;
712       END IF;
713 
714       IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
715       THEN
716             l_attribute7 := NULL;
717       ELSE
718             l_attribute7 := p_attribute7;
719       END IF;
720 
721       IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
722       THEN
723             l_attribute8 := NULL;
724       ELSE
725       l_attribute8 := p_attribute8;
726       END IF;
727       IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
728       THEN
729             l_attribute9 := NULL;
730       ELSE
731             l_attribute9 := p_attribute9;
732       END IF;
733       IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
734       THEN
735             l_attribute10 := NULL;
736       ELSE
737             l_attribute10 := p_attribute10;
738       END IF;
739       IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
740       THEN
741             l_attribute11 := NULL;
742       ELSE
743             l_attribute11 := p_attribute11;
744       END IF;
745       IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
746       THEN
747             l_attribute12 := NULL;
748       ELSE
749       l_attribute12 := p_attribute12;
750       END IF;
751       IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
752       THEN
753             l_attribute13 := NULL;
754       ELSE
755       l_attribute13 := p_attribute13;
756       END IF;
757       IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
758       THEN
759             l_attribute14:= NULL;
760       ELSE
761             l_attribute14:= p_attribute14;
762       END IF;
763 
764       IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
765       THEN
766             l_attribute15 := NULL;
767       ELSE
768             l_attribute15 := p_attribute15;
769       END IF;
770 
771 
772       IF p_pm_budget_reference =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
773       THEN
774             l_pm_budget_reference := NULL;
775       ELSE
776             l_pm_budget_reference := p_pm_budget_reference;
777       END IF;
778 
779       IF p_budget_version_name =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
780       THEN
781             l_budget_version_name := NULL;
782       ELSE
783             l_budget_version_name := p_budget_version_name;
784       END IF;
785 
786       IF p_change_reason_code =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
787       THEN
788             l_change_reason_code := NULL;
789       ELSE
790             l_change_reason_code := p_change_reason_code;
791       END IF;
792 
793 
794       IF l_debug_mode = 'Y' THEN
795             pa_debug.g_err_stage := 'Done with the initialisation of flex fields, dexcription, etc';
796             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
797       END IF;
798 
799 
800       IF p_budget_type_code IS NOT NULL AND
801          p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
802 
803             -- Lock the existing working version.
804             OPEN l_budget_version_csr( l_project_id, p_budget_type_code );
805             FETCH l_budget_version_csr INTO l_budget_version_rec;
806             IF l_budget_version_csr%FOUND THEN
807 
808                   OPEN l_lock_old_budget_csr( l_budget_version_rec.budget_Version_id );
809                   CLOSE l_lock_old_budget_csr;                --FYI, does not release locks
810 
811             END IF;
812             CLOSE l_budget_version_csr;
813 
814 /* It is assumed that if the program reaches till this point,then there are no budget lines with errors in the out plsql table*/
815 
816             --Call the api that creates the draft budget
817             PA_BUDGET_UTILS.create_draft
818             (x_project_id                 => l_project_id
819             ,x_budget_type_code           => p_budget_type_code
820             ,x_version_name               => l_budget_version_name
821             ,x_description                => l_description
822             ,x_resource_list_id           => l_resource_list_id
823             ,x_change_reason_code         => l_change_reason_code
824             ,x_budget_entry_method_code   => p_entry_method_code
825             ,x_attribute_category         => l_attribute_category
826             ,x_attribute1                 => l_attribute1
827             ,x_attribute2                 => l_attribute2
828             ,x_attribute3                 => l_attribute3
829             ,x_attribute4                 => l_attribute4
830             ,x_attribute5                 => l_attribute5
831             ,x_attribute6                 => l_attribute6
832             ,x_attribute7                 => l_attribute7
833             ,x_attribute8                 => l_attribute8
834             ,x_attribute9                 => l_attribute9
835             ,x_attribute10                => l_attribute10
836             ,x_attribute11                => l_attribute11
837             ,x_attribute12                => l_attribute12
838             ,x_attribute13                => l_attribute13
839             ,x_attribute14                => l_attribute14
840             ,x_attribute15                => l_attribute15
841             ,x_budget_version_id          => l_budget_version_id
842             ,x_err_code                   => l_err_code
843             ,x_err_stage                  => l_err_stage
844             ,x_err_stack                  => l_err_stack
845             ,x_pm_product_code            => p_pm_product_code
846             ,x_pm_budget_reference        => l_pm_budget_reference );
847 
848            -----------
849             -- temporary solution
850             -- COMMIT in DELETE_DRAFT removes all savepoints!!!
851 
852             SAVEPOINT create_draft_budget_pub;
853             -----------
854 
855             IF l_err_code > 0
856             THEN
857                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
858                   THEN
859 
860                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
861                         THEN
862                               pa_interface_utils_pub.map_new_amg_msg
863                               ( p_old_message_code => 'PA_CREATE_DRAFT_FAILED'
864                                ,p_msg_attribute    => 'CHANGE'
865                                ,p_resize_flag      => 'N'
866                                ,p_msg_context      => 'BUDG'
867                                ,p_attribute1       => l_amg_segment1
868                                ,p_attribute2       => ''
869                                ,p_attribute3       => p_budget_type_code
870                                ,p_attribute4       => ''
871                                ,p_attribute5       => '');
872                         ELSE
873                               pa_interface_utils_pub.map_new_amg_msg
874                               ( p_old_message_code => l_err_stage
875                                ,p_msg_attribute    => 'CHANGE'
876                                ,p_resize_flag      => 'N'
877                                ,p_msg_context      => 'BUDG'
878                                ,p_attribute1       => l_amg_segment1
879                                ,p_attribute2       => ''
880                                ,p_attribute3       => p_budget_type_code
881                                ,p_attribute4       => ''
882                                ,p_attribute5       => '');
883                         END IF;
884 
885                   END IF;
886 
887                   IF l_debug_mode = 'Y' THEN
888                         pa_debug.g_err_stage := 'Error executing create draft';
889                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
890                   END IF;
891 
892                   RAISE FND_API.G_EXC_ERROR;
893 
894             ELSIF l_err_code < 0
895             THEN
896 
897                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
898                   THEN
899 
900                   FND_MSG_PUB.add_exc_msg
901                       (  p_pkg_name       => 'PA_BUDGET_UTILS'
902                       ,  p_procedure_name => 'CREATE_DRAFT'
903                       ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
904 
905                   END IF;
906 
907                   IF l_debug_mode = 'Y' THEN
908                         pa_debug.g_err_stage := 'SQL Error executing create draft';
909                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
910                   END IF;
911 
912 
913                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
914 
915             END IF;
916 
917             IF l_debug_mode = 'Y' THEN
918                   pa_debug.g_err_stage := 'Created the version in the budget model';
919                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
920             END IF;
921 
922             -- Commenting out this select as the create draft now returns the id of hte
923             -- newly created version
924             -- SELECT pa_budget_versions_s.currval  --because x_budget_version_id in procedure
925             -- INTO   l_budget_version_id        --PA_BUDGET_UTILS.create_draft returns nothing: BUG.
926             -- FROM   SYS.DUAL;
927 
928             IF l_debug_mode = 'Y' THEN
929                   pa_debug.g_err_stage := 'Created version is is '|| l_budget_version_id ;
930                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
931 
932                   pa_debug.g_err_stage := 'About to call validate budget lines';
933                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
934             END IF;
935 
936             --Validate the budget lines.
937             IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
938 
939             --Added by Xin Liu. Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
940             FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
941 
942                              IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
943                                     l_budget_lines_in(i).pa_task_id   :=  NULL;
944                               END IF;
945 
946                              IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
947                                     l_budget_lines_in(i).pm_task_reference  :=  NULL;
948                               END IF;
949 
950                              IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
951                                     l_budget_lines_in(i).resource_alias :=  NULL;
952                               END IF;
953 
954                              IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
955                                     l_budget_lines_in(i).resource_list_member_id:=  NULL;
956                               END IF;
957 							     --Bug 16604257 : CBS RBS Phase 2 API changes
958 							  IF l_budget_lines_in(i).cbs_element_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
959                                     l_budget_lines_in(i).cbs_element_id:=  NULL;
960                               END IF;
961 
962 							  IF l_budget_lines_in(i).cost_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
963                                     l_budget_lines_in(i).cost_code:=  NULL;
964                               END IF;
965 							     --Bug 16604257
966 
967                              IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
968                                     l_budget_lines_in(i).budget_start_date:=  NULL;
969                               END IF;
970                              IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
971                                     l_budget_lines_in(i).budget_end_date:=  NULL;
972                               END IF;
973 
974                               IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
975                                         l_budget_lines_in(i).period_name := NULL;
976                               END IF;
977 
978                         IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
979                                     l_budget_lines_in(i).raw_cost   :=  NULL;
980                               END IF;
981 
982                               IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
983                                     l_budget_lines_in(i).burdened_cost  := NULL;
984                               END IF;
985 
986                               IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
987                                     l_budget_lines_in(i).revenue  := NULL;
988                               END IF;
989 
990                               IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
991                                     l_budget_lines_in(i).quantity  := NULL;
992                               END IF;
993 
994 
995                               IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
996                                     l_budget_lines_in(i).change_reason_code  :=NULL;
997                               END IF;
998 
999                               IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1000                                     l_budget_lines_in(i).description     :=  NULL;
1001                               END IF;
1002 
1003                               IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1004                                     l_budget_lines_in(i).attribute_category     :=  NULL;
1005                               END IF;
1006 
1007                               IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1008                                     l_budget_lines_in(i).attribute1     :=  NULL;
1009                               END IF;
1010 
1011                               IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1012                                     l_budget_lines_in(i).attribute2     :=  NULL;
1013                               END IF;
1014 
1015                               IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1016                                     l_budget_lines_in(i).attribute3     :=  NULL;
1017                               END IF;
1018 
1019                               IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1020                                     l_budget_lines_in(i).attribute4     :=  NULL;
1021                               END IF;
1022 
1023                               IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1024                                     l_budget_lines_in(i).attribute5     :=  NULL;
1025                               END IF;
1026 
1027                               IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1028                                     l_budget_lines_in(i).attribute6     :=  NULL;
1029                               END IF;
1030 
1031                               IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1032                                     l_budget_lines_in(i).attribute7     :=  NULL;
1033                               END IF;
1034 
1035                               IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1036                                     l_budget_lines_in(i).attribute8     :=  NULL;
1037                               END IF;
1038 
1039                               IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1040                                     l_budget_lines_in(i).attribute9     :=  NULL;
1041                               END IF;
1042 
1043                               IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1044                                     l_budget_lines_in(i).attribute10     :=  NULL;
1045                               END IF;
1046 
1047                               IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1048                                     l_budget_lines_in(i).attribute11     :=  NULL;
1049                               END IF;
1050 
1051                               IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1052                                     l_budget_lines_in(i).attribute12     :=  NULL;
1053                               END IF;
1054 
1055                               IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1056                                     l_budget_lines_in(i).attribute13     :=  NULL;
1057                               END IF;
1058 
1059                               IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1060                                     l_budget_lines_in(i).attribute14     :=  NULL;
1061                               END IF;
1062 
1063                               IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1064                                     l_budget_lines_in(i).attribute15     :=  NULL;
1065                               END IF;
1066 
1067                         IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1068                             l_budget_lines_in(i).txn_currency_code := NULL;
1069                         END IF;
1070 
1071                         IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1072                         l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
1073                         END IF;
1074 
1075                         IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1076                         l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1077                         END IF;
1078 
1079                         IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1080                         l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE     := NULL;
1081                         END IF;
1082 
1083                         IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1084                         l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1085                         END IF;
1086 
1087                         IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1088                                l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE      := NULL;
1089                         END IF;
1090 
1091                         IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1092                         l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1093                         END IF;
1094 
1095                         IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1096                         l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE      := NULL;
1097                         END IF;
1098 
1099                         IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1100                         l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
1101                         END IF;
1102 
1103                         IF  l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1104                         l_budget_lines_in(i).PROJECT_COST_RATE_TYPE      := NULL;
1105                         END IF;
1106 
1107                         IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1108                         l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
1109                         END IF;
1110 
1111                         IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE      THEN
1112                         l_budget_lines_in(i).PROJECT_COST_RATE_DATE      := NULL;
1113                         END IF;
1114 
1115                         IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1116                         l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE  := NULL;
1117                         END IF;
1118 
1119                         IF  l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1120                         l_budget_lines_in(i).PROJECT_REV_RATE_TYPE       := NULL;
1121                         END IF;
1122 
1123                         IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1124                         l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE  := NULL;
1125                         END IF;
1126 
1127                         IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1128                         l_budget_lines_in(i).PROJECT_REV_RATE_DATE       := NULL;
1129                         END IF;
1130 
1131                         IF l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1132                         l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE   := NULL;
1133                         END IF;
1134 
1135                                 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1136                                    pm_product_code is passed as Null at the line level */
1137 
1138                         IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1139                         l_budget_lines_in(i).pm_product_code IS NULL THEN
1140                                 l_budget_lines_in(i).pm_product_code := p_pm_product_code;
1141                                 END IF;
1142 
1143                         IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1144                         l_budget_lines_in(i).pm_budget_line_reference    := NULL;
1145                         END IF;
1146 
1147 
1148             END LOOP;
1149 /** Bug 3709462
1150                 --3569883 start
1151               select fin_plan_type_id
1152               into l_fp_type_id
1153               from pa_budget_versions
1154              where budget_version_id = l_budget_version_id;
1155 
1156                 select DECODE(l_fp_type_id, null, 'Y','N') into l_old_model from dual;
1157                 --3569883 end
1158 **/            -- Bug 3709462 we are in old model context no additional checks are necessary
1159 --               l_old_model := 'Y';
1160                --Done with Changes by xin liu
1161                   pa_budget_pvt.Validate_Budget_Lines
1162                         ( p_pa_project_id              => l_project_id
1163                         ,p_budget_type_code            => p_budget_type_code
1164                         ,p_fin_plan_type_id            => NULL
1165                         ,p_version_type                => NULL
1166                         ,p_resource_list_id            => l_resource_list_id
1167                         ,p_time_phased_code            => l_time_phased_type_code
1168                         ,p_budget_entry_method_code    => p_entry_method_code
1169                         ,p_entry_level_code            => l_entry_level_code
1170                         ,p_allow_qty_flag              => NULL
1171                         ,p_allow_raw_cost_flag         => NULL
1172                         ,p_allow_burdened_cost_flag    => NULL
1173                         ,p_allow_revenue_flag          => NULL
1174                         ,p_multi_currency_flag         => NULL
1175                         ,p_project_cost_rate_type      => NULL
1176                         ,p_project_cost_rate_date_typ  => NULL
1177                         ,p_project_cost_rate_date      => NULL
1178                         ,p_project_cost_exchange_rate  => NULL
1179                         ,p_projfunc_cost_rate_type     => NULL
1180                         ,p_projfunc_cost_rate_date_typ => NULL
1181                         ,p_projfunc_cost_rate_date     => NULL
1182                         ,p_projfunc_cost_exchange_rate => NULL
1183                         ,p_project_rev_rate_type       => NULL
1184                         ,p_project_rev_rate_date_typ   => NULL
1185                         ,p_project_rev_rate_date       => NULL
1186                         ,p_project_rev_exchange_rate   => NULL
1187                         ,p_projfunc_rev_rate_type      => NULL
1188                         ,p_projfunc_rev_rate_date_typ  => NULL
1189                         ,p_projfunc_rev_rate_date      => NULL
1190                         ,p_projfunc_rev_exchange_rate  => NULL
1191                         ,px_budget_lines_in            => l_budget_lines_in
1192                         ,x_budget_lines_out            => p_budget_lines_out /* Bug 3133930*/
1193 --                        ,x_old_model                   => l_old_model --3569883
1194                         ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
1195                         ,x_etc_method_code_tbl         => l_etc_method_code_tbl
1196                         ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
1197                         ,x_msg_count                   => p_msg_count
1198                         ,x_msg_data                    => p_msg_data
1199                         ,x_return_status               => p_return_status);
1200 
1201                   IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1202 
1203                          RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1204 
1205                   END IF;
1206 
1207                   IF l_debug_mode = 'Y' THEN
1208                         pa_debug.g_err_stage := 'Validate Budget Lines got executed successfully';
1209                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1210                   END IF;
1211 
1212             END IF;--IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
1213 
1214 
1215 
1216 
1217     /*
1218         -- Not necessary now since the same is passed as parameters to create_draft
1219         --add the pm_budget_reference and pm_product_code to the just created budget
1220         UPDATE pa_budget_versions
1221         SET pm_budget_reference = p_pm_budget_reference
1222         ,   pm_product_code      = p_pm_product_code
1223         WHERE budget_version_id = l_budget_version_id;
1224     */
1225 
1226 
1227     -- BUDGET LINES
1228 
1229             i := l_budget_lines_in.first;
1230 
1231             IF l_budget_lines_in.exists(i)
1232             THEN
1233 
1234                   <<budget_line>>
1235                   WHILE i IS NOT NULL LOOP
1236 
1237                         /* initialize return status for budget line to success */
1238 
1239                         /* Bug 3133930 initialization is removed here as it has been done in
1240                         validate_budget_lines */
1241                         /* p_budget_lines_out(i).return_status     := FND_API.G_RET_STS_SUCCESS; */
1242 
1243                         l_budget_line_in_rec := l_budget_lines_in(i);
1244                         IF l_budget_line_in_rec.pm_budget_line_reference =
1245                                        PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1246                               l_budget_line_in_rec.pm_budget_line_reference := NULL;
1247                         END IF;
1248 
1249                         IF l_categorization_code = 'N' THEN
1250                               l_budget_rlmid := l_uncategorized_rlmid;
1251                               l_budget_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
1252                         ELSE
1253                               l_budget_rlmid := l_budget_line_in_rec.resource_list_member_id;
1254                               l_budget_alias := l_budget_line_in_rec.resource_alias;
1255                         END IF;
1256 
1257                         /* For bug # 675869 Fix */
1258                         IF l_budget_line_in_rec.period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1259                               l_budget_line_in_rec.period_name := NULL;
1260                         END IF;
1261                         /* End Of bug # 675869 Fix */
1262 
1263 
1264                         --Call the api that inserts the budget line
1265                         pa_budget_pvt.insert_budget_line
1266                         ( p_return_status           => l_return_status
1267                         ,p_pa_project_id            => l_project_id
1268                         ,p_budget_type_code         => p_budget_type_code
1269                         ,p_pa_task_id               => l_budget_line_in_rec.pa_task_id
1270                         ,p_pm_task_reference        => l_budget_line_in_rec.pm_task_reference
1271                         ,p_resource_alias           => l_budget_alias
1272                         ,p_member_id                => l_budget_rlmid
1273 						,p_cbs_element_id           => l_budget_line_in_rec.cbs_element_id --Bug 16604257 : CBS RBS Phase 2 API changes
1274                         ,p_budget_start_date        => l_budget_line_in_rec.budget_start_date
1275                         ,p_budget_end_date          => l_budget_line_in_rec.budget_end_date
1276                         ,p_period_name              => l_budget_line_in_rec.period_name
1277                         ,p_description              => l_budget_line_in_rec.description
1278                         ,p_raw_cost                 => l_budget_line_in_rec.raw_cost
1279                         ,p_burdened_cost            => l_budget_line_in_rec.burdened_cost
1280                         ,p_revenue                  => l_budget_line_in_rec.revenue
1281                         ,p_quantity                 => l_budget_line_in_rec.quantity
1282                         ,p_pm_product_code          => l_budget_line_in_rec.pm_product_code
1283                         ,p_pm_budget_line_reference => l_budget_line_in_rec.pm_budget_line_reference
1284                         ,p_resource_list_id         => l_resource_list_id
1285                         ,p_attribute_category       => l_budget_line_in_rec.attribute_category
1286                         ,p_attribute1               => l_budget_line_in_rec.attribute1
1287                         ,p_attribute2               => l_budget_line_in_rec.attribute2
1288                         ,p_attribute3               => l_budget_line_in_rec.attribute3
1289                         ,p_attribute4               => l_budget_line_in_rec.attribute4
1290                         ,p_attribute5               => l_budget_line_in_rec.attribute5
1291                         ,p_attribute6               => l_budget_line_in_rec.attribute6
1292                         ,p_attribute7               => l_budget_line_in_rec.attribute7
1293                         ,p_attribute8               => l_budget_line_in_rec.attribute8
1294                         ,p_attribute9               => l_budget_line_in_rec.attribute9
1295                         ,p_attribute10              => l_budget_line_in_rec.attribute10
1296                         ,p_attribute11              => l_budget_line_in_rec.attribute11
1297                         ,p_attribute12              => l_budget_line_in_rec.attribute12
1298                         ,p_attribute13              => l_budget_line_in_rec.attribute13
1299                         ,p_attribute14              => l_budget_line_in_rec.attribute14
1300                         ,p_attribute15              => l_budget_line_in_rec.attribute15
1301                         ,p_time_phased_type_code    => l_time_phased_type_code
1302                         ,p_entry_level_code         => l_entry_level_code
1303                         ,p_budget_amount_code       => l_budget_amount_code
1304                         ,p_budget_entry_method_code => p_entry_method_code
1305                         ,p_categorization_code      => l_categorization_code
1306                         ,p_budget_version_id        => l_budget_version_id  );
1307                         IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
1308                         THEN
1309                               p_budget_lines_out(i).return_status := l_return_status;
1310 
1311                               IF l_debug_mode = 'Y' THEN
1312                                     pa_debug.g_err_stage := 'Unexpected Error inserting line '||i;
1313                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1314                               END IF;
1315 
1316                               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1317 
1318                         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
1319                         THEN
1320                               p_budget_lines_out(i).return_status := l_return_status;
1321                               p_multiple_task_msg   := 'F';
1322                               IF l_debug_mode = 'Y' THEN
1323                                     pa_debug.g_err_stage := 'Error inserting line '||i;
1324                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1325                               END IF;
1326 
1327                               --        RAISE  FND_API.G_EXC_ERROR;
1328 
1329                         END IF;
1330 
1331                         IF l_debug_mode = 'Y' THEN
1332                               pa_debug.g_err_stage := 'Done with the insertion of line '||i;
1333                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1334                         END IF;
1335 
1336 
1337                         i := l_budget_lines_in.next(i);
1338 
1339                   END LOOP budget_line;
1340 
1341                   IF p_multiple_task_msg = 'F'
1342                   THEN
1343                         RAISE  FND_API.G_EXC_ERROR;
1344                   END IF;
1345 
1346             END IF;
1347 
1348       ELSE--Create a version in the finplan model
1349 
1350             IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
1351 
1352                   l_allow_qty_flag := p_cost_qty_flag;
1353 
1354             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
1355 
1356                   l_allow_qty_flag := p_revenue_qty_flag;
1357 
1358             ELSE
1359 
1360                   l_allow_qty_flag :=  P_all_qty_flag;
1361 
1362             END IF;
1363 
1364             IF l_debug_mode = 'Y' THEN
1365                   pa_debug.g_err_stage := 'l_allow_qty_flag is  '||l_allow_qty_flag;
1366                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1367             END IF;
1368 
1369             --Call the api only if budget lines exist
1370              -- dbms_output.put_line('l_budget_lines_in.last '||l_budget_lines_in.last);
1371             IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
1372 
1373                   IF l_debug_mode = 'Y' THEN
1374                         pa_debug.g_err_stage := 'About to call validate budget lines in finplan model';
1375                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1376                   END IF;
1377 
1378             --Added by Xin Liu. Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
1379             FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
1380 
1381                              IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1382                                     l_budget_lines_in(i).pa_task_id   :=  NULL;
1383                               END IF;
1384 
1385                              IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1386                                     l_budget_lines_in(i).pm_task_reference  :=  NULL;
1387                               END IF;
1388 
1389                              IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1390                                     l_budget_lines_in(i).resource_alias :=  NULL;
1391                               END IF;
1392 
1393                              IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1394                                     l_budget_lines_in(i).resource_list_member_id:=  NULL;
1395                               END IF;
1396 
1397 							    --Bug 16604257
1398                              IF l_budget_lines_in(i).CBS_ELEMENT_ID =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1399                                     l_budget_lines_in(i).CBS_ELEMENT_ID:=  NULL;
1400                               END IF;
1401 
1402 							  IF l_budget_lines_in(i).COST_CODE= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1403                                     l_budget_lines_in(i).COST_CODE :=  NULL;
1404                               END IF;
1405 								  --Bug 16604257
1406                              IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1407                                     l_budget_lines_in(i).budget_start_date:=  NULL;
1408                               END IF;
1409                              IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1410                                     l_budget_lines_in(i).budget_end_date:=  NULL;
1411                               END IF;
1412 
1413                               IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1414                                         l_budget_lines_in(i).period_name := NULL;
1415                               END IF;
1416 
1417                         IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1418                                     l_budget_lines_in(i).raw_cost   :=  NULL;
1419                               END IF;
1420 
1421                               IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1422                                     l_budget_lines_in(i).burdened_cost  := NULL;
1423                               END IF;
1424 
1425                               IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1426                                     l_budget_lines_in(i).revenue  := NULL;
1427                               END IF;
1428 
1429                               IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1430                                     l_budget_lines_in(i).quantity  := NULL;
1431                               END IF;
1432 
1433 
1434                               IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1435                                     l_budget_lines_in(i).change_reason_code  :=NULL;
1436                               END IF;
1437 
1438                               IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1439                                     l_budget_lines_in(i).description     :=  NULL;
1440                               END IF;
1441 
1442                               IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1443                                     l_budget_lines_in(i).attribute_category     :=  NULL;
1444                               END IF;
1445 
1446                               IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1447                                     l_budget_lines_in(i).attribute1     :=  NULL;
1448                               END IF;
1449 
1450                               IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1451                                     l_budget_lines_in(i).attribute2     :=  NULL;
1452                               END IF;
1453 
1454                               IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1455                                     l_budget_lines_in(i).attribute3     :=  NULL;
1456                               END IF;
1457 
1458                               IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1459                                     l_budget_lines_in(i).attribute4     :=  NULL;
1460                               END IF;
1461 
1462                               IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1463                                     l_budget_lines_in(i).attribute5     :=  NULL;
1464                               END IF;
1465 
1466                               IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1467                                     l_budget_lines_in(i).attribute6     :=  NULL;
1468                               END IF;
1469 
1470                               IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1471                                     l_budget_lines_in(i).attribute7     :=  NULL;
1472                               END IF;
1473 
1474                               IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1475                                     l_budget_lines_in(i).attribute8     :=  NULL;
1476                               END IF;
1477 
1478                               IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1479                                     l_budget_lines_in(i).attribute9     :=  NULL;
1480                               END IF;
1481 
1482                               IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1483                                     l_budget_lines_in(i).attribute10     :=  NULL;
1484                               END IF;
1485 
1486                               IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1487                                     l_budget_lines_in(i).attribute11     :=  NULL;
1488                               END IF;
1489 
1490                               IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1491                                     l_budget_lines_in(i).attribute12     :=  NULL;
1492                               END IF;
1493 
1494                               IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1495                                     l_budget_lines_in(i).attribute13     :=  NULL;
1496                               END IF;
1497 
1498                               IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1499                                     l_budget_lines_in(i).attribute14     :=  NULL;
1500                               END IF;
1501 
1502                               IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1503                                     l_budget_lines_in(i).attribute15     :=  NULL;
1504                               END IF;
1505 
1506                         IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1507                             l_budget_lines_in(i).txn_currency_code := NULL;
1508                         END IF;
1509 
1510                         IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1511                         l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
1512                         END IF;
1513 
1514                         IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1515                         l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1516                         END IF;
1517 
1518                         IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1519                         l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE     := NULL;
1520                         END IF;
1521 
1522                         IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1523                         l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1524                         END IF;
1525 
1526                         IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1527                                l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE      := NULL;
1528                         END IF;
1529 
1530                         IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1531                         l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1532                         END IF;
1533 
1534                         IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1535                         l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE      := NULL;
1536                         END IF;
1537 
1538                         IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1539                         l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
1540                         END IF;
1541 
1542                         IF  l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1543                         l_budget_lines_in(i).PROJECT_COST_RATE_TYPE      := NULL;
1544                         END IF;
1545 
1546                         IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1547                         l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
1548                         END IF;
1549 
1550                         IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE      THEN
1551                         l_budget_lines_in(i).PROJECT_COST_RATE_DATE      := NULL;
1552                         END IF;
1553 
1554                         IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1555                         l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE  := NULL;
1556                         END IF;
1557 
1558                         IF  l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1559                         l_budget_lines_in(i).PROJECT_REV_RATE_TYPE       := NULL;
1560                         END IF;
1561 
1562                         IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1563                         l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE  := NULL;
1564                         END IF;
1565 
1566                         IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1567                         l_budget_lines_in(i).PROJECT_REV_RATE_DATE       := NULL;
1568                         END IF;
1569 
1570                         IF  l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1571                         l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE   := NULL;
1572                         END IF;
1573 
1574                                 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1575                                    pm_product_code is passed as Null at the line level */
1576 
1577                         IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1578                                 l_budget_lines_in(i).pm_product_code IS NULL THEN
1579                                 l_budget_lines_in(i).pm_product_code := p_pm_product_code;
1580                         END IF;
1581 
1582                         IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1583                         l_budget_lines_in(i).pm_budget_line_reference    := NULL;
1584                         END IF;
1585 
1586 
1587             END LOOP;
1588                   --Done with Changes by xin liu
1589 /** Bug 3709462
1590                   --3569883 start
1591                   select fin_plan_type_id
1592                   into l_fp_type_id
1593                   from pa_budget_versions
1594                   where budget_version_id = l_budget_version_id;
1595 
1596                   select DECODE(l_fp_type_id, null, 'Y','N') into l_old_model from dual;
1597                   --3569883 end
1598 **/
1599                   -- Bug 3709462 We are in new model context, no new checks are necessary
1600 --                  l_old_model := 'N';
1601                   --Validate the finplan lines passed
1602                   pa_budget_pvt.Validate_Budget_Lines
1603                   ( p_pa_project_id              => l_project_id
1604                   ,p_budget_type_code            => NULL
1605                   ,p_fin_plan_type_id            => l_fin_plan_type_id
1606                   ,p_version_type                => l_version_type
1607                   ,p_resource_list_id            => l_resource_list_id
1608                   ,p_time_phased_code            => l_time_phased_code
1609                   ,p_budget_entry_method_code    => NULL
1610                   ,p_entry_level_code            => l_fin_plan_level_code
1611                   ,p_allow_qty_flag              => l_allow_qty_flag
1612                   ,p_allow_raw_cost_flag         => p_raw_cost_flag
1613                   ,p_allow_burdened_cost_flag    => p_burdened_cost_flag
1614                   ,p_allow_revenue_flag          => p_revenue_flag
1615                   ,p_multi_currency_flag         => l_plan_in_multi_curr_flag
1616                   ,p_project_cost_rate_type      => l_project_cost_rate_type
1617                   ,p_project_cost_rate_date_typ  => l_project_cost_rate_date_typ
1618                   ,p_project_cost_rate_date      => l_project_cost_rate_date
1619                   ,p_project_cost_exchange_rate  => NULL
1620                   ,p_projfunc_cost_rate_type     => l_projfunc_cost_rate_type
1621                   ,p_projfunc_cost_rate_date_typ => l_projfunc_cost_rate_date_typ
1622                   ,p_projfunc_cost_rate_date     => l_projfunc_cost_rate_date
1623                   ,p_projfunc_cost_exchange_rate => NULL
1624                   ,p_project_rev_rate_type       => l_project_rev_rate_type
1625                   ,p_project_rev_rate_date_typ   => l_project_rev_rate_date_typ
1626                   ,p_project_rev_rate_date       => l_project_rev_rate_date
1627                   ,p_project_rev_exchange_rate   => NULL
1628                   ,p_projfunc_rev_rate_type      => l_projfunc_rev_rate_type
1629                   ,p_projfunc_rev_rate_date_typ  => l_projfunc_rev_rate_date_typ
1630                   ,p_projfunc_rev_rate_date      => l_projfunc_rev_rate_date
1631                   ,p_projfunc_rev_exchange_rate  => NULL
1632                   ,px_budget_lines_in            => l_budget_lines_in
1633                   ,x_budget_lines_out            => p_budget_lines_out /* Bug 3133930*/
1634 --                  ,x_old_model                   => l_old_model --3569883
1635                   ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
1636                   ,x_etc_method_code_tbl         => l_etc_method_code_tbl
1637                   ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
1638                   ,x_msg_count                   => p_msg_count
1639                   ,x_msg_data                    => p_msg_data
1640                   ,x_return_status               => p_return_status);
1641 
1642                   IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1643 
1644                         RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1645 
1646                   END IF;
1647 
1648                   IF l_debug_mode = 'Y' THEN
1649                         pa_debug.g_err_stage := 'Validate budget lines got executed successfully';
1650                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1651                   END IF;
1652 
1653                   -- Initialise the index for the fin plan lines table
1654                   j :=1;
1655 
1656                   -- Intilalise the UOM and track as labor flag to the values associated with
1657                   -- the uncategorized resource list.
1658                   l_unit_of_measure := l_unc_unit_of_measure;
1659                   l_track_as_labor_flag := l_unc_track_as_labor_flag;
1660 
1661                   --dbms_output.put_line('l_budget_lines_in.FIRST '||l_budget_lines_in.FIRST);
1662                   --dbms_output.put_line('l_budget_lines_in.LAST '||l_budget_lines_in.LAST);
1663 
1664                   -- Copy the fin plan lines into a table of type pa_fp_rollup_tmp
1665                   FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
1666 
1667                        --dbms_output.put_line('In the for loop');
1668 
1669                         IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1670                               l_budget_lines_in(i).period_name := NULL;
1671                         END IF;
1672 
1673                         --Lines should be processed only if atleast one of the amounts exist
1674                          -- Commenting out the below check for 8423481. In SelfService, we do not have this check
1675                      /*  IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
1676                             nvl(l_budget_lines_in(i).raw_cost,0)<>0 OR
1677                             nvl(l_budget_lines_in(i).burdened_cost,0)<>0 OR
1678                             nvl(l_budget_lines_in(i).revenue,0) <>0) THEN
1679 */
1680 
1681                               -- Get UOM and track as labor flag only if the resource list is not uncategorized
1682                               -- If it is is uncategorized then we can make use of the uom and track as labor
1683                               -- flag obtained earlier
1684                               IF (l_resource_list_id <> l_uncategorized_res_list_id) THEN
1685                                     -- Bug 3807633.. We can directly fetch UOM from pa_resource_list_members
1686                                     -- for FINPLAN MODEL(FP.M Changes) as old non-migrated resource
1687                                     -- list cannot be used and only New and Migrated resource
1688                                     -- list can be used for FINPLAN Model.
1689                                     SELECT prlm.unit_of_measure
1690                                     INTO   l_unit_of_measure
1691                                     FROM   pa_resource_list_members prlm
1692                                     WHERE  prlm.resource_list_member_id = l_budget_lines_in(i).resource_list_member_id;
1693 
1694                               END IF;
1695 
1696                               --dbms_output.put_line('copying from budget to rollup finplan');
1697 
1698                               -- Convert flex field attributes to NULL if they have Miss Char as value
1699 
1700                               l_finplan_lines_tab(j).system_reference1           :=  l_budget_lines_in(i).pa_task_id;
1701                               l_finplan_lines_tab(j).system_reference2           :=  l_budget_lines_in(i).resource_list_member_id         ;
1702 							  l_finplan_lines_tab(j).system_reference3           :=  l_budget_lines_in(i).cbs_element_id;   --Bug 16604257
1703 							  --DEBUG_DJ('******************************************');
1704 							  --DEBUG_DJ('l_finplan_lines_tab(j).system_reference3 :::'||l_finplan_lines_tab(j).system_reference3 );
1705                               l_finplan_lines_tab(j).start_date                  :=  l_budget_lines_in(i).budget_start_date;
1706                               l_finplan_lines_tab(j).end_date                    :=  l_budget_lines_in(i).budget_end_date;
1707                               l_finplan_lines_tab(j).period_name                 :=  l_budget_lines_in(i).period_name;
1708                               l_finplan_lines_tab(j).system_reference4           :=  l_unit_of_measure     ;
1709                               --  l_finplan_lines_tab(j).system_reference5           :=  l_track_as_labor_flag  ;
1710                               l_finplan_lines_tab(j).system_reference5           :=  NULL; -- 3807633 track_as_labor_flag not mantained in FPM changes
1711                               l_finplan_lines_tab(j).txn_currency_code           :=  l_budget_lines_in(i).txn_currency_code               ;
1712                               l_finplan_lines_tab(j).projfunc_raw_cost           :=  NULL;
1713                               l_finplan_lines_tab(j).projfunc_burdened_cost      :=  NULL;
1714                               l_finplan_lines_tab(j).projfunc_revenue            :=  NULL;
1715                               l_finplan_lines_tab(j).project_raw_cost            :=  NULL ;
1716                               l_finplan_lines_tab(j).project_burdened_cost       :=  NULL;
1717                               l_finplan_lines_tab(j).project_revenue             :=  NULL;
1718 
1719                               IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1720                                     l_finplan_lines_tab(j).txn_raw_cost   :=  NULL;
1721                               ELSE
1722                                     l_finplan_lines_tab(j).txn_raw_cost   :=  l_budget_lines_in(i).raw_cost          ;
1723                               END IF;
1724 
1725                               IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1726                                     l_finplan_lines_tab(j).txn_burdened_cost  := NULL;
1727                               ELSE
1728                                     l_finplan_lines_tab(j).txn_burdened_cost  := l_budget_lines_in(i).burdened_cost;
1729                               END IF;
1730 
1731                               IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1732                                     l_finplan_lines_tab(j).txn_revenue  := NULL;
1733                               ELSE
1734                                     l_finplan_lines_tab(j).txn_revenue  := l_budget_lines_in(i).revenue;
1735                               END IF;
1736 
1737                               IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1738                                     l_finplan_lines_tab(j).quantity  := NULL;
1739                               ELSE
1740                                     l_finplan_lines_tab(j).quantity  := l_budget_lines_in(i).quantity;
1741                               END IF;
1742 
1743 
1744                               IF l_budget_lines_in(i).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1745                                     l_finplan_lines_tab(j).change_reason_code  :=NULL;
1746                               ELSE
1747                                     l_finplan_lines_tab(j).change_reason_code  :=  l_budget_lines_in(i).change_reason_code ;
1748                               END IF;
1749 
1750                               IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1751                                     l_finplan_lines_tab(j).description     :=  NULL;
1752                               ELSE
1753                                     l_finplan_lines_tab(j).description     :=  l_budget_lines_in(i).description;
1754                               END IF;
1755 
1756                               IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1757                                     l_finplan_lines_tab(j).attribute_category     :=  NULL;
1758                               ELSE
1759                                     l_finplan_lines_tab(j).attribute_category     :=  l_budget_lines_in(i).attribute_category;
1760                               END IF;
1761 
1762                               IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1763                                     l_finplan_lines_tab(j).attribute1     :=  NULL;
1764                               ELSE
1765                                     l_finplan_lines_tab(j).attribute1     :=  l_budget_lines_in(i).attribute1;
1766                               END IF;
1767 
1768                               IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1769                                     l_finplan_lines_tab(j).attribute2     :=  NULL;
1770                               ELSE
1771                                     l_finplan_lines_tab(j).attribute2     :=  l_budget_lines_in(i).attribute2;
1772                               END IF;
1773 
1774                               IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1775                                     l_finplan_lines_tab(j).attribute3     :=  NULL;
1776                               ELSE
1777                                     l_finplan_lines_tab(j).attribute3     :=  l_budget_lines_in(i).attribute3;
1778                               END IF;
1779 
1780                               IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1781                                     l_finplan_lines_tab(j).attribute4     :=  NULL;
1782                               ELSE
1783                                     l_finplan_lines_tab(j).attribute4     :=  l_budget_lines_in(i).attribute4;
1784                               END IF;
1785 
1786                               IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1787                                     l_finplan_lines_tab(j).attribute5     :=  NULL;
1788                               ELSE
1789                                     l_finplan_lines_tab(j).attribute5     :=  l_budget_lines_in(i).attribute5;
1790                               END IF;
1791 
1792                               IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1793                                     l_finplan_lines_tab(j).attribute6     :=  NULL;
1794                               ELSE
1795                                     l_finplan_lines_tab(j).attribute6     :=  l_budget_lines_in(i).attribute6;
1796                               END IF;
1797 
1798                               IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1799                                     l_finplan_lines_tab(j).attribute7     :=  NULL;
1800                               ELSE
1801                                     l_finplan_lines_tab(j).attribute7     :=  l_budget_lines_in(i).attribute7;
1802                               END IF;
1803 
1804                               IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1805                                     l_finplan_lines_tab(j).attribute8     :=  NULL;
1806                               ELSE
1807                                     l_finplan_lines_tab(j).attribute8     :=  l_budget_lines_in(i).attribute8;
1808                               END IF;
1809 
1810                               IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1811                                     l_finplan_lines_tab(j).attribute9     :=  NULL;
1812                               ELSE
1813                                     l_finplan_lines_tab(j).attribute9     :=  l_budget_lines_in(i).attribute9;
1814                               END IF;
1815 
1816                               IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1817                                     l_finplan_lines_tab(j).attribute10     :=  NULL;
1818                               ELSE
1819                                     l_finplan_lines_tab(j).attribute10     :=  l_budget_lines_in(i).attribute10;
1820                               END IF;
1821 
1822                               IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1823                                     l_finplan_lines_tab(j).attribute11     :=  NULL;
1824                               ELSE
1825                                     l_finplan_lines_tab(j).attribute11     :=  l_budget_lines_in(i).attribute11;
1826                               END IF;
1827 
1828                               IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1829                                     l_finplan_lines_tab(j).attribute12     :=  NULL;
1830                               ELSE
1831                                     l_finplan_lines_tab(j).attribute12     :=  l_budget_lines_in(i).attribute12;
1832                               END IF;
1833 
1834                               IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1835                                     l_finplan_lines_tab(j).attribute13     :=  NULL;
1836                               ELSE
1837                                     l_finplan_lines_tab(j).attribute13     :=  l_budget_lines_in(i).attribute13;
1838                               END IF;
1839 
1840                               IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1841                                     l_finplan_lines_tab(j).attribute14     :=  NULL;
1842                               ELSE
1843                                     l_finplan_lines_tab(j).attribute14     :=  l_budget_lines_in(i).attribute14;
1844                               END IF;
1845 
1846                               IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1847                                     l_finplan_lines_tab(j).attribute15     :=  NULL;
1848                               ELSE
1849                                     l_finplan_lines_tab(j).attribute15     :=  l_budget_lines_in(i).attribute15;
1850                               END IF;
1851 
1852             -- Added by Xin Liu
1853 
1854                         IF l_budget_lines_in(i).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1855                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
1856                         ELSE
1857                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE     :=  l_budget_lines_in(i).projfunc_cost_rate_type            ;
1858                         END IF;
1859 
1860                         IF l_budget_lines_in(i).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1861                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1862                         ELSE
1863                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_lines_in(i).projfunc_cost_rate_date_type      ;
1864                         END IF;
1865 
1866                         IF l_budget_lines_in(i).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1867                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     := NULL;
1868                         ELSE
1869                         l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     :=  l_budget_lines_in(i).projfunc_cost_rate_date            ;
1870                         END IF;
1871 
1872                         IF l_budget_lines_in(i).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1873                         l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1874                         ELSE
1875                         l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE :=  l_budget_lines_in(i).projfunc_cost_exchange_rate        ;
1876                         END IF;
1877 
1878                         IF l_budget_lines_in(i).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1879                                l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      := NULL;
1880                         ELSE
1881                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      :=  l_budget_lines_in(i).projfunc_rev_rate_type             ;
1882                         END IF;
1883 
1884                         IF l_budget_lines_in(i).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1885                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1886                         ELSE
1887                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE :=  l_budget_lines_in(i).projfunc_rev_rate_date_type        ;
1888                         END IF;
1889 
1890                         IF l_budget_lines_in(i).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1891                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      := NULL;
1892                         ELSE
1893                         l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      :=  l_budget_lines_in(i).projfunc_rev_rate_date;
1894                         END IF;
1895 
1896                         IF l_budget_lines_in(i).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1897                         l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
1898                         ELSE
1899                         l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  :=  l_budget_lines_in(i).projfunc_rev_exchange_rate         ;
1900                         END IF;
1901 
1902                         IF  l_budget_lines_in(i).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1903                         l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      := NULL;
1904                         ELSE
1905                         l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      :=  l_budget_lines_in(i).project_cost_rate_type;
1906                         END IF;
1907 
1908                         IF l_budget_lines_in(i).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1909                         l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
1910                         ELSE
1911                         l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE :=  l_budget_lines_in(i).project_cost_rate_date_type        ;
1912                         END IF;
1913 
1914                         IF l_budget_lines_in(i).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE    THEN
1915                         l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      := NULL;
1916                         ELSE
1917                         l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      :=  l_budget_lines_in(i).project_cost_rate_date             ;
1918                         END IF;
1919 
1920                         IF l_budget_lines_in(i).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1921                         l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  := NULL;
1922                         ELSE
1923                         l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  :=  l_budget_lines_in(i).project_cost_exchange_rate ;
1924                         END IF;
1925 
1926                         IF  l_budget_lines_in(i).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1927                         l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       := NULL;
1928                         ELSE
1929                                l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       :=  l_budget_lines_in(i).project_rev_rate_type              ;
1930                         END IF;
1931 
1932                         IF l_budget_lines_in(i).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
1933                         l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  := NULL;
1934                         ELSE
1935                         l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  :=  l_budget_lines_in(i).project_rev_rate_date_type         ;
1936                         END IF;
1937 
1938                         IF l_budget_lines_in(i).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
1939                         l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       := NULL;
1940                         ELSE
1941                         l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       :=  l_budget_lines_in(i).project_rev_rate_date              ;
1942                         END IF;
1943 
1944                         IF l_budget_lines_in(i).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
1945                         l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   := NULL;
1946                         ELSE
1947                         l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  l_budget_lines_in(i).project_rev_exchange_rate          ;
1948                         END IF;
1949 
1950                                 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1951                                    pm_product_code is passed as Null at the line level */
1952 
1953                         IF l_budget_lines_in(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1954                                 l_budget_lines_in(i).pm_product_code IS NULL THEN
1955                         l_finplan_lines_tab(j).pm_product_code             :=  p_pm_product_code      ;
1956                         ELSE
1957                         l_finplan_lines_tab(j).pm_product_code             :=  l_budget_lines_in(i).pm_product_code      ;
1958                         END IF;
1959 
1960                         IF l_budget_lines_in(i).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1961                         l_finplan_lines_tab(j).pm_budget_line_reference    := NULL;
1962                         ELSE
1963                         l_finplan_lines_tab(j).pm_budget_line_reference    :=  l_budget_lines_in(i).pm_budget_line_reference        ;
1964                         END IF;
1965             -- Done with Changes.
1966                         l_finplan_lines_tab(j).quantity_source             :=  'I'          ;
1967                               l_finplan_lines_tab(j).raw_cost_source             :=  'I'         ;
1968                               l_finplan_lines_tab(j).burdened_cost_source        :=  'I'         ;
1969                               l_finplan_lines_tab(j).revenue_source              :=  'I'         ;
1970                               l_finplan_lines_tab(j).resource_assignment_id      :=  -1          ;
1971 
1972                               --increment the index for fin plan lines table
1973                               j := j+1;
1974 
1975                     --    END IF;--IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
1976 
1977                   END LOOP;--Loop for copying fin plan lines into table of type rollup temp
1978 
1979                   IF l_debug_mode = 'Y' THEN
1980                         pa_debug.g_err_stage := 'Done with the copying of budget lines to fin plan lines';
1981                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1982                   END IF;
1983 
1984             END IF;
1985 
1986             IF l_debug_mode = 'Y' THEN
1987                   pa_debug.g_err_stage := 'About to call the create draft api in fin plan pvt';
1988                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1989             END IF;
1990 
1991             -- If either of the create , replace current working version flags are Y then lock the
1992             -- Current working version.
1993 
1994             IF (p_replace_current_working_flag = 'Y' OR
1995                        p_create_new_curr_working_flag = 'Y')  THEN
1996                   --Get the current working version info
1997                    pa_fin_plan_utils.Get_Curr_Working_Version_Info(
1998                          p_project_id            => l_project_id
1999                         ,p_fin_plan_type_id      => l_fin_plan_type_id
2000                         ,p_version_type          => l_version_type
2001                         ,x_fp_options_id         => l_proj_fp_options_id
2002                         ,x_fin_plan_version_id   => l_CW_version_id
2003                         ,x_return_status         => p_return_status
2004                         ,x_msg_count             => p_msg_count
2005                         ,x_msg_data              => p_msg_data );
2006 
2007                   IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2008                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2009                   END IF;
2010 
2011                   IF l_CW_version_id IS NOT NULL THEN
2012 
2013 -- Bug # 3507156 : Patchset M: B and F impact changes : AMG
2014 -- Commented the call to PA_FP_REFRESH_ELEMENTS_PUB.GET_REFRESH_PLAN_ELE_DTLS
2015 -- Comment START
2016 /*
2017                     --Added by Xin Liu
2018                     --Check if the current working version is locked for WBS refresh or not
2019                   PA_FP_REFRESH_ELEMENTS_PUB.GET_REFRESH_PLAN_ELE_DTLS
2020                                                       (
2021                                                          p_budget_version_id      => l_CW_version_id
2022                                                        , p_proj_fp_options_id     => NULL
2023                                                        , x_refresh_required_flag  => l_refresh_required_flag
2024                                                        , x_request_id             => l_request_id
2025                                                        , x_process_code           => l_process_code
2026                                                        , x_return_status          => p_return_status
2027                                                        , x_msg_count              => p_msg_count
2028                                                        , x_msg_data               => p_msg_data
2029                                                        );
2030 
2031                   IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2032 
2033                               IF l_debug_mode = 'Y' THEN
2034                                     pa_debug.g_err_stage := 'Error executing get refresh plan ele dtls';
2035                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2036                               END IF;
2037                               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2038 
2039                         END IF;
2040 
2041                      IF ( NVL(l_refresh_required_flag, 'N')  = 'Y' ) THEN
2042 
2043                               IF l_debug_mode = 'Y' THEN
2044                                     pa_debug.g_err_stage := 'Plan version must be refreshed for new plannable-task state.';
2045                                     pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2046                               END IF;
2047 
2048                   pa_interface_utils_pub.map_new_amg_msg
2049                               ( p_old_message_code => 'PA_FP_AMG_WBS_IN_PROC_MSG'
2050                               ,p_msg_attribute    => 'CHANGE'
2051                               ,p_resize_flag      => 'Y'
2052                               ,p_msg_context      => 'GENERAL'
2053                               ,p_attribute1       => ''
2054                               ,p_attribute2       => ''
2055                               ,p_attribute3       => ''
2056                               ,p_attribute4       => ''
2057                               ,p_attribute5       => '');
2058 
2059                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2060 
2061                         END IF;
2062 
2063                     --End changes done by Xin Liu for WBS refresh
2064 */
2065 -- Comment END
2066 -- Bug # 3507156 : Patchset M: B and F impact changes : AMG
2067 
2068                         select locked_by_person_id
2069                         into l_locked_by_person_id from pa_budget_versions
2070                          where budget_version_id = l_CW_version_id;
2071 
2072                         --Get the record version number of the current working version
2073                         l_CW_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
2074 
2075                         pa_fin_plan_pvt.lock_unlock_version
2076                               (p_budget_version_id      => l_CW_version_id,
2077                               p_record_version_number   => l_CW_record_version_number,
2078                               p_action                  => 'L',
2079                               p_user_id                 => l_user_id,
2080                               p_person_id               => NULL,
2081                               x_return_status           => p_return_status,
2082                               x_msg_count               => p_msg_count,
2083                               x_msg_data                => p_msg_data) ;
2084 
2085                         IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2086 
2087                               IF l_debug_mode = 'Y' THEN
2088                                     pa_debug.g_err_stage := 'Error executing lock unlock version';
2089                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2090                               END IF;
2091                               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2092 
2093                         END IF;
2094 
2095                   END IF;--IF l_CW_version_id IS NOT NULL THEN
2096 
2097             END IF;--IF (p_replace_current_working_flag = 'Y' OR
2098 
2099             --Call the api that creates the fin plan version
2100             PA_FIN_PLAN_PVT.CREATE_DRAFT(
2101             p_project_id                   => l_project_id
2102             ,p_fin_plan_type_id             => l_fin_plan_type_id
2103             ,p_version_type                 => l_version_type
2104             ,p_calling_context              => PA_FP_CONSTANTS_PKG.G_AMG_API--Bug 4224464.Changed this to AMG_API as this is a AMG flow.
2105             ,p_time_phased_code             => l_time_phased_code
2106             ,p_resource_list_id             => l_resource_list_id
2107             ,p_fin_plan_level_code          => l_fin_plan_level_code
2108             ,p_plan_in_mc_flag              => l_plan_in_multi_curr_flag
2109             ,p_version_name                 => l_budget_version_name
2110             ,p_description                  => l_description
2111             ,p_change_reason_code           => l_change_reason_code
2112             ,p_raw_cost_flag                => l_raw_cost_flag
2113             ,p_burdened_cost_flag           => l_burdened_cost_flag
2114             ,p_revenue_flag                 => l_revenue_flag
2115             ,p_cost_qty_flag                => l_cost_qty_flag
2116             ,p_revenue_qty_flag             => l_revenue_qty_flag
2117             ,p_all_qty_flag                 => l_all_qty_flag
2118             ,p_attribute_category           => l_attribute_category
2119             ,p_attribute1                   => l_attribute1
2120             ,p_attribute2                   => l_attribute2
2121             ,p_attribute3                   => l_attribute3
2122             ,p_attribute4                   => l_attribute4
2123             ,p_attribute5                   => l_attribute5
2124             ,p_attribute6                   => l_attribute6
2125             ,p_attribute7                   => l_attribute7
2126             ,p_attribute8                   => l_attribute8
2127             ,p_attribute9                   => l_attribute9
2128             ,p_attribute10                  => l_attribute10
2129             ,p_attribute11                  => l_attribute11
2130             ,p_attribute12                  => l_attribute12
2131             ,p_attribute13                  => l_attribute13
2132             ,p_attribute14                  => l_attribute14
2133             ,p_attribute15                  => l_attribute15
2134             ,p_projfunc_cost_rate_type      => l_projfunc_cost_rate_type
2135             ,p_projfunc_cost_rate_date_type => l_projfunc_cost_rate_date_typ
2136             ,p_projfunc_cost_rate_date      => l_projfunc_cost_rate_date
2137             ,p_projfunc_rev_rate_type       => l_projfunc_rev_rate_type
2138             ,p_projfunc_rev_rate_date_type  => l_projfunc_rev_rate_date_typ
2139             ,p_projfunc_rev_rate_date       => l_projfunc_rev_rate_date
2140             ,p_project_cost_rate_type       => l_project_cost_rate_type
2141             ,p_project_cost_rate_date_type  => l_project_cost_rate_date_typ
2142             ,p_project_cost_rate_date       => l_project_cost_rate_date
2143             ,p_project_rev_rate_type        => l_project_rev_rate_type
2144             ,p_project_rev_rate_date_type   => l_project_rev_rate_date_typ
2145             ,p_project_rev_rate_date        => l_project_rev_rate_date
2146             ,p_pm_product_code              => p_pm_product_code
2147              ,p_pm_budget_reference          => l_pm_budget_reference -- p_pm_project_reference changed to budget reference for bug 3858543
2148             ,p_budget_lines_tab             => l_finplan_lines_tab
2149             -- Start of additional columns for B
2150             ,p_ci_id                        => NULL
2151             ,p_est_proj_raw_cost            => NULL
2152             ,p_est_proj_bd_cost             => NULL
2153             ,p_est_proj_revenue             => NULL
2154             ,p_est_qty                      => NULL
2155             ,p_impacted_task_id             => NULL
2156             ,p_agreement_id                 => NULL
2157             -- End of additional columns for Bug
2158             ,p_create_new_curr_working_flag => l_create_new_working_flag
2159             ,p_replace_current_working_flag => l_replace_current_working_flag
2160             ,x_budget_version_id            => l_budget_version_id
2161             ,x_return_status                => p_return_status
2162             ,x_msg_count                    => p_msg_count
2163             ,x_msg_data                     => p_msg_data);
2164 
2165 
2166             IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2167 
2168                   RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2169 
2170             END IF;
2171 
2172        -- Added for Bug #4680197 Unlock the budget version incase is it locked in this create_draft api.
2173          IF p_create_new_curr_working_flag = 'Y'
2174              AND p_replace_current_working_flag <> 'Y' --Bug 8617706
2175              AND l_CW_version_id IS NOT NULL
2176              AND l_locked_by_person_id IS NULL THEN
2177                      --Get the record version number of the current working version
2178                      l_CW_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
2179                      pa_fin_plan_pvt.lock_unlock_version
2180                            (p_budget_version_id      => l_CW_version_id,
2181                            p_record_version_number   => l_CW_record_version_number,
2182                            p_action                  => 'U',
2183                            p_user_id                 => l_user_id,
2184                            p_person_id               => NULL,
2185                            x_return_status           => p_return_status,
2186                            x_msg_count               => p_msg_count,
2187                            x_msg_data                => p_msg_data) ;
2188 
2189                      IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2190 
2191                            IF l_debug_mode = 'Y' THEN
2192                                  pa_debug.g_err_stage := 'Error executing lock unlock version';
2193                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2194                            END IF;
2195                            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2196                      END IF;
2197          END IF;
2198          --Changes ended  for Bug #4680197
2199 
2200 
2201             IF l_debug_mode = 'Y' THEN
2202                   pa_debug.g_err_stage := 'Succesfully executed the fin plan pvt create draft ';
2203                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2204             END IF;
2205 
2206 
2207 
2208       END IF;--IF p_budget_type_code IS NOT NULL
2209 
2210       IF l_debug_mode = 'Y' THEN
2211             pa_debug.g_err_stage := 'About to check the overlapping dates';
2212             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2213       END IF;
2214 
2215       -- check for overlapping dates
2216       pa_budget_lines_v_pkg.check_overlapping_dates( x_budget_version_id  => l_budget_version_id
2217                               ,x_resource_name  => l_resource_name
2218                               ,x_err_code       => l_err_code       );
2219 
2220       IF l_err_code > 0
2221       THEN
2222 
2223             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2224             THEN
2225                   FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
2226                   FND_MESSAGE.SET_TOKEN('RNAME',l_resource_name);
2227 
2228                   FND_MSG_PUB.add;
2229             END IF;
2230 
2231             IF l_debug_mode = 'Y' THEN
2232                   pa_debug.g_err_stage := 'Error executing check_overlapping_dates';
2233                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2234             END IF;
2235 
2236 
2237             RAISE FND_API.G_EXC_ERROR;
2238 
2239       ELSIF l_err_code < 0
2240       THEN
2241 
2242             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2243             THEN
2244 
2245                   FND_MSG_PUB.add_exc_msg
2246                   (  p_pkg_name       => 'PA_BUDGET_LINES_V_PKG'
2247                   ,  p_procedure_name => 'CHECK_OVERLAPPING_DATES'
2248                   ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
2249 
2250             END IF;
2251 
2252             IF l_debug_mode = 'Y' THEN
2253                   pa_debug.g_err_stage := 'Unexpected Error executing check_overlapping_dates';
2254                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2255             END IF;
2256 
2257             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2258 
2259       END IF;
2260 
2261 --Bug # 3507156 : Patchset M: B and F impact changes : AMG
2262 --Added a call to PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS to get the return statuses of the input budget lines.
2263 
2264             PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS(
2265                           p_fin_plan_version_id            =>   l_budget_version_id
2266                          ,p_budget_lines_in                 =>   l_budget_lines_in          /* Bug # 3589304 */
2267                          ,x_fp_lines_retn_status_tab        =>   p_budget_lines_out
2268                          ,x_return_status                   =>   p_return_status
2269                          ,x_msg_count                       =>   p_msg_count
2270                          ,x_msg_data                        =>   p_msg_data );
2271 
2272 
2273             IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2274 
2275                         RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2276 
2277             END IF;
2278 
2279                   IF l_debug_mode = 'Y' THEN
2280                         pa_debug.g_err_stage := 'PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS got executed successfully';
2281                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2282                   END IF;
2283 
2284 
2285       --summarizing the totals in the table pa_budget_versions
2286 
2287       /*Summarizing of totals should be done only in the buget model*/
2288       IF (p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR and p_budget_type_code IS NOT NULL) THEN
2289 
2290             IF l_debug_mode = 'Y' THEN
2291                   pa_debug.g_err_stage := 'About to summarize totals in budget model';
2292                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2293             END IF;
2294 
2295             pa_budget_utils.summerize_project_totals( x_budget_version_id => l_budget_version_id
2296                                 , x_err_code      => l_err_code
2297                             , x_err_stage     => l_err_stage
2298                             , x_err_stack     => l_err_stack        );
2299 
2300 
2301             IF l_err_code > 0
2302             THEN
2303 
2304                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2305                   THEN
2306 
2307                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
2308                         THEN
2309                               pa_interface_utils_pub.map_new_amg_msg
2310                               ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
2311                                ,p_msg_attribute    => 'CHANGE'
2312                                ,p_resize_flag      => 'N'
2313                                ,p_msg_context      => 'BUDG'
2314                                ,p_attribute1       => l_amg_segment1
2315                                ,p_attribute2       => ''
2316                                ,p_attribute3       => p_budget_type_code
2317                                ,p_attribute4       => ''
2318                                ,p_attribute5       => '');
2319                         else
2320                               pa_interface_utils_pub.map_new_amg_msg
2321                               ( p_old_message_code => l_err_stage
2322                                ,p_msg_attribute    => 'CHANGE'
2323                                ,p_resize_flag      => 'N'
2324                                ,p_msg_context      => 'BUDG'
2325                                ,p_attribute1       => l_amg_segment1
2326                                ,p_attribute2       => ''
2327                                ,p_attribute3       => p_budget_type_code
2328                                ,p_attribute4       => ''
2329                                ,p_attribute5       => '');
2330                         end IF;
2331 
2332                   END IF;
2333 
2334                   IF l_debug_mode = 'Y' THEN
2335                         pa_debug.g_err_stage := 'Error in  summarizing totals in budget model';
2336                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2337                   END IF;
2338 
2339 
2340                   RAISE FND_API.G_EXC_ERROR;
2341 
2342             ELSIF l_err_code < 0
2343             THEN
2344 
2345                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2346                   THEN
2347 
2348                         FND_MSG_PUB.add_exc_msg
2349                             (  p_pkg_name       => 'PA_BUDGET_UTILS'
2350                             ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
2351                             ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
2352 
2353                   END IF;
2354 
2355                   IF l_debug_mode = 'Y' THEN
2356                         pa_debug.g_err_stage := 'Unexpected Error in  summarizing totals in budget model';
2357                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2358                   END IF;
2359 
2360 
2361                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2362 
2363             END IF;
2364 
2365 
2366       END IF;
2367 
2368 
2369       IF FND_API.TO_BOOLEAN( p_commit )
2370       THEN
2371 
2372             IF l_debug_mode = 'Y' THEN
2373                   pa_debug.g_err_stage := 'About to do a COMMIT';
2374                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2375             END IF;
2376 
2377             COMMIT;
2378       END IF;
2379 
2380       IF l_debug_mode = 'Y' THEN
2381             pa_debug.g_err_stage := 'Leaving create draft budget';
2382             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2383       END IF;
2384 
2385       --Changes for bug 3182963
2386       IF l_debug_mode = 'Y' THEN
2387             pa_debug.reset_curr_function;
2388       END IF;
2389 
2390 
2391 EXCEPTION
2392       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
2393              -- dbms_output.put_line('MSG count in the stack ' || FND_MSG_PUB.count_msg);
2394             ROLLBACK TO create_draft_budget_pub;
2395 
2396             IF p_return_status IS NULL OR
2397                p_return_status =  FND_API.G_RET_STS_SUCCESS THEN
2398                   p_return_status := FND_API.G_RET_STS_ERROR;
2399             END IF;
2400 
2401             l_msg_count := FND_MSG_PUB.count_msg;
2402              -- dbms_output.put_line('MSG count in the stack ' || l_msg_count);
2403 
2404             IF l_msg_count = 1 AND p_msg_data IS NULL THEN
2405                    PA_INTERFACE_UTILS_PUB.get_messages
2406                        (p_encoded        => FND_API.G_TRUE,
2407                         p_msg_index      => 1,
2408                         p_msg_count      => l_msg_count,
2409                         p_msg_data       => l_msg_data,
2410                         p_data           => l_data,
2411                         p_msg_index_out  => l_msg_index_out);
2412 
2413                    p_msg_data  := l_data;
2414                    p_msg_count := l_msg_count;
2415             ELSE
2416                    p_msg_count := l_msg_count;
2417             END IF;
2418 
2419           IF l_debug_mode = 'Y' THEN
2420                  pa_debug.reset_curr_function;
2421             END IF;
2422 
2423              -- dbms_output.put_line('MSG count in the stack ' || l_msg_count);
2424 
2425             RETURN;
2426 
2427     WHEN FND_API.G_EXC_ERROR
2428     THEN
2429 
2430 /*   -- dbms_output.put_line('handling an G_EXC_ERROR exception in create_draft_budget'); */
2431 
2432             ROLLBACK TO create_draft_budget_pub;
2433 
2434             p_return_status := FND_API.G_RET_STS_ERROR;
2435 
2436             FND_MSG_PUB.Count_And_Get
2437             (   p_count     =>  p_msg_count ,
2438                 p_data      =>  p_msg_data  );
2439           --Changes for bug 3182963
2440           IF l_debug_mode = 'Y' THEN
2441                  pa_debug.reset_curr_function;
2442             END IF;
2443 
2444 
2445     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2446     THEN
2447 
2448 /*   -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception in create_draft_budget'); */
2449 
2450             ROLLBACK TO create_draft_budget_pub;
2451 
2452             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2453 
2454             FND_MSG_PUB.Count_And_Get
2455             (   p_count     =>  p_msg_count ,
2456                 p_data      =>  p_msg_data  );
2457 
2458           --Changes for bug 3182963
2459           IF l_debug_mode = 'Y' THEN
2460                  pa_debug.reset_curr_function;
2461             END IF;
2462 
2463 
2464     WHEN ROW_ALREADY_LOCKED
2465     THEN
2466     ROLLBACK TO create_draft_budget_pub;
2467 
2468     p_return_status := FND_API.G_RET_STS_ERROR;
2469 
2470     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2471     THEN
2472       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
2473       FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
2474       FND_MESSAGE.SET_TOKEN('TASK',    '');
2475       FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
2476       FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
2477       FND_MESSAGE.SET_TOKEN('START_DATE', '');
2478       FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
2479       FND_MSG_PUB.ADD;
2480     END IF;
2481 
2482     FND_MSG_PUB.Count_And_Get
2483             (   p_count     =>  p_msg_count ,
2484                 p_data      =>  p_msg_data  );
2485 
2486           --Changes for bug 3182963
2487           IF l_debug_mode = 'Y' THEN
2488                  pa_debug.reset_curr_function;
2489             END IF;
2490 
2491 
2492     WHEN OTHERS
2493     THEN
2494 
2495 /*   -- dbms_output.put_line('handling an OTHERS exception'); */
2496 
2497             ROLLBACK TO create_draft_budget_pub;
2498 
2499             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2500 
2501             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2502             THEN
2503             FND_MSG_PUB.add_exc_msg
2504             (  p_pkg_name       => G_PKG_NAME
2505             ,  p_procedure_name => l_api_name );
2506 
2507             END IF;
2508 
2509             FND_MSG_PUB.Count_And_Get
2510             (   p_count     =>  p_msg_count ,
2511                 p_data      =>  p_msg_data  );
2512 
2513           --Changes for bug 3182963
2514           IF l_debug_mode = 'Y' THEN
2515                  pa_debug.reset_curr_function;
2516             END IF;
2517 
2518 
2519 END create_draft_budget;
2520 
2521 
2522 
2523 ----------------------------------------------------------------------------------------
2524 --Name:               init_budget
2525 --Type:               Procedure
2526 --Description:        This procedure can be used to initialize the global PL/SQL
2527 --            tables that are used by a LOAD/EXECUTE/FETCH cycle.
2528 --
2529 --
2530 --Called subprograms:
2531 --
2532 --
2533 --
2534 --History:
2535 --    20-SEP-1996        L. de Werker    Created
2536 --
2537 --
2538 PROCEDURE init_budget
2539 
2540 IS
2541 
2542 BEGIN
2543 
2544     FND_MSG_PUB.Initialize;
2545 
2546 --  Initialize global table and record types
2547 
2548     G_budget_lines_in_tbl.delete;
2549 
2550     G_budget_lines_tbl_count := 0;
2551 
2552     G_budget_lines_out_tbl.delete;
2553 
2554 
2555 END init_budget;
2556 
2557 
2558 ----------------------------------------------------------------------------------------
2559 --Name:               load_budget_line
2560 --Type:               Procedure
2561 --Description:        This procedure can be used to load a budget line
2562 --                    in a global PL/SQL table.
2563 --
2564 --Called subprograms:
2565 --
2566 --
2567 --
2568 --History:
2569 --    24-SEP-1996        L. de Werker    Created
2570 --    28-NOV-1996        L. de Werker    Add 16 parameters for descriptive flexfields
2571 --    11-Mar-2003        Srikanth        Included the parameters for Fin Plan Model
2572 
2573 PROCEDURE load_budget_line
2574 ( p_api_version_number          IN  NUMBER
2575  ,p_commit              IN  VARCHAR2    := FND_API.G_FALSE
2576  ,p_init_msg_list           IN  VARCHAR2    := FND_API.G_FALSE
2577  ,p_return_status           OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2578  ,p_pa_task_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2579  ,p_pm_task_reference           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2580  ,p_resource_alias          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2581  ,p_resource_list_member_id     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2582   --Bug 16604257 : CBS RBS Phase 2 API changes
2583   ,p_cost_code                  IN    VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2584   ,p_cbs_element_id         IN    NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2585  --Bug 16604257
2586  ,p_budget_start_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2587  ,p_budget_end_date         IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2588  ,p_period_name             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2589  ,p_description             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2590  ,p_raw_cost                IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2591  ,p_burdened_cost           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2592  ,p_revenue                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2593  ,p_quantity                IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2594 ,p_pm_product_code          IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2595 ,p_pm_budget_line_reference IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2596  ,p_attribute_category      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2597  ,p_attribute1              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2598  ,p_attribute2              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2599  ,p_attribute3              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2600  ,p_attribute4              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2601  ,p_attribute5              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2602  ,p_attribute6              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2603  ,p_attribute7              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2604  ,p_attribute8              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2605  ,p_attribute9              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2606  ,p_attribute10             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2607  ,p_attribute11             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2608  ,p_attribute12             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2609  ,p_attribute13             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2610  ,p_attribute14             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2611  ,p_attribute15             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2612 
2613  --Parameters for fin plan model
2614 
2615  --Changes the default of the following parameters from NULL to G_PA_MISS_XXX 24-APR-03 by Xin Liu
2616  ,p_txn_currency_code             IN  pa_fp_txn_currencies.txn_currency_code%TYPE
2617 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2618  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE
2619 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2620  ,p_projfunc_cost_rate_date_type  IN   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
2621 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2622  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE
2623 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2624  ,p_projfunc_cost_exchange_rate   IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE
2625 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2626  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE
2627 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2628  ,p_projfunc_rev_rate_date_type   IN   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
2629 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2630  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE
2631 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2632  ,p_projfunc_rev_exchange_rate    IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE
2633 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2634  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE
2635 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2636  ,p_project_cost_rate_date_type   IN   pa_proj_fp_options.project_cost_rate_date_type%TYPE
2637 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2638  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE
2639 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2640  ,p_project_cost_exchange_rate    IN  pa_budget_lines.project_cost_exchange_rate%TYPE
2641 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2642  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE
2643 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2644  ,p_project_rev_rate_date_type    IN   pa_proj_fp_options.project_rev_rate_date_type%TYPE
2645 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2646  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE
2647 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2648  ,p_project_rev_exchange_rate     IN  pa_budget_lines.project_rev_exchange_rate%TYPE
2649 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2650  ,p_change_reason_code            IN  pa_budget_lines.change_reason_code%TYPE
2651 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2652  )
2653 
2654 IS
2655 
2656    l_api_name               CONSTANT    VARCHAR2(30)        := 'load_budget_line';
2657    l_return_status                  VARCHAR2(1);
2658    l_err_stage                      VARCHAR2(120);
2659    l_msg_entity                     VARCHAR2(100);
2660    l_msg_entity_index                   NUMBER;
2661 
2662    --bug 13686054
2663    l_txn_currency_code pa_fp_txn_currencies.txn_currency_code%TYPE;
2664 
2665 BEGIN
2666 
2667 --  Standard begin of API savepoint
2668 
2669     SAVEPOINT load_budget_line_pub;
2670  --bug fix 13686054 start
2671    --assign value passed to local variable as this variable is used during
2672    --insert
2673     l_txn_currency_code := p_txn_currency_code;
2674    --if call is from MSP integration code, we take the functional currency if
2675    --not set we will use USD. MSP does not support multiple currency and that's why
2676    --we have to decide at this level.
2677     IF  p_pm_product_code = 'MSPROJECT' THEN
2678 --bug fix 14114695 start
2679 --commented the below query since no data populated in the table pa_fp_txn_currencies if multi currency not enabled
2680 /*
2681       SELECT DISTINCT Nvl(cu.TXN_CURRENCY_CODE,'USD')
2682        INTO  l_txn_currency_code
2683        FROM pa_fp_txn_currencies cu, pa_tasks pa
2684        WHERE pa.task_id = p_pa_task_id
2685        AND  cu.PROJECT_ID= pa.project_id
2686        AND cu.PROJFUNC_CURRENCY_FLAG = 'Y'; */
2687 --added the below query
2688        SELECT Nvl(p.PROJFUNC_CURRENCY_CODE,'USD')
2689        INTO  l_txn_currency_code
2690        FROM pa_projects_all p, pa_tasks pa
2691        WHERE pa.task_id = p_pa_task_id
2692        AND  p.project_id= pa.project_id;
2693 --bug fix 14114695 end
2694     END IF;
2695     --bug fix 13686054 end
2696 
2697 --  Standard call to check for call compatibility.
2698 
2699     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
2700                                          p_api_version_number   ,
2701                                          l_api_name             ,
2702                                          G_PKG_NAME             )
2703     THEN
2704 
2705     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2706 
2707     END IF;
2708 
2709 --  Initialize the message table if requested.
2710 
2711     IF FND_API.TO_BOOLEAN( p_init_msg_list )
2712     THEN
2713 
2714     FND_MSG_PUB.initialize;
2715 
2716     END IF;
2717 
2718 --  Set API return status to success
2719 
2720     p_return_status := FND_API.G_RET_STS_SUCCESS;
2721 
2722 --  assign a value to the global counter for this table
2723     G_budget_lines_tbl_count := G_budget_lines_tbl_count + 1;
2724 
2725 
2726 --  assign incoming parameters to the fields of pl/sql global table G_budget_lines_in_tbl
2727     G_budget_lines_in_tbl(G_budget_lines_tbl_count).pa_task_id          := p_pa_task_id;
2728     G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_task_reference       := p_pm_task_reference;
2729     G_budget_lines_in_tbl(G_budget_lines_tbl_count).resource_alias      := p_resource_alias;
2730     G_budget_lines_in_tbl(G_budget_lines_tbl_count).resource_list_member_id := p_resource_list_member_id;
2731 	   --Bug 16604257 : CBS RBS Phase 2 API changes
2732 	    G_budget_lines_in_tbl(G_budget_lines_tbl_count).cbs_element_id := p_cbs_element_id;
2733 		G_budget_lines_in_tbl(G_budget_lines_tbl_count).cost_code := p_cost_code;
2734 
2735     G_budget_lines_in_tbl(G_budget_lines_tbl_count).budget_start_date       := p_budget_start_date;
2736     G_budget_lines_in_tbl(G_budget_lines_tbl_count).budget_end_date     := p_budget_end_date;
2737     G_budget_lines_in_tbl(G_budget_lines_tbl_count).period_name         := p_period_name;
2738     G_budget_lines_in_tbl(G_budget_lines_tbl_count).description         := p_description;
2739     G_budget_lines_in_tbl(G_budget_lines_tbl_count).raw_cost            := p_raw_cost;
2740     G_budget_lines_in_tbl(G_budget_lines_tbl_count).burdened_cost       := p_burdened_cost;
2741     G_budget_lines_in_tbl(G_budget_lines_tbl_count).revenue         := p_revenue;
2742     G_budget_lines_in_tbl(G_budget_lines_tbl_count).quantity            := p_quantity;
2743     G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_product_code
2744 := p_pm_product_code;
2745     G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_budget_line_reference
2746 := p_pm_budget_line_reference;
2747     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute_category      := p_attribute_category;
2748     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute1
2749 := p_attribute1;
2750     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute2
2751 := p_attribute2;
2752     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute3
2753 := p_attribute3;
2754     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute4
2755 := p_attribute4;
2756     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute5
2757 := p_attribute5;
2758     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute6
2759 := p_attribute6;
2760     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute7
2761 := p_attribute7;
2762     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute8
2763 := p_attribute8;
2764     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute9
2765 := p_attribute9;
2766     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute10
2767 := p_attribute10;
2768     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute11
2769 := p_attribute11;
2770     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute12
2771 := p_attribute12;
2772     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute13
2773 := p_attribute13;
2774     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute14
2775 := p_attribute14;
2776     G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute15
2777 := p_attribute15;
2778 
2779 -- The parameters included for fin plan model
2780   --bug 13686054
2781   -- G_budget_lines_in_tbl(G_budget_lines_tbl_count).txn_currency_code             :=  p_txn_currency_code            ;
2782    G_budget_lines_in_tbl(G_budget_lines_tbl_count).txn_currency_code             :=  l_txn_currency_code            ;
2783    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_type       :=  p_projfunc_cost_rate_type      ;
2784    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_date_type  :=  p_projfunc_cost_rate_date_type ;
2785    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_date       :=  p_projfunc_cost_rate_date      ;
2786    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_exchange_rate   :=  p_projfunc_cost_exchange_rate  ;
2787    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_type        :=  p_projfunc_rev_rate_type       ;
2788    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_date_type   :=  p_projfunc_rev_rate_date_type  ;
2789    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_date        :=  p_projfunc_rev_rate_date        ;
2790    G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_exchange_rate    :=  p_projfunc_rev_exchange_rate   ;
2791    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_type        :=  p_project_cost_rate_type       ;
2792    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_date_type   :=  p_project_cost_rate_date_type  ;
2793    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_date        :=  p_project_cost_rate_date       ;
2794    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_exchange_rate    :=  p_project_cost_exchange_rate   ;
2795    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_type         :=  p_project_rev_rate_type        ;
2796    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_date_type    :=  p_project_rev_rate_date_type   ;
2797    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_date         :=  p_project_rev_rate_date        ;
2798    G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_exchange_rate     :=  p_project_rev_exchange_rate    ;
2799    G_budget_lines_in_tbl(G_budget_lines_tbl_count).change_reason_code            :=  p_change_reason_code           ;
2800 
2801 
2802 
2803 EXCEPTION
2804 
2805     WHEN FND_API.G_EXC_ERROR
2806     THEN
2807     ROLLBACK TO load_budget_line_pub;
2808 
2809     p_return_status := FND_API.G_RET_STS_ERROR;
2810 
2811     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2812     THEN
2813     ROLLBACK TO load_budget_line_pub;
2814 
2815     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2816 
2817     WHEN OTHERS THEN
2818     ROLLBACK TO load_budget_line_pub;
2819 
2820     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2821 
2822     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2823     THEN
2824         FND_MSG_PUB.add_exc_msg
2825             (  p_pkg_name       => G_PKG_NAME
2826             ,  p_procedure_name => l_api_name );
2827 
2828     END IF;
2829 
2830 END load_budget_line;
2831 
2832 ----------------------------------------------------------------------------------------
2833 --Name:               execute_create_draft_budget
2834 --Type:               Procedure
2835 --Description:        This procedure can be used to create a draft budget
2836 --                    using global PL/SQL tables.
2837 --
2838 --Called subprograms:
2839 --
2840 --
2841 --
2842 --History:
2843 --    23-SEP-1996        L. de Werker    Created
2844 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
2845 --    29-NOV-1996    L. de Werker    Added parameter p_pm_budget_reference
2846 --    01-sep-2004    tpalaniv        Added parameter  p_pm_budget_reference while calling create_draft_budget
2847 PROCEDURE execute_create_draft_budget
2848 ( p_api_version_number            IN  NUMBER
2849  ,p_commit                        IN  VARCHAR2    := FND_API.G_FALSE
2850  ,p_init_msg_list                 IN  VARCHAR2    := FND_API.G_FALSE
2851  ,p_msg_count                     OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2852  ,p_msg_data                      OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2853  ,p_return_status                 OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2854  ,p_pm_product_code               IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2855  ,p_pm_budget_reference           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2856 , p_budget_version_name           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2857  ,p_pa_project_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2858  ,p_pm_project_reference          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2859  ,p_budget_type_code              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2860  ,p_change_reason_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2861  ,p_description                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2862  ,p_entry_method_code             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2863  ,p_resource_list_name            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2864  ,p_resource_list_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2865  ,p_attribute_category            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2866  ,p_attribute1                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2867  ,p_attribute2                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2868  ,p_attribute3                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2869  ,p_attribute4                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2870  ,p_attribute5                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2871  ,p_attribute6                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2872  ,p_attribute7                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2873  ,p_attribute8                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2874  ,p_attribute9                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2875  ,p_attribute10                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2876  ,p_attribute11                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2877  ,p_attribute12                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2878  ,p_attribute13                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2879  ,p_attribute14                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2880  ,p_attribute15                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2881 
2882  --Added the following parameters for changes in AMG due to finplan model
2883  ,p_fin_plan_type_id              IN   pa_fin_plan_types_b.fin_plan_type_id%TYPE
2884  ,p_fin_plan_type_name            IN   pa_fin_plan_types_vl.name%TYPE
2885  ,p_version_type                  IN   pa_budget_versions.version_type%TYPE
2886  ,p_fin_plan_level_code           IN   pa_proj_fp_options.cost_fin_plan_level_code%TYPE
2887  ,p_time_phased_code              IN   pa_proj_fp_options.cost_time_phased_code%TYPE
2888  ,p_plan_in_multi_curr_flag       IN   pa_proj_fp_options.plan_in_multi_curr_flag%TYPE
2889  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE
2890  ,p_projfunc_cost_rate_date_typ   IN   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
2891  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE
2892  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE
2893  ,p_projfunc_rev_rate_date_typ    IN   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
2894  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE
2895  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE
2896  ,p_project_cost_rate_date_typ    IN   pa_proj_fp_options.project_cost_rate_date_type%TYPE
2897  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE
2898  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE
2899  ,p_project_rev_rate_date_typ     IN   pa_proj_fp_options.project_rev_rate_date_type%TYPE
2900  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE
2901  ,p_raw_cost_flag                 IN   VARCHAR2
2902  ,p_burdened_cost_flag            IN   VARCHAR2
2903  ,p_revenue_flag                  IN   VARCHAR2
2904  ,p_cost_qty_flag                 IN   VARCHAR2
2905  ,p_revenue_qty_flag              IN   VARCHAR2
2906  ,P_all_qty_flag                  IN   VARCHAR2
2907  ,p_create_new_curr_working_flag  IN   VARCHAR2
2908  ,p_replace_current_working_flag  IN   VARCHAR2
2909  ,p_using_resource_lists_flag   IN   VARCHAR2
2910  )
2911 
2912 
2913 IS
2914 
2915    l_api_name               CONSTANT    VARCHAR2(30)        := 'execute_create_draft_budget';
2916    i                            NUMBER;
2917    l_return_status                  VARCHAR2(1);
2918    l_err_stage                      VARCHAR2(120);
2919 
2920 
2921 BEGIN
2922 
2923 --  Standard begin of API savepoint
2924 
2925     SAVEPOINT execute_create_budget_pub;
2926 
2927 --  Standard call to check for call compatibility.
2928 
2929     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
2930                                          p_api_version_number   ,
2931                                          l_api_name             ,
2932                                          G_PKG_NAME             )
2933     THEN
2934 
2935     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2936 
2937     END IF;
2938 
2939 --  Initialize the message table if requested.
2940 
2941     IF FND_API.TO_BOOLEAN( p_init_msg_list )
2942     THEN
2943 
2944     FND_MSG_PUB.initialize;
2945 
2946     END IF;
2947 
2948 --  Set API return status to success
2949 
2950     p_return_status := FND_API.G_RET_STS_SUCCESS;
2951 
2952     create_draft_budget
2953             ( p_api_version_number          => p_api_version_number
2954              ,p_commit                      => FND_API.G_FALSE
2955              ,p_init_msg_list               => FND_API.G_FALSE
2956              ,p_msg_count                   => p_msg_count
2957              ,p_msg_data                    => p_msg_data
2958              ,p_return_status               => l_return_status
2959              ,p_pm_product_code             => p_pm_product_code
2960              ,p_budget_version_name         => p_budget_version_name
2961              ,p_pa_project_id               => p_pa_project_id
2962              ,p_pm_project_reference        => p_pm_project_reference
2963            ,p_pm_budget_reference         => p_pm_budget_reference  -- Added for bug 3858543
2964              ,p_budget_type_code            => p_budget_type_code
2965              ,p_change_reason_code          => p_change_reason_code
2966              ,p_description                 => p_description
2967              ,p_entry_method_code           => p_entry_method_code
2968              ,p_resource_list_name          => p_resource_list_name
2969              ,p_resource_list_id            => p_resource_list_id
2970              ,p_attribute_category          => p_attribute_category
2971              ,p_attribute1                  => p_attribute1
2972              ,p_attribute2                  => p_attribute2
2973              ,p_attribute3                  => p_attribute3
2974              ,p_attribute4                  => p_attribute4
2975              ,p_attribute5                  => p_attribute5
2976              ,p_attribute6                  => p_attribute6
2977              ,p_attribute7                  => p_attribute7
2978              ,p_attribute8                  => p_attribute8
2979              ,p_attribute9                  => p_attribute9
2980              ,p_attribute10                 => p_attribute10
2981              ,p_attribute11                 => p_attribute11
2982              ,p_attribute12                 => p_attribute12
2983              ,p_attribute13                 => p_attribute13
2984              ,p_attribute14                 => p_attribute14
2985              ,p_attribute15                 => p_attribute15
2986              ,p_budget_lines_in             => G_budget_lines_in_tbl
2987              ,p_budget_lines_out            => G_budget_lines_out_tbl
2988 
2989              --New parameters for finplan model
2990              ,p_fin_plan_type_id            => p_fin_plan_type_id
2991              ,p_fin_plan_type_name          => p_fin_plan_type_name
2992              ,p_version_type                => p_version_type
2993              ,p_fin_plan_level_code         => p_fin_plan_level_code
2994              ,p_time_phased_code            => p_time_phased_code
2995              ,p_plan_in_multi_curr_flag     => p_plan_in_multi_curr_flag
2996              ,p_projfunc_cost_rate_type     => p_projfunc_cost_rate_type
2997              ,p_projfunc_cost_rate_date_typ => p_projfunc_cost_rate_date_typ
2998              ,p_projfunc_cost_rate_date     => p_projfunc_cost_rate_date
2999              ,p_projfunc_rev_rate_type      => p_projfunc_rev_rate_type
3000              ,p_projfunc_rev_rate_date_typ  => p_projfunc_rev_rate_date_typ
3001              ,p_projfunc_rev_rate_date      => p_projfunc_rev_rate_date
3002              ,p_project_cost_rate_type      => p_project_cost_rate_type
3003              ,p_project_cost_rate_date_typ  => p_project_cost_rate_date_typ
3004              ,p_project_cost_rate_date      => p_project_cost_rate_date
3005              ,p_project_rev_rate_type       => p_project_rev_rate_type
3006              ,p_project_rev_rate_date_typ   => p_project_rev_rate_date_typ
3007              ,p_project_rev_rate_date       => p_project_rev_rate_date
3008              ,p_raw_cost_flag               => p_raw_cost_flag
3009              ,p_burdened_cost_flag          => p_burdened_cost_flag
3010              ,p_revenue_flag                => p_revenue_flag
3011              ,p_cost_qty_flag               => p_cost_qty_flag
3012              ,p_revenue_qty_flag            => p_revenue_qty_flag
3013              ,P_all_qty_flag                => P_all_qty_flag
3014              ,p_create_new_curr_working_flag=> p_create_new_curr_working_flag
3015              ,p_replace_current_working_flag=> p_replace_current_working_flag
3016            ,p_using_resource_lists_flag   => p_using_resource_lists_flag);
3017 
3018 
3019 -- Temporary solution because of commit in delete_budget!!!!
3020 
3021    SAVEPOINT execute_create_budget_pub;
3022 
3023 /*   -- dbms_output.put_line('Return status create_draft_budget: '||l_return_status); */
3024 
3025     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3026         THEN
3027 
3028             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3029 
3030         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3031         THEN
3032 
3033             RAISE FND_API.G_EXC_ERROR;
3034         END IF;
3035 
3036         IF fnd_api.to_boolean(p_commit)
3037         THEN
3038             COMMIT;
3039         END IF;
3040 
3041 
3042 EXCEPTION
3043 
3044     WHEN FND_API.G_EXC_ERROR
3045     THEN
3046 
3047 
3048         ROLLBACK TO execute_create_budget_pub;
3049 
3050         p_return_status := FND_API.G_RET_STS_ERROR;
3051 
3052         FND_MSG_PUB.Count_And_Get
3053         (   p_count     =>  p_msg_count ,
3054             p_data      =>  p_msg_data  );
3055 
3056     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3057     THEN
3058 
3059 /*   -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
3060 
3061     ROLLBACK TO execute_create_budget_pub;
3062 
3063     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3064 
3065     FND_MSG_PUB.Count_And_Get
3066     (   p_count     =>  p_msg_count ,
3067         p_data      =>  p_msg_data  );
3068 
3069     WHEN OTHERS THEN
3070 
3071 
3072     ROLLBACK TO execute_create_budget_pub;
3073 
3074     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3075 
3076     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3077     THEN
3078         FND_MSG_PUB.add_exc_msg
3079             (  p_pkg_name       => G_PKG_NAME
3080             ,  p_procedure_name => l_api_name );
3081 
3082     END IF;
3083 
3084     FND_MSG_PUB.Count_And_Get
3085     (   p_count     =>  p_msg_count ,
3086         p_data      =>  p_msg_data  );
3087 
3088 END execute_create_draft_budget;
3089 
3090 
3091 ----------------------------------------------------------------------------------------
3092 --Name:               fetch_budget_line
3093 --Type:               Procedure
3094 --Description:        This procedure can be used to fetch the outcoming
3095 --            parameters for budget lines as part of the LOAD/EXECUTE/FETCH cycle.
3096 --
3097 --
3098 --Called subprograms:
3099 --
3100 --
3101 --
3102 --History:
3103 --    30-SEP-1996        L. de Werker    Created
3104 --
3105 --
3106 PROCEDURE fetch_budget_line
3107 ( p_api_version_number      IN  NUMBER
3108  ,p_init_msg_list       IN  VARCHAR2    := FND_API.G_FALSE
3109  ,p_return_status       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3110  ,p_line_index          IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3111  ,p_line_return_status      OUT NOCOPY VARCHAR2                    ) --File.Sql.39 bug 4440895
3112 
3113 IS
3114 
3115    l_api_name           CONSTANT    VARCHAR2(30)        := 'fetch_budget_line';
3116    l_index                  NUMBER;
3117    i                        NUMBER;
3118 
3119 BEGIN
3120 
3121 --  Standard begin of API savepoint
3122 
3123     SAVEPOINT fetch_budget_line_pub;
3124 
3125 --  Standard call to check for call compatibility.
3126 
3127     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
3128                                          p_api_version_number   ,
3129                                          l_api_name             ,
3130                                          G_PKG_NAME             )
3131     THEN
3132 
3133     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3134 
3135     END IF;
3136 
3137 --  Initialize the message table if requested.
3138 
3139     IF FND_API.TO_BOOLEAN( p_init_msg_list )
3140     THEN
3141 
3142     FND_MSG_PUB.initialize;
3143 
3144     END IF;
3145 
3146 --  Set API return status to success
3147 
3148     p_return_status := FND_API.G_RET_STS_SUCCESS;
3149 
3150 -- Check budget line index value,
3151 -- when they don't provide an index we will error out
3152 
3153 IF p_line_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3154 OR p_line_index IS NULL
3155 THEN
3156     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3157     THEN
3158          pa_interface_utils_pub.map_new_amg_msg
3159           ( p_old_message_code => 'PA_BUGDET_LINE_INDEX_MISSING'
3160            ,p_msg_attribute    => 'CHANGE'
3161            ,p_resize_flag      => 'Y'
3162            ,p_msg_context      => 'GENERAL'
3163            ,p_attribute1       => ''
3164            ,p_attribute2       => ''
3165            ,p_attribute3       => ''
3166            ,p_attribute4       => ''
3167            ,p_attribute5       => '');
3168     END IF;
3169 
3170     p_return_status := FND_API.G_RET_STS_ERROR;
3171     RAISE FND_API.G_EXC_ERROR;
3172 ELSE
3173     l_index := p_line_index;
3174 END IF;
3175 
3176 --assign global table fields to the outgoing parameter
3177 p_line_return_status        := G_budget_lines_out_tbl(l_index).return_status;
3178 
3179 
3180 
3181 EXCEPTION
3182 
3183     WHEN FND_API.G_EXC_ERROR
3184     THEN
3185 
3186     ROLLBACK TO fetch_budget_line_pub;
3187 
3188     p_return_status := FND_API.G_RET_STS_ERROR;
3189 
3190     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3191     THEN
3192 
3193     ROLLBACK TO fetch_budget_line_pub;
3194 
3195     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3196 
3197     WHEN OTHERS THEN
3198 
3199     ROLLBACK TO fetch_budget_line_pub;
3200 
3201     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3202 
3203     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3204     THEN
3205         FND_MSG_PUB.add_exc_msg
3206             (  p_pkg_name       => G_PKG_NAME
3207             ,  p_procedure_name => l_api_name );
3208 
3209     END IF;
3210 
3211 
3212 END fetch_budget_line;
3213 
3214 ----------------------------------------------------------------------------------------
3215 --Name:               clear_budget
3216 --Type:               Procedure
3217 --Description:        This procedure can be used to clear the global PL/SQL
3218 --            tables that are used by a LOAD/EXECUTE/FETCH cycle.
3219 --
3220 --
3221 --Called subprograms:
3222 --
3223 --
3224 --
3225 --History:
3226 --    23-SEP-1996        L. de Werker    Created
3227 --
3228 --
3229 PROCEDURE clear_budget
3230 
3231 IS
3232 
3233 BEGIN
3234 
3235 
3236    init_budget;
3237 
3238 
3239 END clear_budget;
3240 
3241 
3242 ----------------------------------------------------------------------------------------
3243 --Name:               Baseline_Budget
3244 --Type:               Procedure
3245 --Description:        This procedure can be used to baseline
3246 --            a budget for a given project.
3247 --
3248 --
3249 --Called subprograms: pa_budget_core.verify
3250 --            pa_budget_core.baseline
3251 --                    PA_BUDGET_FUND_PKG.get_budget_ctrl_options
3252 --
3253 --
3254 --
3255 --History:
3256 --    30-SEP-1996       L. de Werker    Created
3257 --    03-DEC-1996   L. de Werker    Added check for previous baselined budgets.
3258 --    03-MAR-1997   L. de Werker    Added workflow enabling
3259 --    24-JUN-97     jwhite      Workflow had been commented-out, renabled it
3260 --                  as per latest specifications.
3261 --    21-JUL-97     jwhite      Added Check_Baseline_Rules procedure
3262 --                  to validations section.
3263 --    29-JUL-97     jwhite      Radically changed validations and WF implementation
3264 --                  as per new specs from jlowell.
3265 --    12-AUG-97     jwhite      Added new OUT-parameter, p_workflow_started
3266 --                  as per workflow implementation.
3267 --    08-SEP-97     jwhite      Updated to latest specifications: added
3268 --                  wrappers for Start_Budget_WF and
3269 --                  Budget_WF_Is_Used, new parameters to
3270 --                  Verify_Budget_Rules calls, etc.
3271 --    11-SEP-97     jwhite      Added new concept of  warnings_only ('W')
3272 --                  for the p_return_status with respect
3273 --                  to the Verify_Budget_Rules calls.
3274 --
3275 --    02-MAY-01         jwhite      As per the Non-Project Budget Ingtegration
3276 --                                      development effort,  if budget is enabled for budgetary
3277 --                                      controls, the baseline process will be
3278 --                                      aborted.
3279 --    02-FEB-03        sgoteti     Made changes for the finplan model
3280 
3281 
3282 PROCEDURE Baseline_Budget
3283 ( p_api_version_number        IN    NUMBER
3284  ,p_commit                    IN    VARCHAR2          := FND_API.G_FALSE
3285  ,p_init_msg_list             IN    VARCHAR2          := FND_API.G_FALSE
3286  ,p_msg_count                 OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
3287  ,p_msg_data                  OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3288  ,p_return_status             OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3289  ,p_workflow_started          OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3290  ,p_pm_product_code           IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3291  ,p_pa_project_id             IN    NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3292  ,p_pm_project_reference      IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3293  ,p_budget_type_code          IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3294  ,p_mark_as_original          IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3295 
3296  --Parameters due to Fin Plan Model
3297  ,p_fin_plan_type_id          IN    pa_fin_plan_types_b.fin_plan_type_id%TYPE
3298  ,p_fin_plan_type_name        IN    pa_fin_plan_types_tl.name%TYPE
3299  ,p_version_type              IN    pa_budget_versions.version_type%TYPE)
3300 
3301 IS
3302 
3303       CURSOR l_budget_types_csr
3304              (p_budget_type_code    VARCHAR2 )
3305       IS
3306       SELECT 1
3307       FROM   pa_budget_types
3308       WHERE  budget_type_code = p_budget_type_code;
3309 
3310       -- Changed the cursor so that it can be used in both old budget model
3311       -- and finplan model
3312       CURSOR l_budget_lines_csr
3313              (p_budget_version_id NUMBER )
3314       IS
3315       SELECT 1
3316       FROM   pa_budget_lines
3317       WHERE  budget_version_id = p_budget_version_id;
3318 
3319 --8423481
3320       CURSOR l_resource_assignments_csr
3321              ( p_budget_version_id NUMBER )
3322       IS
3323       SELECT 1
3324       FROM pa_resource_assignments
3325       WHERE budget_version_id = p_budget_version_id;
3326 
3327       CURSOR l_budget_versions_csr
3328              (c_project_id       NUMBER
3329              ,c_budget_type_code VARCHAR2)
3330 
3331       IS
3332       SELECT budget_version_id
3333       FROM   pa_budget_versions
3334       WHERE  project_id   = c_project_id
3335       AND    budget_type_code       = c_budget_type_code
3336       AND    budget_status_code     = 'W'
3337       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3338 
3339 
3340       l_budget_versions_rec              l_budget_versions_csr%ROWTYPE;
3341 
3342 
3343       CURSOR l_baselined_csr
3344             ( c_project_id       NUMBER
3345              ,c_budget_type_code VARCHAR2 )
3346 
3347       IS
3348       SELECT budget_version_id
3349       FROM   pa_budget_versions
3350       WHERE  project_id             = c_project_id
3351       AND    budget_type_code = c_budget_type_code
3352       AND    budget_status_code     = 'B'
3353       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3354 
3355 
3356       l_baselined_rec                    l_baselined_csr%ROWTYPE;
3357 
3358 
3359       -- 01-AUG-97, jwhite
3360       -- Cursor for Verify_Budget_Rules
3361 
3362       CURSOR l_budget_rules_csr(p_draft_version_id NUMBER)
3363       IS
3364       SELECT v.resource_list_id,
3365              t.project_type_class_code
3366       FROM   pa_project_types t,
3367              pa_projects p,
3368              pa_budget_versions v
3369       WHERE  v.budget_version_id = p_draft_version_id
3370       AND    v.project_id = p.project_id
3371       AND    p.project_type = t.project_type
3372       AND    v.ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause v.ci_id IS NULL--Bug # 3507156
3373 
3374 
3375 
3376       -- 24-JUN-97, jwhite
3377       -- ROW LOCKING ---------------------------------------------------------------
3378 
3379       CURSOR l_lock_budget_csr (p_budget_version_id NUMBER)
3380       IS
3381       SELECT 'x'
3382       FROM   pa_budget_versions
3383       WHERE  budget_version_id = p_budget_version_id
3384       AND    ci_id IS NULL         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3385       FOR UPDATE NOWAIT;
3386 
3387       -- --------------------------------------------------------------------------------------
3388 
3389 
3390 
3391       l_api_name              CONSTANT    VARCHAR2(30)            := 'baseline_budget';
3392       l_return_status                     VARCHAR2(1);
3393       l_project_id                        NUMBER;
3394 
3395       l_budget_version_id                 NUMBER;
3396       l_mark_as_original                  pa_budget_versions.current_original_flag%TYPE;
3397 
3398       l_err_code                          NUMBER;
3399       l_err_stage                         VARCHAR2(120);
3400       l_err_stack                         VARCHAR2(630);
3401       i                                   NUMBER;
3402       l_row_found                         NUMBER;
3403       l_msg_count                         NUMBER ;
3404       l_msg_data                          VARCHAR2(2000);
3405       l_function_allowed                  VARCHAR2(1);
3406       l_resp_id                           NUMBER := 0;
3407       l_user_id                           NUMBER := 0;
3408       l_module_name                       VARCHAR2(80);
3409 
3410       l_workflow_is_used                  VARCHAR2(1) := NULL;
3411       l_resource_list_id                  NUMBER;
3412       l_project_type_class_code           pa_project_types.project_type_class_code%TYPE;
3413 
3414       l_warnings_only_flag                VARCHAR2(1) := 'Y';
3415       l_err_msg_count                     NUMBER      := 0;
3416 
3417       --needed to get the field values associated to a AMG message
3418 
3419       CURSOR l_amg_project_csr
3420           (p_pa_project_id pa_projects.project_id%type)
3421       IS
3422       SELECT segment1
3423       FROM   pa_projects p
3424       WHERE  p.project_id = p_pa_project_id;
3425 
3426       l_amg_segment1                      VARCHAR2(25);
3427 
3428       -- Needed to check whether the plan type id passed is attached to the project or Not
3429       CURSOR l_plan_type_option_csr
3430              (c_project_id          pa_projects_all.project_id%TYPE,
3431               c_fin_plan_type_id    pa_proj_fp_options.proj_fp_options_id%TYPE)
3432       IS
3433       SELECT 'X'
3434       FROM   pa_proj_fp_options pfo
3435       WHERE  pfo.project_id=c_project_id
3436       AND    pfo.fin_plan_type_id=c_fin_plan_type_id
3437       AND    pfo.fin_plan_option_level_code=PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
3438 
3439       -- Needed to get the version id and record version number of the original baselined version
3440       CURSOR l_orig_baselined_ver_csr
3441              (c_project_id        pa_projects_all.project_id%TYPE,
3442               c_fin_plan_type_id  pa_budget_versions.fin_plan_type_id%TYPE,
3443               c_version_type      pa_budget_versions.version_type%TYPE)
3444       IS
3445       SELECT budget_version_id
3446             ,record_version_number
3447       FROM   pa_budget_versions
3448       WHERE  project_id=c_project_id
3449       AND    fin_plan_type_id=c_fin_plan_type_id
3450       AND    version_type=c_version_type
3451       AND    current_original_flag='Y'
3452       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3453 
3454 
3455       l_orig_baselined_ver_rec            l_orig_baselined_ver_csr%ROWTYPE;
3456 
3457 
3458       -- Budget Integration Variables --------------------------
3459 
3460       l_fck_req_flag                      VARCHAR2(1) := NULL;
3461       l_bdgt_intg_flag                    VARCHAR2(1) := NULL;
3462       l_bdgt_ver_id                       NUMBER := NULL;
3463       l_encum_type_id                     NUMBER := NULL;
3464       l_balance_type                      VARCHAR2(1) := NULL;
3465 
3466       -- --------------------------------------------------------
3467       l_fin_plan_type_id                  pa_fin_plan_types_b.fin_plan_type_id%TYPE;
3468       l_debug_mode                        VARCHAR2(1);
3469       l_debug_level2             CONSTANT NUMBER := 2;
3470       l_debug_level3             CONSTANT NUMBER := 3;
3471       l_debug_level4             CONSTANT NUMBER := 4;
3472       l_debug_level5             CONSTANT NUMBER := 5;
3473       l_version_type                      pa_budget_Versions.version_type%TYPE;
3474       l_security_ret_code                 VARCHAR2(1);
3475       l_baselined_Ver_options_id          pa_proj_fp_options.proj_fp_options_id%TYPE;
3476       l_baselined_version_id              pa_budget_Versions.budget_version_id%TYPE;
3477       l_CW_ver_options_id                 pa_proj_fp_options.proj_fp_options_id%TYPE;
3478       l_curr_working_version_id           pa_budget_Versions.budget_version_id%TYPE;
3479       l_CB_record_version_number          pa_budget_Versions.record_version_number%TYPE;
3480       l_CW_record_version_number          pa_budget_Versions.record_version_number%TYPE;
3481       l_any_error_occurred_flag           VARCHAR2(1);
3482       l_data                              VARCHAR2(2000);
3483       l_msg_index_out                     NUMBER;
3484       l_dummy                             VARCHAR2(1);
3485       l_fin_plan_type_name                pa_fin_plan_types_tl.name%TYPE;
3486       l_result                            VARCHAR2(1);
3487       ll_fin_plan_type_id                  pa_fin_plan_types_b.fin_plan_type_id%TYPE;
3488       ll_fin_plan_type_name                pa_fin_plan_types_tl.name%TYPE;
3489       l_fc_version_created_flag            VARCHAR2(1);
3490       l_final_plan_prc_code                VARCHAR2(10);
3491       l_targ_request_id                pa_budget_versions.request_id%TYPE;
3492 BEGIN
3493 
3494       --Standard begin of API savepoint
3495 
3496       SAVEPOINT baseline_budget_pub;
3497 
3498 
3499       --Standard call to check for call compatibility.
3500 
3501       IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
3502                                p_api_version_number   ,
3503                                l_api_name             ,
3504                                G_PKG_NAME             )
3505       THEN
3506 
3507             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3508 
3509       END IF;
3510 
3511       l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
3512 
3513 
3514       pa_debug.set_curr_function( p_function   => 'baseline_budget',
3515                                   p_debug_mode => l_debug_mode );
3516 
3517 
3518       --Initialize the message table if requested.
3519       IF FND_API.TO_BOOLEAN( p_init_msg_list )
3520       THEN
3521 
3522             FND_MSG_PUB.initialize;
3523 
3524       END IF;
3525 
3526       --Get the user id and responsibility Ids
3527       l_user_id := FND_GLOBAL.User_id;
3528       l_resp_id := FND_GLOBAL.Resp_id;
3529 
3530 
3531       -- This api will initialize the data that will be used by the map_new_amg_msg.
3532       -- commented out the procedure call as required by venkatesh. 25-APR-03
3533 /*
3534       PA_INTERFACE_UTILS_PUB.Set_Global_Info
3535         ( p_api_version_number => 1.0
3536          ,p_responsibility_id  => l_resp_id
3537          ,p_user_id            => l_user_id
3538          ,p_calling_mode       => 'AMG'     --bug 2783845
3539          ,p_msg_count          => l_msg_count
3540          ,p_msg_data           => l_msg_data
3541          ,p_return_status      => l_return_status);
3542 
3543       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3544             RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3545       END IF;
3546 */
3547       --product_code is mandatory
3548       IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3549       OR p_pm_product_code IS NULL
3550       THEN
3551             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3552             THEN
3553                   pa_interface_utils_pub.map_new_amg_msg
3554                   ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
3555                    ,p_msg_attribute    => 'CHANGE'
3556                    ,p_resize_flag      => 'N'
3557                    ,p_msg_context      => 'GENERAL'
3558                    ,p_attribute1       => ''
3559                    ,p_attribute2       => ''
3560                    ,p_attribute3       => ''
3561                    ,p_attribute4       => ''
3562                    ,p_attribute5       => '');
3563             END IF;
3564 
3565             IF l_debug_mode = 'Y' THEN
3566                   pa_debug.g_err_stage:= 'Product code is missing';
3567                   pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3568             END IF;
3569 
3570 --            RAISE FND_API.G_EXC_ERROR;
3571               l_any_error_occurred_flag := 'Y';
3572 
3573       ELSE
3574             l_pm_product_code :='Z';
3575             /*added for bug no :2413400*/
3576              -- dbms_output.put_line('p_pm_product_code is '||p_pm_product_code);
3577              -- dbms_output.put_line('l_pm_product_code is '||l_pm_product_code);
3578             OPEN p_product_code_csr (p_pm_product_code);
3579             FETCH p_product_code_csr INTO l_pm_product_code;
3580             CLOSE p_product_code_csr;
3581              -- dbms_output.put_line('l_pm_product_code is 2'||l_pm_product_code);
3582             IF l_pm_product_code <> 'X'
3583             THEN
3584 
3585                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3586                   THEN
3587                         pa_interface_utils_pub.map_new_amg_msg
3588                         ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
3589                         ,p_msg_attribute    => 'CHANGE'
3590                         ,p_resize_flag      => 'N'
3591                         ,p_msg_context      => 'GENERAL'
3592                         ,p_attribute1       => ''
3593                         ,p_attribute2       => ''
3594                         ,p_attribute3       => ''
3595                         ,p_attribute4       => ''
3596                         ,p_attribute5       => '');
3597                   END IF;
3598                   p_return_status             := FND_API.G_RET_STS_ERROR;
3599                   -- RAISE FND_API.G_EXC_ERROR;
3600                   l_any_error_occurred_flag := 'Y';
3601                   IF l_debug_mode = 'Y' THEN
3602                         pa_debug.g_err_stage:= 'Product code is invalid';
3603                         pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3604                   END IF;
3605                    -- dbms_output.put_line('Product Code is invalid');
3606             END IF;
3607              -- dbms_output.put_line('Validated the code');
3608       END IF;
3609 
3610       --l_module_name := p_pm_product_code||'.'||'PA_PM_BASELINE_BUDGET';
3611       l_module_name := 'PA_PM_BASELINE_BUDGET';
3612 
3613       --Commented out the existing calls to security APIs. call the api that has all the
3614       --security checks (As part of the changes to AMG for finplan model)
3615 
3616       -- As part of enforcing project security, which would determine
3617       -- whether the user has the necessary privileges to update the project
3618       -- need to call the pa_security package
3619       -- If a user does not have privileges to update the project, then
3620       -- cannot baseline the budget
3621 
3622       --pa_security.initialize (X_user_id        => l_user_id,
3623       --                        X_calling_module => l_module_name);
3624 
3625       -- Actions performed using the APIs would be subject to
3626       -- function security. If the responsibility does not allow
3627       -- such functions to be executed, the API should not proceed further
3628       -- since the user does not have access to such functions
3629 
3630       --PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_pa_project_id; Moved this to later part of code
3631 
3632 
3633       --PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3634       --(p_api_version_number => p_api_version_number,
3635       -- p_responsibility_id  => l_resp_id,
3636       -- p_function_name      => 'PA_PM_BASELINE_BUDGET',
3637       -- p_msg_count          => l_msg_count,
3638       -- p_msg_data           => l_msg_data,
3639       -- p_return_status      => l_return_status,
3640       -- p_function_allowed   => l_function_allowed );
3641 
3642       --IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3643       --THEN
3644       --      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3645       --
3646       --ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3647       --THEN
3648       --      RAISE FND_API.G_EXC_ERROR;
3649       --END IF;
3650       --IF l_function_allowed = 'N' THEN
3651       --      pa_interface_utils_pub.map_new_amg_msg
3652       --      ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3653       --      ,p_msg_attribute    => 'CHANGE'
3654       --      ,p_resize_flag      => 'Y'
3655       --      ,p_msg_context      => 'GENERAL'
3656       --      ,p_attribute1       => ''
3657       --      ,p_attribute2       => ''
3658       --      ,p_attribute3       => ''
3659       --      ,p_attribute4       => ''
3660       --      ,p_attribute5       => '');
3661       --      p_return_status := FND_API.G_RET_STS_ERROR;
3662       --      RAISE FND_API.G_EXC_ERROR;
3663       --END IF;
3664 
3665 
3666       --  Set API return status to success
3667 
3668       p_return_status         := FND_API.G_RET_STS_SUCCESS;
3669 
3670 
3671 
3672       -- 12-AUG-97, jwhite:
3673       --  Initialize New OUT-parameter to indicate workflow status
3674 
3675       -- Set Worflow Started Status -------------------------------------------------
3676 
3677       p_workflow_started            := 'N';
3678       -- ------------------------------------------------------------------------------------
3679 
3680 
3681       --CHECK FOR MANDATORY FIELDS and CONVERT VALUES to ID's
3682 
3683       /*   -- dbms_output.put_line('Check for Mandatory Fields'); */
3684 
3685       -- convert pm_project_reference to id
3686       Pa_project_pvt.Convert_pm_projref_to_id (
3687          p_pm_project_reference  => p_pm_project_reference,
3688          p_pa_project_id         => p_pa_project_id,
3689          p_out_project_id        => l_project_id,
3690          p_return_status         => l_return_status );
3691 
3692       PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;
3693 
3694       IF l_debug_mode = 'Y' THEN
3695             pa_debug.g_err_stage:= 'Convert_pm_projref_to_id returned status '||l_return_status;
3696             pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3697       END IF;
3698 
3699       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
3700       THEN
3701             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3702 
3703       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3704       THEN
3705             RAISE  FND_API.G_EXC_ERROR;
3706 
3707       END IF;
3708 
3709       IF l_project_id IS NULL   --never happens because previous procedure checks this.
3710       THEN
3711             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3712             THEN
3713                   pa_interface_utils_pub.map_new_amg_msg
3714                   ( p_old_message_code => 'PA_PROJECT_IS_MISSING'
3715                   ,p_msg_attribute    => 'CHANGE'
3716                   ,p_resize_flag      => 'N'
3717                   ,p_msg_context      => 'GENERAL'
3718                   ,p_attribute1       => ''
3719                   ,p_attribute2       => ''
3720                   ,p_attribute3       => ''
3721                   ,p_attribute4       => ''
3722                   ,p_attribute5       => '');
3723             END IF;
3724 
3725             IF l_debug_mode = 'Y' THEN
3726                   pa_debug.g_err_stage:= 'Project id is null ';
3727                   pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3728             END IF;
3729 
3730             RAISE FND_API.G_EXC_ERROR;
3731 
3732       END IF;
3733 
3734       -- Get segment1 for AMG messages
3735 
3736       OPEN l_amg_project_csr( l_project_id );
3737       FETCH l_amg_project_csr INTO l_amg_segment1;
3738       CLOSE l_amg_project_csr;
3739 
3740 -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
3741 -- 28-APR-03
3742       IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3743          ll_fin_plan_type_id := NULL;
3744       ELSE
3745        ll_fin_plan_type_id := p_fin_plan_type_id;
3746       END IF;
3747 
3748       IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3749          ll_fin_plan_type_name := NULL;
3750       ELSE
3751          ll_fin_plan_type_name := p_fin_plan_type_name;
3752       END IF;
3753 
3754 -- Changes done.
3755 
3756 
3757       -- Both Budget Type Code and Fin Plan Type Id should not be null
3758       IF ((p_budget_type_code IS NULL OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  AND
3759         (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3760         (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) )THEN
3761 
3762             PA_UTILS.ADD_MESSAGE
3763                   (p_app_short_name => 'PA',
3764                   p_msg_name        => 'PA_BUDGET_FP_BOTH_MISSING');
3765 
3766             IF l_debug_mode = 'Y' THEN
3767                   pa_debug.g_err_stage:= 'budget type code and fin plan type id, both are null ';
3768                   pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3769             END IF;
3770 
3771             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3772 
3773       END IF;
3774 
3775       -- Both Budget Type Code and Fin Plan Type Id should not be not null
3776       IF ((p_budget_type_code IS NOT NULL  AND
3777            p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  AND
3778         ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3779          (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) THEN
3780 
3781             PA_UTILS.ADD_MESSAGE
3782                   (p_app_short_name => 'PA',
3783                   p_msg_name        => 'PA_BUDGET_FP_BOTH_NOT_NULL');
3784 
3785             IF l_debug_mode = 'Y' THEN
3786                   pa_debug.g_err_stage:= 'budget type code and fin plan type id, both are not null ';
3787                   pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3788             END IF;
3789 
3790             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3791 
3792       END IF;
3793 
3794       -- Check whether the user has privileges to call this api.
3795       -- Check whether budget type code or fin plan passed are valid or not
3796       IF p_budget_type_code IS NOT NULL
3797       AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3798       THEN
3799             -- This api adds the message to stack in case of error
3800             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
3801                  p_api_version_number => p_api_version_number
3802                 ,p_project_id         => l_project_id
3803                 ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
3804                 ,p_function_name      => l_module_name
3805                 ,p_version_type       => NULL
3806                 ,x_return_status      => l_return_status
3807                 ,x_ret_code           => l_security_ret_code );
3808 
3809             IF l_return_status <>  FND_API.G_RET_STS_SUCCESS OR
3810                l_security_ret_code = 'N' THEN
3811 
3812                   IF l_debug_mode = 'Y' THEN
3813                         pa_debug.g_err_stage := 'Security API failed' ;
3814                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3815                   END IF;
3816 
3817                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3818 
3819             END IF;
3820 
3821 
3822             OPEN l_budget_types_csr( p_budget_type_code );
3823 
3824             FETCH l_budget_types_csr
3825             INTO l_row_found;
3826 
3827             IF l_budget_types_csr%NOTFOUND
3828             THEN
3829                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3830                   THEN
3831                         pa_interface_utils_pub.map_new_amg_msg
3832                         ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
3833                          ,p_msg_attribute    => 'CHANGE'
3834                          ,p_resize_flag      => 'N'
3835                          ,p_msg_context      => 'BUDG'
3836                          ,p_attribute1       => l_amg_segment1
3837                          ,p_attribute2       => ''
3838                          ,p_attribute3       => p_budget_type_code
3839                          ,p_attribute4       => ''
3840                          ,p_attribute5       => '');
3841                   END IF;
3842 
3843                   CLOSE l_budget_types_csr;
3844                   IF l_debug_mode = 'Y' THEN
3845                         pa_debug.g_err_stage:= 'Invalid budget type ';
3846                         pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3847                   END IF;
3848 
3849                   RAISE FND_API.G_EXC_ERROR;
3850 
3851             ELSE
3852                   CLOSE l_budget_types_csr;
3853             END IF;
3854 
3855             --Added this validation for bug#4460120
3856              --Verify that the budget is not of type FORECASTING_BUDGET_TYPE
3857              IF p_budget_type_code='FORECASTING_BUDGET_TYPE' THEN
3858                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3859                    THEN
3860                          PA_UTILS.add_message
3861                          (p_app_short_name => 'PA',
3862                           p_msg_name       => 'PA_FP_CANT_BLINE_FCST_BUD_TYPE');
3863                    END IF;
3864                    IF l_debug_mode = 'Y' THEN
3865                          pa_debug.g_err_stage := 'Budget of type FORECASTING_BUDGET_TYPE' ;
3866                          pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3867                    END IF;
3868                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3869              END IF;
3870 
3871       ELSE  -- API is called in the context of fin plan
3872 
3873             --Call the api that converts the fin plan type name to ID .This api adds the
3874             --message to stack in case of error
3875 
3876           --Changed p_fin_plan_type_id to ll_fin_plan_type_id,
3877             --        p_fin_plan_type_name to ll_fin_plan_type_name
3878             --Xin Liu 28-APR-03
3879             PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
3880                                      ( p_fin_plan_type_id    => ll_fin_plan_type_id
3881                                       ,p_fin_plan_type_name  => ll_fin_plan_type_name
3882                                       ,x_fin_plan_type_id    => l_fin_plan_type_id
3883                                       ,x_return_status       => l_return_status
3884                                       ,x_msg_count           => l_msg_count
3885                                       ,x_msg_data            => l_msg_data);
3886 
3887             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3888 
3889                   IF l_debug_mode = 'Y' THEN
3890                         pa_debug.g_err_stage := 'Can not get the value of Fin Plan Type Id' ;
3891                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3892                   END IF;
3893 
3894 
3895                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3896 
3897             END IF;
3898 
3899              -- dbms_output.put_line('Obtained the plan type id'||l_fin_plan_type_id);
3900 
3901             OPEN l_plan_type_option_csr( l_project_id
3902                                        ,l_fin_plan_type_id)  ;
3903             FETCH l_plan_type_option_csr INTO l_dummy;
3904             IF l_plan_type_option_csr%NOTFOUND THEN
3905 
3906                   IF l_debug_mode = 'Y' THEN
3907                         pa_debug.g_err_stage := 'Plan type options does not exiss' ;
3908                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3909                   END IF;
3910 
3911                   SELECT name
3912                   INTO   l_fin_plan_type_name
3913                   FROM   pa_fin_plan_types_vl
3914                   WHERE  fin_plan_type_id = l_fin_plan_type_id;
3915 
3916                   PA_UTILS.ADD_MESSAGE
3917                            (p_app_short_name => 'PA',
3918                             p_msg_name       => 'PA_FP_NO_PLAN_TYPE_OPTION',
3919                             p_token1         => 'PROJECT',
3920                             p_value1         =>  l_amg_segment1,
3921                             p_token2         => 'PLAN_TYPE',
3922                             p_value2         =>  l_fin_plan_type_name);
3923 
3924 
3925                   CLOSE l_plan_type_option_csr;
3926 
3927                   IF l_debug_mode = 'Y' THEN
3928                          pa_debug.g_err_stage:= 'Plan type is not yet added to the project';
3929                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
3930                   END IF;
3931 
3932                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3933 
3934             ELSE
3935 
3936                   CLOSE l_plan_type_option_csr;
3937 
3938             END IF;
3939 
3940 --Added by Xin Liu to Handle the G_miss case.
3941 --28-APR-03
3942          IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3943           l_version_type := NULL;
3944          ELSE
3945             l_version_type := p_version_type;
3946          END IF;
3947 
3948             --Derive the version type.
3949             pa_fin_plan_utils.get_version_type
3950                  ( p_project_id        => l_project_id
3951                   ,p_fin_plan_type_id  => l_fin_plan_type_id
3952                   ,px_version_type     => l_version_type
3953                   ,x_return_status     => l_return_status
3954                   ,x_msg_count         => l_msg_count
3955                   ,x_msg_data          => l_msg_data);
3956 
3957              -- dbms_output.put_line('Got the version type');
3958             IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
3959 
3960                   IF l_debug_mode = 'Y' THEN
3961                         pa_debug.g_err_stage := 'get_version_type failed' ;
3962                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3963                   END IF;
3964 
3965                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3966 
3967             END IF;
3968 
3969 
3970             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
3971                  p_api_version_number => p_api_version_number
3972                 ,p_project_id         => l_project_id
3973                 ,p_fin_plan_type_id   => l_fin_plan_type_id /* Bug 3139924 */
3974                 ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
3975                 ,p_function_name      => l_module_name
3976                 ,p_version_type       => l_version_type
3977                 ,x_return_status      => l_return_status
3978                 ,x_ret_code           => l_security_ret_code );
3979 
3980             IF l_return_status <>  FND_API.G_RET_STS_SUCCESS OR
3981                l_security_ret_code = 'N' THEN
3982 
3983                   IF l_debug_mode = 'Y' THEN
3984                         pa_debug.g_err_stage := 'Security API failed' ;
3985                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3986                   END IF;
3987 
3988                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3989 
3990             END IF;
3991 
3992             -- Get the current baselined version
3993             pa_fin_plan_utils.Get_Baselined_Version_Info(
3994                            p_project_id           => l_project_id
3995                           ,p_fin_plan_type_id     => l_fin_plan_type_id
3996                           ,p_version_type         => l_version_type
3997                           ,x_fp_options_id        => l_baselined_Ver_options_id
3998                           ,x_fin_plan_version_id  => l_baselined_version_id
3999                           ,x_return_status        => l_return_status
4000                           ,x_msg_count            => l_msg_count
4001                           ,x_msg_data             => l_msg_data);
4002 
4003             IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4004             THEN
4005                  -- RAISE  FND_API.G_EXC_ERROR;
4006                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4007             END IF;
4008 
4009       END IF;--IF p_budget_type_code IS NOT NULL
4010       -- Budget Integration Validation ---------------------------------------
4011 
4012       --This validation is required only in budget model
4013       IF( p_budget_type_code IS NOT NULL
4014          AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4015 
4016 
4017             PA_BUDGET_FUND_PKG.get_budget_ctrl_options (p_project_Id => l_project_id
4018                                   , p_budget_type_code => p_budget_type_code
4019                                   , p_calling_mode     => 'BUDGET'
4020                                   , x_fck_req_flag     => l_fck_req_flag
4021                                   , x_bdgt_intg_flag   => l_bdgt_intg_flag
4022                                   , x_bdgt_ver_id      => l_bdgt_ver_id
4023                                   , x_encum_type_id    => l_encum_type_id
4024                                   , x_balance_type     => l_balance_type
4025                                   , x_return_status    => l_return_status
4026                                   , x_msg_data         => l_msg_data
4027                                   , x_msg_count        => l_msg_count
4028                                   );
4029 
4030 
4031             IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
4032             THEN
4033                   IF l_debug_mode = 'Y' THEN
4034                         pa_debug.g_err_stage := 'Unexpected error in budget ctrl options' ;
4035                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4036                   END IF;
4037 
4038                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4039 
4040 
4041             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4042             THEN
4043                  -- RAISE  FND_API.G_EXC_ERROR;
4044                  l_any_error_occurred_flag := 'Y';
4045 
4046             END IF;
4047 
4048 
4049             IF (nvl(l_fck_req_flag,'N') = 'Y')
4050             THEN
4051                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4052                   THEN
4053                         pa_interface_utils_pub.map_new_amg_msg
4054                         ( p_old_message_code => 'PA_BC_BGT_TYPE_IS_BAD_AMG'
4055                          ,p_msg_attribute    => 'CHANGE'
4056                          ,p_resize_flag      => 'N'
4057                          ,p_msg_context      => 'BUDG'
4058                          ,p_attribute1       => l_amg_segment1
4059                          ,p_attribute2       => ''
4060                          ,p_attribute3       => p_budget_type_code
4061                          ,p_attribute4       => ''
4062                          ,p_attribute5       => '');
4063                   END IF;
4064 
4065                   -- RAISE FND_API.G_EXC_ERROR;
4066                   l_any_error_occurred_flag := 'Y';
4067             END IF;
4068 
4069 
4070             -- ----------------------------------------------------------------------
4071       END IF;--end of the if for bugetary controls
4072 
4073 
4074       -- mark_as_original defaults to YES ('Y') when this is the first time this budget is baselined
4075       -- otherwise it will default to NO ('N')
4076       IF p_mark_as_original IS NULL
4077       OR p_mark_as_original = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4078       OR UPPER(p_mark_as_original) NOT IN ('N','Y') THEN
4079 
4080             IF( p_budget_type_code IS NOT NULL
4081             AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4082 
4083                   OPEN l_baselined_csr( l_project_id
4084                                ,p_budget_type_code);
4085 
4086                   FETCH l_baselined_csr INTO l_baselined_rec;
4087 
4088                   IF l_baselined_csr%NOTFOUND
4089                   THEN
4090                     l_mark_as_original := 'Y';
4091                   ELSE
4092                     l_mark_as_original := 'N';
4093                   END IF;
4094 
4095                   CLOSE l_baselined_csr;
4096 
4097             ELSE--Fin Plan Model . Get the baselined version details
4098 
4099 
4100                   IF l_baselined_version_id IS NULL
4101                   THEN
4102                     l_mark_as_original := 'Y';
4103                   ELSE
4104                     l_mark_as_original := 'N';
4105                   END IF;
4106 
4107             END IF;
4108 
4109       ELSE --Mark as original param is passed
4110             l_mark_as_original := UPPER(p_mark_as_original);
4111 
4112       END IF;
4113        -- dbms_output.put_line('Done with mark as orig');
4114 
4115 /*   -- dbms_output.put_line('Mark_as_original = '||l_mark_as_original); */
4116 
4117  -- get the budget version ID associated with this project / budget_type_code combination
4118 
4119       IF( p_budget_type_code IS NOT NULL
4120             AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4121 
4122             OPEN l_budget_versions_csr ( l_project_id
4123                                         ,p_budget_type_code);
4124 
4125             FETCH l_budget_versions_csr
4126             INTO l_budget_versions_rec;
4127 
4128             IF l_budget_versions_csr%NOTFOUND
4129             THEN
4130                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4131                   THEN
4132                         pa_interface_utils_pub.map_new_amg_msg
4133                         ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
4134                          ,p_msg_attribute    => 'CHANGE'
4135                          ,p_resize_flag      => 'N'
4136                          ,p_msg_context      => 'BUDG'
4137                          ,p_attribute1       => l_amg_segment1
4138                          ,p_attribute2       => ''
4139                          ,p_attribute3       => p_budget_type_code
4140                          ,p_attribute4       => ''
4141                          ,p_attribute5       => '');
4142                   END IF;
4143 
4144                   CLOSE l_budget_versions_csr;
4145                   RAISE FND_API.G_EXC_ERROR;
4146 
4147                   IF l_debug_mode = 'Y' THEN
4148                         pa_debug.g_err_stage := 'Curr working version does not exist' ;
4149                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4150                   END IF;
4151                   l_any_error_occurred_flag := 'Y';
4152             ELSE
4153 
4154                   CLOSE l_budget_versions_csr;
4155 
4156             END IF;
4157 
4158             l_curr_working_version_id := l_budget_versions_rec.budget_version_id;
4159 
4160       ELSE -- Fin Plan Model. Get the current working version info
4161 
4162             pa_fin_plan_utils.Get_Curr_Working_Version_Info(
4163                   p_project_id             => l_project_id
4164                   ,p_fin_plan_type_id      => l_fin_plan_type_id
4165                   ,p_version_type          => l_version_type
4166                   ,x_fp_options_id         => l_CW_ver_options_id
4167                   ,x_fin_plan_version_id   => l_curr_working_version_id
4168                   ,x_return_status         => l_return_status
4169                   ,x_msg_count             => l_msg_count
4170                   ,x_msg_data              => l_msg_data );
4171 
4172             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4173                   IF l_debug_mode = 'Y' THEN
4174                         pa_debug.g_err_stage := 'Unexpected error in Get_Baselined_Version_Info' ;
4175                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4176                   END IF;
4177                   l_any_error_occurred_flag := 'Y';
4178             END IF;
4179 
4180             IF l_curr_working_version_id IS NULL
4181             THEN
4182                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4183                   THEN
4184                         pa_interface_utils_pub.map_new_amg_msg
4185                         ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
4186                          ,p_msg_attribute    => 'CHANGE'
4187                          ,p_resize_flag      => 'N'
4188                          ,p_msg_context      => 'BUDG'
4189                          ,p_attribute1       => l_amg_segment1
4190                          ,p_attribute2       => ''
4191                          ,p_attribute3       => p_budget_type_code
4192                          ,p_attribute4       => ''
4193                          ,p_attribute5       => '');
4194                   END IF;
4195                   -- Raising the error since its not possible to proceed if there is no
4196                   -- Current working version
4197                   RAISE FND_API.G_EXC_ERROR;
4198                   l_any_error_occurred_flag := 'Y';
4199                   IF l_debug_mode = 'Y' THEN
4200                         pa_debug.g_err_stage := 'Curr working version does not exist' ;
4201                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4202                   END IF;
4203 
4204             END IF;
4205 
4206             pa_fin_plan_utils.return_and_vldt_plan_prc_code
4207             (p_budget_version_id      =>   l_curr_working_version_id
4208             ,x_final_plan_prc_code    =>   l_final_plan_prc_code
4209             ,x_targ_request_id        =>   l_targ_request_id
4210             ,x_return_status          =>   l_return_status
4211             ,x_msg_count              =>   l_msg_count
4212             ,x_msg_data               =>   l_msg_data);
4213 
4214             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4215                   IF l_debug_mode = 'Y' THEN
4216                         pa_debug.g_err_stage := 'Unexpected error in Get_Baselined_Version_Info' ;
4217                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4218                   END IF;
4219                   l_any_error_occurred_flag := 'Y';
4220             END IF;
4221 
4222 
4223       END IF;
4224 
4225       -- Call the api that performs the autobaseline checks
4226       -- Bug 3099706 : Skip the autobaseline checks if this API is called from
4227       -- PA_AGREEMENT_PUB.create_baselined_budget. This API will only be called
4228       -- in Autobaseline enabled AR plan type / budget type cases only.
4229       -- This check is valid in all other cases when a budget needs to be baselined.
4230 
4231       -- dbms_output.put_line('Value of PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB = '||PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB);
4232 
4233       IF (nvl(PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB,'N') = 'N') THEN
4234               -- dbms_output.put_line('about to call autobaseline checks API ');
4235 
4236             pa_fin_plan_utils.perform_autobasline_checks
4237             (  p_budget_version_id  => l_curr_working_version_id
4238             ,x_result             => l_result
4239             ,x_return_status      => p_return_status
4240             ,x_msg_count          => p_msg_count
4241             ,x_msg_data           => p_msg_data       );
4242 
4243             IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4244                 IF(l_debug_mode='Y') THEN
4245                     pa_debug.g_err_stage := 'Auto baseline API falied';
4246                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4247                 END IF;
4248                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4249             END IF;
4250 
4251 
4252             IF l_result = 'F' THEN
4253                 IF(l_debug_mode='Y') THEN
4254                     pa_debug.g_err_stage := 'Auto baseline checks falied';
4255                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4256                 END IF;
4257                 l_any_error_occurred_flag:='Y';
4258                 PA_UTILS.ADD_MESSAGE( p_app_short_name  => 'PA'
4259                                ,p_msg_name        => 'PA_FP_APP_REV_BL_VER_AB_PROJ'
4260                                ,p_token1          => 'PROJECT'
4261                                ,p_value1          => l_amg_segment1);
4262 
4263             END IF;
4264       END IF; -- bug 3099706
4265 
4266       IF (nvl(PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB,'N') = 'Y') THEN
4267               PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB := 'N'; -- reset the value bug 3099706
4268       END IF;
4269        -- dbms_output.put_line('Got the CW version ' || l_curr_working_version_id);
4270 
4271 
4272       -- check for budget lines in pa_resource_assignments,
4273       -- we only permit submit/baseline action when there are budget lines
4274     -- Fix for bug#8423481, for new budget we will check for budget lines in pa_resource_assignments,
4275     -- and for old model budget we will check for budget lines in pa_budget_lines
4276     -- we only permit submit/baseline action when there are budget lines
4277     IF( p_budget_type_code IS NOT NULL
4278         AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4279 
4280           OPEN l_budget_lines_csr(l_curr_working_version_id);
4281 
4282           FETCH l_budget_lines_csr INTO l_row_found;
4283 
4284           IF l_budget_lines_csr%NOTFOUND
4285           THEN
4286                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4287                 THEN
4288                       pa_interface_utils_pub.map_new_amg_msg
4289                       ( p_old_message_code => 'PA_NO_BUDGET_LINES'
4290                        ,p_msg_attribute    => 'CHANGE'
4291                        ,p_resize_flag      => 'N'
4292                        ,p_msg_context      => 'BUDG'
4293                        ,p_attribute1       => l_amg_segment1
4294                        ,p_attribute2       => ''
4295                        ,p_attribute3       => p_budget_type_code
4296                        ,p_attribute4       => ''
4297                        ,p_attribute5       => '');
4298                 END IF;
4299 
4300                 CLOSE l_budget_lines_csr;
4301                 l_any_error_occurred_flag := 'Y';
4302                 IF l_debug_mode = 'Y' THEN
4303                       pa_debug.g_err_stage := 'Budget Lines do not exist for current working version' ;
4304                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4305                 END IF;
4306           ELSE
4307                 CLOSE l_budget_lines_csr;
4308 
4309           END IF;
4310     ELSE
4311           OPEN l_resource_assignments_csr(l_curr_working_version_id);
4312 
4313           FETCH l_resource_assignments_csr INTO l_row_found;
4314 
4315           IF l_resource_assignments_csr%NOTFOUND THEN
4316 
4317 		IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4318                       pa_interface_utils_pub.map_new_amg_msg
4319                      ( p_old_message_code => 'PA_NO_BUDGET_LINES'
4320                       ,p_msg_attribute    => 'CHANGE'
4321                       ,p_resize_flag      => 'N'
4322                       ,p_msg_context      => 'BUDG'
4323                       ,p_attribute1       => l_amg_segment1
4324                       ,p_attribute2       => ''
4325                       ,p_attribute3       => p_budget_type_code
4326                       ,p_attribute4       => ''
4327                       ,p_attribute5       => '');
4328 		END IF;
4329 
4330 		CLOSE l_resource_assignments_csr;
4331                 l_any_error_occurred_flag := 'Y';
4332                 IF l_debug_mode = 'Y' THEN
4333                       pa_debug.g_err_stage := 'Budget Lines do not exist for current working version' ;
4334                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4335                 END IF;
4336           ELSE
4337                 CLOSE l_resource_assignments_csr;
4338 
4339           END IF;
4340 
4341     END IF;
4342 
4343 
4344 
4345        -- dbms_output.put_line('done with BL Check');
4346 
4347       -- verify budget (up to this date (sept 96) not implemented)
4348       --
4349       pa_budget_core.verify( x_budget_version_id  => l_curr_working_version_id
4350                             ,x_err_code           => l_err_code
4351                             ,x_err_stage          => l_err_stage
4352                             ,x_err_stack          => l_err_stack  );
4353 
4354       IF l_err_code > 0
4355       THEN
4356 
4357             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4358             THEN
4359 
4360                   IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4361                   THEN
4362                         pa_interface_utils_pub.map_new_amg_msg
4363                         ( p_old_message_code => 'PA_VERIFY_FAILED'
4364                          ,p_msg_attribute    => 'CHANGE'
4365                          ,p_resize_flag      => 'N'
4366                          ,p_msg_context      => 'BUDG'
4367                          ,p_attribute1       => l_amg_segment1
4368                          ,p_attribute2       => ''
4369                          ,p_attribute3       => p_budget_type_code
4370                          ,p_attribute4       => ''
4371                          ,p_attribute5       => '');
4372                   ELSE
4373                         pa_interface_utils_pub.map_new_amg_msg
4374                         ( p_old_message_code => l_err_stage
4375                         ,p_msg_attribute    => 'CHANGE'
4376                         ,p_resize_flag      => 'N'
4377                         ,p_msg_context      => 'BUDG'
4378                         ,p_attribute1       => l_amg_segment1
4379                         ,p_attribute2       => ''
4380                         ,p_attribute3       => p_budget_type_code
4381                         ,p_attribute4       => ''
4382                         ,p_attribute5       => '');
4383                   END IF;
4384 
4385             END IF;
4386 
4387             -- RAISE FND_API.G_EXC_ERROR;
4388             l_any_error_occurred_flag := 'Y';
4389 
4390       ELSIF l_err_code < 0
4391       THEN
4392 
4393             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4394             THEN
4395 
4396                   FND_MSG_PUB.add_exc_msg
4397                         (  p_pkg_name           => 'PA_BUDGET_CORE'
4398                         ,  p_procedure_name     => 'VERIFY'
4399                         ,  p_error_text         => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4400 
4401             END IF;
4402 
4403             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4404 
4405       END IF;
4406        -- dbms_output.put_line('About to verify budget rules');
4407 
4408       --Verify Budget Rules should be called in budget model Only. In FinPlan model
4409       --The baseline api  in fin plan pub inturn calls the verify budget rules
4410       IF p_budget_type_code IS NOT NULL
4411       AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
4412 
4413             IF l_debug_mode = 'Y' THEN
4414                   pa_debug.g_err_stage := 'About to verify the budget rules in budget model' ;
4415                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4416             END IF;
4417 
4418 
4419             -- ------------------------------------------------------------------------------------
4420             -- 29-JUL-97, jwhite
4421             --  Added SUBMISSION/BASELINE RULES and WORFLOW
4422             -- ------------------------------------------------------------------------------------
4423 
4424             -- Retrieve Required IN-parameters for Verify_Budget_Rules Calls
4425 
4426             OPEN l_budget_rules_csr(l_curr_working_version_id);
4427 
4428             FETCH l_budget_rules_csr
4429             INTO  l_resource_list_id
4430                   , l_project_type_class_code;
4431 
4432             IF ( l_budget_rules_csr%NOTFOUND)
4433             THEN
4434 
4435                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4436                   THEN
4437                         pa_interface_utils_pub.map_new_amg_msg
4438                         ( p_old_message_code => 'PA_NO_BUDGET_RULES_ATTR'
4439                          ,p_msg_attribute    => 'CHANGE'
4440                          ,p_resize_flag      => 'N'
4441                          ,p_msg_context      => 'BUDG'
4442                          ,p_attribute1       => l_amg_segment1
4443                          ,p_attribute2       => ''
4444                          ,p_attribute3       => p_budget_type_code
4445                          ,p_attribute4       => ''
4446                          ,p_attribute5       => '');
4447                   END IF;
4448 
4449                   CLOSE l_budget_rules_csr;
4450                   -- RAISE FND_API.G_EXC_ERROR;
4451                   l_any_error_occurred_flag := 'Y';
4452 
4453             ELSE
4454 
4455                   CLOSE l_budget_rules_csr;
4456 
4457             END IF;
4458 
4459 
4460             --
4461             -- SUBMISSION RULES -------------------------------------------------------------
4462             --
4463 
4464             /*   -- dbms_output.put_line('Verify Budget Rules - SUBMIT'); */
4465 
4466 
4467             PA_BUDGET_UTILS.VERIFY_BUDGET_RULES
4468             (p_draft_version_id           =>    l_curr_working_version_id
4469             , p_mark_as_original          =>    l_mark_as_original
4470             , p_event                     =>    'SUBMIT'
4471             , p_project_id                =>    l_project_id
4472             , p_budget_type_code          =>    p_budget_type_code
4473             , p_resource_list_id          =>    l_resource_list_id
4474             , p_project_type_class_code   =>    l_project_type_class_code
4475             , p_created_by                =>    l_user_id
4476             , p_calling_module            =>    'PAPMBUPB'
4477             , p_warnings_only_flag        =>    l_warnings_only_flag
4478             , p_err_msg_count             =>    l_err_msg_count
4479             , p_err_code                  =>    l_err_code
4480             , p_err_stage                 =>    l_err_stage
4481             , p_err_stack                 =>    l_err_stack
4482             );
4483 
4484             -- 11-SEP-97, jwhite: Warnings-OK Concept -----------------------------------
4485             --
4486             IF (l_err_msg_count > 0)
4487             THEN
4488                   IF (l_warnings_only_flag      = 'Y')
4489                   THEN
4490                         p_return_status := 'W';
4491                   ELSE
4492                         -- RAISE FND_API.G_EXC_ERROR;
4493                         l_any_error_occurred_flag := 'Y';
4494                   END IF;
4495              -- dbms_output.put_line('Count after verify the baseline rules is >0');
4496 
4497             END IF;
4498             --
4499 
4500             -- LOCK DRAFT BUDGET VERSION Since Primary Verification Finished
4501 
4502             OPEN l_lock_budget_csr(l_curr_working_version_id);
4503             CLOSE l_lock_budget_csr;
4504 
4505              -- dbms_output.put_line('About to verify the baseline rules');
4506             --
4507             -- BASELINE RULES -------------------------------------------------------------
4508             --
4509 
4510             PA_BUDGET_UTILS.VERIFY_BUDGET_RULES
4511                 (p_draft_version_id             =>    l_curr_working_version_id
4512                 , p_mark_as_original            =>    l_mark_as_original
4513                 , p_event                       =>    'BASELINE'
4514                 , p_project_id                  =>    l_project_id
4515                 , p_budget_type_code            =>    p_budget_type_code
4516                 , p_resource_list_id            =>    l_resource_list_id
4517                 , p_project_type_class_code     =>    l_project_type_class_code
4518                 , p_created_by                  =>    l_user_id
4519                 , p_calling_module              =>    'PAPMBUPB'
4520                 , p_warnings_only_flag          =>    l_warnings_only_flag
4521                 , p_err_msg_count               =>    l_err_msg_count
4522                 , p_err_code                    =>    l_err_code
4523                 , p_err_stage                   =>    l_err_stage
4524                 , p_err_stack                   =>    l_err_stack
4525                 );
4526 
4527             -- 11-SEP-97, jwhite: Warnings-OK Concept -----------------------------------
4528             --
4529             IF (l_err_msg_count > 0)
4530              THEN
4531                   IF (l_warnings_only_flag      = 'Y')
4532                   THEN
4533                         p_return_status := 'W';
4534                   ELSE
4535                         -- RAISE FND_API.G_EXC_ERROR;
4536                         l_any_error_occurred_flag := 'Y';
4537                   END IF;
4538             END IF;
4539 
4540       ELSE -- Verify budget rules will be called by the baseline api in fin plan model.
4541            -- Lock the version in the finplan model
4542 
4543             --Get the record version number of the current working version
4544             l_CW_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_curr_working_version_id);
4545 
4546             -- Lock the current working version
4547 
4548             pa_fin_plan_pvt.lock_unlock_version
4549                   (p_budget_version_id      => l_curr_working_version_id,
4550                   p_record_version_number   => l_CW_record_version_number,
4551                   p_action                  => 'L',
4552                   p_user_id                 => l_user_id,
4553                   p_person_id               => NULL,
4554                   x_return_status           => p_return_status,
4555                   x_msg_count               => p_msg_count,
4556                   x_msg_data                => p_msg_data) ;
4557 
4558             IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4559 
4560                   IF l_debug_mode = 'Y' THEN
4561                         pa_debug.g_err_stage := 'Error executing lock unlock version';
4562                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4563                   END IF;
4564                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4565 
4566             END IF;
4567             -- dbms_output.put_line('The no of messages in the stack 2 '||FND_MSG_PUB.count_msg);
4568 
4569       END IF;--If for buget model check
4570 
4571        -- dbms_output.put_line('Starting with workflow l_err_code '||l_err_code);
4572       --
4573 
4574       --
4575       -- ENABLE WORKFLOW?  ---------------------------------------------------
4576       --
4577 
4578       /*   -- dbms_output.put_line('Call BUDGET_WF_IS_USED'); */
4579 
4580       IF p_budget_type_code IS NOT NULL
4581       AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4582       THEN
4583 
4584             PA_BUDGET_WF.Budget_Wf_Is_Used
4585             ( p_draft_version_id          =>    l_curr_working_version_id
4586             , p_project_id                =>    l_project_id
4587             , p_budget_type_code          =>    p_budget_type_code
4588             , p_pm_product_code           =>    p_pm_product_code
4589             , p_result                    =>    l_workflow_is_used
4590             , p_err_code                  =>    l_err_code
4591             , p_err_stage                 =>    l_err_stage
4592             , p_err_stack                 =>    l_err_stack
4593             );
4594 
4595       ELSE --Fin Plan Model. Pass the version type and plan type id
4596 
4597             PA_BUDGET_WF.Budget_Wf_Is_Used
4598             ( p_draft_version_id          =>    l_curr_working_version_id
4599             , p_project_id                =>    l_project_id
4600             , p_budget_type_code          =>    NULL
4601             , p_pm_product_code           =>    p_pm_product_code
4602             , p_result                    =>    l_workflow_is_used
4603             , p_err_code                  =>    l_err_code
4604             , p_err_stage                 =>    l_err_stage
4605             , p_err_stack                 =>    l_err_stack
4606             , p_fin_plan_type_id          =>    l_fin_plan_type_id
4607             , p_version_type              =>    l_version_type
4608             );
4609 
4610       END IF;
4611 
4612        -- dbms_output.put_line('l_err_code after is WD '||l_err_code);
4613       IF (l_err_code > 0)
4614       THEN
4615             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4616             THEN
4617                   FND_MESSAGE.SET_NAME('PA','PA_WF_CLIENT_EXTN');
4618                   FND_MESSAGE.SET_TOKEN('EXTNAME', 'PA_BUDGET_WF.BUDGET_WF_IS_USED');
4619                               FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4620                   FND_MESSAGE.SET_TOKEN('ERRMSG', l_err_stage);
4621                   FND_MSG_PUB.add;
4622             END IF;
4623 
4624             -- RAISE FND_API.G_EXC_ERROR;
4625             l_any_error_occurred_flag := 'Y';
4626       ELSIF (l_err_code < 0)
4627       THEN
4628             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4629             THEN
4630                   FND_MSG_PUB.add_exc_msg
4631                         (  p_pkg_name           => 'PA_BUDGET_WF'
4632                         ,  p_procedure_name     => 'BUDGET_WF_IS_USED'
4633                         ,  p_error_text         => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4634             END IF;
4635 
4636             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4637       END IF;
4638 
4639       -- Stop further processing if any errors are reported
4640       -- dbms_output.put_line('l_any_error_occurred_flag is '||l_any_error_occurred_flag);
4641       IF(l_any_error_occurred_flag='Y') THEN
4642             IF(l_debug_mode='Y') THEN
4643                   pa_debug.g_err_stage := 'About to display all the messages';
4644                   pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4645             END IF;
4646              -- dbms_output.put_line('Displaying all messages');
4647             l_return_status := FND_API.G_RET_STS_ERROR;
4648             l_any_error_occurred_flag := 'Y';
4649             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4650       END IF;
4651        -- dbms_output.put_line('Starting with workflow = T');
4652 
4653       IF (l_workflow_is_used = 'T' ) THEN
4654 
4655             -- ENABLE Workflow !!! -------------------------------------------------------------
4656 
4657             -- when the client extension returns 'T',
4658             -- the baseline action will be skipped here, since the baselining is done later
4659             -- by the baseliner as part of the workflow process.
4660 
4661             /*   -- dbms_output.put_line('WORKFLOW USED...Update Draft to Submitted, IN_ROUTE'); */
4662 
4663             UPDATE pa_budget_versions
4664             SET budget_status_code = 'S', WF_status_code = 'IN_ROUTE'
4665             WHERE budget_version_id = l_curr_working_version_id;
4666 
4667 /*   -- dbms_output.put_line('WORKFLOW USED...START_BUDGET_WF API'); */
4668 
4669             PA_BUDGET_WF.Start_Budget_Wf
4670             (p_draft_version_id           =>    l_curr_working_version_id
4671             , p_project_id                =>    l_project_id
4672             , p_budget_type_code          =>    p_budget_type_code
4673             , p_mark_as_original          =>    l_mark_as_original
4674             , p_err_code                  =>      l_err_code
4675             , p_err_stage                 =>    l_err_stage
4676             , p_err_stack                 =>    l_err_stack
4677             );
4678 
4679             IF (l_err_code > 0)
4680             THEN
4681                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4682                   THEN
4683                         FND_MESSAGE.SET_NAME('PA','PA_WF_CLIENT_EXTN');
4684                         FND_MESSAGE.SET_TOKEN('EXTNAME', 'PA_BUDGET_WF.START_BUDGET_WF');
4685                                     FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4686                         FND_MESSAGE.SET_TOKEN('ERRMSG', l_err_stage);
4687                         FND_MSG_PUB.add;
4688                   END IF;
4689 
4690                   RAISE FND_API.G_EXC_ERROR;
4691 
4692             ELSIF (l_err_code < 0)
4693             THEN
4694                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4695                   THEN
4696                         FND_MSG_PUB.add_exc_msg
4697                               (  p_pkg_name           => 'PA_BUDGET_WF'
4698                               ,  p_procedure_name     => 'START_BUDGET_WF'
4699                               ,  p_error_text         => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4700                   END IF;
4701 
4702                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4703             END IF;
4704 
4705 
4706 
4707             p_workflow_started            := 'Y';
4708 
4709             -- NOTE: A commit is required to actually start/activate  the workflow instance opened
4710             -- by the previous Start_Budget_WF procedure.
4711 
4712 
4713             IF FND_API.TO_BOOLEAN( p_commit )
4714             THEN
4715                   COMMIT;
4716             END IF;
4717 
4718             RETURN;
4719       ELSE
4720 
4721       -- STRAIGHT BASELINE, NO Workflow
4722 
4723 
4724             UPDATE pa_budget_versions
4725             SET budget_status_code = 'S', WF_status_code = NULL
4726             WHERE budget_version_id = l_curr_working_version_id;
4727 
4728 
4729       END IF;
4730 
4731       IF l_debug_mode = 'Y' THEN
4732             pa_debug.g_err_stage := 'Budget rules verified' ;
4733             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4734       END IF;
4735 
4736 -- -------------------------------------------------------------------------------------
4737 
4738  -- calling private API 'BASELINE'
4739     -- Hardcode p_verify_budget_rules to 'N' becuase verify_budget_rules already called.
4740 
4741 /*   -- dbms_output.put_line('Call PA_BUDGET_CORE.BASELINE'); */
4742 
4743 
4744 
4745 
4746       IF p_budget_type_code IS NOT NULL
4747       AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
4748 
4749             IF l_debug_mode = 'Y' THEN
4750                   pa_debug.g_err_stage := 'About to baseline the budget ' ;
4751                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4752             END IF;
4753 
4754             -- dbms_output.put_line('About to call the baseline api in budget core');
4755             pa_budget_core.baseline ( x_draft_version_id    => l_curr_working_version_id
4756                              ,x_mark_as_original      => l_mark_as_original
4757                              ,x_verify_budget_rules     => 'N'
4758                              ,x_err_code        => l_err_code
4759                              ,x_err_stage       => l_err_stage
4760                              ,x_err_stack       => l_err_stack    );
4761 
4762 
4763 
4764             IF l_err_code > 0
4765             THEN
4766 
4767             /*   -- dbms_output.put_line('Err_code: '||l_err_code); */
4768             /*   -- dbms_output.put_line('Err_stage: '||l_err_stage); */
4769             /*   -- dbms_output.put_line('Err_stack: '||l_err_stack); */
4770 
4771                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4772                   THEN
4773 
4774                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4775                         THEN
4776                               pa_interface_utils_pub.map_new_amg_msg
4777                               ( p_old_message_code => 'PA_BASELINE_FAILED'
4778                                ,p_msg_attribute    => 'CHANGE'
4779                                ,p_resize_flag      => 'N'
4780                                ,p_msg_context      => 'BUDG'
4781                                ,p_attribute1       => l_amg_segment1
4782                                ,p_attribute2       => ''
4783                                ,p_attribute3       => p_budget_type_code
4784                                ,p_attribute4       => ''
4785                                ,p_attribute5       => '');
4786                         ELSE
4787                               pa_interface_utils_pub.map_new_amg_msg
4788                               ( p_old_message_code => l_err_stage
4789                                ,p_msg_attribute    => 'CHANGE'
4790                                ,p_resize_flag      => 'N'
4791                                ,p_msg_context      => 'BUDG'
4792                                ,p_attribute1       => l_amg_segment1
4793                                ,p_attribute2       => ''
4794                                ,p_attribute3       => p_budget_type_code
4795                                ,p_attribute4       => ''
4796                                ,p_attribute5       => '');
4797                         END IF;
4798 
4799                   END IF;
4800 
4801                   RAISE FND_API.G_EXC_ERROR;
4802 
4803             ELSIF l_err_code < 0
4804             THEN
4805 
4806                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4807                   THEN
4808 
4809       /*   -- dbms_output.put_line('Err_code: '||l_err_code); */
4810       /*   -- dbms_output.put_line('Err_stage: '||l_err_stage); */
4811       /*   -- dbms_output.put_line('Err_stack: '||l_err_stack); */
4812 
4813                         FND_MSG_PUB.add_exc_msg
4814                               (  p_pkg_name           => 'PA_BUDGET_CORE'
4815                               ,  p_procedure_name     => 'BASELINE'
4816                               ,  p_error_text         => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4817 
4818                   END IF;
4819 
4820                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4821 
4822             END IF;
4823 
4824        -- after calling BASELINE, set the budget_status_code back to 'W' (Working)
4825        -- the concept of submitting budget is not available in the public API's!
4826 
4827             UPDATE pa_budget_versions
4828             SET budget_status_code = 'W'
4829             WHERE budget_version_id = l_curr_working_version_id;
4830 
4831       ELSE--Fin Plan Model. Call the baseline api in fin plan pub
4832 
4833             --Get the record version number of the current baselined version
4834             IF l_baselined_version_id IS NOT NULL THEN
4835                   --Get the record version number
4836                   l_CB_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_baselined_version_id);
4837             ELSE
4838                   l_CB_record_version_number:=NULL;
4839             END IF;
4840 
4841             --Get the record version number of the current working version  (As it will be incremented by the lock_unlock_version)
4842             l_CW_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_curr_working_version_id);
4843 
4844             IF l_debug_mode = 'Y' THEN
4845                   pa_debug.g_err_stage := 'About to baseline the finplan ' ;
4846                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4847             END IF;
4848 
4849              -- dbms_output.put_line('About to call baseline api');
4850 
4851             IF (l_mark_as_original = 'Y') THEN
4852 
4853                   -- Fetch the details of  original baseline version
4854                   -- so that they can be used to set its orginal flag
4855 
4856                   OPEN l_orig_baselined_ver_csr(l_project_id,
4857                                                 l_fin_plan_type_id,
4858                                                 l_version_type);
4859                   FETCH  l_orig_baselined_ver_csr INTO l_orig_baselined_ver_rec;
4860                   CLOSE l_orig_baselined_ver_csr;
4861 
4862             END IF;
4863 
4864             pa_fin_plan_pub.Baseline
4865                   ( p_project_id                 => l_project_id
4866                    ,p_budget_version_id          => l_curr_working_version_id
4867                    ,p_record_version_number      => l_CW_record_version_number
4868                    ,p_orig_budget_version_id     => l_baselined_version_id
4869                    ,p_orig_record_version_number => l_CB_record_version_number
4870                    ,x_fc_version_created_flag    => l_fc_version_created_flag
4871                    ,x_return_status              => l_return_status
4872                    ,x_msg_count                  => l_msg_count
4873                    ,x_msg_data                   => l_msg_data );
4874 
4875             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4876 
4877                   IF l_debug_mode = 'Y' THEN
4878                         pa_debug.g_err_stage:= 'Error in fin plan pub baseline ';
4879                         pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
4880                   END IF;
4881                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4882 
4883             END IF;
4884 
4885              -- dbms_output.put_line('About to call mark as original api');
4886 
4887             --If the mark as original parameter is Y then call the api that sets the just now baselined version
4888             --as the orginal version
4889             IF (l_mark_as_original = 'Y') THEN
4890 
4891                   IF l_debug_mode = 'Y' THEN
4892                         pa_debug.g_err_stage := 'About to mark the created version as original baselined ' ;
4893                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4894                   END IF;
4895 
4896                   -- Fetch the details current baselined version
4897                   pa_fin_plan_utils.Get_Baselined_Version_Info(
4898                            p_project_id           => l_project_id
4899                           ,p_fin_plan_type_id     => l_fin_plan_type_id
4900                           ,p_version_type         => l_version_type
4901                           ,x_fp_options_id        => l_baselined_Ver_options_id
4902                           ,x_fin_plan_version_id  => l_baselined_version_id
4903                           ,x_return_status        => l_return_status
4904                           ,x_msg_count            => l_msg_count
4905                           ,x_msg_data             => l_msg_data);
4906 
4907                   IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4908                   THEN
4909                        -- RAISE  FND_API.G_EXC_ERROR;
4910                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4911                   END IF;
4912 
4913                   l_CB_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_baselined_version_id);
4914 
4915                   IF l_orig_baselined_ver_rec.budget_version_id IS NOT NULL THEN
4916 
4917                         l_orig_baselined_ver_rec.record_version_number:=pa_fin_plan_utils.Retrieve_Record_Version_Number
4918                                                                             (l_orig_baselined_ver_rec.budget_version_id);
4919 
4920                   END IF;
4921 
4922                    -- dbms_output.put_line('The verid to be marked as orig is '||l_baselined_version_id);
4923                    -- dbms_output.put_line('The orig verid to be marked as orig is '||l_orig_baselined_ver_rec.budget_version_id);
4924 
4925                   pa_fin_plan_pub.Mark_As_Original
4926                         ( p_project_id                  => l_project_id
4927                          ,p_budget_version_id           => l_baselined_version_id
4928                          ,p_record_version_number       => l_Cb_record_version_number
4929                          ,p_orig_budget_version_id      => l_orig_baselined_ver_rec.budget_version_id
4930                          ,p_orig_record_version_number  => l_orig_baselined_ver_rec.record_version_number
4931                          ,x_return_status               => l_return_status
4932                          ,x_msg_count                   => l_msg_count
4933                          ,x_msg_data                    => l_msg_data      );
4934 
4935                   IF l_return_status <> FND_API.G_RET_STS_SUCCESS  OR
4936                      l_msg_count <> 0THEN
4937 
4938                         IF l_debug_mode = 'Y' THEN
4939                               pa_debug.g_err_stage:= 'Error while marking the newly created version as the original version ';
4940                               pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
4941                         END IF;
4942                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4943 
4944                   END IF;
4945 
4946             END IF;
4947 
4948             --Bug 6453987 - skkoppul - Unlocking the working version
4949 
4950             pa_fin_plan_pvt.lock_unlock_version
4951                   (p_budget_version_id      => l_curr_working_version_id,
4952                   p_record_version_number   => l_CW_record_version_number,
4953                   p_action                  => 'U',
4954                   p_user_id                 => l_user_id,
4955                   p_person_id               => NULL,
4956                   x_return_status           => p_return_status,
4957                   x_msg_count               => p_msg_count,
4958                   x_msg_data                => p_msg_data) ;
4959 
4960             IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4961 
4962                   IF l_debug_mode = 'Y' THEN
4963                         pa_debug.g_err_stage := 'Error executing lock unlock version';
4964                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4965                   END IF;
4966                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4967 
4968             END IF;
4969 
4970             --End changes bug 6453987 - skkoppul
4971 
4972 
4973       END IF;-- IF p_budget_type_code IS NOT NULL
4974 
4975 
4976       IF FND_API.TO_BOOLEAN( p_commit )
4977       THEN
4978             COMMIT;
4979       END IF;
4980 
4981       IF l_debug_mode = 'Y' THEN
4982             pa_debug.g_err_stage:= 'Leaving baseline budget';
4983             pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level3);
4984       END IF;
4985 
4986       pa_debug.reset_curr_function;
4987 
4988 
4989 EXCEPTION
4990 
4991       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
4992             ROLLBACK TO baseline_budget_pub;
4993 
4994             IF p_return_status IS NULL OR
4995                p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4996                   p_return_status := FND_API.G_RET_STS_ERROR;
4997             END IF;
4998             l_msg_count := FND_MSG_PUB.count_msg;
4999             IF l_msg_count = 1 THEN
5000                   PA_INTERFACE_UTILS_PUB.get_messages
5001                        (p_encoded        => FND_API.G_TRUE,
5002                         p_msg_index      => 1,
5003                         p_msg_count      => l_msg_count,
5004                         p_msg_data       => l_msg_data,
5005                         p_data           => l_data,
5006                         p_msg_index_out  => l_msg_index_out);
5007 
5008                   p_msg_data  := l_data;
5009                   p_msg_count := l_msg_count;
5010             ELSE
5011                   p_msg_count := l_msg_count;
5012             END IF;
5013             pa_debug.reset_curr_function;
5014 
5015             RETURN;
5016 
5017       WHEN FND_API.G_EXC_ERROR
5018       THEN
5019 
5020 
5021             ROLLBACK TO baseline_budget_pub;
5022 
5023             p_return_status := FND_API.G_RET_STS_ERROR;
5024 
5025             FND_MSG_PUB.Count_And_Get
5026             (   p_count       =>    p_msg_count ,
5027                 p_data        =>    p_msg_data  );
5028 
5029             pa_debug.reset_curr_function;
5030 
5031       WHEN FND_API.G_EXC_UNEXPECTED_ERROR
5032       THEN
5033 
5034 
5035             ROLLBACK TO baseline_budget_pub;
5036 
5037             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5038 
5039             FND_MSG_PUB.Count_And_Get
5040             (   p_count       =>    p_msg_count ,
5041                 p_data        =>    p_msg_data  );
5042 
5043             pa_debug.reset_curr_function;
5044 
5045       WHEN ROW_ALREADY_LOCKED
5046       THEN
5047 
5048             ROLLBACK TO baseline_budget_pub;
5049 
5050             p_return_status := FND_API.G_RET_STS_ERROR ;
5051 
5052                   IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5053                   THEN
5054                         FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
5055                         FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
5056                         FND_MESSAGE.SET_TOKEN('TASK',    '');
5057                         FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
5058                         FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
5059                         FND_MESSAGE.SET_TOKEN('START_DATE', '');
5060                         FND_MESSAGE.SET_TOKEN('ENTITY', 'BUDGET_VERSIONS');
5061                         FND_MSG_PUB.Add;
5062                   END IF;
5063 
5064             FND_MSG_PUB.Count_And_Get
5065             (p_count                =>    p_msg_count
5066             , p_data                =>    p_msg_data
5067             );
5068             pa_debug.reset_curr_function;
5069 
5070 
5071       WHEN OTHERS
5072       THEN
5073 
5074 
5075             ROLLBACK TO baseline_budget_pub;
5076 
5077             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5078 
5079             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5080             THEN
5081                   FND_MSG_PUB.add_exc_msg
5082                   (  p_pkg_name           => G_PKG_NAME
5083                   ,  p_procedure_name     => l_api_name );
5084 
5085             END IF;
5086 
5087             FND_MSG_PUB.Count_And_Get
5088             (   p_count       =>    p_msg_count ,
5089             p_data            =>    p_msg_data  );
5090 
5091             pa_debug.reset_curr_function;
5092 
5093 
5094 END baseline_budget;
5095 
5096 
5097 ----------------------------------------------------------------------------------------
5098 --Name:               add_budget_line
5099 --Type:               Procedure
5100 --Description:        This procedure can be used to add a budgetline to an
5101 --                    existing WORKING budget.
5102 --
5103 --Called subprograms:
5104 --          pa_budget_pvt.insert_budget_line
5105 --          pa_budget_lines_v_pkg.check_overlapping_dates
5106 --          PA_BUDGET_UTILS.summerize_project_totals
5107 --
5108 --
5109 --
5110 --History:
5111 --    01-OCT-1996        L. de Werker    Created
5112 --    19-NOV-1996    L. de Werker    Changed to use pa_budget_pvt.insert_budget_line
5113 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
5114 --    26-APR-2005    Ritesh Shukla   Bug 4224464: FP.M Changes - Did changes in
5115 --                                   add_budget_line for FP.M FinPlan model.
5116 
5117 PROCEDURE Add_Budget_Line
5118 ( p_api_version_number       IN  NUMBER
5119  ,p_commit                   IN  VARCHAR2   := FND_API.G_FALSE
5120  ,p_init_msg_list            IN  VARCHAR2   := FND_API.G_FALSE
5121  ,p_msg_count                OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5122  ,p_msg_data                 OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5123  ,p_return_status            OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5124  ,p_pm_product_code          IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5125  ,p_pa_project_id            IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5126  ,p_pm_project_reference     IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5127  ,p_budget_type_code         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5128  ,p_pa_task_id               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5129  ,p_pm_task_reference        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5130  ,p_resource_alias           IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5131  ,p_resource_list_member_id  IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5132    --Bug 16604257 : CBS RBS Phase 2 API changes
5133   ,p_cost_code                IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5134   ,p_cbs_element_id           IN    NUMBER      	  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5135  --Bug 16604257
5136  ,p_budget_start_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5137  ,p_budget_end_date          IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5138  ,p_period_name              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5139  ,p_description              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5140  ,p_raw_cost                 IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5141  ,p_burdened_cost            IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5142  ,p_revenue                  IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5143  ,p_quantity                 IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5144  ,p_pm_budget_line_reference IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5145  ,p_attribute_category       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5146  ,p_attribute1               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5147  ,p_attribute2               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5148  ,p_attribute3               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5149  ,p_attribute4               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5150  ,p_attribute5               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5151  ,p_attribute6               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5152  ,p_attribute7               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5153  ,p_attribute8               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5154  ,p_attribute9               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5155  ,p_attribute10              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5156  ,p_attribute11              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5157  ,p_attribute12              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5158  ,p_attribute13              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5159  ,p_attribute14              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5160  ,p_attribute15              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5161 --Parameters added for FP.M
5162  ,p_fin_plan_type_id         IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5163  ,p_fin_plan_type_name       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5164  ,p_version_type             IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5165  ,p_version_number           IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5166  ,p_currency_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5167  ,p_change_reason_code       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
5168 
5169 IS
5170 
5171 
5172      l_api_name       CONSTANT    VARCHAR2(30)  := 'Add_Budget_Line';
5173      l_err_code                   NUMBER;
5174      l_err_stage                  VARCHAR2(120);
5175      l_err_stack                  VARCHAR2(630);
5176 
5177      l_project_id                 NUMBER := p_pa_project_id;
5178      l_budget_type_code           pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
5179      l_fin_plan_type_id           NUMBER := p_fin_plan_type_id;
5180      l_fin_plan_type_name         pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
5181      l_version_type               pa_budget_versions.version_type%TYPE := p_version_type;
5182      l_budget_version_id          NUMBER;
5183      l_budget_entry_method_code   pa_budget_entry_methods.budget_entry_method_code%TYPE;
5184      l_resource_list_id           pa_resource_lists_all_bg.resource_list_id%TYPE;
5185      l_budget_amount_code         pa_budget_types.budget_amount_code%type;
5186      l_entry_level_code           pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
5187      l_time_phased_code           pa_proj_fp_options.cost_time_phased_code%TYPE;
5188      l_multi_curr_flag            pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
5189      l_categorization_code        pa_budget_entry_methods.categorization_code%TYPE;
5190      l_record_version_number      pa_budget_versions.record_version_number%TYPE;
5191 
5192      l_resource_name              VARCHAR2(80); --bug 3711693
5193 
5194      l_budget_lines_in            budget_line_in_tbl_type;
5195      l_budget_lines_out_tbl       budget_line_out_tbl_type;
5196      l_mfc_cost_type_id_tbl       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5197      l_etc_method_code_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
5198      l_spread_curve_id_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5199 
5200      l_finplan_lines_tab          pa_fin_plan_pvt.budget_lines_tab;
5201      l_version_info_rec           pa_fp_gen_amount_utils.fp_cols;
5202 
5203      --Following parameters are needed for amounts check
5204      l_amount_set_id              pa_proj_fp_options.all_amount_set_id%TYPE;
5205      lx_raw_cost_flag             VARCHAR2(1) := NULL;
5206      lx_burdened_cost_flag        VARCHAR2(1) := NULL;
5207      lx_revenue_flag              VARCHAR2(1) := NULL;
5208      lx_cost_qty_flag             VARCHAR2(1) := NULL;
5209      lx_revenue_qty_flag          VARCHAR2(1) := NULL;
5210      lx_all_qty_flag              VARCHAR2(1) := NULL;
5211      l_bill_rate_flag             pa_fin_plan_amount_sets.bill_rate_flag%type;
5212      l_cost_rate_flag             pa_fin_plan_amount_sets.cost_rate_flag%type;
5213      l_burden_rate_flag           pa_fin_plan_amount_sets.burden_rate_flag%type;
5214      l_allow_qty_flag             VARCHAR2(1);
5215 
5216      l_msg_count                  NUMBER := 0;
5217      l_msg_data                   VARCHAR2(2000);
5218      l_function_allowed           VARCHAR2(1);
5219      l_module_name                VARCHAR2(80);
5220      l_data                       VARCHAR2(2000);
5221      l_msg_index_out              NUMBER;
5222 
5223      l_amg_project_number        pa_projects_all.segment1%TYPE;
5224      l_amg_task_number            VARCHAR2(50);
5225 
5226      --debug variables
5227      l_debug_mode                 VARCHAR2(1);
5228      l_debug_level2      CONSTANT NUMBER := 2;
5229      l_debug_level3      CONSTANT NUMBER := 3;
5230      l_debug_level4      CONSTANT NUMBER := 4;
5231      l_debug_level5      CONSTANT NUMBER := 5;
5232      --Added for bug 6408139 to pass G_PA_MISS_CHAR
5233      l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5234 
5235 
5236 	   l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
5237 	   lc_cbs_element_id NUMBER :=p_cbs_element_id;
5238 
5239 
5240 BEGIN
5241 
5242 
5243      --Standard begin of API savepoint
5244 
5245      SAVEPOINT add_budget_line_pub;
5246 
5247      p_msg_count := 0;
5248      p_return_status := FND_API.G_RET_STS_SUCCESS;
5249      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5250      l_module_name := g_module_name || ':Add_Budget_Line';
5251 
5252      IF ( l_debug_mode = 'Y' )
5253      THEN
5254            pa_debug.set_curr_function( p_function   => 'Add_Budget_Line',
5255                                        p_debug_mode => l_debug_mode );
5256      END IF;
5257 
5258      IF ( l_debug_mode = 'Y' )
5259      THEN
5260            pa_debug.g_err_stage:='Entering ' || l_api_name;
5261            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5262      END IF;
5263 
5264      --Initialize the message table if requested.
5265      IF FND_API.TO_BOOLEAN( p_init_msg_list )
5266      THEN
5267           FND_MSG_PUB.initialize;
5268      END IF;
5269 
5270      --Set API return status to success
5271      p_return_status     := FND_API.G_RET_STS_SUCCESS;
5272 
5273 	  	  	  --Get the CBS flag 16604257
5274 	   l_cbs_enabled_project := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => l_project_id);
5275 	   If l_cbs_enabled_project='N' Then
5276 			lc_cbs_element_id  :=null;
5277 		else
5278 
5279 				IF lc_cbs_element_id is not null AND lc_cbs_element_id<>PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5280 							lc_cbs_element_id :=PA_ALTERNATE_TASK_PVT.convert_cost_code_to_id(
5281 										 p_cost_code,l_project_id );
5282 				END IF;
5283 		End if;
5284 
5285 
5286      --Call PA_BUDGET_PVT.validate_header_info to do the necessary
5287      --header level validations
5288      PA_BUDGET_PVT.validate_header_info
5289           ( p_api_version_number          => p_api_version_number
5290            ,p_api_name                    => l_api_name
5291            ,p_init_msg_list               => p_init_msg_list
5292            ,px_pa_project_id              => l_project_id
5293            ,p_pm_project_reference        => p_pm_project_reference
5294            ,p_pm_product_code             => p_pm_product_code
5295            ,px_budget_type_code           => l_budget_type_code
5296            ,px_fin_plan_type_id           => l_fin_plan_type_id
5297            ,px_fin_plan_type_name         => l_fin_plan_type_name
5298            ,px_version_type               => l_version_type
5299            ,p_budget_version_number       => p_version_number
5300            ,p_change_reason_code          => NULL
5301            ,p_function_name               => 'PA_PM_ADD_BUDGET_LINE'
5302            ,x_budget_entry_method_code    => l_budget_entry_method_code
5303            ,x_resource_list_id            => l_resource_list_id
5304            ,x_budget_version_id           => l_budget_version_id
5305            ,x_fin_plan_level_code         => l_entry_level_code
5306            ,x_time_phased_code            => l_time_phased_code
5307            ,x_plan_in_multi_curr_flag     => l_multi_curr_flag
5308            ,x_budget_amount_code          => l_budget_amount_code
5309            ,x_categorization_code         => l_categorization_code
5310            ,x_project_number              => l_amg_project_number
5311            /* Plan Amount Entry flags introduced by bug 6408139 */
5312            /*Passing all as G_PA_MISS_CHAR since validations not required*/
5313            ,px_raw_cost_flag         =>   l_pa_miss_char
5314            ,px_burdened_cost_flag    =>   l_pa_miss_char
5315            ,px_revenue_flag          =>   l_pa_miss_char
5316            ,px_cost_qty_flag         =>   l_pa_miss_char
5317            ,px_revenue_qty_flag      =>   l_pa_miss_char
5318            ,px_all_qty_flag          =>   l_pa_miss_char
5319            ,px_bill_rate_flag        =>   l_pa_miss_char
5320            ,px_cost_rate_flag        =>   l_pa_miss_char
5321            ,px_burden_rate_flag      =>   l_pa_miss_char
5322            /* Plan Amount Entry flags introduced by bug 6408139 */
5323            ,x_msg_count                   => p_msg_count
5324            ,x_msg_data                    => p_msg_data
5325            ,x_return_status               => p_return_status );
5326 
5327      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5328            IF(l_debug_mode='Y') THEN
5329                  pa_debug.g_err_stage := 'validate header info API falied';
5330                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5331            END IF;
5332            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5333      END IF;
5334 
5335 
5336      --Get Task number for AMG Messages
5337 
5338      IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5339           l_budget_lines_in(1).pa_task_id := NULL;
5340      ELSE
5341           l_budget_lines_in(1).pa_task_id := p_pa_task_id;
5342      END IF;
5343 
5344      IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5345           l_budget_lines_in(1).pm_task_reference := NULL;
5346      ELSE
5347           l_budget_lines_in(1).pm_task_reference := p_pm_task_reference;
5348      END IF;
5349 
5350      l_amg_task_number := PA_INTERFACE_UTILS_PUB.get_task_number_amg
5351      (p_task_number=> ''
5352      ,p_task_reference => l_budget_lines_in(1).pm_task_reference
5353      ,p_task_id => l_budget_lines_in(1).pa_task_id);
5354 
5355 
5356      --Insert budget line for old FORMS based Budgets Model
5357      IF l_budget_type_code IS NOT NULL
5358      THEN
5359 	  -- CBS is not supported for Form based budgets 16604257
5360 	    IF l_cbs_enabled_project = 'Y' THEN
5361 
5362 			PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
5363                                  ,p_msg_name       =>  'PA_FP_CBS_ENABLED'
5364                                  );
5365         p_return_status := FND_API.G_RET_STS_ERROR;
5366         RAISE FND_API.G_EXC_ERROR;
5367 
5368 		END IF;
5369 
5370           --Insert BUDGET LINES
5371           PA_BUDGET_PVT.insert_budget_line
5372               ( p_return_status              => p_return_status
5373                ,p_pa_project_id              => l_project_id
5374                ,p_budget_type_code           => l_budget_type_code
5375                ,p_pa_task_id                 => p_pa_task_id
5376                ,p_pm_task_reference          => p_pm_task_reference
5377                ,p_resource_alias             => p_resource_alias
5378                ,p_member_id                  => p_resource_list_member_id
5379                ,p_budget_start_date          => p_budget_start_date
5380                ,p_budget_end_date            => p_budget_end_date
5381                ,p_period_name                => p_period_name
5382                ,p_description                => p_description
5383                ,p_raw_cost                   => p_raw_cost
5384                ,p_burdened_cost              => p_burdened_cost
5385                ,p_revenue                    => p_revenue
5386                ,p_quantity                   => p_quantity
5387                ,p_pm_product_code            => p_pm_product_code
5388                ,p_pm_budget_line_reference   => p_pm_budget_line_reference
5389                ,p_resource_list_id           => l_resource_list_id
5390                ,p_attribute_category         => p_attribute_category
5391                ,p_attribute1                 => p_attribute1
5392                ,p_attribute2                 => p_attribute2
5393                ,p_attribute3                 => p_attribute3
5394                ,p_attribute4                 => p_attribute4
5395                ,p_attribute5                 => p_attribute5
5396                ,p_attribute6                 => p_attribute6
5397                ,p_attribute7                 => p_attribute7
5398                ,p_attribute8                 => p_attribute8
5399                ,p_attribute9                 => p_attribute9
5400                ,p_attribute10                => p_attribute10
5401                ,p_attribute11                => p_attribute11
5402                ,p_attribute12                => p_attribute12
5403                ,p_attribute13                => p_attribute13
5404                ,p_attribute14                => p_attribute14
5405                ,p_attribute15                => p_attribute15
5406                ,p_time_phased_type_code      => l_time_phased_code
5407                ,p_entry_level_code           => l_entry_level_code
5408                ,p_budget_amount_code         => l_budget_amount_code
5409                ,p_budget_entry_method_code   => l_budget_entry_method_code
5410                ,p_categorization_code        => l_categorization_code
5411                ,p_budget_version_id          => l_budget_version_id
5412                ,p_change_reason_code         => p_change_reason_code);
5413 
5414           IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
5415           THEN
5416               IF(l_debug_mode='Y') THEN
5417                      pa_debug.g_err_stage := 'PA_BUDGET_PVT.insert_budget_line API falied - unexpected error';
5418                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5419               END IF;
5420               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5421 
5422           ELSIF p_return_status = FND_API.G_RET_STS_ERROR
5423           THEN
5424               IF(l_debug_mode='Y') THEN
5425                      pa_debug.g_err_stage := 'PA_BUDGET_PVT.insert_budget_line API falied - expected error';
5426                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5427               END IF;
5428               RAISE  FND_API.G_EXC_ERROR;
5429           END IF;
5430 
5431 
5432           --check for overlapping dates
5433           PA_BUDGET_LINES_V_PKG.check_overlapping_dates
5434                     ( x_budget_version_id  => l_budget_version_id  --IN
5435                      ,x_resource_name  => l_resource_name  --OUT
5436                      ,x_err_code       => l_err_code       );
5437 
5438           IF l_err_code > 0
5439           THEN
5440 
5441              IF(l_debug_mode='Y') THEN
5442                     pa_debug.g_err_stage := 'check_overlapping_dates API falied';
5443                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5444              END IF;
5445 
5446              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5447              THEN
5448                  FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
5449                  FND_MESSAGE.SET_TOKEN('Rname',l_resource_name);
5450 
5451                  FND_MSG_PUB.add;
5452              END IF;
5453 
5454              RAISE FND_API.G_EXC_ERROR;
5455 
5456           ELSIF l_err_code < 0
5457           THEN
5458 
5459              IF(l_debug_mode='Y') THEN
5460                     pa_debug.g_err_stage := 'check_overlapping_dates API falied';
5461                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5462              END IF;
5463 
5464              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5465              THEN
5466                  FND_MSG_PUB.add_exc_msg
5467                      (  p_pkg_name       => 'PA_BUDGET_LINES_V_PKG'
5468                      ,  p_procedure_name => 'CHECK_OVERLAPPING_DATES'
5469                      ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
5470              END IF;
5471 
5472              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5473 
5474           END IF;
5475 
5476 
5477           --summarizing the totals in the table pa_budget_versions
5478           PA_BUDGET_UTILS.summerize_project_totals
5479                ( x_budget_version_id => l_budget_version_id
5480                , x_err_code      => l_err_code
5481                , x_err_stage     => l_err_stage
5482                , x_err_stack     => l_err_stack        );
5483 
5484           IF l_err_code > 0  THEN
5485 
5486              IF(l_debug_mode='Y') THEN
5487                     pa_debug.g_err_stage := 'summerize_project_totals API falied';
5488                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5489              END IF;
5490 
5491              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5492              THEN
5493                  IF NOT pa_project_pvt.check_valid_message(l_err_stage)
5494                  THEN
5495                      pa_interface_utils_pub.map_new_amg_msg
5496                       ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
5497                        ,p_msg_attribute    => 'CHANGE'
5498                        ,p_resize_flag      => 'N'
5499                        ,p_msg_context      => 'BUDG'
5500                        ,p_attribute1       => l_amg_project_number
5501                        ,p_attribute2       => l_amg_task_number
5502                        ,p_attribute3       => p_budget_type_code
5503                        ,p_attribute4       => l_resource_name
5504                        ,p_attribute5       => to_char(p_budget_start_date));
5505                  ELSE
5506                      pa_interface_utils_pub.map_new_amg_msg
5507                       ( p_old_message_code => l_err_stage
5508                        ,p_msg_attribute    => 'CHANGE'
5509                        ,p_resize_flag      => 'N'
5510                        ,p_msg_context      => 'BUDG'
5511                        ,p_attribute1       => l_amg_project_number
5512                        ,p_attribute2       => l_amg_task_number
5513                        ,p_attribute3       => p_budget_type_code
5514                        ,p_attribute4       => l_resource_name
5515                        ,p_attribute5       => to_char(p_budget_start_date));
5516                  END IF;
5517              END IF;
5518 
5519              RAISE FND_API.G_EXC_ERROR;
5520 
5521           ELSIF l_err_code < 0  THEN
5522 
5523              IF(l_debug_mode='Y') THEN
5524                     pa_debug.g_err_stage := 'summerize_project_totals API falied';
5525                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5526              END IF;
5527 
5528              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5529              THEN
5530                  FND_MSG_PUB.add_exc_msg
5531                      (  p_pkg_name       => 'PA_BUDGET_UTILS'
5532                      ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
5533                      ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
5534              END IF;
5535 
5536              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5537 
5538           END IF;
5539 
5540 
5541      ELSE --insert budget line for new FinPlan model
5542 
5543 
5544           --Store the budget line data in budget line table
5545 
5546           IF p_resource_alias = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5547                l_budget_lines_in(1).resource_alias := NULL;
5548           ELSE
5549                l_budget_lines_in(1).resource_alias := p_resource_alias;
5550           END IF;
5551 
5552           IF p_resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5553                l_budget_lines_in(1).resource_list_member_id := NULL;
5554           ELSE
5555                l_budget_lines_in(1).resource_list_member_id := p_resource_list_member_id;
5556           END IF;
5557 
5558 		  --Bug 16604257 : CBS RBS Phase 2 API changes
5559 		 IF p_cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5560                l_budget_lines_in(1).cbs_element_id := NULL;
5561           ELSE
5562                l_budget_lines_in(1).cbs_element_id := p_cbs_element_id;
5563           END IF;
5564 
5565 		IF p_cost_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5566                l_budget_lines_in(1).cost_code := NULL;
5567           ELSE
5568                l_budget_lines_in(1).cost_code := p_cost_code;
5569           END IF;
5570 		  --Bug 16604257
5571 
5572           IF p_budget_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
5573                l_budget_lines_in(1).budget_start_date := NULL;
5574           ELSE
5575                l_budget_lines_in(1).budget_start_date := p_budget_start_date;
5576           END IF;
5577 
5578           IF p_budget_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
5579                l_budget_lines_in(1).budget_end_date := NULL;
5580           ELSE
5581                l_budget_lines_in(1).budget_end_date := p_budget_end_date;
5582           END IF;
5583 
5584           IF p_period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5585                l_budget_lines_in(1).period_name := NULL;
5586           ELSE
5587                l_budget_lines_in(1).period_name := p_period_name;
5588           END IF;
5589 
5590           IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5591                l_budget_lines_in(1).description := NULL;
5592           ELSE
5593                l_budget_lines_in(1).description := p_description;
5594           END IF;
5595 
5596           IF p_raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5597                l_budget_lines_in(1).raw_cost := NULL;
5598           ELSE
5599                l_budget_lines_in(1).raw_cost := p_raw_cost;
5600           END IF;
5601 
5602           IF p_burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5603                l_budget_lines_in(1).burdened_cost := NULL;
5604           ELSE
5605                l_budget_lines_in(1).burdened_cost := p_burdened_cost;
5606           END IF;
5607 
5608           IF p_revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5609                l_budget_lines_in(1).revenue := NULL;
5610           ELSE
5611                l_budget_lines_in(1).revenue := p_revenue;
5612           END IF;
5613 
5614           IF p_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5615                l_budget_lines_in(1).quantity := NULL;
5616           ELSE
5617                l_budget_lines_in(1).quantity := p_quantity;
5618           END IF;
5619 
5620           IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5621                l_budget_lines_in(1).pm_product_code := NULL;
5622           ELSE
5623                l_budget_lines_in(1).pm_product_code := p_pm_product_code;
5624           END IF;
5625 
5626           IF p_pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5627                l_budget_lines_in(1).pm_budget_line_reference := NULL;
5628           ELSE
5629                l_budget_lines_in(1).pm_budget_line_reference := p_pm_budget_line_reference;
5630           END IF;
5631 
5632           IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5633                l_budget_lines_in(1).attribute_category := NULL;
5634           ELSE
5635                l_budget_lines_in(1).attribute_category := p_attribute_category;
5636           END IF;
5637 
5638           IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5639                l_budget_lines_in(1).attribute1 := NULL;
5640           ELSE
5641                l_budget_lines_in(1).attribute1 := p_attribute1;
5642           END IF;
5643 
5644           IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5645                l_budget_lines_in(1).attribute2 := NULL;
5646           ELSE
5647                l_budget_lines_in(1).attribute2 := p_attribute2;
5648           END IF;
5649 
5650           IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5651                l_budget_lines_in(1).attribute3 := NULL;
5652           ELSE
5653                l_budget_lines_in(1).attribute3 := p_attribute3;
5654           END IF;
5655 
5656           IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5657                l_budget_lines_in(1).attribute4 := NULL;
5658           ELSE
5659                l_budget_lines_in(1).attribute4 := p_attribute4;
5660           END IF;
5661 
5662           IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5663                l_budget_lines_in(1).attribute5 := NULL;
5664           ELSE
5665                l_budget_lines_in(1).attribute5 := p_attribute5;
5666           END IF;
5667 
5668           IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5669                l_budget_lines_in(1).attribute6 := NULL;
5670           ELSE
5671                l_budget_lines_in(1).attribute6 := p_attribute6;
5672           END IF;
5673 
5674           IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5675                l_budget_lines_in(1).attribute7 := NULL;
5676           ELSE
5677                l_budget_lines_in(1).attribute7 := p_attribute7;
5678           END IF;
5679 
5680           IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5681                l_budget_lines_in(1).attribute8 := NULL;
5682           ELSE
5683                l_budget_lines_in(1).attribute8 := p_attribute8;
5684           END IF;
5685 
5686           IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5687                l_budget_lines_in(1).attribute9 := NULL;
5688           ELSE
5689                l_budget_lines_in(1).attribute9 := p_attribute9;
5690           END IF;
5691 
5692           IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5693                l_budget_lines_in(1).attribute10 := NULL;
5694           ELSE
5695                l_budget_lines_in(1).attribute10 := p_attribute10;
5696           END IF;
5697 
5698           IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5699                l_budget_lines_in(1).attribute11 := NULL;
5700           ELSE
5701                l_budget_lines_in(1).attribute11 := p_attribute11;
5702           END IF;
5703 
5704           IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5705                l_budget_lines_in(1).attribute12 := NULL;
5706           ELSE
5707                l_budget_lines_in(1).attribute12 := p_attribute12;
5708           END IF;
5709 
5710           IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5711                l_budget_lines_in(1).attribute13 := NULL;
5712           ELSE
5713                l_budget_lines_in(1).attribute13 := p_attribute13;
5714           END IF;
5715 
5716           IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5717                l_budget_lines_in(1).attribute14 := NULL;
5718           ELSE
5719                l_budget_lines_in(1).attribute14 := p_attribute14;
5720           END IF;
5721 
5722           IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5723                l_budget_lines_in(1).attribute15 := NULL;
5724           ELSE
5725                l_budget_lines_in(1).attribute15 := p_attribute15;
5726           END IF;
5727 
5728           IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5729                l_budget_lines_in(1).txn_currency_code := NULL;
5730           ELSE
5731                l_budget_lines_in(1).txn_currency_code := p_currency_code;
5732           END IF;
5733 
5734           IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5735                l_budget_lines_in(1).change_reason_code := NULL;
5736           ELSE
5737                l_budget_lines_in(1).change_reason_code := p_change_reason_code;
5738           END IF;
5739 
5740           --Since currency attributes are defaulted to G_MISS values in
5741           --PA_BUDGET_PUB.budget_line_in_rec_type so we have to explicitly
5742           --make them null
5743           l_budget_lines_in(1).projfunc_cost_rate_type      := NULL;
5744           l_budget_lines_in(1).projfunc_cost_rate_date_type := NULL;
5745           l_budget_lines_in(1).projfunc_cost_rate_date      := NULL;
5746           l_budget_lines_in(1).projfunc_cost_exchange_rate  := NULL;
5747           l_budget_lines_in(1).projfunc_rev_rate_type       := NULL;
5748           l_budget_lines_in(1).projfunc_rev_rate_date_type  := NULL;
5749           l_budget_lines_in(1).projfunc_rev_rate_date       := NULL;
5750           l_budget_lines_in(1).projfunc_rev_exchange_rate   := NULL;
5751           l_budget_lines_in(1).project_cost_rate_type       := NULL;
5752           l_budget_lines_in(1).project_cost_rate_date_type  := NULL;
5753           l_budget_lines_in(1).project_cost_rate_date       := NULL;
5754           l_budget_lines_in(1).project_cost_exchange_rate   := NULL;
5755           l_budget_lines_in(1).project_rev_rate_type        := NULL;
5756           l_budget_lines_in(1).project_rev_rate_date_type   := NULL;
5757           l_budget_lines_in(1).project_rev_rate_date        := NULL;
5758           l_budget_lines_in(1).project_rev_exchange_rate    := NULL;
5759 
5760 
5761           --Send the budget version id to validate_budget_lines API for
5762           --actuals on FORECAST check
5763           l_version_info_rec.x_budget_version_id := l_budget_version_id;
5764 
5765           --Get entry method options and validate them against cost, rev and quantity passed
5766           l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
5767 
5768           PA_FIN_PLAN_UTILS.get_plan_amount_flags(
5769                          P_AMOUNT_SET_ID      => l_amount_set_id
5770                         ,X_RAW_COST_FLAG      => lx_raw_cost_flag
5771                         ,X_BURDENED_FLAG      => lx_burdened_cost_flag
5772                         ,X_REVENUE_FLAG       => lx_revenue_flag
5773                         ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
5774                         ,X_REV_QUANTITY_FLAG  => lx_revenue_qty_flag
5775                         ,X_ALL_QUANTITY_FLAG  => lx_all_qty_flag
5776                         ,X_BILL_RATE_FLAG     => l_bill_rate_flag
5777                         ,X_COST_RATE_FLAG     => l_cost_rate_flag
5778                         ,X_BURDEN_RATE_FLAG   => l_burden_rate_flag
5779                         ,x_message_count      => p_msg_count
5780                         ,x_return_status      => p_return_status
5781                         ,x_message_data       => p_msg_data) ;
5782 
5783           IF p_return_status <> FND_API.G_RET_STS_SUCCESS
5784           THEN
5785                IF(l_debug_mode='Y') THEN
5786                     pa_debug.g_err_stage := 'get_plan_amount_flags API falied';
5787                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5788                END IF;
5789                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5790           END IF;
5791 
5792           --Derive the value of all_qty_flag based on version_type
5793           IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
5794                l_allow_qty_flag := lx_cost_qty_flag;
5795           ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
5796                l_allow_qty_flag := lx_revenue_qty_flag;
5797           ELSE
5798                l_allow_qty_flag :=  lx_all_qty_flag;
5799           END IF;
5800 
5801 
5802           --Validate the budget line data
5803           PA_BUDGET_PVT.Validate_Budget_Lines
5804                ( p_calling_context             => 'BUDGET_LINE_LEVEL_VALIDATION'
5805                 ,p_pa_project_id               => l_project_id
5806                 ,p_budget_type_code            => l_budget_type_code
5807                 ,p_fin_plan_type_id            => l_fin_plan_type_id
5808                 ,p_version_type                => l_version_type
5809                 ,p_resource_list_id            => l_resource_list_id
5810                 ,p_time_phased_code            => l_time_phased_code
5811                 ,p_budget_entry_method_code    => l_budget_entry_method_code
5812                 ,p_entry_level_code            => l_entry_level_code
5813                 ,p_allow_qty_flag              => l_allow_qty_flag
5814                 ,p_allow_raw_cost_flag         => lx_raw_cost_flag
5815                 ,p_allow_burdened_cost_flag    => lx_burdened_cost_flag
5816                 ,p_allow_revenue_flag          => lx_revenue_flag
5817                 ,p_multi_currency_flag         => l_multi_curr_flag
5818                 ,p_project_cost_rate_type      => NULL
5819                 ,p_project_cost_rate_date_typ  => NULL
5820                 ,p_project_cost_rate_date      => NULL
5821                 ,p_project_cost_exchange_rate  => NULL
5822                 ,p_projfunc_cost_rate_type     => NULL
5823                 ,p_projfunc_cost_rate_date_typ => NULL
5824                 ,p_projfunc_cost_rate_date     => NULL
5825                 ,p_projfunc_cost_exchange_rate => NULL
5826                 ,p_project_rev_rate_type       => NULL
5827                 ,p_project_rev_rate_date_typ   => NULL
5828                 ,p_project_rev_rate_date       => NULL
5829                 ,p_project_rev_exchange_rate   => NULL
5830                 ,p_projfunc_rev_rate_type      => NULL
5831                 ,p_projfunc_rev_rate_date_typ  => NULL
5832                 ,p_projfunc_rev_rate_date      => NULL
5833                 ,p_projfunc_rev_exchange_rate  => NULL
5834                 ,p_version_info_rec            => l_version_info_rec
5835                 ,px_budget_lines_in            => l_budget_lines_in
5836                 ,x_budget_lines_out            => l_budget_lines_out_tbl
5837                 ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
5838                 ,x_etc_method_code_tbl         => l_etc_method_code_tbl
5839                 ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
5840                 ,x_msg_count                   => p_msg_count
5841                 ,x_msg_data                    => p_msg_data
5842                 ,x_return_status               => p_return_status );
5843 
5844           IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5845                 IF(l_debug_mode='Y') THEN
5846                       pa_debug.g_err_stage := 'validate budget lines API falied';
5847                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5848                 END IF;
5849                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5850           END IF;
5851 
5852 
5853           --Copy the fin plan line data into a table of type pa_fp_rollup_tmp
5854 
5855           l_finplan_lines_tab(1).system_reference1            := l_budget_lines_in(1).pa_task_id;
5856           l_finplan_lines_tab(1).system_reference2            := l_budget_lines_in(1).resource_list_member_id;
5857 		  l_finplan_lines_tab(1).system_reference3            := l_budget_lines_in(1).cbs_element_id;-- Added for CBS 16604257
5858           l_finplan_lines_tab(1).start_date                   := l_budget_lines_in(1).budget_start_date;
5859           l_finplan_lines_tab(1).end_date                     := l_budget_lines_in(1).budget_end_date;
5860           l_finplan_lines_tab(1).period_name                  := l_budget_lines_in(1).period_name;
5861           l_finplan_lines_tab(1).txn_currency_code            := l_budget_lines_in(1).txn_currency_code;
5862           l_finplan_lines_tab(1).txn_raw_cost                 := l_budget_lines_in(1).raw_cost;
5863           l_finplan_lines_tab(1).txn_burdened_cost            := l_budget_lines_in(1).burdened_cost;
5864           l_finplan_lines_tab(1).txn_revenue                  := l_budget_lines_in(1).revenue;
5865           l_finplan_lines_tab(1).quantity                     := l_budget_lines_in(1).quantity;
5866           l_finplan_lines_tab(1).change_reason_code           := l_budget_lines_in(1).change_reason_code;
5867           l_finplan_lines_tab(1).description                  := l_budget_lines_in(1).description;
5868           l_finplan_lines_tab(1).attribute_category           := l_budget_lines_in(1).attribute_category;
5869           l_finplan_lines_tab(1).attribute1                   := l_budget_lines_in(1).attribute1;
5870           l_finplan_lines_tab(1).attribute2                   := l_budget_lines_in(1).attribute2;
5871           l_finplan_lines_tab(1).attribute3                   := l_budget_lines_in(1).attribute3;
5872           l_finplan_lines_tab(1).attribute4                   := l_budget_lines_in(1).attribute4;
5873           l_finplan_lines_tab(1).attribute5                   := l_budget_lines_in(1).attribute5;
5874           l_finplan_lines_tab(1).attribute6                   := l_budget_lines_in(1).attribute6;
5875           l_finplan_lines_tab(1).attribute7                   := l_budget_lines_in(1).attribute7;
5876           l_finplan_lines_tab(1).attribute8                   := l_budget_lines_in(1).attribute8;
5877           l_finplan_lines_tab(1).attribute9                   := l_budget_lines_in(1).attribute9;
5878           l_finplan_lines_tab(1).attribute10                  := l_budget_lines_in(1).attribute10;
5879           l_finplan_lines_tab(1).attribute11                  := l_budget_lines_in(1).attribute11;
5880           l_finplan_lines_tab(1).attribute12                  := l_budget_lines_in(1).attribute12;
5881           l_finplan_lines_tab(1).attribute13                  := l_budget_lines_in(1).attribute13;
5882           l_finplan_lines_tab(1).attribute14                  := l_budget_lines_in(1).attribute14;
5883           l_finplan_lines_tab(1).attribute15                  := l_budget_lines_in(1).attribute15;
5884           l_finplan_lines_tab(1).projfunc_cost_rate_type      := l_budget_lines_in(1).projfunc_cost_rate_type;
5885           l_finplan_lines_tab(1).projfunc_cost_rate_date_type := l_budget_lines_in(1).projfunc_cost_rate_date_type;
5886           l_finplan_lines_tab(1).projfunc_cost_rate_date      := l_budget_lines_in(1).projfunc_cost_rate_date;
5887           l_finplan_lines_tab(1).projfunc_cost_exchange_rate  := l_budget_lines_in(1).projfunc_cost_exchange_rate;
5888           l_finplan_lines_tab(1).projfunc_rev_rate_type       := l_budget_lines_in(1).projfunc_rev_rate_type;
5889           l_finplan_lines_tab(1).projfunc_rev_rate_date_type  := l_budget_lines_in(1).projfunc_rev_rate_date_type;
5890           l_finplan_lines_tab(1).projfunc_rev_rate_date       := l_budget_lines_in(1).projfunc_rev_rate_date;
5891           l_finplan_lines_tab(1).projfunc_rev_exchange_rate   := l_budget_lines_in(1).projfunc_rev_exchange_rate;
5892           l_finplan_lines_tab(1).project_cost_rate_type       := l_budget_lines_in(1).project_cost_rate_type;
5893           l_finplan_lines_tab(1).project_cost_rate_date_type  := l_budget_lines_in(1).project_cost_rate_date_type;
5894           l_finplan_lines_tab(1).project_cost_rate_date       := l_budget_lines_in(1).project_cost_rate_date;
5895           l_finplan_lines_tab(1).project_cost_exchange_rate   := l_budget_lines_in(1).project_cost_exchange_rate;
5896           l_finplan_lines_tab(1).project_rev_rate_type        := l_budget_lines_in(1).project_rev_rate_type;
5897           l_finplan_lines_tab(1).project_rev_rate_date_type   := l_budget_lines_in(1).project_rev_rate_date_type;
5898           l_finplan_lines_tab(1).project_rev_rate_date        := l_budget_lines_in(1).project_rev_rate_date;
5899           l_finplan_lines_tab(1).project_rev_exchange_rate    := l_budget_lines_in(1).project_rev_exchange_rate;
5900           l_finplan_lines_tab(1).pm_product_code              := l_budget_lines_in(1).pm_product_code;
5901           l_finplan_lines_tab(1).pm_budget_line_reference     := l_budget_lines_in(1).pm_budget_line_reference;
5902           l_finplan_lines_tab(1).quantity_source              := 'I';
5903           l_finplan_lines_tab(1).raw_cost_source              := 'I';
5904           l_finplan_lines_tab(1).burdened_cost_source         := 'I';
5905           l_finplan_lines_tab(1).revenue_source               := 'I';
5906           l_finplan_lines_tab(1).resource_assignment_id       := -1;
5907 
5908 
5909           --Lock the budget version before inserting a budget line
5910           l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
5911                                      (p_budget_version_id => l_budget_version_id);
5912 
5913           PA_FIN_PLAN_PVT.lock_unlock_version
5914           ( p_budget_version_id       => l_budget_version_id
5915            ,p_record_version_number   => l_record_version_number
5916            ,p_action                  => 'L'
5917            ,p_user_id                 => FND_GLOBAL.User_id
5918            ,p_person_id               => null
5919            ,x_return_status           => p_return_status
5920            ,x_msg_count               => p_msg_count
5921            ,x_msg_data                => p_msg_data);
5922 
5923           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
5924                 -- Error message is not added here as the api lock_unlock_version
5925                 -- adds the message to stack
5926                 IF(l_debug_mode='Y') THEN
5927                       pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
5928                       pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
5929                 END IF;
5930                 RAISE  FND_API.G_EXC_ERROR;
5931           END IF;
5932 
5933           --Call PA_FIN_PLAN_PVT.add_fin_plan_lines. This api takes care of inserting
5934           --budget lines data in all relevant tables.
5935           PA_FIN_PLAN_PVT.add_fin_plan_lines
5936                ( p_calling_context      => PA_FP_CONSTANTS_PKG.G_AMG_API--Bug 4224464.Changed this to AMG_API as this is a AMG flow.
5937                 ,p_fin_plan_version_id  => l_budget_version_id
5938                 ,p_finplan_lines_tab    => l_finplan_lines_tab
5939                 ,x_return_status        => p_return_status
5940                 ,x_msg_count            => p_msg_count
5941                 ,x_msg_data             => p_msg_data );
5942 
5943           IF p_return_status <> FND_API.G_RET_STS_SUCCESS
5944           THEN
5945                IF(l_debug_mode='Y') THEN
5946                     pa_debug.g_err_stage := 'PA_FIN_PLAN_PVT.add_fin_plan_lines API falied';
5947                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5948                END IF;
5949                RAISE  FND_API.G_EXC_ERROR;
5950           END IF;
5951 
5952 
5953           --unlock the budget version after inserting the budget line
5954           l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
5955                                      (p_budget_version_id => l_budget_version_id);
5956 
5957           PA_FIN_PLAN_PVT.lock_unlock_version
5958           ( p_budget_version_id       => l_budget_version_id
5959            ,p_record_version_number   => l_record_version_number
5960            ,p_action                  => 'U'
5961            ,p_user_id                 => FND_GLOBAL.User_id
5962            ,p_person_id               => null
5963            ,x_return_status           => p_return_status
5964            ,x_msg_count               => p_msg_count
5965            ,x_msg_data                => p_msg_data);
5966 
5967           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
5968                 -- Error message is not added here as the api lock_unlock_version
5969                 -- adds the message to stack
5970                 IF(l_debug_mode='Y') THEN
5971                       pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
5972                       pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
5973                 END IF;
5974                 RAISE  FND_API.G_EXC_ERROR;
5975           END IF;
5976 
5977 
5978      END IF; --end of code to insert budget line
5979 
5980 
5981      IF FND_API.to_boolean( p_commit )
5982      THEN
5983           COMMIT;
5984      END IF;
5985 
5986      IF(l_debug_mode='Y') THEN
5987            pa_debug.g_err_stage := 'Exiting ' || l_api_name;
5988            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5989      END IF;
5990 
5991      IF ( l_debug_mode = 'Y' ) THEN
5992            pa_debug.reset_curr_function;
5993      END IF;
5994 
5995 EXCEPTION
5996 
5997      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
5998      THEN
5999 
6000      ROLLBACK TO add_budget_line_pub;
6001 
6002      p_return_status := FND_API.G_RET_STS_ERROR;
6003      l_msg_count := FND_MSG_PUB.count_msg;
6004 
6005      IF l_msg_count = 1 and p_msg_data IS NULL THEN
6006            PA_INTERFACE_UTILS_PUB.get_messages
6007            (p_encoded        => FND_API.G_TRUE
6008            ,p_msg_index      => 1
6009            ,p_msg_count      => l_msg_count
6010            ,p_msg_data       => l_msg_data
6011            ,p_data           => l_data
6012            ,p_msg_index_out  => l_msg_index_out);
6013            p_msg_data  := l_data;
6014            p_msg_count := l_msg_count;
6015      ELSE
6016            p_msg_count := l_msg_count;
6017      END IF;
6018 
6019      IF ( l_debug_mode = 'Y' ) THEN
6020            pa_debug.reset_curr_function;
6021      END IF;
6022 
6023      RETURN;
6024 
6025 
6026      WHEN FND_API.G_EXC_ERROR
6027      THEN
6028 
6029      ROLLBACK TO add_budget_line_pub;
6030 
6031      p_return_status := FND_API.G_RET_STS_ERROR;
6032 
6033      FND_MSG_PUB.count_and_get
6034      (   p_count     =>  p_msg_count ,
6035          p_data      =>  p_msg_data  );
6036 
6037      IF ( l_debug_mode = 'Y' ) THEN
6038            pa_debug.reset_curr_function;
6039      END IF;
6040 
6041 
6042      WHEN FND_API.G_EXC_UNEXPECTED_ERROR
6043      THEN
6044 
6045      ROLLBACK TO add_budget_line_pub;
6046 
6047      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6048 
6049      FND_MSG_PUB.count_and_get
6050      (   p_count     =>  p_msg_count ,
6051          p_data      =>  p_msg_data  );
6052 
6053      IF ( l_debug_mode = 'Y' ) THEN
6054            pa_debug.reset_curr_function;
6055      END IF;
6056 
6057 
6058      WHEN ROW_ALREADY_LOCKED
6059      THEN
6060 
6061      ROLLBACK TO add_budget_line_pub;
6062 
6063      p_return_status := FND_API.G_RET_STS_ERROR;
6064 
6065      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6066      THEN
6067            FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
6068            FND_MESSAGE.set_token('PROJECT', l_amg_project_number);
6069            FND_MESSAGE.set_token('TASK', l_amg_task_number);
6070            FND_MESSAGE.set_token('BUDGET_TYPE', l_budget_type_code);
6071            FND_MESSAGE.set_token('SOURCE_NAME', '');
6072            FND_MESSAGE.set_token('START_DATE', '');
6073            FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_LINE_CODE');
6074            FND_MSG_PUB.add;
6075      END IF;
6076 
6077      FND_MSG_PUB.count_and_get
6078      (   p_count     =>  p_msg_count ,
6079          p_data      =>  p_msg_data  );
6080 
6081      IF ( l_debug_mode = 'Y' ) THEN
6082            pa_debug.reset_curr_function;
6083      END IF;
6084 
6085 
6086      WHEN OTHERS
6087      THEN
6088 
6089      ROLLBACK TO add_budget_line_pub;
6090 
6091      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6092 
6093      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6094      THEN
6095         FND_MSG_PUB.add_exc_msg
6096         (  p_pkg_name       => G_PKG_NAME
6097         ,  p_procedure_name => l_api_name );
6098      END IF;
6099 
6100      FND_MSG_PUB.count_and_get
6101      (   p_count     =>  p_msg_count ,
6102          p_data      =>  p_msg_data  );
6103 
6104      IF ( l_debug_mode = 'Y' ) THEN
6105            pa_debug.reset_curr_function;
6106      END IF;
6107 
6108 END Add_Budget_Line;
6109 
6110 
6111 ----------------------------------------------------------------------------------------
6112 --Name:               delete_draft_budget
6113 --Type:               Procedure
6114 --Description:        This procedure can be used to delete a draft budget
6115 --
6116 --
6117 --Called subprograms:
6118 --
6119 --
6120 --
6121 --History:
6122 --    07-OCT-1996        L. de Werker    Created
6123 --    07-DEC-1996        L. de Werker    Added locking mechanism
6124 --    19-MAR-2003        Srikanth        Made Changes to make this api work for Fin Plan Model
6125 --    11-APR-2005        Rishukla        Bug 4224464: FP M Changes for delete_draft_budget
6126 
6127 PROCEDURE delete_draft_budget
6128 ( p_api_version_number          IN  NUMBER
6129  ,p_commit                      IN  VARCHAR2    := FND_API.G_FALSE
6130  ,p_init_msg_list               IN  VARCHAR2    := FND_API.G_FALSE
6131  ,p_msg_count                   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6132  ,p_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6133  ,p_return_status               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6134  ,p_pm_product_code             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6135  ,p_pa_project_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6136  ,p_pm_project_reference        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6137  ,p_budget_type_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6138 
6139  -- Parameters required for Fin Plan Model
6140  ,p_fin_plan_type_name          IN  pa_fin_plan_types_vl.name%TYPE
6141  ,p_fin_plan_type_id            IN  pa_fin_plan_types_b.fin_plan_type_id%TYPE
6142  ,p_version_number              IN  pa_budget_versions.version_number%TYPE
6143  ,p_version_type                IN  pa_budget_versions.version_type%TYPE
6144  )
6145 
6146 IS
6147 
6148       CURSOR l_budget_version_csr
6149       ( p_project_id NUMBER
6150       , p_budget_type_code VARCHAR2  )
6151       IS
6152       SELECT budget_version_id
6153       FROM pa_budget_versions
6154       WHERE project_id = p_project_id
6155       AND   budget_type_code = p_budget_type_code
6156       AND   budget_status_code = 'W'
6157       AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
6158 
6159 
6160       CURSOR l_budget_type_csr
6161       ( p_budget_type_code VARCHAR2 )
6162       IS
6163       SELECT 1
6164       FROM   pa_budget_types
6165       WHERE  budget_type_code = p_budget_type_code;
6166 
6167       --Bug 4224464: Following cursor has been added as part of
6168       --FP M Changes for delete_draft_budget
6169       --This cursor is used to check if a fin_plan_type_id is
6170       --used to store workplan data
6171       CURSOR l_use_for_wp_csr
6172       ( p_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE)
6173       IS
6174       SELECT 1
6175       FROM pa_fin_plan_types_b
6176       WHERE fin_plan_type_id = p_fin_plan_type_id
6177       AND   use_for_workplan_flag = 'Y';
6178 
6179 
6180       CURSOR l_lock_budget_csr( p_budget_version_id NUMBER )
6181       IS
6182       SELECT 'x'
6183       FROM   pa_budget_versions bv
6184       ,      pa_resource_assignments ra
6185       ,      pa_budget_lines bl
6186       WHERE  bv.budget_version_id = p_budget_version_id
6187       AND    bv.budget_version_id = ra.budget_version_id (+)
6188       AND    ra.resource_assignment_id = bl.resource_assignment_id (+)
6189       AND    bv.ci_id IS NULL         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause bv.ci_id IS NULL--Bug # 3507156
6190 
6191       FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
6192 
6193       l_api_name               CONSTANT    VARCHAR2(30)        := 'delete_draft_budget';
6194 
6195       i                                NUMBER;
6196       l_return_status                  VARCHAR2(1);
6197       l_err_code                       NUMBER;
6198       l_err_stage                      VARCHAR2(120);
6199       l_err_stack                      VARCHAR2(630);
6200       l_dummy                          NUMBER :=0;
6201       l_budget_version_id              NUMBER;
6202       l_ci_id                          pa_budget_versions.ci_id%TYPE;
6203       l_project_id                     NUMBER;
6204       l_budget_type_code               VARCHAR2(30);
6205       l_msg_count                      NUMBER ;
6206       l_msg_data                       VARCHAR2(2000);
6207       l_function_allowed               VARCHAR2(1);
6208       l_resp_id                        NUMBER := 0;
6209       l_user_id                        NUMBER := 0;
6210       l_module_name                    VARCHAR2(80) := g_module_name ||'.DELETE_DRAFT_BUDGET';
6211       l_fp_options_id                  NUMBER;
6212 
6213       --needed to get the field values associated to a AMG message
6214 
6215       CURSOR   l_amg_project_csr
6216       (p_pa_project_id pa_projects.project_id%type)
6217       IS
6218       SELECT   segment1
6219       FROM     pa_projects p
6220       WHERE p.project_id = p_pa_project_id;
6221 
6222       l_amg_segment1       VARCHAR2(25);
6223 
6224       --Included the following variables as part of Changes due to Fin Plan Model
6225       l_any_error_occurred_flag        VARCHAR2(1):='N';
6226       l_baseline_funding_flag          VARCHAR2(1):='N';
6227       l_data                           VARCHAR2(2000);
6228       l_msg_index_out                  NUMBER;
6229       l_debug_mode                     VARCHAR2(1);
6230 
6231       l_debug_level3                   CONSTANT NUMBER := 3;
6232       l_debug_level5                   CONSTANT NUMBER := 5;
6233       l_security_ret_code              VARCHAR2(1);
6234       l_fin_plan_type_id               NUMBER;
6235       l_version_type                   pa_budget_versions.version_type%TYPE;
6236       l_proj_fp_options_id             NUMBER;
6237       l_result                         VARCHAR2(1);
6238       l_record_version_number          pa_budget_versions.record_version_number%TYPE;
6239       l_fin_plan_type_name             pa_fin_plan_types_tl.name%TYPE;
6240 --Added by Xin Liu. 28-APR-03
6241       ll_fin_plan_type_id               pa_proj_fp_options.fin_plan_type_id%TYPE;
6242       ll_fin_plan_type_name             pa_fin_plan_types_tl.name%TYPE;
6243       ll_version_type                   pa_budget_versions.version_type%TYPE;
6244       ll_version_number                 pa_budget_versions.version_number%TYPE;
6245 
6246 BEGIN
6247 
6248       --  Standard begin of API savepoint
6249 
6250       SAVEPOINT delete_draft_budget_pub;
6251 
6252       --  Standard call to check for call compatibility.
6253 
6254       IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
6255                                          p_api_version_number   ,
6256                                          l_api_name             ,
6257                                          G_PKG_NAME             )
6258       THEN
6259 
6260             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6261 
6262       END IF;
6263 
6264       p_msg_count := 0;
6265       p_return_status := FND_API.G_RET_STS_SUCCESS;
6266       l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6267 
6268       IF ( l_debug_mode = 'Y' )
6269       THEN
6270             pa_debug.set_curr_function( p_function   => 'delete_draft_budget',
6271                                         p_debug_mode => l_debug_mode );
6272       END IF;
6273 
6274       --  Initialize the message table if requested.
6275 
6276       IF FND_API.TO_BOOLEAN( p_init_msg_list )
6277       THEN
6278 
6279             FND_MSG_PUB.initialize;
6280 
6281       END IF;
6282       -- This api will initialize the data that will be used by the map_new_amg_msg.
6283       l_resp_id := FND_GLOBAL.Resp_id;
6284       l_user_id := FND_GLOBAL.User_id;
6285 
6286        -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
6287        -- 28-APR-03
6288       IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6289                         ll_fin_plan_type_id := NULL;
6290       ELSE
6291                         ll_fin_plan_type_id := p_fin_plan_type_id;
6292       END IF;
6293 
6294       IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6295                         ll_fin_plan_type_name := NULL;
6296       ELSE
6297                         ll_fin_plan_type_name := p_fin_plan_type_name;
6298       END IF;
6299 
6300       IF p_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6301                         ll_version_number := NULL;
6302       ELSE
6303                         ll_version_number := p_version_number;
6304       END IF;
6305 
6306 
6307       -- Changes done.
6308 
6309 
6310       -- Both Budget Type Code and Fin Plan Type Id should not be null
6311       -- Changes done by Xin Liu, 24-APR-03, for Fin plan Type Id and Name for G_PA_MISS_XXX
6312       IF ((p_budget_type_code IS NULL  OR
6313            p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )  AND
6314           (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
6315           (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) )THEN
6316 
6317             PA_UTILS.ADD_MESSAGE
6318                   (p_app_short_name => 'PA',
6319                   p_msg_name        => 'PA_BUDGET_FP_BOTH_MISSING');
6320 
6321             IF l_debug_mode = 'Y' THEN
6322                   pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
6323                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6324             END IF;
6325 
6326             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6327 
6328       END IF;
6329 
6330       -- Both Budget Type Code and Fin Plan Type Id should not be not null
6331       -- Changes done by Xin Liu, 24-APR-03, for Fin plan Type Id and Name for G_PA_MISS_XXX
6332       IF ((p_budget_type_code IS NOT NULL AND
6333           p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  AND
6334         ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
6335          (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) THEN
6336 
6337             PA_UTILS.ADD_MESSAGE
6338                   (p_app_short_name => 'PA',
6339                   p_msg_name        => 'PA_BUDGET_FP_BOTH_NOT_NULL');
6340 
6341             IF l_debug_mode = 'Y' THEN
6342                   pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
6343                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6344             END IF;
6345 
6346             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6347 
6348       END IF;
6349 
6350 
6351 --  product_code is mandatory
6352 
6353       IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6354       OR p_pm_product_code IS NULL
6355       THEN
6356             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6357             THEN
6358                   pa_interface_utils_pub.map_new_amg_msg
6359                   ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
6360                    ,p_msg_attribute    => 'CHANGE'
6361                    ,p_resize_flag      => 'N'
6362                    ,p_msg_context      => 'GENERAL'
6363                    ,p_attribute1       => ''
6364                    ,p_attribute2       => ''
6365                    ,p_attribute3       => ''
6366                    ,p_attribute4       => ''
6367                    ,p_attribute5       => '');
6368             END IF;
6369             IF l_debug_mode = 'Y' THEN
6370                   pa_debug.g_err_stage := 'Product code is missing' ;
6371                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6372             END IF;
6373 
6374              -- RAISE FND_API.G_EXC_ERROR;
6375              l_any_error_occurred_flag:='Y' ;
6376       END IF;
6377 
6378       l_pm_product_code :='Z';
6379       /*added for bug no :2413400*/
6380       OPEN p_product_code_csr (p_pm_product_code);
6381       FETCH p_product_code_csr INTO l_pm_product_code;
6382       CLOSE p_product_code_csr;
6383       IF l_pm_product_code <> 'X'
6384       THEN
6385 
6386             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6387             THEN
6388                   pa_interface_utils_pub.map_new_amg_msg
6389                   ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
6390                   ,p_msg_attribute    => 'CHANGE'
6391                   ,p_resize_flag      => 'N'
6392                   ,p_msg_context      => 'GENERAL'
6393                   ,p_attribute1       => ''
6394                   ,p_attribute2       => ''
6395                   ,p_attribute3       => ''
6396                   ,p_attribute4       => ''
6397                   ,p_attribute5       => '');
6398             END IF;
6399             p_return_status             := FND_API.G_RET_STS_ERROR;
6400             --RAISE FND_API.G_EXC_ERROR;
6401             l_any_error_occurred_flag:='Y';
6402             IF l_debug_mode = 'Y' THEN
6403                   pa_debug.g_err_stage := 'Product code is invalid' ;
6404                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6405             END IF;
6406 
6407       END IF;
6408 
6409 
6410       -- convert pm_project_reference to id
6411 
6412       Pa_project_pvt.Convert_pm_projref_to_id (
6413          p_pm_project_reference  => p_pm_project_reference,
6414          p_pa_project_id         => p_pa_project_id,
6415          p_out_project_id        => l_project_id,
6416          p_return_status         => l_return_status );
6417 
6418 
6419       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
6420       THEN
6421             IF l_debug_mode = 'Y' THEN
6422                   pa_debug.g_err_stage := 'Unexpected error while getting project id' ;
6423                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6424             END IF;
6425 
6426             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6427 
6428       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6429       THEN
6430             IF l_debug_mode = 'Y' THEN
6431                   pa_debug.g_err_stage := 'Error while getting project id' ;
6432                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6433             END IF;
6434 
6435             RAISE  FND_API.G_EXC_ERROR;
6436 
6437       END IF;
6438 
6439       -- Get segment1 for AMG messages
6440 
6441       OPEN l_amg_project_csr( l_project_id );
6442       FETCH l_amg_project_csr INTO l_amg_segment1;
6443       CLOSE l_amg_project_csr;
6444 
6445      --Do the processing required for budget model
6446      IF  (p_budget_type_code IS NOT NULL AND
6447           p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  THEN
6448 
6449             --Check for the security
6450             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
6451                                                p_api_version_number => p_api_version_number
6452                                               ,p_project_id         => l_project_id
6453                                               ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
6454                                               ,p_function_name      => 'PA_PM_DELETE_DRAFT_BUDGET'
6455                                               ,p_version_type       => null
6456                                               ,x_return_status      => p_return_status
6457                                               ,x_ret_code           => l_security_ret_code );
6458 
6459             -- the above API adds the error message to stack. Hence the message is not added here.
6460             -- Also, as security check is important further validations are not done in case this
6461             -- validation fails.
6462             IF (p_return_status<>FND_API.G_RET_STS_SUCCESS OR
6463                 l_security_ret_code = 'N') THEN
6464                    -- dbms_output.put_line('Security api failed l_security_ret_code '||l_security_ret_code);
6465                   IF l_debug_mode = 'Y' THEN
6466                         pa_debug.g_err_stage:= 'Security API Failed';
6467                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6468                   END IF;
6469 
6470                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6471             END IF;
6472 
6473             OPEN l_budget_type_csr( p_budget_type_code );
6474 
6475             FETCH l_budget_type_csr INTO l_dummy;
6476 
6477             IF l_budget_type_csr%NOTFOUND
6478             THEN
6479                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6480                   THEN
6481                         pa_interface_utils_pub.map_new_amg_msg
6482                         (p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
6483                         ,p_msg_attribute    => 'CHANGE'
6484                         ,p_resize_flag      => 'N'
6485                         ,p_msg_context      => 'BUDG'
6486                         ,p_attribute1       => l_amg_segment1
6487                         ,p_attribute2       => ''
6488                         ,p_attribute3       => p_budget_type_code
6489                         ,p_attribute4       => ''
6490                         ,p_attribute5       => '');
6491                   END IF;
6492                   IF l_debug_mode = 'Y' THEN
6493                         pa_debug.g_err_stage := 'Budget Type is invalid' ;
6494                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6495                   END IF;
6496 
6497 
6498                   CLOSE l_budget_type_csr;
6499                   RAISE FND_API.G_EXC_ERROR;
6500 
6501             END IF;
6502 
6503             CLOSE l_budget_type_csr;
6504 
6505             --Verify that the budget is not of type FORECASTING_BUDGET_TYPE
6506             IF p_budget_type_code='FORECASTING_BUDGET_TYPE' THEN
6507                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6508                   THEN
6509                         PA_UTILS.add_message
6510                         (p_app_short_name => 'PA',
6511                          p_msg_name       => 'PA_FP_CANT_EDIT_FCST_BUD_TYPE');
6512                   END IF;
6513                   IF l_debug_mode = 'Y' THEN
6514                         pa_debug.g_err_stage := 'Budget of type FORECASTING_BUDGET_TYPE' ;
6515                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6516                   END IF;
6517                   l_any_error_occurred_flag := 'Y';
6518             END IF;
6519 
6520             -- get the corresponding budget_version_id
6521             -- we do not verify p_version_number here because
6522             -- as per FD, this parameter should be ignored for
6523             -- FORMS budget model.
6524             OPEN l_budget_version_csr
6525               (p_project_id       => l_project_id
6526               ,p_budget_type_code => p_budget_type_code );
6527 
6528             FETCH l_budget_version_csr INTO l_budget_version_id;
6529 
6530             IF l_budget_version_csr%NOTFOUND
6531             THEN
6532                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6533                   THEN
6534                         pa_interface_utils_pub.map_new_amg_msg
6535                         ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
6536                         ,p_msg_attribute    => 'CHANGE'
6537                         ,p_resize_flag      => 'N'
6538                         ,p_msg_context      => 'BUDG'
6539                         ,p_attribute1       => l_amg_segment1
6540                         ,p_attribute2       => ''
6541                         ,p_attribute3       => p_budget_type_code
6542                         ,p_attribute4       => ''
6543                         ,p_attribute5       => '');
6544                   END IF;
6545                   IF l_debug_mode = 'Y' THEN
6546                         pa_debug.g_err_stage := 'Budget version does not exist' ;
6547                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6548                   END IF;
6549 
6550 
6551                   CLOSE l_budget_version_csr;
6552                   RAISE FND_API.G_EXC_ERROR;
6553 
6554             END IF;
6555 
6556             CLOSE l_budget_version_csr;
6557 
6558 
6559             --Check if budgetary control is enabled for this project and budget version
6560             --If a record is present for this budget version in PA_BC_BALANCES table
6561             --then we do not proceed with delete.
6562             IF ( PA_BUDGET_PVT.is_bc_enabled_for_budget(l_budget_version_id) )
6563             THEN
6564                   IF(l_debug_mode='Y') THEN
6565                         pa_debug.g_err_stage := 'Cannnot delete budget version - '
6566                                              || 'budgetary control is enabled';
6567                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6568                   END IF;
6569 
6570                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6571                   THEN
6572                         PA_UTILS.ADD_MESSAGE(
6573                                  p_app_short_name  => 'PA'
6574                                 ,p_msg_name        => 'PA_FP_DEL_BC_ENABLED_BV_AMG'
6575                                 ,p_token1          => 'PROJECT'
6576                                 ,p_value1          => l_amg_segment1
6577                                 ,p_token2          => 'BUDGET_TYPE'
6578                                 ,p_value2          => p_budget_type_code
6579                                 ,p_token3          => 'BUDGET_VERSION_ID'
6580                                 ,p_value3          => l_budget_version_id);
6581                   END IF;
6582 
6583                   RAISE FND_API.G_EXC_ERROR;
6584 
6585             END IF;--budgetary control enabled check
6586 
6587 
6588             OPEN l_lock_budget_csr( l_budget_version_id );
6589 
6590             --Stop Further processing if any errors are reported
6591             IF(l_any_error_occurred_flag='Y') THEN
6592                   IF(l_debug_mode='Y') THEN
6593                         pa_debug.g_err_stage := 'About to display all the messages';
6594                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6595                   END IF;
6596                   p_return_status := FND_API.G_RET_STS_ERROR;
6597                   l_any_error_occurred_flag := 'Y';
6598                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6599             END IF;
6600 
6601             PA_BUDGET_UTILS.delete_draft( x_budget_version_id   => l_budget_version_id
6602                                          ,x_err_code            => l_err_code
6603                                          ,x_err_stage           => l_err_stage
6604                                          ,x_err_stack           => l_err_stack  );
6605 
6606             IF l_err_code > 0
6607             THEN
6608 
6609                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6610                   THEN
6611 
6612                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
6613                         THEN
6614                               IF(l_debug_mode='Y') THEN
6615                                     pa_debug.g_err_stage := 'Delete draft falied';
6616                                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6617                               END IF;
6618                               pa_interface_utils_pub.map_new_amg_msg
6619                               ( p_old_message_code => 'PA_DELETE_DRAFT_FAILED'
6620                               ,p_msg_attribute    => 'CHANGE'
6621                               ,p_resize_flag      => 'N'
6622                               ,p_msg_context      => 'BUDG'
6623                               ,p_attribute1       => l_amg_segment1
6624                               ,p_attribute2       => ''
6625                               ,p_attribute3       => p_budget_type_code
6626                               ,p_attribute4       => ''
6627                               ,p_attribute5       => '');
6628                         ELSE
6629                               IF(l_debug_mode='Y') THEN
6630                                     pa_debug.g_err_stage := 'Error in Delete draft';
6631                                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6632                               END IF;
6633 
6634                               pa_interface_utils_pub.map_new_amg_msg
6635                               ( p_old_message_code => l_err_stage
6636                               ,p_msg_attribute    => 'CHANGE'
6637                               ,p_resize_flag      => 'N'
6638                               ,p_msg_context      => 'BUDG'
6639                               ,p_attribute1       => l_amg_segment1
6640                               ,p_attribute2       => ''
6641                               ,p_attribute3       => p_budget_type_code
6642                               ,p_attribute4       => ''
6643                               ,p_attribute5       => '');
6644                               END IF;
6645 
6646                         END IF;
6647 
6648                   RAISE FND_API.G_EXC_ERROR;
6649 
6650             ELSIF l_err_code < 0
6651             THEN
6652 
6653 
6654                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6655                   THEN
6656                         IF(l_debug_mode='Y') THEN
6657                               pa_debug.g_err_stage := 'Unexpected Error in Delete draft';
6658                               pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6659                         END IF;
6660 
6661                         FND_MSG_PUB.add_exc_msg
6662                         (  p_pkg_name       => 'PA_BUDGET_UTILS'
6663                         ,  p_procedure_name => 'DELETE_DRAFT'
6664                         ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
6665 
6666                   END IF;
6667 
6668                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6669 
6670             END IF;
6671 
6672             CLOSE l_lock_budget_csr; --FYI, does not release locks
6673 
6674 
6675       ELSE -- Fin Plan Model
6676 
6677 
6678             -- validate the plan type passed
6679             PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
6680                                            ( p_fin_plan_type_id    => ll_fin_plan_type_id
6681                                             ,p_fin_plan_type_name  => ll_fin_plan_type_name
6682                                             ,x_fin_plan_type_id    => l_fin_plan_type_id
6683                                             ,x_return_status       => p_return_status
6684                                             ,x_msg_count           => p_msg_count
6685                                             ,x_msg_data            => p_msg_data);
6686             -- Throw the error if the above API is not successfully executed
6687             IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6688 
6689                   IF l_debug_mode = 'Y' THEN
6690                         pa_debug.g_err_stage := 'Can not get the value of Fin Plan Type Id' ;
6691                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6692                   END IF;
6693 
6694                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6695 
6696             END IF;
6697 
6698             --Bug 4224464: Following validation has been added as part of
6699             --FP M Changes for delete_draft_budget
6700             --check if the fin_plan_type_id is used to store workplan data
6701             --first reset the value of l_dummy
6702             l_dummy := 0;
6703             OPEN l_use_for_wp_csr( l_fin_plan_type_id );
6704             FETCH l_use_for_wp_csr INTO l_dummy;
6705             CLOSE l_use_for_wp_csr;
6706 
6707             IF l_dummy = 1
6708             THEN
6709                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6710                   THEN
6711                         PA_UTILS.add_message
6712                         (p_app_short_name => 'PA',
6713                          p_msg_name       => 'PA_FP_CANT_DEL_WP_DATA');
6714                   END IF;
6715                   IF l_debug_mode = 'Y' THEN
6716                         pa_debug.g_err_stage := 'Fin Plan Type Id is used for WP' ;
6717                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6718                   END IF;
6719 
6720                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6721 
6722             END IF;
6723 
6724             --Validate / get the version type
6725             --Changes done by Xin Liu for post_fpk. Check if p_version_type is G_PA_MISS_CHAR.  24-APR-03
6726             IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6727                  l_version_type := NULL;
6728             ELSE
6729                  l_version_type := p_version_type;
6730             END IF;
6731             --Changes Done.
6732 
6733             pa_fin_plan_utils.get_version_type
6734                  ( p_project_id        => l_project_id
6735                   ,p_fin_plan_type_id  => l_fin_plan_type_id
6736                   ,px_version_type     => l_version_type
6737                   ,x_return_status     => p_return_status
6738                   ,x_msg_count         => p_msg_count
6739                   ,x_msg_data          => p_msg_data);
6740 
6741             IF p_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
6742 
6743                   IF l_debug_mode = 'Y' THEN
6744                         pa_debug.g_err_stage := 'Failed in get_Version_type' ;
6745                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6746                   END IF;
6747                                -- dbms_output.put_line('Exc in getting ver type');
6748 
6749                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6750 
6751             END IF;
6752 
6753             --Check for the security
6754             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
6755                                                p_api_version_number => p_api_version_number
6756                                               ,p_project_id         => l_project_id
6757                                               ,p_fin_plan_type_id   => l_fin_plan_type_id /* Bug 3139924 */
6758                                               ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
6759                                               ,p_function_name      => 'PA_PM_DELETE_DRAFT_BUDGET'
6760                                               ,p_version_type       => l_version_type
6761                                               ,x_return_status      => p_return_status
6762                                               ,x_ret_code           => l_security_ret_code );
6763 
6764             IF (p_return_status <>FND_API.G_RET_STS_SUCCESS OR
6765                 l_security_ret_code='N') THEN
6766                  -- dbms_output.put_line('Exc in security');
6767                   IF l_debug_mode = 'Y' THEN
6768                         pa_debug.g_err_stage := 'Security API failed' ;
6769                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6770                   END IF;
6771                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6772             END IF;
6773 
6774             --Bug 4224464: Following validation has been added as part of
6775             --FP M Changes for delete_draft_budget.
6776             --If version number is null, then current working version should be
6777             --deleted. If current working version doesn't exist then error
6778             --message is thrown
6779             IF ll_version_number IS NULL THEN
6780 
6781                   PA_FIN_PLAN_UTILS.get_curr_working_version_info
6782                   ( p_project_id          => l_project_id
6783                    ,p_fin_plan_type_id    => l_fin_plan_type_id
6784                    ,p_version_type        => l_version_type
6785                    ,x_fp_options_id       => l_fp_options_id
6786                    ,x_fin_plan_version_id => l_budget_version_id
6787                    ,x_return_status       => p_return_status
6788                    ,x_msg_count           => p_msg_count
6789                    ,x_msg_data            => p_msg_data );
6790 
6791             ELSE --version_number not NULL
6792             --Derive the version Id depending on the parameters passed as input.
6793 
6794                   PA_FIN_PLAN_UTILS.get_version_id
6795                   (  p_project_id        => l_project_id
6796                     ,p_fin_plan_type_id  => l_fin_plan_type_id
6797                     ,p_version_type      => l_version_type
6798                     ,p_version_number    => ll_version_number
6799                     ,x_budget_version_id => l_budget_version_id
6800                     ,x_ci_id             => l_ci_id  -- 2863564
6801                     ,x_return_status     => p_return_status
6802                     ,x_msg_count         => p_msg_count
6803                     ,x_msg_data          => p_msg_data );
6804 
6805                   -- If the budget version is a control item version throw error
6806                   IF l_ci_id IS NOT NULL THEN
6807                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6808                               PA_UTILS.ADD_MESSAGE(
6809                               p_app_short_name  => 'PA'
6810                              ,p_msg_name        => 'PA_FP_CI_VERSION_NON_EDITABLE'
6811                              ,p_token1          => 'BUDGET_VERSION_ID'
6812                              ,p_value1          => l_budget_version_id);
6813                         END IF;
6814                         IF l_debug_mode = 'Y' THEN
6815                               pa_debug.g_err_stage := 'i/p version is ci version' ;
6816                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6817                         END IF;
6818                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6819                   END IF;
6820 
6821             END IF; --version_number IS NULL
6822 
6823             IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6824                   IF l_debug_mode = 'Y' THEN
6825                         pa_debug.g_err_stage := 'get Version Id Failed ' ;
6826                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6827                   END IF;
6828 
6829                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6830             END IF;
6831 
6832             IF l_budget_version_id IS NULL THEN
6833 
6834                   --Get the plan type name
6835                   SELECT  name
6836                   INTO    l_fin_plan_type_name
6837                   FROM    pa_fin_plan_types_vl
6838                   WHERE   fin_plan_type_id = l_fin_plan_type_id;
6839 
6840                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6841                   THEN
6842                         PA_UTILS.add_message
6843                         (p_app_short_name => 'PA'
6844                         ,p_msg_name       => 'PA_FP_NO_WORKING_VERSION'
6845                         ,p_token1         => 'PROJECT'
6846                         ,p_value1         => l_amg_segment1
6847                         ,p_token2         => 'PLAN_TYPE'
6848                         ,p_value2         => l_fin_plan_type_name
6849                         ,p_token3         => 'VERSION_NUMBER'
6850                         ,p_value3         => ll_version_number );
6851                   END IF;
6852 
6853                   IF l_debug_mode = 'Y' THEN
6854                        pa_debug.g_err_stage := 'Working Budget Version does not exist' ;
6855                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6856                   END IF;
6857                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6858 
6859             END IF;
6860 
6861             --Bug 4224464: Following validation has been added as part of
6862             --FP M Changes for delete_draft_budget. If the budget version
6863             --belongs to an org forecast project then throw an error
6864             IF (PA_FIN_PLAN_UTILS.is_orgforecast_plan(l_budget_version_id) = 'Y')
6865             THEN
6866                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6867                   THEN
6868                         PA_UTILS.add_message
6869                         (p_app_short_name => 'PA',
6870                          p_msg_name       => 'PA_FP_CANT_DEL_ORG_FCST_PLAN');
6871                   END IF;
6872                   IF l_debug_mode = 'Y' THEN
6873                         pa_debug.g_err_stage := 'Cannot delete draft budgets attached' ||
6874                                                 'to an organisation forecasting project';
6875                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6876                   END IF;
6877 
6878                   p_return_status    := FND_API.G_RET_STS_ERROR;
6879                   l_any_error_occurred_flag:='Y' ;
6880             END IF; --org_forecast = 'Y'
6881 
6882             --Lock the version before deleting it
6883             l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
6884                                        (p_budget_version_id => l_budget_version_id);
6885             pa_fin_plan_pvt.lock_unlock_version
6886             ( p_budget_version_id       => l_budget_version_id
6887              ,p_record_version_number   => l_record_version_number
6888              ,p_action                  => 'L'
6889              ,p_user_id                 => l_user_id
6890              ,p_person_id               => null
6891              ,x_return_status           => p_return_status
6892              ,x_msg_count               => p_msg_count
6893              ,x_msg_data                => p_msg_data);
6894 
6895              IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
6896                   -- Error message is not added here as the api lock_unlock_version
6897                   -- adds the message to stack
6898                   IF(l_debug_mode='Y') THEN
6899                         pa_debug.g_err_stage := 'Failed in locking the version';
6900                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6901                   END IF;
6902                   l_any_error_occurred_flag:='Y';
6903             END IF;
6904 
6905             --Stop Further processing if any errors are reported
6906             IF(l_any_error_occurred_flag='Y') THEN
6907                   IF(l_debug_mode='Y') THEN
6908                         pa_debug.g_err_stage := 'About to display all the messages';
6909                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6910                   END IF;
6911                   p_return_status := FND_API.G_RET_STS_ERROR;
6912                   l_any_error_occurred_flag := 'Y';
6913                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6914             END IF;
6915 
6916             --Delete the version
6917             l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
6918                                        (p_budget_version_id => l_budget_version_id);
6919             PA_FIN_PLAN_PUB.Delete_Version
6920             ( p_project_id               => l_project_id
6921              ,p_budget_version_id        => l_budget_version_id
6922              ,p_record_version_number    => l_record_version_number
6923              ,x_return_status            => p_return_status
6924              ,x_msg_count                => p_msg_count
6925              ,x_msg_data                 => p_msg_data );
6926 
6927              IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6928 
6929                   IF(l_debug_mode='Y') THEN
6930                         pa_debug.g_err_stage := 'Failed in deleting the version';
6931                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6932                   END IF;
6933                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6934             END IF;
6935 
6936             --Bug 4224464: Following DMLs have been added as part of
6937             --FP M Changes for delete_draft_budget
6938             --If the budget version being deleted is a generation source
6939             --then we null out the GEN_SRC_XXX_PLAN_VERSION_ID column in
6940             --pa_proj_fp_options table and increase the record_version_no
6941             IF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST
6942             THEN
6943                   UPDATE pa_proj_fp_options
6944                   SET    gen_src_cost_plan_version_id = NULL,
6945                          record_version_number = record_version_number + 1,
6946                          last_update_date = SYSDATE,
6947                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6948                          last_update_login = FND_GLOBAL.LOGIN_ID
6949                   WHERE  project_id = l_project_id
6950                   AND    gen_src_cost_plan_version_id = l_budget_version_id;
6951             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE
6952             THEN
6953                   UPDATE pa_proj_fp_options
6954                   SET    gen_src_rev_plan_version_id = NULL,
6955                          record_version_number = record_version_number + 1,
6956                          last_update_date = SYSDATE,
6957                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6958                          last_update_login = FND_GLOBAL.LOGIN_ID
6959                   WHERE  project_id = l_project_id
6960                   AND    gen_src_rev_plan_version_id = l_budget_version_id;
6961             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL
6962             THEN
6963                   UPDATE pa_proj_fp_options
6964                   SET    gen_src_all_plan_version_id = NULL,
6965                          record_version_number = record_version_number + 1,
6966                          last_update_date = SYSDATE,
6967                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6968                          last_update_login = FND_GLOBAL.LOGIN_ID
6969                   WHERE  project_id = l_project_id
6970                   AND    gen_src_all_plan_version_id = l_budget_version_id;
6971             END IF;
6972 
6973             --if any record had been updated in pa_proj_fp_options then
6974             --we do a dummy update in pa_budget_versions also for the
6975             --budget version that is being updated to increase the record version number
6976             IF SQL%ROWCOUNT > 0 THEN
6977                   UPDATE pa_budget_versions
6978                   SET record_version_number = record_version_number + 1,
6979                   last_update_date = SYSDATE,
6980                   last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6981                   last_update_login = FND_GLOBAL.LOGIN_ID
6982                   WHERE project_id = l_project_id
6983                   AND   budget_version_id = l_budget_version_id;
6984             END IF;
6985 
6986 
6987       END IF;
6988 
6989 
6990       IF fnd_api.to_boolean(p_commit)
6991       THEN
6992             COMMIT;
6993       END IF;
6994 
6995 
6996       IF(l_debug_mode='Y') THEN
6997             pa_debug.g_err_stage := 'Exiting delete draft budget';
6998             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
6999       END IF;
7000 
7001       IF ( l_debug_mode = 'Y' ) THEN
7002             pa_debug.reset_curr_function;
7003       END IF;
7004 
7005 EXCEPTION
7006       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
7007 
7008             p_return_status := FND_API.G_RET_STS_ERROR;
7009             l_msg_count := FND_MSG_PUB.count_msg;
7010 
7011             IF l_msg_count = 1 and p_msg_data IS NULL THEN
7012                 PA_INTERFACE_UTILS_PUB.get_messages
7013                     (p_encoded        => FND_API.G_TRUE
7014                     ,p_msg_index      => 1
7015                     ,p_msg_count      => l_msg_count
7016                     ,p_msg_data       => l_msg_data
7017                     ,p_data           => l_data
7018                     ,p_msg_index_out  => l_msg_index_out);
7019                 p_msg_data := l_data;
7020                 p_msg_count := l_msg_count;
7021             ELSE
7022                 p_msg_count := l_msg_count;
7023             END IF;
7024             IF ( l_debug_mode = 'Y' ) THEN
7025                   pa_debug.reset_curr_function;
7026             END IF;
7027             RETURN;
7028 
7029     WHEN FND_API.G_EXC_ERROR
7030     THEN
7031 
7032     ROLLBACK TO delete_draft_budget_pub;
7033 
7034     p_return_status := FND_API.G_RET_STS_ERROR;
7035 
7036     FND_MSG_PUB.Count_And_Get
7037     (   p_count     =>  p_msg_count ,
7038         p_data      =>  p_msg_data  );
7039      IF ( l_debug_mode = 'Y' ) THEN
7040           pa_debug.reset_curr_function;
7041      END IF;
7042 
7043     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7044     THEN
7045 
7046     ROLLBACK TO delete_draft_budget_pub;
7047 
7048     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7049 
7050     FND_MSG_PUB.Count_And_Get
7051     (   p_count     =>  p_msg_count ,
7052         p_data      =>  p_msg_data  );
7053     IF ( l_debug_mode = 'Y' ) THEN
7054           pa_debug.reset_curr_function;
7055      END IF;
7056 
7057     WHEN ROW_ALREADY_LOCKED
7058     THEN
7059     ROLLBACK TO delete_draft_budget_pub;
7060 
7061     p_return_status := FND_API.G_RET_STS_ERROR;
7062 
7063     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7064     THEN
7065       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
7066       FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
7067       FND_MESSAGE.SET_TOKEN('TASK',    '');
7068       FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
7069       FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
7070       FND_MESSAGE.SET_TOKEN('START_DATE', '');
7071       FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
7072       FND_MSG_PUB.ADD;
7073     END IF;
7074 
7075     FND_MSG_PUB.Count_And_Get
7076             (   p_count     =>  p_msg_count ,
7077                 p_data      =>  p_msg_data  );
7078      IF ( l_debug_mode = 'Y' ) THEN
7079           pa_debug.reset_curr_function;
7080      END IF;
7081 
7082     WHEN OTHERS THEN
7083 
7084     ROLLBACK TO delete_draft_budget_pub;
7085 
7086     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7087 
7088     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7089     THEN
7090         FND_MSG_PUB.add_exc_msg
7091             (  p_pkg_name       => G_PKG_NAME
7092             ,  p_procedure_name => l_api_name );
7093 
7094     END IF;
7095 
7096     FND_MSG_PUB.Count_And_Get
7097     (   p_count     =>  p_msg_count ,
7098         p_data      =>  p_msg_data  );
7099      IF ( l_debug_mode = 'Y' ) THEN
7100           pa_debug.reset_curr_function;
7101      END IF;
7102 
7103 END delete_draft_budget;
7104 
7105 
7106 ----------------------------------------------------------------------------------------
7107 --Name:               delete_baseline_budget
7108 --Type:               Procedure
7109 --Description:        This procedure can be used to delete an existing baseline budget
7110 --                    version except the current original and current baseline budget
7111 --                    versions.
7112 --
7113 --Called subprograms:
7114 --    FND_API.compatible_api_call
7115 --    PA_PROJECT_PVT.convert_pm_projref_to_id
7116 --    PA_PM_FUNCTION_SECURITY_PUB.check_budget_security
7117 --    PA_BUDGET_UTILS.delete_draft
7118 --    PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
7119 --    PA_FIN_PLAN_UTILS.get_version_type
7120 --    PA_FIN_PLAN_UTILS.is_orgforecast_plan
7121 --    PA_FIN_PLAN_UTILS.retrieve_record_version_number
7122 --    PA_FIN_PLAN_PVT.lock_unlock_version
7123 --    PA_FIN_PLAN_PUB.delete_version
7124 --
7125 --History:
7126 --    05-APR-2005     Rishukla    Created.
7127 
7128 PROCEDURE delete_baseline_budget
7129 ( p_api_version_number          IN  NUMBER
7130  ,p_commit                      IN  VARCHAR2    := FND_API.G_FALSE
7131  ,p_init_msg_list               IN  VARCHAR2    := FND_API.G_FALSE
7132  ,p_msg_count                   OUT NOCOPY NUMBER
7133  ,p_msg_data                    OUT NOCOPY VARCHAR2
7134  ,p_return_status               OUT NOCOPY VARCHAR2
7135  ,p_pm_product_code             IN  pa_projects_all.pm_product_code%TYPE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7136  ,p_pa_project_id               IN  pa_projects_all.project_id%TYPE           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7137  ,p_pm_project_reference        IN  pa_projects_all.pm_project_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7138  ,p_budget_type_code            IN  pa_budget_versions.budget_type_code%TYPE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7139  ,p_fin_plan_type_id            IN  pa_fin_plan_types_b.fin_plan_type_id%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7140  ,p_fin_plan_type_name          IN  pa_fin_plan_types_vl.name%TYPE            :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7141  ,p_version_type                IN  pa_budget_versions.version_type%TYPE      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7142  ,p_version_number              IN  pa_budget_versions.version_number%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7143  )
7144 
7145 IS
7146 
7147       --This cursor is used to check if a valid combination of
7148       --project_id, budget_type_code and version_number has
7149       --been passed to this api for a baseline budget
7150       --version. If yes, then current and current_original
7151       --flags and budget_version_id are retrieved
7152       CURSOR l_budget_version_no_csr
7153       ( p_project_id NUMBER
7154       , p_budget_type_code VARCHAR2
7155       , p_version_number NUMBER )
7156       IS
7157       SELECT budget_version_id
7158             ,current_flag
7159             ,current_original_flag
7160       FROM pa_budget_versions
7161       WHERE project_id = p_project_id
7162       AND   budget_type_code = p_budget_type_code
7163       AND   version_number = p_version_number
7164       AND   budget_status_code = 'B';
7165 
7166       l_budget_version_no_rec   l_budget_version_no_csr%ROWTYPE;
7167 
7168 
7169       --This cursor is used to check if a valid combination of
7170       --project_id, fin_plan_type_id, version_type and version_number
7171       --has been passed to this api for a baseline budget
7172       --version. If yes, then budget_version_id is retrieved
7173       CURSOR l_finplan_version_no_csr
7174       ( p_project_id NUMBER
7175       , p_fin_plan_type_id NUMBER
7176       , p_version_type VARCHAR2
7177       , p_version_number NUMBER )
7178       IS
7179       SELECT budget_version_id
7180       FROM pa_budget_versions
7181       WHERE project_id = p_project_id
7182       AND   fin_plan_type_id = p_fin_plan_type_id
7183       AND   version_type = p_version_type
7184       AND   version_number = p_version_number
7185       AND   ci_id IS NULL --Added for better readability (Venketesh's suggestion)
7186       AND   budget_status_code = 'B';
7187 
7188       --This cursor is used to verify a budget_type_code
7189       CURSOR l_budget_type_csr
7190       ( p_budget_type_code VARCHAR2 )
7191       IS
7192       SELECT 1
7193       FROM   pa_budget_types
7194       WHERE  budget_type_code = p_budget_type_code;
7195 
7196       --This cursor is used to check if a fin_plan_type_id is
7197       --used to store workplan data
7198       CURSOR l_use_for_wp_csr
7199       ( p_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE)
7200       IS
7201       SELECT 1
7202       FROM pa_fin_plan_types_b
7203       WHERE fin_plan_type_id = p_fin_plan_type_id
7204       AND   use_for_workplan_flag = 'Y';
7205 
7206       --needed to get the field values associated to a AMG message
7207       CURSOR   l_amg_project_csr
7208       (p_pa_project_id pa_projects.project_id%type)
7209       IS
7210       SELECT   segment1
7211       FROM     pa_projects p
7212       WHERE p.project_id = p_pa_project_id;
7213 
7214       l_amg_segment1                   VARCHAR2(25);
7215 
7216       l_api_name              CONSTANT VARCHAR2(30)   := 'DELETE_BASELINE_BUDGET';
7217       l_module_name           CONSTANT VARCHAR2(100)  := g_module_name || '.DELETE_BASELINE_BUDGET';
7218 
7219       l_return_status                  VARCHAR2(1);
7220       l_err_code                       NUMBER;
7221       l_err_stage                      VARCHAR2(120);
7222       l_err_stack                      VARCHAR2(630);
7223       l_dummy                          NUMBER := 0;
7224 
7225       l_msg_count                      NUMBER := 0;
7226       l_msg_data                       VARCHAR2(2000);
7227       l_msg_index_out                  NUMBER;
7228       l_data                           VARCHAR2(2000);
7229 
7230       l_any_error_occurred_flag        VARCHAR2(1):='N';
7231 
7232       l_debug_mode                     VARCHAR2(1);
7233       l_debug_level2          CONSTANT NUMBER := 2;
7234       l_debug_level3          CONSTANT NUMBER := 3;
7235       l_debug_level4          CONSTANT NUMBER := 4;
7236       l_debug_level5          CONSTANT NUMBER := 5;
7237 
7238       l_security_ret_code              VARCHAR2(1);
7239       l_function_name                  VARCHAR2(80);
7240       l_record_version_number          pa_budget_versions.record_version_number%TYPE;
7241 
7242       l_project_id                     NUMBER;
7243       l_budget_type_code               pa_budget_versions.budget_type_code%TYPE;
7244       l_budget_version_id              NUMBER;
7245       l_fin_plan_type_id               NUMBER;
7246       l_fin_plan_type_name             pa_fin_plan_types_vl.name%TYPE;
7247       l_version_type                   pa_budget_versions.version_type%TYPE;
7248       l_version_number                 NUMBER;
7249       l_pm_product_code                pa_projects_all.pm_product_code%TYPE;
7250 
7251 	  ll_fin_plan_type_id              NUMBER;   --Added for bug 13968843
7252 
7253 
7254 BEGIN
7255 
7256       --Standard begin of API savepoint
7257 
7258       SAVEPOINT delete_baseline_budget_pub;
7259 
7260       p_msg_count := 0;
7261       p_return_status := FND_API.G_RET_STS_SUCCESS;
7262       l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7263 
7264       IF ( l_debug_mode = 'Y' )
7265       THEN
7266             pa_debug.set_curr_function( p_function   => 'delete_baseline_budget',
7267                                         p_debug_mode => l_debug_mode );
7268       END IF;
7269 
7270       IF ( l_debug_mode = 'Y' )
7271       THEN
7272             pa_debug.g_err_stage:='Entering ' || l_api_name;
7273             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7274       END IF;
7275 
7276       --Initialize the message table if requested.
7277 
7278       IF FND_API.to_boolean( p_init_msg_list )
7279       THEN
7280             FND_MSG_PUB.initialize;
7281       END IF;
7282 
7283       --Standard call to check for call compatibility.
7284 
7285       IF NOT FND_API.compatible_api_call ( g_api_version_number   ,
7286                                          p_api_version_number   ,
7287                                          l_api_name             ,
7288                                          G_PKG_NAME             )
7289       THEN
7290             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7291       END IF;
7292 
7293       --Convert following IN parameters from G_PA_MISS_XXX to null
7294 
7295       IF p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7296             l_project_id := NULL;
7297       ELSE
7298             l_project_id := p_pa_project_id;
7299       END IF;
7300 
7301       IF p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7302             l_budget_type_code := NULL;
7303       ELSE
7304             l_budget_type_code := p_budget_type_code;
7305       END IF;
7306 
7307       IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7308             l_fin_plan_type_id := NULL;
7309       ELSE
7310             l_fin_plan_type_id := p_fin_plan_type_id;
7311       END IF;
7312 
7313       IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7314             l_fin_plan_type_name := NULL;
7315       ELSE
7316             l_fin_plan_type_name := p_fin_plan_type_name;
7317       END IF;
7318 
7319       IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7320             l_version_type := NULL;
7321       ELSE
7322             l_version_type := p_version_type;
7323       END IF;
7324 
7325       IF p_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7326             l_version_number := NULL;
7327       ELSE
7328             l_version_number := p_version_number;
7329       END IF;
7330 
7331       --Both Budget Type Code and Fin Plan Type Id should not be null simultaneously
7332 
7333       IF (l_budget_type_code IS NULL  AND  l_fin_plan_type_name IS NULL  AND  l_fin_plan_type_id IS NULL)
7334       THEN
7335 
7336             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7337                   PA_UTILS.add_message
7338                   (p_app_short_name => 'PA',
7339                    p_msg_name       => 'PA_BUDGET_FP_BOTH_MISSING');
7340             END IF;
7341 
7342             IF l_debug_mode = 'Y' THEN
7343                   pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
7344                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7345             END IF;
7346 
7347             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7348 
7349       END IF;
7350 
7351       --Both Budget Type Code and Fin Plan Type Id should not be not null simultaneously
7352 
7353       IF ((l_budget_type_code IS NOT NULL)  AND
7354          (l_fin_plan_type_name IS NOT NULL OR l_fin_plan_type_id IS NOT NULL ))
7355       THEN
7356 
7357             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7358                   PA_UTILS.add_message
7359                   (p_app_short_name => 'PA',
7360                    p_msg_name       => 'PA_BUDGET_FP_BOTH_NOT_NULL');
7361             END IF;
7362 
7363             IF l_debug_mode = 'Y' THEN
7364                   pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
7365                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7366             END IF;
7367 
7368             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7369 
7370       END IF;
7371 
7372 
7373       --product_code is mandatory
7374       IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7375       OR p_pm_product_code IS NULL
7376       THEN
7377             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7378             --This function checks if the message being written to the message table
7379             --is higher or equal to the message level threshold.
7380             THEN
7381                   PA_UTILS.add_message
7382                   (p_app_short_name => 'PA',
7383                    p_msg_name       => 'PA_PRODUCT_CODE_IS_MISSING_AMG');
7384             END IF;
7385             IF l_debug_mode = 'Y' THEN
7386                   pa_debug.g_err_stage := 'Product code is missing' ;
7387                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7388             END IF;
7389 
7390             p_return_status    := FND_API.G_RET_STS_ERROR;
7391             l_any_error_occurred_flag:='Y' ;
7392 
7393       ELSE --p_pm_product_code is not null
7394 
7395             l_pm_product_code :='Z';
7396             OPEN p_product_code_csr (p_pm_product_code);
7397             FETCH p_product_code_csr INTO l_pm_product_code;
7398             CLOSE p_product_code_csr;
7399 
7400             IF l_pm_product_code <> 'X'
7401             THEN
7402 
7403                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7404                   THEN
7405                         PA_UTILS.add_message
7406                         (p_app_short_name => 'PA',
7407                          p_msg_name       => 'PA_PRODUCT_CODE_IS_INVALID_AMG');
7408                   END IF;
7409                   p_return_status    := FND_API.G_RET_STS_ERROR;
7410                   l_any_error_occurred_flag:='Y';
7411                   IF l_debug_mode = 'Y' THEN
7412                         pa_debug.g_err_stage := 'Product code is invalid' ;
7413                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7414                   END IF;
7415 
7416             END IF; --l_pm_product_code <> 'X'
7417 
7418       END IF; --p_pm_product_code IS NULL
7419 
7420 
7421       --p_version_number is mandatory
7422       IF l_version_number IS NULL
7423       THEN
7424             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7425             THEN
7426                   PA_UTILS.add_message
7427                   (p_app_short_name => 'PA',
7428                    p_msg_name       => 'PA_FP_VERSION_NUMBER_REQD');
7429             END IF;
7430             IF l_debug_mode = 'Y' THEN
7431                   pa_debug.g_err_stage := 'Version Number is missing' ;
7432                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7433             END IF;
7434 
7435             p_return_status    := FND_API.G_RET_STS_ERROR;
7436             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7437 
7438       END IF; --l_version_number IS NULL
7439 
7440 
7441       --convert pm_project_reference to id
7442       PA_PROJECT_PVT.convert_pm_projref_to_id (
7443          p_pm_project_reference  => p_pm_project_reference,
7444          p_pa_project_id         => p_pa_project_id,  --l_project_id    /* bug #12674987 */
7445          p_out_project_id        => l_project_id,
7446          p_return_status         => l_return_status );
7447 
7448       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
7449       THEN
7450             IF l_debug_mode = 'Y' THEN
7451                   pa_debug.g_err_stage := 'Unexpected error while getting project id' ;
7452                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7453             END IF;
7454 
7455             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
7456 
7457       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7458       THEN
7459             IF l_debug_mode = 'Y' THEN
7460                   pa_debug.g_err_stage := 'Error while getting project id' ;
7461                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7462             END IF;
7463 
7464             RAISE  FND_API.G_EXC_ERROR;
7465 
7466       END IF;
7467 
7468       -- Get segment1 for AMG messages
7469       OPEN l_amg_project_csr( l_project_id );
7470       FETCH l_amg_project_csr INTO l_amg_segment1;
7471       CLOSE l_amg_project_csr;
7472 
7473 
7474       --Do the processing required for budget model
7475       IF  (l_budget_type_code IS NOT NULL)  THEN
7476 
7477             --Verify the budget type code passed
7478             OPEN l_budget_type_csr( l_budget_type_code );
7479             FETCH l_budget_type_csr INTO l_dummy;
7480 
7481             IF l_budget_type_csr%NOTFOUND
7482             THEN
7483                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7484                   THEN
7485                         PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7486                         ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
7487                         ,p_msg_attribute    => 'CHANGE'
7488                         ,p_resize_flag      => 'N'
7489                         ,p_msg_context      => 'BUDG'
7490                         ,p_attribute1       => l_amg_segment1
7491                         ,p_attribute2       => ''
7492                         ,p_attribute3       => l_budget_type_code
7493                         ,p_attribute4       => ''
7494                         ,p_attribute5       => '');
7495                   END IF;
7496                   IF l_debug_mode = 'Y' THEN
7497                         pa_debug.g_err_stage := 'Budget Type is invalid' ;
7498                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7499                   END IF;
7500 
7501                   CLOSE l_budget_type_csr;
7502                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7503 
7504             END IF; --l_budget_type_csr%NOTFOUND
7505             CLOSE l_budget_type_csr;
7506 
7507             --Verify the version number passed and derive budget_version_id if it is valid
7508             OPEN l_budget_version_no_csr
7509               (p_project_id       => l_project_id
7510               ,p_budget_type_code => l_budget_type_code
7511               ,p_version_number   => l_version_number);
7512             FETCH l_budget_version_no_csr INTO l_budget_version_no_rec;
7513             CLOSE l_budget_version_no_csr;
7514 
7515             IF (l_budget_version_no_rec.budget_version_id IS NULL)
7516             THEN
7517                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7518                   THEN
7519                         PA_UTILS.add_message
7520                         (p_app_short_name => 'PA',
7521                          p_msg_name       => 'PA_FP_VERSION_NO_IS_INVALID');
7522                   END IF;
7523                   IF l_debug_mode = 'Y' THEN
7524                         pa_debug.g_err_stage := 'Budget version number is invalid' ;
7525                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7526                   END IF;
7527 
7528                   p_return_status    := FND_API.G_RET_STS_ERROR;
7529                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7530 
7531             ELSE --l_budget_version_no_rec has been fetched
7532 
7533                   IF (l_budget_version_no_rec.current_flag = 'Y'
7534                   OR  l_budget_version_no_rec.current_original_flag = 'Y') THEN
7535                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7536                               PA_UTILS.add_message
7537                               (p_app_short_name => 'PA',
7538                                p_msg_name       => 'PA_FP_DEL_CUR_OR_ORIG_BASELINE');
7539                         END IF;
7540 
7541                         IF l_debug_mode = 'Y' THEN
7542                               pa_debug.g_err_stage := 'baseline versions marked as current' ||
7543                                                       'or current original can not be deleted';
7544                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7545                         END IF;
7546 
7547                         p_return_status    := FND_API.G_RET_STS_ERROR;
7548                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7549                   END IF;
7550             END IF; --l_budget_version_no_rec.budget_version_id IS NULL
7551 
7552             --Check for the security. We select the function security based
7553             --on whether the budget type is Approved or not.
7554             IF (l_budget_type_code = 'AC' OR l_budget_type_code = 'AR')
7555             THEN
7556                   --Approved Budget (Cost or Revenue)
7557                   l_function_name:='PA_FP_DEL_BSLN_APPRVD_BDGT';
7558             ELSE --for baseline budgets the only other values should be 'FR' or user defined
7559                   --Budget (not approved cost or revenue)
7560                   l_function_name:='PA_FP_DEL_BSLN_BDGT';
7561             END IF;
7562 
7563             PA_PM_FUNCTION_SECURITY_PUB.check_budget_security (
7564                                                p_api_version_number => p_api_version_number
7565                                               ,p_project_id         => l_project_id
7566                                               ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
7567                                               ,p_function_name      => l_function_name
7568                                               ,p_version_type       => null
7569                                               ,x_return_status      => p_return_status
7570                                               ,x_ret_code           => l_security_ret_code );
7571 
7572             -- the above API adds the error message to stack. Hence the message is not added here.
7573             -- Also, as security check is important further validations are not done in case this
7574             -- validation fails.
7575             IF (p_return_status<>FND_API.G_RET_STS_SUCCESS OR l_security_ret_code = 'N')
7576             THEN
7577                   IF l_debug_mode = 'Y' THEN
7578                         pa_debug.g_err_stage:= 'Security API Failed';
7579                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7580                   END IF;
7581 
7582                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7583             END IF;
7584 
7585 
7586             --Check if budgetary control is enabled for this project and budget version
7587             --If a record is present for this budget version in PA_BC_BALANCES table
7588             --then we do not proceed with delete.
7589             IF ( PA_BUDGET_PVT.is_bc_enabled_for_budget(l_budget_version_no_rec.budget_version_id) )
7590             THEN
7591                   IF(l_debug_mode='Y') THEN
7592                         pa_debug.g_err_stage := 'Cannnot delete budget version - '
7593                                              || 'budgetary control is enabled';
7594                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7595                   END IF;
7596 
7597                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7598                   THEN
7599                         PA_UTILS.ADD_MESSAGE(
7600                                  p_app_short_name  => 'PA'
7601                                 ,p_msg_name        => 'PA_FP_DEL_BC_ENABLED_BV_AMG'
7602                                 ,p_token1          => 'PROJECT'
7603                                 ,p_value1          => l_amg_segment1
7604                                 ,p_token2          => 'BUDGET_TYPE'
7605                                 ,p_value2          => l_budget_type_code
7606                                 ,p_token3          => 'BUDGET_VERSION_ID'
7607                                 ,p_value3          => l_budget_version_no_rec.budget_version_id);
7608                   END IF;
7609 
7610                   RAISE FND_API.G_EXC_ERROR;
7611 
7612             END IF;--budgetary control enabled check
7613 
7614 
7615             --Stop Further processing if any errors are reported
7616             IF(l_any_error_occurred_flag='Y') THEN
7617                   IF(l_debug_mode='Y') THEN
7618                         pa_debug.g_err_stage := 'About to display all the messages';
7619                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7620                   END IF;
7621                   p_return_status := FND_API.G_RET_STS_ERROR;
7622                   l_any_error_occurred_flag := 'Y';
7623                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7624             END IF;
7625 
7626             --Calling delete API
7627             PA_BUDGET_UTILS.delete_draft( x_budget_version_id   => l_budget_version_no_rec.budget_version_id
7628                                          ,x_err_code            => l_err_code
7629                                          ,x_err_stage           => l_err_stage
7630                                          ,x_err_stack           => l_err_stack );
7631 
7632             IF l_err_code > 0  THEN
7633 
7634                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7635                   THEN
7636                         IF NOT PA_PROJECT_PVT.check_valid_message(l_err_stage)
7637                         THEN
7638                               IF(l_debug_mode='Y') THEN
7639                                     pa_debug.g_err_stage := 'PA_BUDGET_UTILS.DELETE_DRAFT falied';
7640                                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7641                               END IF;
7642                               PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7643                               ( p_old_message_code => 'PA_DELETE_DRAFT_FAILED'
7644                               ,p_msg_attribute    => 'CHANGE'
7645                               ,p_resize_flag      => 'N'
7646                               ,p_msg_context      => 'BUDG'
7647                               ,p_attribute1       => l_amg_segment1
7648                               ,p_attribute2       => ''
7649                               ,p_attribute3       => l_budget_type_code
7650                               ,p_attribute4       => ''
7651                               ,p_attribute5       => '');
7652 
7653                         ELSE   --valid error message has been returned by Delete_Draft
7654 
7655                               IF(l_debug_mode='Y') THEN
7656                                     pa_debug.g_err_stage := 'Error in Delete_draft api';
7657                                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7658                               END IF;
7659                               PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7660                               ( p_old_message_code => l_err_stage
7661                               ,p_msg_attribute    => 'CHANGE'
7662                               ,p_resize_flag      => 'N'
7663                               ,p_msg_context      => 'BUDG'
7664                               ,p_attribute1       => l_amg_segment1
7665                               ,p_attribute2       => ''
7666                               ,p_attribute3       => l_budget_type_code
7667                               ,p_attribute4       => ''
7668                               ,p_attribute5       => '');
7669                         END IF;
7670 
7671                   END IF; --FND_MSG_PUB.check_msg_level
7672                   RAISE FND_API.G_EXC_ERROR;
7673 
7674             ELSIF l_err_code < 0  THEN
7675 
7676                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7677                   THEN
7678                         IF(l_debug_mode='Y') THEN
7679                               pa_debug.g_err_stage := 'Unexpected Error in Delete_draft api';
7680                               pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7681                         END IF;
7682 
7683                         FND_MSG_PUB.add_exc_msg
7684                         (  p_pkg_name       => 'PA_BUDGET_UTILS'
7685                         ,  p_procedure_name => 'DELETE_DRAFT'
7686                         ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
7687                   END IF; --FND_MSG_PUB.check_msg_level
7688 
7689                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7690 
7691             END IF; --l_err_code > 0
7692 
7693       ELSE --finplan model
7694 
7695             --validate the plan type passed
7696             PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
7697                          ( p_fin_plan_type_id    => l_fin_plan_type_id
7698                           ,p_fin_plan_type_name  => l_fin_plan_type_name
7699                           ,x_fin_plan_type_id    => ll_fin_plan_type_id
7700                           ,x_return_status       => p_return_status
7701                           ,x_msg_count           => p_msg_count
7702                           ,x_msg_data            => p_msg_data);
7703             --Throw the error if the above API is not successfully executed
7704             IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7705                   IF l_debug_mode = 'Y' THEN
7706                         pa_debug.g_err_stage := 'Cannot get the value of Fin Plan Type Id' ;
7707                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7708                   END IF;
7709                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7710 
7711             END IF;
7712 
7713             --check if the fin_plan_type_id is used to store workplan data
7714             --first reset the l_dummy value
7715             l_dummy := 0;
7716             OPEN l_use_for_wp_csr( ll_fin_plan_type_id );
7717             FETCH l_use_for_wp_csr INTO l_dummy;
7718             CLOSE l_use_for_wp_csr;
7719 
7720             IF l_dummy = 1
7721             THEN
7722                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7723                   THEN
7724                         PA_UTILS.add_message
7725                         (p_app_short_name => 'PA',
7726                          p_msg_name       => 'PA_FP_CANT_DEL_WP_DATA');
7727                   END IF;
7728                   IF l_debug_mode = 'Y' THEN
7729                         pa_debug.g_err_stage := 'Fin Plan Type Id is used for WP' ;
7730                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7731                   END IF;
7732 
7733                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7734 
7735             END IF;
7736 
7737             --Validate / get the version type
7738             PA_FIN_PLAN_UTILS.get_version_type
7739                  ( p_project_id        => l_project_id
7740                   ,p_fin_plan_type_id  => ll_fin_plan_type_id
7741                   ,px_version_type     => l_version_type
7742                   ,x_return_status     => p_return_status
7743                   ,x_msg_count         => p_msg_count
7744                   ,x_msg_data          => p_msg_data);
7745 
7746             IF p_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
7747                   IF l_debug_mode = 'Y' THEN
7748                         pa_debug.g_err_stage := 'Failed in get_Version_type' ;
7749                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7750                   END IF;
7751                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7752             END IF;
7753 
7754             --Check for the security
7755             l_function_name:='PA_PM_DELETE_BASELINE_BUDGET';
7756             PA_PM_FUNCTION_SECURITY_PUB.check_budget_security (
7757                                         p_api_version_number => p_api_version_number
7758                                        ,p_project_id         => l_project_id
7759                                        ,p_fin_plan_type_id   => ll_fin_plan_type_id
7760                                        ,p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
7761                                        ,p_function_name      => l_function_name
7762                                        ,p_version_type       => l_version_type
7763                                        ,x_return_status      => p_return_status
7764                                        ,x_ret_code           => l_security_ret_code );
7765 
7766             IF (p_return_status <>FND_API.G_RET_STS_SUCCESS OR
7767                 l_security_ret_code='N') THEN
7768                   IF l_debug_mode = 'Y' THEN
7769                         pa_debug.g_err_stage := 'Security API failed' ;
7770                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7771                   END IF;
7772                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7773             END IF;
7774 
7775             --Verify the version number passed and derive budget_version_id if it is valid
7776             OPEN l_finplan_version_no_csr
7777               (p_project_id       => l_project_id
7778               ,p_fin_plan_type_id => ll_fin_plan_type_id
7779               ,p_version_type     => l_version_type
7780               ,p_version_number   => l_version_number);
7781             FETCH l_finplan_version_no_csr INTO l_budget_version_id;
7782             CLOSE l_finplan_version_no_csr;
7783 
7784             IF (l_budget_version_id IS NULL)
7785             THEN
7786                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7787                   THEN
7788                         PA_UTILS.add_message
7789                         (p_app_short_name => 'PA',
7790                          p_msg_name       => 'PA_FP_VERSION_NO_IS_INVALID');
7791                   END IF;
7792                   IF l_debug_mode = 'Y' THEN
7793                         pa_debug.g_err_stage := 'Budget version number is invalid' ;
7794                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7795                   END IF;
7796 
7797                   p_return_status    := FND_API.G_RET_STS_ERROR;
7798                   l_any_error_occurred_flag:='Y' ;
7799             END IF; --l_budget_version_id IS NULL
7800 
7801             --if the budget version belongs to an org forecast project then throw an error
7802             IF (PA_FIN_PLAN_UTILS.is_orgforecast_plan(l_budget_version_id) = 'Y')
7803             THEN
7804                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7805                   THEN
7806                         PA_UTILS.add_message
7807                         (p_app_short_name => 'PA',
7808                          p_msg_name       => 'PA_FP_CANT_DEL_ORG_FCST_PLAN');
7809                   END IF;
7810                   IF l_debug_mode = 'Y' THEN
7811                         pa_debug.g_err_stage := 'Cannot delete baseline budgets attached' ||
7812                                                 'to an organisation forecasting project';
7813                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7814                   END IF;
7815 
7816                   p_return_status    := FND_API.G_RET_STS_ERROR;
7817                   l_any_error_occurred_flag:='Y' ;
7818             END IF; --org_forecast = 'Y'
7819 
7820             --Stop Further processing if any errors are reported
7821             IF(l_any_error_occurred_flag='Y') THEN
7822                   IF(l_debug_mode='Y') THEN
7823                         pa_debug.g_err_stage := 'About to display all the messages';
7824                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7825                   END IF;
7826                   p_return_status := FND_API.G_RET_STS_ERROR;
7827                   l_any_error_occurred_flag := 'Y';
7828                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7829             END IF;
7830 
7831             --Delete the version
7832             l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
7833                                        (p_budget_version_id => l_budget_version_id);
7834             PA_FIN_PLAN_PUB.delete_version
7835             ( p_project_id               => l_project_id
7836              ,p_budget_version_id        => l_budget_version_id
7837              ,p_record_version_number    => l_record_version_number
7838              ,x_return_status            => p_return_status
7839              ,x_msg_count                => p_msg_count
7840              ,x_msg_data                 => p_msg_data );
7841 
7842              IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7843 
7844                   IF(l_debug_mode='Y') THEN
7845                         pa_debug.g_err_stage := 'Failed in deleting the version';
7846                         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7847                   END IF;
7848                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7849             END IF;
7850 
7851             --If the budget version being deleted is a generation source
7852             --then we null out the GEN_SRC_XXX_PLAN_VERSION_ID column in
7853             --pa_proj_fp_options table and increase the record_version_no
7854             IF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST
7855             THEN
7856                   UPDATE pa_proj_fp_options
7857                   SET    gen_src_cost_plan_version_id = NULL,
7858                          record_version_number = record_version_number + 1,
7859                          last_update_date = SYSDATE,
7860                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7861                          last_update_login = FND_GLOBAL.LOGIN_ID
7862                   WHERE  project_id = l_project_id
7863                   AND    gen_src_cost_plan_version_id = l_budget_version_id;
7864             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE
7865             THEN
7866                   UPDATE pa_proj_fp_options
7867                   SET    gen_src_rev_plan_version_id = NULL,
7868                          record_version_number = record_version_number + 1,
7869                          last_update_date = SYSDATE,
7870                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7871                          last_update_login = FND_GLOBAL.LOGIN_ID
7872                   WHERE  project_id = l_project_id
7873                   AND    gen_src_rev_plan_version_id = l_budget_version_id;
7874             ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL
7875             THEN
7876                   UPDATE pa_proj_fp_options
7877                   SET    gen_src_all_plan_version_id = NULL,
7878                          record_version_number = record_version_number + 1,
7879                          last_update_date = SYSDATE,
7880                          last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7881                          last_update_login = FND_GLOBAL.LOGIN_ID
7882                   WHERE  project_id = l_project_id
7883                   AND    gen_src_all_plan_version_id = l_budget_version_id;
7884             END IF;
7885 
7886             --if any record had been updated in pa_proj_fp_options then
7887             --we do a dummy update in pa_budget_versions also for the
7888             --budget version that is being updated to increase the record version number
7889             IF SQL%ROWCOUNT > 0 THEN
7890                   UPDATE pa_budget_versions
7891                   SET record_version_number = record_version_number + 1,
7892                   last_update_date = SYSDATE,
7893                   last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7894                   last_update_login = FND_GLOBAL.LOGIN_ID
7895                   WHERE project_id = l_project_id
7896                   AND   budget_version_id = l_budget_version_id;
7897             END IF;
7898 
7899       End IF; --l_budget_type_code IS NOT NULL
7900 
7901 
7902       IF fnd_api.to_boolean(p_commit)
7903       THEN
7904             COMMIT;
7905       END IF;
7906 
7907       IF(l_debug_mode='Y') THEN
7908             pa_debug.g_err_stage := 'Exiting delete baseline budget version';
7909             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7910       END IF;
7911 
7912       IF ( l_debug_mode = 'Y' ) THEN
7913             pa_debug.reset_curr_function;
7914       END IF;
7915 
7916 EXCEPTION
7917       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
7918       THEN
7919 
7920       p_return_status := FND_API.G_RET_STS_ERROR;
7921       l_msg_count := FND_MSG_PUB.count_msg;
7922 
7923       IF l_msg_count = 1 and p_msg_data IS NULL THEN
7924             PA_INTERFACE_UTILS_PUB.get_messages
7925             (p_encoded        => FND_API.G_TRUE
7926             ,p_msg_index      => 1
7927             ,p_msg_count      => l_msg_count
7928             ,p_msg_data       => l_msg_data
7929             ,p_data           => l_data
7930             ,p_msg_index_out  => l_msg_index_out);
7931             p_msg_data  := l_data;
7932             p_msg_count := l_msg_count;
7933       ELSE
7934             p_msg_count := l_msg_count;
7935       END IF;
7936 
7937       IF ( l_debug_mode = 'Y' ) THEN
7938             pa_debug.reset_curr_function;
7939       END IF;
7940 
7941       RETURN;
7942 
7943       WHEN FND_API.G_EXC_ERROR
7944       THEN
7945 
7946       ROLLBACK TO delete_baseline_budget_pub;
7947 
7948       p_return_status := FND_API.G_RET_STS_ERROR;
7949 
7950       FND_MSG_PUB.count_and_get
7951       (   p_count     =>  p_msg_count ,
7952           p_data      =>  p_msg_data  );
7953 
7954       IF ( l_debug_mode = 'Y' ) THEN
7955             pa_debug.reset_curr_function;
7956       END IF;
7957 
7958       WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7959       THEN
7960 
7961       ROLLBACK TO delete_baseline_budget_pub;
7962 
7963       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7964 
7965       FND_MSG_PUB.count_and_get
7966       (   p_count     =>  p_msg_count ,
7967           p_data      =>  p_msg_data  );
7968 
7969       IF ( l_debug_mode = 'Y' ) THEN
7970             pa_debug.reset_curr_function;
7971       END IF;
7972 
7973       WHEN ROW_ALREADY_LOCKED
7974       THEN
7975       ROLLBACK TO delete_baseline_budget_pub;
7976 
7977       p_return_status := FND_API.G_RET_STS_ERROR;
7978 
7979       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7980       THEN
7981             FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
7982             FND_MESSAGE.set_token('PROJECT', l_amg_segment1);
7983             FND_MESSAGE.set_token('TASK', '');
7984             FND_MESSAGE.set_token('BUDGET_TYPE', p_budget_type_code);
7985             FND_MESSAGE.set_token('SOURCE_NAME', '');
7986             FND_MESSAGE.set_token('START_DATE', '');
7987             FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_CODE');
7988             FND_MSG_PUB.add;
7989       END IF;
7990 
7991       FND_MSG_PUB.count_and_get
7992       (   p_count     =>  p_msg_count ,
7993           p_data      =>  p_msg_data  );
7994 
7995       IF ( l_debug_mode = 'Y' ) THEN
7996             pa_debug.reset_curr_function;
7997       END IF;
7998 
7999       WHEN OTHERS THEN
8000 
8001       ROLLBACK TO delete_baseline_budget_pub;
8002 
8003       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8004 
8005       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8006       THEN
8007             FND_MSG_PUB.add_exc_msg
8008             (  p_pkg_name       => G_PKG_NAME
8009             ,  p_procedure_name => l_api_name );
8010 
8011       END IF;
8012 
8013       FND_MSG_PUB.count_and_get
8014       (   p_count     =>  p_msg_count ,
8015           p_data      =>  p_msg_data  );
8016 
8017       IF ( l_debug_mode = 'Y' ) THEN
8018             pa_debug.reset_curr_function;
8019       END IF;
8020 
8021 END delete_baseline_budget;
8022 
8023 
8024 
8025 ----------------------------------------------------------------------------------------
8026 --Name:               delete_budget_line
8027 --Type:               Procedure
8028 --Description:        This procedure can be used to delete a budget_line of a draft budget
8029 --
8030 --
8031 --Called subprograms:
8032 --
8033 --
8034 --
8035 --History:
8036 --    07-OCT-1996        L. de Werker    Created
8037 --    28-NOV-1996    L. de Werker    Add parameter p_period_name and functionality to get
8038 --                   start_date from p_period_name
8039 --    07-DEC-1996    L. de Werker    Added locking mechanism
8040 --    16-MAY-2005    Ritesh Shukla   Modified this procedure for FP.M
8041 --    16-Apr-2007    rthumma    Bug# 5998035 : Added call to PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions API
8042 --                   for deleting the data from pa_resource_assignments
8043 --    29-Feb-2008    paljain    Bug# 6854131 : Removed second call to close cursor l_budget_line_rowid_csr
8044 --
8045 PROCEDURE delete_budget_line
8046 ( p_api_version_number        IN  NUMBER
8047  ,p_commit                    IN  VARCHAR2
8048  ,p_init_msg_list             IN  VARCHAR2
8049  ,p_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8050  ,p_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8051  ,p_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8052  ,p_pm_product_code           IN  VARCHAR2
8053  ,p_pa_project_id             IN  NUMBER
8054  ,p_pm_project_reference      IN  VARCHAR2
8055  ,p_budget_type_code          IN  VARCHAR2
8056  ,p_pa_task_id                IN  NUMBER
8057  ,p_pm_task_reference         IN  VARCHAR2
8058  ,p_resource_alias            IN  VARCHAR2
8059  ,p_resource_list_member_id   IN  NUMBER
8060    --Bug 16604257 : CBS RBS Phase 2 API changes
8061   ,p_cost_code                  IN    VARCHAR2    	  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8062   ,p_cbs_element_id         IN    NUMBER      		  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8063  --Bug 16604257
8064  ,p_start_date                IN  DATE
8065  ,p_period_name               IN  VARCHAR2
8066 --Parameters added for FP.M
8067  ,p_fin_plan_type_id          IN  NUMBER
8068  ,p_fin_plan_type_name        IN  VARCHAR2
8069  ,p_version_type              IN  VARCHAR2
8070  ,p_version_number            IN  NUMBER
8071  ,p_currency_code             IN  VARCHAR2 )
8072 
8073 IS
8074 
8075 
8076    CURSOR l_resource_assignment_csr
8077       (p_budget_version_id  NUMBER
8078       ,p_task_id        NUMBER
8079       ,p_member_id      NUMBER  ,
8080 	  p_c_cbs_element_id NUMBER)
8081    IS
8082    SELECT resource_assignment_id
8083    FROM   pa_resource_assignments
8084    WHERE  budget_version_id = p_budget_version_id
8085    AND    task_id = p_task_id
8086    AND    resource_list_member_id = p_member_id
8087    AND    NVL(cbs_element_id,-1) = NVL(p_c_cbs_element_id,-1); --16604257
8088 
8089    CURSOR l_budget_line_rowid_csr
8090      ( p_resource_assignment_id NUMBER
8091       ,p_budget_start_date      DATE
8092       ,p_currency_code          VARCHAR2)
8093    IS
8094    SELECT rowidtochar(rowid)
8095          ,txn_currency_code
8096          ,start_date
8097          ,end_date
8098    FROM   pa_budget_lines
8099    WHERE  resource_assignment_id = p_resource_assignment_id
8100    AND    trunc(start_date) = nvl(trunc(p_budget_start_date),trunc(start_date))
8101    AND    txn_currency_code = nvl(p_currency_code,txn_currency_code);
8102 
8103    -- FP.M Data Model Logic
8104 
8105    CURSOR l_uncategorized_list_csr
8106    IS
8107    SELECT prlm.resource_list_member_id
8108    FROM   pa_resource_lists prl
8109    ,      pa_resource_list_members prlm
8110    WHERE  prl.resource_list_id = prlm.resource_list_id
8111    AND    prl.uncategorized_flag='Y'
8112    and    prlm.resource_class_code = 'FINANCIAL_ELEMENTS';
8113 
8114    -- End: FP.M Resource LIst Data Model Impact Changes ------
8115 
8116    -- needed to get the budget_start_date of a period
8117    CURSOR   l_budget_periods_csr
8118         (p_period_name          VARCHAR2
8119         ,p_time_phased_type_code    VARCHAR2    )
8120    IS
8121    SELECT trunc(period_start_date)
8122    FROM   pa_budget_periods_v
8123    WHERE  period_name = p_period_name
8124    AND    period_type_code = p_time_phased_type_code;
8125 
8126    --needed to validate to given start_date
8127    CURSOR   l_start_date_csr
8128         (p_start_date           DATE
8129         ,p_time_phased_type_code    VARCHAR2    )
8130    IS
8131    SELECT 1
8132    FROM   pa_budget_periods_v
8133    WHERE  trunc(period_start_date) = trunc(p_start_date)
8134    AND    period_type_code = p_time_phased_type_code;
8135 
8136    --needed to lock the budget line row
8137    CURSOR l_lock_budget_line_csr( p_budget_line_rowid VARCHAR2)
8138    IS
8139    SELECT 'x'
8140    FROM   pa_budget_lines
8141    WHERE  rowid = p_budget_line_rowid
8142    FOR UPDATE NOWAIT;
8143 
8144    --This cursor is used to get the approved rev plan type flag of the plan type
8145    CURSOR l_approved_revenue_flag_csr
8146           ( c_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE
8147            ,c_project_id pa_projects_all.project_id%TYPE)
8148    IS
8149    SELECT approved_rev_plan_type_flag
8150    FROM   pa_proj_fp_options
8151    WHERE  project_id=c_project_id
8152    AND    fin_plan_type_id=c_fin_plan_type_id
8153    AND    fin_plan_option_level_code=PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
8154 
8155    l_app_rev_plan_type_flag     VARCHAR2(1);
8156 
8157    --This cursor is used to compare a currency code with pfc
8158    CURSOR l_proj_func_currency_csr
8159           ( c_project_id    NUMBER
8160            ,c_currency_code VARCHAR2)
8161    IS
8162    SELECT 1
8163    FROM  pa_projects_all
8164    WHERE project_id = c_project_id
8165    AND   projfunc_currency_code = c_currency_code;
8166 
8167    --This cursor is used to fetch the txn currencies of the plan version
8168    --and validate currency_code against them.
8169    CURSOR l_plan_ver_txn_curr_csr
8170           ( c_fin_plan_version_id   NUMBER
8171            ,c_currency_code         VARCHAR2)
8172    IS
8173    SELECT 1
8174    FROM   pa_fp_txn_currencies
8175    WHERE  fin_plan_version_id = c_fin_plan_version_id
8176    AND    txn_currency_code   = c_currency_code;
8177 
8178    --Cursor to derive plan_class_code and etc_start_date for a budget version
8179    CURSOR budget_version_info_cur (c_budget_version_id IN NUMBER)
8180    IS
8181    SELECT  pt.plan_class_code
8182           ,bv.etc_start_date
8183    FROM    pa_budget_versions bv,
8184            pa_fin_plan_types_b pt
8185    WHERE   bv.budget_version_id = c_budget_version_id
8186    AND     pt.fin_plan_type_id = bv.fin_plan_type_id;
8187 
8188    l_plan_class_code            pa_fin_plan_types_b.plan_class_code%TYPE;
8189    l_etc_start_date             pa_budget_versions.etc_start_date%TYPE;
8190 
8191    i                            NUMBER := 0;
8192    l_dummy                      NUMBER;
8193 
8194    l_api_name          CONSTANT VARCHAR2(30)        := 'delete_budget_line';
8195 
8196    l_resource_assignment_id     pa_resource_assignments.resource_assignment_id%type;
8197    l_budget_line_rowid          VARCHAR(20);
8198 
8199    l_err_code                   NUMBER;
8200    l_err_stage                  VARCHAR2(120);
8201    l_err_stack                  VARCHAR2(630);
8202 
8203    l_project_id                 NUMBER := p_pa_project_id;
8204    l_budget_type_code           pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
8205    l_fin_plan_type_id           NUMBER := p_fin_plan_type_id;
8206    l_fin_plan_type_name         pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
8207    l_version_type               pa_budget_versions.version_type%TYPE := p_version_type;
8208    l_budget_version_id          NUMBER;
8209    l_budget_entry_method_code   pa_budget_entry_methods.budget_entry_method_code%TYPE;
8210    l_resource_list_id           NUMBER;
8211    l_budget_amount_code         pa_budget_types.budget_amount_code%type;
8212    l_entry_level_code           pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
8213    l_time_phased_code           pa_proj_fp_options.cost_time_phased_code%TYPE;
8214    l_multi_curr_flag            pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
8215    l_categorization_code        pa_budget_entry_methods.categorization_code%TYPE;
8216    l_record_version_number      NUMBER;
8217    l_task_id                    NUMBER;
8218    l_resource_list_member_id    NUMBER;
8219    l_currency_code              VARCHAR2(15);
8220    l_start_date                 DATE;
8221 
8222    l_resource_assignment_tab    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8223    l_delete_budget_lines_tab    SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8224    l_txn_currency_code_tab      SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8225    l_line_start_date_tab        SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8226    l_line_end_date_tab          SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8227    l_txn_currency_code          VARCHAR2(15);
8228    l_line_start_date            DATE;
8229    l_line_end_date              DATE;
8230 
8231    l_msg_count                  NUMBER := 0;
8232    l_msg_data                   VARCHAR2(2000);
8233    l_module_name                VARCHAR2(80);
8234    l_data                       VARCHAR2(2000);
8235    l_msg_index_out              NUMBER;
8236 
8237    l_amg_project_number         pa_projects_all.segment1%TYPE;
8238    l_amg_task_number            VARCHAR2(50);
8239 
8240    -- Bug# 5998035
8241    l_call_del_planning_trans            VARCHAR2(1) := 'N';
8242    l_currency_code_tbl           SYSTEM.PA_VARCHAR2_15_TBL_TYPE  := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
8243 
8244    --debug variables
8245    l_debug_mode                 VARCHAR2(1);
8246    l_debug_level2      CONSTANT NUMBER := 2;
8247    l_debug_level3      CONSTANT NUMBER := 3;
8248    l_debug_level4      CONSTANT NUMBER := 4;
8249    l_debug_level5      CONSTANT NUMBER := 5;
8250    --Added for bug 6408139 to pass G_PA_MISS_CHAR
8251    l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
8252 
8253 
8254      l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
8255 	 l_cbs_elem_id NUMBER(15) :=0;
8256 	 l_Cbs_Enabled	  VARCHAR2(1) := 'N'; -- Added for 16859243
8257 
8258 BEGIN
8259 
8260 
8261    --Standard begin of API savepoint
8262    SAVEPOINT delete_budget_line_pub;
8263 
8264    p_msg_count := 0;
8265    p_return_status := FND_API.G_RET_STS_SUCCESS;
8266    l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8267    l_module_name := g_module_name || ':Delete_Budget_Line ';
8268 
8269    IF ( l_debug_mode = 'Y' )
8270    THEN
8271          pa_debug.set_curr_function( p_function   => l_api_name
8272                                     ,p_debug_mode => l_debug_mode );
8273    END IF;
8274 
8275    IF ( l_debug_mode = 'Y' )
8276    THEN
8277          pa_debug.g_err_stage:='Entering ' || l_api_name;
8278          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8279    END IF;
8280 
8281    --Initialize the message table if requested.
8282    IF FND_API.TO_BOOLEAN( p_init_msg_list )
8283    THEN
8284         FND_MSG_PUB.initialize;
8285    END IF;
8286 
8287    --Set API return status to success
8288    p_return_status     := FND_API.G_RET_STS_SUCCESS;
8289 
8290    --Call PA_BUDGET_PVT.validate_header_info to do the necessary
8291    --header level validations
8292    PA_BUDGET_PVT.validate_header_info
8293         ( p_api_version_number          => p_api_version_number
8294          ,p_api_name                    => l_api_name
8295          ,p_init_msg_list               => p_init_msg_list
8296          ,px_pa_project_id              => l_project_id
8297          ,p_pm_project_reference        => p_pm_project_reference
8298          ,p_pm_product_code             => p_pm_product_code
8299          ,px_budget_type_code           => l_budget_type_code
8300          ,px_fin_plan_type_id           => l_fin_plan_type_id
8301          ,px_fin_plan_type_name         => l_fin_plan_type_name
8302          ,px_version_type               => l_version_type
8303          ,p_budget_version_number       => p_version_number
8304          ,p_change_reason_code          => NULL
8305          ,p_function_name               => 'PA_PM_DELETE_BUDGET_LINE'
8306          ,x_budget_entry_method_code    => l_budget_entry_method_code
8307          ,x_resource_list_id            => l_resource_list_id
8308          ,x_budget_version_id           => l_budget_version_id
8309          ,x_fin_plan_level_code         => l_entry_level_code
8310          ,x_time_phased_code            => l_time_phased_code
8311          ,x_plan_in_multi_curr_flag     => l_multi_curr_flag
8312          ,x_budget_amount_code          => l_budget_amount_code
8313          ,x_categorization_code         => l_categorization_code
8314          ,x_project_number              => l_amg_project_number
8315          /* Plan Amount Entry flags introduced by bug 6408139 */
8316          /*Passing all as G_PA_MISS_CHAR since validations not required*/
8317          ,px_raw_cost_flag         =>   l_pa_miss_char
8318          ,px_burdened_cost_flag    =>   l_pa_miss_char
8319          ,px_revenue_flag          =>   l_pa_miss_char
8320          ,px_cost_qty_flag         =>   l_pa_miss_char
8321          ,px_revenue_qty_flag      =>   l_pa_miss_char
8322          ,px_all_qty_flag          =>   l_pa_miss_char
8323          ,px_bill_rate_flag        =>   l_pa_miss_char
8324          ,px_cost_rate_flag        =>   l_pa_miss_char
8325          ,px_burden_rate_flag      =>   l_pa_miss_char
8326          /* Plan Amount Entry flags introduced by bug 6408139 */
8327          ,x_msg_count                   => p_msg_count
8328          ,x_msg_data                    => p_msg_data
8329          ,x_return_status               => p_return_status );
8330 
8331    IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8332          IF(l_debug_mode='Y') THEN
8333                pa_debug.g_err_stage := 'validate header info API falied';
8334                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8335          END IF;
8336          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8337    END IF;
8338 
8339 
8340    -- convert pm_task_reference to pa_task_id
8341    -- if both task_id and task_reference are not passed or NULL, then we will default to 0, because this
8342    -- is the value of task_id when budgetting is done at the project level.
8343 
8344    IF (p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8345        OR p_pa_task_id IS NULL )
8346    AND (p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8347         OR p_pm_task_reference IS NULL )
8348    THEN
8349 
8350     l_task_id := 0;
8351 
8352    ELSE
8353 
8354     PA_PROJECT_PVT.Convert_pm_taskref_to_id ( p_pa_project_id       => l_project_id,
8355                               p_pa_task_id          => p_pa_task_id,
8356                               p_pm_task_reference   => p_pm_task_reference,
8357                               p_out_task_id         => l_task_id,
8358                               p_return_status       => p_return_status );
8359 
8360     IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
8361     THEN
8362             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
8363 
8364     ELSIF p_return_status = FND_API.G_RET_STS_ERROR
8365     THEN
8366             RAISE  FND_API.G_EXC_ERROR;
8367         END IF;
8368 
8369    END IF;
8370 
8371    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
8372                         (p_task_number=> ''
8373                         ,p_task_reference => p_pm_task_reference
8374                         ,p_task_id => l_task_id);
8375 
8376    -- convert resource alias to (resource) member id if passed and NOT NULL
8377    -- if resource alias is (passed and not NULL)
8378    -- and resource member is (passed and not NULL)
8379    -- then we convert the alias to the id
8380    -- else we default to the uncategorized resource member
8381 
8382    IF (p_resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8383        AND p_resource_alias IS NOT NULL)
8384    OR (p_resource_list_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8385        AND p_resource_list_member_id IS NOT NULL)
8386    THEN
8387 
8388        pa_resource_pub.Convert_alias_to_id
8389              ( p_project_id                  => p_pa_project_id
8390               ,p_resource_list_id            => l_resource_list_id
8391               ,p_alias                       => p_resource_alias
8392               ,p_resource_list_member_id     => p_resource_list_member_id
8393               ,p_out_resource_list_member_id => l_resource_list_member_id
8394               ,p_return_status               => p_return_status  );
8395 
8396        IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
8397        THEN
8398                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
8399        ELSIF p_return_status = FND_API.G_RET_STS_ERROR
8400        THEN
8401                RAISE  FND_API.G_EXC_ERROR;
8402        END IF;
8403 
8404    ELSE
8405 
8406        OPEN l_uncategorized_list_csr;
8407        FETCH l_uncategorized_list_csr INTO l_resource_list_member_id;
8408        CLOSE l_uncategorized_list_csr;
8409 
8410    END IF;
8411 
8412 -- No check has been made to see if RLM id passed belongs to PRL stamped at Budget Version Level
8413 -- Bug 4375976 has been logged to take care of this in API pa_resource_pub.Convert_alias_to_id
8414  -- Added for CBS 16604257 & 16859243
8415 			l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_pa_project_id);
8416 
8417 			IF l_Cbs_Enabled='Y' THEN
8418 				l_cbs_elem_id :=p_cbs_element_id;
8419 				IF p_cbs_element_id IS NULL OR
8420                    p_cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
8421 
8422 				   l_cbs_elem_id := PA_ALTERNATE_TASK_PVT.convert_cost_code_to_id(
8423 										 p_cost_code ,p_pa_project_id );
8424 				END IF;
8425 			ELSE
8426 				l_cbs_elem_id := null;
8427 			END IF;
8428 
8429    --Check the existence of resource assignment
8430    OPEN l_resource_assignment_csr
8431     (l_budget_version_id
8432     ,l_task_id
8433     ,l_resource_list_member_id
8434 	,l_cbs_elem_id);
8435 
8436    FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
8437 
8438    IF l_resource_assignment_csr%NOTFOUND
8439    THEN
8440     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8441     THEN
8442         pa_interface_utils_pub.map_new_amg_msg
8443         ( p_old_message_code => 'PA_NO_RESOURCE_ASSIGNMENT'
8444          ,p_msg_attribute    => 'CHANGE'
8445          ,p_resize_flag      => 'N'
8446          ,p_msg_context      => 'BUDG'
8447          ,p_attribute1       => l_amg_project_number
8448          ,p_attribute2       => l_amg_task_number
8449          ,p_attribute3       => p_budget_type_code
8450          ,p_attribute4       => ''
8451          ,p_attribute5       => to_char(p_start_date));
8452     END IF;
8453 
8454     CLOSE l_resource_assignment_csr;
8455     RAISE FND_API.G_EXC_ERROR;
8456 
8457    END IF;
8458 
8459    CLOSE l_resource_assignment_csr;
8460 
8461 
8462    --Period name/start date check
8463    IF p_period_name IS NOT NULL
8464    AND p_period_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8465    THEN
8466 
8467        OPEN l_budget_periods_csr( p_period_name => p_period_name
8468                                  ,p_time_phased_type_code => l_time_phased_code );
8469 
8470        FETCH l_budget_periods_csr INTO l_start_date;
8471 
8472        IF l_budget_periods_csr%NOTFOUND
8473        THEN
8474            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8475            THEN
8476            pa_interface_utils_pub.map_new_amg_msg
8477            ( p_old_message_code => 'PA_PERIOD_NAME_INVALID'
8478             ,p_msg_attribute    => 'CHANGE'
8479             ,p_resize_flag      => 'N'
8480             ,p_msg_context      => 'BUDG'
8481             ,p_attribute1       => l_amg_project_number
8482             ,p_attribute2       => l_amg_task_number
8483             ,p_attribute3       => l_budget_type_code
8484             ,p_attribute4       => ''
8485             ,p_attribute5       => to_char(p_start_date));
8486            END IF;
8487 
8488            CLOSE l_budget_periods_csr;
8489            RAISE FND_API.G_EXC_ERROR;
8490        END IF;
8491        CLOSE l_budget_periods_csr;
8492 
8493    ELSIF p_start_date IS NOT NULL
8494    AND   p_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8495    THEN
8496 
8497         -- Fix: 27-JAN-97, jwhite
8498         --  Added condition for 'G' or 'P' time-phased-type code as only
8499         --  required for period phased budgets.
8500         IF (l_time_phased_code IN ('G', 'P') )  THEN
8501 
8502             OPEN l_start_date_csr(p_start_date            => p_start_date
8503                                  ,p_time_phased_type_code => l_time_phased_code );
8504 
8505             FETCH l_start_date_csr INTO l_dummy;
8506 
8507             IF l_start_date_csr%NOTFOUND
8508             THEN
8509                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8510                 THEN
8511                 pa_interface_utils_pub.map_new_amg_msg
8512                 ( p_old_message_code => 'PA_START_DATE_INVALID'
8513                  ,p_msg_attribute    => 'CHANGE'
8514                  ,p_resize_flag      => 'N'
8515                  ,p_msg_context      => 'PROJ'
8516                  ,p_attribute1       => l_amg_project_number
8517                  ,p_attribute2       => ''
8518                  ,p_attribute3       => ''
8519                  ,p_attribute4       => ''
8520                  ,p_attribute5       => '');
8521                 END IF;
8522 
8523                 CLOSE l_start_date_csr;
8524                 RAISE FND_API.G_EXC_ERROR;
8525             END IF;
8526 
8527             CLOSE l_start_date_csr;
8528 
8529         END IF;--(l_time_phased_code IN ('G', 'P') )
8530 
8531         l_start_date := p_start_date;
8532 
8533    ELSE
8534 
8535         /* Added code for Bug# 5998035 */
8536         -- If start_date and period_name are passed as NULL
8537         IF (p_period_name IS NULL and p_start_date IS NULL) THEN
8538                 -- If time phased then set l_call_del_planning_trans to 'Y'
8539                 IF (l_time_phased_code IN ('G', 'P')  AND l_fin_plan_type_id IS NOT NULL) THEN
8540                         l_call_del_planning_trans := 'Y';
8541                 END IF;
8542         END IF;
8543         /* End of code for Bug# 5998035 */
8544 	l_start_date := NULL;   --when no start_date or period_name is passed or both are NULL
8545                                 --, then all periods will be deleted
8546 
8547    END IF;--Period name/start date check
8548 
8549    --DO G_MISS_CHAR to NULL conv for currency_code
8550    IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
8551         l_currency_code := NULL;
8552    ELSE
8553         l_currency_code := p_currency_code;
8554    END IF;
8555 
8556    --Following validations are required only for the new model
8557    IF l_fin_plan_type_id IS NOT NULL
8558    THEN
8559 
8560          --Validate currency_code if it is not null
8561          --Validate the txn currency code provided by the user. The follwing checks are made.
8562          --If the version is an approved revenue version then the txn curr code should be PFC.
8563          --else If the version is MC enabled then txn curr code should be among the txn
8564          --currencies provided at the version level.
8565 
8566          IF l_currency_code IS NOT NULL THEN
8567 
8568             l_dummy := 0; --reset the value of l_dummy
8569 
8570             --Get the approved revenue plan type flag
8571             OPEN l_approved_revenue_flag_csr( l_fin_plan_type_id
8572                                              ,l_project_id);
8573             FETCH l_approved_revenue_flag_csr INTO l_app_rev_plan_type_flag;
8574             CLOSE l_approved_revenue_flag_csr;
8575 
8576             -- check for approved rev plan type flag is made here because in case plan type is at
8577             -- cost and revenue separately then version can have currencies other than PFC.
8578             IF( nvl(l_app_rev_plan_type_flag,'N') = 'Y' AND
8579                 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST)
8580             THEN
8581 
8582                  OPEN l_proj_func_currency_csr( l_project_id
8583                                                ,l_currency_code);
8584                  FETCH l_proj_func_currency_csr INTO l_dummy;
8585                  CLOSE l_proj_func_currency_csr;
8586 
8587                  IF l_dummy = 0 THEN --currency_code not equal to PFC
8588 
8589                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8590                      THEN
8591                           PA_UTILS.ADD_MESSAGE
8592                             ( p_app_short_name => 'PA',
8593                               p_msg_name       => 'PA_FP_TXN_NOT_PFC_FOR_APP_REV',
8594                               p_token1         => 'PROJECT',
8595                               p_value1         =>  l_amg_project_number,
8596                               p_token2         => 'PLAN_TYPE',
8597                               p_value2         =>  l_fin_plan_type_name,
8598                               p_token3         => 'CURRENCY',
8599                               p_value3         =>  l_currency_code);
8600                      END IF;
8601 
8602                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8603 
8604                  END IF;--l_dummy = 0
8605 
8606             ELSE-- Version is not approved for revenue. The txn curr must be available in fp txn curr table
8607 
8608                  OPEN l_plan_ver_txn_curr_csr( l_budget_version_id
8609                                               ,l_currency_code);
8610                  FETCH l_plan_ver_txn_curr_csr INTO l_dummy;
8611                  CLOSE l_plan_ver_txn_curr_csr;
8612 
8613                  IF l_dummy = 0 THEN --currency_code is not valid
8614 
8615                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8616                      THEN
8617                           PA_UTILS.ADD_MESSAGE
8618                             ( p_app_short_name => 'PA',
8619                               p_msg_name       => 'PA_FP_TXN_NOT_ADDED_FOR_PT',
8620                               p_token1         => 'PROJECT',
8621                               p_value1         =>  l_amg_project_number,
8622                               p_token2         => 'PLAN_TYPE',
8623                               p_value2         =>  l_fin_plan_type_name,
8624                               p_token3         => 'CURRENCY',
8625                               p_value3         =>  l_currency_code);
8626                      END IF;
8627 
8628                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8629 
8630                  END IF;--l_dummy = 0
8631 
8632             END IF;
8633 
8634          END IF;--l_currency_code IS NOT NULL
8635 
8636          --If multi-currency is enabled and one of period_name or start_date is
8637          --not null, then currency_code cannot be null.
8638          IF (l_multi_curr_flag = 'Y' AND
8639              l_currency_code IS NULL AND
8640              l_start_date IS NOT NULL)
8641          THEN
8642                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8643                THEN
8644                      PA_UTILS.add_message
8645                      (p_app_short_name => 'PA'
8646                      ,p_msg_name       => 'PA_FP_CURRENCY_NULL_AMG'
8647                      ,p_token1         => 'PROJECT'
8648                      ,p_value1         => l_amg_project_number
8649                      ,p_token2         => 'PLAN_TYPE'
8650                      ,p_value2         => l_fin_plan_type_name
8651                      ,p_token3         => 'TASK'
8652                      ,p_value3         => l_amg_task_number
8653                      ,p_token4         => 'START_DATE'
8654                      ,p_value4         => to_char(l_start_date) );
8655                END IF;
8656 
8657                IF l_debug_mode = 'Y' THEN
8658                      pa_debug.g_err_stage := 'For multi-currency enabled, currency code is'
8659                                           || 'null but start_date is not null';
8660                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8661                END IF;
8662 
8663                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8664          END IF;
8665 
8666 
8667          --In case of new model, check if Actuals have been entered for the FORECAST Line.
8668          OPEN budget_version_info_cur(l_budget_version_id);
8669          FETCH budget_version_info_cur
8670          INTO  l_plan_class_code
8671               ,l_etc_start_date;
8672          CLOSE budget_version_info_cur;
8673          --Since we have already validated the presence of a budget version id
8674          --in PA_BUDGET_PVT.validate_header_info, hence we do not check for
8675          --budget_version_info_cur%NOT FOUND here.
8676 
8677 	 /* Added for Bug# 5998035 */
8678          IF ( l_time_phased_code NOT IN ('G', 'P') AND l_etc_start_date IS NULL) THEN
8679                 l_call_del_planning_trans := 'Y';
8680         END IF;
8681          IF (l_plan_class_code IS NOT NULL AND
8682              l_plan_class_code = 'FORECAST' AND
8683              l_etc_start_date IS NOT NULL AND
8684              ((l_start_date IS NOT NULL AND l_etc_start_date > l_start_date) OR l_start_date IS NULL) AND        -- Bug 5998035
8685              l_time_phased_code IS NOT NULL AND
8686              l_time_phased_code <> 'N')
8687          THEN
8688                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8689                THEN
8690                      PA_UTILS.add_message
8691                      (p_app_short_name => 'PA'
8692                      ,p_msg_name       => 'PA_FP_FCST_ACTUALS_AMG'
8693                      ,p_token1         => 'PROJECT'
8694                      ,p_value1         => l_amg_project_number
8695                      ,p_token2         => 'PLAN_TYPE'
8696                      ,p_value2         => l_fin_plan_type_name
8697                      ,p_token3         => 'TASK'
8698                      ,p_value3         => l_amg_task_number
8699                      ,p_token4         => 'CURRENCY'
8700                      ,p_value4         => l_currency_code
8701                      ,p_token5         => 'START_DATE'
8702                      ,p_value5         => to_char(l_start_date) );
8703                END IF;
8704 
8705                IF l_debug_mode = 'Y' THEN
8706                      pa_debug.g_err_stage := 'Forecast Line has actuals and hence cannot be edited';
8707                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8708                END IF;
8709 
8710                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8711          END IF;--end of actuals-on-FORECAST check
8712 
8713    ELSE -- old FORMS based Budgets Model
8714 
8715          --Currency_code value, even if specified, should be ignored in
8716          --case of old Budgets Model
8717          l_currency_code := NULL;
8718 
8719    END IF; --l_fin_plan_type_id IS NOT NULL
8720 
8721 
8722    --Checking existence of budget line
8723    /* Added code for Bug# 5998035 */
8724    --Skipping this loop while calling delete_planning_transactions
8725    IF ( l_call_del_planning_trans <> 'Y' ) THEN --Bug# 5998035
8726    OPEN l_budget_line_rowid_csr( l_resource_assignment_id
8727                                 ,l_start_date
8728                                 ,l_currency_code );
8729 
8730    FETCH l_budget_line_rowid_csr INTO l_budget_line_rowid
8731                                      ,l_txn_currency_code
8732                                      ,l_line_start_date
8733                                      ,l_line_end_date ;
8734 
8735    IF l_budget_line_rowid_csr%NOTFOUND
8736    THEN
8737     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8738     THEN
8739         pa_interface_utils_pub.map_new_amg_msg
8740         ( p_old_message_code => 'PA_BUDGET_LINE_NOT_FOUND'
8741          ,p_msg_attribute    => 'CHANGE'
8742          ,p_resize_flag      => 'N'
8743          ,p_msg_context      => 'BUDG'
8744          ,p_attribute1       => l_amg_project_number
8745          ,p_attribute2       => l_amg_task_number
8746          ,p_attribute3       => l_budget_type_code
8747          ,p_attribute4       => ''
8748          ,p_attribute5       => to_char(l_start_date));
8749     END IF;
8750 
8751     CLOSE l_budget_line_rowid_csr;
8752     RAISE FND_API.G_EXC_ERROR;
8753 
8754    END IF;
8755 
8756    --Loop for deleting budget lines begins
8757    WHILE l_budget_line_rowid_csr%FOUND LOOP
8758 
8759       --Do the processing for FORMS based Budgets Model
8760       IF l_budget_type_code IS NOT NULL
8761       THEN
8762            BEGIN
8763 
8764            OPEN l_lock_budget_line_csr( l_budget_line_rowid );
8765            CLOSE l_lock_budget_line_csr;
8766 
8767                 /*FPB2: MRC PA_BUDGET_LINES_V_PKG.delete_row( l_budget_line_rowid ); */
8768                 pa_budget_lines_v_pkg.delete_row(X_Rowid => l_budget_line_rowid);
8769                                      -- Bug Fix: 4569365. Removed MRC code.
8770              --,  x_mrc_flag => 'Y');  /* FPB2: Added x_mrc_flag for MRC changes */
8771 
8772 
8773            --this exception part is here because this procedure doesn't handle the exceptions itself.
8774            EXCEPTION
8775            WHEN ROW_ALREADY_LOCKED THEN RAISE;
8776 
8777            WHEN OTHERS
8778            THEN
8779 
8780                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8781                THEN
8782                    FND_MSG_PUB.add_exc_msg
8783                    (  p_pkg_name       => 'PA_BUDGET_LINES_V_PKG'
8784                    ,  p_procedure_name => 'DELETE_ROW'
8785                    ,  p_error_text     => SQLCODE          );
8786 
8787                END IF;
8788 
8789                CLOSE l_budget_line_rowid_csr;
8790 
8791                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8792            END;
8793 
8794       ELSIF l_fin_plan_type_id IS NOT NULL --new FINPLAN model
8795       THEN
8796 
8797            i := i + 1; --incrementing the counter
8798 
8799            --Store the data for PA_FP_CALC_PLAN_PKG.calculate API call
8800            l_resource_assignment_tab.extend(1);
8801            l_delete_budget_lines_tab.extend(1);
8802            l_txn_currency_code_tab.extend(1);
8803            l_line_start_date_tab.extend(1);
8804            l_line_end_date_tab.extend(1);
8805 
8806            l_resource_assignment_tab(i) := l_resource_assignment_id;
8807            l_delete_budget_lines_tab(i) := 'Y';
8808            l_txn_currency_code_tab(i)   := l_txn_currency_code;
8809            l_line_start_date_tab(i)     := l_line_start_date;
8810            l_line_end_date_tab(i)       := l_line_end_date;
8811 
8812       END IF;--l_budget_type_code IS NOT NULL
8813 
8814       FETCH l_budget_line_rowid_csr INTO l_budget_line_rowid
8815                                         ,l_txn_currency_code
8816                                         ,l_line_start_date
8817                                         ,l_line_end_date ;
8818 
8819    END LOOP;
8820 
8821    /* Added for Bug# 5998035 */
8822    ELSE
8823 
8824         l_resource_assignment_tab.extend(1);
8825         l_currency_code_tbl.extend(1);
8826 
8827         l_resource_assignment_tab(1) := l_resource_assignment_id;
8828         l_currency_code_tbl(1) := l_currency_code;
8829 
8830    END IF;      -- Bug# 5998035
8831 
8832    IF l_budget_line_rowid_csr%ISOPEN THEN               -- Bug 5998035
8833     -- Bug 6854131
8834     CLOSE l_budget_line_rowid_csr;
8835    END IF;
8836 
8837    IF l_budget_type_code IS NOT NULL --old budgets model
8838    THEN
8839         --summarizing the totals in the table pa_budget_versions
8840         PA_BUDGET_UTILS.summerize_project_totals( x_budget_version_id => l_budget_version_id
8841                                                 , x_err_code          => l_err_code
8842                                                 , x_err_stage         => l_err_stage
8843                                                 , x_err_stack         => l_err_stack );
8844 
8845         IF l_err_code > 0
8846         THEN
8847 
8848         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8849         THEN
8850 
8851             IF NOT pa_project_pvt.check_valid_message(l_err_stage)
8852             THEN
8853             pa_interface_utils_pub.map_new_amg_msg
8854             ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
8855              ,p_msg_attribute    => 'CHANGE'
8856              ,p_resize_flag      => 'N'
8857              ,p_msg_context      => 'BUDG'
8858              ,p_attribute1       => l_amg_project_number
8859              ,p_attribute2       => l_amg_task_number
8860              ,p_attribute3       => p_budget_type_code
8861              ,p_attribute4       => ''
8862              ,p_attribute5       => to_char(p_start_date));
8863             ELSE
8864             pa_interface_utils_pub.map_new_amg_msg
8865             ( p_old_message_code => l_err_stage
8866              ,p_msg_attribute    => 'CHANGE'
8867              ,p_resize_flag      => 'N'
8868              ,p_msg_context      => 'BUDG'
8869              ,p_attribute1       => l_amg_project_number
8870              ,p_attribute2       => l_amg_task_number
8871              ,p_attribute3       => p_budget_type_code
8872              ,p_attribute4       => ''
8873              ,p_attribute5       => to_char(p_start_date));
8874             END IF;
8875 
8876         END IF;
8877 
8878         RAISE FND_API.G_EXC_ERROR;
8879 
8880         ELSIF l_err_code < 0
8881         THEN
8882 
8883         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8884         THEN
8885 
8886             FND_MSG_PUB.add_exc_msg
8887                 (  p_pkg_name       => 'PA_BUDGET_UTILS'
8888                 ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
8889                 ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
8890 
8891         END IF;
8892 
8893         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8894 
8895         END IF;
8896 
8897    ELSIF l_fin_plan_type_id IS NOT NULL --new FINPLAN model
8898    THEN
8899 
8900         --Lock the budget version before deleting a budget line
8901         l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
8902                                    (p_budget_version_id => l_budget_version_id);
8903 
8904         PA_FIN_PLAN_PVT.lock_unlock_version
8905         ( p_budget_version_id       => l_budget_version_id
8906          ,p_record_version_number   => l_record_version_number
8907          ,p_action                  => 'L'
8908          ,p_user_id                 => FND_GLOBAL.User_id
8909          ,p_person_id               => null
8910          ,x_return_status           => p_return_status
8911          ,x_msg_count               => p_msg_count
8912          ,x_msg_data                => p_msg_data);
8913 
8914         IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8915               -- Error message is not added here as the api lock_unlock_version
8916               -- adds the message to stack
8917               IF(l_debug_mode='Y') THEN
8918                     pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
8919                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8920               END IF;
8921               RAISE  FND_API.G_EXC_ERROR;
8922         END IF;
8923 
8924         --Call PA_FP_CALC_PLAN_PKG.calculate api to delete the budget line(s)
8925 	/* Added the following code for Bug# 5998035 */
8926         IF (l_call_del_planning_trans = 'Y') THEN
8927         -- Call PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions if period_name and start_date are NULL
8928         PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions
8929                         (p_context                        => l_plan_class_code
8930                         ,p_task_or_res                => 'ASSIGNMENT'
8931                         ,p_resource_assignment_tbl        => l_resource_assignment_tab
8932                         ,p_currency_code_tbl        => l_currency_code_tbl
8933                         ,x_return_status           => p_return_status
8934                         ,x_msg_count               => p_msg_count
8935                         ,x_msg_data                => p_msg_data
8936                         );
8937          IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8938               IF(l_debug_mode='Y') THEN
8939                     pa_debug.g_err_stage := 'PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions API has thrown error';
8940                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8941               END IF;
8942               RAISE  FND_API.G_EXC_ERROR;
8943          END IF;
8944          /* End of code for Bug# 5998035 */
8945         ELSE
8946         PA_FP_CALC_PLAN_PKG.calculate
8947                            (p_project_id              => l_project_id
8948                            ,p_budget_version_id       => l_budget_version_id
8949                            ,p_spread_required_flag    => 'N'
8950                            ,p_source_context          => 'BUDGET_LINE'
8951                            ,p_calling_module          => PA_FP_CONSTANTS_PKG.G_AMG_API
8952                            ,p_resource_assignment_tab => l_resource_assignment_tab
8953                            ,p_delete_budget_lines_tab => l_delete_budget_lines_tab
8954                            ,p_txn_currency_code_tab   => l_txn_currency_code_tab
8955                            ,p_line_start_date_tab     => l_line_start_date_tab
8956                            ,p_line_end_date_tab       => l_line_end_date_tab
8957                            ,x_return_status           => p_return_status
8958                            ,x_msg_count               => p_msg_count
8959                            ,x_msg_data                => p_msg_data );
8960 	END IF;
8961 
8962         IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8963               IF(l_debug_mode='Y') THEN
8964                     pa_debug.g_err_stage := 'PA_FP_CALC_PLAN_PKG.calculate API has thrown error';
8965                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8966               END IF;
8967               RAISE  FND_API.G_EXC_ERROR;
8968         END IF;
8969 
8970         --unlock the budget version after deleting the budget line
8971         l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
8972                                    (p_budget_version_id => l_budget_version_id);
8973 
8974         PA_FIN_PLAN_PVT.lock_unlock_version
8975         ( p_budget_version_id       => l_budget_version_id
8976          ,p_record_version_number   => l_record_version_number
8977          ,p_action                  => 'U'
8978          ,p_user_id                 => FND_GLOBAL.User_id
8979          ,p_person_id               => null
8980          ,x_return_status           => p_return_status
8981          ,x_msg_count               => p_msg_count
8982          ,x_msg_data                => p_msg_data);
8983 
8984         IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8985               -- Error message is not added here as the api lock_unlock_version
8986               -- adds the message to stack
8987               IF(l_debug_mode='Y') THEN
8988                     pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
8989                     pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8990               END IF;
8991               RAISE  FND_API.G_EXC_ERROR;
8992         END IF;
8993 
8994    END IF;--end of code to delete budget line
8995 
8996    IF fnd_api.to_boolean(p_commit)
8997    THEN
8998        COMMIT;
8999    END IF;
9000 
9001    IF ( l_debug_mode = 'Y' ) THEN
9002          pa_debug.reset_curr_function;
9003    END IF;
9004 
9005 
9006 EXCEPTION
9007 
9008    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
9009    THEN
9010 
9011    ROLLBACK TO delete_budget_line_pub;
9012 
9013    p_return_status := FND_API.G_RET_STS_ERROR;
9014    l_msg_count := FND_MSG_PUB.count_msg;
9015 
9016    IF l_msg_count = 1 and p_msg_data IS NULL THEN
9017          PA_INTERFACE_UTILS_PUB.get_messages
9018          (p_encoded        => FND_API.G_TRUE
9019          ,p_msg_index      => 1
9020          ,p_msg_count      => l_msg_count
9021          ,p_msg_data       => l_msg_data
9022          ,p_data           => l_data
9023          ,p_msg_index_out  => l_msg_index_out);
9024          p_msg_data  := l_data;
9025          p_msg_count := l_msg_count;
9026    ELSE
9027          p_msg_count := l_msg_count;
9028    END IF;
9029 
9030    IF ( l_debug_mode = 'Y' ) THEN
9031          pa_debug.reset_curr_function;
9032    END IF;
9033 
9034    RETURN;
9035 
9036 
9037    WHEN FND_API.G_EXC_ERROR
9038    THEN
9039 
9040    ROLLBACK TO delete_budget_line_pub;
9041 
9042    p_return_status := FND_API.G_RET_STS_ERROR;
9043 
9044    FND_MSG_PUB.Count_And_Get
9045    (   p_count     =>  p_msg_count ,
9046        p_data      =>  p_msg_data  );
9047 
9048    IF ( l_debug_mode = 'Y' ) THEN
9049          pa_debug.reset_curr_function;
9050    END IF;
9051 
9052 
9053    WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9054    THEN
9055 
9056    ROLLBACK TO delete_budget_line_pub;
9057 
9058    p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9059 
9060    FND_MSG_PUB.Count_And_Get
9061    (   p_count     =>  p_msg_count ,
9062        p_data      =>  p_msg_data  );
9063 
9064    IF ( l_debug_mode = 'Y' ) THEN
9065          pa_debug.reset_curr_function;
9066    END IF;
9067 
9068 
9069    WHEN ROW_ALREADY_LOCKED
9070    THEN
9071    ROLLBACK TO delete_budget_line_pub;
9072 
9073    p_return_status := FND_API.G_RET_STS_ERROR;
9074 
9075    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9076    THEN
9077      FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
9078      FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_project_number);
9079      FND_MESSAGE.SET_TOKEN('TASK',    l_amg_task_number);
9080      FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', l_budget_type_code);
9081      FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
9082      FND_MESSAGE.SET_TOKEN('START_DATE',fnd_date.date_to_chardate(dateval => p_start_date, calendar_aware => 1)); -- rmunjulu pass additional parameter to make it calendar aware
9083      FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_LINE_CODE');
9084      FND_MSG_PUB.ADD;
9085    END IF;
9086 
9087    FND_MSG_PUB.Count_And_Get
9088            (   p_count     =>  p_msg_count ,
9089                p_data      =>  p_msg_data  );
9090 
9091    IF ( l_debug_mode = 'Y' ) THEN
9092          pa_debug.reset_curr_function;
9093    END IF;
9094 
9095 
9096    WHEN OTHERS THEN
9097 
9098    ROLLBACK TO delete_budget_line_pub;
9099 
9100    p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9101 
9102    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9103    THEN
9104        FND_MSG_PUB.add_exc_msg
9105        (  p_pkg_name       => G_PKG_NAME
9106        ,  p_procedure_name => l_api_name );
9107 
9108    END IF;
9109 
9110    FND_MSG_PUB.Count_And_Get
9111    (   p_count     =>  p_msg_count ,
9112        p_data      =>  p_msg_data  );
9113 
9114     IF ( l_debug_mode = 'Y' ) THEN
9115           pa_debug.reset_curr_function;
9116     END IF;
9117 
9118 END delete_budget_line;
9119 
9120 
9121 ----------------------------------------------------------------------------------------
9122 --Name:               update_budget
9123 --Type:               Procedure
9124 --Description:        This procedure can be used to update a working budget and it's
9125 --                budget lines.
9126 --
9127 --Called subprograms:   pa_budget_pvt.insert_budget_line
9128 --          pa_budget_pvt.update_budget_line_sql
9129 --
9130 --
9131 --
9132 --History:
9133 --    14-OCT-1996        L. de Werker    Created
9134 --    19-NOV-1996    L. de Werker    Changed for use of INSERT_BUDGET_LINE and
9135 --                   UPDATE_BUDGET_LINE_SQL
9136 --    28-NOV-1996    L. de Werker    Added 16 parameters for descriptive flexfields
9137 --    05-DEC-1996    L. de Werker    Added validation for change_reason_code
9138 --                   Corrected error when no resource assignment is found.
9139 --    26-APR-2005    Bug 4224464. Changed the procedure update_budget to support finplan model.
9140 
9141 PROCEDURE update_budget
9142 ( p_api_version_number      IN  NUMBER
9143  ,p_commit          IN  VARCHAR2        := FND_API.G_FALSE
9144  ,p_init_msg_list       IN  VARCHAR2        := FND_API.G_FALSE
9145  ,p_msg_count           OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9146  ,p_msg_data            OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9147  ,p_return_status       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9148  ,p_pm_product_code     IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9149  ,p_pa_project_id       IN  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9150  ,p_pm_project_reference    IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9151  ,p_budget_type_code        IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9152  ,p_change_reason_code      IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9153  ,p_description         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9154  ,p_attribute_category      IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9155  ,p_attribute1          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9156  ,p_attribute2          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9157  ,p_attribute3          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9158  ,p_attribute4          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9159  ,p_attribute5          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9160  ,p_attribute6          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9161  ,p_attribute7          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9162  ,p_attribute8          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9163  ,p_attribute9          IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9164  ,p_attribute10         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9165  ,p_attribute11         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9166  ,p_attribute12         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9167  ,p_attribute13         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9168  ,p_attribute14         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9169  ,p_attribute15         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9170  ,p_budget_lines_in     IN  budget_line_in_tbl_type
9171  ,p_budget_lines_out        OUT NOCOPY budget_line_out_tbl_type
9172   --Added for the bug 3453650
9173  ,p_resource_list_id              IN   pa_budget_versions.resource_list_id%TYPE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9174  ,p_set_current_working_flag      IN   pa_budget_versions.current_working_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9175 -- ,p_locked_by_person_id           IN   pa_budget_versions.locked_by_person_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9176  ,p_budget_version_number         IN   pa_budget_versions.version_number%TYPE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9177  ,p_budget_version_name           IN   pa_budget_versions.version_name%TYPE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9178  ,p_version_type                  IN   pa_budget_versions.version_type%TYPE  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  -- 3453650
9179  ,p_finplan_type_id               IN   pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9180  ,p_finplan_type_name             IN   pa_fin_plan_types_vl.name%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9181  ,p_plan_in_multi_curr_flag       IN   pa_proj_fp_options.plan_in_multi_curr_flag%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9182  ,p_time_phased_code              IN   pa_proj_fp_options.cost_time_phased_code%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9183  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9184  ,p_projfunc_cost_rate_date_typ   IN   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9185  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9186  ,p_projfunc_cost_exchange_rate   IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9187  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9188  ,p_projfunc_rev_rate_date_typ    IN   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9189  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9190  ,p_projfunc_rev_exchange_rate    IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9191  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9192  ,p_project_cost_rate_date_typ    IN   pa_proj_fp_options.project_cost_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9193  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9194  ,p_project_cost_exchange_rate    IN  pa_budget_lines.project_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9195  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9196  ,p_project_rev_rate_date_typ     IN   pa_proj_fp_options.project_rev_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9197  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9198  ,p_project_rev_exchange_rate     IN  pa_budget_lines.project_rev_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9199 /* Plan Amount Entry flags introduced by bug 6408139 */
9200  ,p_raw_cost_flag                 IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9201  ,p_burdened_cost_flag            IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9202  ,p_revenue_flag                  IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9203  ,p_cost_qty_flag                 IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9204  ,p_revenue_qty_flag              IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9205  ,p_all_qty_flag                  IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9206  ,p_bill_rate_flag                IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9207  ,p_cost_rate_flag                IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9208  ,p_burden_rate_flag              IN   VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9209 )
9210 IS
9211 
9212 
9213    --needed to check the validity of the incoming budget type
9214 
9215    CURSOR l_budget_type_csr
9216       (p_budget_type_code   VARCHAR2 )
9217    IS
9218    SELECT budget_amount_code
9219    FROM   pa_budget_types
9220    WHERE  budget_type_code = p_budget_type_code;
9221 
9222    --needed to check whether budget line already exists
9223 
9224    CURSOR l_budget_line_csr
9225       (p_resource_assigment_id NUMBER
9226       ,p_budget_start_date     DATE )
9227    IS
9228    SELECT 'X'
9229    FROM   pa_budget_lines
9230    WHERE  resource_assignment_id = p_resource_assigment_id
9231    AND    start_date = p_budget_start_date;
9232 
9233    --needed to get the current budget version data
9234 
9235    CURSOR l_budget_version_csr
9236           ( p_project_id NUMBER
9237           , p_budget_type_code VARCHAR2 )
9238    IS
9239    SELECT budget_version_id
9240    ,      budget_entry_method_code
9241    ,      resource_list_id
9242    ,      change_reason_code
9243    ,      description
9244    FROM   pa_budget_versions
9245    WHERE  project_id        = p_project_id
9246    AND    budget_type_code  = p_budget_type_code
9247    AND    budget_status_code    = 'W';
9248 
9249    --needed to get the current budget entry method data
9250 
9251    CURSOR l_budget_entry_method_csr
9252           ( p_budget_entry_method_code VARCHAR2)
9253    IS
9254    SELECT time_phased_type_code
9255    ,      entry_level_code
9256    ,      categorization_code
9257    FROM   pa_budget_entry_methods
9258    WHERE  budget_entry_method_code = p_budget_entry_method_code;
9259 
9260    --needed to get the resource assignment for this budget_version / task / member combination
9261 
9262    CURSOR l_resource_assignment_csr
9263       (p_budget_version_id  NUMBER
9264       ,p_task_id        NUMBER
9265       ,p_member_id      NUMBER
9266 	  ,p_c_cbs_element_id      NUMBER)
9267    IS
9268    SELECT resource_assignment_id
9269    FROM   pa_resource_assignments
9270    WHERE  budget_version_id = p_budget_version_id
9271    AND    task_id = p_task_id
9272    AND    resource_list_member_id = p_member_id
9273    and NVL(CBS_ELEMENT_ID,-1)=NVL(p_c_cbs_element_id,-1);  --Bug 16604257
9274 
9275    -- needed to get the budget_start_date of a period
9276 
9277    CURSOR   l_budget_periods_csr
9278         (p_period_name      VARCHAR2
9279         ,p_period_type_code VARCHAR2    )
9280    IS
9281    SELECT trunc(period_start_date)
9282    FROM   pa_budget_periods_v
9283    WHERE  period_name = p_period_name
9284    AND    period_type_code = p_period_type_code;
9285 
9286    -- the uncategorized resource list
9287 
9288 
9289 
9290 
9291    -- FP.M Resource LIst Data Model Impact Changes, 09-JUN-04, jwhite -----------------------------
9292 
9293    -- Augmented original code with additional filter
9294 
9295 /* -- Original Logic
9296 
9297    CURSOR l_uncategorized_list_csr
9298    IS
9299    SELECT prlm.resource_list_member_id
9300    FROM   pa_resource_lists prl
9301    ,      pa_resource_list_members prlm
9302    WHERE  prl.resource_list_id = prlm.resource_list_id
9303    AND    prl.uncategorized_flag='Y';
9304 
9305 */
9306 
9307    -- FP.M Data Model Logic
9308 
9309    CURSOR l_uncategorized_list_csr
9310    IS
9311    SELECT prlm.resource_list_member_id
9312    FROM   pa_resource_lists prl
9313    ,      pa_resource_list_members prlm
9314    WHERE  prl.resource_list_id = prlm.resource_list_id
9315    AND    prl.uncategorized_flag='Y'
9316    and    prlm.resource_class_code = 'FINANCIAL_ELEMENTS';
9317 
9318 
9319    -- End: FP.M Resource LIst Data Model Impact Changes -----------------------------
9320 
9321 
9322 
9323 
9324    CURSOR   l_budget_change_reason_csr ( p_change_reason_code VARCHAR2 )
9325    IS
9326    SELECT 'x'
9327    FROM   pa_lookups
9328    WHERE  lookup_type = 'BUDGET CHANGE REASON'
9329    AND    lookup_code = p_change_reason_code;
9330 
9331    --needed for locking of budget rows
9332 
9333    CURSOR l_lock_budget_csr( p_budget_version_id NUMBER )
9334    IS
9335    SELECT 'x'
9336    FROM   pa_budget_versions bv
9337    ,      pa_resource_assignments ra
9338    ,      pa_budget_lines bl
9339    WHERE  bv.budget_version_id = p_budget_version_id
9340    AND    bv.budget_version_id = ra.budget_version_id (+)
9341    AND    ra.resource_assignment_id = bl.resource_assignment_id (+)
9342    AND    bv.ci_id IS NULL         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause bv.ci_id IS NULL--Bug # 3507156
9343    FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
9344 
9345    l_api_name           CONSTANT    VARCHAR2(30)        := 'update_budget';
9346 
9347    l_return_status              VARCHAR2(1);
9348    l_project_id                 NUMBER;
9349    l_task_id                    NUMBER;
9350    l_dummy                  VARCHAR2(1);
9351    l_budget_version_id              NUMBER;
9352    l_budget_entry_method_code           VARCHAR2(30);
9353    l_change_reason_code             VARCHAR2(30);
9354    l_description                VARCHAR2(255);
9355    l_budget_line_index              NUMBER;
9356    l_budget_line_in_rec             pa_budget_pub.budget_line_in_rec_type;
9357    l_time_phased_type_code          VARCHAR2(30);
9358    l_resource_assignment_id         NUMBER;
9359    l_budget_start_date              DATE;
9360    l_resource_list_id               NUMBER;
9361    l_resource_list_member_id            NUMBER;
9362    l_resource_name              VARCHAR2(80); --bug 3711693
9363    l_budget_amount_code             VARCHAR2(30);
9364    l_entry_level_code               VARCHAR2(30);
9365    l_categorization_code            VARCHAR2(30);
9366 
9367    l_msg_count                  NUMBER;
9368    l_msg_data                   VARCHAR2(2000);
9369 
9370    l_err_code                   NUMBER;
9371    l_err_stage                  VARCHAR2(120);
9372    l_err_stack                  VARCHAR2(630);
9373 
9374    --used by dynamic SQL
9375    l_statement                  VARCHAR2(2000);
9376    l_update_yes_flag                VARCHAR2(1);
9377    l_cursor_id                  NUMBER;
9378    l_rows                   NUMBER;
9379    l_new_resource_assignment            BOOLEAN;
9380    l_function_allowed               VARCHAR2(1);
9381    l_resp_id                    NUMBER := 0;
9382    l_user_id                                NUMBER := 0;
9383    l_module_name                                VARCHAR2(80);
9384    l_budget_rlmid                               NUMBER;
9385    l_budget_alias                               VARCHAR2(80);  --bug 3711693
9386    l_uncategorized_list_id          NUMBER;
9387    l_uncategorized_rlmid                        NUMBER;
9388    l_uncategorized_resid                        NUMBER;
9389    l_track_as_labor_flag                        VARCHAR2(1);
9390    l_multi_currency_billing_flag      PA_PROJECTS_ALL.MULTI_CURRENCY_BILLING_FLAG%TYPE;
9391 
9392    temp_budget_start_date DATE;  -- adding this variable to store the budget_start_date value bug#12424439 ->FP:Bug#12606319
9393 
9394 l_amg_segment1       VARCHAR2(25);
9395 l_amg_task_number       VARCHAR2(50);
9396 
9397 --needed to get the field values associated to a AMG message
9398 
9399    CURSOR   l_amg_project_csr
9400       (p_pa_project_id pa_projects.project_id%type)
9401    IS
9402    SELECT   segment1
9403    FROM     pa_projects p
9404    WHERE p.project_id = p_pa_project_id;
9405 
9406    CURSOR   l_amg_task_csr
9407       (p_pa_task_id pa_tasks.task_id%type)
9408    IS
9409    SELECT   task_number
9410    FROM     pa_tasks p
9411    WHERE p.task_id = p_pa_task_id;
9412 
9413 p_multiple_task_msg     VARCHAR2(1) := 'T';
9414 
9415 --Added for the bug 3453650
9416    CURSOR l_budget_attrs_csr(p_budget_type_code VARCHAR2,p_project_id number)
9417    IS
9418    SELECT BUDGET_VERSION_ID,version_name,budget_entry_method_code,
9419    RESOURCE_LIST_ID,CHANGE_REASON_CODE,DESCRIPTION
9420    FROM PA_BUDGET_VERSIONS
9421    --WHERE VERSION_NAME=p_budget_version_number
9422    Where budget_type_code=p_budget_type_code
9423    and project_id = p_project_id
9424    and budget_status_code    = 'W';
9425 
9426    /* Version number is mandatory for the finplan model */
9427    CURSOR l_finplan_attrs_csr(c_budget_version_id NUMBER)
9428    IS
9429    SELECT version_name,CURRENT_WORKING_FLAG,
9430    RESOURCE_LIST_ID,CHANGE_REASON_CODE,DESCRIPTION,version_type
9431    FROM PA_BUDGET_VERSIONS
9432    WHERE budget_version_id = c_budget_version_id;
9433 
9434    CURSOR l_finplan_type_name_csr(p_finplan_type_id NUMBER)
9435    IS
9436    SELECT name
9437    FROM pa_fin_plan_types_vl
9438    WHERE fin_plan_type_id=p_finplan_type_id;
9439 
9440 
9441 
9442    CURSOR get_resource_list_name_csr(p_resource_list_id NUMBER)
9443    IS
9444    SELECT name
9445    FROM pa_resource_lists
9446    WHERE p_resource_list_id=p_resource_list_id;
9447 
9448    CURSOR get_status_code_csr(p_budget_version_id NUMBER)
9449    IS
9450    select budget_status_code
9451    from pa_budget_versions
9452    where budget_version_id = p_budget_version_id;
9453 
9454    CURSOR l_finplan_line_csr
9455       (p_resource_assigment_id NUMBER
9456       ,p_budget_start_date     DATE
9457       ,p_txn_currency_code VARCHAR2)
9458    IS
9459    SELECT 'X'
9460    FROM   pa_budget_lines
9461    WHERE  resource_assignment_id = p_resource_assigment_id
9462    AND    start_date = p_budget_start_date
9463    AND    txn_currency_code = p_txn_currency_code;
9464 
9465 /*Added a new cursor c_dff_values for Bug 6417360*/
9466    cursor c_dff_values(p_budget_version_id NUMBER)
9467    is
9468    select attribute_category,
9469    attribute1,
9470    attribute2,
9471    attribute3,
9472    attribute4,
9473    attribute5,
9474    attribute6,
9475    attribute7,
9476    attribute8,
9477    attribute9,
9478    attribute10,
9479    attribute11,
9480    attribute12,
9481    attribute13,
9482    attribute14,
9483    attribute15
9484    from pa_budget_versions
9485    where budget_version_id = p_budget_version_id;
9486 /*End of code for Bug 6417360*/
9487 
9488    l_budget_version_name       pa_budget_versions.version_name%TYPE := null;
9489    l_fin_plan_type_id          number;
9490    l_fin_plan_type_name        pa_fin_plan_types_tl.name%TYPE:=null;
9491    l_current_working_flag      pa_budget_versions.current_working_flag%TYPE :=null;
9492    l_budget_entry_code         pa_budget_versions.budget_entry_method_code%TYPE :=null;
9493 --   l_locked_by_person_id       pa_budget_versions.locked_by_person_id%TYPE;
9494    l_record_version_number     pa_budget_versions.record_version_number%TYPE;
9495 
9496    l_amount_set_id             pa_proj_fp_options.all_amount_set_id%TYPE;
9497    l_fin_plan_level_code            pa_proj_fp_options.cost_fin_plan_level_code%TYPE :=null;
9498    l_person_id per_all_people_f.person_id%TYPE;
9499    l_resource_id per_all_people_f.person_id%TYPE;
9500    l_baselined_version_id NUMBER;
9501    l_debug_mode VARCHAR2(1);
9502    l_version_type pa_budget_versions.version_type%TYPE;
9503    l_curr_work_version_id VARCHAR2(15);
9504    l_debug_level5            CONSTANT NUMBER :=5;
9505    l_baselined_Ver_options_id VARCHAR2(15);
9506    l_budget_lines_in                budget_line_in_tbl_type;
9507    l_debug_level3          CONSTANT NUMBER := 3;
9508    l_finplan_lines_tab              pa_fin_plan_pvt.budget_lines_tab;
9509    l_uncategorized_res_list_id pa_resource_list_members.resource_list_id%TYPE;
9510    l_unit_of_measure pa_resources.unit_of_measure%TYPE;
9511    l_unc_track_as_labor_flag pa_resource_list_members.track_as_labor_flag%TYPE;
9512    l_unc_unit_of_measure            pa_resources.unit_of_measure%TYPE;
9513    -- Bug Fix: 4569365. Removed MRC code.
9514    -- l_calling_context               pa_mrc_finplan.g_calling_module%TYPE;
9515    l_calling_context               VARCHAR2(30);
9516 
9517    l_budget_status_code     pa_budget_versions.budget_status_code%TYPE;
9518 
9519    lx_budget_version_name       pa_budget_versions.version_name%TYPE := null;
9520    lx_budget_version_number    pa_budget_versions.version_number%TYPE  :=null;
9521    lx_version_type             pa_budget_versions.version_type%TYPE := null;
9522    lx_fin_plan_type_id         pa_fin_plan_types_b.fin_plan_type_id%TYPE :=null;
9523    lx_fin_plan_type_name       pa_fin_plan_types_tl.name%TYPE:=null;
9524    lx_set_current_working_flag      pa_budget_versions.current_working_flag%TYPE :=null;
9525    lx_locked_by_person_id       pa_budget_versions.locked_by_person_id%TYPE;
9526    lx_resource_list_id         pa_budget_versions.resource_list_id%TYPE;
9527    lx_plan_in_multi_curr_flag  pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
9528    lx_time_phased_type_code    pa_proj_fp_options.cost_time_phased_code%TYPE;
9529    lx_resource_list_name       pa_resource_lists_all_bg.Name%TYPE := null;
9530    lx_raw_cost_flag                  VARCHAR2(1) ;
9531    lx_burdened_cost_flag             VARCHAR2(1);
9532    lx_revenue_flag                   VARCHAR2(1);
9533    lx_cost_qty_flag                  VARCHAR2(1);
9534    lx_revenue_qty_flag               VARCHAR2(1);
9535    lx_all_qty_flag                   VARCHAR2(1);
9536    x_return_status VARCHAR2(1);
9537    lx_projfunc_cost_rate_type        pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
9538    lx_projfunc_cost_rate_date_typ    pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
9539    lx_projfunc_cost_rate_date        pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
9540    lx_projfunc_rev_rate_type         pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
9541    lx_projfunc_rev_rate_date_typ     pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
9542    lx_projfunc_rev_rate_date         pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
9543    lx_project_cost_rate_type         pa_proj_fp_options.project_cost_rate_type%TYPE ;
9544    lx_project_cost_rate_date_typ     pa_proj_fp_options.project_cost_rate_date_type%TYPE  ;
9545    lx_project_cost_rate_date         pa_proj_fp_options.project_cost_rate_date%TYPE ;
9546    lx_project_rev_rate_type          pa_proj_fp_options.project_rev_rate_type%TYPE  ;
9547    lx_project_rev_rate_date_typ      pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
9548    lx_project_rev_rate_date          pa_proj_fp_options.project_rev_rate_date%TYPE ;
9549 
9550    l_project_currency_code            pa_projects_all.project_currency_code%TYPE;  -- 3453650
9551    l_projfunc_currency_code           pa_projects_all.projfunc_currency_code%TYPE; -- 3453650
9552 
9553    i number;
9554    j number;
9555    lx_change_reason_code VARCHAR2(30);
9556 
9557    l_data                       VARCHAR2(2000);
9558    l_msg_index_out               NUMBER;
9559 
9560 /*Commenting the old variables and adding new ones for bug 6408139*/
9561    /*Earlier they were not being used anywhere else, but now will be used */
9562 --   l_bill_rate_flag        pa_fin_plan_amount_sets.bill_rate_flag%type;
9563 --   l_cost_rate_flag        pa_fin_plan_amount_sets.cost_rate_flag%type;
9564 --   l_burden_rate_flag      pa_fin_plan_amount_sets.burden_rate_flag%type;
9565    lx_bill_rate_flag        pa_fin_plan_amount_sets.bill_rate_flag%type;
9566    lx_cost_rate_flag        pa_fin_plan_amount_sets.cost_rate_flag%type;
9567    lx_burden_rate_flag      pa_fin_plan_amount_sets.burden_rate_flag%type;
9568    l_using_resource_lists_flag           VARCHAR2(1);
9569    l_mfc_cost_type_id_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
9570    l_etc_method_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
9571    l_spread_curve_id_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
9572    l_budget_type_code                    pa_budget_types.budget_type_code%TYPE;
9573    l_amg_project_number                  pa_projects_all.segment1%TYPE;
9574    l_proj_fp_options_id             pa_proj_fp_options.proj_fp_options_id%TYPE;
9575    l_CW_version_id                  pa_budget_versions.budget_version_id%TYPE;
9576    l_CW_record_version_number       pa_budget_versions.record_Version_number%TYPE;
9577    l_allow_qty_flag                  VARCHAR2(1);
9578    l_conv_attrs_to_be_validated     VARCHAR2(30);
9579    l_is_rate_type_valid             BOOLEAN;
9580    l_call_validate_curr_api_flg     VARCHAR2(1);
9581    l_projfunc_cost_rate_type        pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
9582    l_projfunc_rev_rate_type         pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
9583    l_project_cost_rate_type         pa_proj_fp_options.project_cost_rate_type%TYPE ;
9584    l_project_rev_rate_type          pa_proj_fp_options.project_rev_rate_type%TYPE ;
9585    l_projfunc_cost_exchange_rate    pa_budget_lines.projfunc_cost_exchange_rate%TYPE;
9586    l_projfunc_rev_exchange_rate     pa_budget_lines.projfunc_rev_exchange_rate%TYPE;
9587    l_project_cost_exchange_rate     pa_budget_lines.project_cost_exchange_rate%TYPE;
9588    l_project_rev_exchange_rate      pa_budget_lines.project_rev_exchange_rate%TYPE;
9589 
9590    l_version_info_rec           pa_fp_gen_amount_utils.fp_cols;
9591    /*Added local variables for bug 6408139*/
9592    l_plan_pref_code        pa_proj_fp_options.fin_plan_preference_code%TYPE;
9593    l_cost_amount_set_id    pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9594    l_rev_amount_set_id     pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9595    l_all_amount_set_id     pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9596    l_proj_fp_options_id_new             pa_proj_fp_options.proj_fp_options_id%TYPE;
9597 
9598 
9599 /*Added local variables for Bug 6417360*/
9600    l_attribute_category   pa_budget_versions.attribute_category%type;
9601    l_attribute1           pa_budget_versions.attribute1%type;
9602    l_attribute2           pa_budget_versions.attribute2%type;
9603    l_attribute3           pa_budget_versions.attribute3%type;
9604    l_attribute4           pa_budget_versions.attribute4%type;
9605    l_attribute5           pa_budget_versions.attribute5%type;
9606    l_attribute6           pa_budget_versions.attribute6%type;
9607    l_attribute7           pa_budget_versions.attribute7%type;
9608    l_attribute8           pa_budget_versions.attribute8%type;
9609    l_attribute9           pa_budget_versions.attribute9%type;
9610    l_attribute10          pa_budget_versions.attribute10%type;
9611    l_attribute11          pa_budget_versions.attribute11%type;
9612    l_attribute12          pa_budget_versions.attribute12%type;
9613    l_attribute13          pa_budget_versions.attribute13%type;
9614    l_attribute14          pa_budget_versions.attribute14%type;
9615    l_attribute15          pa_budget_versions.attribute15%type;
9616 
9617    l_validate_status      varchar2(1);
9618 /*End of code for Bug 6417360*/
9619 
9620 BEGIN
9621 
9622 --  Standard begin of API savepoint
9623 
9624     SAVEPOINT update_budget_pub;
9625 
9626     --Added for the bug 3453650
9627     IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9628       lx_change_reason_code := NULL;
9629     ELSE
9630       lx_change_reason_code              :=   p_change_reason_code ;
9631     END IF;
9632 
9633     IF p_set_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9634       lx_set_current_working_flag := NULL;
9635     ELSE
9636       lx_set_current_working_flag              :=   p_set_current_working_flag  ;
9637     END IF;
9638 
9639     IF p_budget_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9640       lx_budget_version_number := NULL;
9641     ELSE
9642       lx_budget_version_number              :=   p_budget_version_number  ;
9643     END IF;
9644 
9645     IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9646       lx_projfunc_cost_rate_type := NULL;
9647     ELSE
9648       lx_projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
9649     END IF;
9650 
9651      IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9652       lx_projfunc_cost_rate_date_typ  := NULL;
9653     ELSE
9654       lx_projfunc_cost_rate_date_typ   :=   p_projfunc_cost_rate_date_typ  ;
9655     END IF;
9656 
9657     IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9658       lx_projfunc_cost_rate_date := NULL;
9659     ELSE
9660       lx_projfunc_cost_rate_date       :=   p_projfunc_cost_rate_date      ;
9661     END IF;
9662 
9663     IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9664       lx_projfunc_rev_rate_type := NULL;
9665     ELSE
9666       lx_projfunc_rev_rate_type        :=   p_projfunc_rev_rate_type       ;
9667     END IF;
9668 
9669     IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9670       lx_projfunc_rev_rate_date_typ  := NULL;
9671     ELSE
9672       lx_projfunc_rev_rate_date_typ    :=   p_projfunc_rev_rate_date_typ   ;
9673     END IF;
9674 
9675     IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9676       lx_projfunc_rev_rate_date := NULL;
9677     ELSE
9678       lx_projfunc_rev_rate_date        :=   p_projfunc_rev_rate_date       ;
9679     END IF;
9680 
9681     IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9682       lx_project_cost_rate_type := NULL;
9683     ELSE
9684       lx_project_cost_rate_type        :=   p_project_cost_rate_type       ;
9685     END IF;
9686 
9687     IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9688       lx_project_cost_rate_date_typ  := NULL;
9689     ELSE
9690       lx_project_cost_rate_date_typ    :=   p_project_cost_rate_date_typ   ;
9691     END IF;
9692 
9693     IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9694       lx_project_cost_rate_date := NULL;
9695     ELSE
9696       lx_project_cost_rate_date        :=   p_project_cost_rate_date       ;
9697     END IF;
9698 
9699     IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9700       lx_project_rev_rate_type := NULL;
9701     ELSE
9702       lx_project_rev_rate_type         :=   p_project_rev_rate_type        ;
9703     END IF;
9704 
9705     IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9706       lx_project_rev_rate_date_typ  := NULL;
9707     ELSE
9708       lx_project_rev_rate_date_typ     :=   p_project_rev_rate_date_typ    ;
9709     END IF;
9710 
9711     IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9712       lx_project_rev_rate_date := NULL;
9713     ELSE
9714       lx_project_rev_rate_date         :=   p_project_rev_rate_date        ;
9715     END IF;
9716     /*Added checks for Plan Amount Entry Flags for bug 6408139*/
9717     /*If the flags are PASSED as NULL, then it would mean that */
9718     /*user wants to make the flag as 'N' */
9719     IF p_raw_cost_flag = NULL THEN
9720       lx_raw_cost_flag  := 'N';
9721     ELSE
9722       lx_raw_cost_flag                 :=   p_raw_cost_flag                ;
9723     END IF;
9724 
9725     IF p_burdened_cost_flag = NULL THEN
9726       lx_burdened_cost_flag  := 'N';
9727     ELSE
9728       lx_burdened_cost_flag            :=   p_burdened_cost_flag           ;
9729     END IF;
9730 
9731     IF p_revenue_flag = NULL THEN
9732       lx_revenue_flag  := 'N';
9733     ELSE
9734       lx_revenue_flag                  :=   p_revenue_flag                 ;
9735     END IF;
9736 
9737     IF p_cost_qty_flag = NULL THEN
9738       lx_cost_qty_flag  := 'N';
9739     ELSE
9740       lx_cost_qty_flag                 :=   p_cost_qty_flag                ;
9741     END IF;
9742 
9743     IF p_revenue_qty_flag = NULL THEN
9744       lx_revenue_qty_flag  := 'N';
9745     ELSE
9746       lx_revenue_qty_flag              :=   p_revenue_qty_flag             ;
9747     END IF;
9748 
9749     IF p_all_qty_flag = NULL THEN
9750       lx_all_qty_flag  := 'N';
9751     ELSE
9752       lx_all_qty_flag                  :=   p_all_qty_flag                 ;
9753     END IF;
9754 
9755     IF p_bill_rate_flag = NULL THEN
9756       lx_bill_rate_flag  := 'N';
9757     ELSE
9758       lx_bill_rate_flag                  :=   p_bill_rate_flag                 ;
9759     END IF;
9760 
9761     IF p_cost_rate_flag = NULL THEN
9762       lx_cost_rate_flag  := 'N';
9763     ELSE
9764       lx_cost_rate_flag                  :=   p_cost_rate_flag                 ;
9765     END IF;
9766 
9767     IF p_burden_rate_flag = NULL THEN
9768       lx_burden_rate_flag  := 'N';
9769     ELSE
9770       lx_burden_rate_flag                 :=   p_burden_rate_flag                 ;
9771     END IF;
9772     /*Checks End for Plan Amount Entry Flags for bug 6408139*/
9773 
9774     l_user_id := FND_GLOBAL.User_id;
9775 
9776 /*  The G_MISS_XXX/null handling for these variables below has been deleted from the existing code in update_budget
9777     . This handling would be done in validate_header_info now */
9778     l_project_id          :=  p_pa_project_id;
9779     l_budget_type_code    :=  p_budget_type_code;
9780     l_fin_plan_type_id    :=  p_finplan_type_id;
9781     lx_fin_plan_type_name :=  p_finplan_type_name;
9782     lx_version_type       :=  p_version_type  ;
9783 
9784      --Call PA_BUDGET_PVT.validate_header_info to do the necessary
9785      --header level validations
9786      PA_BUDGET_PVT.validate_header_info
9787           ( p_api_version_number          => p_api_version_number
9788            ,p_api_name                    => l_api_name
9789            ,p_init_msg_list               => p_init_msg_list
9790            ,px_pa_project_id              => l_project_id
9791            ,p_pm_project_reference        => p_pm_project_reference
9792            ,p_pm_product_code             => p_pm_product_code
9793            ,px_budget_type_code           => l_budget_type_code
9794            ,px_fin_plan_type_id           => l_fin_plan_type_id
9795            ,px_fin_plan_type_name         => lx_fin_plan_type_name
9796            ,px_version_type               => lx_version_type
9797            ,p_budget_version_number       => p_budget_version_number
9798            ,p_change_reason_code          => lx_change_reason_code
9799            ,p_function_name               => 'PA_PM_UPDATE_BUDGET'
9800            ,x_budget_entry_method_code    => l_budget_entry_method_code
9801            ,x_resource_list_id            => lx_resource_list_id
9802            ,x_budget_version_id           => l_budget_version_id
9803            ,x_fin_plan_level_code         => l_fin_plan_level_code
9804            ,x_time_phased_code            => lx_time_phased_type_code
9805            ,x_plan_in_multi_curr_flag     => lx_plan_in_multi_curr_flag
9806            ,x_budget_amount_code          => l_budget_amount_code
9807            ,x_categorization_code         => l_categorization_code
9808            ,x_project_number              => l_amg_project_number
9809            /* Plan Amount Entry flags introduced by bug 6408139 */
9810            ,px_raw_cost_flag              => lx_raw_cost_flag
9811            ,px_burdened_cost_flag         => lx_burdened_cost_flag
9812            ,px_revenue_flag               => lx_revenue_flag
9813            ,px_cost_qty_flag              => lx_cost_qty_flag
9814            ,px_revenue_qty_flag           => lx_revenue_qty_flag
9815            ,px_all_qty_flag               => lx_all_qty_flag
9816            ,px_bill_rate_flag             => lx_bill_rate_flag
9817            ,px_cost_rate_flag             => lx_cost_rate_flag
9818            ,px_burden_rate_flag           => lx_burden_rate_flag
9819            /* Plan Amount Entry flags introduced by bug 6408139 */
9820            ,x_msg_count                   => p_msg_count
9821            ,x_msg_data                    => p_msg_data
9822            ,x_return_status               => p_return_status );
9823 
9824      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9825            IF(l_debug_mode='Y') THEN
9826                  pa_debug.g_err_stage := 'validate header info API falied';
9827                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
9828            END IF;
9829            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9830      END IF;
9831 
9832       OPEN l_amg_project_csr( l_project_id );
9833       FETCH l_amg_project_csr INTO l_amg_segment1;
9834       CLOSE l_amg_project_csr;
9835 
9836     IF l_budget_type_code IS NOT NULL THEN
9837 
9838        OPEN l_budget_attrs_csr(l_budget_type_code,l_project_id);
9839        FETCH l_budget_attrs_csr INTO l_budget_version_id,l_budget_version_name,l_budget_entry_method_code,
9840        l_resource_list_id,l_change_reason_code,l_description;
9841        CLOSE l_budget_attrs_csr;
9842 
9843 
9844        OPEN l_budget_entry_method_csr( l_budget_entry_method_code );
9845        FETCH l_budget_entry_method_csr INTO l_time_phased_type_code
9846                        , l_entry_level_code
9847                        , l_categorization_code;
9848        CLOSE l_budget_entry_method_csr;
9849 
9850     ELSE
9851 
9852      --Bug 5031071 l_budget_version_id fetched above and will contain the value
9853        OPEN l_finplan_attrs_csr(l_budget_version_id);
9854        FETCH l_finplan_attrs_csr INTO l_budget_version_name,l_current_working_flag,
9855        l_resource_list_id,l_change_reason_code,l_description,l_version_type;
9856        CLOSE l_finplan_attrs_csr;
9857 
9858 
9859     END IF;
9860 
9861 
9862       IF l_budget_version_id IS NULL THEN
9863 
9864                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9865                 THEN
9866                       pa_interface_utils_pub.map_new_amg_msg
9867                        ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
9868                         ,p_msg_attribute    => 'CHANGE'
9869                         ,p_resize_flag      => 'N'
9870                         ,p_msg_context      => 'BUDG'
9871                         ,p_attribute1       => l_amg_segment1
9872                         ,p_attribute2       => ''
9873                         ,p_attribute3       => lx_fin_plan_type_name
9874                         ,p_attribute4       => ''
9875                         ,p_attribute5       => '');
9876                 END IF;
9877           p_multiple_task_msg  := 'F';  -- 3453650
9878       END IF;
9879 
9880   IF l_budget_type_code IS NULL THEN
9881         PA_COMP_PROFILE_PUB.GET_USER_INFO
9882                 (p_user_id         => l_user_id,
9883                  x_person_id       => l_person_id,
9884                  x_resource_id     => l_resource_id,
9885                  x_resource_name   => l_resource_name);
9886 
9887             l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
9888                                          (p_budget_version_id => l_budget_version_id);
9889 
9890       --Try to lock the version before updating the version. This is required so that nobody else can access it.
9891            pa_fin_plan_pvt.lock_unlock_version
9892                     (p_budget_version_id       => l_budget_version_id,
9893                      p_record_version_number   => l_record_version_number,
9894                      p_action                  => 'L',
9895                      p_user_id                 => l_user_id,
9896                      p_person_id               => lx_locked_by_person_id,
9897                      x_return_status           => x_return_status,
9898                      x_msg_count               => l_msg_count,
9899                      x_msg_data                => l_msg_data) ;
9900 
9901 
9902                 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
9903 
9904                      IF l_debug_mode = 'Y' THEN
9905                            pa_debug.g_err_stage := 'Error in lock unlock version - Cannot lock the version';
9906                            pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,5);
9907                      END IF;
9908 
9909                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9910                 END IF;
9911   END IF; -- END IF FOR l_budget_type_code is not null
9912 
9913 
9914      l_time_phased_type_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(l_budget_version_id);
9915 
9916 IF p_multiple_task_msg = 'F' THEN
9917 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9918 END IF;
9919 
9920      IF (p_budget_version_name IS NOT NULL AND p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9921         --(p_budget_version_name <> l_budget_version_name) THEN
9922         ((p_budget_version_name <> l_budget_version_name OR l_budget_version_name IS NULL)) THEN       --Bug 6600625
9923         lx_budget_version_name := p_budget_version_name;
9924      ELSE
9925        lx_budget_version_name := l_budget_version_name;
9926      END IF;
9927 
9928 /*Commenting for bug 6408139 */
9929 /*
9930  --Added after review comments
9931  IF l_budget_type_code IS NULL THEN
9932 -- dbms_output.put_line ('about to get plan amt flags ');
9933         l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
9934 
9935                  PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
9936                       P_AMOUNT_SET_ID      => l_amount_set_id
9937                      ,X_RAW_COST_FLAG      => lx_raw_cost_flag
9938                      ,X_BURDENED_FLAG      => lx_burdened_cost_flag
9939                      ,X_REVENUE_FLAG       => lx_revenue_flag
9940                      ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
9941                      ,X_REV_QUANTITY_FLAG  => lx_revenue_qty_flag
9942                      ,X_ALL_QUANTITY_FLAG  => lx_all_qty_flag
9943                      ,X_BILL_RATE_FLAG     => l_bill_rate_flag
9944                      ,X_COST_RATE_FLAG     => l_cost_rate_flag
9945                      ,X_BURDEN_RATE_FLAG   => l_burden_rate_flag
9946                      ,x_message_count      => l_msg_count
9947                      ,x_return_status      => x_return_status
9948                      ,x_message_data       => l_msg_data) ;
9949 
9950                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS
9951                     THEN
9952                          -- RAISE  FND_API.G_EXC_ERROR;
9953                          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9954                     END IF;
9955   END IF; -- BUDGET_TYPE_CODE IS NULL FOR FINPLAN MODEL. */
9956   /*Commenting ends for bug 6408139 */
9957 
9958 
9959   /* Modified code for bug 6408139*/
9960   /* Bug 6408139 : Get Plan Amount Entry flags ONLY if ALL the passed ones are G_PA_MISS_CHAR */
9961   /* If even a single flag has been passed as NOT G_PA_MISS_CHAR, then we have already got the */
9962   /* flags from validate_header_info */
9963  IF l_budget_type_code IS NULL THEN
9964 
9965     IF (  ( lx_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9966           ( lx_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9967       ( lx_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9968       ( lx_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9969       ( lx_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9970       ( lx_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9971       ( lx_bill_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9972       ( lx_cost_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9973       ( lx_burden_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) THEN
9974 
9975         l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
9976 
9977                  PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
9978                       P_AMOUNT_SET_ID      => l_amount_set_id
9979                      ,X_RAW_COST_FLAG      => lx_raw_cost_flag
9980                      ,X_BURDENED_FLAG      => lx_burdened_cost_flag
9981                      ,X_REVENUE_FLAG       => lx_revenue_flag
9982                      ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
9983                      ,X_REV_QUANTITY_FLAG  => lx_revenue_qty_flag
9984                      ,X_ALL_QUANTITY_FLAG  => lx_all_qty_flag
9985                      ,X_BILL_RATE_FLAG     => lx_bill_rate_flag -- l_bill_rate_flag
9986                      ,X_COST_RATE_FLAG     => lx_cost_rate_flag -- l_cost_rate_flag
9987                      ,X_BURDEN_RATE_FLAG   => lx_burden_rate_flag -- l_burden_rate_flag
9988                      ,x_message_count      => l_msg_count
9989                      ,x_return_status      => x_return_status
9990                      ,x_message_data       => l_msg_data) ;
9991 
9992                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS
9993                     THEN
9994                          -- RAISE  FND_API.G_EXC_ERROR;
9995                          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9996                     END IF;
9997 
9998     END IF ; -- Getting plan flags only when all are passed as G_PA_MISS_CHAR
9999    END IF; -- BUDGET_TYPE_CODE IS NULL FOR FINPLAN MODEL.
10000    /*Modified code ends for bug 6408139*/
10001 
10002 
10003    OPEN l_lock_budget_csr( l_budget_version_id ); -- 3453650
10004    CLOSE l_lock_budget_csr;             --FYI, does not release locks
10005 
10006 /*   -- Changes made by Xin Liu for using of SQL BIND VARIABLE 12-MAY-2003 */
10007     --building the dynamic SQL statement
10008 
10009     l_statement := ' UPDATE PA_BUDGET_VERSIONS SET ';
10010 
10011     IF  (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL)
10012     AND    nvl(p_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> nvl(l_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10013     THEN
10014 
10015              l_statement := l_statement ||
10016                            ' DESCRIPTION = :xDescription'||',';
10017 
10018             l_update_yes_flag := 'Y';
10019     END IF;
10020 
10021     IF  (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_change_reason_code IS NULL)
10022     AND    nvl(p_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> nvl(l_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10023     THEN
10024 
10025     IF ( p_change_reason_code IS NOT NULL AND
10026              p_change_reason_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10027         THEN
10028 
10029             OPEN l_budget_change_reason_csr( p_change_reason_code );
10030             FETCH l_budget_change_reason_csr INTO l_dummy;
10031 
10032             IF l_budget_change_reason_csr%NOTFOUND
10033             THEN
10034                 CLOSE l_budget_change_reason_csr;
10035 
10036             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10037             THEN
10038             pa_interface_utils_pub.map_new_amg_msg
10039              ( p_old_message_code => 'PA_CHANGE_REASON_INVALID'
10040               ,p_msg_attribute    => 'CHANGE'
10041               ,p_resize_flag      => 'N'
10042               ,p_msg_context      => 'BUDG'
10043               ,p_attribute1       => l_amg_segment1
10044               ,p_attribute2       => ''
10045               ,p_attribute3       => l_budget_type_code
10046               ,p_attribute4       => ''
10047               ,p_attribute5       => '');
10048             END IF;
10049 
10050                 RAISE FND_API.G_EXC_ERROR;
10051             END IF;
10052 
10053         CLOSE l_budget_change_reason_csr;
10054 
10055         END IF;
10056 
10057         l_statement := l_statement ||
10058                        ' CHANGE_REASON_CODE = :xChangeReasonCode'||',';
10059 
10060         l_update_yes_flag := 'Y';
10061 
10062     END IF;
10063 
10064 /*Addition for the bug 3453650 starts */
10065 -- commented below code for the bug 4702500/4730094
10066 /*
10067 IF l_budget_type_code IS NULL THEN
10068 
10069         IF (p_set_current_working_flag IS  NULL
10070         OR p_set_current_working_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10071         AND (nvl(p_set_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10072          nvl(l_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
10073         THEN
10074           l_statement := l_statement || 'CURRENT_WORKING_FLAG = :xSetCurrentWorkingFlag' || ',';
10075         l_update_yes_flag := 'Y';
10076 
10077         END IF;
10078 
10079 END IF; --l_budget_type_code is null
10080 */
10081 
10082 IF (p_budget_version_name IS NULL
10083 OR p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10084 AND  (nvl(p_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10085          nvl(l_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
10086 then
10087   l_statement := l_statement || 'VERSION_NAME = :xBudgetVersionName' || ',';
10088 
10089   l_update_yes_flag := 'Y';
10090 end if;
10091 
10092 /*Addition for the bug 3453650 ends */
10093 
10094 /*Below code is added for Bug 6417360*/
10095 
10096    open c_dff_values(l_budget_version_id);
10097 
10098    fetch c_dff_values into l_attribute_category,
10099                            l_attribute1,
10100                            l_attribute2,
10101                            l_attribute3,
10102                            l_attribute4,
10103                            l_attribute5,
10104                            l_attribute6,
10105                            l_attribute7,
10106                            l_attribute8,
10107                            l_attribute9,
10108                            l_attribute10,
10109                            l_attribute11,
10110                            l_attribute12,
10111                            l_attribute13,
10112                            l_attribute14,
10113                            l_attribute15;
10114     close c_dff_values;
10115 
10116     --Validate PA_BUDGET_VERSIONS_DESC_FLEX
10117 
10118 -- 6188316 Adding double quotes for all 15 attributes and category values being appended to Update Query String
10119 
10120     if ((p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10121          or p_attribute_category is null)
10122         and nvl(p_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10123         <> nvl(l_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10124             l_attribute_category := p_attribute_category;
10125             if l_attribute_category is null then
10126 
10127                  l_statement := l_statement ||
10128                            ' ATTRIBUTE_CATEGORY = null,';
10129             else
10130                 l_statement := l_statement ||
10131                            ' ATTRIBUTE_CATEGORY = '''||l_attribute_category||''',';
10132             end if;
10133              l_update_yes_flag := 'Y';
10134     end if;
10135 
10136     if ((p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10137          or p_attribute1 is null)
10138         and nvl(p_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10139         <> nvl(l_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10140             l_attribute1 := p_attribute1;
10141            -- dbms_output.put_line(' came inside the outer if ');
10142              if l_attribute1 is null then
10143                --  dbms_output.put_line(' came inside the inner if ');
10144                  l_statement := l_statement ||
10145                                ' ATTRIBUTE1 = null,';
10146              else
10147                 l_statement := l_statement ||
10148                                ' ATTRIBUTE1 = '''||l_attribute1||''',';
10149              end if;
10150              l_update_yes_flag := 'Y';
10151     end if;
10152 
10153     if ((p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10154          or p_attribute2 is null)
10155         and nvl(p_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10156         <> nvl(l_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10157             l_attribute2 := p_attribute2;
10158              if l_attribute2 is null then
10159                  l_statement := l_statement ||
10160                                ' ATTRIBUTE2 = null,';
10161              else
10162                 l_statement := l_statement ||
10163                                ' ATTRIBUTE2 = '''||l_attribute2||''',';
10164              end if;
10165              l_update_yes_flag := 'Y';
10166     end if;
10167 
10168     if ((p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10169          or p_attribute3 is null)
10170         and nvl(p_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10171         <> nvl(l_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10172             l_attribute3 := p_attribute3;
10173              if l_attribute3 is null then
10174                  l_statement := l_statement ||
10175                                ' ATTRIBUTE3 = null,';
10176              else
10177                 l_statement := l_statement ||
10178                                ' ATTRIBUTE3 = '''||l_attribute3||''',';
10179              end if;
10180              l_update_yes_flag := 'Y';
10181     end if;
10182 
10183     if ((p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10184          or p_attribute4 is null)
10185         and nvl(p_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10186         <> nvl(l_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10187             l_attribute4 := p_attribute4;
10188              if l_attribute4 is null then
10189                  l_statement := l_statement ||
10190                                ' ATTRIBUTE4 = null,';
10191              else
10192                 l_statement := l_statement ||
10193                                ' ATTRIBUTE4 = '''||l_attribute4||''',';
10194              end if;
10195              l_update_yes_flag := 'Y';
10196     end if;
10197 
10198     if ((p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10199          or p_attribute5 is null)
10200         and nvl(p_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10201         <> nvl(l_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10202             l_attribute5 := p_attribute5;
10203              if l_attribute5 is null then
10204                  l_statement := l_statement ||
10205                                ' ATTRIBUTE5 = null,';
10206              else
10207                 l_statement := l_statement ||
10208                                ' ATTRIBUTE5 = '''||l_attribute5||''',';
10209              end if;
10210              l_update_yes_flag := 'Y';
10211     end if;
10212 
10213     if ((p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10214          or p_attribute6 is null)
10215         and nvl(p_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10216         <> nvl(l_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10217             l_attribute6 := p_attribute6;
10218              if l_attribute6 is null then
10219                  l_statement := l_statement ||
10220                                ' ATTRIBUTE6 = null,';
10221              else
10222                 l_statement := l_statement ||
10223                                ' ATTRIBUTE6 = '''||l_attribute6||''',';
10224              end if;
10225              l_update_yes_flag := 'Y';
10226     end if;
10227 
10228     if ((p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10229          or p_attribute7 is null)
10230         and nvl(p_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10231         <> nvl(l_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10232             l_attribute7 := p_attribute7;
10233              if l_attribute7 is null then
10234                  l_statement := l_statement ||
10235                                ' ATTRIBUTE7 = null,';
10236              else
10237                 l_statement := l_statement ||
10238                                ' ATTRIBUTE7 = '''||l_attribute7||''',';
10239              end if;
10240               l_update_yes_flag := 'Y';
10241     end if;
10242 
10243     if ((p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10244          or p_attribute8 is null)
10245         and nvl(p_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10246         <> nvl(l_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10247             l_attribute8 := p_attribute8;
10248              if l_attribute8 is null then
10249                  l_statement := l_statement ||
10250                                ' ATTRIBUTE8 = null,';
10251              else
10252                 l_statement := l_statement ||
10253                                ' ATTRIBUTE8 = '''||l_attribute8||''',';
10254              end if;
10255              l_update_yes_flag := 'Y';
10256     end if;
10257 
10258     if ((p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10259          or p_attribute9 is null)
10260         and nvl(p_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10261         <> nvl(l_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10262             l_attribute9 := p_attribute9;
10263              if l_attribute9 is null then
10264                  l_statement := l_statement ||
10265                                ' ATTRIBUTE9 = null,';
10266              else
10267                 l_statement := l_statement ||
10268                                ' ATTRIBUTE9 = '''||l_attribute9||''',';
10269              end if;
10270              l_update_yes_flag := 'Y';
10271     end if;
10272 
10273     if ((p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10274          or p_attribute10 is null)
10275         and nvl(p_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10276         <> nvl(l_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10277             l_attribute10 := p_attribute10;
10278              if l_attribute10 is null then
10279                  l_statement := l_statement ||
10280                                ' ATTRIBUTE10 = null,';
10281              else
10282                 l_statement := l_statement ||
10283                                ' ATTRIBUTE10 = '''||l_attribute10||''',';
10284              end if;
10285              l_update_yes_flag := 'Y';
10286     end if;
10287 
10288     if ((p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10289          or p_attribute11 is null)
10290         and nvl(p_attribute11,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10291         <> nvl(l_attribute11,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10292             l_attribute11 := p_attribute11;
10293              if l_attribute11 is null then
10294                  l_statement := l_statement ||
10295                                ' ATTRIBUTE11 = null,';
10296              else
10297                 l_statement := l_statement ||
10298                                ' ATTRIBUTE11 = '''||l_attribute11||''',';
10299              end if;
10300              l_update_yes_flag := 'Y';
10301     end if;
10302 
10303     if ((p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10304          or p_attribute12 is null)
10305         and nvl(p_attribute12,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10306         <> nvl(l_attribute12,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10307             l_attribute12 := p_attribute12;
10308              if l_attribute12 is null then
10309                  l_statement := l_statement ||
10310                                ' ATTRIBUTE12 = null,';
10311              else
10312                 l_statement := l_statement ||
10313                                ' ATTRIBUTE12 = '''||l_attribute12||''',';
10314              end if;
10315              l_update_yes_flag := 'Y';
10316     end if;
10317 
10318     if ((p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10319          or p_attribute13 is null)
10320         and nvl(p_attribute13,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10321         <> nvl(l_attribute13,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10322             l_attribute13 := p_attribute13;
10323              if l_attribute13 is null then
10324                  l_statement := l_statement ||
10325                                ' ATTRIBUTE13 = null,';
10326              else
10327                 l_statement := l_statement ||
10328                                ' ATTRIBUTE13 = '''||l_attribute13||''',';
10329              end if;
10330              l_update_yes_flag := 'Y';
10331     end if;
10332 
10333     if ((p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10334          or p_attribute14 is null)
10335         and nvl(p_attribute14,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10336         <> nvl(l_attribute14,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10337             l_attribute14 := p_attribute14;
10338              if l_attribute14 is null then
10339                  l_statement := l_statement ||
10340                                ' ATTRIBUTE14 = null,';
10341              else
10342                 l_statement := l_statement ||
10343                                ' ATTRIBUTE14 = '''||l_attribute14||''',';
10344              end if;
10345              l_update_yes_flag := 'Y';
10346     end if;
10347 
10348     if ((p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10349          or p_attribute15 is null)
10350         and nvl(p_attribute15,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10351         <> nvl(l_attribute15,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10352             l_attribute15 := p_attribute15;
10353              if l_attribute15 is null then
10354                  l_statement := l_statement ||
10355                                ' ATTRIBUTE15 = null,';
10356              else
10357                 l_statement := l_statement ||
10358                                ' ATTRIBUTE15 = '''||l_attribute15||''',';
10359              end if;
10360              l_update_yes_flag := 'Y';
10361     end if;
10362 /*
10363     dbms_output.put_line('statement ');
10364     dbms_output.put_line('l_attribute_category '||l_attribute_category);
10365     dbms_output.put_line('l_attribute1 '||l_attribute1);
10366     dbms_output.put_line('l_attribute2 '||l_attribute2);
10367     dbms_output.put_line('l_attribute3 '||l_attribute3);
10368     dbms_output.put_line('l_attribute4 '||l_attribute4);
10369     dbms_output.put_line('l_attribute5 '||l_attribute5);
10370 
10371     dbms_output.put_line('l_attribute6 '||l_attribute6);
10372     dbms_output.put_line('l_attribute7 '||l_attribute7);
10373     dbms_output.put_line('l_attribute8 '||l_attribute8);
10374     dbms_output.put_line('l_attribute9 '||l_attribute9);
10375     dbms_output.put_line('l_attribute10 '||l_attribute10);
10376 
10377     dbms_output.put_line('l_attribute11 '||l_attribute11);
10378     dbms_output.put_line('l_attribute12 '||l_attribute12);
10379     dbms_output.put_line('l_attribute13 '||l_attribute13);
10380     dbms_output.put_line('l_attribute14 '||l_attribute14);
10381     dbms_output.put_line('l_attribute15 '||l_attribute15);*/
10382 
10383 
10384     pa_task_utils.validate_flex_fields(
10385           p_desc_flex_name        => 'PA_BUDGET_VERSIONS_DESC_FLEX'
10386          ,p_attribute_category    => l_attribute_category
10387          ,p_attribute1            => l_attribute1
10388          ,p_attribute2            => l_attribute2
10389          ,p_attribute3            => l_attribute3
10390          ,p_attribute4            => l_attribute4
10391          ,p_attribute5            => l_attribute5
10392          ,p_attribute6            => l_attribute6
10393          ,p_attribute7            => l_attribute7
10394          ,p_attribute8            => l_attribute8
10395          ,p_attribute9            => l_attribute9
10396          ,p_attribute10           => l_attribute10
10397          ,p_attribute11           => l_attribute11
10398          ,p_attribute12           => l_attribute12
10399          ,p_attribute13           => l_attribute13
10400          ,p_attribute14           => l_attribute14
10401          ,p_attribute15           => l_attribute15
10402          ,p_RETURN_msg            => l_msg_data
10403          ,p_validate_status       => l_validate_status
10404          );
10405      IF l_validate_status = 'N'
10406         THEN
10407              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10408              THEN
10409                   pa_interface_utils_pub.map_new_amg_msg
10410                             ( p_old_message_code => 'PA_INVALID_FF_VALUES'
10411                             ,p_msg_attribute    => 'CHANGE'
10412                             ,p_resize_flag      => 'N'
10413                             ,p_msg_context      => 'FLEX'
10414                             ,p_attribute1       => l_msg_data
10415                             ,p_attribute2       => ''
10416                             ,p_attribute3       => ''
10417                             ,p_attribute4       => ''
10418                             ,p_attribute5       => '');
10419             END IF;
10420         RAISE FND_API.G_EXC_ERROR;
10421      END IF;
10422 
10423 /*End of code for Bug 6417360*/
10424 
10425     IF l_update_yes_flag = 'Y'
10426     THEN
10427             l_statement := l_statement ||
10428                            ' LAST_UPDATE_DATE = '||''''||
10429                            SYSDATE||''''||',';
10430 
10431             l_statement := l_statement ||
10432                            ' LAST_UPDATED_BY = '||G_USER_ID||',';
10433 
10434             l_statement := l_statement ||
10435                            ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID;
10436 
10437             l_statement := l_statement ||
10438             ' WHERE BUDGET_VERSION_ID  = '||TO_CHAR(l_budget_version_id);
10439 
10440         l_cursor_id := DBMS_SQL.open_cursor;
10441         DBMS_SQL.parse(l_cursor_id, l_statement, DBMS_SQL.native);
10442 
10443     IF  (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL)
10444          AND    nvl(p_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10445                 nvl(l_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10446     THEN
10447       DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xDescription', p_description);
10448 
10449     END IF;
10450 
10451     IF  (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_change_reason_code IS NULL)
10452     AND  nvl(p_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10453          nvl(l_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10454     THEN
10455       DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xChangeReasonCode', p_change_reason_code);
10456 
10457     END IF;
10458 
10459 
10460 /*Addition for the bug 3453650 starts */
10461 IF l_budget_type_code IS NULL THEN
10462     IF  (p_set_current_working_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_set_current_working_flag IS NULL)
10463     AND  nvl(p_set_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10464          nvl(l_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10465     THEN
10466             -- Get the details of the current working version so as to pass it to the
10467             -- Set Current Working API.
10468             pa_fin_plan_utils.Get_Curr_Working_Version_Info(
10469                    p_project_id            => l_project_id
10470                   ,p_fin_plan_type_id      => l_fin_plan_type_id
10471                   ,p_version_type          => lx_version_type
10472                   ,x_fp_options_id         => l_proj_fp_options_id
10473                   ,x_fin_plan_version_id   => l_CW_version_id
10474                   ,x_return_status         => x_return_status
10475                   ,x_msg_count             => l_msg_count
10476                   ,x_msg_data              => l_msg_data );
10477 
10478             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10479                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10480             END IF;
10481 
10482             -- Further processing is required only if the version to be updated is not the current working verion
10483             IF  l_budget_version_id <>  l_CW_version_id THEN
10484 
10485                   --Get the record version number of the current working version
10486                   l_CW_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
10487 
10488                   --Get the record version number of the version to be updated
10489                   l_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_budget_version_id);
10490 
10491                   pa_fin_plan_pvt.lock_unlock_version
10492                        (p_budget_version_id       => l_CW_version_id,
10493                         p_record_version_number   => l_CW_record_version_number,
10494                         p_action                  => 'L',
10495                         p_user_id                 => l_user_id,
10496                         p_person_id               => lx_locked_by_person_id,
10497                         x_return_status           => x_return_status,
10498                         x_msg_count               => l_msg_count,
10499                         x_msg_data                => l_msg_data) ;
10500 
10501                   IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
10502 
10503                         IF l_debug_mode = 'Y' THEN
10504                               pa_debug.g_err_stage := 'Error executing lock unlock version';
10505                               pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10506                         END IF;
10507 
10508                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10509 
10510                   END IF;
10511 
10512                   IF l_debug_mode = 'Y' THEN
10513                         pa_debug.g_err_stage := 'About to call set current working version';
10514                         pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10515                   END IF;
10516 
10517                   -- Getting the rec ver number again as it will be incremented by the api  lock_unlock_version
10518                   l_CW_record_version_number  := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
10519 
10520                   pa_fin_plan_pub.Set_Current_Working
10521                         (p_project_id                  => l_project_id,
10522                          p_budget_version_id           => l_budget_version_id,
10523                          p_record_version_number       => l_record_version_number,
10524                          p_orig_budget_version_id      => l_CW_version_id,
10525                          p_orig_record_version_number  => l_CW_record_version_number,
10526                          x_return_status               => x_return_status,
10527                          x_msg_count                   => l_msg_count,
10528                          x_msg_data                    => l_msg_data);
10529 
10530                   IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
10531                         IF  l_debug_mode= 'Y' THEN
10532                               pa_debug.g_err_stage:= 'Error executing Set_Current_Working ';
10533                               pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
10534                         END IF;
10535                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10536                   END IF;
10537 
10538             END IF; --  IF  l_created_version_id <>  l_CW_version_id THEN
10539 
10540 
10541     END IF;
10542 
10543 END IF; -- l_budget_type_code IS NULL
10544 
10545     IF  (p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_budget_version_name IS NULL)
10546     AND  nvl(p_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10547          nvl(l_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10548     THEN
10549         DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xBudgetVersionName', lx_budget_version_name);
10550 
10551     END IF;
10552 /*Addition for the bug 3453650 ends */
10553 
10554         l_rows   := DBMS_SQL.execute(l_cursor_id);
10555 
10556         IF DBMS_SQL.is_open (l_cursor_id)
10557         THEN
10558             DBMS_SQL.close_cursor (l_cursor_id);
10559         END IF;
10560 
10561    END IF;
10562 
10563 /* Bug 6408139 : We are setting the amount_set_id ONLY when atleast some of the */
10564 /* input amount entry flags ARE not G_PA_MISS_CHAR , which means, user wants to */
10565 /* change some flag*/
10566 IF l_budget_type_code IS NULL THEN   -- finplan model
10567 
10568   IF (( lx_raw_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10569           ( lx_burdened_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10570           ( lx_revenue_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10571           ( lx_cost_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10572           ( lx_revenue_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10573           ( lx_all_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10574           ( lx_bill_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10575           ( lx_cost_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10576           ( lx_burden_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) ) THEN
10577 
10578         --Get the preference code
10579         IF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
10580                 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY;
10581         ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
10582                 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY;
10583         ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
10584                 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME;
10585         END IF;
10586 
10587         IF l_debug_mode = 'Y' THEN
10588           pa_debug.g_err_stage := 'Preference code is -> ' || l_plan_pref_code;
10589           pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10590         END IF;
10591 
10592 
10593         --Get the amount set id.
10594         pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID
10595         (
10596                  p_raw_cost_flag            => lx_raw_cost_flag
10597                 ,p_burdened_cost_flag       => lx_burdened_cost_flag
10598                 ,p_revenue_flag             => lx_revenue_flag
10599                 ,p_cost_qty_flag            => lx_cost_qty_flag
10600                 ,p_revenue_qty_flag         => lx_revenue_qty_flag
10601                 ,p_all_qty_flag             => lx_all_qty_flag
10602                 ,p_plan_pref_code           => l_plan_pref_code
10603                 ,p_bill_rate_flag           => lx_bill_rate_flag
10604                 ,p_cost_rate_flag           => lx_cost_rate_flag
10605                 ,p_burden_rate_flag         => lx_burden_rate_flag
10606                 ,x_cost_amount_set_id       => l_cost_amount_set_id
10607                 ,x_revenue_amount_set_id    => l_rev_amount_set_id
10608                 ,x_all_amount_set_id        => l_all_amount_set_id
10609                 ,x_message_count            => l_msg_count
10610                 ,x_return_status            => x_return_status
10611                 ,x_message_data             => l_msg_data
10612         );
10613 
10614         IF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
10615                 l_amount_set_id := l_cost_amount_set_id;
10616         ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
10617                 l_amount_set_id := l_rev_amount_set_id;
10618         ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
10619                 l_amount_set_id := l_all_amount_set_id;
10620         END IF;
10621 
10622         IF l_debug_mode = 'Y' THEN
10623            pa_debug.g_err_stage:= 'Amount set id is -> ' || l_amount_set_id;
10624            pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10625         END IF;
10626 
10627         l_proj_fp_options_id_new :=  PA_PROJ_FP_OPTIONS_PUB.Get_FP_Option_ID
10628                                      (p_project_id => l_project_id
10629                                      ,p_plan_type_id => l_fin_plan_type_id
10630                                      ,p_plan_version_id => l_budget_version_id
10631                                      );
10632 
10633 
10634         IF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10635          UPDATE pa_proj_fp_options
10636          SET    cost_amount_set_id           =   l_amount_set_id
10637          WHERE  proj_fp_options_id = l_proj_fp_options_id_new;
10638         ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10639          UPDATE pa_proj_fp_options
10640          SET    revenue_amount_set_id         =   l_amount_set_id
10641          WHERE  proj_fp_options_id = l_proj_fp_options_id_new;
10642         ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL THEN
10643          UPDATE pa_proj_fp_options
10644          SET    all_amount_set_id             =   l_amount_set_id
10645          WHERE  proj_fp_options_id = l_proj_fp_options_id_new;
10646        END IF;
10647 
10648   END IF ; -- G_PA_MISS_CHAR condition
10649 
10650 END IF ; --IF l_budget_type_code IS NULL THEN
10651 
10652 /*Bug 6408139 : Code addition ends*/
10653 
10654   l_budget_lines_in := p_budget_lines_in;
10655 -- Changes for the bug 3453650
10656             IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
10657 
10658                   IF l_debug_mode = 'Y' THEN
10659                         pa_debug.g_err_stage := 'About to call validate budget lines in Budgets model';
10660                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10661                   END IF;
10662 
10663                 --Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
10664                 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
10665 
10666                              IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10667                                     l_budget_lines_in(i).pa_task_id   :=  NULL;
10668                              END IF;
10669 
10670                              IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10671                                     l_budget_lines_in(i).pm_task_reference  :=  NULL;
10672                               END IF;
10673 
10674                              IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10675                                     l_budget_lines_in(i).resource_alias :=  NULL;
10676                               END IF;
10677 
10678                              IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10679                                     l_budget_lines_in(i).resource_list_member_id:=  NULL;
10680                               END IF;
10681 
10682 							   --Bug 16604257
10683 							  IF l_budget_lines_in(i).cbs_element_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10684                                     l_budget_lines_in(i).cbs_element_id:=  NULL;
10685                               END IF;
10686 
10687 							 IF l_budget_lines_in(i).cost_code= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10688                                     l_budget_lines_in(i).cost_code :=  NULL;
10689                               END IF;
10690 							   --Bug 16604257
10691 
10692                              IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10693                                     l_budget_lines_in(i).budget_start_date:=  NULL;
10694                               END IF;
10695                              IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10696                                     l_budget_lines_in(i).budget_end_date:=  NULL;
10697                               END IF;
10698 
10699                               IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10700                                     l_budget_lines_in(i).period_name := NULL;
10701                               END IF;
10702 
10703                               IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10704                                     l_budget_lines_in(i).raw_cost   :=  NULL;
10705                               END IF;
10706 
10707                               IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10708                                     l_budget_lines_in(i).burdened_cost  := NULL;
10709                               END IF;
10710 
10711                               IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10712                                     l_budget_lines_in(i).revenue  := NULL;
10713                               END IF;
10714 
10715                               IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10716                                     l_budget_lines_in(i).quantity  := NULL;
10717                               END IF;
10718 
10719 
10720                               IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10721                                     l_budget_lines_in(i).change_reason_code  :=NULL;
10722                               END IF;
10723 
10724                               IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10725                                     l_budget_lines_in(i).description     :=  NULL;
10726                               END IF;
10727 
10728                               IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10729                                     l_budget_lines_in(i).attribute_category     :=  NULL;
10730                               END IF;
10731 
10732                               IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10733                                     l_budget_lines_in(i).attribute1     :=  NULL;
10734                               END IF;
10735 
10736                               IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10737                                     l_budget_lines_in(i).attribute2     :=  NULL;
10738                               END IF;
10739 
10740                               IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10741                                     l_budget_lines_in(i).attribute3     :=  NULL;
10742                               END IF;
10743 
10744                               IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10745                                     l_budget_lines_in(i).attribute4     :=  NULL;
10746                               END IF;
10747 
10748                               IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10749                                     l_budget_lines_in(i).attribute5     :=  NULL;
10750                               END IF;
10751 
10752                               IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10753                                     l_budget_lines_in(i).attribute6     :=  NULL;
10754                               END IF;
10755 
10756                               IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10757                                     l_budget_lines_in(i).attribute7     :=  NULL;
10758                               END IF;
10759 
10760                               IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10761                                     l_budget_lines_in(i).attribute8     :=  NULL;
10762                               END IF;
10763 
10764                               IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10765                                     l_budget_lines_in(i).attribute9     :=  NULL;
10766                               END IF;
10767 
10768                               IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10769                                     l_budget_lines_in(i).attribute10     :=  NULL;
10770                               END IF;
10771 
10772                               IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10773                                     l_budget_lines_in(i).attribute11     :=  NULL;
10774                               END IF;
10775 
10776                               IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10777                                     l_budget_lines_in(i).attribute12     :=  NULL;
10778                               END IF;
10779 
10780                               IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10781                                     l_budget_lines_in(i).attribute13     :=  NULL;
10782                               END IF;
10783 
10784                               IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10785                                     l_budget_lines_in(i).attribute14     :=  NULL;
10786                               END IF;
10787 
10788                               IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10789                                     l_budget_lines_in(i).attribute15     :=  NULL;
10790                               END IF;
10791 
10792                               IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10793                                     l_budget_lines_in(i).txn_currency_code := NULL;
10794                               END IF;
10795 
10796                               IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10797                                 l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
10798                               END IF;
10799 
10800                               IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10801                               l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
10802                               END IF;
10803 
10804                               IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10805                               l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE     := NULL;
10806                               END IF;
10807 
10808                               IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10809                               l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
10810                               END IF;
10811 
10812                               IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10813                                l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE      := NULL;
10814                               END IF;
10815 
10816                               IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10817                               l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
10818                               END IF;
10819 
10820                               IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10821                               l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE      := NULL;
10822                               END IF;
10823 
10824                               IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10825                               l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
10826                               END IF;
10827 
10828                               IF  l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10829                               l_budget_lines_in(i).PROJECT_COST_RATE_TYPE      := NULL;
10830                               END IF;
10831 
10832                               IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10833                               l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
10834                               END IF;
10835 
10836                               IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE    THEN
10837                               l_budget_lines_in(i).PROJECT_COST_RATE_DATE      := NULL;
10838                               END IF;
10839 
10840                               IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
10841                               l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE  := NULL;
10842                               END IF;
10843 
10844                               IF  l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
10845                               l_budget_lines_in(i).PROJECT_REV_RATE_TYPE       := NULL;
10846                               END IF;
10847 
10848                               IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
10849                               l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE  := NULL;
10850                               END IF;
10851 
10852                               IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10853                               l_budget_lines_in(i).PROJECT_REV_RATE_DATE       := NULL;
10854                               END IF;
10855 
10856                               IF  l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
10857                               l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE   := NULL;
10858                               END IF;
10859 
10860                               IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
10861                               l_budget_lines_in(i).pm_product_code             := NULL;
10862                               END IF;
10863 
10864                               IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10865                               l_budget_lines_in(i).pm_budget_line_reference    := NULL;
10866                               END IF;
10867 
10868 				  --Added for bug#12424439 FP:bug#12606319
10869 				  IF l_time_phased_type_code = 'N' THEN
10870 				  temp_budget_start_date := l_budget_lines_in(i).budget_start_date;
10871 				  END IF;
10872                 END LOOP;
10873 END IF; -- ( nvl(l_budget_lines_in.last,0) > 0 )
10874 
10875 l_version_info_rec.x_budget_version_id := l_budget_version_id;  --Added for bug 4290310.
10876 
10877 IF l_budget_type_code IS NOT NULL THEN
10878 
10879                   pa_budget_pvt.Validate_Budget_Lines
10880                   (p_pa_project_id               => l_project_id
10881                   ,p_budget_type_code            => l_budget_type_code
10882                   ,p_fin_plan_type_id            => NULL
10883                   ,p_version_type                => NULL
10884                   ,p_resource_list_id            => lx_resource_list_id
10885                   ,p_time_phased_code            => lx_time_phased_type_code
10886                   ,p_budget_entry_method_code    => l_budget_entry_method_code
10887                   ,p_entry_level_code            => l_entry_level_code
10888                   ,p_allow_qty_flag              => NULL
10889                   ,p_allow_raw_cost_flag         => NULL
10890                   ,p_allow_burdened_cost_flag    => NULL
10891                   ,p_allow_revenue_flag          => NULL
10892                   ,p_multi_currency_flag         => NULL
10893                   ,p_project_cost_rate_type      => NULL
10894                   ,p_project_cost_rate_date_typ  => NULL
10895                   ,p_project_cost_rate_date      => NULL
10896                   ,p_project_cost_exchange_rate  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10897                   ,p_projfunc_cost_rate_type     => NULL
10898                   ,p_projfunc_cost_rate_date_typ => NULL
10899                   ,p_projfunc_cost_rate_date     => NULL
10900                   ,p_projfunc_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10901                   ,p_project_rev_rate_type       => NULL
10902                   ,p_project_rev_rate_date_typ   => NULL
10903                   ,p_project_rev_rate_date       => NULL
10904                   ,p_project_rev_exchange_rate   => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10905                   ,p_projfunc_rev_rate_type      => NULL
10906                   ,p_projfunc_rev_rate_date_typ  => NULL
10907                   ,p_projfunc_rev_rate_date      => NULL
10908                   ,p_projfunc_rev_exchange_rate  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10909                   ,px_budget_lines_in            => l_budget_lines_in
10910                   ,x_budget_lines_out            => p_budget_lines_out /* Bug 3368135*/
10911 /* Bug 3986129: FP.M Web ADI Dev changes: New parameters added */
10912                   ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
10913                   ,x_etc_method_code_tbl         => l_etc_method_code_tbl
10914                   ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
10915                   ,x_msg_count                   => p_msg_count
10916                   ,x_msg_data                    => p_msg_data
10917                   ,x_return_status               => p_return_status);
10918 
10919             IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN  -- 3453650
10920                         RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10921                   END IF;
10922 
10923 ELSE --l_budget_type_code IS NOT NULL
10924 
10925                  IF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10926                       l_allow_qty_flag := lx_cost_qty_flag;
10927                  ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10928                       l_allow_qty_flag := lx_revenue_qty_flag;
10929                  ELSE
10930                       l_allow_qty_flag :=  lx_all_qty_flag;
10931                  END IF;
10932 
10933                   --Validate the finplan lines passed
10934                   pa_budget_pvt.Validate_Budget_Lines
10935                   ( p_pa_project_id              => l_project_id
10936                   ,p_budget_type_code            => NULL
10937                   ,p_fin_plan_type_id            => l_fin_plan_type_id
10938                   ,p_version_type                => lx_version_type
10939                   ,p_resource_list_id            => lx_resource_list_id
10940                   ,p_time_phased_code            => lx_time_phased_type_code
10941                   ,p_budget_entry_method_code    => NULL
10942                   ,p_entry_level_code            => l_fin_plan_level_code
10943                   ,p_allow_qty_flag              => l_allow_qty_flag
10944                   ,p_allow_raw_cost_flag         => lx_raw_cost_flag
10945                   ,p_allow_burdened_cost_flag    => lx_burdened_cost_flag
10946                   ,p_allow_revenue_flag          => lx_revenue_flag  --Bug 4422201.Passing the correct flag for this parameter.
10947                   ,p_multi_currency_flag         => lx_plan_in_multi_curr_flag
10948                   ,p_project_cost_rate_type      => lx_project_cost_rate_type
10949                   ,p_project_cost_rate_date_typ  => lx_project_cost_rate_date_typ
10950                   ,p_project_cost_rate_date      => lx_project_cost_rate_date
10951                   ,p_project_cost_exchange_rate  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10952                   ,p_projfunc_cost_rate_type     => lx_projfunc_cost_rate_type
10953                   ,p_projfunc_cost_rate_date_typ => lx_projfunc_cost_rate_date_typ
10954                   ,p_projfunc_cost_rate_date     => lx_projfunc_cost_rate_date
10955                   ,p_projfunc_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10956                   ,p_project_rev_rate_type       => lx_project_rev_rate_type
10957                   ,p_project_rev_rate_date_typ   => lx_project_rev_rate_date_typ
10958                   ,p_project_rev_rate_date       => lx_project_rev_rate_date
10959                   ,p_project_rev_exchange_rate   => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10960                   ,p_projfunc_rev_rate_type      => lx_projfunc_rev_rate_type
10961                   ,p_projfunc_rev_rate_date_typ  => lx_projfunc_rev_rate_date_typ
10962                   ,p_projfunc_rev_rate_date      => lx_projfunc_rev_rate_date
10963                   ,p_projfunc_rev_exchange_rate  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10964                   ,p_version_info_rec            => l_version_info_rec  -- Added for bug 4290310.
10965                   ,px_budget_lines_in            => l_budget_lines_in
10966                   ,x_budget_lines_out            => p_budget_lines_out /* Bug 3368135*/
10967 /* Bug 3986129: FP.M Web ADI Dev changes: New parameters added */
10968                   ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
10969                   ,x_etc_method_code_tbl         => l_etc_method_code_tbl
10970                   ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
10971                   ,x_msg_count                   => p_msg_count
10972                   ,x_msg_data                    => p_msg_data
10973                   ,x_return_status               => p_return_status);
10974 
10975                   IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10976                         RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10977                   END IF;
10978 END IF; --l_budget_type_code IS NOT NULL
10979 
10980 --In the below code for finplan model validate header level currency conversion attributes and update them.
10981 IF (l_budget_type_code IS NULL)
10982 THEN
10983         IF(lx_plan_in_multi_curr_flag = 'N')
10984         THEN
10985                IF((p_projfunc_cost_rate_type is null OR p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10986                   (p_projfunc_cost_rate_date_typ is null OR p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10987                   (p_projfunc_cost_rate_date is null OR p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10988                   (p_projfunc_rev_rate_type is null OR  p_projfunc_rev_rate_type =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10989                   (p_projfunc_rev_rate_date_typ is null OR p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10990                   (p_projfunc_rev_rate_date is null OR p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10991                   (p_project_cost_rate_type is null OR p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10992                   (p_project_cost_rate_date_typ is null OR p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10993                   (p_project_cost_rate_date is null OR p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10994                   (p_project_rev_rate_type is null OR p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10995                   (p_project_rev_rate_date_typ is null OR p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10996                   (p_project_rev_rate_date is null OR p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ))
10997                THEN
10998                    NULL;
10999                ELSE
11000                /*even if one of the currency conversion attributes is not null then call validate header info
11001                 *coz its possible tht multi currency flag could be No and we can still have values for the currency conversion
11002                 *attributes*/
11003                l_call_validate_curr_api_flg := 'Y'; --Setting this flag to call the validate_currency_conversion API later.
11004                END IF;
11005         ELSIF (lx_plan_in_multi_curr_flag = 'Y') THEN
11006               IF( p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11007                   p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11008                   p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
11009                   p_projfunc_rev_rate_type =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11010                   p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11011                   p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
11012                   p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11013                   p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11014                   p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
11015                   p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11016                   p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11017                   p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
11018                THEN --if the user doesnt want them to change then we need not call validate API
11019                    NULL;
11020                ELSE
11021              /*Here there could be two cases. All the passed MC conversion attributes could be null or one of them could be not null
11022              *When even one of them is not null then validate_conversion_attributes API has to be called surely for validating the attribute
11023              * which has been passed.
11024              *And for the other case when all the attributes are null we shd be raising the error as this shd not be allowed for MC=Y. So as
11025              *of now assuming validate_conversion_attribute api would raise this error we are calling the validate conversion API. If this
11026              * API doesnt raise the error for this case then we will raise the error from here itself*/
11027              /*validate_conversion_attribute API raises the error when all the MC conversion attributes are null. So we are not
11028              raising this error from here.*/
11029 
11030                l_call_validate_curr_api_flg := 'Y';--Setting this flag to call the validate_currency_conversion API later.
11031                END IF;
11032         END IF;
11033 
11034         IF(l_call_validate_curr_api_flg = 'Y')  --Now call the validate_currency_conversion API
11035         THEN
11036                             -- Depending on px_version_type initialise l_conv_attrs_to_be_validated
11037 
11038                  IF (lx_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL) THEN
11039                       l_conv_attrs_to_be_validated := lx_version_type;
11040                  ELSE
11041                       l_conv_attrs_to_be_validated := PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_BOTH;
11042                  END IF;
11043 
11044                  IF l_conv_attrs_to_be_validated = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
11045 
11046                        lx_project_rev_rate_type      :=NULL;
11047                        lx_project_rev_rate_date_typ  :=NULL;
11048                        lx_project_rev_rate_date      :=NULL;
11049 
11050                        lx_projfunc_rev_rate_type     :=NULL;
11051                        lx_projfunc_rev_rate_date_typ :=NULL;
11052                        lx_projfunc_rev_rate_date     :=NULL;
11053 
11054                  ELSIF l_conv_attrs_to_be_validated = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
11055 
11056                        lx_project_cost_rate_type      :=NULL;
11057                        lx_project_cost_rate_date_typ  :=NULL;
11058                        lx_project_cost_rate_date      :=NULL;
11059 
11060                        lx_projfunc_cost_rate_type     :=NULL;
11061                        lx_projfunc_cost_rate_date_typ :=NULL;
11062                        lx_projfunc_cost_rate_date     :=NULL;
11063 
11064                  END IF;
11065 
11066                  SELECT p.project_currency_code
11067                        ,p.projfunc_currency_code
11068                  INTO   l_project_currency_code
11069                        ,l_projfunc_currency_code
11070                  FROM   pa_projects_all p
11071                  WHERE  p.project_id = l_project_id;
11072 
11073 
11074               SELECT projfunc_cost_rate_type
11075                     ,projfunc_rev_rate_type
11076                     ,project_cost_rate_type
11077                     ,project_rev_rate_type
11078               INTO l_projfunc_cost_rate_type
11079                   ,l_projfunc_rev_rate_type
11080                   ,l_project_cost_rate_type
11081                   ,l_project_rev_rate_type
11082               FROM   pa_proj_fp_options
11083               WHERE  project_id = l_project_id
11084               AND    fin_plan_type_id=l_fin_plan_type_id
11085               AND    fin_plan_version_id IS NULL
11086               AND    fin_plan_option_level_code= PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
11087 
11088                   pa_budget_pvt.valid_rate_type
11089                     (p_pt_project_cost_rate_type => l_project_cost_rate_type,
11090                      p_pt_project_rev_rate_type  => l_project_rev_rate_type,
11091                      p_pt_projfunc_cost_rate_type=> l_projfunc_cost_rate_type,
11092                      p_pt_projfunc_rev_rate_type => l_projfunc_rev_rate_type,
11093                      p_pv_project_cost_rate_type => lx_project_cost_rate_type,
11094                      p_pv_project_rev_rate_type  => lx_projfunc_rev_rate_type,
11095                      p_pv_projfunc_cost_rate_type=> lx_projfunc_cost_rate_type,
11096                      p_pv_projfunc_rev_rate_type => lx_projfunc_rev_rate_date,
11097                      x_is_rate_type_valid        => l_is_rate_type_valid,
11098                      x_return_status             => p_return_status,
11099                      x_msg_count                 => p_msg_count,
11100                      x_msg_data                  => p_msg_data);
11101 
11102                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11103                        IF l_debug_mode = 'Y' THEN
11104                                    pa_debug.g_err_stage:= 'valid_rate_type returned error';
11105                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11106                        END IF;
11107                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11108                  END IF;
11109 
11110                  pa_fin_plan_utils.validate_currency_attributes
11111                  (px_project_cost_rate_type      => lx_project_cost_rate_type
11112                  ,px_project_cost_rate_date_typ  => lx_project_cost_rate_date_typ
11113                  ,px_project_cost_rate_date      => lx_project_cost_rate_date
11114                  ,px_project_cost_exchange_rate  => l_project_cost_exchange_rate
11115                  ,px_projfunc_cost_rate_type     => lx_projfunc_cost_rate_type
11116                  ,px_projfunc_cost_rate_date_typ => lx_projfunc_cost_rate_date_typ
11117                  ,px_projfunc_cost_rate_date     => lx_projfunc_cost_rate_date
11118                  ,px_projfunc_cost_exchange_rate => l_projfunc_cost_exchange_rate
11119                  ,px_project_rev_rate_type       => lx_project_rev_rate_type
11120                  ,px_project_rev_rate_date_typ   => lx_project_rev_rate_date_typ
11121                  ,px_project_rev_rate_date       => lx_project_rev_rate_date
11122                  ,px_project_rev_exchange_rate   => l_project_rev_exchange_rate
11123                  ,px_projfunc_rev_rate_type      => lx_projfunc_rev_rate_type
11124                  ,px_projfunc_rev_rate_date_typ  => lx_projfunc_rev_rate_date_typ
11125                  ,px_projfunc_rev_rate_date      => lx_projfunc_rev_rate_date
11126                  ,px_projfunc_rev_exchange_rate  => l_projfunc_rev_exchange_rate
11127                  ,p_project_currency_code        => l_project_currency_code
11128                  ,p_projfunc_currency_code       => l_projfunc_currency_code
11129                  ,p_context                      => PA_FP_CONSTANTS_PKG.G_AMG_API_HEADER
11130                  ,p_attrs_to_be_validated        => l_conv_attrs_to_be_validated
11131                  ,x_return_status                => p_return_status
11132                  ,x_msg_count                    => p_msg_count
11133                  ,x_msg_data                     => p_msg_data);
11134 
11135                  IF (p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11136                       p_return_status:=FND_API.G_RET_STS_ERROR;
11137                       IF l_debug_mode = 'Y' THEN
11138                             pa_debug.g_err_stage:= 'Validate currency attributes returned error';
11139                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11140                       END IF;
11141                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11142                  END IF;
11143 
11144                  IF l_debug_mode = 'Y' THEN
11145                        pa_debug.g_err_stage := 'Updating pa_proj_fp_options with multi currency conversion attributes';
11146                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11147                  END IF;
11148 
11149                update pa_proj_fp_options
11150                set
11151                projfunc_cost_rate_type       = decode(p_projfunc_cost_rate_type,    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,   projfunc_cost_rate_type     ,  p_projfunc_cost_rate_type)
11152               ,projfunc_cost_rate_date_type  = decode(p_projfunc_cost_rate_date_typ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,   projfunc_cost_rate_date_type,  p_projfunc_cost_rate_date_typ)
11153               ,projfunc_cost_rate_date       = decode(p_projfunc_cost_rate_date,    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,   projfunc_cost_rate_date     ,  p_projfunc_cost_rate_date)
11154               ,projfunc_rev_rate_type        = decode(p_projfunc_rev_rate_type,     PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,   projfunc_rev_rate_type      ,  p_projfunc_rev_rate_type)
11155               ,projfunc_rev_rate_date_type   = decode(p_projfunc_rev_rate_date_typ,  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,  projfunc_rev_rate_date_type ,  p_projfunc_rev_rate_date_typ)
11156               ,projfunc_rev_rate_date        = decode(p_projfunc_rev_rate_date,     PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,  projfunc_rev_rate_date       ,  p_projfunc_rev_rate_date)
11157               ,project_cost_rate_type        = decode(p_project_cost_rate_type,     PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,   project_cost_rate_type      ,  p_project_cost_rate_type)
11158               ,project_cost_rate_date_type   = decode(p_project_cost_rate_date_typ,  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,  project_cost_rate_date_type ,  p_project_cost_rate_date_typ)
11159               ,project_cost_rate_date        = decode(p_project_cost_rate_date,     PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,  project_cost_rate_date       ,  p_project_cost_rate_date)
11160               ,project_rev_rate_type         = decode(p_project_rev_rate_type,      PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,  project_rev_rate_type        ,  p_project_rev_rate_type)
11161               ,project_rev_rate_date_type    = decode(p_project_rev_rate_date_typ,   PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,  project_rev_rate_date_type  ,  p_project_rev_rate_date_typ)
11162               ,project_rev_rate_date         = decode(p_project_rev_rate_date,      PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,  project_rev_rate_date        ,  p_project_rev_rate_date)
11163               ,record_version_number         = record_version_number +1
11164               ,last_update_date     =    SYSDATE
11165               ,last_updated_by      =    G_USER_ID
11166               ,last_update_login    =    G_LOGIN_ID
11167               where project_id = l_project_id
11168               and fin_plan_type_id = l_fin_plan_type_id
11169               and fin_plan_version_id = l_budget_version_id;
11170         END IF;  --(l_call_validate_curr_api_flg = 'Y')
11171 END IF;--For finplan model validate header level currency conversion attributes.
11172 
11173 --Major changes for the bug 3453650
11174 
11175      -- BUDGET LINES
11176 
11177     l_budget_line_index := p_budget_lines_in.first;
11178 
11179 IF p_budget_lines_in.exists(l_budget_line_index)
11180 THEN
11181       IF l_budget_type_code IS NOT NULL THEN   -- bug 3453650
11182           OPEN l_budget_entry_method_csr( l_budget_entry_method_code );
11183           FETCH l_budget_entry_method_csr INTO l_time_phased_type_code
11184                           , l_entry_level_code
11185                          , l_categorization_code;
11186           CLOSE l_budget_entry_method_csr;
11187       END IF;
11188 
11189      --Initializing the variable j which is used to build the l_finplan_lines_tab for the finplan model.
11190      j:=1;
11191       <<budget_line>>
11192       WHILE l_budget_line_index IS NOT NULL LOOP
11193 
11194  --dbms_output.put_line('In budget lines LOOP');
11195 
11196     --initialize return status for budget line to success
11197     p_budget_lines_out(l_budget_line_index).return_status   := FND_API.G_RET_STS_SUCCESS;
11198 
11199    /*Note carefully that we should be using l_budget_lines_in for all the processing going fwd. This l_budgte_lines_in table is an
11200     *.output parameter of vallidate_budget_lines(this call to validate_budget_lines has been made before this point in code).  */
11201     l_budget_line_in_rec := l_budget_lines_in(l_budget_line_index);--p_budget_lines_in(l_budget_line_index);
11202 
11203 
11204         IF l_budget_line_in_rec.period_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11205         AND l_budget_line_in_rec.period_name IS NOT NULL
11206         THEN
11207 
11208             OPEN l_budget_periods_csr( l_budget_line_in_rec.period_name
11209                           ,l_time_phased_type_code);
11210 
11211             FETCH l_budget_periods_csr INTO l_budget_start_date;  --is needed to be able to identify a budgetline
11212 
11213             IF   l_budget_periods_csr%NOTFOUND
11214             THEN
11215 
11216             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11217             THEN
11218             pa_interface_utils_pub.map_new_amg_msg
11219              ( p_old_message_code => 'PA_BUDGET_PERIOD_IS_INVALID'
11220               ,p_msg_attribute    => 'CHANGE'
11221               ,p_resize_flag      => 'Y'
11222               ,p_msg_context      => 'BUDG'
11223               ,p_attribute1       => l_amg_segment1
11224               ,p_attribute2       => ''
11225               ,p_attribute3       => l_budget_type_code
11226               ,p_attribute4       => ''
11227               ,p_attribute5       => '');
11228             END IF;
11229 
11230             CLOSE l_budget_periods_csr;
11231                 p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_ERROR;
11232          p_multiple_task_msg  := 'F';
11233 
11234 
11235             END IF;
11236 
11237             CLOSE l_budget_periods_csr;
11238 
11239         ELSIF  l_budget_line_in_rec.budget_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11240            AND l_budget_line_in_rec.budget_start_date IS NOT NULL
11241         THEN
11242 
11243             l_budget_start_date := trunc(l_budget_line_in_rec.budget_start_date);
11244 
11245         ELSE
11246 
11247             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11248         THEN
11249             pa_interface_utils_pub.map_new_amg_msg
11250              ( p_old_message_code => 'PA_START_DATE_MISSING'
11251               ,p_msg_attribute    => 'CHANGE'
11252               ,p_resize_flag      => 'N'
11253               ,p_msg_context      => 'BUDG'
11254               ,p_attribute1       => l_amg_segment1
11255               ,p_attribute2       => ''
11256               ,p_attribute3       => l_budget_type_code
11257               ,p_attribute4       => ''
11258               ,p_attribute5       => '');
11259         END IF;
11260 
11261         p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_ERROR;
11262         p_multiple_task_msg  := 'F';
11263 --        RAISE  FND_API.G_EXC_ERROR;
11264 
11265         END IF;
11266 
11267 
11268     -- if resource alias is (passed and not NULL)
11269     -- and resource member is (passed and not NULL)
11270     -- then we convert the alias to the id
11271     -- else we default to the uncategorized resource member
11272 
11273 IF l_budget_type_code IS NOT NULL THEN
11274 
11275   IF l_categorization_code = 'N' THEN
11276        pa_get_resource.Get_Uncateg_Resource_Info
11277                         (p_resource_list_id          => l_uncategorized_list_id,
11278                          p_resource_list_member_id   => l_uncategorized_rlmid,
11279                          p_resource_id               => l_uncategorized_resid,
11280                          p_track_as_labor_flag       => l_track_as_labor_flag,
11281                          p_err_code                  => l_err_code,
11282                          p_err_stage                 => l_err_stage,
11283                          p_err_stack                 => l_err_stack );
11284        IF l_err_code <> 0 THEN
11285       IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
11286             pa_interface_utils_pub.map_new_amg_msg
11287              ( p_old_message_code => 'PA_NO_UNCATEGORIZED_LIST'
11288               ,p_msg_attribute    => 'CHANGE'
11289               ,p_resize_flag      => 'N'
11290               ,p_msg_context      => 'BUDG'
11291               ,p_attribute1       => l_amg_segment1
11292               ,p_attribute2       => ''
11293               ,p_attribute3       => l_budget_type_code
11294               ,p_attribute4       => ''
11295               ,p_attribute5       => to_char(l_budget_start_date));
11296           ELSE
11297             pa_interface_utils_pub.map_new_amg_msg
11298              ( p_old_message_code => l_err_stage
11299               ,p_msg_attribute    => 'CHANGE'
11300               ,p_resize_flag      => 'N'
11301               ,p_msg_context      => 'BUDG'
11302               ,p_attribute1       => l_amg_segment1
11303               ,p_attribute2       => ''
11304               ,p_attribute3       => l_budget_type_code
11305               ,p_attribute4       => ''
11306               ,p_attribute5       => to_char(l_budget_start_date));
11307           END IF;
11308           p_multiple_task_msg := 'F';
11309 --        RAISE  FND_API.G_EXC_ERROR;
11310        END IF;
11311 
11312        l_resource_list_member_id := l_uncategorized_rlmid;
11313        l_budget_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
11314 
11315   ELSIF l_categorization_code = 'R' THEN
11316     IF (l_budget_line_in_rec.resource_alias <>
11317         PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11318         AND l_budget_line_in_rec.resource_alias IS NOT NULL)
11319     OR (l_budget_line_in_rec.resource_list_member_id
11320        <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11321        AND l_budget_line_in_rec.resource_list_member_id IS NOT NULL) THEN
11322 
11323          pa_resource_pub.convert_alias_to_id
11324             ( p_project_id                  =>  l_project_id --Passing the project id here.
11325              ,p_resource_list_id            =>  lx_resource_list_id  --3453650
11326              ,p_alias                       =>l_budget_line_in_rec.resource_alias
11327              ,p_resource_list_member_id     =>l_budget_line_in_rec.resource_list_member_id
11328              ,p_out_resource_list_member_id => l_resource_list_member_id
11329              ,p_return_status               => l_return_status  );
11330 
11331      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11332         p_budget_lines_out(l_budget_line_index).return_status :=
11333             l_return_status;
11334             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11335      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11336         p_budget_lines_out(l_budget_line_index).return_status :=
11337             l_return_status;
11338             p_multiple_task_msg  := 'F';
11339 --        RAISE  FND_API.G_EXC_ERROR;
11340      END IF;
11341          l_budget_alias := l_budget_line_in_rec.resource_alias;
11342      END IF;   -- If l_budget_line_in_rec.resource_alias <>
11343   END IF; -- If l_categorization_code = 'N'
11344 
11345         -- convert pm_task_reference to pa_task_id
11346         -- only if entry_level_code in ('L','M','T')
11347    IF l_entry_level_code = 'P' THEN
11348       l_task_id := 0;
11349    END IF;
11350 
11351    IF l_entry_level_code in ('T','L','M') THEN
11352       Pa_project_pvt.Convert_pm_taskref_to_id
11353         (p_pa_project_id       => l_project_id,
11354          p_pa_task_id          => l_budget_line_in_rec.pa_task_id,
11355          p_pm_task_reference   => l_budget_line_in_rec.pm_task_reference,
11356          p_out_task_id         => l_task_id,
11357          p_return_status       => l_return_status );
11358       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11359          p_budget_lines_out(l_budget_line_index).return_status :=
11360          l_return_status;
11361          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11362       ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11363          p_budget_lines_out(l_budget_line_index).return_status :=
11364          l_return_status;
11365         p_multiple_task_msg   := 'F';
11366 --        RAISE  FND_API.G_EXC_ERROR;
11367       END IF;
11368    END IF;
11369 
11370 ELSE -- Bug 3453650 budget_type_code is not null
11371 
11372             pa_get_resource.Get_Uncateg_Resource_Info
11373                         (p_resource_list_id          => l_uncategorized_list_id,
11374                          p_resource_list_member_id   => l_uncategorized_rlmid,
11375                          p_resource_id               => l_uncategorized_resid,
11376                          p_track_as_labor_flag       => l_track_as_labor_flag,
11377                          p_err_code                  => l_err_code,
11378                          p_err_stage                 => l_err_stage,
11379                          p_err_stack                 => l_err_stack );
11380        IF l_err_code <> 0 THEN
11381       IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
11382             pa_interface_utils_pub.map_new_amg_msg
11383              ( p_old_message_code => 'PA_NO_UNCATEGORIZED_LIST'
11384               ,p_msg_attribute    => 'CHANGE'
11385               ,p_resize_flag      => 'N'
11386               ,p_msg_context      => 'BUDG'
11387               ,p_attribute1       => l_amg_segment1
11388               ,p_attribute2       => ''
11389               ,p_attribute3       => lx_fin_plan_type_name
11390               ,p_attribute4       => ''
11391               ,p_attribute5       => to_char(l_budget_start_date));
11392           ELSE
11393             pa_interface_utils_pub.map_new_amg_msg
11394              ( p_old_message_code => l_err_stage
11395               ,p_msg_attribute    => 'CHANGE'
11396               ,p_resize_flag      => 'N'
11397               ,p_msg_context      => 'BUDG'
11398               ,p_attribute1       => l_amg_segment1
11399               ,p_attribute2       => ''
11400               ,p_attribute3       => lx_fin_plan_type_name
11401               ,p_attribute4       => ''
11402               ,p_attribute5       => to_char(l_budget_start_date));
11403           END IF;
11404           p_multiple_task_msg := 'F';
11405        END IF;
11406 
11407      IF (nvl(l_uncategorized_list_id,-99) = lx_resource_list_id) THEN
11408 
11409                l_budget_line_in_rec.resource_list_member_id :=l_uncategorized_rlmid;
11410                l_budget_line_in_rec.resource_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
11411             l_resource_list_member_id := l_uncategorized_rlmid; -- bug 3453650
11412 
11413      ELSE
11414 --end comment for 3453650
11415 
11416           -- convert resource alias to (resource) member id
11417           -- if resource alias is (passed and not NULL)
11418           -- and resource member is (passed and not NULL)
11419           -- then we convert the alias to the id
11420           -- else we default to the uncategorized resource member
11421 
11422           IF (l_budget_line_in_rec.resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11423              AND l_budget_line_in_rec.resource_alias IS NOT NULL)
11424               OR (l_budget_line_in_rec.resource_list_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11425              AND l_budget_line_in_rec.resource_list_member_id IS NOT NULL)
11426           THEN
11427                 pa_resource_pub.Convert_alias_to_id
11428                         ( p_project_id                  => l_project_id
11429                          ,p_resource_list_id            => lx_resource_list_id  -- 3453650
11430                          ,p_alias                       => l_budget_line_in_rec.resource_alias
11431                          ,p_resource_list_member_id     => l_budget_line_in_rec.resource_list_member_id
11432                          ,p_out_resource_list_member_id => l_resource_list_member_id  -- 3453650
11433                          ,p_return_status               => x_return_status   );
11434 
11435                 IF x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11436                         p_budget_lines_out(l_budget_line_index).return_status := x_return_status;
11437                         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11438                 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11439                     p_budget_lines_out(l_budget_line_index).return_status :=
11440                         x_return_status;
11441                         p_multiple_task_msg  := 'F';
11442                END IF;
11443                l_budget_alias := l_budget_line_in_rec.resource_alias;
11444 
11445           END IF; -- l_budget_line_in_rec.resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11446        END IF; -- nvl(l_uncategorized_res_list_id,-99) = lx_resource_list_id   Bug 3454650
11447    IF l_fin_plan_level_code = 'P'
11448     OR (l_fin_plan_level_code in ('T','L') AND l_budget_line_in_rec.pa_task_id = 0 AND l_fin_plan_type_id IS NOT NULL)  -- Added for Bug 8688683
11449    THEN
11450       l_task_id := 0;
11451    -- END IF;
11452 
11453    ELSIF l_fin_plan_level_code in ('T','L','M') THEN
11454       Pa_project_pvt.Convert_pm_taskref_to_id
11455         (p_pa_project_id       => l_project_id,
11456          p_pa_task_id          => l_budget_line_in_rec.pa_task_id,
11457          p_pm_task_reference   => l_budget_line_in_rec.pm_task_reference,
11458          p_out_task_id         => l_task_id,
11459          p_return_status       => l_return_status );
11460       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11461          p_budget_lines_out(l_budget_line_index).return_status :=
11462          l_return_status;
11463          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11464       ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11465          p_budget_lines_out(l_budget_line_index).return_status :=
11466          l_return_status;
11467         p_multiple_task_msg   := 'F';
11468 
11469       END IF;
11470    END IF; -- l_fin_plan_level_code in ('T','L','M')
11471   END IF; -- IF BUDGET TYPE CODE IS NOT NULL
11472 
11473    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
11474     (p_task_number=> ''
11475     ,p_task_reference => ''
11476     ,p_task_id => l_task_id);
11477 
11478     --get the resource assignment id
11479 		--KK
11480         OPEN l_resource_assignment_csr( l_budget_version_id
11481                            ,l_task_id
11482                            ,l_resource_list_member_id
11483 						   ,l_budget_line_in_rec.cbs_element_id);
11484 
11485         FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
11486 
11487         IF l_resource_assignment_csr%NOTFOUND
11488         THEN
11489            l_new_resource_assignment := TRUE;
11490         ELSE
11491            l_new_resource_assignment := FALSE;
11492         END IF;
11493 
11494         CLOSE l_resource_assignment_csr;
11495 
11496 
11497         IF l_budget_line_in_rec.pm_budget_line_reference =
11498            PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
11499            l_budget_line_in_rec.pm_budget_line_reference := NULL;
11500         END IF;
11501 
11502 /* Bug: 3453650 Added the below code*/
11503 
11504  l_dummy := Null;    --  Added for bug 4192109
11505 
11506 IF l_budget_type_code IS NOT NULL THEN
11507  -- dbms_output.put_line('Checking existence of budget line . l_budget_start_date = ' || l_budget_start_date);
11508      OPEN l_budget_line_csr( l_resource_assignment_id, l_budget_start_date);
11509 
11510      FETCH l_budget_line_csr INTO l_dummy;
11511      CLOSE l_budget_line_csr;
11512 
11513    -- If loop added for bug#12424439 ->FP:Bug#12606319
11514      IF l_time_phased_type_code = 'N' THEN
11515 	OPEN l_budget_line_csr(l_resource_assignment_id ,temp_budget_start_date);
11516 	FETCH l_budget_line_csr into l_dummy;
11517 	CLOSE l_budget_line_csr;
11518 	IF l_dummy = 'X' THEN
11519 		l_budget_start_date := temp_budget_start_date;
11520 	END IF;
11521      END IF;
11522    -- end of code changes done for bug#12424439 ->FP:Bug#12606319
11523 
11524 ELSE
11525      IF l_budget_line_in_rec.txn_currency_code IS NULL THEN
11526           pa_interface_utils_pub.map_new_amg_msg
11527           ( p_old_message_code => 'PA_NO_TXN_CURRENCY_CODE'
11528           ,p_msg_attribute    => 'CHANGE'
11529           ,p_resize_flag      => 'N'
11530           ,p_msg_context      => 'BUDG'
11531           ,p_attribute1       => l_amg_segment1
11532           ,p_attribute2       => ''
11533           ,p_attribute3       => lx_fin_plan_type_name
11534           ,p_attribute4       => ''
11535           ,p_attribute5       => '');
11536 
11537                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11538         END IF;
11539 
11540      OPEN l_finplan_line_csr(l_resource_assignment_id
11541                          ,l_budget_start_date
11542                       ,l_budget_line_in_rec.txn_currency_code);
11543      FETCH l_finplan_line_csr into l_dummy;
11544      CLOSE l_finplan_line_csr;
11545 END IF; -- l_budget_type_code IS NOT NULL
11546 
11547 IF l_budget_type_code IS NOT NULL THEN
11548      --if new line then call insert_budget_line (for old model)
11549      IF (l_dummy <> 'X' OR l_dummy IS NULL) OR (l_new_resource_assignment) OR (lx_resource_list_id <> l_resource_list_id) THEN
11550           pa_budget_pvt.insert_budget_line
11551           ( p_return_status      => l_return_status
11552           ,p_pa_project_id      => l_project_id
11553           ,p_budget_type_code   => l_budget_type_code
11554           ,p_pa_task_id         => l_budget_line_in_rec.pa_task_id
11555           ,p_pm_task_reference  => l_budget_line_in_rec.pm_task_reference
11556           ,p_resource_alias     => l_budget_alias
11557           ,p_member_id          => l_resource_list_member_id
11558 		  ,p_cbs_element_id         => l_budget_line_in_rec.cbs_element_id  --Bug 16604257
11559           ,p_budget_start_date  => l_budget_line_in_rec.budget_start_date
11560           ,p_budget_end_date    => l_budget_line_in_rec.budget_end_date
11561           ,p_period_name        => l_budget_line_in_rec.period_name
11562           ,p_description        => l_budget_line_in_rec.description
11563           ,p_raw_cost           => l_budget_line_in_rec.raw_cost
11564           ,p_burdened_cost      => l_budget_line_in_rec.burdened_cost
11565           ,p_revenue            => l_budget_line_in_rec.revenue
11566           ,p_quantity           => l_budget_line_in_rec.quantity
11567           ,p_pm_product_code    => l_budget_line_in_rec.pm_product_code
11568           ,p_pm_budget_line_reference => l_budget_line_in_rec.pm_budget_line_reference
11569           ,p_resource_list_id   => lx_resource_list_id
11570           ,p_attribute_category => l_budget_line_in_rec.attribute_category
11571           ,p_attribute1         => l_budget_line_in_rec.attribute1
11572           ,p_attribute2         => l_budget_line_in_rec.attribute2
11573           ,p_attribute3         => l_budget_line_in_rec.attribute3
11574           ,p_attribute4         => l_budget_line_in_rec.attribute4
11575           ,p_attribute5         => l_budget_line_in_rec.attribute5
11576           ,p_attribute6         => l_budget_line_in_rec.attribute6
11577           ,p_attribute7         => l_budget_line_in_rec.attribute7
11578           ,p_attribute8         => l_budget_line_in_rec.attribute8
11579           ,p_attribute9         => l_budget_line_in_rec.attribute9
11580           ,p_attribute10        => l_budget_line_in_rec.attribute10
11581           ,p_attribute11        => l_budget_line_in_rec.attribute11
11582           ,p_attribute12        => l_budget_line_in_rec.attribute12
11583           ,p_attribute13        => l_budget_line_in_rec.attribute13
11584           ,p_attribute14        => l_budget_line_in_rec.attribute14
11585           ,p_attribute15        => l_budget_line_in_rec.attribute15
11586           ,p_time_phased_type_code => lx_time_phased_type_code
11587           ,p_entry_level_code   => l_entry_level_code
11588           ,p_budget_amount_code => l_budget_amount_code
11589           ,p_budget_entry_method_code => l_budget_entry_method_code
11590           ,p_categorization_code => l_categorization_code
11591           ,p_budget_version_id   => l_budget_version_id
11592           ,p_change_reason_code  => l_budget_line_in_rec.change_reason_code  );
11593 
11594           IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
11595           THEN
11596           p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11597           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11598 
11599           ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11600           THEN
11601           p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11602           p_multiple_task_msg  := 'F';
11603           END IF;
11604 
11605      ELSE -- If the line is already existing, then call update_budget_line_sql
11606           -- ELSE for the condition : (l_dummy <> 'X' OR l_dummy IS NULL) OR (l
11607 
11608 
11609          /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
11610          *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
11611          * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
11612          * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
11613              IF p_budget_lines_in(l_budget_line_index).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11614                    l_budget_line_in_rec.raw_cost   :=  NULL;
11615              ELSIF(p_budget_lines_in(l_budget_line_index).raw_cost is null) THEN
11616                    l_budget_line_in_rec.raw_cost   :=  FND_API.G_MISS_NUM;
11617              ELSE
11618                    l_budget_line_in_rec.raw_cost   :=  l_budget_line_in_rec.raw_cost;
11619              END IF;
11620 
11621              IF p_budget_lines_in(l_budget_line_index).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11622                    l_budget_line_in_rec.burdened_cost  := NULL;
11623              ELSIF(p_budget_lines_in(l_budget_line_index).burdened_cost is null) THEN
11624                    l_budget_line_in_rec.burdened_cost   :=  FND_API.G_MISS_NUM;
11625              ELSE
11626                    l_budget_line_in_rec.burdened_cost  := l_budget_line_in_rec.burdened_cost;
11627              END IF;
11628 
11629              IF p_budget_lines_in(l_budget_line_index).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11630                    l_budget_line_in_rec.revenue  := NULL;
11631              ELSIF(p_budget_lines_in(l_budget_line_index).revenue is null) THEN
11632                    l_budget_line_in_rec.revenue   :=  FND_API.G_MISS_NUM;
11633              ELSE
11634                    l_budget_line_in_rec.revenue  := l_budget_line_in_rec.revenue;
11635              END IF;
11636 
11637              IF p_budget_lines_in(l_budget_line_index).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11638                    l_budget_line_in_rec.quantity  := NULL;
11639              ELSIF(p_budget_lines_in(l_budget_line_index).quantity is null) THEN
11640                    l_budget_line_in_rec.quantity   :=  FND_API.G_MISS_NUM;
11641              ELSE
11642                    l_budget_line_in_rec.quantity  := l_budget_line_in_rec.quantity;
11643              END IF;
11644 
11645              IF p_budget_lines_in(l_budget_line_index).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11646                    l_budget_line_in_rec.change_reason_code  :=NULL;
11647              ELSIF(p_budget_lines_in(l_budget_line_index).change_reason_code is null) THEN
11648                    l_budget_line_in_rec.change_reason_code   :=  FND_API.G_MISS_CHAR;
11649              ELSE
11650                    l_budget_line_in_rec.change_reason_code  :=  l_budget_line_in_rec.change_reason_code ;
11651              END IF;
11652 
11653              IF p_budget_lines_in(l_budget_line_index).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11654                    l_budget_line_in_rec.description     :=  NULL;
11655              ELSIF(p_budget_lines_in(l_budget_line_index).description is null) THEN
11656                    l_budget_line_in_rec.description   :=  FND_API.G_MISS_CHAR;
11657              ELSE
11658                    l_budget_line_in_rec.description     :=  l_budget_line_in_rec.description;
11659              END IF;
11660 
11661              IF p_budget_lines_in(l_budget_line_index).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11662                    l_budget_line_in_rec.attribute_category     :=  NULL;
11663              ELSIF(p_budget_lines_in(l_budget_line_index).attribute_category is null) THEN
11664                    l_budget_line_in_rec.attribute_category   :=  FND_API.G_MISS_CHAR;
11665              ELSE
11666                    l_budget_line_in_rec.attribute_category     :=  l_budget_line_in_rec.attribute_category;
11667              END IF;
11668 
11669              IF p_budget_lines_in(l_budget_line_index).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11670                    l_budget_line_in_rec.attribute1     :=  NULL;
11671              ELSIF(p_budget_lines_in(l_budget_line_index).attribute1 is null) THEN
11672                    l_budget_line_in_rec.attribute1   :=  FND_API.G_MISS_CHAR;
11673              ELSE
11674                    l_budget_line_in_rec.attribute1     :=  l_budget_line_in_rec.attribute1;
11675              END IF;
11676 
11677              IF p_budget_lines_in(l_budget_line_index).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11678                    l_budget_line_in_rec.attribute2     :=  NULL;
11679              ELSIF(p_budget_lines_in(l_budget_line_index).attribute2 is null) THEN
11680                    l_budget_line_in_rec.attribute2   :=  FND_API.G_MISS_CHAR;
11681              ELSE
11682                    l_budget_line_in_rec.attribute2     :=  l_budget_line_in_rec.attribute2;
11683              END IF;
11684 
11685              IF p_budget_lines_in(l_budget_line_index).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11686                    l_budget_line_in_rec.attribute3     :=  NULL;
11687              ELSIF(p_budget_lines_in(l_budget_line_index).attribute3 is null) THEN
11688                    l_budget_line_in_rec.attribute3   :=  FND_API.G_MISS_CHAR;
11689              ELSE
11690                    l_budget_line_in_rec.attribute3     :=  l_budget_line_in_rec.attribute3;
11691              END IF;
11692 
11693              IF p_budget_lines_in(l_budget_line_index).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11694                    l_budget_line_in_rec.attribute4     :=  NULL;
11695              ELSIF(p_budget_lines_in(l_budget_line_index).attribute4 is null) THEN
11696                    l_budget_line_in_rec.attribute4   :=  FND_API.G_MISS_CHAR;
11697              ELSE
11698                    l_budget_line_in_rec.attribute4     :=  l_budget_line_in_rec.attribute4;
11699              END IF;
11700 
11701              IF p_budget_lines_in(l_budget_line_index).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11702                    l_budget_line_in_rec.attribute5     :=  NULL;
11703              ELSIF(p_budget_lines_in(l_budget_line_index).attribute5 is null) THEN
11704                    l_budget_line_in_rec.attribute5   :=  FND_API.G_MISS_CHAR;
11705              ELSE
11706                    l_budget_line_in_rec.attribute5     :=  l_budget_line_in_rec.attribute5;
11707              END IF;
11708 
11709              IF p_budget_lines_in(l_budget_line_index).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11710                    l_budget_line_in_rec.attribute6     :=  NULL;
11711              ELSIF(p_budget_lines_in(l_budget_line_index).attribute6 is null) THEN
11712                    l_budget_line_in_rec.attribute6   :=  FND_API.G_MISS_CHAR;
11713              ELSE
11714                    l_budget_line_in_rec.attribute6     :=  l_budget_line_in_rec.attribute6;
11715              END IF;
11716 
11717              IF p_budget_lines_in(l_budget_line_index).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11718                    l_budget_line_in_rec.attribute7     :=  NULL;
11719              ELSIF(p_budget_lines_in(l_budget_line_index).attribute7 is null) THEN
11720                    l_budget_line_in_rec.attribute7   :=  FND_API.G_MISS_CHAR;
11721              ELSE
11722                    l_budget_line_in_rec.attribute7     :=  l_budget_line_in_rec.attribute7;
11723              END IF;
11724 
11725              IF p_budget_lines_in(l_budget_line_index).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11726                    l_budget_line_in_rec.attribute8     :=  NULL;
11727              ELSIF(p_budget_lines_in(l_budget_line_index).attribute8 is null) THEN
11728                    l_budget_line_in_rec.attribute8   :=  FND_API.G_MISS_CHAR;
11729              ELSE
11730                    l_budget_line_in_rec.attribute8     :=  l_budget_line_in_rec.attribute8;
11731              END IF;
11732 
11733              IF p_budget_lines_in(l_budget_line_index).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11734                    l_budget_line_in_rec.attribute9     :=  NULL;
11735              ELSIF(p_budget_lines_in(l_budget_line_index).attribute9 is null) THEN
11736                    l_budget_line_in_rec.attribute9   :=  FND_API.G_MISS_CHAR;
11737              ELSE
11738                    l_budget_line_in_rec.attribute9     :=  l_budget_line_in_rec.attribute9;
11739              END IF;
11740 
11741              IF p_budget_lines_in(l_budget_line_index).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11742                    l_budget_line_in_rec.attribute10     :=  NULL;
11743              ELSIF(p_budget_lines_in(l_budget_line_index).attribute10 is null) THEN
11744                    l_budget_line_in_rec.attribute10   :=  FND_API.G_MISS_CHAR;
11745              ELSE
11746                    l_budget_line_in_rec.attribute10     :=  l_budget_line_in_rec.attribute10;
11747              END IF;
11748 
11749              IF p_budget_lines_in(l_budget_line_index).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11750                    l_budget_line_in_rec.attribute11     :=  NULL;
11751              ELSIF(p_budget_lines_in(l_budget_line_index).attribute11 is null) THEN
11752                    l_budget_line_in_rec.attribute11   :=  FND_API.G_MISS_CHAR;
11753              ELSE
11754                    l_budget_line_in_rec.attribute11     :=  l_budget_line_in_rec.attribute11;
11755              END IF;
11756 
11757              IF p_budget_lines_in(l_budget_line_index).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11758                    l_budget_line_in_rec.attribute12     :=  NULL;
11759              ELSIF(p_budget_lines_in(l_budget_line_index).attribute12 is null) THEN
11760                    l_budget_line_in_rec.attribute12   :=  FND_API.G_MISS_CHAR;
11761              ELSE
11762                    l_budget_line_in_rec.attribute12     :=  l_budget_line_in_rec.attribute12;
11763              END IF;
11764 
11765              IF p_budget_lines_in(l_budget_line_index).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11766                    l_budget_line_in_rec.attribute13     :=  NULL;
11767              ELSIF(p_budget_lines_in(l_budget_line_index).attribute13 is null) THEN
11768                    l_budget_line_in_rec.attribute13   :=  FND_API.G_MISS_CHAR;
11769              ELSE
11770                    l_budget_line_in_rec.attribute13     :=  l_budget_line_in_rec.attribute13;
11771              END IF;
11772 
11773              IF p_budget_lines_in(l_budget_line_index).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11774                    l_budget_line_in_rec.attribute14     :=  NULL;
11775              ELSIF(p_budget_lines_in(l_budget_line_index).attribute14 is null) THEN
11776                    l_budget_line_in_rec.attribute14   :=  FND_API.G_MISS_CHAR;
11777              ELSE
11778                    l_budget_line_in_rec.attribute14     :=  l_budget_line_in_rec.attribute14;
11779              END IF;
11780 
11781              IF p_budget_lines_in(l_budget_line_index).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11782                    l_budget_line_in_rec.attribute15     :=  NULL;
11783              ELSIF(p_budget_lines_in(l_budget_line_index).attribute15 is null) THEN
11784                    l_budget_line_in_rec.attribute15   :=  FND_API.G_MISS_CHAR;
11785              ELSE
11786                    l_budget_line_in_rec.attribute15     :=  l_budget_line_in_rec.attribute15;
11787              END IF;
11788 
11789           PA_BUDGET_PVT.UPDATE_BUDGET_LINE_SQL
11790           ( p_return_status        => l_return_status
11791           --,p_budget_amount_code         => l_budget_amount_code
11792           ,p_budget_entry_method_code     => l_budget_entry_method_code
11793           ,p_resource_assignment_id       => l_resource_assignment_id
11794           ,p_start_date                   => l_budget_start_date
11795           ,p_time_phased_type_code        => lx_time_phased_type_code
11796           ,p_description                  => l_budget_line_in_rec.description
11797           ,p_quantity                     => l_budget_line_in_rec.quantity
11798           ,p_raw_cost                     => l_budget_line_in_rec.raw_cost
11799           ,p_burdened_cost                => l_budget_line_in_rec.burdened_cost
11800           ,p_revenue                      => l_budget_line_in_rec.revenue
11801           ,p_change_reason_code           => l_budget_line_in_rec.change_reason_code
11802           ,p_attribute_category           => l_budget_line_in_rec.attribute_category
11803           ,p_attribute1                   => l_budget_line_in_rec.attribute1
11804           ,p_attribute2                   => l_budget_line_in_rec.attribute2
11805           ,p_attribute3                   => l_budget_line_in_rec.attribute3
11806           ,p_attribute4                   => l_budget_line_in_rec.attribute4
11807           ,p_attribute5                   => l_budget_line_in_rec.attribute5
11808           ,p_attribute6                   => l_budget_line_in_rec.attribute6
11809           ,p_attribute7                   => l_budget_line_in_rec.attribute7
11810           ,p_attribute8                   => l_budget_line_in_rec.attribute8
11811           ,p_attribute9                   => l_budget_line_in_rec.attribute9
11812           ,p_attribute10                  => l_budget_line_in_rec.attribute10
11813           ,p_attribute11                  => l_budget_line_in_rec.attribute11
11814           ,p_attribute12                  => l_budget_line_in_rec.attribute12
11815           ,p_attribute13                  => l_budget_line_in_rec.attribute13
11816           ,p_attribute14                  => l_budget_line_in_rec.attribute14
11817           ,p_attribute15                  => l_budget_line_in_rec.attribute15
11818           );
11819 
11820           IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
11821                p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11822           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11823 
11824           ELSIF l_return_status = FND_API.G_RET_STS_ERROR   THEN
11825                p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11826                p_multiple_task_msg   := 'F';
11827 
11828           END IF;  -- l_return_status =  FND_API.G_RET_STS_UNE
11829 
11830      END IF; -- End for the condition : (l_dummy <> 'X' OR l_dummy IS NULL) OR
11831 
11832 ELSE -- l_budget_type_code IS NOT NULL (Inserting lines for the finplan model)
11833      --Checking it its a new budget line.
11834     IF (l_dummy <> 'X' OR l_dummy IS NULL) OR (l_new_resource_assignment) OR (lx_resource_list_id <> l_resource_list_id) THEN
11835          --This is a new line case.
11836           --Get the uncategorized resource list info.
11837           pa_fin_plan_utils.Get_Uncat_Resource_List_Info
11838           (x_resource_list_id           => l_uncategorized_res_list_id,
11839            x_resource_list_member_id    => l_uncategorized_rlmid,
11840            x_track_as_labor_flag        => l_unc_track_as_labor_flag,
11841            x_unit_of_measure            => l_unc_unit_of_measure,
11842            x_return_status              => p_return_status,
11843            x_msg_count                  => p_msg_count,
11844            x_msg_data                   => p_msg_data);
11845 
11846           i := l_budget_line_index;
11847 
11848                 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
11849                l_budget_lines_in(i).period_name := NULL;
11850                 END IF;
11851 
11852                  --Lines should be processed only if atleast one of the amounts exist
11853                  -- Commenting out the below check for Bug#8423481. In SelfService, we do not have this check
11854                  /* IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
11855                nvl(l_budget_lines_in(i).raw_cost,0)<>0 OR
11856                nvl(l_budget_lines_in(i).burdened_cost,0)<>0 OR
11857                nvl(l_budget_lines_in(i).revenue,0) <>0) THEN */
11858 
11859                 -- Get UOM and track as labor flag only if the resource list is not uncategorized
11860                 -- If it is is uncategorized then we can make use of the uom and track as labor
11861                 -- flag obtained earlier
11862                 --Commented out the below code to get the unit of measure and track_as_labor_flag value
11863                 --because these values are used only while passing to add_fin_plan_lines(and further to create_fin_plan_lines )
11864                 --where they are simply populated in pa_fp_rollup_tmp but are not used anywhere.
11865           /*      IF (lx_resource_list_id <> l_uncategorized_res_list_id) THEN  -- bug 3453650
11866 
11867                       SELECT pr.unit_of_measure
11868                          ,prlm.track_as_labor_flag
11869                       INTO   l_unit_of_measure
11870                          ,l_track_as_labor_flag
11871                       FROM   pa_resources pr
11872                          ,pa_resource_lists prl
11873                          ,pa_resource_list_members prlm
11874                       WHERE  prl.resource_list_id = lx_resource_list_id  -- bug 3453650
11875                       AND    pr.resource_id = prlm.resource_id
11876                       AND    prl.resource_list_id = prlm.resource_list_id
11877                       AND    prlm.resource_list_member_id = l_budget_lines_in(i).resource_list_member_id;
11878 
11879                   END IF;*/
11880 
11881                        -- dbms_output.put_line('copying from budget to rollup finplan');
11882                        -- Convert flex field attributes to NULL if they have Miss Char as value
11883 
11884                        l_finplan_lines_tab(j).system_reference1           :=  l_budget_lines_in(i).pa_task_id;
11885                        l_finplan_lines_tab(j).system_reference2           :=  l_budget_lines_in(i).resource_list_member_id;
11886 					   l_finplan_lines_tab(j).system_reference3           := l_budget_lines_in(1).cbs_element_id;-- Added for CBS 16604257
11887                        l_finplan_lines_tab(j).start_date                  :=  l_budget_lines_in(i).budget_start_date;
11888                        l_finplan_lines_tab(j).end_date                    :=  l_budget_lines_in(i).budget_end_date;
11889                        l_finplan_lines_tab(j).period_name                 :=  l_budget_lines_in(i).period_name;
11890                        l_finplan_lines_tab(j).system_reference4           :=  l_unit_of_measure     ;
11891                        l_finplan_lines_tab(j).system_reference5           :=  l_track_as_labor_flag  ;
11892                        l_finplan_lines_tab(j).txn_currency_code           :=  l_budget_lines_in(i).txn_currency_code;
11893                        l_finplan_lines_tab(j).projfunc_raw_cost           :=  NULL;
11894                        l_finplan_lines_tab(j).projfunc_burdened_cost      :=  NULL;
11895                        l_finplan_lines_tab(j).projfunc_revenue            :=  NULL;
11896                        l_finplan_lines_tab(j).project_raw_cost            :=  NULL ;
11897                        l_finplan_lines_tab(j).project_burdened_cost       :=  NULL;
11898                        l_finplan_lines_tab(j).project_revenue             :=  NULL;
11899 
11900                       /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
11901                       *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
11902                       * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
11903                       * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
11904                        IF p_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11905                              l_finplan_lines_tab(j).txn_raw_cost   :=  NULL;
11906                        ELSIF(p_budget_lines_in(i).raw_cost is null) THEN
11907                              l_finplan_lines_tab(j).txn_raw_cost   :=  FND_API.G_MISS_NUM;
11908                        ELSE
11909                              l_finplan_lines_tab(j).txn_raw_cost   :=  l_budget_lines_in(i).raw_cost;
11910                        END IF;
11911 
11912                        IF p_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11913                              l_finplan_lines_tab(j).txn_burdened_cost  := NULL;
11914                        ELSIF(p_budget_lines_in(i).burdened_cost is null) THEN
11915                              l_finplan_lines_tab(j).txn_burdened_cost   :=  FND_API.G_MISS_NUM;
11916                        ELSE
11917                              l_finplan_lines_tab(j).txn_burdened_cost  := l_budget_lines_in(i).burdened_cost;
11918                        END IF;
11919 
11920                        IF p_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11921                              l_finplan_lines_tab(j).txn_revenue  := NULL;
11922                        ELSIF(p_budget_lines_in(i).revenue is null) THEN
11923                              l_finplan_lines_tab(j).txn_revenue   :=  FND_API.G_MISS_NUM;
11924                        ELSE
11925                              l_finplan_lines_tab(j).txn_revenue  := l_budget_lines_in(i).revenue;
11926                        END IF;
11927 
11928                        IF p_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11929                              l_finplan_lines_tab(j).quantity  := NULL;
11930                        ELSIF(p_budget_lines_in(i).quantity is null) THEN
11931                              l_finplan_lines_tab(j).quantity   :=  FND_API.G_MISS_NUM;
11932                        ELSE
11933                              l_finplan_lines_tab(j).quantity  := l_budget_lines_in(i).quantity;
11934                        END IF;
11935 
11936                        IF p_budget_lines_in(i).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11937                              l_finplan_lines_tab(j).change_reason_code  :=NULL;
11938                        ELSIF(p_budget_lines_in(i).change_reason_code is null) THEN
11939                              l_finplan_lines_tab(j).change_reason_code   :=  FND_API.G_MISS_CHAR;
11940                        ELSE
11941                              l_finplan_lines_tab(j).change_reason_code  :=  l_budget_lines_in(i).change_reason_code ;
11942                        END IF;
11943 
11944                        IF p_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11945                              l_finplan_lines_tab(j).description     :=  NULL;
11946                        ELSIF(p_budget_lines_in(i).description is null) THEN
11947                              l_finplan_lines_tab(j).description   :=  FND_API.G_MISS_CHAR;
11948                        ELSE
11949                              l_finplan_lines_tab(j).description     :=  l_budget_lines_in(i).description;
11950                        END IF;
11951 
11952                        IF p_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11953                              l_finplan_lines_tab(j).attribute_category     :=  NULL;
11954                        ELSIF(p_budget_lines_in(i).attribute_category is null) THEN
11955                              l_finplan_lines_tab(j).attribute_category   :=  FND_API.G_MISS_CHAR;
11956                        ELSE
11957                              l_finplan_lines_tab(j).attribute_category     :=  l_budget_lines_in(i).attribute_category;
11958                        END IF;
11959 
11960                        IF p_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11961                              l_finplan_lines_tab(j).attribute1     :=  NULL;
11962                        ELSIF(p_budget_lines_in(i).attribute1 is null) THEN
11963                              l_finplan_lines_tab(j).attribute1   :=  FND_API.G_MISS_CHAR;
11964                        ELSE
11965                              l_finplan_lines_tab(j).attribute1     :=  l_budget_lines_in(i).attribute1;
11966                        END IF;
11967 
11968                        IF p_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11969                              l_finplan_lines_tab(j).attribute2     :=  NULL;
11970                        ELSIF(p_budget_lines_in(i).attribute2 is null) THEN
11971                              l_finplan_lines_tab(j).attribute2   :=  FND_API.G_MISS_CHAR;
11972                        ELSE
11973                              l_finplan_lines_tab(j).attribute2     :=  l_budget_lines_in(i).attribute2;
11974                        END IF;
11975 
11976                        IF p_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11977                              l_finplan_lines_tab(j).attribute3     :=  NULL;
11978                        ELSIF(p_budget_lines_in(i).attribute3 is null) THEN
11979                              l_finplan_lines_tab(j).attribute3   :=  FND_API.G_MISS_CHAR;
11980                        ELSE
11981                              l_finplan_lines_tab(j).attribute3     :=  l_budget_lines_in(i).attribute3;
11982                        END IF;
11983 
11984                        IF p_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11985                              l_finplan_lines_tab(j).attribute4     :=  NULL;
11986                        ELSIF(p_budget_lines_in(i).attribute4 is null) THEN
11987                              l_finplan_lines_tab(j).attribute4   :=  FND_API.G_MISS_CHAR;
11988                        ELSE
11989                              l_finplan_lines_tab(j).attribute4     :=  l_budget_lines_in(i).attribute4;
11990                        END IF;
11991 
11992                        IF p_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11993                              l_finplan_lines_tab(j).attribute5     :=  NULL;
11994                        ELSIF(p_budget_lines_in(i).attribute5 is null) THEN
11995                              l_finplan_lines_tab(j).attribute5   :=  FND_API.G_MISS_CHAR;
11996                        ELSE
11997                              l_finplan_lines_tab(j).attribute5     :=  l_budget_lines_in(i).attribute5;
11998                        END IF;
11999 
12000                        IF p_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12001                              l_finplan_lines_tab(j).attribute6     :=  NULL;
12002                        ELSIF(p_budget_lines_in(i).attribute6 is null) THEN
12003                              l_finplan_lines_tab(j).attribute6   :=  FND_API.G_MISS_CHAR;
12004                        ELSE
12005                              l_finplan_lines_tab(j).attribute6     :=  l_budget_lines_in(i).attribute6;
12006                        END IF;
12007 
12008                        IF p_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12009                              l_finplan_lines_tab(j).attribute7     :=  NULL;
12010                        ELSIF(p_budget_lines_in(i).attribute7 is null) THEN
12011                              l_finplan_lines_tab(j).attribute7   :=  FND_API.G_MISS_CHAR;
12012                        ELSE
12013                              l_finplan_lines_tab(j).attribute7     :=  l_budget_lines_in(i).attribute7;
12014                        END IF;
12015 
12016                        IF p_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12017                              l_finplan_lines_tab(j).attribute8     :=  NULL;
12018                        ELSIF(p_budget_lines_in(i).attribute8 is null) THEN
12019                              l_finplan_lines_tab(j).attribute8   :=  FND_API.G_MISS_CHAR;
12020                        ELSE
12021                              l_finplan_lines_tab(j).attribute8     :=  l_budget_lines_in(i).attribute8;
12022                        END IF;
12023 
12024                        IF p_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12025                              l_finplan_lines_tab(j).attribute9     :=  NULL;
12026                        ELSIF(p_budget_lines_in(i).attribute9 is null) THEN
12027                              l_finplan_lines_tab(j).attribute9   :=  FND_API.G_MISS_CHAR;
12028                        ELSE
12029                              l_finplan_lines_tab(j).attribute9     :=  l_budget_lines_in(i).attribute9;
12030                        END IF;
12031 
12032                        IF p_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12033                              l_finplan_lines_tab(j).attribute10     :=  NULL;
12034                        ELSIF(p_budget_lines_in(i).attribute10 is null) THEN
12035                              l_finplan_lines_tab(j).attribute10   :=  FND_API.G_MISS_CHAR;
12036                        ELSE
12037                              l_finplan_lines_tab(j).attribute10     :=  l_budget_lines_in(i).attribute10;
12038                        END IF;
12039 
12040                        IF p_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12041                              l_finplan_lines_tab(j).attribute11     :=  NULL;
12042                        ELSIF(p_budget_lines_in(i).attribute11 is null) THEN
12043                              l_finplan_lines_tab(j).attribute11   :=  FND_API.G_MISS_CHAR;
12044                        ELSE
12045                              l_finplan_lines_tab(j).attribute11     :=  l_budget_lines_in(i).attribute11;
12046                        END IF;
12047 
12048                        IF p_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12049                              l_finplan_lines_tab(j).attribute12     :=  NULL;
12050                        ELSIF(p_budget_lines_in(i).attribute12 is null) THEN
12051                              l_finplan_lines_tab(j).attribute12   :=  FND_API.G_MISS_CHAR;
12052                        ELSE
12053                              l_finplan_lines_tab(j).attribute12     :=  l_budget_lines_in(i).attribute12;
12054                        END IF;
12055 
12056                        IF p_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12057                              l_finplan_lines_tab(j).attribute13     :=  NULL;
12058                        ELSIF(p_budget_lines_in(i).attribute13 is null) THEN
12059                              l_finplan_lines_tab(j).attribute13   :=  FND_API.G_MISS_CHAR;
12060                        ELSE
12061                              l_finplan_lines_tab(j).attribute13     :=  l_budget_lines_in(i).attribute13;
12062                        END IF;
12063 
12064                        IF p_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12065                              l_finplan_lines_tab(j).attribute14     :=  NULL;
12066                        ELSIF(p_budget_lines_in(i).attribute14 is null) THEN
12067                              l_finplan_lines_tab(j).attribute14   :=  FND_API.G_MISS_CHAR;
12068                        ELSE
12069                              l_finplan_lines_tab(j).attribute14     :=  l_budget_lines_in(i).attribute14;
12070                        END IF;
12071 
12072                        IF p_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12073                              l_finplan_lines_tab(j).attribute15     :=  NULL;
12074                        ELSIF(p_budget_lines_in(i).attribute15 is null) THEN
12075                              l_finplan_lines_tab(j).attribute15   :=  FND_API.G_MISS_CHAR;
12076                        ELSE
12077                              l_finplan_lines_tab(j).attribute15     :=  l_budget_lines_in(i).attribute15;
12078                        END IF;
12079 
12080                        IF p_budget_lines_in(i).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12081                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
12082                        ELSIF(p_budget_lines_in(i).projfunc_cost_rate_type is null) THEN
12083                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12084                        ELSE
12085                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE     :=  l_budget_lines_in(i).projfunc_cost_rate_type;
12086                        END IF;
12087 
12088                        IF p_budget_lines_in(i).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12089                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
12090                        ELSIF(p_budget_lines_in(i).projfunc_cost_rate_date_type is null) THEN
12091                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12092                        ELSE
12093                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_lines_in(i).projfunc_cost_rate_date_type;
12094                        END IF;
12095 
12096                        IF p_budget_lines_in(i).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12097                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     := NULL;
12098                        ELSIF(p_budget_lines_in(i).projfunc_cost_rate_date is null) THEN
12099                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE   :=  FND_API.G_MISS_DATE;
12100                        ELSE
12101                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     :=  l_budget_lines_in(i).projfunc_cost_rate_date            ;
12102                        END IF;
12103 
12104                        IF p_budget_lines_in(i).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12105                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
12106                        ELSIF(p_budget_lines_in(i).projfunc_cost_exchange_rate is null) THEN
12107                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12108                        ELSE
12109                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE :=  l_budget_lines_in(i).projfunc_cost_exchange_rate        ;
12110                        END IF;
12111 
12112                        IF p_budget_lines_in(i).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12113                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      := NULL;
12114                        ELSIF(p_budget_lines_in(i).projfunc_rev_rate_type is null) THEN
12115                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12116                        ELSE
12117                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      :=  l_budget_lines_in(i).projfunc_rev_rate_type             ;
12118                        END IF;
12119 
12120                        IF p_budget_lines_in(i).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12121                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
12122                        ELSIF(p_budget_lines_in(i).projfunc_rev_rate_date_type is null) THEN
12123                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12124                        ELSE
12125                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE :=  l_budget_lines_in(i).projfunc_rev_rate_date_type ;
12126                        END IF;
12127 
12128                        IF p_budget_lines_in(i).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12129                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      := NULL;
12130                        ELSIF(p_budget_lines_in(i).projfunc_rev_rate_date is null) THEN
12131                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE   :=  FND_API.G_MISS_DATE;
12132                        ELSE
12133                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      :=  l_budget_lines_in(i).projfunc_rev_rate_date;
12134                        END IF;
12135 
12136                        IF p_budget_lines_in(i).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12137                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
12138                        ELSIF(p_budget_lines_in(i).projfunc_rev_exchange_rate is null) THEN
12139                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12140                        ELSE
12141                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  :=  l_budget_lines_in(i).projfunc_rev_exchange_rate ;
12142                        END IF;
12143 
12144                        IF  p_budget_lines_in(i).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12145                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      := NULL;
12146                        ELSIF(p_budget_lines_in(i).project_cost_rate_type is null) THEN
12147                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12148                        ELSE
12149                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      :=  l_budget_lines_in(i).project_cost_rate_type;
12150                        END IF;
12151 
12152                        IF p_budget_lines_in(i).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12153                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
12154                        ELSIF(p_budget_lines_in(i).project_cost_rate_date_type is null) THEN
12155                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12156                        ELSE
12157                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE :=  l_budget_lines_in(i).project_cost_rate_date_type ;
12158                        END IF;
12159 
12160                        IF p_budget_lines_in(i).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
12161                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      := NULL;
12162                        ELSIF(p_budget_lines_in(i).project_cost_rate_date is null) THEN
12163                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE   :=  FND_API.G_MISS_DATE;
12164                        ELSE
12165                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      :=  l_budget_lines_in(i).project_cost_rate_date;
12166                        END IF;
12167 
12168                        IF p_budget_lines_in(i).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
12169                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  := NULL;
12170                        ELSIF(p_budget_lines_in(i).project_cost_exchange_rate is null) THEN
12171                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12172                        ELSE
12173                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  :=  l_budget_lines_in(i).project_cost_exchange_rate ;
12174                        END IF;
12175 
12176                        IF  p_budget_lines_in(i).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12177                              l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       := NULL;
12178                        ELSIF(p_budget_lines_in(i).project_rev_rate_type is null) THEN
12179                              l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12180                        ELSE
12181                               l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       :=  l_budget_lines_in(i).project_rev_rate_type  ;
12182                        END IF;
12183 
12184                        IF p_budget_lines_in(i).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12185                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  := NULL;
12186                        ELSIF(p_budget_lines_in(i).project_rev_rate_date_type is null) THEN
12187                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12188                        ELSE
12189                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  :=  l_budget_lines_in(i).project_rev_rate_date_type;
12190                        END IF;
12191 
12192                        IF p_budget_lines_in(i).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
12193                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       := NULL;
12194                        ELSIF(p_budget_lines_in(i).project_rev_rate_date is null) THEN
12195                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE   :=  FND_API.G_MISS_DATE;
12196                        ELSE
12197                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       :=  l_budget_lines_in(i).project_rev_rate_date ;
12198                        END IF;
12199 
12200                        IF p_budget_lines_in(i).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
12201                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   := NULL;
12202                        ELSIF(p_budget_lines_in(i).project_rev_exchange_rate is null) THEN
12203                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12204                        ELSE
12205                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  l_budget_lines_in(i).project_rev_exchange_rate          ;
12206                        END IF;
12207 
12208                        IF p_budget_lines_in(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12209                              l_finplan_lines_tab(j).pm_product_code             := NULL;
12210                        ELSIF(p_budget_lines_in(i).pm_product_code is null) THEN
12211                              l_finplan_lines_tab(j).pm_product_code   :=  FND_API.G_MISS_CHAR;
12212                        ELSE
12213                              l_finplan_lines_tab(j).pm_product_code             :=  l_budget_lines_in(i).pm_product_code      ;
12214                        END IF;
12215 
12216                        IF p_budget_lines_in(i).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12217                              l_finplan_lines_tab(j).pm_budget_line_reference    := NULL;
12218                        ELSIF(p_budget_lines_in(i).pm_budget_line_reference is null) THEN
12219                              l_finplan_lines_tab(j).pm_budget_line_reference   :=  FND_API.G_MISS_CHAR;
12220                        ELSE
12221                              l_finplan_lines_tab(j).pm_budget_line_reference    :=  l_budget_lines_in(i).pm_budget_line_reference        ;
12222                        END IF;
12223 
12224                        l_finplan_lines_tab(j).quantity_source             :=  'I';
12225                        l_finplan_lines_tab(j).raw_cost_source             :=  'I';
12226                        l_finplan_lines_tab(j).burdened_cost_source        :=  'I';
12227                        l_finplan_lines_tab(j).revenue_source              :=  'I';
12228                        l_finplan_lines_tab(j).resource_assignment_id      :=  -1 ;
12229 
12230                        --increment the index for fin plan lines table
12231                        j := j+1;
12232              --          END IF; --IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
12233     ELSE
12234           --its an already existing budget line
12235           i := l_budget_line_index;
12236 
12237                        l_finplan_lines_tab(j).system_reference1           :=  l_budget_line_in_rec.pa_task_id;
12238                        l_finplan_lines_tab(j).system_reference2           :=  l_budget_line_in_rec.resource_list_member_id;
12239 					   l_finplan_lines_tab(j).system_reference3           :=  l_budget_line_in_rec.cbs_element_id;
12240                        l_finplan_lines_tab(j).start_date                  :=  l_budget_line_in_rec.budget_start_date;
12241                        l_finplan_lines_tab(j).end_date                    :=  l_budget_line_in_rec.budget_end_date;
12242                        l_finplan_lines_tab(j).period_name                 :=  l_budget_line_in_rec.period_name;
12243                        l_finplan_lines_tab(j).system_reference4           :=  l_unit_of_measure     ;
12244                        l_finplan_lines_tab(j).system_reference5           :=  l_track_as_labor_flag  ;
12245                        l_finplan_lines_tab(j).txn_currency_code           :=  l_budget_line_in_rec.txn_currency_code;
12246                        l_finplan_lines_tab(j).projfunc_raw_cost           :=  NULL;
12247                        l_finplan_lines_tab(j).projfunc_burdened_cost      :=  NULL;
12248                        l_finplan_lines_tab(j).projfunc_revenue            :=  NULL;
12249                        l_finplan_lines_tab(j).project_raw_cost            :=  NULL ;
12250                        l_finplan_lines_tab(j).project_burdened_cost       :=  NULL;
12251                        l_finplan_lines_tab(j).project_revenue             :=  NULL;
12252 
12253                       /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
12254                       *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
12255                       * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
12256                       * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
12257                        IF p_budget_lines_in(l_budget_line_index).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12258                              l_finplan_lines_tab(j).txn_raw_cost   :=  NULL;
12259                        ELSIF(p_budget_lines_in(l_budget_line_index).raw_cost is null) THEN
12260                              l_finplan_lines_tab(j).txn_raw_cost   :=  FND_API.G_MISS_NUM;
12261                        ELSE
12262                              l_finplan_lines_tab(j).txn_raw_cost   :=  l_budget_line_in_rec.raw_cost;
12263                        END IF;
12264 
12265                        IF p_budget_lines_in(l_budget_line_index).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12266                              l_finplan_lines_tab(j).txn_burdened_cost  := NULL;
12267                        ELSIF(p_budget_lines_in(l_budget_line_index).burdened_cost is null) THEN
12268                              l_finplan_lines_tab(j).txn_burdened_cost   :=  FND_API.G_MISS_NUM;
12269                        ELSE
12270                              l_finplan_lines_tab(j).txn_burdened_cost  := l_budget_line_in_rec.burdened_cost;
12271                        END IF;
12272 
12273                        IF p_budget_lines_in(l_budget_line_index).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12274                              l_finplan_lines_tab(j).txn_revenue  := NULL;
12275                        ELSIF(p_budget_lines_in(l_budget_line_index).revenue is null) THEN
12276                              l_finplan_lines_tab(j).txn_revenue   :=  FND_API.G_MISS_NUM;
12277                        ELSE
12278                              l_finplan_lines_tab(j).txn_revenue  := l_budget_line_in_rec.revenue;
12279                        END IF;
12280 
12281                        IF p_budget_lines_in(l_budget_line_index).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12282                              l_finplan_lines_tab(j).quantity  := NULL;
12283                        ELSIF(p_budget_lines_in(l_budget_line_index).quantity is null) THEN
12284                              l_finplan_lines_tab(j).quantity   :=  FND_API.G_MISS_NUM;
12285                        ELSE
12286                              l_finplan_lines_tab(j).quantity  := l_budget_line_in_rec.quantity;
12287                        END IF;
12288 
12289                        IF p_budget_lines_in(l_budget_line_index).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12290                              l_finplan_lines_tab(j).change_reason_code  :=NULL;
12291                        ELSIF(p_budget_lines_in(l_budget_line_index).change_reason_code is null) THEN
12292                              l_finplan_lines_tab(j).change_reason_code   :=  FND_API.G_MISS_CHAR;
12293                        ELSE
12294                              l_finplan_lines_tab(j).change_reason_code  :=  l_budget_line_in_rec.change_reason_code ;
12295                        END IF;
12296 
12297                        IF p_budget_lines_in(l_budget_line_index).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12298                              l_finplan_lines_tab(j).description     :=  NULL;
12299                        ELSIF(p_budget_lines_in(l_budget_line_index).description is null) THEN
12300                              l_finplan_lines_tab(j).description   :=  FND_API.G_MISS_CHAR;
12301                        ELSE
12302                              l_finplan_lines_tab(j).description     :=  l_budget_line_in_rec.description;
12303                        END IF;
12304 
12305                        IF p_budget_lines_in(l_budget_line_index).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12306                              l_finplan_lines_tab(j).attribute_category     :=  NULL;
12307                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute_category is null) THEN
12308                              l_finplan_lines_tab(j).attribute_category   :=  FND_API.G_MISS_CHAR;
12309                        ELSE
12310                              l_finplan_lines_tab(j).attribute_category     :=  l_budget_line_in_rec.attribute_category;
12311                        END IF;
12312 
12313                        IF p_budget_lines_in(l_budget_line_index).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12314                              l_finplan_lines_tab(j).attribute1     :=  NULL;
12315                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute1 is null) THEN
12316                              l_finplan_lines_tab(j).attribute1   :=  FND_API.G_MISS_CHAR;
12317                        ELSE
12318                              l_finplan_lines_tab(j).attribute1     :=  l_budget_line_in_rec.attribute1;
12319                        END IF;
12320 
12321                        IF p_budget_lines_in(l_budget_line_index).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12322                              l_finplan_lines_tab(j).attribute2     :=  NULL;
12323                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute2 is null) THEN
12324                              l_finplan_lines_tab(j).attribute2   :=  FND_API.G_MISS_CHAR;
12325                        ELSE
12326                              l_finplan_lines_tab(j).attribute2     :=  l_budget_line_in_rec.attribute2;
12327                        END IF;
12328 
12329                        IF p_budget_lines_in(l_budget_line_index).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12330                              l_finplan_lines_tab(j).attribute3     :=  NULL;
12331                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute3 is null) THEN
12332                              l_finplan_lines_tab(j).attribute3   :=  FND_API.G_MISS_CHAR;
12333                        ELSE
12334                              l_finplan_lines_tab(j).attribute3     :=  l_budget_line_in_rec.attribute3;
12335                        END IF;
12336 
12337                        IF p_budget_lines_in(l_budget_line_index).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12338                              l_finplan_lines_tab(j).attribute4     :=  NULL;
12339                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute4 is null) THEN
12340                              l_finplan_lines_tab(j).attribute4   :=  FND_API.G_MISS_CHAR;
12341                        ELSE
12342                              l_finplan_lines_tab(j).attribute4     :=  l_budget_line_in_rec.attribute4;
12343                        END IF;
12344 
12345                        IF p_budget_lines_in(l_budget_line_index).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12346                              l_finplan_lines_tab(j).attribute5     :=  NULL;
12347                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute5 is null) THEN
12348                              l_finplan_lines_tab(j).attribute5   :=  FND_API.G_MISS_CHAR;
12349                        ELSE
12350                              l_finplan_lines_tab(j).attribute5     :=  l_budget_line_in_rec.attribute5;
12351                        END IF;
12352 
12353                        IF p_budget_lines_in(l_budget_line_index).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12354                              l_finplan_lines_tab(j).attribute6     :=  NULL;
12355                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute6 is null) THEN
12356                              l_finplan_lines_tab(j).attribute6   :=  FND_API.G_MISS_CHAR;
12357                        ELSE
12358                              l_finplan_lines_tab(j).attribute6     :=  l_budget_line_in_rec.attribute6;
12359                        END IF;
12360 
12361                        IF p_budget_lines_in(l_budget_line_index).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12362                              l_finplan_lines_tab(j).attribute7     :=  NULL;
12363                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute7 is null) THEN
12364                              l_finplan_lines_tab(j).attribute7   :=  FND_API.G_MISS_CHAR;
12365                        ELSE
12366                              l_finplan_lines_tab(j).attribute7     :=  l_budget_line_in_rec.attribute7;
12367                        END IF;
12368 
12369                        IF p_budget_lines_in(l_budget_line_index).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12370                              l_finplan_lines_tab(j).attribute8     :=  NULL;
12371                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute8 is null) THEN
12372                              l_finplan_lines_tab(j).attribute8   :=  FND_API.G_MISS_CHAR;
12373                        ELSE
12374                              l_finplan_lines_tab(j).attribute8     :=  l_budget_line_in_rec.attribute8;
12375                        END IF;
12376 
12377                        IF p_budget_lines_in(l_budget_line_index).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12378                              l_finplan_lines_tab(j).attribute9     :=  NULL;
12379                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute9 is null) THEN
12380                              l_finplan_lines_tab(j).attribute9   :=  FND_API.G_MISS_CHAR;
12381                        ELSE
12382                              l_finplan_lines_tab(j).attribute9     :=  l_budget_line_in_rec.attribute9;
12383                        END IF;
12384 
12385                        IF p_budget_lines_in(l_budget_line_index).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12386                              l_finplan_lines_tab(j).attribute10     :=  NULL;
12387                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute10 is null) THEN
12388                              l_finplan_lines_tab(j).attribute10   :=  FND_API.G_MISS_CHAR;
12389                        ELSE
12390                              l_finplan_lines_tab(j).attribute10     :=  l_budget_line_in_rec.attribute10;
12391                        END IF;
12392 
12393                        IF p_budget_lines_in(l_budget_line_index).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12394                              l_finplan_lines_tab(j).attribute11     :=  NULL;
12395                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute11 is null) THEN
12396                              l_finplan_lines_tab(j).attribute11   :=  FND_API.G_MISS_CHAR;
12397                        ELSE
12398                              l_finplan_lines_tab(j).attribute11     :=  l_budget_line_in_rec.attribute11;
12399                        END IF;
12400 
12401                        IF p_budget_lines_in(l_budget_line_index).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12402                              l_finplan_lines_tab(j).attribute12     :=  NULL;
12403                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute12 is null) THEN
12404                              l_finplan_lines_tab(j).attribute12   :=  FND_API.G_MISS_CHAR;
12405                        ELSE
12406                              l_finplan_lines_tab(j).attribute12     :=  l_budget_line_in_rec.attribute12;
12407                        END IF;
12408 
12409                        IF p_budget_lines_in(l_budget_line_index).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12410                              l_finplan_lines_tab(j).attribute13     :=  NULL;
12411                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute13 is null) THEN
12412                              l_finplan_lines_tab(j).attribute13   :=  FND_API.G_MISS_CHAR;
12413                        ELSE
12414                              l_finplan_lines_tab(j).attribute13     :=  l_budget_line_in_rec.attribute13;
12415                        END IF;
12416 
12417                        IF p_budget_lines_in(l_budget_line_index).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12418                              l_finplan_lines_tab(j).attribute14     :=  NULL;
12419                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute14 is null) THEN
12420                              l_finplan_lines_tab(j).attribute14   :=  FND_API.G_MISS_CHAR;
12421                        ELSE
12422                              l_finplan_lines_tab(j).attribute14     :=  l_budget_line_in_rec.attribute14;
12423                        END IF;
12424 
12425                        IF p_budget_lines_in(l_budget_line_index).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12426                              l_finplan_lines_tab(j).attribute15     :=  NULL;
12427                        ELSIF(p_budget_lines_in(l_budget_line_index).attribute15 is null) THEN
12428                              l_finplan_lines_tab(j).attribute15   :=  FND_API.G_MISS_CHAR;
12429                        ELSE
12430                              l_finplan_lines_tab(j).attribute15     :=  l_budget_line_in_rec.attribute15;
12431                        END IF;
12432 
12433                        IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12434                             l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
12435                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_type is null) THEN
12436                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12437                        ELSE
12438                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE     :=  l_budget_line_in_rec.projfunc_cost_rate_type;
12439                        END IF;
12440 
12441                        IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12442                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
12443                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date_type is null) THEN
12444                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12445                        ELSE
12446                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_line_in_rec.projfunc_cost_rate_date_type;
12447                        END IF;
12448 
12449                        IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12450                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     := NULL;
12451                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date is null) THEN
12452                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE   :=  FND_API.G_MISS_DATE;
12453                        ELSE
12454                              l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE     :=  l_budget_line_in_rec.projfunc_cost_rate_date            ;
12455                        END IF;
12456 
12457                        IF p_budget_lines_in(l_budget_line_index).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12458                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
12459                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_exchange_rate is null) THEN
12460                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12461                        ELSE
12462                              l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE :=  l_budget_line_in_rec.projfunc_cost_exchange_rate        ;
12463                        END IF;
12464 
12465                        IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12466                               l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      := NULL;
12467                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_type is null) THEN
12468                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12469                        ELSE
12470                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE      :=  l_budget_line_in_rec.projfunc_rev_rate_type             ;
12471                        END IF;
12472 
12473                        IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12474                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
12475                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date_type is null) THEN
12476                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12477                        ELSE
12478                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE :=  l_budget_line_in_rec.projfunc_rev_rate_date_type ;
12479                        END IF;
12480 
12481                        IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12482                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      := NULL;
12483                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date is null) THEN
12484                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE   :=  FND_API.G_MISS_DATE;
12485                        ELSE
12486                              l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE      :=  l_budget_line_in_rec.projfunc_rev_rate_date;
12487                        END IF;
12488 
12489                        IF p_budget_lines_in(l_budget_line_index).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12490                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  := NULL;
12491                        ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_exchange_rate is null) THEN
12492                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12493                        ELSE
12494                              l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE  :=  l_budget_line_in_rec.projfunc_rev_exchange_rate ;
12495                        END IF;
12496 
12497                        IF  p_budget_lines_in(l_budget_line_index).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12498                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      := NULL;
12499                        ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_type is null) THEN
12500                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12501                        ELSE
12502                              l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE      :=  l_budget_line_in_rec.project_cost_rate_type;
12503                        END IF;
12504 
12505                        IF p_budget_lines_in(l_budget_line_index).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12506                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
12507                        ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_date_type is null) THEN
12508                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12509                        ELSE
12510                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE :=  l_budget_line_in_rec.project_cost_rate_date_type ;
12511                        END IF;
12512 
12513                        IF p_budget_lines_in(l_budget_line_index).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
12514                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      := NULL;
12515                        ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_date is null) THEN
12516                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE   :=  FND_API.G_MISS_DATE;
12517                        ELSE
12518                              l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE      :=  l_budget_line_in_rec.project_cost_rate_date;
12519                        END IF;
12520 
12521                        IF p_budget_lines_in(l_budget_line_index).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
12522                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  := NULL;
12523                        ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_exchange_rate is null) THEN
12524                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12525                        ELSE
12526                              l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE  :=  l_budget_line_in_rec.project_cost_exchange_rate ;
12527                        END IF;
12528 
12529                        IF  p_budget_lines_in(l_budget_line_index).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12530                              l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       := NULL;
12531                        ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_type is null) THEN
12532                              l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE   :=  FND_API.G_MISS_CHAR;
12533                        ELSE
12534                               l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE       :=  l_budget_line_in_rec.project_rev_rate_type  ;
12535                        END IF;
12536 
12537                        IF p_budget_lines_in(l_budget_line_index).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12538                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  := NULL;
12539                        ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_date_type is null) THEN
12540                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE   :=  FND_API.G_MISS_CHAR;
12541                        ELSE
12542                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE  :=  l_budget_line_in_rec.project_rev_rate_date_type;
12543                        END IF;
12544 
12545                        IF p_budget_lines_in(l_budget_line_index).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  THEN
12546                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       := NULL;
12547                        ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_date is null) THEN
12548                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE   :=  FND_API.G_MISS_DATE;
12549                        ELSE
12550                              l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE       :=  l_budget_line_in_rec.project_rev_rate_date ;
12551                        END IF;
12552 
12553                        IF p_budget_lines_in(l_budget_line_index).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
12554                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   := NULL;
12555                        ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_exchange_rate is null) THEN
12556                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  FND_API.G_MISS_NUM;
12557                        ELSE
12558                              l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE   :=  l_budget_line_in_rec.project_rev_exchange_rate;
12559                        END IF;
12560 
12561                        IF p_budget_lines_in(l_budget_line_index).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
12562                              l_finplan_lines_tab(j).pm_product_code             := NULL;
12563                        ELSIF(p_budget_lines_in(l_budget_line_index).pm_product_code is null) THEN
12564                              l_finplan_lines_tab(j).pm_product_code   :=  FND_API.G_MISS_CHAR;
12565                        ELSE
12566                              l_finplan_lines_tab(j).pm_product_code             :=  l_budget_line_in_rec.pm_product_code ;
12567                        END IF;
12568 
12569                        IF p_budget_lines_in(l_budget_line_index).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12570                              l_finplan_lines_tab(j).pm_budget_line_reference    := NULL;
12571                        ELSIF(p_budget_lines_in(l_budget_line_index).pm_budget_line_reference is null) THEN
12572                              l_finplan_lines_tab(j).pm_budget_line_reference   :=  FND_API.G_MISS_CHAR;
12573                        ELSE
12574                              l_finplan_lines_tab(j).pm_budget_line_reference    :=  l_budget_line_in_rec.pm_budget_line_reference  ;
12575                        END IF;
12576 
12577                        l_finplan_lines_tab(j).quantity_source             :=  'I';
12578                        l_finplan_lines_tab(j).raw_cost_source             :=  'I';
12579                        l_finplan_lines_tab(j).burdened_cost_source        :=  'I';
12580                        l_finplan_lines_tab(j).revenue_source              :=  'I';
12581                        l_finplan_lines_tab(j).resource_assignment_id      :=  l_resource_assignment_id ;
12582                        --increment the index for fin plan lines table
12583                        j := j+1;
12584     END IF;
12585                  -- Actual insertion will take place outside the loop as
12586                  -- as the call to CREATE_FINPLAN_LINES expects a table
12587                  -- of budget line records.
12588      --Major changes for the bug 3453650 for the finplan model.
12589 
12590 
12591 END IF; -- l_budget_type_code IS NOT NULL
12592 
12593      l_budget_line_index := p_budget_lines_in.next(l_budget_line_index);
12594 
12595 END LOOP budget_line;
12596 
12597 IF l_budget_type_code IS NULL THEN
12598 
12599      -- Bug : 3453650: Calling the create finplan lines api to create the
12600      -- budget lines for the finplan model and passing the l_finplan_lines_tab
12601      -- table which was built earlier in the api
12602 
12603      IF ( nvl(l_finplan_lines_tab.last,0) > 0 ) THEN
12604 
12605           -- dbms_output.put_line ('Calling add_finplan_lines');
12606 
12607                PA_FIN_PLAN_PVT.ADD_FIN_PLAN_LINES
12608                    ( p_calling_context         => PA_FP_CONSTANTS_PKG.G_AMG_API /* Bug# 2674353 */
12609                     ,p_fin_plan_version_id     => l_budget_version_id
12610                     ,p_finplan_lines_tab        => l_finplan_lines_tab
12611                     ,x_return_status           => l_return_status
12612                     ,x_msg_count               => l_msg_count
12613                     ,x_msg_data                => l_msg_data );
12614 
12615           -- dbms_output.put_line ('after Calling add_finplan_lines ' || l_return_status || ' p_multiple_task_msg ' || p_multiple_task_msg);
12616 
12617                IF (l_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
12618                     pa_debug.g_err_stage:= 'Error Calling ADD_FINPLAN_LINES';
12619                     IF L_DEBUG_MODE = 'Y' THEN
12620                        pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
12621                     END IF;
12622                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12623                END IF;
12624      END IF;
12625 
12626 
12627         -- Unlock the version now that the budget version is updated.
12628         l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
12629                                      (p_budget_version_id => l_budget_version_id);
12630 
12631       --Try to lock the version before updating the version. This is required so that nobody else can access it.
12632         pa_fin_plan_pvt.lock_unlock_version
12633                     (p_budget_version_id       => l_budget_version_id,
12634                      p_record_version_number   => l_record_version_number,
12635                      p_action                  => 'U',
12636                      p_user_id                 => l_user_id,
12637                      p_person_id               => lx_locked_by_person_id,
12638                      x_return_status           => x_return_status,
12639                      x_msg_count               => l_msg_count,
12640                      x_msg_data                => l_msg_data) ;
12641 
12642         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
12643 
12644              IF l_debug_mode = 'Y' THEN
12645                    pa_debug.g_err_stage := 'Error in lock unlock version - Cannot lock the version';
12646                    pa_debug.write('CREATE_DRAFT: ' || g_module_name,pa_debug.g_err_stage,5);
12647              END IF;
12648 
12649              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12650          END IF;
12651 
12652 END IF; -- END OF l_budget_type_code is null
12653 
12654 IF p_multiple_task_msg = 'F' THEN
12655      RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12656 END IF;
12657 
12658     --summarizing the totals in the table pa_budget_versions
12659 /*Added the below if condition for the bug 3453650*/
12660 IF l_budget_type_code IS NOT NULL THEN
12661 
12662 -- check for overlapping dates
12663     pa_budget_lines_v_pkg.check_overlapping_dates( x_budget_version_id  => l_budget_version_id      --IN
12664                               ,x_resource_name  => l_resource_name      --OUT
12665                               ,x_err_code       => l_err_code       );
12666 
12667 -- dbms_output.put_line ('after calling pa_budget_lines_v_pkg.check_overlapping_dates ' || l_err_code );
12668 
12669       IF l_err_code > 0 THEN
12670             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12671                   FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
12672                   FND_MESSAGE.SET_TOKEN('Rname',l_resource_name);
12673 
12674                   FND_MSG_PUB.add;
12675             END IF;
12676             RAISE FND_API.G_EXC_ERROR;
12677       ELSIF l_err_code < 0 THEN
12678             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12679                   FND_MSG_PUB.add_exc_msg
12680                       (  p_pkg_name       => 'PA_BUDGET_LINES_V_PKG'
12681                       ,  p_procedure_name => 'CHECK_OVERLAPPING_DATES'
12682                       ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
12683             END IF;
12684             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12685       END IF;
12686 
12687 
12688         PA_BUDGET_UTILS.summerize_project_totals( x_budget_version_id => l_budget_version_id
12689                                     , x_err_code      => l_err_code
12690                             , x_err_stage     => l_err_stage
12691                             , x_err_stack     => l_err_stack        );
12692 
12693         IF l_err_code > 0 THEN
12694              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12695                IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
12696                     pa_interface_utils_pub.map_new_amg_msg
12697                     ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
12698                     ,p_msg_attribute    => 'CHANGE'
12699                     ,p_resize_flag      => 'N'
12700                     ,p_msg_context      => 'BUDG'
12701                     ,p_attribute1       => l_amg_segment1
12702                     ,p_attribute2       => l_amg_task_number
12703                     ,p_attribute3       => l_budget_type_code
12704                     ,p_attribute4       => ''
12705                     ,p_attribute5       => to_char(l_budget_start_date));
12706                ELSE
12707                     pa_interface_utils_pub.map_new_amg_msg
12708                     ( p_old_message_code => l_err_stage
12709                     ,p_msg_attribute    => 'CHANGE'
12710                     ,p_resize_flag      => 'N'
12711                     ,p_msg_context      => 'BUDG'
12712                     ,p_attribute1       => l_amg_segment1
12713                     ,p_attribute2       => l_amg_task_number
12714                     ,p_attribute3       => l_budget_type_code
12715                     ,p_attribute4       => ''
12716                     ,p_attribute5       => to_char(l_budget_start_date));
12717                END IF;
12718           END IF;
12719           RAISE FND_API.G_EXC_ERROR;
12720      ELSIF l_err_code < 0 THEN
12721           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12722                FND_MSG_PUB.add_exc_msg
12723                (  p_pkg_name       => 'PA_BUDGET_UTILS'
12724                ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
12725                ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
12726 
12727           END IF;
12728           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12729         END IF; -- l_err_code > 0
12730  END IF; -- l_budget_type_code IS NOT NULL
12731 
12732 END IF;  --if there are budget lines
12733 
12734 IF FND_API.TO_BOOLEAN( p_commit ) THEN
12735      COMMIT;
12736 END IF;
12737 
12738 
12739 EXCEPTION
12740 
12741       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12742           -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || FND_MSG_PUB.count_msg);
12743         ROLLBACK TO update_budget_pub;
12744 
12745         IF p_return_status IS NULL OR
12746            p_return_status =  FND_API.G_RET_STS_SUCCESS THEN
12747               p_return_status := FND_API.G_RET_STS_ERROR;
12748         END IF;
12749 
12750         l_msg_count := FND_MSG_PUB.count_msg;
12751         -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || l_msg_count);
12752 
12753         IF l_msg_count = 1 AND p_msg_data IS NULL THEN
12754                PA_INTERFACE_UTILS_PUB.get_messages
12755                    (p_encoded        => FND_API.G_TRUE,
12756                     p_msg_index      => 1,
12757                     p_msg_count      => l_msg_count,
12758                     p_msg_data       => l_msg_data,
12759                     p_data           => l_data,
12760                     p_msg_index_out  => l_msg_index_out);
12761 
12762                p_msg_data  := l_data;
12763                p_msg_count := l_msg_count;
12764         ELSE
12765                p_msg_count := l_msg_count;
12766         END IF;
12767         --Changes for bug 3182963
12768         IF l_debug_mode = 'Y' THEN
12769           pa_debug.reset_curr_function;
12770         END IF;
12771           -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || l_msg_count);
12772 
12773         RETURN;
12774 
12775     WHEN FND_API.G_EXC_ERROR
12776     THEN
12777 
12778 
12779             ROLLBACK TO update_budget_pub;
12780 
12781             p_return_status := FND_API.G_RET_STS_ERROR;
12782 
12783             FND_MSG_PUB.Count_And_Get
12784             (   p_count     =>  p_msg_count ,
12785                 p_data      =>  p_msg_data  );
12786 
12787     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
12788     THEN
12789 
12790 
12791             ROLLBACK TO update_budget_pub;
12792 
12793             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12794 
12795             FND_MSG_PUB.Count_And_Get
12796             (   p_count     =>  p_msg_count ,
12797                 p_data      =>  p_msg_data  );
12798 
12799     WHEN ROW_ALREADY_LOCKED
12800     THEN
12801         ROLLBACK TO update_budget_pub;
12802 
12803         p_return_status := FND_API.G_RET_STS_ERROR;
12804 
12805         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12806         THEN
12807          FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
12808          FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
12809          FND_MESSAGE.SET_TOKEN('TASK',    l_amg_task_number);
12810          FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', l_budget_type_code);
12811          FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
12812    --    FND_MESSAGE.SET_TOKEN('START_DATE', to_char(l_budget_start_date));
12813          FND_MESSAGE.SET_TOKEN('START_DATE',
12814                                 fnd_date.date_to_chardate(dateval => l_budget_start_date, calendar_aware => 1)); -- rmunjulu pass additional parameter to make it calendar_aware
12815          FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
12816          FND_MSG_PUB.ADD;
12817         END IF;
12818 
12819         FND_MSG_PUB.Count_And_Get
12820                 (   p_count     =>  p_msg_count ,
12821                     p_data      =>  p_msg_data  );
12822 
12823     WHEN OTHERS
12824     THEN
12825 
12826 
12827             ROLLBACK TO update_budget_pub;
12828 
12829             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12830 
12831             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
12832             THEN
12833                 FND_MSG_PUB.add_exc_msg
12834                 (  p_pkg_name       => G_PKG_NAME
12835                 ,  p_procedure_name => l_api_name );
12836 
12837             END IF;
12838 
12839             FND_MSG_PUB.Count_And_Get
12840             (   p_count     =>  p_msg_count ,
12841                 p_data      =>  p_msg_data  );
12842 
12843 
12844 END update_budget;
12845 
12846 
12847 ----------------------------------------------------------------------------------------
12848 --Name:               execute_update_budget
12849 --Type:               Procedure
12850 --Description:        This procedure can be used to update a working (draft) budget
12851 --                    using global PL/SQL tables.
12852 --
12853 --Called subprograms:
12854 --
12855 --
12856 --
12857 --History:
12858 --    14-OCT-1996        L. de Werker    Created
12859 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
12860 --
12861 
12862 PROCEDURE execute_update_budget
12863 ( p_api_version_number          IN  NUMBER
12864  ,p_commit              IN  VARCHAR2    := FND_API.G_FALSE
12865  ,p_init_msg_list           IN  VARCHAR2    := FND_API.G_FALSE
12866  ,p_msg_count               OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12867  ,p_msg_data                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12868  ,p_return_status           OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12869  ,p_pm_product_code         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12870  ,p_pa_project_id           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12871  ,p_pm_project_reference        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12872  ,p_budget_type_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12873  ,p_change_reason_code          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12874  ,p_description             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12875  ,p_attribute_category          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12876  ,p_attribute1              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12877  ,p_attribute2              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12878  ,p_attribute3              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12879  ,p_attribute4              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12880  ,p_attribute5              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12881  ,p_attribute6              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12882  ,p_attribute7              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12883  ,p_attribute8              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12884  ,p_attribute9              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12885  ,p_attribute10             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12886  ,p_attribute11             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12887  ,p_attribute12             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12888  ,p_attribute13             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12889  ,p_attribute14             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12890  ,p_attribute15             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12891    --Added for the bug 3453650
12892  ,p_resource_list_id              IN   pa_budget_versions.resource_list_id%TYPE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12893  ,p_set_current_working_flag      IN   pa_budget_versions.current_working_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12894  ,p_budget_version_number         IN   pa_budget_versions.version_number%TYPE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12895  ,p_budget_version_name           IN   pa_budget_versions.version_name%TYPE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12896  ,p_version_type                  IN   pa_budget_versions.version_type%TYPE  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12897  ,p_finplan_type_id               IN   pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12898  ,p_plan_in_multi_curr_flag       IN   pa_proj_fp_options.plan_in_multi_curr_flag%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12899  ,p_time_phased_code              IN   pa_proj_fp_options.cost_time_phased_code%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12900  ,p_projfunc_cost_rate_type       IN   pa_proj_fp_options.projfunc_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12901  ,p_projfunc_cost_rate_date_typ   IN   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12902  ,p_projfunc_cost_rate_date       IN   pa_proj_fp_options.projfunc_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12903  ,p_projfunc_cost_exchange_rate   IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12904  ,p_projfunc_rev_rate_type        IN   pa_proj_fp_options.projfunc_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12905  ,p_projfunc_rev_rate_date_typ    IN   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12906  ,p_projfunc_rev_rate_date        IN   pa_proj_fp_options.projfunc_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12907  ,p_projfunc_rev_exchange_rate    IN   pa_budget_lines.projfunc_cost_exchange_rate%TYPE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12908  ,p_project_cost_rate_type        IN   pa_proj_fp_options.project_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12909  ,p_project_cost_rate_date_typ    IN   pa_proj_fp_options.project_cost_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12910  ,p_project_cost_rate_date        IN   pa_proj_fp_options.project_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12911  ,p_project_cost_exchange_rate    IN  pa_budget_lines.project_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12912  ,p_project_rev_rate_type         IN   pa_proj_fp_options.project_rev_rate_type%TYPE  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12913  ,p_project_rev_rate_date_typ     IN   pa_proj_fp_options.project_rev_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12914  ,p_project_rev_rate_date         IN   pa_proj_fp_options.project_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12915  ,p_project_rev_exchange_rate     IN  pa_budget_lines.project_rev_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12916  )
12917 
12918 IS
12919 
12920    l_api_name               CONSTANT    VARCHAR2(30)        := 'execute_update_budget';
12921 
12922    i                            NUMBER;
12923    l_return_status                  VARCHAR2(1);
12924    l_err_stage                      VARCHAR2(120);
12925 
12926 
12927 BEGIN
12928 
12929 --  Standard begin of API savepoint
12930 
12931     SAVEPOINT execute_update_budget_pub;
12932 
12933 --  Standard call to check for call compatibility.
12934 
12935     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
12936                                          p_api_version_number   ,
12937                                          l_api_name             ,
12938                                          G_PKG_NAME             )
12939     THEN
12940 
12941     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12942 
12943     END IF;
12944 
12945 --  Initialize the message table if requested.
12946 
12947     IF FND_API.TO_BOOLEAN( p_init_msg_list )
12948     THEN
12949 
12950     FND_MSG_PUB.initialize;
12951 
12952     END IF;
12953 
12954 --  Set API return status to success
12955 
12956     p_return_status := FND_API.G_RET_STS_SUCCESS;
12957 
12958 
12959 --  product_code is mandatory
12960 
12961     IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12962     OR p_pm_product_code IS NULL
12963     THEN
12964     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12965     THEN
12966       pa_interface_utils_pub.map_new_amg_msg
12967       ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
12968        ,p_msg_attribute    => 'CHANGE'
12969        ,p_resize_flag      => 'N'
12970        ,p_msg_context      => 'GENERAL'
12971        ,p_attribute1       => ''
12972        ,p_attribute2       => ''
12973        ,p_attribute3       => ''
12974        ,p_attribute4       => ''
12975        ,p_attribute5       => '');
12976     END IF;
12977 
12978         RAISE FND_API.G_EXC_ERROR;
12979 
12980     END IF;
12981 
12982     l_pm_product_code :='Z';
12983     /*added for bug no :2413400*/
12984     OPEN p_product_code_csr (p_pm_product_code);
12985     FETCH p_product_code_csr INTO l_pm_product_code;
12986     CLOSE p_product_code_csr;
12987     IF l_pm_product_code <> 'X'
12988     THEN
12989 
12990            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12991     THEN
12992          pa_interface_utils_pub.map_new_amg_msg
12993            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
12994             ,p_msg_attribute    => 'CHANGE'
12995             ,p_resize_flag      => 'N'
12996             ,p_msg_context      => 'GENERAL'
12997             ,p_attribute1       => ''
12998             ,p_attribute2       => ''
12999             ,p_attribute3       => ''
13000             ,p_attribute4       => ''
13001             ,p_attribute5       => '');
13002     END IF;
13003     p_return_status             := FND_API.G_RET_STS_ERROR;
13004     RAISE FND_API.G_EXC_ERROR;
13005     END IF;
13006 
13007 
13008 /*   -- dbms_output.put_line('Before update_budget'); */
13009 
13010           update_budget( p_api_version_number   => p_api_version_number
13011                     ,p_commit       => FND_API.G_FALSE
13012                     ,p_init_msg_list    => FND_API.G_FALSE
13013                 ,p_msg_count        => p_msg_count
13014                 ,p_msg_data     => p_msg_data
13015                 ,p_return_status    => l_return_status
13016                 ,p_pm_product_code  => p_pm_product_code
13017                 ,p_pa_project_id    => p_pa_project_id
13018                 ,p_pm_project_reference => p_pm_project_reference
13019                 ,p_budget_type_code => p_budget_type_code
13020                 ,p_change_reason_code   => p_change_reason_code
13021                 ,p_description      => p_description
13022                 ,p_budget_lines_in  => G_budget_lines_in_tbl
13023                 ,p_budget_lines_out => G_budget_lines_out_tbl
13024                 -- Added for bug 4224464
13025                 --Added the new parameters for the bug 3453650
13026                 ,p_resource_list_id              =>   p_resource_list_id
13027                 ,p_set_current_working_flag      =>   p_set_current_working_flag
13028                 ,p_budget_version_number         =>   p_budget_version_number
13029                 ,p_budget_version_name           =>   p_budget_version_name
13030                 ,p_version_type                  =>   p_version_type  -- 3453650
13031                 ,p_finplan_type_id               =>   p_finplan_type_id
13032                 ,p_plan_in_multi_curr_flag       =>   p_plan_in_multi_curr_flag
13033                 ,p_time_phased_code              =>   p_time_phased_code
13034                 ,p_projfunc_cost_rate_type       =>   p_projfunc_cost_rate_type
13035                 ,p_projfunc_cost_rate_date_typ   =>   p_projfunc_cost_rate_date_typ
13036                 ,p_projfunc_cost_rate_date       =>   p_projfunc_cost_rate_date
13037                 ,p_projfunc_cost_exchange_rate   =>   p_projfunc_cost_exchange_rate
13038                 ,p_projfunc_rev_rate_type        =>   p_projfunc_rev_rate_type
13039                 ,p_projfunc_rev_rate_date_typ    =>   p_projfunc_rev_rate_date_typ
13040                 ,p_projfunc_rev_rate_date        =>   p_projfunc_rev_rate_date
13041                 ,p_projfunc_rev_exchange_rate    =>   p_projfunc_rev_exchange_rate
13042                 ,p_project_cost_rate_type        =>   p_project_cost_rate_type
13043                 ,p_project_cost_rate_date_typ    =>   p_project_cost_rate_date_typ
13044                 ,p_project_cost_rate_date        =>   p_project_cost_rate_date
13045                 ,p_project_cost_exchange_rate    =>   p_project_cost_exchange_rate
13046                 ,p_project_rev_rate_type         =>   p_project_rev_rate_type
13047                 ,p_project_rev_rate_date_typ     =>   p_project_rev_rate_date_typ
13048                 ,p_project_rev_rate_date         =>   p_project_rev_rate_date
13049                 ,p_project_rev_exchange_rate     =>   p_project_rev_exchange_rate );
13050 
13051 /*   -- dbms_output.put_line('After update_budget'); */
13052 
13053 /*   -- dbms_output.put_line('Return status update_budget: '||l_return_status); */
13054 
13055     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13056         THEN
13057 
13058             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13059 
13060         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13061         THEN
13062 
13063             RAISE FND_API.G_EXC_ERROR;
13064         END IF;
13065 
13066         IF fnd_api.to_boolean(p_commit)
13067         THEN
13068             COMMIT;
13069         END IF;
13070 
13071 
13072 EXCEPTION
13073 
13074     WHEN FND_API.G_EXC_ERROR
13075     THEN
13076 
13077 /*   -- dbms_output.put_line('handling an G_EXC_ERROR exception in execute_update_budget'); */
13078 
13079     ROLLBACK TO execute_update_budget_pub;
13080 
13081     p_return_status := FND_API.G_RET_STS_ERROR;
13082 
13083     FND_MSG_PUB.Count_And_Get
13084     (   p_count     =>  p_msg_count ,
13085         p_data      =>  p_msg_data  );
13086 
13087     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
13088     THEN
13089 
13090 /*   -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
13091 
13092     ROLLBACK TO execute_update_budget_pub;
13093 
13094     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13095 
13096     FND_MSG_PUB.Count_And_Get
13097     (   p_count     =>  p_msg_count ,
13098         p_data      =>  p_msg_data  );
13099 
13100     WHEN OTHERS THEN
13101 
13102 /*   -- dbms_output.put_line('handling an OTHERS exception in execute_update_budget'); */
13103 
13104     ROLLBACK TO execute_update_budget_pub;
13105 
13106     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13107 
13108     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
13109     THEN
13110         FND_MSG_PUB.add_exc_msg
13111             (  p_pkg_name       => G_PKG_NAME
13112             ,  p_procedure_name => l_api_name );
13113 
13114     END IF;
13115 
13116     FND_MSG_PUB.Count_And_Get
13117     (   p_count     =>  p_msg_count ,
13118         p_data      =>  p_msg_data  );
13119 
13120 END execute_update_budget;
13121 
13122 
13123 ----------------------------------------------------------------------------------------
13124 --Name:               update_budget_line
13125 --Type:               Procedure
13126 --Description:        This procedure can be used to update a budgetline of an
13127 --                    existing WORKING budget.
13128 --
13129 --Called subprograms: pa_budget_pvt.update_budget_line_sql
13130 --
13131 --
13132 --
13133 --
13134 --History:
13135 --    10-OCT-1996        L. de Werker    Created
13136 --    19-NOV-1996    L. de Werker    Changed to let it use update_budget_line_sql
13137 --    28-NOV-1996    L. de Werker    Add 16 parameters for descriptive flexfields
13138 --    11-MAY-2005    Ritesh Shukla   Bug 4224464: FP.M Changes for update_budget_line
13139 
13140 PROCEDURE update_budget_line
13141 ( p_api_version_number            IN  NUMBER
13142  ,p_commit                        IN  VARCHAR2   := FND_API.G_FALSE
13143  ,p_init_msg_list                 IN  VARCHAR2   := FND_API.G_FALSE
13144  ,p_msg_count                     OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13145  ,p_msg_data                      OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13146  ,p_return_status                 OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13147  ,p_pm_product_code               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13148  ,p_pa_project_id                 IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13149  ,p_pm_project_reference          IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13150  ,p_budget_type_code              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13151  ,p_pa_task_id                    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13152  ,p_pm_task_reference             IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13153  ,p_resource_alias                IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13154  ,p_resource_list_member_id       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13155    --Bug 16604257 : CBS RBS Phase 2 API changes
13156   ,p_cost_code                  IN    VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13157   ,p_cbs_element_id         IN    NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13158  --Bug 16604257
13159  ,p_budget_start_date             IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13160  ,p_budget_end_date               IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13161  ,p_period_name                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13162  ,p_description                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13163  ,p_raw_cost                      IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13164  ,p_burdened_cost                 IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13165  ,p_revenue                       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13166  ,p_quantity                      IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13167  ,p_attribute_category            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13168  ,p_attribute1                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13169  ,p_attribute2                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13170  ,p_attribute3                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13171  ,p_attribute4                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13172  ,p_attribute5                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13173  ,p_attribute6                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13174  ,p_attribute7                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13175  ,p_attribute8                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13176  ,p_attribute9                    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13177  ,p_attribute10                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13178  ,p_attribute11                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13179  ,p_attribute12                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13180  ,p_attribute13                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13181  ,p_attribute14                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13182  ,p_attribute15                   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13183  --Parameters added for FP.M
13184  ,p_fin_plan_type_id              IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13185  ,p_fin_plan_type_name            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13186  ,p_version_type                  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13187  ,p_version_number                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13188  ,p_currency_code                 IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13189  ,p_change_reason_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13190  ,p_projfunc_cost_rate_type       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13191  ,p_projfunc_cost_rate_date_typ   IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13192  ,p_projfunc_cost_rate_date       IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13193  ,p_projfunc_cost_exchange_rate   IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13194  ,p_projfunc_rev_rate_type        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13195  ,p_projfunc_rev_rate_date_typ    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13196  ,p_projfunc_rev_rate_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13197  ,p_projfunc_rev_exchange_rate    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13198  ,p_project_cost_rate_type        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13199  ,p_project_cost_rate_date_typ    IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13200  ,p_project_cost_rate_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13201  ,p_project_cost_exchange_rate    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13202  ,p_project_rev_rate_type         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13203  ,p_project_rev_rate_date_typ     IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13204  ,p_project_rev_rate_date         IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13205  ,p_project_rev_exchange_rate     IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13206 )
13207 
13208 IS
13209 
13210 
13211      --needed to get the resource assignment for this budget_version / task / member combination
13212      CURSOR l_resource_assignment_csr
13213         (p_budget_version_id  NUMBER
13214         ,p_task_id            NUMBER
13215         ,p_member_id          NUMBER
13216 		,p_c_cbs_element_id NUMBER)
13217      IS
13218      SELECT resource_assignment_id
13219      FROM   pa_resource_assignments
13220      WHERE  budget_version_id = p_budget_version_id
13221      AND    task_id = p_task_id
13222      AND    resource_list_member_id = p_member_id
13223 	 AND NVL(CBS_ELEMENT_ID,-1)=NVL(P_C_CBS_ELEMENT_ID,-1);   --Bug 16604257
13224 
13225      --needed to check whether budget line already exists
13226      CURSOR l_budget_line_csr
13227         (p_resource_assigment_id NUMBER
13228         ,p_budget_start_date     DATE
13229         ,p_currency_code         VARCHAR2)
13230      IS
13231      SELECT rowidtochar(rowid)
13232            ,budget_line_id
13233      FROM   pa_budget_lines
13234      WHERE  resource_assignment_id = p_resource_assigment_id
13235      AND    trunc(start_date) = nvl(trunc(p_budget_start_date),trunc(start_date))
13236      AND    txn_currency_code = nvl(p_currency_code,txn_currency_code);
13237 
13238      --needed to lock the budget line row
13239      CURSOR l_lock_budget_line_csr( p_budget_line_rowid VARCHAR2)
13240      IS
13241      SELECT 'x'
13242      FROM   pa_budget_lines
13243      WHERE  rowid = p_budget_line_rowid
13244      FOR UPDATE NOWAIT;
13245 
13246      l_api_name          CONSTANT VARCHAR2(30)        := 'update_budget_line';
13247 
13248      l_resource_assignment_id     NUMBER;
13249      l_budget_line_id             NUMBER;
13250      l_budget_line_rowid          VARCHAR(20);
13251 
13252      l_err_code                   NUMBER;
13253      l_err_stage                  VARCHAR2(120);
13254      l_err_stack                  VARCHAR2(630);
13255 
13256      l_project_id                 NUMBER := p_pa_project_id;
13257      l_budget_type_code           pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
13258      l_fin_plan_type_id           NUMBER := p_fin_plan_type_id;
13259      l_fin_plan_type_name         pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
13260      l_version_type               pa_budget_versions.version_type%TYPE := p_version_type;
13261      l_budget_version_id          NUMBER;
13262      l_budget_entry_method_code   pa_budget_entry_methods.budget_entry_method_code%TYPE;
13263      l_resource_list_id           NUMBER;
13264      l_budget_amount_code         pa_budget_types.budget_amount_code%type;
13265      l_entry_level_code           pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
13266      l_time_phased_code           pa_proj_fp_options.cost_time_phased_code%TYPE;
13267      l_multi_curr_flag            pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
13268      l_categorization_code        pa_budget_entry_methods.categorization_code%TYPE;
13269      l_record_version_number      pa_budget_versions.record_version_number%TYPE;
13270 
13271      l_budget_lines_in            budget_line_in_tbl_type;
13272      l_budget_lines_out_tbl       budget_line_out_tbl_type;
13273      l_mfc_cost_type_id_tbl       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13274      l_etc_method_code_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
13275      l_spread_curve_id_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13276 
13277      l_finplan_lines_tab          pa_fin_plan_pvt.budget_lines_tab;
13278      l_version_info_rec           pa_fp_gen_amount_utils.fp_cols;
13279 
13280      --Following parameters are needed for amounts check
13281      l_amount_set_id              NUMBER;
13282      lx_raw_cost_flag             VARCHAR2(1) := NULL;
13283      lx_burdened_cost_flag        VARCHAR2(1) := NULL;
13284      lx_revenue_flag              VARCHAR2(1) := NULL;
13285      lx_cost_qty_flag             VARCHAR2(1) := NULL;
13286      lx_revenue_qty_flag          VARCHAR2(1) := NULL;
13287      lx_all_qty_flag              VARCHAR2(1) := NULL;
13288      l_bill_rate_flag             pa_fin_plan_amount_sets.bill_rate_flag%type;
13289      l_cost_rate_flag             pa_fin_plan_amount_sets.cost_rate_flag%type;
13290      l_burden_rate_flag           pa_fin_plan_amount_sets.burden_rate_flag%type;
13291      l_allow_qty_flag             VARCHAR2(1);
13292 
13293      l_msg_count                  NUMBER := 0;
13294      l_msg_data                   VARCHAR2(2000);
13295      l_function_allowed           VARCHAR2(1);
13296      l_module_name                VARCHAR2(80);
13297      l_data                       VARCHAR2(2000);
13298      l_msg_index_out              NUMBER;
13299 
13300      l_amg_project_number        pa_projects_all.segment1%TYPE;
13301      l_amg_task_number            VARCHAR2(50);
13302 
13303      --debug variables
13304      l_debug_mode                 VARCHAR2(1);
13305      l_debug_level2      CONSTANT NUMBER := 2;
13306      l_debug_level3      CONSTANT NUMBER := 3;
13307      l_debug_level4      CONSTANT NUMBER := 4;
13308      l_debug_level5      CONSTANT NUMBER := 5;
13309      --Added for bug 6408139 to pass G_PA_MISS_CHAR
13310      l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
13311 
13312 	  l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
13313 	  lc_cbs_element_id NUMBER :=p_cbs_element_id;
13314 
13315 
13316 BEGIN
13317 
13318 
13319      --Standard begin of API savepoint
13320      SAVEPOINT update_budget_line_pub;
13321 
13322      p_msg_count := 0;
13323      p_return_status := FND_API.G_RET_STS_SUCCESS;
13324      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
13325      l_module_name := g_module_name || ':Update_Budget_Line ';
13326 
13327      IF ( l_debug_mode = 'Y' )
13328      THEN
13329            pa_debug.set_curr_function( p_function   => l_api_name
13330                                       ,p_debug_mode => l_debug_mode );
13331      END IF;
13332 
13333      IF ( l_debug_mode = 'Y' )
13334      THEN
13335            pa_debug.g_err_stage:='Entering ' || l_api_name;
13336            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
13337      END IF;
13338 
13339      --Initialize the message table if requested.
13340      IF FND_API.TO_BOOLEAN( p_init_msg_list )
13341      THEN
13342           FND_MSG_PUB.initialize;
13343      END IF;
13344 
13345      --Set API return status to success
13346      p_return_status     := FND_API.G_RET_STS_SUCCESS;
13347 
13348      --Call PA_BUDGET_PVT.validate_header_info to do the necessary
13349      --header level validations
13350      PA_BUDGET_PVT.validate_header_info
13351           ( p_api_version_number          => p_api_version_number
13352            ,p_api_name                    => l_api_name
13353            ,p_init_msg_list               => p_init_msg_list
13354            ,px_pa_project_id              => l_project_id
13355            ,p_pm_project_reference        => p_pm_project_reference
13356            ,p_pm_product_code             => p_pm_product_code
13357            ,px_budget_type_code           => l_budget_type_code
13358            ,px_fin_plan_type_id           => l_fin_plan_type_id
13359            ,px_fin_plan_type_name         => l_fin_plan_type_name
13360            ,px_version_type               => l_version_type
13361            ,p_budget_version_number       => p_version_number
13362            ,p_change_reason_code          => NULL
13363            ,p_function_name               => 'PA_PM_UPDATE_BUDGET_LINE'
13364            ,x_budget_entry_method_code    => l_budget_entry_method_code
13365            ,x_resource_list_id            => l_resource_list_id
13366            ,x_budget_version_id           => l_budget_version_id
13367            ,x_fin_plan_level_code         => l_entry_level_code
13368            ,x_time_phased_code            => l_time_phased_code
13369            ,x_plan_in_multi_curr_flag     => l_multi_curr_flag
13370            ,x_budget_amount_code          => l_budget_amount_code
13371            ,x_categorization_code         => l_categorization_code
13372            ,x_project_number              => l_amg_project_number
13373            /* Plan Amount Entry flags introduced by bug 6408139 */
13374            /*Passing all as G_PA_MISS_CHAR since validations not required*/
13375            ,px_raw_cost_flag         =>   l_pa_miss_char
13376            ,px_burdened_cost_flag    =>   l_pa_miss_char
13377            ,px_revenue_flag          =>   l_pa_miss_char
13378            ,px_cost_qty_flag         =>   l_pa_miss_char
13379            ,px_revenue_qty_flag      =>   l_pa_miss_char
13380            ,px_all_qty_flag          =>   l_pa_miss_char
13381            ,px_bill_rate_flag        =>   l_pa_miss_char
13382            ,px_cost_rate_flag        =>   l_pa_miss_char
13383            ,px_burden_rate_flag      =>   l_pa_miss_char
13384            /* Plan Amount Entry flags introduced by bug 6408139 */
13385            ,x_msg_count                   => p_msg_count
13386            ,x_msg_data                    => p_msg_data
13387            ,x_return_status               => p_return_status );
13388 
13389      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13390            IF(l_debug_mode='Y') THEN
13391                  pa_debug.g_err_stage := 'validate header info API falied';
13392                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13393            END IF;
13394            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13395      END IF;
13396 
13397      --Store the budget line data in budget line table
13398 
13399 	  	  	  --Get the CBS flag 16604257
13400 	   l_cbs_enabled_project := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => l_project_id);
13401 
13402 
13403      IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13404           l_budget_lines_in(1).pa_task_id := NULL;
13405      ELSE
13406           l_budget_lines_in(1).pa_task_id := p_pa_task_id;
13407      END IF;
13408 
13409      IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13410           l_budget_lines_in(1).pm_task_reference := NULL;
13411      ELSE
13412           l_budget_lines_in(1).pm_task_reference := p_pm_task_reference;
13413      END IF;
13414 
13415      IF p_resource_alias = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13416           l_budget_lines_in(1).resource_alias := NULL;
13417      ELSE
13418           l_budget_lines_in(1).resource_alias := p_resource_alias;
13419      END IF;
13420 
13421      IF p_resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13422           l_budget_lines_in(1).resource_list_member_id := NULL;
13423      ELSE
13424           l_budget_lines_in(1).resource_list_member_id := p_resource_list_member_id;
13425      END IF;
13426 
13427 	    --Bug 16604257 : CBS RBS Phase 2 API changes
13428 
13429      IF p_cost_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13430           l_budget_lines_in(1).cost_code := NULL;
13431      ELSE
13432           l_budget_lines_in(1).cost_code := p_cost_code;
13433      END IF;
13434 
13435      IF p_cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13436           l_budget_lines_in(1).cbs_element_id := NULL;
13437      ELSE
13438           l_budget_lines_in(1).cbs_element_id := p_cbs_element_id;
13439      END IF;
13440 
13441      IF p_budget_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13442           l_budget_lines_in(1).budget_start_date := NULL;
13443      ELSE
13444           l_budget_lines_in(1).budget_start_date := p_budget_start_date;
13445      END IF;
13446 
13447      IF p_budget_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13448           l_budget_lines_in(1).budget_end_date := NULL;
13449      ELSE
13450           l_budget_lines_in(1).budget_end_date := p_budget_end_date;
13451      END IF;
13452 
13453      IF p_period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13454           l_budget_lines_in(1).period_name := NULL;
13455      ELSE
13456           l_budget_lines_in(1).period_name := p_period_name;
13457      END IF;
13458 
13459      IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13460           l_budget_lines_in(1).description := NULL;
13461      ELSE
13462           l_budget_lines_in(1).description := p_description;
13463      END IF;
13464 
13465      IF p_raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13466           l_budget_lines_in(1).raw_cost := NULL;
13467      ELSE
13468           l_budget_lines_in(1).raw_cost := p_raw_cost;
13469      END IF;
13470 
13471      IF p_burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13472           l_budget_lines_in(1).burdened_cost := NULL;
13473      ELSE
13474           l_budget_lines_in(1).burdened_cost := p_burdened_cost;
13475      END IF;
13476 
13477      IF p_revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13478           l_budget_lines_in(1).revenue := NULL;
13479      ELSE
13480           l_budget_lines_in(1).revenue := p_revenue;
13481      END IF;
13482 
13483      IF p_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13484           l_budget_lines_in(1).quantity := NULL;
13485      ELSE
13486           l_budget_lines_in(1).quantity := p_quantity;
13487      END IF;
13488 
13489      IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13490           l_budget_lines_in(1).pm_product_code := NULL;
13491      ELSE
13492           l_budget_lines_in(1).pm_product_code := p_pm_product_code;
13493      END IF;
13494 
13495      IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13496           l_budget_lines_in(1).attribute_category := NULL;
13497      ELSE
13498           l_budget_lines_in(1).attribute_category := p_attribute_category;
13499      END IF;
13500 
13501      IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13502           l_budget_lines_in(1).attribute1 := NULL;
13503      ELSE
13504           l_budget_lines_in(1).attribute1 := p_attribute1;
13505      END IF;
13506 
13507      IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13508           l_budget_lines_in(1).attribute2 := NULL;
13509      ELSE
13510           l_budget_lines_in(1).attribute2 := p_attribute2;
13511      END IF;
13512 
13513      IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13514           l_budget_lines_in(1).attribute3 := NULL;
13515      ELSE
13516           l_budget_lines_in(1).attribute3 := p_attribute3;
13517      END IF;
13518 
13519      IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13520           l_budget_lines_in(1).attribute4 := NULL;
13521      ELSE
13522           l_budget_lines_in(1).attribute4 := p_attribute4;
13523      END IF;
13524 
13525      IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13526           l_budget_lines_in(1).attribute5 := NULL;
13527      ELSE
13528           l_budget_lines_in(1).attribute5 := p_attribute5;
13529      END IF;
13530 
13531      IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13532           l_budget_lines_in(1).attribute6 := NULL;
13533      ELSE
13534           l_budget_lines_in(1).attribute6 := p_attribute6;
13535      END IF;
13536 
13537      IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13538           l_budget_lines_in(1).attribute7 := NULL;
13539      ELSE
13540           l_budget_lines_in(1).attribute7 := p_attribute7;
13541      END IF;
13542 
13543      IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13544           l_budget_lines_in(1).attribute8 := NULL;
13545      ELSE
13546           l_budget_lines_in(1).attribute8 := p_attribute8;
13547      END IF;
13548 
13549      IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13550           l_budget_lines_in(1).attribute9 := NULL;
13551      ELSE
13552           l_budget_lines_in(1).attribute9 := p_attribute9;
13553      END IF;
13554 
13555      IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13556           l_budget_lines_in(1).attribute10 := NULL;
13557      ELSE
13558           l_budget_lines_in(1).attribute10 := p_attribute10;
13559      END IF;
13560 
13561      IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13562           l_budget_lines_in(1).attribute11 := NULL;
13563      ELSE
13564           l_budget_lines_in(1).attribute11 := p_attribute11;
13565      END IF;
13566 
13567      IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13568           l_budget_lines_in(1).attribute12 := NULL;
13569      ELSE
13570           l_budget_lines_in(1).attribute12 := p_attribute12;
13571      END IF;
13572 
13573      IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13574           l_budget_lines_in(1).attribute13 := NULL;
13575      ELSE
13576           l_budget_lines_in(1).attribute13 := p_attribute13;
13577      END IF;
13578 
13579      IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13580           l_budget_lines_in(1).attribute14 := NULL;
13581      ELSE
13582           l_budget_lines_in(1).attribute14 := p_attribute14;
13583      END IF;
13584 
13585      IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13586           l_budget_lines_in(1).attribute15 := NULL;
13587      ELSE
13588           l_budget_lines_in(1).attribute15 := p_attribute15;
13589      END IF;
13590 
13591      IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13592           l_budget_lines_in(1).txn_currency_code := NULL;
13593      ELSE
13594           l_budget_lines_in(1).txn_currency_code := p_currency_code;
13595      END IF;
13596 
13597      IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13598           l_budget_lines_in(1).projfunc_cost_rate_type := NULL;
13599      ELSE
13600           l_budget_lines_in(1).projfunc_cost_rate_type := p_projfunc_cost_rate_type;
13601      END IF;
13602 
13603      IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13604           l_budget_lines_in(1).projfunc_cost_rate_date_type := NULL;
13605      ELSE
13606           l_budget_lines_in(1).projfunc_cost_rate_date_type := p_projfunc_cost_rate_date_typ;
13607      END IF;
13608 
13609      IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13610           l_budget_lines_in(1).projfunc_cost_rate_date := NULL;
13611      ELSE
13612           l_budget_lines_in(1).projfunc_cost_rate_date := p_projfunc_cost_rate_date;
13613      END IF;
13614 
13615      IF p_projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13616           l_budget_lines_in(1).projfunc_cost_exchange_rate := NULL;
13617      ELSE
13618           l_budget_lines_in(1).projfunc_cost_exchange_rate := p_projfunc_cost_exchange_rate;
13619      END IF;
13620 
13621      IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13622           l_budget_lines_in(1).projfunc_rev_rate_type := NULL;
13623      ELSE
13624           l_budget_lines_in(1).projfunc_rev_rate_type := p_projfunc_rev_rate_type;
13625      END IF;
13626 
13627      IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13628           l_budget_lines_in(1).projfunc_rev_rate_date_type := NULL;
13629      ELSE
13630           l_budget_lines_in(1).projfunc_rev_rate_date_type := p_projfunc_rev_rate_date_typ;
13631      END IF;
13632 
13633      IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13634           l_budget_lines_in(1).projfunc_rev_rate_date := NULL;
13635      ELSE
13636           l_budget_lines_in(1).projfunc_rev_rate_date := p_projfunc_rev_rate_date;
13637      END IF;
13638 
13639      IF p_projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13640           l_budget_lines_in(1).projfunc_rev_exchange_rate := NULL;
13641      ELSE
13642           l_budget_lines_in(1).projfunc_rev_exchange_rate := p_projfunc_rev_exchange_rate;
13643      END IF;
13644 
13645      IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13646           l_budget_lines_in(1).project_cost_rate_type := NULL;
13647      ELSE
13648           l_budget_lines_in(1).project_cost_rate_type := p_project_cost_rate_type;
13649      END IF;
13650 
13651      IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13652           l_budget_lines_in(1).project_cost_rate_date_type := NULL;
13653      ELSE
13654           l_budget_lines_in(1).project_cost_rate_date_type := p_project_cost_rate_date_typ;
13655      END IF;
13656 
13657      IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13658           l_budget_lines_in(1).project_cost_rate_date := NULL;
13659      ELSE
13660           l_budget_lines_in(1).project_cost_rate_date := p_project_cost_rate_date;
13661      END IF;
13662 
13663      IF p_project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13664           l_budget_lines_in(1).project_cost_exchange_rate := NULL;
13665      ELSE
13666           l_budget_lines_in(1).project_cost_exchange_rate := p_project_cost_exchange_rate;
13667      END IF;
13668 
13669      IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13670           l_budget_lines_in(1).project_rev_rate_type := NULL;
13671      ELSE
13672           l_budget_lines_in(1).project_rev_rate_type := p_project_rev_rate_type;
13673      END IF;
13674 
13675      IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13676           l_budget_lines_in(1).project_rev_rate_date_type := NULL;
13677      ELSE
13678           l_budget_lines_in(1).project_rev_rate_date_type := p_project_rev_rate_date_typ;
13679      END IF;
13680 
13681      IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13682           l_budget_lines_in(1).project_rev_rate_date := NULL;
13683      ELSE
13684           l_budget_lines_in(1).project_rev_rate_date := p_project_rev_rate_date;
13685      END IF;
13686 
13687      IF p_project_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13688           l_budget_lines_in(1).project_rev_exchange_rate := NULL;
13689      ELSE
13690           l_budget_lines_in(1).project_rev_exchange_rate := p_project_rev_exchange_rate;
13691      END IF;
13692 
13693      IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13694           l_budget_lines_in(1).change_reason_code := NULL;
13695      ELSE
13696           l_budget_lines_in(1).change_reason_code := p_change_reason_code;
13697      END IF;
13698 
13699      --Send the budget version id to validate_budget_lines API for
13700      --actuals on FORECAST check
13701      l_version_info_rec.x_budget_version_id := l_budget_version_id;
13702 
13703      --Get entry method options and validate them against cost, rev and quantity passed
13704      IF l_budget_type_code IS NULL AND l_fin_plan_type_id IS NOT NULL
13705      THEN
13706 
13707           l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
13708 
13709           PA_FIN_PLAN_UTILS.get_plan_amount_flags(
13710                          P_AMOUNT_SET_ID      => l_amount_set_id
13711                         ,X_RAW_COST_FLAG      => lx_raw_cost_flag
13712                         ,X_BURDENED_FLAG      => lx_burdened_cost_flag
13713                         ,X_REVENUE_FLAG       => lx_revenue_flag
13714                         ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
13715                         ,X_REV_QUANTITY_FLAG  => lx_revenue_qty_flag
13716                         ,X_ALL_QUANTITY_FLAG  => lx_all_qty_flag
13717                         ,X_BILL_RATE_FLAG     => l_bill_rate_flag
13718                         ,X_COST_RATE_FLAG     => l_cost_rate_flag
13719                         ,X_BURDEN_RATE_FLAG   => l_burden_rate_flag
13720                         ,x_message_count      => p_msg_count
13721                         ,x_return_status      => p_return_status
13722                         ,x_message_data       => p_msg_data) ;
13723 
13724           IF p_return_status <> FND_API.G_RET_STS_SUCCESS
13725           THEN
13726                IF(l_debug_mode='Y') THEN
13727                     pa_debug.g_err_stage := 'get_plan_amount_flags API falied';
13728                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13729                END IF;
13730                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13731           END IF;
13732 
13733           --Derive the value of all_qty_flag based on version_type
13734           IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
13735                l_allow_qty_flag := lx_cost_qty_flag;
13736           ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
13737                l_allow_qty_flag := lx_revenue_qty_flag;
13738           ELSE
13739                l_allow_qty_flag :=  lx_all_qty_flag;
13740           END IF;
13741 
13742      END IF;--IF l_budget_type_code IS NULL AND l_fin_plan_type_id IS NOT NULL
13743 
13744 
13745      --Validate the budget line data
13746      PA_BUDGET_PVT.Validate_Budget_Lines
13747           ( p_calling_context             => 'BUDGET_LINE_LEVEL_VALIDATION'
13748            ,p_pa_project_id               => l_project_id
13749            ,p_budget_type_code            => l_budget_type_code
13750            ,p_fin_plan_type_id            => l_fin_plan_type_id
13751            ,p_version_type                => l_version_type
13752            ,p_resource_list_id            => l_resource_list_id
13753            ,p_time_phased_code            => l_time_phased_code
13754            ,p_budget_entry_method_code    => l_budget_entry_method_code
13755            ,p_entry_level_code            => l_entry_level_code
13756            ,p_allow_qty_flag              => l_allow_qty_flag
13757            ,p_allow_raw_cost_flag         => lx_raw_cost_flag
13758            ,p_allow_burdened_cost_flag    => lx_burdened_cost_flag
13759            ,p_allow_revenue_flag          => lx_revenue_flag
13760            ,p_multi_currency_flag         => l_multi_curr_flag
13761            ,p_project_cost_rate_type      => NULL
13762            ,p_project_cost_rate_date_typ  => NULL
13763            ,p_project_cost_rate_date      => NULL
13764            ,p_project_cost_exchange_rate  => NULL
13765            ,p_projfunc_cost_rate_type     => NULL
13766            ,p_projfunc_cost_rate_date_typ => NULL
13767            ,p_projfunc_cost_rate_date     => NULL
13768            ,p_projfunc_cost_exchange_rate => NULL
13769            ,p_project_rev_rate_type       => NULL
13770            ,p_project_rev_rate_date_typ   => NULL
13771            ,p_project_rev_rate_date       => NULL
13772            ,p_project_rev_exchange_rate   => NULL
13773            ,p_projfunc_rev_rate_type      => NULL
13774            ,p_projfunc_rev_rate_date_typ  => NULL
13775            ,p_projfunc_rev_rate_date      => NULL
13776            ,p_projfunc_rev_exchange_rate  => NULL
13777            ,p_version_info_rec            => l_version_info_rec
13778            ,px_budget_lines_in            => l_budget_lines_in
13779            ,x_budget_lines_out            => l_budget_lines_out_tbl
13780            ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
13781            ,x_etc_method_code_tbl         => l_etc_method_code_tbl
13782            ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
13783            ,x_msg_count                   => p_msg_count
13784            ,x_msg_data                    => p_msg_data
13785            ,x_return_status               => p_return_status );
13786 
13787      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13788            IF(l_debug_mode='Y') THEN
13789                  pa_debug.g_err_stage := 'validate budget lines API falied';
13790                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13791            END IF;
13792            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13793      END IF;
13794 
13795      --Get Task number for AMG Messages
13796      l_amg_task_number := PA_INTERFACE_UTILS_PUB.get_task_number_amg
13797      (p_task_number=> ''
13798      ,p_task_reference => l_budget_lines_in(1).pm_task_reference
13799      ,p_task_id => l_budget_lines_in(1).pa_task_id);
13800 
13801 
13802      --Check the existence of resource assignment
13803      OPEN l_resource_assignment_csr( l_budget_version_id
13804                                     ,l_budget_lines_in(1).pa_task_id
13805                                     ,l_budget_lines_in(1).resource_list_member_id
13806 									,l_budget_lines_in(1).cbs_element_id);
13807 
13808      FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
13809 
13810      IF l_resource_assignment_csr%NOTFOUND
13811      THEN
13812           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13813           THEN
13814                pa_interface_utils_pub.map_new_amg_msg
13815                ( p_old_message_code => 'PA_NO_RESOURCE_ASSIGNMENT'
13816                 ,p_msg_attribute    => 'CHANGE'
13817                 ,p_resize_flag      => 'N'
13818                 ,p_msg_context      => 'BUDG'
13819                 ,p_attribute1       => l_amg_project_number
13820                 ,p_attribute2       => l_amg_task_number
13821                 ,p_attribute3       => l_budget_type_code
13822                 ,p_attribute4       => l_budget_lines_in(1).resource_alias
13823                 ,p_attribute5       => to_char(l_budget_lines_in(1).budget_start_date));
13824           END IF;
13825 
13826           CLOSE l_resource_assignment_csr;
13827           RAISE FND_API.G_EXC_ERROR;
13828      END IF; --l_resource_assignment_csr%NOTFOUND
13829 
13830      CLOSE l_resource_assignment_csr;
13831 
13832      --Currency_code value, even if specified, should be ignored in
13833      --case of old Budgets Model
13834      IF l_budget_type_code IS NOT NULL
13835      THEN
13836           l_budget_lines_in(1).txn_currency_code := NULL;
13837      END IF;
13838 
13839      --Checking existence of budget line
13840      OPEN l_budget_line_csr( l_resource_assignment_id
13841                             ,l_budget_lines_in(1).budget_start_date
13842                             ,l_budget_lines_in(1).txn_currency_code);
13843 
13844      FETCH l_budget_line_csr INTO l_budget_line_rowid
13845                                  ,l_budget_line_id;
13846 
13847      IF l_budget_line_csr%NOTFOUND
13848      THEN
13849           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13850           THEN
13851                pa_interface_utils_pub.map_new_amg_msg
13852                ( p_old_message_code => 'PA_BUDGET_LINE_NOT_FOUND'
13853                 ,p_msg_attribute    => 'CHANGE'
13854                 ,p_resize_flag      => 'N'
13855                 ,p_msg_context      => 'BUDG'
13856                 ,p_attribute1       => l_amg_project_number
13857                 ,p_attribute2       => l_amg_task_number
13858                 ,p_attribute3       => l_budget_type_code
13859                 ,p_attribute4       => l_budget_lines_in(1).resource_alias
13860                 ,p_attribute5       => to_char(l_budget_lines_in(1).budget_start_date));
13861           END IF;
13862 
13863      CLOSE l_budget_line_csr;
13864      RAISE FND_API.G_EXC_ERROR;
13865      END IF;--l_budget_line_csr%NOTFOUND
13866 
13867      CLOSE l_budget_line_csr;
13868 
13869 
13870      --Update budget line for old FORMS based Budgets Model
13871      IF l_budget_type_code IS NOT NULL
13872      THEN
13873 
13874           --Take a db lock on the table pa_budget_lines
13875           OPEN l_lock_budget_line_csr( l_budget_line_rowid );
13876           CLOSE l_lock_budget_line_csr;  --FYI, does not release lock
13877 
13878           --Calling update_budget_line_sql to build a dynamic update statement
13879           pa_budget_pvt.update_budget_line_sql
13880                ( p_return_status            => p_return_status
13881                 ,p_budget_entry_method_code => l_budget_entry_method_code
13882                 ,p_resource_assignment_id   => l_resource_assignment_id
13883                 ,p_start_date               => l_budget_lines_in(1).budget_start_date
13884                 ,p_time_phased_type_code    => l_time_phased_code
13885                 ,p_description              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_description)
13886                 ,p_quantity                 => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_quantity)
13887                 ,p_raw_cost                 => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_raw_cost)
13888                 ,p_burdened_cost            => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_burdened_cost)
13889                 ,p_revenue                  => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_revenue)
13890                 ,p_change_reason_code       => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_change_reason_code)
13891                 ,p_attribute_category       => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute_category)
13892                 ,p_attribute1               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute1)
13893                 ,p_attribute2               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute2)
13894                 ,p_attribute3               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute3)
13895                 ,p_attribute4               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute4)
13896                 ,p_attribute5               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute5)
13897                 ,p_attribute6               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute6)
13898                 ,p_attribute7               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute7)
13899                 ,p_attribute8               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute8)
13900                 ,p_attribute9               => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute9)
13901                 ,p_attribute10              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute10)
13902                 ,p_attribute11              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute11)
13903                 ,p_attribute12              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute12)
13904                 ,p_attribute13              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute13)
13905                 ,p_attribute14              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute14)
13906                 ,p_attribute15              => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute15)
13907                );
13908 
13909           IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
13910           THEN
13911                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
13912           ELSIF p_return_status = FND_API.G_RET_STS_ERROR
13913           THEN
13914                RAISE  FND_API.G_EXC_ERROR;
13915           END IF;
13916 
13917           --summarizing the totals in the table pa_budget_versions
13918           PA_BUDGET_UTILS.summerize_project_totals
13919                          (x_budget_version_id => l_budget_version_id
13920                          ,x_err_code          => l_err_code
13921                          ,x_err_stage         => l_err_stage
13922                          ,x_err_stack         => l_err_stack );
13923 
13924           IF l_err_code > 0
13925           THEN
13926                IF(l_debug_mode='Y') THEN
13927                     pa_debug.g_err_stage := 'summerize_project_totals API falied';
13928                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13929                END IF;
13930 
13931                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13932                THEN
13933                     IF NOT pa_project_pvt.check_valid_message(l_err_stage)
13934                     THEN
13935                          pa_interface_utils_pub.map_new_amg_msg
13936                          ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
13937                           ,p_msg_attribute    => 'CHANGE'
13938                           ,p_resize_flag      => 'N'
13939                           ,p_msg_context      => 'BUDG'
13940                           ,p_attribute1       => l_amg_project_number
13941                           ,p_attribute2       => l_amg_task_number
13942                           ,p_attribute3       => l_budget_type_code
13943                           ,p_attribute4       => l_budget_lines_in(1).resource_alias
13944                           ,p_attribute5       => to_char(l_budget_lines_in(1).budget_start_date));
13945                     ELSE
13946                          pa_interface_utils_pub.map_new_amg_msg
13947                          ( p_old_message_code => l_err_stage
13948                           ,p_msg_attribute    => 'CHANGE'
13949                           ,p_resize_flag      => 'N'
13950                           ,p_msg_context      => 'BUDG'
13951                           ,p_attribute1       => l_amg_project_number
13952                           ,p_attribute2       => l_amg_task_number
13953                           ,p_attribute3       => l_budget_type_code
13954                           ,p_attribute4       => l_budget_lines_in(1).resource_alias
13955                           ,p_attribute5       => to_char(l_budget_lines_in(1).budget_start_date));
13956                     END IF;
13957                END IF;--FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13958 
13959                RAISE FND_API.G_EXC_ERROR;
13960 
13961           ELSIF l_err_code < 0
13962           THEN
13963 
13964                IF(l_debug_mode='Y') THEN
13965                     pa_debug.g_err_stage := 'summerize_project_totals API falied';
13966                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13967                END IF;
13968 
13969                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
13970                THEN
13971                     FND_MSG_PUB.add_exc_msg
13972                     (  p_pkg_name       => 'PA_BUDGET_UTILS'
13973                     ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
13974                     ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
13975                END IF;
13976 
13977                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13978 
13979           END IF;--l_err_code > 0
13980 
13981 
13982      ELSE --insert budget line for new FinPlan model
13983 
13984 
13985           --Copy the fin plan line data into a table of type pa_fp_rollup_tmp
13986           --If an attribute should not be updated then pass it as null, and
13987           --if an attribute should be updated to null then pass it as FND_API.G_MISS_XXX
13988 
13989           l_finplan_lines_tab(1).system_reference1            := l_budget_lines_in(1).pa_task_id;
13990           l_finplan_lines_tab(1).system_reference2            := l_budget_lines_in(1).resource_list_member_id;
13991 		  l_finplan_lines_tab(1).system_reference3 			  :=  l_budget_lines_in(1).cbs_element_id;-- Added for CBS 16604257
13992           l_finplan_lines_tab(1).start_date                   := l_budget_lines_in(1).budget_start_date;
13993           l_finplan_lines_tab(1).end_date                     := l_budget_lines_in(1).budget_end_date;
13994           l_finplan_lines_tab(1).period_name                  := l_budget_lines_in(1).period_name;
13995           l_finplan_lines_tab(1).txn_currency_code            := l_budget_lines_in(1).txn_currency_code;
13996           l_finplan_lines_tab(1).txn_raw_cost                 := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_raw_cost);
13997           l_finplan_lines_tab(1).txn_burdened_cost            := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_burdened_cost);
13998           l_finplan_lines_tab(1).txn_revenue                  := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_revenue);
13999           l_finplan_lines_tab(1).quantity                     := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_quantity);
14000           l_finplan_lines_tab(1).change_reason_code           := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_change_reason_code);
14001           l_finplan_lines_tab(1).description                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_description);
14002           l_finplan_lines_tab(1).attribute_category           := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute_category);
14003           l_finplan_lines_tab(1).attribute1                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute1);
14004           l_finplan_lines_tab(1).attribute2                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute2);
14005           l_finplan_lines_tab(1).attribute3                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute3);
14006           l_finplan_lines_tab(1).attribute4                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute4);
14007           l_finplan_lines_tab(1).attribute5                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute5);
14008           l_finplan_lines_tab(1).attribute6                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute6);
14009           l_finplan_lines_tab(1).attribute7                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute7);
14010           l_finplan_lines_tab(1).attribute8                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute8);
14011           l_finplan_lines_tab(1).attribute9                   := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute9);
14012           l_finplan_lines_tab(1).attribute10                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute10);
14013           l_finplan_lines_tab(1).attribute11                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute11);
14014           l_finplan_lines_tab(1).attribute12                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute12);
14015           l_finplan_lines_tab(1).attribute13                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute13);
14016           l_finplan_lines_tab(1).attribute14                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute14);
14017           l_finplan_lines_tab(1).attribute15                  := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute15);
14018 
14019           IF (p_projfunc_cost_rate_type     = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14020           AND p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14021           AND p_projfunc_cost_rate_date     = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14022           AND p_projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14023           AND p_projfunc_rev_rate_type      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14024           AND p_projfunc_rev_rate_date_typ  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14025           AND p_projfunc_rev_rate_date      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14026           AND p_projfunc_rev_exchange_rate  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14027           AND p_project_cost_rate_type      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14028           AND p_project_cost_rate_date_typ  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14029           AND p_project_cost_rate_date      = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14030           AND p_project_cost_exchange_rate  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14031           AND p_project_rev_rate_type       = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14032           AND p_project_rev_rate_date_typ   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14033           AND p_project_rev_rate_date       = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14034           AND p_project_rev_exchange_rate   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
14035           THEN
14036                l_finplan_lines_tab(1).projfunc_cost_rate_type      := to_char(NULL);
14037                l_finplan_lines_tab(1).projfunc_cost_rate_date_type := to_char(NULL);
14038                l_finplan_lines_tab(1).projfunc_cost_rate_date      := to_date(NULL);
14039                l_finplan_lines_tab(1).projfunc_cost_exchange_rate  := to_number(NULL);
14040                l_finplan_lines_tab(1).projfunc_rev_rate_type       := to_char(NULL);
14041                l_finplan_lines_tab(1).projfunc_rev_rate_date_type  := to_char(NULL);
14042                l_finplan_lines_tab(1).projfunc_rev_rate_date       := to_date(NULL);
14043                l_finplan_lines_tab(1).projfunc_rev_exchange_rate   := to_number(NULL);
14044                l_finplan_lines_tab(1).project_cost_rate_type       := to_char(NULL);
14045                l_finplan_lines_tab(1).project_cost_rate_date_type  := to_char(NULL);
14046                l_finplan_lines_tab(1).project_cost_rate_date       := to_date(NULL);
14047                l_finplan_lines_tab(1).project_cost_exchange_rate   := to_number(NULL);
14048                l_finplan_lines_tab(1).project_rev_rate_type        := to_char(NULL);
14049                l_finplan_lines_tab(1).project_rev_rate_date_type   := to_char(NULL);
14050                l_finplan_lines_tab(1).project_rev_rate_date        := to_date(NULL);
14051                l_finplan_lines_tab(1).project_rev_exchange_rate    := to_number(NULL);
14052           ELSE
14053                l_finplan_lines_tab(1).projfunc_cost_rate_type      := nvl(l_budget_lines_in(1).projfunc_cost_rate_type,FND_API.G_MISS_CHAR);
14054                l_finplan_lines_tab(1).projfunc_cost_rate_date_type := nvl(l_budget_lines_in(1).projfunc_cost_rate_date_type,FND_API.G_MISS_CHAR);
14055                l_finplan_lines_tab(1).projfunc_cost_rate_date      := nvl(l_budget_lines_in(1).projfunc_cost_rate_date,FND_API.G_MISS_DATE);
14056                l_finplan_lines_tab(1).projfunc_cost_exchange_rate  := nvl(l_budget_lines_in(1).projfunc_cost_exchange_rate,FND_API.G_MISS_NUM);
14057                l_finplan_lines_tab(1).projfunc_rev_rate_type       := nvl(l_budget_lines_in(1).projfunc_rev_rate_type,FND_API.G_MISS_CHAR);
14058                l_finplan_lines_tab(1).projfunc_rev_rate_date_type  := nvl(l_budget_lines_in(1).projfunc_rev_rate_date_type,FND_API.G_MISS_CHAR);
14059                l_finplan_lines_tab(1).projfunc_rev_rate_date       := nvl(l_budget_lines_in(1).projfunc_rev_rate_date,FND_API.G_MISS_DATE);
14060                l_finplan_lines_tab(1).projfunc_rev_exchange_rate   := nvl(l_budget_lines_in(1).projfunc_rev_exchange_rate,FND_API.G_MISS_NUM);
14061                l_finplan_lines_tab(1).project_cost_rate_type       := nvl(l_budget_lines_in(1).project_cost_rate_type,FND_API.G_MISS_CHAR);
14062                l_finplan_lines_tab(1).project_cost_rate_date_type  := nvl(l_budget_lines_in(1).project_cost_rate_date_type,FND_API.G_MISS_CHAR);
14063                l_finplan_lines_tab(1).project_cost_rate_date       := nvl(l_budget_lines_in(1).project_cost_rate_date,FND_API.G_MISS_DATE);
14064                l_finplan_lines_tab(1).project_cost_exchange_rate   := nvl(l_budget_lines_in(1).project_cost_exchange_rate,FND_API.G_MISS_NUM);
14065                l_finplan_lines_tab(1).project_rev_rate_type        := nvl(l_budget_lines_in(1).project_rev_rate_type,FND_API.G_MISS_CHAR);
14066                l_finplan_lines_tab(1).project_rev_rate_date_type   := nvl(l_budget_lines_in(1).project_rev_rate_date_type,FND_API.G_MISS_CHAR);
14067                l_finplan_lines_tab(1).project_rev_rate_date        := nvl(l_budget_lines_in(1).project_rev_rate_date,FND_API.G_MISS_DATE);
14068                l_finplan_lines_tab(1).project_rev_exchange_rate    := nvl(l_budget_lines_in(1).project_rev_exchange_rate,FND_API.G_MISS_NUM);
14069           END IF;
14070 
14071           l_finplan_lines_tab(1).pm_product_code              := l_budget_lines_in(1).pm_product_code;
14072           l_finplan_lines_tab(1).quantity_source              := 'I';
14073           l_finplan_lines_tab(1).raw_cost_source              := 'I';
14074           l_finplan_lines_tab(1).burdened_cost_source         := 'I';
14075           l_finplan_lines_tab(1).revenue_source               := 'I';
14076           l_finplan_lines_tab(1).resource_assignment_id       := l_resource_assignment_id;
14077           l_finplan_lines_tab(1).budget_line_id               := l_budget_line_id;
14078           l_finplan_lines_tab(1).budget_version_id            := l_budget_version_id;
14079 
14080           --Lock the budget version before updating a budget line
14081           l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
14082                                      (p_budget_version_id => l_budget_version_id);
14083 
14084           PA_FIN_PLAN_PVT.lock_unlock_version
14085           ( p_budget_version_id       => l_budget_version_id
14086            ,p_record_version_number   => l_record_version_number
14087            ,p_action                  => 'L'
14088            ,p_user_id                 => FND_GLOBAL.User_id
14089            ,p_person_id               => null
14090            ,x_return_status           => p_return_status
14091            ,x_msg_count               => p_msg_count
14092            ,x_msg_data                => p_msg_data);
14093 
14094           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
14095                 -- Error message is not added here as the api lock_unlock_version
14096                 -- adds the message to stack
14097                 IF(l_debug_mode='Y') THEN
14098                       pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
14099                       pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
14100                 END IF;
14101                 RAISE  FND_API.G_EXC_ERROR;
14102           END IF;
14103 
14104           --Call PA_FIN_PLAN_PVT.add_fin_plan_lines. This api takes care of updating
14105           --budget lines data in all relevant tables.
14106           PA_FIN_PLAN_PVT.add_fin_plan_lines
14107                ( p_calling_context      => PA_FP_CONSTANTS_PKG.G_AMG_API
14108                 ,p_fin_plan_version_id  => l_budget_version_id
14109                 ,p_finplan_lines_tab    => l_finplan_lines_tab
14110                 ,x_return_status        => p_return_status
14111                 ,x_msg_count            => p_msg_count
14112                 ,x_msg_data             => p_msg_data );
14113 
14114           IF p_return_status <> FND_API.G_RET_STS_SUCCESS
14115           THEN
14116                IF(l_debug_mode='Y') THEN
14117                     pa_debug.g_err_stage := 'PA_FIN_PLAN_PVT.add_fin_plan_lines API falied';
14118                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
14119                END IF;
14120                RAISE  FND_API.G_EXC_ERROR;
14121           END IF;
14122 
14123 
14124           --unlock the budget version after updating the budget line
14125           l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
14126                                      (p_budget_version_id => l_budget_version_id);
14127 
14128           PA_FIN_PLAN_PVT.lock_unlock_version
14129           ( p_budget_version_id       => l_budget_version_id
14130            ,p_record_version_number   => l_record_version_number
14131            ,p_action                  => 'U'
14132            ,p_user_id                 => FND_GLOBAL.User_id
14133            ,p_person_id               => null
14134            ,x_return_status           => p_return_status
14135            ,x_msg_count               => p_msg_count
14136            ,x_msg_data                => p_msg_data);
14137 
14138           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
14139                 -- Error message is not added here as the api lock_unlock_version
14140                 -- adds the message to stack
14141                 IF(l_debug_mode='Y') THEN
14142                       pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
14143                       pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
14144                 END IF;
14145                 RAISE  FND_API.G_EXC_ERROR;
14146           END IF;
14147 
14148 
14149      END IF;--end of code to update budget line
14150 
14151 
14152      IF FND_API.TO_BOOLEAN( p_commit )
14153      THEN
14154           COMMIT;
14155      END IF;
14156 
14157      IF(l_debug_mode='Y') THEN
14158            pa_debug.g_err_stage := 'Exiting ' || l_api_name;
14159            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
14160      END IF;
14161 
14162      IF ( l_debug_mode = 'Y' ) THEN
14163            pa_debug.reset_curr_function;
14164      END IF;
14165 
14166 
14167 EXCEPTION
14168 
14169      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
14170      THEN
14171 
14172      ROLLBACK TO update_budget_line_pub;
14173 
14174      p_return_status := FND_API.G_RET_STS_ERROR;
14175      l_msg_count := FND_MSG_PUB.count_msg;
14176 
14177      IF l_msg_count = 1 and p_msg_data IS NULL THEN
14178            PA_INTERFACE_UTILS_PUB.get_messages
14179            (p_encoded        => FND_API.G_TRUE
14180            ,p_msg_index      => 1
14181            ,p_msg_count      => l_msg_count
14182            ,p_msg_data       => l_msg_data
14183            ,p_data           => l_data
14184            ,p_msg_index_out  => l_msg_index_out);
14185            p_msg_data  := l_data;
14186            p_msg_count := l_msg_count;
14187      ELSE
14188            p_msg_count := l_msg_count;
14189      END IF;
14190 
14191      IF ( l_debug_mode = 'Y' ) THEN
14192            pa_debug.reset_curr_function;
14193      END IF;
14194 
14195      RETURN;
14196 
14197 
14198      WHEN FND_API.G_EXC_ERROR
14199      THEN
14200 
14201      ROLLBACK TO update_budget_line_pub;
14202 
14203      p_return_status := FND_API.G_RET_STS_ERROR;
14204 
14205      FND_MSG_PUB.count_and_get
14206      (   p_count     =>  p_msg_count ,
14207          p_data      =>  p_msg_data  );
14208 
14209      IF ( l_debug_mode = 'Y' ) THEN
14210            pa_debug.reset_curr_function;
14211      END IF;
14212 
14213 
14214      WHEN FND_API.G_EXC_UNEXPECTED_ERROR
14215      THEN
14216 
14217      ROLLBACK TO update_budget_line_pub;
14218 
14219      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14220 
14221      FND_MSG_PUB.count_and_get
14222      (   p_count     =>  p_msg_count ,
14223          p_data      =>  p_msg_data  );
14224 
14225      IF ( l_debug_mode = 'Y' ) THEN
14226            pa_debug.reset_curr_function;
14227      END IF;
14228 
14229 
14230      WHEN ROW_ALREADY_LOCKED
14231      THEN
14232 
14233      ROLLBACK TO update_budget_line_pub;
14234 
14235      p_return_status := FND_API.G_RET_STS_ERROR;
14236 
14237      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14238      THEN
14239            FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
14240            FND_MESSAGE.set_token('PROJECT', l_amg_project_number);
14241            FND_MESSAGE.set_token('TASK', l_amg_task_number);
14242            FND_MESSAGE.set_token('BUDGET_TYPE', l_budget_type_code);
14243            FND_MESSAGE.set_token('SOURCE_NAME', '');
14244            FND_MESSAGE.set_token('START_DATE', '');
14245            FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_LINE_CODE');
14246            FND_MSG_PUB.add;
14247      END IF;
14248 
14249      FND_MSG_PUB.count_and_get
14250      (   p_count     =>  p_msg_count ,
14251          p_data      =>  p_msg_data  );
14252 
14253      IF ( l_debug_mode = 'Y' ) THEN
14254            pa_debug.reset_curr_function;
14255      END IF;
14256 
14257 
14258      WHEN OTHERS
14259      THEN
14260 
14261      ROLLBACK TO update_budget_line_pub;
14262 
14263      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14264 
14265      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
14266      THEN
14267         FND_MSG_PUB.add_exc_msg
14268         (  p_pkg_name       => G_PKG_NAME
14269         ,  p_procedure_name => l_api_name );
14270      END IF;
14271 
14272      FND_MSG_PUB.count_and_get
14273      (   p_count     =>  p_msg_count ,
14274          p_data      =>  p_msg_data  );
14275 
14276      IF ( l_debug_mode = 'Y' ) THEN
14277            pa_debug.reset_curr_function;
14278      END IF;
14279 
14280 END update_budget_line;
14281 
14282 
14283 ----------------------------------------------------------------------------------------
14284 --Name:             calculate_amounts
14285 --Type:             Procedure
14286 --Description:      This procedure can is used to recalculate raw cost,
14287 --                  burdened cost and revenue by budget line within
14288 --                  a given project.
14289 --
14290 --
14291 --Called subprograms: Pa_Client_Extn_Budget.Calc_Raw_Cost
14292 --                  , Pa_Client_Extn_Budget.Calc_Burdened_Cost
14293 --                  , Pa_Client_Extn_Budget.Calc_Revenue
14294 --
14295 --
14296 --
14297 --History:
14298 --    AUTUMN-1996    R. Krishnamurthy       Created
14299 --    07-DEC-1996    L. de Werker           Changed error handling
14300 --    25-MAR-2003    Rajagopal              Modified the code to make it compatible with
14301 --                                          new Budgets and forecasts model
14302 --
14303 --    27-SEP-05      jwhite                 Bug 4588279
14304 --                                          For budget_type_code Budgetary Control budgets,
14305 --                                          add validation to prevent update to
14306 --                                          periods later than the latest encumbrance year
14307 --                                          for the set-of-books.
14308 --
14309 PROCEDURE Calculate_Amounts
14310 ( p_api_version_number          IN  NUMBER
14311  ,p_commit                      IN  VARCHAR2   := FND_API.G_FALSE
14312  ,p_init_msg_list               IN  VARCHAR2   := FND_API.G_FALSE
14313  ,p_msg_count                   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
14314  ,p_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14315  ,p_return_status               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14316  ,p_pm_product_code             IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14317  ,p_pa_project_id               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14318  ,p_pm_project_reference        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14319  ,p_budget_type_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14320  ,p_calc_raw_cost_yn            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14321  ,p_calc_burdened_cost_yn       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14322  ,p_calc_revenue_yn             IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14323  ,p_update_db_flag              IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14324  ,p_calc_budget_lines_out       OUT NOCOPY calc_budget_line_out_tbl_type
14325   -- Bug 2863564 Parameters added for new Fin Plan Model
14326  ,p_budget_version_id           IN  pa_budget_versions.budget_version_id%TYPE
14327  ,p_fin_plan_type_id            IN  pa_fin_plan_types_b.fin_plan_type_id%TYPE
14328  ,p_fin_plan_type_name          IN  pa_fin_plan_types_tl.name%TYPE
14329  ,p_version_type                IN  pa_budget_versions.version_type%TYPE
14330  ,p_budget_version_number       IN  pa_budget_versions.version_number%TYPE
14331 ) IS
14332 
14333 CURSOR l_budget_type_csr
14334           (p_budget_type_code   VARCHAR2 )
14335 IS
14336 SELECT 'X'
14337 FROM   pa_budget_types
14338 WHERE  budget_type_code = p_budget_type_code;
14339 
14340 CURSOR l_task_csr (p_task_id IN NUMBER ) IS
14341 SELECT pm_task_reference,
14342        task_name  -- Bug 2863564
14343 FROM   pa_tasks
14344 WHERE  task_id = p_task_id;
14345 
14346 -- Bug 2863564 new variables defined for Financial Planning chnages
14347 
14348 l_task_name                        pa_tasks.task_name%TYPE;
14349 l_context                          VARCHAR2(30);
14350 l_context_finplan         CONSTANT VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN;
14351 l_context_budget          CONSTANT VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET;
14352 
14353 -- Bug 2863564 The cursor has been modified for financial planning changes.
14354 -- The changes include fetching of new columns which aren't included in the
14355 -- view definition. Changing the pa_budget_lines_v view could have a large impact.
14356 -- So, cursor has been modified to be based on the direct tables.
14357 
14358 --<Patchset M: B and F impact changes : AMG:>-- Bug # 3507156
14359 -- Modified the select statement to selecy alias name directly from pa_resource_list_members table
14360 -- instead of PA_RESOURCES_PKG.GET_RESOURCE_NAME(rlm.resource_id,rlm.resource_type_id)
14361 
14362 
14363 
14364 CURSOR l_resource_assignment_csr
14365       ( c_budget_version_id  NUMBER,
14366         c_context            VARCHAR2)
14367 IS
14368 SELECT  bl.rowid   row_id
14369        ,bl.budget_line_id   budget_line_id
14370        ,DECODE(c_context,l_context_finplan,bl.txn_currency_code,bl.projfunc_currency_code) txn_currency_code
14371        ,ra.resource_assignment_id resource_assignment_id
14372        ,ra.task_id     task_id
14373        ,ra.rate_based_flag rate_based_flag
14374        ,rlm.resource_list_id  resource_list_id
14375        ,rlm.resource_list_member_id resource_list_member_id
14376        ,rlm.resource_id  resource_id
14377        ,rlm.alias
14378        ,bl.start_date   start_date
14379        ,bl.end_date     end_date
14380        ,bl.period_name  period_name
14381        ,bl.quantity     quantity
14382        ,bl.display_quantity display_quantity  --IPM Arch Enhancement Bug 4865563
14383        ,DECODE(c_context,l_context_finplan,bl.txn_raw_cost,bl.raw_cost)           txn_raw_cost
14384        ,DECODE(c_context,l_context_finplan,bl.txn_burdened_cost,bl.burdened_cost) txn_burdened_cost
14385        ,DECODE(c_context,l_context_finplan,bl.txn_revenue,bl.revenue)             txn_revenue
14386        ,bl.project_raw_cost         project_raw_cost
14387         ,bl.project_burdened_cost    project_burdened_cost
14388         ,bl.project_revenue          project_revenue
14389         ,bl.raw_cost                 projfunc_raw_cost
14390         ,bl.burdened_cost            projfunc_burdened_cost
14391         ,bl.revenue                  projfunc_revenue
14392 FROM   pa_budget_lines bl,
14393        pa_resource_assignments ra,
14394         pa_resource_list_members rlm
14395 WHERE  bl.budget_version_id = c_budget_version_id
14396   AND  bl.resource_assignment_id = ra.resource_assignment_id
14397   AND  ra.resource_list_member_id = rlm.resource_list_member_id;
14398 
14399 l_resource_assignment_rec        l_resource_assignment_csr%ROWTYPE;
14400 
14401 -- PL/SQL tables that would be used for bulk processing
14402 
14403 l_rowid_tbl                      row_id_tbl_type;
14404 l_budget_line_id_tbl             budget_line_id_tbl_type;
14405 l_txn_currency_code_tbl          txn_currency_code_tbl_type;
14406 l_res_assignment_id_tbl          res_assignment_id_tbl_type;
14407 l_task_id_tbl                    task_id_tbl_type;
14408 l_resource_list_id_tbl           resource_list_id_tbl_type;
14409 l_resource_list_member_id_tbl    res_list_member_id_tbl_type;
14410 l_resource_id_tbl                resource_id_tbl_type;
14411 l_resource_name_tbl              resource_name_tbl_type;
14412 l_start_date_tbl                 date_tbl_type;
14413 l_end_date_tbl                   date_tbl_type;
14414 l_period_name_tbl                period_name_tbl_type;
14415 l_quantity_tbl                   quantity_tbl_type;
14416 l_display_quantity_tbl           display_quantity_tbl_type;  --IPM Arch Enhancement Bug 4865563
14417 l_txn_raw_cost_tbl               raw_cost_tbl_type;
14418 l_txn_burdened_cost_tbl          burdened_cost_tbl_type;
14419 l_txn_revenue_tbl                revenue_tbl_type;
14420 l_project_raw_cost_tbl           raw_cost_tbl_type;
14421 l_project_burdened_cost_tbl      burdened_cost_tbl_type;
14422 l_project_revenue_tbl            revenue_tbl_type;
14423 l_projfunc_raw_cost_tbl          raw_cost_tbl_type;
14424 l_projfunc_burdened_cost_tbl     burdened_cost_tbl_type;
14425 l_projfunc_revenue_tbl           revenue_tbl_type;
14426 l_rate_based_flag_tbl            rate_based_flag_tbl_type;
14427 
14428 /* added for 2207723 */
14429 CURSOR l_get_entry_level_csr (c_budget_version_id IN NUMBER)
14430 IS
14431 SELECT m.entry_level_code
14432 FROM pa_budget_versions v
14433     ,pa_budget_entry_methods m
14434 WHERE v.budget_version_id = c_budget_version_id
14435   AND v.budget_entry_method_code = m.budget_entry_method_code
14436   AND    v.ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause v.ci_id IS NULL--Bug # 3507156
14437 
14438 
14439 l_api_name      CONSTANT    VARCHAR2(30) := 'Calculate_Amounts';
14440 
14441 -- Bug 2863564 l_return_status             VARCHAR2(1);
14442 l_project_id                NUMBER;
14443 l_dummy                     VARCHAR2(30);
14444 l_calculated_raw_cost       NUMBER := 0;
14445 l_calculated_burdened_cost  NUMBER := 0;
14446 l_calculated_revenue        NUMBER := 0;
14447 l_err_code                  NUMBER := 0;
14448 l_err_message               VARCHAR2(100);
14449 l_err_stage                 VARCHAR2(100);
14450 l_err_stack                 VARCHAR2(100);
14451 l_budget_version_id         NUMBER;
14452 l_line_ctr                  NUMBER := 0;
14453 l_labor_flag                VARCHAR2(1);
14454 l_allow_override_flag       VARCHAR2(1);
14455 l_pm_task_reference         VARCHAR2(30);
14456 l_msg_count                 NUMBER := 0;
14457 l_msg_data                  VARCHAR2(2000);
14458 l_function_allowed          VARCHAR2(1);
14459 l_resp_id                   NUMBER := 0;
14460 l_user_id                   NUMBER := 0;
14461 l_module_name               VARCHAR2(80);
14462 l_entry_level               pa_budget_entry_methods.entry_level_code%type; /* 2207723 */
14463 
14464 p_multiple_task_msg         VARCHAR2(1) := 'T';
14465 
14466 l_budget_line_id            pa_budget_lines.budget_line_id%TYPE; /* FPB2 */
14467 
14468 --Included the following variables as part of changes to AMG due to finplan model.
14469 l_txn_currency_code                pa_budget_lines.txn_currency_code%TYPE;
14470 l_multi_currency_billing_flag      pa_projects_all.multi_currency_billing_flag%TYPE;
14471 l_project_currency_code            pa_projects_all.project_currency_code%TYPE;
14472 l_projfunc_currency_code           pa_projects_all.projfunc_currency_code%TYPE;
14473 l_project_cost_rate_type           pa_projects_all.project_rate_type%TYPE;
14474 l_projfunc_cost_rate_type          pa_projects_all.projfunc_cost_rate_type%TYPE;
14475 l_project_bil_rate_type            pa_projects_all.project_bil_rate_type%TYPE;
14476 l_projfunc_bil_rate_type           pa_projects_all.projfunc_bil_rate_type%TYPE;
14477 
14478 l_fin_plan_type_id                 pa_fin_plan_types_b.fin_plan_type_id%TYPE;
14479 l_fin_plan_type_code               pa_fin_plan_types_b.fin_plan_type_code%TYPE;
14480 l_fin_plan_type_name               pa_fin_plan_types_tl.name%TYPE;
14481 
14482 l_version_type                     pa_budget_versions.version_type%TYPE;
14483 l_record_version_number            pa_budget_versions.record_version_number%TYPE;
14484 l_budget_type_code                 pa_budget_versions.budget_type_code%TYPE;
14485 l_ci_id                            pa_budget_versions.ci_id%TYPE;
14486 
14487 l_debug_mode                       VARCHAR2(30):= NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
14488 l_debug_level3            CONSTANT NUMBER := 3;
14489 l_debug_level5            CONSTANT NUMBER := 5;
14490 
14491 l_plsql_max_array_size             NUMBER := 200;
14492 l_security_ret_code                VARCHAR2(30);
14493 l_result                           VARCHAR2(30);
14494 
14495 
14496 ll_fin_plan_type_id                 pa_fin_plan_types_b.fin_plan_type_id%TYPE;
14497 ll_fin_plan_type_name               pa_fin_plan_types_tl.name%TYPE;
14498 ll_version_type                     pa_budget_versions.version_type%TYPE;
14499 ll_version_number                   pa_budget_versions.version_number%TYPE;
14500 --needed to get the field values associated to a AMG message
14501 
14502 --Added baseline_funding flag and querying from pa_projects_all and not from pa_projects
14503 CURSOR   l_amg_project_csr
14504    (p_pa_project_id pa_projects.project_id%type)
14505 IS
14506 SELECT   segment1
14507         ,baseline_funding_flag
14508 FROM     pa_projects_all p
14509 WHERE p.project_id = p_pa_project_id;
14510 
14511 l_amg_project_rec               l_amg_project_csr%ROWTYPE;
14512 --l_amg_segment1       VARCHAR2(25); no more used. Replaced by l_amg_project_rec.segment1
14513 
14514 -- Bug 2863564 added for new financial planning changes
14515 
14516 CURSOR  proj_fp_options_cur
14517         (c_project_id IN NUMBER, c_fin_plan_type_id IN NUMBER) IS
14518 SELECT  'x'
14519 FROM    pa_proj_fp_options pfo
14520 WHERE   pfo.project_id = c_project_id
14521 AND     pfo.fin_plan_type_id = c_fin_plan_type_id
14522 AND     pfo.fin_plan_option_level_code = PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
14523 
14524 proj_fp_options_rec  proj_fp_options_cur%ROWTYPE;
14525 
14526 CURSOR budget_version_info_cur (c_budget_version_id IN NUMBER) IS
14527 SELECT  bv.project_id          project_id
14528        ,bv.budget_type_code    budget_type_code
14529        ,bv.fin_plan_type_id    fin_plan_type_id
14530        ,bv.version_type        version_type
14531        ,bv.budget_status_code  budget_status_code
14532        ,bv.ci_id               ci_id    -- raja
14533        ,pt.fin_plan_type_code  fin_plan_type_code
14534        ,pt.name                fin_plan_type_name
14535        ,pa_fin_plan_utils.get_fin_plan_level_code(bv.budget_version_id) plan_level_code
14536        ,bv.locked_by_person_id
14537        ,bv.request_id
14538        ,pt.plan_class_code
14539        ,bv.etc_start_date
14540        ,nvl(bv.wp_version_flag,'N') wp_version_flag
14541        ,bv.plan_processing_code
14542 FROM   pa_budget_versions bv,
14543        pa_fin_plan_types_vl pt
14544 WHERE  bv.budget_version_id = c_budget_version_id
14545 AND    pt.fin_plan_type_id(+) = bv.fin_plan_type_id
14546 AND    bv.ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause bv.ci_id IS NULL--Bug # 3507156
14547 
14548 
14549 budget_version_info_rec  budget_version_info_cur%ROWTYPE;
14550 
14551 CURSOR draft_version_cur(
14552        c_project_id         pa_budget_versions.project_id%TYPE
14553       ,c_budget_type_code   pa_budget_versions.budget_type_code%TYPE)
14554 IS
14555 SELECT  budget_version_id
14556 FROM    pa_budget_versions
14557 WHERE   project_id = c_project_id
14558 AND     budget_type_code = c_budget_type_code
14559 AND     budget_status_code = 'W'
14560 AND    ci_id IS NULL;         -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
14561 
14562 
14563 draft_version_rec    draft_version_cur%ROWTYPE;
14564 
14565 --Added for bug#3636409
14566 l_workplan_flag                  VARCHAR2(1) := NULL;
14567 l_editable_flag                  VARCHAR2(1);
14568 l_autobaseline_flag              VARCHAR2(1) := NULL;
14569 
14570 l_person_id                   fnd_user.employee_id%type;
14571 l_resource_id                 pa_resource_txn_attributes.resource_id%type;
14572 l_resource_name               per_all_people_f.full_name%type;
14573 l_locked_by_name              per_people_x.full_name%type;
14574 
14575 l_rw_cost_rate_override            pa_budget_lines.txn_cost_rate_override%TYPE;
14576 l_burden_cost_rate_override        pa_budget_lines.burden_cost_rate_override%TYPE;
14577 l_bill_rate_override               pa_budget_lines.txn_bill_rate_override%TYPE;
14578 
14579 TYPE l_rw_cost_rate_override_tbl_t      IS TABLE OF pa_budget_lines.txn_cost_rate_override%TYPE
14580       INDEX BY BINARY_INTEGER;
14581 TYPE l_burdn_cst_rte_override_tbl_t      IS TABLE OF pa_budget_lines.burden_cost_rate_override%TYPE
14582       INDEX BY BINARY_INTEGER;
14583 TYPE l_bill_rate_override_tbl_t      IS TABLE OF pa_budget_lines.txn_bill_rate_override%TYPE
14584       INDEX BY BINARY_INTEGER;
14585 
14586 l_rw_cost_rate_override_tbl            l_rw_cost_rate_override_tbl_t;
14587 l_burden_cst_rate_override_tbl        l_burdn_cst_rte_override_tbl_t;
14588 l_bill_rate_override_tbl               l_bill_rate_override_tbl_t;
14589 
14590 
14591 l_budget_version_id_tbl      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
14592 l_time_phased_code               pa_proj_fp_options.cost_time_phased_code%TYPE;
14593 l_bdgt_lines_skip_flag           varchar2(1);
14594 l_targ_request_id                pa_budget_versions.request_id%TYPE;
14595 
14596   --This variable will be used to call pa_resource_asgn_curr maintenance api - IPM Arch Enhancement
14597    l_fp_cols_rec              PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
14598 
14599  -- Bug 4588279, 27-SEP-05, jwhite ------------------
14600 
14601  -- Funds Check API Call
14602  l_fck_req_flag                   VARCHAR2(1) := NULL;
14603  l_bdgt_intg_flag                 VARCHAR2(1) := NULL;
14604  l_bdgt_ver_id                    NUMBER      := NULL;
14605  l_encum_type_id                  NUMBER      := NULL;
14606  l_balance_type                   VARCHAR2(1) := NULL;
14607 
14608  --Business Rule Validation
14609  l_period_year                    gl_period_statuses.period_year%TYPE;
14610 
14611  CURSOR l_budget_periods_csr
14612       (p_period_name    VARCHAR2
14613        ,p_period_type_code   VARCHAR2    )
14614    IS
14615    SELECT PERIOD_YEAR
14616    FROM   pa_budget_periods_v
14617    WHERE  period_name = p_period_name
14618    AND    period_type_code = p_period_type_code;
14619 
14620  -- End Bug 4588279, 27-SEP-05, jwhite ------------------
14621 
14622 
14623 
14624 BEGIN
14625 --  Standard begin of API savepoint
14626 
14627     SAVEPOINT calculate_amounts_pub;
14628 
14629 --  Standard call to check for call compatibility.
14630 
14631     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
14632                                          p_api_version_number   ,
14633                                          l_api_name             ,
14634                                          G_PKG_NAME             )
14635     THEN
14636 
14637     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14638 
14639     END IF;
14640     --product_code is mandatory
14641 
14642     IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14643     OR p_pm_product_code IS NULL
14644     THEN
14645          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14646          THEN
14647                 pa_interface_utils_pub.map_new_amg_msg
14648                 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
14649                  ,p_msg_attribute    => 'CHANGE'
14650                  ,p_resize_flag      => 'N'
14651                  ,p_msg_context      => 'GENERAL'
14652                  ,p_attribute1       => ''
14653                  ,p_attribute2       => ''
14654                  ,p_attribute3       => ''
14655                  ,p_attribute4       => ''
14656                  ,p_attribute5       => '');
14657          END IF;
14658 
14659          RAISE FND_API.G_EXC_ERROR;
14660 
14661     END IF;
14662 
14663     l_pm_product_code :='Z';
14664     /*added for bug no :2413400*/
14665     OPEN p_product_code_csr (p_pm_product_code);
14666     FETCH p_product_code_csr INTO l_pm_product_code;
14667     CLOSE p_product_code_csr;
14668 
14669     IF l_pm_product_code <> 'X'
14670     THEN
14671            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14672            THEN
14673                  pa_interface_utils_pub.map_new_amg_msg
14674                    ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
14675                     ,p_msg_attribute    => 'CHANGE'
14676                     ,p_resize_flag      => 'N'
14677                     ,p_msg_context      => 'GENERAL'
14678                     ,p_attribute1       => ''
14679                     ,p_attribute2       => ''
14680                     ,p_attribute3       => ''
14681                     ,p_attribute4       => ''
14682                     ,p_attribute5       => '');
14683             END IF;
14684             p_return_status            := FND_API.G_RET_STS_ERROR;
14685             RAISE FND_API.G_EXC_ERROR;
14686     END IF;
14687 
14688     l_resp_id     := FND_GLOBAL.Resp_id;
14689     l_user_id     := FND_GLOBAL.User_id;
14690 --    l_module_name := 'PA_FP_MAINTAIN_GENERATED_PLAN'; -- 'PA_PM_UPDATE_BUDGET_LINE';
14691 
14692     -- Bug 2863564
14693     -- The code below commented out as all the security checks are shifted to a common API
14694     /*
14695     IF p_update_db_flag = 'Y' THEN
14696            l_resp_id := FND_GLOBAL.Resp_id;
14697            l_user_id := FND_GLOBAL.User_id;
14698            --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_BUDGET_LINE';
14699            l_module_name := 'PA_PM_UPDATE_BUDGET_LINE';
14700 
14701         -- As part of enforcing project security, which would determine
14702         -- whether the user has the necessary privileges to update the project
14703         -- need to call the pa_security package
14704         -- If a user does not have privileges to update the project, then
14705         -- cannot update the budget lines
14706 
14707         pa_security.initialize (X_user_id        => l_user_id,
14708                                 X_calling_module => l_module_name);
14709 
14710         -- Actions performed using the APIs would be subject to
14711         -- function security. If the responsibility does not allow
14712         -- such functions to be executed, the API should not proceed further
14713         -- since the user does not have access to such functions
14714 
14715         PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_pa_project_id;
14716 
14717 
14718         PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14719           (p_api_version_number => p_api_version_number,
14720            p_responsibility_id  => l_resp_id,
14721            p_function_name      => 'PA_PM_UPDATE_BUDGET_LINE',
14722            p_msg_count          => l_msg_count,
14723            p_msg_data           => l_msg_data,
14724            p_return_status      => l_return_status,
14725            p_function_allowed   => l_function_allowed );
14726 
14727         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
14728         THEN
14729                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14730 
14731         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
14732         THEN
14733                 RAISE FND_API.G_EXC_ERROR;
14734         END IF;
14735         IF l_function_allowed = 'N' THEN
14736             pa_interface_utils_pub.map_new_amg_msg
14737             ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14738              ,p_msg_attribute    => 'CHANGE'
14739              ,p_resize_flag      => 'Y'
14740              ,p_msg_context      => 'GENERAL'
14741              ,p_attribute1       => ''
14742              ,p_attribute2       => ''
14743              ,p_attribute3       => ''
14744              ,p_attribute4       => ''
14745              ,p_attribute5       => '');
14746              p_return_status := FND_API.G_RET_STS_ERROR;
14747              RAISE FND_API.G_EXC_ERROR;
14748         END IF;
14749     END IF;
14750     */
14751     --  Initialize the message table if requested.
14752 
14753     IF FND_API.TO_BOOLEAN( p_init_msg_list )
14754     THEN
14755 
14756          FND_MSG_PUB.initialize;
14757 
14758     END IF;
14759 
14760     --  Set API return status to success
14761 
14762     p_return_status         := FND_API.G_RET_STS_SUCCESS;
14763 
14764 
14765 --CHECK FOR MANDATORY FIELDS and CONVERT VALUES to ID's
14766 
14767     --product_code is mandatory
14768 
14769      -- convert pm_project_reference to id
14770 
14771     Pa_project_pvt.Convert_pm_projref_to_id (
14772          p_pm_project_reference  => p_pm_project_reference,
14773          p_pa_project_id         => p_pa_project_id,
14774          p_out_project_id        => l_project_id,
14775          p_return_status         => p_return_status );
14776 
14777     IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
14778     THEN
14779         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
14780 
14781     ELSIF p_return_status = FND_API.G_RET_STS_ERROR
14782     THEN
14783         RAISE  FND_API.G_EXC_ERROR;
14784     END IF;
14785 
14786     -- Commenting out the code below as all the security checks are shifted to a common API
14787     /*
14788     IF p_update_db_flag = 'Y' THEN
14789 
14790         -- Now verify whether project security allows the user to update
14791         -- project
14792         -- If a user does not have privileges to update the project, then
14793         -- cannot update the budget line
14794 
14795         IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
14796 
14797            -- The user does not have query privileges on this project
14798            -- Hence, cannot update the project.Raise error
14799              pa_interface_utils_pub.map_new_amg_msg
14800              ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
14801               ,p_msg_attribute    => 'CHANGE'
14802               ,p_resize_flag      => 'Y'
14803               ,p_msg_context      => 'GENERAL'
14804               ,p_attribute1       => ''
14805               ,p_attribute2       => ''
14806               ,p_attribute3       => ''
14807               ,p_attribute4       => ''
14808               ,p_attribute5       => '');
14809               p_return_status := FND_API.G_RET_STS_ERROR;
14810               RAISE FND_API.G_EXC_ERROR;
14811         ELSE
14812               -- If the user has query privileges, then check whether
14813               -- update privileges are also available
14814               IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
14815 
14816                    -- The user does not have update privileges on this project
14817                    -- Hence , raise error
14818                   pa_interface_utils_pub.map_new_amg_msg
14819                   ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
14820                    ,p_msg_attribute    => 'CHANGE'
14821                    ,p_resize_flag      => 'Y'
14822                    ,p_msg_context      => 'GENERAL'
14823                    ,p_attribute1       => ''
14824                    ,p_attribute2       => ''
14825                    ,p_attribute3       => ''
14826                    ,p_attribute4       => ''
14827                    ,p_attribute5       => '');
14828                   p_return_status := FND_API.G_RET_STS_ERROR;
14829                   RAISE FND_API.G_EXC_ERROR;
14830               END IF;
14831         END IF;
14832     END IF;
14833    */
14834    -- Get segment1 for AMG messages
14835 
14836     OPEN l_amg_project_csr( l_project_id );
14837     FETCH l_amg_project_csr INTO l_amg_project_rec;
14838     CLOSE l_amg_project_csr;
14839 
14840     -- Bug 2863564 This is redundant code and thus commented out
14841 /*
14842     -- Get the project and project functional currencies so that they can be used later
14843     pa_fin_plan_utils.Get_Project_Curr_Attributes
14844             (  p_project_id                    => l_project_id
14845               ,x_multi_currency_billing_flag   => l_multi_currency_billing_flag
14846               ,x_project_currency_code         => l_project_currency_code
14847               ,x_projfunc_currency_code        => l_projfunc_currency_code
14848               ,x_project_cost_rate_type        => l_project_cost_rate_type
14849               ,x_projfunc_cost_rate_type       => l_projfunc_cost_rate_type
14850               ,x_project_bil_rate_type         => l_project_bil_rate_type
14851               ,x_projfunc_bil_rate_type        => l_projfunc_bil_rate_type
14852               ,x_return_status                 => l_return_status
14853               ,x_msg_count                     => l_msg_count
14854               ,x_msg_data                      => l_msg_data);
14855 
14856     IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
14857          RAISE  FND_API.G_EXC_ERROR;
14858     END IF;
14859 
14860     -- In budget model intialise txn currency code to PFC
14861     IF p_budget_type_code IS NOT  NULL  AND
14862        p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14863         l_txn_currency_code := l_projfunc_currency_code;
14864     END IF;
14865 */
14866 
14867        -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
14868        -- 28-APR-03
14869 
14870 
14871       IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14872                         ll_fin_plan_type_id := NULL;
14873       ELSE
14874                         ll_fin_plan_type_id := p_fin_plan_type_id;
14875       END IF;
14876 
14877       IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14878                         ll_fin_plan_type_name := NULL;
14879       ELSE
14880                         ll_fin_plan_type_name := p_fin_plan_type_name;
14881       END IF;
14882 
14883       IF p_budget_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14884                         ll_version_number := NULL;
14885       ELSE
14886                         ll_version_number := p_budget_version_number;
14887       END IF;
14888 
14889       -- Changes done.
14890 
14891 
14892     -- Bug 2863564 New validations included as part of the changes
14893 
14894     -- Budget Version Id, Budget Type Info and Fin Plan Type info all shouldn't be missing
14895 
14896     IF ((p_budget_version_id  IS NULL OR p_budget_version_id  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  )  AND
14897         (p_budget_type_code   IS NULL OR p_budget_type_code   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )  AND
14898         (p_fin_plan_type_id   IS NULL OR p_fin_plan_type_id   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  )  AND
14899         (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) )
14900     THEN
14901          PA_UTILS.ADD_MESSAGE
14902                (p_app_short_name => 'PA',
14903                 p_msg_name       => 'PA_BUDGET_FP_BOTH_MISSING');
14904 
14905          IF l_debug_mode = 'Y' THEN
14906                pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
14907                pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14908          END IF;
14909          RAISE FND_API.G_EXC_ERROR;
14910     END IF;
14911 
14912     -- Both Budget Type Info and Fin Plan Type info shouldn't be provided
14913 
14914     IF (p_budget_type_code    IS NOT NULL AND p_budget_type_code   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14915        ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
14916         (p_fin_plan_type_id   IS NOT NULL AND p_fin_plan_type_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ))
14917     THEN
14918          PA_UTILS.ADD_MESSAGE
14919                (p_app_short_name => 'PA',
14920                 p_msg_name       => 'PA_BUDGET_FP_BOTH_NOT_NULL');
14921 
14922          IF l_debug_mode = 'Y' THEN
14923                pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
14924                pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14925          END IF;
14926          RAISE FND_API.G_EXC_ERROR;
14927     END IF;
14928 
14929           -- get the person_id: used for locking checks
14930         PA_COMP_PROFILE_PUB.GET_USER_INFO
14931               (p_user_id         => l_user_id,
14932                x_person_id       => l_person_id,
14933                x_resource_id     => l_resource_id,
14934                x_resource_name   => l_resource_name);
14935 
14936     IF (p_budget_version_id IS NOT NULL AND p_budget_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14937     THEN
14938          -- Fetch budget version info
14939          OPEN  budget_version_info_cur(p_budget_version_id);
14940          FETCH budget_version_info_cur INTO budget_version_info_rec;
14941 
14942             IF budget_version_info_cur%NOTFOUND
14943             THEN
14944 
14945                  -- Add the error message that i/p plan version id is invlid
14946 
14947                  PA_UTILS.ADD_MESSAGE(
14948                         p_app_short_name  => 'PA'
14949                        ,p_msg_name        => 'PA_FP_INVALID_VERSION_ID'
14950                        ,p_token1          => 'BUDGET_VERSION_ID'
14951                        ,p_value1          => p_budget_version_id);
14952 
14953                  IF l_debug_mode = 'Y' THEN
14954                        pa_debug.g_err_stage := 'No budget version exists with i/p version id' ;
14955                        pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14956                  END IF;
14957                  CLOSE budget_version_info_cur;
14958                  RAISE FND_API.G_EXC_ERROR;
14959 
14960             ELSE
14961                  -- Check if the budget belongs to the same project
14962 
14963                  IF (budget_version_info_rec.project_id <> l_project_id)
14964                  THEN
14965                       PA_UTILS.ADD_MESSAGE(
14966                            p_app_short_name  => 'PA'
14967                           ,p_msg_name        => 'PA_FP_PROJ_VERSION_MISMATCH');
14968 
14969                       IF l_debug_mode = 'Y' THEN
14970                             pa_debug.g_err_stage := 'i/p version doesnot belong to i/p project' ;
14971                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14972                       END IF;
14973                       CLOSE budget_version_info_cur;
14974                       RAISE FND_API.G_EXC_ERROR;
14975                  END IF;
14976 
14977                  -- The i/p budget version should be a working verion.
14978 
14979                  IF (budget_version_info_rec.budget_status_code <> 'W')
14980                  THEN
14981                       PA_UTILS.ADD_MESSAGE(
14982                            p_app_short_name  => 'PA'
14983                           ,p_msg_name        => 'PA_FP_INVALID_VERSION_STATUS');
14984 
14985                       IF l_debug_mode = 'Y' THEN
14986                             pa_debug.g_err_stage := 'i/p version is not a working version' ;
14987                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14988                       END IF;
14989                       CLOSE budget_version_info_cur;
14990                       RAISE FND_API.G_EXC_ERROR;
14991                  END IF;
14992 
14993                  -- If the budget version is a control item version throw error
14994 
14995                  IF budget_version_info_rec.ci_id IS NOT NULL THEN
14996                       PA_UTILS.ADD_MESSAGE(
14997                             p_app_short_name  => 'PA'
14998                            ,p_msg_name        => 'PA_FP_CI_VERSION_NON_EDITABLE'
14999                            ,p_token1          => 'BUDGET_VERSION_ID'
15000                            ,p_value1          => p_budget_version_id);
15001                       IF l_debug_mode = 'Y' THEN
15002                             pa_debug.g_err_stage := 'i/p version is ci version' ;
15003                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15004                       END IF;
15005                       CLOSE budget_version_info_cur;
15006                       RAISE FND_API.G_EXC_ERROR;
15007                  END IF;
15008             END IF;
15009 
15010 
15011          -- Derive the new / old budgets model context value using the budget version info.
15012 
15013          IF budget_version_info_rec.fin_plan_type_id IS NOT NULL
15014          THEN
15015               l_context            :=  l_context_finplan;
15016               l_fin_plan_type_id   :=  budget_version_info_rec.fin_plan_type_id;
15017               l_version_type       :=  budget_version_info_rec.version_type;
15018               l_fin_plan_type_code :=  budget_version_info_rec.fin_plan_type_code;
15019               l_fin_plan_type_name :=  budget_version_info_rec.fin_plan_type_name;
15020               l_workplan_flag       :=  budget_version_info_rec.wp_version_flag;
15021               l_budget_version_id  :=  p_budget_version_id;
15022 
15023 
15024               IF  l_fin_plan_type_code = 'ORG_FORECAST' THEN
15025 
15026                     -- Add appropriate exception message
15027 
15028                     PA_UTILS.ADD_MESSAGE
15029                          (p_app_short_name => 'PA',
15030                           p_msg_name       => 'PA_FP_ORG_FCST_PLAN_TYPE'
15031                           );
15032 
15033                     IF l_debug_mode = 'Y' THEN
15034                           pa_debug.g_err_stage := 'Org_Forecast plan type has been passed' ;
15035                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15036                     END IF;
15037                     RAISE FND_API.G_EXC_ERROR;
15038               END IF;
15039               --bug #3636409. Validation for WorkPlan Versions which cannot be edited using this AMG interface.
15040 
15041               IF  l_workplan_flag = 'Y' THEN
15042 
15043                   IF l_debug_mode = 'Y' THEN
15044                         pa_debug.g_err_stage := 'WorkPlan Versions cannot be edited using this AMG interface' ;
15045                         pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15046                   END IF;
15047 
15048                   PA_UTILS.ADD_MESSAGE
15049                            (p_app_short_name => 'PA',
15050                             p_msg_name       => 'PA_FP_WP_BV_NOT_ALLOWED');
15051                    RAISE FND_API.G_EXC_ERROR;
15052               END IF;
15053 
15054               -- version locked by process
15055               IF ( ( nvl( budget_version_info_rec.locked_by_person_id,0) = -98)
15056                          AND ( budget_version_info_rec.request_id is NOT NULL )) THEN
15057                      PA_UTILS.ADD_MESSAGE
15058                       ( p_app_short_name => 'PA',
15059                         p_msg_name       => 'PA_FP_LOCKED_BY_PRC');
15060                      CLOSE budget_version_info_cur;
15061                      RAISE FND_API.G_EXC_ERROR;
15062               END IF;
15063 
15064               -- version locked by another user
15065               IF (budget_version_info_rec.locked_by_person_id is not null)  then
15066                   IF (l_person_id <> budget_version_info_rec.locked_by_person_id) then
15067 
15068                       l_locked_by_name :=
15069                           pa_fin_plan_utils.get_person_name(budget_version_info_rec.locked_by_person_id);
15070                       PA_UTILS.ADD_MESSAGE
15071                              ( p_app_short_name => 'PA',
15072                                p_msg_name       => 'PA_FP_LCK_BY_USER',
15073                                p_token1         => 'PERSON_NAME',
15074                                p_value1         => l_locked_by_name);
15075                     CLOSE budget_version_info_cur;
15076                     RAISE FND_API.G_EXC_ERROR;
15077                   END IF;
15078               END IF;
15079                -- Get the status of the current working version. If the status is submitted then
15080             -- it can not be updated/deleted
15081               IF nvl(budget_version_info_rec.budget_status_code,'X') = 'S' THEN
15082                  IF l_debug_mode = 'Y' THEN
15083                             pa_debug.g_err_stage := 'Version exists in submitted status';
15084                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15085                  END IF;
15086                  PA_UTILS.ADD_MESSAGE
15087                         ( p_app_short_name => 'PA',
15088                           p_msg_name       => 'PA_FP_VER_SUB_STS');
15089                  CLOSE budget_version_info_cur;
15090                  RAISE FND_API.G_EXC_ERROR;
15091               END IF;
15092 
15093               l_entry_level := pa_fin_plan_utils.get_fin_plan_level_code(l_budget_version_id);
15094 
15095               l_autobaseline_flag := l_amg_project_rec.baseline_funding_flag;
15096 
15097               IF l_autobaseline_flag = 'N' THEN
15098 
15099                     pa_fin_plan_utils.Check_if_plan_type_editable (
15100                              P_project_id         => l_project_id
15101                             ,P_fin_plan_type_id   => l_fin_plan_type_id
15102                             ,P_version_type       => l_version_type
15103                             ,X_editable_flag      => l_editable_flag
15104                             ,X_return_status      => p_return_status
15105                             ,X_msg_count          => p_msg_count
15106                             ,X_msg_data           => p_msg_data);
15107 
15108                     -- Throw the error if the above API is not successfully executed
15109 
15110                     IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15111 
15112                                     IF l_debug_mode = 'Y' THEN
15113                                           pa_debug.g_err_stage := 'Can not check if plan type is editable' ;
15114                                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15115                                     END IF;
15116 
15117                          RAISE FND_API.G_EXC_ERROR;
15118                     END IF;
15119 
15120                     --Check for l_editable_flag. If it returns N, then raise PA_FP_PLAN_TYPE_NON_EDITABLE.
15121 
15122                     IF l_editable_flag = 'N'  THEN
15123 
15124                           IF l_debug_mode = 'Y' THEN
15125                                 pa_debug.g_err_stage := 'Plan type is not editable' ;
15126                                 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15127                           END IF;
15128 
15129                           PA_UTILS.ADD_MESSAGE
15130                                    (p_app_short_name => 'PA',
15131                                     p_msg_name       => 'PA_FP_PLAN_TYPE_NON_EDITABLE',
15132                                     p_token1         => 'PROJECT',
15133                                     p_value1         =>  l_amg_project_rec.segment1,
15134                                     p_token2         => 'PLAN_TYPE',
15135                                     p_value2         =>  l_fin_plan_type_name);
15136 
15137                          RAISE FND_API.G_EXC_ERROR;
15138                     END IF;
15139               END IF;
15140 
15141          ELSE
15142               l_context := l_context_budget;
15143               l_budget_type_code   :=  budget_version_info_rec.budget_type_code;
15144               l_budget_version_id  :=  p_budget_version_id;
15145               /* added for 2207723 to get the entry level of the budget */
15146               OPEN l_get_entry_level_csr(l_budget_version_id);
15147               FETCH l_get_entry_level_csr into l_entry_level;
15148               CLOSE l_get_entry_level_csr;
15149 
15150          END IF;
15151          CLOSE budget_version_info_cur;
15152 
15153     ELSIF (p_fin_plan_type_id   IS NOT NULL AND p_fin_plan_type_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
15154           (p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15155     THEN
15156 
15157          -- Bug 2863564
15158          -- We are in the contex of new budgets model
15159 
15160          l_context := l_context_finplan;
15161 
15162          -- Call convert_plan_type_name_to_id api.
15163          -- If Plan Type Id is passed then the existence of a plan type with that id is checked
15164          -- Else using plan type name provided Plan Type Id is fetched.
15165          -- Proper error messages are stacked by the api if any validations fail.
15166 
15167          -- Change the p_fin_plan_type_id, p_fin_plan_type_name to
15168        --          ll_fin_plan_type_id,ll_fin_plan_type_name
15169          -- Xin Liu. 28-APR-03
15170 
15171          PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
15172                ( p_fin_plan_type_id    => ll_fin_plan_type_id
15173                 ,p_fin_plan_type_name  => ll_fin_plan_type_name
15174                 ,x_fin_plan_type_id    => l_fin_plan_type_id
15175                 ,x_return_status       => p_return_status
15176                 ,x_msg_count           => p_msg_count
15177                 ,x_msg_data            => p_msg_data);
15178 
15179          -- Throw the error if the above API is not successfully executed
15180 
15181          IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15182 
15183                IF l_debug_mode = 'Y' THEN
15184                      pa_debug.g_err_stage := 'Plan Type validation have failed' ;
15185                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15186                END IF;
15187                RAISE FND_API.G_EXC_ERROR;
15188          END IF;
15189 
15190          -- Now, we have a valid fin plan type id
15191          -- Check if the fin plan type code is 'ORG_FORECAST' if so throw an error
15192 
15193          BEGIN
15194               SELECT  fin_plan_type_code
15195                      ,name
15196                      , use_for_workplan_flag
15197               INTO    l_fin_plan_type_code
15198                      ,l_fin_plan_type_name
15199                      ,l_workplan_flag
15200               FROM   pa_fin_plan_types_vl
15201               WHERE  fin_plan_type_id = l_fin_plan_type_id;
15202 
15203               IF  l_fin_plan_type_code = 'ORG_FORECAST' THEN
15204 
15205                     -- Add appropriate exception message
15206 
15207                     PA_UTILS.ADD_MESSAGE
15208                          (p_app_short_name => 'PA',
15209                           p_msg_name       => 'PA_FP_ORG_FCST_PLAN_TYPE'
15210                           );
15211 
15212                     IF l_debug_mode = 'Y' THEN
15213                           pa_debug.g_err_stage := 'Org_Forecast plan type has been passed' ;
15214                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15215                     END IF;
15216                     RAISE FND_API.G_EXC_ERROR;
15217               END IF;
15218          EXCEPTION
15219               WHEN OTHERS THEN
15220                    IF l_debug_mode = 'Y' THEN
15221                          pa_debug.g_err_stage := 'Unexpected error while fetching the plan type code'||SQLERRM ;
15222                          pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15223                    END IF;
15224                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15225          END;
15226 
15227             --bug #3636409. Validation for WorkPlan Versions which cannot be edited using this AMG interface.
15228 
15229             IF  l_workplan_flag = 'Y' THEN
15230 
15231                   IF l_debug_mode = 'Y' THEN
15232                         pa_debug.g_err_stage := 'WorkPlan Versions cannot be edited using this AMG interface' ;
15233                         pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15234                   END IF;
15235 
15236                   PA_UTILS.ADD_MESSAGE
15237                            (p_app_short_name => 'PA',
15238                             p_msg_name       => 'PA_FP_WP_BV_NOT_ALLOWED');
15239                    RAISE FND_API.G_EXC_ERROR;
15240             END IF;
15241             --bug #3636409. Validation for workplan versions ends here.
15242 
15243          -- Bug 2863564 Check if the plan type has been attached to the project or not.
15244 
15245          OPEN  proj_fp_options_cur(l_project_id,l_fin_plan_type_id);
15246          FETCH proj_fp_options_cur INTO proj_fp_options_rec;
15247 
15248            IF proj_fp_options_cur%NOTFOUND THEN
15249 
15250               -- Throw appropriate error message
15251               PA_UTILS.ADD_MESSAGE
15252                       (p_app_short_name => 'PA',
15253                        p_msg_name       => 'PA_FP_NO_PLAN_TYPE_OPTION',
15254                        p_token1         => 'PROJECT',
15255                        p_value1         =>  l_amg_project_rec.segment1,
15256                        p_token2         => 'PLAN_TYPE',
15257                        p_value2         =>  l_fin_plan_type_name);
15258 
15259                IF l_debug_mode = 'Y' THEN
15260                      pa_debug.g_err_stage := 'plan type not attached to project' ;
15261                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15262                END IF;
15263                CLOSE proj_fp_options_cur;
15264                RAISE FND_API.G_EXC_ERROR;
15265            END IF;
15266 
15267          CLOSE proj_fp_options_cur;
15268 
15269       -- Changes done by Xin Liu for post_fpk. Check if p_version_type is G_PA_MISS_CHAR.  24-APR-03
15270          IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15271                     l_version_type := NULL;
15272        ELSE
15273                   l_version_type := p_version_type;
15274          END IF;
15275       --Changes Done.
15276 
15277          -- Bug 2863564
15278          -- Call get_version_type api to do the necessary validations regarding the version type
15279          -- If the version type is passed as null,
15280          --      it returns version_type if it can be fethced uniquely.
15281          -- else if passed as not null
15282          --       it validates the passed value against the fin plan preference code
15283 
15284          pa_fin_plan_utils.get_version_type
15285                   ( p_project_id        => l_project_id
15286                    ,p_fin_plan_type_id  => l_fin_plan_type_id
15287                    ,px_version_type     => l_version_type
15288                    ,x_return_status     => p_return_status
15289                    ,x_msg_count         => p_msg_count
15290                    ,x_msg_data          => p_msg_data);
15291 
15292          IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15293                IF l_debug_mode = 'Y' THEN
15294                      pa_debug.g_err_stage := 'getversiontype Failed ' ;
15295                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15296                END IF;
15297                RAISE FND_API.G_EXC_ERROR;
15298          END IF;
15299 
15300           --bug #3636409. Validation for allow_edit_after_baseline_flag starts here.
15301          l_autobaseline_flag := l_amg_project_rec.baseline_funding_flag;
15302 
15303          IF l_autobaseline_flag = 'N' THEN
15304 
15305                pa_fin_plan_utils.Check_if_plan_type_editable (
15306                         P_project_id         => l_project_id
15307                        ,P_fin_plan_type_id   => l_fin_plan_type_id
15308                        ,P_version_type       => l_version_type
15309                        ,X_editable_flag      => l_editable_flag
15310                        ,X_return_status      => p_return_status
15311                        ,X_msg_count          => p_msg_count
15312                        ,X_msg_data           => p_msg_data);
15313 
15314                -- Throw the error if the above API is not successfully executed
15315 
15316                IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15317 
15318                                IF l_debug_mode = 'Y' THEN
15319                                      pa_debug.g_err_stage := 'Can not check if plan type is editable' ;
15320                                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15321                                END IF;
15322 
15323                     RAISE FND_API.G_EXC_ERROR;
15324                END IF;
15325 
15326                --Check for l_editable_flag. If it returns N, then raise PA_FP_PLAN_TYPE_NON_EDITABLE.
15327 
15328                IF l_editable_flag = 'N'  THEN
15329 
15330                      IF l_debug_mode = 'Y' THEN
15331                            pa_debug.g_err_stage := 'Plan type is not editable' ;
15332                            pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15333                      END IF;
15334 
15335                      PA_UTILS.ADD_MESSAGE
15336                               (p_app_short_name => 'PA',
15337                                p_msg_name       => 'PA_FP_PLAN_TYPE_NON_EDITABLE',
15338                                p_token1         => 'PROJECT',
15339                                p_value1         =>  l_amg_project_rec.segment1,
15340                                p_token2         => 'PLAN_TYPE',
15341                                p_value2         =>  l_fin_plan_type_name);
15342 
15343                     RAISE FND_API.G_EXC_ERROR;
15344                END IF;
15345          END IF;
15346            --bug #3636409. Validation for allow_edit_after_baseline_flag ends here.
15347 
15348 
15349          IF   p_budget_version_number IS NOT NULL
15350          AND  p_budget_Version_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15351          THEN
15352               -- Bug 2863564
15353               -- Fetch the working budget version with the unique combination of
15354               -- l_project_id, l_finplan_type_id,l_version_type, version_number provided
15355 
15356               pa_fin_plan_utils.get_version_id
15357                   (  p_project_id        => l_project_id
15358                     ,p_fin_plan_type_id  => l_fin_plan_type_id
15359                     ,p_version_type      => l_version_type
15360                     ,p_version_number    => p_budget_version_number
15361                     ,x_budget_version_id => l_budget_version_id
15362                     ,x_ci_id             => l_ci_id
15363                     ,x_return_status     => p_return_status
15364                     ,x_msg_count         => p_msg_count
15365                     ,x_msg_data          => p_msg_data );
15366 
15367               IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15368                     IF l_debug_mode = 'Y' THEN
15369                           pa_debug.g_err_stage := 'getVersionId api Failed ' ;
15370                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15371                     END IF;
15372                     RAISE FND_API.G_EXC_ERROR;
15373               END IF;
15374 
15375               -- If the budget version is a control item version throw error
15376 
15377               IF l_ci_id IS NOT NULL THEN
15378                   PA_UTILS.ADD_MESSAGE(
15379                          p_app_short_name  => 'PA'
15380                         ,p_msg_name        => 'PA_FP_CI_VERSION_NON_EDITABLE'
15381                         ,p_token1          => 'BUDGET_VERSION_ID'
15382                         ,p_value1          => p_budget_version_id);
15383 
15384                   IF l_debug_mode = 'Y' THEN
15385                         pa_debug.g_err_stage := 'i/p version is ci version' ;
15386                         pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15387                   END IF;
15388                   RAISE FND_API.G_EXC_ERROR;
15389               END IF;
15390          ELSE
15391               -- Fetch the current working version for the project, finplan type and verion type
15392 
15393               PA_FIN_PLAN_UTILS.Get_Curr_Working_Version_Info(
15394                       p_project_id           =>   l_project_id
15395                      ,p_fin_plan_type_id     =>   l_fin_plan_type_id
15396                      ,p_version_type         =>   l_version_type
15397                      ,x_fp_options_id        =>   l_dummy
15398                      ,x_fin_plan_version_id  =>   l_budget_version_id
15399                      ,x_return_status        =>   p_return_status
15400                      ,x_msg_count            =>   p_msg_count
15401                      ,x_msg_data             =>   p_msg_data );
15402 
15403               IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15404                     IF l_debug_mode = 'Y' THEN
15405                           pa_debug.g_err_stage := 'Get_Curr_Working_Version_Info api Failed ' ;
15406                           pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15407                     END IF;
15408                     RAISE FND_API.G_EXC_ERROR;
15409               END IF;
15410 
15411          END IF;
15412 
15413          -- Bug 2863564
15414          -- If budget version id can't be found for i/p parameteres throw appropriate error message
15415 
15416        -- Changes done by Xin Liu for post_fpk. Added check for G_PA_MISS_NUM. 24-APR-03
15417          IF l_budget_version_id IS NULL OR l_budget_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
15418 
15419               -- Throw appropriate error message
15420               PA_UTILS.ADD_MESSAGE
15421                       (p_app_short_name => 'PA',
15422                        p_msg_name       => 'PA_FP_NO_WORKING_VERSION',
15423                        p_token1         => 'PROJECT',
15424                        p_value1         =>  l_amg_project_rec.segment1,
15425                        p_token2         => 'PLAN_TYPE',
15426                        p_value2         =>  l_fin_plan_type_name,
15427                        p_token3         => 'VERSION_NUMBER',
15428                        p_value3         =>  p_budget_Version_number );
15429 
15430                IF l_debug_mode = 'Y' THEN
15431                      pa_debug.g_err_stage := 'Budget Version does not exist' ;
15432                      pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15433                END IF;
15434                RAISE FND_API.G_EXC_ERROR;
15435          Else
15436                 -- Fetch budget version info
15437                 OPEN  budget_version_info_cur(l_budget_version_id);
15438                 FETCH budget_version_info_cur INTO budget_version_info_rec;
15439                 -- version locked by process
15440                 IF ( ( nvl( budget_version_info_rec.locked_by_person_id,0) = -98 )
15441                          AND ( budget_version_info_rec.request_id is NOT NULL )    ) THEN
15442 
15443                      PA_UTILS.ADD_MESSAGE
15444                         ( p_app_short_name => 'PA',
15445                           p_msg_name       => 'PA_FP_LOCKED_BY_PRC');
15446 
15447                     CLOSE budget_version_info_cur;
15448                     RAISE FND_API.G_EXC_ERROR;
15449                 END IF;
15450 
15451               -- version locked by another user
15452               IF (budget_version_info_rec.locked_by_person_id is not null)  then
15453                   IF (l_person_id <> budget_version_info_rec.locked_by_person_id) then
15454 
15455                       l_locked_by_name := pa_fin_plan_utils.get_person_name(budget_version_info_rec.locked_by_person_id);
15456                       PA_UTILS.ADD_MESSAGE
15457                                ( p_app_short_name => 'PA',
15458                                  p_msg_name       => 'PA_FP_LCK_BY_USER',
15459                                  p_token1         => 'PERSON_NAME',
15460                                  p_value1         => l_locked_by_name);
15461                       CLOSE budget_version_info_cur;
15462                       RAISE FND_API.G_EXC_ERROR;
15463                   END IF;
15464               END IF;
15465 
15466               -- Get the status of the current working version. If the status is submitted then
15467               -- it can not be updated/deleted
15468               IF nvl(budget_version_info_rec.budget_status_code,'X') = 'S' THEN
15469                  IF l_debug_mode = 'Y' THEN
15470                             pa_debug.g_err_stage := 'Version exists in submitted status';
15471                             pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15472                  END IF;
15473                  PA_UTILS.ADD_MESSAGE
15474                         ( p_app_short_name => 'PA',
15475                           p_msg_name       => 'PA_FP_VER_SUB_STS');
15476                  CLOSE budget_version_info_cur;
15477                  RAISE FND_API.G_EXC_ERROR;
15478               END IF;
15479 
15480               IF budget_version_info_rec.plan_processing_code IN ('XLUE','XLUP') THEN
15481 
15482                   pa_fin_plan_utils.return_and_vldt_plan_prc_code
15483                       (p_budget_version_id      =>   l_budget_version_id
15484                        ,p_plan_processing_code  =>   budget_version_info_rec.plan_processing_code
15485                        ,x_final_plan_prc_code    =>  budget_version_info_rec.plan_processing_code
15486                        ,x_targ_request_id        =>  l_targ_request_id
15487                        ,x_return_status          =>   p_return_status
15488                        ,x_msg_count              =>   p_msg_count
15489                        ,x_msg_data               =>   p_msg_data);
15490 
15491                   IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15492                         IF l_debug_mode = 'Y' THEN
15493                               pa_debug.g_err_stage := 'Validate plan processing code api Failed ' ;
15494                               pa_debug.write('Processing Code'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15495                         END IF;
15496                         RAISE FND_API.G_EXC_ERROR;
15497                   END IF;
15498 
15499               END IF;
15500 
15501             CLOSE budget_version_info_cur;
15502          End if;
15503 
15504          -- Bug 2863564
15505          -- Fetch the planning level of the budget version
15506 
15507          l_entry_level := pa_fin_plan_utils.get_fin_plan_level_code(l_budget_version_id);
15508 
15509     ELSIF p_budget_type_code IS NOT NULL OR p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15510     THEN
15511 
15512          -- Bug 2863564
15513          -- The following validation has been commented as its not relevant any more
15514 
15515          /*
15516          -- budget type code is mandatory
15517          IF p_budget_type_code IS NULL
15518          OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15519 
15520               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15521                  pa_interface_utils_pub.map_new_amg_msg
15522                  ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
15523                   ,p_msg_attribute    => 'CHANGE'
15524                   ,p_resize_flag      => 'N'
15525                   ,p_msg_context      => 'BUDG'
15526                   ,p_attribute1       => l_amg_segment1
15527                   ,p_attribute2       => ''
15528                   ,p_attribute3       => p_budget_type_code
15529                   ,p_attribute4       => ''
15530                   ,p_attribute5       => '');
15531               END IF;
15532               RAISE FND_API.G_EXC_ERROR;
15533           ELSE
15534           */
15535 
15536          -- If the budget_type info is passed, we are in the context of old bugets model
15537 
15538          l_context := l_context_budget;
15539          l_budget_type_code := p_budget_type_code;
15540 
15541          -- Validate the budget type code
15542 
15543          OPEN l_budget_type_csr( p_budget_type_code );
15544 
15545          FETCH l_budget_type_csr INTO l_dummy;
15546 
15547          IF l_budget_type_csr%NOTFOUND THEN
15548             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15549                 pa_interface_utils_pub.map_new_amg_msg
15550                 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
15551                  ,p_msg_attribute    => 'CHANGE'
15552                  ,p_resize_flag      => 'N'
15553                  ,p_msg_context      => 'BUDG'
15554                  ,p_attribute1       => l_amg_project_rec.segment1
15555                  ,p_attribute2       => ''
15556                  ,p_attribute3       => p_budget_type_code
15557                  ,p_attribute4       => ''
15558                  ,p_attribute5       => '');
15559             END IF;
15560             CLOSE l_budget_type_csr;
15561             RAISE FND_API.G_EXC_ERROR;
15562          END IF;
15563          CLOSE l_budget_type_csr;
15564 
15565          -- fetch the draft version id
15566 
15567          OPEN  draft_version_cur( l_project_id
15568                                  ,p_budget_type_code );
15569          FETCH draft_version_cur INTO draft_version_rec;
15570                IF draft_version_cur%NOTFOUND
15571                THEN
15572                      -- Throw appropriate error message
15573                      PA_UTILS.ADD_MESSAGE
15574                             (p_app_short_name => 'PA',
15575                              p_msg_name       => 'PA_NO_BUDGET_VERSION');
15576 
15577                      IF l_debug_mode = 'Y' THEN
15578                            pa_debug.g_err_stage := 'Draft Budget Version does not exist' ;
15579                            pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15580                      END IF;
15581                      CLOSE draft_version_cur;
15582                      RAISE FND_API.G_EXC_ERROR;
15583                ELSE
15584                      l_budget_version_id := draft_version_rec.budget_version_id;
15585                END IF;
15586          CLOSE draft_version_cur;
15587 
15588          -- Get budget entry method details
15589 
15590          /* added for 2207723 to get the entry level of the budget */
15591          OPEN l_get_entry_level_csr(l_budget_version_id);
15592          FETCH l_get_entry_level_csr into l_entry_level;
15593          CLOSE l_get_entry_level_csr;
15594 
15595 
15596     END IF; -- I/p Budget Version Id not null
15597 
15598     -- Bug 2863564
15599     -- Call the api that performs the autobaseline checks
15600 
15601     PA_FIN_PLAN_UTILS.PERFORM_AUTOBASLINE_CHECKS (
15602            p_budget_version_id  =>   l_budget_version_id
15603           ,x_result             =>   l_result
15604           ,x_return_status      =>   p_return_status
15605           ,x_msg_count          =>   p_msg_count
15606           ,x_msg_data           =>   p_msg_data       );
15607 
15608     IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15609           IF(l_debug_mode='Y') THEN
15610                 pa_debug.g_err_stage := 'Auto baseline API falied';
15611                 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15612           END IF;
15613           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15614     END IF;
15615 
15616     IF l_result = 'F' THEN
15617           IF(l_debug_mode='Y') THEN
15618                 pa_debug.g_err_stage := 'Auto baselining enabled for the project';
15619                 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15620           END IF;
15621           PA_UTILS.ADD_MESSAGE(
15622                   p_app_short_name  => 'PA'
15623                  ,p_msg_name        => 'PA_FP_AB_AR_VER_NON_EDITABLE'
15624                  ,p_token1          => 'PROJECT'
15625                  ,p_value1          => l_amg_project_rec.segment1);
15626           RAISE FND_API.G_EXC_ERROR;
15627     END IF;
15628 
15629     IF l_context = l_context_budget
15630     THEN
15631          -- Derive the version type using the budget amount code to restrict
15632          -- the users editing the 'COST' amounts if the version is 'REVENUE_ONLY'
15633 
15634         PA_FIN_PLAN_UTILS.get_version_type_for_bdgt_type
15635              (  p_budget_type_code      => l_budget_type_code
15636                ,x_version_type          => l_version_type
15637                ,x_return_status         => p_return_status
15638                ,x_msg_count             => p_msg_count
15639                ,x_msg_data              => p_msg_data );
15640 
15641         IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15642               IF(l_debug_mode='Y') THEN
15643                     pa_debug.g_err_stage := 'get_version_type_for_bdgt_type API falied';
15644                     pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15645               END IF;
15646               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15647         END IF;
15648     END IF;
15649 
15650     IF p_update_db_flag = 'Y'
15651     THEN
15652            l_module_name := 'PA_PM_UPDATE_BUDGET_LINE'; --4615645.
15653 
15654             -- Bug 2863564 Check for the function security
15655 
15656             PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
15657                    p_api_version_number =>   p_api_version_number
15658                   ,p_project_id         =>   l_project_id
15659                   ,p_fin_plan_type_id   =>   l_fin_plan_type_id /* Bug 3139924 */
15660                   ,p_calling_context    =>   l_context
15661                   ,p_function_name      =>   l_module_name
15662                   ,p_version_type       =>   l_version_type
15663                   ,x_return_status      =>   p_return_status
15664                   ,x_ret_code           =>   l_security_ret_code );
15665 
15666             -- The above API adds the error message to stack. Hence the message is not added here.
15667             -- Also, as security check is important further validations are not done in case this
15668             -- validation fails.
15669 
15670             IF (p_return_status <> FND_API.G_RET_STS_SUCCESS OR l_security_ret_code <> 'Y') THEN
15671 
15672                   IF l_debug_mode = 'Y' THEN
15673                         pa_debug.g_err_stage:= 'Security API Failed';
15674                         pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15675                   END IF;
15676 
15677                   RAISE FND_API.G_EXC_ERROR;
15678             END IF;
15679     END IF;
15680 
15681     -- Bug 2863564
15682     -- For Financial Planning model, we need to lock the plan version explicitly
15683     -- before Updating the version.
15684 
15685     IF p_update_db_flag = 'Y' AND l_context = l_context_finplan THEN
15686 
15687          -- Fetch the record version number of the plan version
15688          l_record_version_number :=
15689                   PA_FIN_PLAN_UTILS.RETRIEVE_RECORD_VERSION_NUMBER(l_budget_version_id);
15690 
15691          PA_FIN_PLAN_PVT.LOCK_UNLOCK_VERSION
15692               ( p_budget_version_id       => l_budget_version_id
15693                ,p_record_version_number   => l_record_version_number
15694                ,p_action                  => 'L'
15695                ,p_user_id                 => FND_GLOBAL.User_id
15696                ,p_person_id               => NULL
15697                ,x_return_status           => p_return_status
15698                ,x_msg_count               => p_msg_count
15699                ,x_msg_data                => p_msg_data);
15700 
15701           IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
15702 
15703                -- Error message is not added here as the api lock_unlock_version
15704                -- adds the message to stack
15705                IF(l_debug_mode='Y') THEN
15706                      pa_debug.g_err_stage := 'Failed in locking the version';
15707                      pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15708                END IF;
15709 
15710                RAISE FND_API.G_EXC_ERROR;
15711          END IF;
15712 
15713     END IF;
15714 
15715 
15716 
15717     -- Bug 4588279, 27-SEP-05, jwhite ---------------------------------------------------
15718 
15719     -- For budget_type_code Budgetary Control budgets,
15720     --
15721     -- 1) Add validation rule to prevent update to
15722     --    periods later than the latest encumbrance year for the set-of-books.
15723     --
15724     -- 2) For information purposes, this validation will be performed even if the update mode
15725     --    is disabled ( p_update_db_flag = 'N' )
15726     --
15727     --
15728 
15729     -- Since this initilization is performed here, this global can be used in lieu of a test
15730     -- for the following later in this procedure:
15731     -- 1) Update Mode
15732     -- 2) Budget_type_code model
15733     -- 3) Budgetary Control
15734     --
15735 
15736     PA_BUDGET_PUB.G_Latest_Encumbrance_Year := -99;
15737 
15738 
15739     IF ( p_update_db_flag = 'Y' )
15740      THEN
15741      -- UPDATE MODE
15742 
15743       IF ( p_budget_type_code IS NOT NULL ) -- budget_type_code model
15744          THEN
15745 
15746           -- Test for Budgetary Control
15747 
15748             --Check if budgetary control is enabled for the given project and
15749             --budget type code.
15750             PA_BUDGET_FUND_PKG.get_budget_ctrl_options
15751                             ( p_project_Id       => l_project_id
15752                             , p_budget_type_code => p_budget_type_code
15753                             , p_calling_mode     => 'BUDGET'
15754                             , x_fck_req_flag     => l_fck_req_flag
15755                             , x_bdgt_intg_flag   => l_bdgt_intg_flag
15756                             , x_bdgt_ver_id      => l_bdgt_ver_id
15757                             , x_encum_type_id    => l_encum_type_id
15758                             , x_balance_type     => l_balance_type
15759                             , x_return_status    => p_return_status
15760                             , x_msg_data         => p_msg_data
15761                             , x_msg_count        => p_msg_count
15762                             );
15763 
15764             -- calling api above adds the error message to stack hence not adding the error message here.
15765             IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
15766             THEN
15767                   IF l_debug_mode = 'Y' THEN
15768                         pa_debug.g_err_stage:= 'Calculate_Amounts returned unexp error';
15769                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15770                   END IF;
15771                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
15772             ELSIF p_return_status = FND_API.G_RET_STS_ERROR
15773             THEN
15774                   IF l_debug_mode = 'Y' THEN
15775                         pa_debug.g_err_stage:= 'Calculate_Amounts returned  error';
15776                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15777                   END IF;
15778                   RAISE  FND_API.G_EXC_ERROR;
15779             END IF;
15780 
15781 
15782             --If funds check is required then this budget cannot be updated thru AMG interface
15783             --FOR PERIOD_YEARS THAT FALL AFTER THE LATEST ENCUMBRANCE YEAR.
15784 
15785 
15786             IF (nvl(l_fck_req_flag,'N') = 'Y')
15787             THEN
15788 
15789                  --RE-Populate global for subsequent conditional budget LINE validation
15790                  --  Storing a value other than -99 is essential to conditional LINE validation
15791 
15792                  PA_BUDGET_PVT.Get_Latest_BC_Year
15793                      ( p_pa_project_id            => l_project_id
15794                        ,x_latest_encumbrance_year => PA_BUDGET_PUB.G_Latest_Encumbrance_Year
15795                        ,x_return_status           => p_return_status
15796                        ,x_msg_count               => p_msg_count
15797                        ,x_msg_data                => p_msg_data
15798                       );
15799 
15800 
15801                  -- calling api above adds the error message to stack hence not adding the error message here.
15802                  IF p_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
15803                  THEN
15804                    IF l_debug_mode = 'Y' THEN
15805                         pa_debug.g_err_stage:= 'Get_Latest_BC_Year returned unexp error';
15806                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15807                    END IF;
15808                    RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
15809                  ELSIF p_return_status = FND_API.G_RET_STS_ERROR
15810                  THEN
15811                    IF l_debug_mode = 'Y' THEN
15812                         pa_debug.g_err_stage:= 'Get_Latest_BC_Year returned  error';
15813                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15814                    END IF;
15815                    RAISE  FND_API.G_EXC_ERROR;
15816                  END IF;
15817 
15818             END IF; --(nvl(l_fck_req_flag,'N') = 'Y')
15819 
15820        END IF;  -- p_budget_type_code IS NOT NULL
15821 
15822 
15823    END IF;  -- p_update_db_flag = 'Y'
15824 
15825     -- End Bug 4588279, 27-SEP-05, jwhite -------------------------------------------------
15826 
15827 
15828 
15829 
15830     -- Read all budget lines  - Begin Budget lines loop
15831 
15832     l_line_ctr   := 0;
15833 
15834     IF l_context = l_context_finplan THEN
15835        l_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(l_budget_version_id);
15836     END IF;
15837 
15838      OPEN  budget_version_info_cur(l_budget_version_id);
15839      FETCH budget_version_info_cur INTO budget_version_info_rec;
15840      close budget_version_info_cur;
15841 
15842     --Set this variable to 'N' initially. This would be set to Yes if for some budget lines client extensions are not called.
15843     l_bdgt_lines_skip_flag := 'N';
15844 
15845     OPEN l_resource_assignment_csr (l_budget_version_id,l_context);
15846     LOOP
15847 
15848          FETCH l_resource_assignment_csr BULK COLLECT INTO
15849              l_rowid_tbl
15850             ,l_budget_line_id_tbl
15851             ,l_txn_currency_code_tbl
15852             ,l_res_assignment_id_tbl
15853             ,l_task_id_tbl
15854             ,l_rate_based_flag_tbl
15855             ,l_resource_list_id_tbl
15856             ,l_resource_list_member_id_tbl
15857             ,l_resource_id_tbl
15858             ,l_resource_name_tbl
15859             ,l_start_date_tbl
15860             ,l_end_date_tbl
15861             ,l_period_name_tbl
15862             ,l_quantity_tbl
15863             ,l_display_quantity_tbl --IPM Arch Enhancement Bug 4865563
15864             ,l_txn_raw_cost_tbl
15865             ,l_txn_burdened_cost_tbl
15866             ,l_txn_revenue_tbl
15867             ,l_project_raw_cost_tbl
15868             ,l_project_burdened_cost_tbl
15869             ,l_project_revenue_tbl
15870             ,l_projfunc_raw_cost_tbl
15871             ,l_projfunc_burdened_cost_tbl
15872             ,l_projfunc_revenue_tbl
15873          LIMIT l_plsql_max_array_size;
15874 
15875          IF(l_debug_mode='Y') THEN
15876                pa_debug.g_err_stage := 'fetched ' || sql%rowcount || ' records';
15877                pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15878          END IF;
15879 
15880          -- For each of the budget line fetched call client extension apis
15881 
15882          IF NVL(l_rowid_tbl.last,0) >= 1 THEN  /* Only if something is fetched */
15883            FOR i IN l_rowid_tbl.first .. l_rowid_tbl.last
15884            LOOP
15885                 l_line_ctr := l_line_ctr + 1;
15886                 l_task_name := NULL;
15887 		  l_pm_task_reference := NULL;
15888                 -- Get the pm_task_reference for the task_id
15889 		  -- Bug # 14794301 - added 'AND l_task_id_tbl(i) <> 0' .Task_id = 0 for a project level task.
15890 		  -- But records for tasks with task_id = 0 will not be present in pa_tasks table
15891                 IF l_entry_level <> 'P'  AND l_task_id_tbl(i) <> 0 THEN /* 2207733 do this check only if budget is not at project level other valid
15892                                                 values are 'L', 'M', and 'P' */
15893                      --OPEN l_task_csr (l_resource_assignment_rec.task_id);
15894                      OPEN  l_task_csr (l_task_id_tbl(i));
15895                      FETCH l_task_csr INTO l_pm_task_reference
15896                                           ,l_task_name; -- Bug 2863564
15897                           IF l_task_csr%NOTFOUND THEN
15898                               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15899                                   pa_interface_utils_pub.map_new_amg_msg
15900                                   ( p_old_message_code => 'PA_TASK_ID_INVALID'
15901                                    ,p_msg_attribute    => 'CHANGE'
15902                                    ,p_resize_flag      => 'N'
15903                                    ,p_msg_context      => 'PROJ'
15904                                    ,p_attribute1       => l_amg_project_rec.segment1
15905                                    ,p_attribute2       => ''
15906                                    ,p_attribute3       => ''
15907                                    ,p_attribute4       => ''
15908                                    ,p_attribute5       => '');
15909                               END IF;
15910                               --CLOSE l_task_csr;  -- Close cursor will be invoked twice because Exception is not thrown here.
15911                               p_multiple_task_msg   := 'F';
15912                               --  RAISE FND_API.G_EXC_ERROR;
15913                           END IF;
15914                      CLOSE l_task_csr;
15915                 END IF; /* 2207733 */
15916 
15917 
15918                 p_calc_budget_lines_out(l_line_ctr).pa_task_id              := l_task_id_tbl(i);
15919                 p_calc_budget_lines_out(l_line_ctr).pm_task_reference       := l_pm_task_reference;
15920                 p_calc_budget_lines_out(l_line_ctr).resource_alias          := l_resource_name_tbl(i);
15921                 p_calc_budget_lines_out(l_line_ctr).resource_list_member_id := l_resource_list_member_id_tbl(i);
15922                 p_calc_budget_lines_out(l_line_ctr).budget_start_date       := l_start_date_tbl(i);
15923                 p_calc_budget_lines_out(l_line_ctr).budget_end_date         := l_end_date_tbl(i);
15924                 p_calc_budget_lines_out(l_line_ctr).period_name             := l_period_name_tbl(i);
15925                 p_calc_budget_lines_out(l_line_ctr).quantity                := l_quantity_tbl(i);
15926                 p_calc_budget_lines_out(l_line_ctr).display_quantity        := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
15927                 p_calc_budget_lines_out(l_line_ctr).txn_currency_code       := l_txn_currency_code_tbl(i);
15928 
15929                 -- Fix: 03-FEB-97, jwhite
15930                 -- Added line to populate line return status. ---------------------------
15931                 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_SUCCESS;
15932                 -- ------------------------------------------------------------------------------
15933 
15934                 l_calculated_raw_cost        := l_txn_raw_cost_tbl(i);
15935                 l_calculated_burdened_cost   := l_txn_burdened_cost_tbl(i);
15936                 l_calculated_revenue         := l_txn_revenue_tbl(i);
15937 
15938                 --Initialize the three override values to null. These would be appropriately set to new derived values depending on
15939                 -- the context.
15940                 l_rw_cost_rate_override_tbl(i) := null;
15941                 l_burden_cst_rate_override_tbl(i) := null;
15942                 l_bill_rate_override_tbl(i) := null;
15943 
15944 
15945                 -- Bug 4588279, 27-SEP-05, jwhite ---------------------
15946                 -- For Update-Mode, Budget-Type-Code and Budgetary Control, issue error for any period record that
15947                 -- falls after the latest encumbrance year.
15948                 --
15949                 -- Implicit Assumptions in following code:
15950                 -- 1) If ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99), then
15951                 --     this is Update-Mode, Budget-Type-Code and Budgetary Control data.
15952                 -- 2) Budgetary control is ONLY for GL periods.
15953                 --
15954 
15955                 -- Initialize Period Year Variable
15956                 l_period_year := NULL;
15957 
15958 
15959                 IF ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99)
15960                    THEN
15961                    -- Budgetary Control Enabled Budget-Type-Code and Update_Mode
15962 
15963                    -- Fetch Period Year for budget LINE Period Name
15964                    OPEN l_budget_periods_csr( l_period_name_tbl(i),'G');
15965 
15966                    FETCH l_budget_periods_csr INTO l_period_year;
15967 
15968                    CLOSE l_budget_periods_csr;
15969 
15970                    -- Test Business Rule
15971                    IF ( l_period_year > PA_BUDGET_PUB.G_Latest_Encumbrance_Year )
15972                      THEN
15973                           pa_utils.add_message
15974                                     ( p_app_short_name  => 'PA'
15975                                       , p_msg_name        => 'PA_BC_ENC_YR_NO_CHG_FUTURE');
15976                           p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_ERROR;
15977                           p_multiple_task_msg   := 'F';
15978                      END IF;
15979 
15980                 END IF;
15981 
15982                 -- End Bug 4588279, 27-SEP-05, jwhite ------------------
15983 
15984 
15985                 --if plan type is FORECAST and for such a forecast version if the ETC start date is greater than start date for
15986                 --any of the budget lines then dont call the extension for these lines. For these lines report the amounts
15987                 -- as such without calling client extesion on these. For other lines for this version we can
15988                 --call the client extensions.
15989                 --Also for a forecast version with ETC start date greater than budget line start date, if time phasing for the
15990                 --forecast version is none then call client extension for such lines.
15991 
15992                 if ( not(budget_version_info_rec.plan_class_code = 'FORECAST' and
15993                          budget_version_info_rec.etc_start_date is not null and   --Added this null check for Bug 3636409
15994                          budget_version_info_rec.etc_start_date > l_start_date_tbl(i) and
15995                          l_time_phased_code is not null and
15996                          l_time_phased_code <> 'N')
15997                      or
15998                      l_context = l_context_budget )
15999                 then
16000                 IF (p_calc_raw_cost_yn = 'Y'   AND
16001                     l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE)
16002                 THEN   -- calculate raw cost
16003 
16004                    Pa_client_Extn_Budget.Calc_Raw_Cost
16005                        (x_budget_version_id         => l_budget_version_id,
16006                         x_project_id                => l_project_id,
16007                         x_task_id                   => l_task_id_tbl(i),
16008                         x_resource_list_member_id   => l_resource_list_member_id_tbl(i),
16009                         x_resource_list_id          => l_resource_list_id_tbl(i),
16010                         x_resource_id               => l_resource_id_tbl(i),
16011                         x_start_date                => l_start_date_tbl(i),
16012                         x_end_date                  => l_end_date_tbl(i),
16013                         x_period_name               => l_period_name_tbl(i),
16014                         x_quantity                  => l_quantity_tbl(i),
16015                         x_raw_cost                  => l_calculated_raw_cost,
16016                         x_pm_product_code           => p_pm_product_code,
16017                         x_error_code                => l_err_code,
16018                         x_error_message             => l_err_message,
16019                         --Added the parameter as part of changes to AMG due to finplan model
16020                         x_txn_currency_code         => l_txn_currency_code_tbl(i));
16021 
16022                    IF l_err_code > 0
16023                    THEN
16024 
16025                        IF l_context = l_context_budget
16026                        THEN
16027                             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16028                             THEN
16029 
16030                                 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16031                                 THEN
16032                                     pa_interface_utils_pub.map_new_amg_msg
16033                                     ( p_old_message_code => 'PA_CALC_RAW_COST_FAILED'
16034                                      ,p_msg_attribute    => 'CHANGE'
16035                                      ,p_resize_flag      => 'N'
16036                                      ,p_msg_context      => 'BUDG'
16037                                      ,p_attribute1       => l_amg_project_rec.segment1
16038                                      ,p_attribute2       => ''
16039                                      ,p_attribute3       => p_budget_type_code
16040                                      ,p_attribute4       => ''
16041                                      ,p_attribute5       => '');
16042                                 ELSE
16043                                     pa_interface_utils_pub.map_new_amg_msg
16044                                     ( p_old_message_code => l_err_stage
16045                                      ,p_msg_attribute    => 'CHANGE'
16046                                      ,p_resize_flag      => 'N'
16047                                      ,p_msg_context      => 'BUDG'
16048                                      ,p_attribute1       => l_amg_project_rec.segment1
16049                                      ,p_attribute2       => ''
16050                                      ,p_attribute3       => p_budget_type_code
16051                                      ,p_attribute4       => ''
16052                                      ,p_attribute5       => '');
16053                                 END IF;
16054 
16055                             END IF;
16056                        ELSE
16057                             PA_UTILS.ADD_MESSAGE(
16058                                    p_app_short_name  => 'PA'
16059                                   ,p_msg_name        => 'PA_FP_CALC_RAW_COST_FAILED'
16060                                   ,p_token1          => 'PROJECT'
16061                                   ,p_value1          => l_amg_project_rec.segment1
16062                                   ,p_token2          => 'TASK'
16063                                   ,p_value2          => l_task_name
16064                                   ,p_token3          => 'PLAN_TYPE'
16065                                   ,p_value3          => l_fin_plan_type_name
16066                                   ,p_token4          => 'SOURCE_NAME'
16067                                   ,p_value4          => l_resource_name_tbl(i)
16068                                   ,p_token5          => 'START_DATE'
16069                                   ,p_value5          => l_start_date_tbl(i)
16070                                   );
16071                        END IF;
16072 
16073                        p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_ERROR;
16074                        p_multiple_task_msg   := 'F';
16075                        --  RAISE FND_API.G_EXC_ERROR;
16076 
16077                    ELSIF l_err_code < 0
16078                    THEN
16079 
16080                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16081                         THEN
16082 
16083                             FND_MSG_PUB.add_exc_msg
16084                                 (  p_pkg_name       => 'PA_CLIENT_EXTN_BUDGET'
16085                                 ,  p_procedure_name => 'CALC_RAW_COST'
16086                                 ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16087 
16088                         END IF;
16089 
16090                         p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
16091                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16092 
16093                    END IF;
16094 
16095                             /* if the Client extn amounts override the rate api derived amounts
16096                              * then re-derive the override rates. This should be done only for finplan model
16097                              */
16098                     if l_fin_plan_type_id is not null then
16099                             IF l_version_type in ('ALL','COST') Then
16100                                 If l_rate_based_flag_tbl(i) = 'N' Then
16101                                         If NVL(l_calculated_raw_cost,0) <> NVL(l_txn_raw_cost_tbl(i),0) Then
16102                                            l_calculated_raw_cost := pa_currency.round_trans_currency_amt1(l_calculated_raw_cost,l_txn_currency_code_tbl(i));
16103                                                 l_quantity_tbl(i) := l_calculated_raw_cost;
16104                                                 l_display_quantity_tbl(i) := null;  --IPM Arch Enhancements Bug 4865563
16105                                                 l_rw_cost_rate_override_tbl(i) := 1;
16106                                                 /* change in raw cost changes the burden cost rate */
16107                                                 If (nvl(l_quantity_tbl(i),0) <> 0 AND nvl(l_quantity_tbl(i),0) <>
16108                                                       nvl(p_calc_budget_lines_out(l_line_ctr).quantity,0)) Then
16109                                                    l_burden_cst_rate_override_tbl(i) := l_txn_burdened_cost_tbl(i)/l_quantity_tbl(i);
16110                                                 End if;
16111                                                 /* change in the quantity changes the bill rate */
16112                                                 If l_version_type = 'ALL' Then
16113                                                       If (nvl(l_quantity_tbl(i),0) <> 0 AND nvl(l_quantity_tbl(i),0) <> nvl(p_calc_budget_lines_out(l_line_ctr).quantity,0)) Then
16114                                                             l_bill_rate_override_tbl(i) := l_txn_revenue_tbl(i)/l_quantity_tbl(i);
16115                                                       End If;
16116                                           End If;
16117                                         End If;
16118                                 Else
16119                                         If NVL(l_calculated_raw_cost,0) <> NVL(l_txn_raw_cost_tbl(i),0) Then
16120                                  l_calculated_raw_cost := pa_currency.round_trans_currency_amt1(l_calculated_raw_cost,l_txn_currency_code_tbl(i));
16121                                            If nvl(l_quantity_tbl(i),0) <> 0 Then
16122                                            --Bug 5006031 Issue 8
16123                                                  If l_calculated_raw_cost = 0 OR l_calculated_raw_cost IS NULL then
16124                                                    l_rw_cost_rate_override_tbl(i) := 0;
16125                                                  Else
16126                                                 l_rw_cost_rate_override_tbl(i) := l_calculated_raw_cost/l_quantity_tbl(i);
16127                                                  End If;
16128                                            End If;
16129                                         End If;
16130                                 End If;
16131                             End If;
16132                     end if; --l_fin_plan_type_id is not null
16133                 END IF;
16134 
16135                 IF (p_calc_burdened_cost_yn = 'Y'   AND
16136                     l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE)
16137                 THEN
16138 
16139                      -- calculate burdened cost. Note that calculated_raw_cost is being
16140                      -- used as the parameter,in case both p_calc_raw_cost_yn and
16141                      -- p_calc_burdened_cost_yn are both set to 'Y'.Calculated_raw_cost
16142                      -- would either hold the newly calculated value or the value from
16143                      -- the database,depending on the value of p_calc_raw_cost_yn flag.
16144 
16145                      Pa_client_Extn_Budget.Calc_burdened_Cost
16146                           ( x_budget_version_id         => l_budget_version_id
16147                            ,x_project_id                => l_project_id
16148                            ,x_task_id                   => l_task_id_tbl(i)
16149                            ,x_resource_list_member_id   => l_resource_list_member_id_tbl(i)
16150                            ,x_resource_list_id          => l_resource_list_id_tbl(i)
16151                            ,x_resource_id               => l_resource_id_tbl(i)
16152                            ,x_start_date                => l_start_date_tbl(i)
16153                            ,x_end_date                  => l_end_date_tbl(i)
16154                            ,x_period_name               => l_period_name_tbl(i)
16155                            ,x_quantity                  => l_quantity_tbl(i)
16156                            ,x_raw_cost                  => l_calculated_raw_cost
16157                            ,x_burdened_cost             => l_calculated_burdened_cost
16158                            ,x_pm_product_code           => p_pm_product_code
16159                            ,x_error_code                => l_err_code
16160                            ,x_error_message             => l_err_message
16161                            --Added the parameter as part of changes to AMG due to finplan model
16162                            ,x_txn_currency_code         => l_txn_currency_code_tbl(i));
16163 
16164                      IF l_err_code > 0
16165                      THEN
16166 
16167                           IF l_context = l_context_budget
16168                           THEN
16169                                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16170                                THEN
16171 
16172                                     IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16173                                     THEN
16174                                         pa_interface_utils_pub.map_new_amg_msg
16175                                         ( p_old_message_code => 'PA_CALC_BURDENED_COST_FAILED'
16176                                          ,p_msg_attribute    => 'CHANGE'
16177                                          ,p_resize_flag      => 'Y'
16178                                          ,p_msg_context      => 'BUDG'
16179                                          ,p_attribute1       => l_amg_project_rec.segment1
16180                                          ,p_attribute2       => ''
16181                                          ,p_attribute3       => p_budget_type_code
16182                                          ,p_attribute4       => ''
16183                                          ,p_attribute5       => '');
16184                                     ELSE
16185                                         pa_interface_utils_pub.map_new_amg_msg
16186                                         ( p_old_message_code => l_err_stage
16187                                          ,p_msg_attribute    => 'CHANGE'
16188                                          ,p_resize_flag      => 'Y'
16189                                          ,p_msg_context      => 'BUDG'
16190                                          ,p_attribute1       => l_amg_project_rec.segment1
16191                                          ,p_attribute2       => ''
16192                                          ,p_attribute3       => p_budget_type_code
16193                                          ,p_attribute4       => ''
16194                                          ,p_attribute5       => '');
16195                                     END IF;
16196 
16197                                END IF;
16198                           ELSE
16199                                PA_UTILS.ADD_MESSAGE(
16200                                       p_app_short_name  => 'PA'
16201                                      ,p_msg_name        => 'PA_FP_CALC_BURD_COST_FAILED'
16202                                      ,p_token1          => 'PROJECT'
16203                                      ,p_value1          => l_amg_project_rec.segment1
16204                                      ,p_token2          => 'TASK'
16205                                      ,p_value2          => l_task_name
16206                                      ,p_token3          => 'PLAN_TYPE'
16207                                      ,p_value3          => l_fin_plan_type_name
16208                                      ,p_token4          => 'SOURCE_NAME'
16209                                      ,p_value4          => l_resource_name_tbl(i)
16210                                      ,p_token5          => 'START_DATE'
16211                                      ,p_value5          => l_start_date_tbl(i)
16212                                      );
16213                           END IF;
16214 
16215                           p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_ERROR;
16216                           p_multiple_task_msg   := 'F';
16217                           --   RAISE FND_API.G_EXC_ERROR;
16218 
16219                      ELSIF l_err_code < 0
16220                      THEN
16221 
16222                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16223                            THEN
16224 
16225                                FND_MSG_PUB.add_exc_msg
16226                                    (  p_pkg_name       => 'PA_CLIENT_EXTN_BUDGET'
16227                                    ,  p_procedure_name => 'CALC_BURDENED_COST'
16228                                    ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16229 
16230                            END IF;
16231 
16232                            p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
16233                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16234 
16235                      END IF;
16236 
16237                            /* re derive the burden cost rate override after calling the client extn  Do it only for finplan model*/
16238                     if l_fin_plan_type_id is not null then
16239                            IF l_version_type in ('ALL','COST') Then
16240                                If NVl(l_calculated_burdened_cost,0) <> NVl(l_txn_burdened_cost_tbl(i),0) Then
16241                                          l_calculated_burdened_cost := pa_currency.round_trans_currency_amt1(l_calculated_burdened_cost,l_txn_currency_code_tbl(i));
16242                                        If nvl(l_quantity_tbl(i),0) <> 0 Then
16243                                        --Bug 5006031 Issue 8
16244                                             If l_rate_based_flag_tbl(i) = 'Y' Then
16245                                                  If l_calculated_burdened_cost = 0 OR l_calculated_burdened_cost IS NULL then
16246                                                    l_burden_cst_rate_override_tbl(i) := 0;
16247                                                  Else
16248                                               l_burden_cst_rate_override_tbl(i) := l_calculated_burdened_cost/l_quantity_tbl(i);
16249                                               End If;
16250                                             End If;
16251                                          --l_display_quantity_tbl(i) := l_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16252                                        End if;
16253                                End if;
16254                            END IF;
16255                    end if; --if l_fin_plan_type_id is not null
16256                 END IF;
16257 
16258                 IF  (p_calc_revenue_yn = 'Y'   AND
16259                      l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST)
16260                 THEN
16261 
16262                      Pa_client_Extn_Budget.Calc_revenue
16263                          ( x_budget_version_id         => l_budget_version_id
16264                           ,x_project_id                => l_project_id
16265                           ,x_task_id                   => l_task_id_tbl(i)
16266                           ,x_resource_list_member_id   => l_resource_list_member_id_tbl(i)
16267                           ,x_resource_list_id          => l_resource_list_id_tbl(i)
16268                           ,x_resource_id               => l_resource_id_tbl(i)
16269                           ,x_start_date                => l_start_date_tbl(i)
16270                           ,x_end_date                  => l_end_date_tbl(i)
16271                           ,x_period_name               => l_period_name_tbl(i)
16272                           ,x_quantity                  => l_quantity_tbl(i)
16273                           ,x_revenue                   => l_calculated_revenue
16274                           ,x_pm_product_code           => p_pm_product_code
16275                           ,x_error_code                => l_err_code
16276                           ,x_error_message             => l_err_message
16277                           --Added the parameter as part of changes to AMG due to finplan model
16278                           ,x_txn_currency_code         => l_txn_currency_code_tbl(i));
16279 
16280 
16281                       IF l_err_code > 0
16282                       THEN
16283 
16284                           IF l_context = l_context_budget
16285                           THEN
16286                                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16287                                THEN
16288 
16289                                    IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16290                                    THEN
16291                                        pa_interface_utils_pub.map_new_amg_msg
16292                                        ( p_old_message_code => 'PA_CALC_REVENUE_FAILED'
16293                                         ,p_msg_attribute    => 'CHANGE'
16294                                         ,p_resize_flag      => 'N'
16295                                         ,p_msg_context      => 'BUDG'
16296                                         ,p_attribute1       => l_amg_project_rec.segment1
16297                                         ,p_attribute2       => ''
16298                                         ,p_attribute3       => p_budget_type_code
16299                                         ,p_attribute4       => ''
16300                                         ,p_attribute5       => '');
16301                                    ELSE
16302                                        pa_interface_utils_pub.map_new_amg_msg
16303                                        ( p_old_message_code => l_err_stage
16304                                         ,p_msg_attribute    => 'CHANGE'
16305                                         ,p_resize_flag      => 'N'
16306                                         ,p_msg_context      => 'BUDG'
16307                                         ,p_attribute1       => l_amg_project_rec.segment1
16308                                         ,p_attribute2       => ''
16309                                         ,p_attribute3       => p_budget_type_code
16310                                         ,p_attribute4       => ''
16311                                         ,p_attribute5       => '');
16312                                    END IF;
16313 
16314                                END IF;
16315                           ELSE
16316                                PA_UTILS.ADD_MESSAGE(
16317                                       p_app_short_name  => 'PA'
16318                                      ,p_msg_name        => 'PA_FP_CALC_REVENUE_FAILED'
16319                                      ,p_token1          => 'PROJECT'
16320                                      ,p_value1          => l_amg_project_rec.segment1
16321                                      ,p_token2          => 'TASK'
16322                                      ,p_value2          => l_task_name
16323                                      ,p_token3          => 'PLAN_TYPE'
16324                                      ,p_value3          => l_fin_plan_type_name
16325                                      ,p_token4          => 'SOURCE_NAME'
16326                                      ,p_value4          => l_resource_name_tbl(i)
16327                                      ,p_token5          => 'START_DATE'
16328                                      ,p_value5          => l_start_date_tbl(i)
16329                                      );
16330                           END IF;
16331 
16332                           p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_ERROR;
16333                           p_multiple_task_msg   := 'F';
16334                           --  RAISE FND_API.G_EXC_ERROR;
16335 
16336                       ELSIF l_err_code < 0
16337                       THEN
16338 
16339                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16340                            THEN
16341 
16342                                FND_MSG_PUB.add_exc_msg
16343                                    (  p_pkg_name       => 'PA_CLIENT_EXTN_BUDGET'
16344                                    ,  p_procedure_name => 'CALC_REVENUE'
16345                                    ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16346 
16347                            END IF;
16348 
16349                            p_calc_budget_lines_out(l_line_ctr).return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
16350                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16351 
16352                       END IF;
16353 
16354                      /* rederive the override rates */
16355                     if l_fin_plan_type_id is not null then
16356                            If l_version_type in ('ALL','REVENUE') Then
16357                                 If l_rate_based_flag_tbl(i) = 'N' Then
16358                                         If NVL(l_calculated_revenue,0) <> NVL(l_txn_revenue_tbl(i),0) Then
16359                                  l_calculated_revenue := pa_currency.round_trans_currency_amt1(l_calculated_revenue, l_txn_currency_code_tbl(i));
16360                                            If l_version_type = 'REVENUE' Then
16361                                                 l_quantity_tbl(i) := l_calculated_revenue;
16362                                                 l_display_quantity_tbl(i) := null;  --IPM Arch Enhancements Bug 4865563
16363                                     l_bill_rate_override_tbl(i) := 1;
16364                                            Else
16365                                                 If nvl(l_quantity_tbl(i),0) <> 0 Then
16366                                                    l_bill_rate_override_tbl(i) := l_calculated_revenue/l_quantity_tbl(i);
16367                                                 End If;
16368                                            End If;
16369                                         End If;
16370                                 Else
16371                                         If NVL(l_calculated_revenue,0) <> NVL(l_txn_revenue_tbl(i),0) Then
16372                                  l_calculated_revenue := pa_currency.round_trans_currency_amt1(l_calculated_revenue,l_txn_currency_code_tbl(i));
16373                                            If nvl(l_quantity_tbl(i),0) <> 0 Then
16374                                             --Bug 5006031 Issue 8
16375                                                  If l_calculated_revenue = 0 OR l_calculated_revenue IS NULL then
16376                                                    l_bill_rate_override_tbl(i) := 0;
16377                                                  Else
16378                                                 l_bill_rate_override_tbl(i) := l_calculated_revenue/l_quantity_tbl(i);
16379                                                  End If;
16380                                            End If;
16381                                         End If;
16382                                 End If;
16383                            End If;
16384                     end if;  --  if l_fin_plan_type_id is not null
16385                  END IF;
16386                 /* Bug 5006031 Issue 8 Start - In IPM, RC drives BC and Rev for amount based transactions
16387                    So, RC cannot be null. BC is copied into RC if RC is null and BC not null.*/
16388             IF (l_context = l_context_finplan AND l_rate_based_flag_tbl(i) = 'N' AND (l_calculated_raw_cost is null OR l_calculated_raw_cost = 0 )
16389             AND (l_calculated_burdened_cost IS NOT NULL OR l_calculated_burdened_cost <> 0)) --IPM Arch Enhancments Bug 4865563
16390             THEN
16391                 IF  (l_txn_raw_cost_tbl(i) is null) then
16392                     l_calculated_raw_cost := l_calculated_burdened_cost;
16393                             IF(l_debug_mode='Y') THEN
16394                                 pa_debug.g_err_stage := 'Assigning BC to RC. When BC is entered by the user, BC is copied to RC ';
16395                                 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16396                             END IF;
16397                  Elsif l_txn_raw_cost_tbl(i) is not null THEN
16398                      l_calculated_burdened_cost := null;
16399                      l_calculated_revenue       := null;
16400                            IF(l_debug_mode='Y') THEN
16401                                pa_debug.g_err_stage := 'When existing RC is nulled out, BC and Rev are also nulled out';
16402                                pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16403                             END IF;
16404                   End IF;
16405                 END IF;
16406                 /* Bug 5006031 Issue 8 End */
16407                 else ----if plan_class_code = 'FORECAST' and budget_version_info_rec.etc_start_date > l_start_date_tbl(i))
16408                           l_bdgt_lines_skip_flag := 'Y';
16409                 end if; --if plan_class_code = 'FORECAST' and budget_version_info_rec.etc_start_date > l_start_date_tbl(i))
16410 
16411 
16412                  -- Populate the budget lines out table with the calculated amounts.
16413 
16414                  p_calc_budget_lines_out(l_line_ctr).quantity                 := l_quantity_tbl(i);
16415                  p_calc_budget_lines_out(l_line_ctr).display_quantity         := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16416                  p_calc_budget_lines_out(l_line_ctr).calculated_raw_cost      := l_calculated_raw_cost;
16417                  p_calc_budget_lines_out(l_line_ctr).calculated_burdened_cost := l_calculated_burdened_cost;
16418                  p_calc_budget_lines_out(l_line_ctr).calculated_revenue       := l_calculated_revenue;
16419 
16420                  -- PC and PFC amounts would be populated only if update_flag = 'Y'
16421                  p_calc_budget_lines_out(l_line_ctr).project_raw_cost         := NULL;
16422                  p_calc_budget_lines_out(l_line_ctr).project_burdened_cost    := NULL;
16423                  p_calc_budget_lines_out(l_line_ctr).project_revenue          := NULL;
16424                  p_calc_budget_lines_out(l_line_ctr).projfunc_raw_cost        := NULL;
16425                  p_calc_budget_lines_out(l_line_ctr).projfunc_burdened_cost   := NULL;
16426                  p_calc_budget_lines_out(l_line_ctr).projfunc_revenue         := NULL;
16427 
16428                  -- Raw_cost, Burdened_cost, Revnue Pl/sql tables should be updated with the calculated amounts
16429                  -- to enable mass update out of the pl/sql loop
16430 
16431                  l_txn_raw_cost_tbl(i)          :=   l_calculated_raw_cost;
16432                  l_txn_burdened_cost_tbl(i)     :=   l_calculated_burdened_cost;
16433                  l_txn_revenue_tbl(i)           :=   l_calculated_revenue;
16434 
16435            END LOOP; -- PL/SQL Table loop
16436 
16437            -- Bulk update the budget lines if update flag is set.
16438 
16439            IF p_update_db_flag = 'Y' THEN
16440              IF p_multiple_task_msg <> 'F' THEN
16441                IF l_context = l_context_budget
16442                THEN
16443                     FORALL i IN l_rowid_tbl.first .. l_rowid_tbl.last
16444                     UPDATE    pa_budget_lines
16445                     SET       raw_cost             =    l_txn_raw_cost_tbl(i),
16446                               burdened_cost        =    l_txn_burdened_cost_tbl(i),
16447                               revenue              =    l_txn_revenue_tbl(i),
16448                               last_update_date     =    SYSDATE,
16449                               last_updated_by      =    G_USER_ID,
16450                               last_update_login    =    G_LOGIN_ID
16451                     WHERE     rowid                =    l_rowid_tbl(i);
16452                ELSE
16453                     FORALL i IN l_rowid_tbl.first .. l_rowid_tbl.last
16454                     UPDATE    pa_budget_lines
16455                     SET       quantity                  =    l_quantity_tbl(i),
16456                               display_quantity          =    l_display_quantity_tbl(i), --IPM Arch Enhancements Bug 4865563
16457                               txn_raw_cost              =    l_txn_raw_cost_tbl(i),
16458                               txn_burdened_cost         =    l_txn_burdened_cost_tbl(i),
16459                               txn_revenue               =    l_txn_revenue_tbl(i),
16460                               txn_cost_rate_override    =    decode(l_rw_cost_rate_override_tbl(i), null, txn_cost_rate_override,
16461                                                                     l_rw_cost_rate_override_tbl(i)),
16462                               burden_cost_rate_override =    decode(l_burden_cst_rate_override_tbl(i), null, burden_cost_rate_override,
16463                                                                     l_burden_cst_rate_override_tbl(i)),
16464                               txn_bill_rate_override    =    decode (l_bill_rate_override_tbl(i), null, txn_bill_rate_override,
16465                                                                      l_bill_rate_override_tbl(i)),
16466                               last_update_date          =    SYSDATE,
16467                               last_updated_by           =    G_USER_ID,
16468                               last_update_login         =    G_LOGIN_ID
16469                     WHERE     rowid                     =    l_rowid_tbl(i);
16470                END IF;
16471              END IF;
16472            END IF;
16473          END IF; -- if any records are fetched
16474 
16475          EXIT WHEN nvl(l_rowid_tbl.last,0) < l_plsql_max_array_size;
16476     END LOOP;
16477     CLOSE l_resource_assignment_csr;
16478 
16479     IF p_multiple_task_msg = 'F'
16480     THEN
16481        RAISE  FND_API.G_EXC_ERROR;
16482     END IF;
16483 
16484     IF p_update_db_flag = 'Y' THEN
16485 
16486          IF l_context = l_context_budget THEN --Bug 2863564
16487 
16488               -- Bug 2863564
16489               -- Call to MRC apis should be done only in case of old 'BUDGETS' model
16490               -- for NEW Financial Planning Model, this would be taken care by
16491               -- the api pa_fp_edit_line_pkg. PROCESS_BDGTLINES_FOR_VERSION
16492 
16493               -- Bug Fix: 4569365. Removed MRC code.
16494               /*
16495               IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS IS NULL
16496               THEN
16497                      PA_MRC_FINPLAN.CHECK_MRC_INSTALL
16498                                (x_return_status => p_return_status,
16499                                 x_msg_count     => p_msg_count,
16500                                 x_msg_data      => p_msg_data);
16501               END IF;
16502 
16503               IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
16504                  PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A'
16505               THEN
16506                    PA_MRC_FINPLAN.MAINTAIN_ALL_MC_BUDGET_LINES
16507                          ( p_fin_plan_version_id    =>     l_budget_version_id
16508                           ,p_entire_version         =>     'Y'
16509                           ,x_return_status          =>     p_return_status
16510                           ,x_msg_count              =>     p_msg_count
16511                           ,x_msg_data               =>     p_msg_data);
16512               END IF;
16513 
16514               IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16515                 IF(l_debug_mode='Y') THEN
16516                       pa_debug.g_err_stage := 'MRC failed';
16517                       pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16518                 END IF;
16519                 RAISE FND_API.G_EXC_ERROR;
16520               END IF;
16521               */
16522               --Summarizing the totals in the table pa_budget_versions
16523 
16524               PA_BUDGET_UTILS.summerize_project_totals
16525                        (x_budget_version_id  =>  l_budget_version_id,
16526                         x_err_code           =>  l_err_code,
16527                         x_err_stage          =>  l_err_stage,
16528                         x_err_stack          =>  l_err_stack);
16529 
16530               IF l_err_code > 0
16531               THEN
16532 
16533                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16534                    THEN
16535 
16536                        IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16537                        THEN
16538                            pa_interface_utils_pub.map_new_amg_msg
16539                            ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
16540                             ,p_msg_attribute    => 'CHANGE'
16541                             ,p_resize_flag      => 'N'
16542                             ,p_msg_context      => 'BUDG'
16543                             ,p_attribute1       => l_amg_project_rec.segment1
16544                             ,p_attribute2       => ''
16545                             ,p_attribute3       => p_budget_type_code
16546                             ,p_attribute4       => ''
16547                             ,p_attribute5       => '');
16548                        ELSE
16549                            pa_interface_utils_pub.map_new_amg_msg
16550                            ( p_old_message_code => l_err_stage
16551                             ,p_msg_attribute    => 'CHANGE'
16552                             ,p_resize_flag      => 'N'
16553                             ,p_msg_context      => 'BUDG'
16554                             ,p_attribute1       => l_amg_project_rec.segment1
16555                             ,p_attribute2       => ''
16556                             ,p_attribute3       => p_budget_type_code
16557                             ,p_attribute4       => ''
16558                             ,p_attribute5       => '');
16559                        END IF;
16560 
16561                    END IF;
16562 
16563                    IF(l_debug_mode='Y') THEN
16564                          pa_debug.g_err_stage := 'summerize_project_totals api failed';
16565                          pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16566                    END IF;
16567 
16568                    RAISE FND_API.G_EXC_ERROR;
16569 
16570               ELSIF l_err_code < 0
16571               THEN
16572 
16573                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16574                   THEN
16575 
16576                       FND_MSG_PUB.add_exc_msg
16577                           (  p_pkg_name       => 'PA_BUDGET_UTILS'
16578                           ,  p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
16579                           ,  p_error_text     => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16580 
16581                   END IF;
16582 
16583                   IF(l_debug_mode='Y') THEN
16584                         pa_debug.g_err_stage := 'summerize_project_totals api failed with unexpected error ';
16585                         pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16586                   END IF;
16587                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16588 
16589               END IF;
16590 
16591          ELSIF l_context = l_context_finplan THEN
16592 
16593              -- Bug 2863564
16594              -- Call 'PROCESS_BDGTLINES_FOR_VERSION' api
16595              -- This api does the final processing of budget lines data for a budget version.
16596              -- It includes computing the MC amounts, creating MRC lines if required and
16597              -- rolling up budget lines data, resource_assignments data and period denorm data.
16598 
16599 /*             PA_FP_EDIT_LINE_PKG.PROCESS_BDGTLINES_FOR_VERSION
16600                 (  p_budget_version_id     =>  l_budget_version_id
16601                   ,p_calling_context       =>  PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
16602                   ,x_return_status         =>  p_return_status
16603                   ,x_msg_count             =>  p_msg_count
16604                   ,x_msg_data              =>  p_msg_data );
16605 
16606              IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
16607                   -- Error message is not added here as the api lock_unlock_version
16608                   -- adds the message to stack
16609                   IF(l_debug_mode='Y') THEN
16610                         pa_debug.g_err_stage := 'Failed in locking the version';
16611                         pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16612                   END IF;
16613                   RAISE FND_API.G_EXC_ERROR;
16614              END IF;*/
16615 
16616      /* Call PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY for the MC conversions. */
16617 
16618 
16619         PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY
16620                     ( p_budget_version_id  => l_budget_version_id
16621                      ,p_entire_version     => 'Y'
16622                      ,x_return_status      => p_return_status
16623                      ,x_msg_count          => p_msg_count
16624                      ,x_msg_data           => p_msg_data);
16625 
16626         IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16627            IF l_debug_mode = 'Y' THEN
16628                pa_debug.g_err_stage := 'Call to PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY errored... ';
16629                pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16630            END IF;
16631            RAISE FND_API.G_EXC_ERROR;
16632         END IF;
16633 
16634         --IPM Architecture Enhancement - Start
16635 
16636         PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS
16637                                    (P_BUDGET_VERSION_ID              => l_budget_version_id,
16638                                     X_FP_COLS_REC                    => l_fp_cols_rec,
16639                                     X_RETURN_STATUS                  => p_return_status,
16640                                     X_MSG_COUNT                      => p_msg_count,
16641                                     X_MSG_DATA                       => p_msg_data);
16642 
16643         IF p_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
16644                      IF l_debug_mode = 'Y' THEN
16645                                pa_debug.g_err_stage:= 'Error in PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DETAILS';
16646                                 pa_debug.write(g_module_name,pa_debug.g_err_stage,l_debug_level5);
16647                      END IF;
16648                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
16649         END IF;
16650 
16651         pa_res_asg_currency_pub.maintain_data
16652            (p_fp_cols_rec           => l_fp_cols_rec,
16653             p_calling_module        => 'AMG_API',
16654             p_rollup_flag           => 'Y',
16655             p_version_level_flag    => 'Y',
16656             x_return_status         => p_return_status,
16657             x_msg_data              => p_msg_data,
16658             x_msg_count             => p_msg_count );
16659 
16660         IF p_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
16661                     IF l_debug_mode = 'Y' THEN
16662                          pa_debug.g_err_stage:= 'Error in PA_RES_ASG_CURRENCY_PUB.MAINTAIN_DATA';
16663                          pa_debug.write(g_module_name,pa_debug.g_err_stage,l_debug_level5);
16664                      END IF;
16665                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
16666          END IF;
16667 
16668          --IPM Architecture Enhancement - End
16669 
16670       /* Call the rollup API to rollup the amounts. */
16671       PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION(
16672                  p_budget_version_id => l_budget_version_id
16673                 ,p_entire_version    => 'Y'
16674                 ,x_return_status     => p_return_status
16675                 ,x_msg_count         => p_msg_count
16676                 ,x_msg_data          => p_msg_data    ) ;
16677 
16678 
16679      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16680          IF l_debug_mode = 'Y' THEN
16681              pa_debug.g_err_stage := 'Call to PA_FP_ROLLUP_PKG errored... ';
16682              pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16683          END IF;
16684          RAISE FND_API.G_EXC_ERROR;
16685      END IF;
16686      -- Bug Fix: 4569365. Removed MRC code.
16687      /* Check if MRC is enabled and Call MRC API */
16688      /*
16689      IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS IS NULL THEN
16690         PA_MRC_FINPLAN.CHECK_MRC_INSTALL
16691                    (x_return_status      => p_return_status,
16692                     x_msg_count          => p_msg_count,
16693                     x_msg_data           => p_msg_data);
16694      END IF;
16695 
16696       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16697           IF l_debug_mode = 'Y' THEN
16698              pa_debug.g_err_stage := 'Unexpected exception in checking MRC Install '||sqlerrm;
16699              pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16700           END IF;
16701           RAISE FND_API.G_EXC_ERROR;
16702       END IF;
16703 
16704       IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
16705          PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A' THEN
16706 
16707          PA_MRC_FINPLAN.MAINTAIN_ALL_MC_BUDGET_LINES
16708                 (p_fin_plan_version_id => l_budget_version_id,
16709                  p_entire_version      => 'Y',
16710                  x_return_status       => p_return_status,
16711                  x_msg_count           => p_msg_count,
16712                  x_msg_data            => p_msg_data);
16713       END IF;
16714 
16715       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16716           IF l_debug_mode = 'Y' THEN
16717              pa_debug.g_err_stage := 'Unexpected exception in MRC API '||sqlerrm;
16718              pa_debug.write('Calculate_Amounts: ' || l_module_name,pa_debug.g_err_stage,l_debug_level5);
16719           END IF;
16720           RAISE FND_API.G_EXC_ERROR;
16721       END IF;
16722       */
16723 
16724          -- populating the l_budget_version_id_tbl with p_budget_version_id
16725          l_budget_version_id_tbl := SYSTEM.pa_num_tbl_type(l_budget_version_id);
16726 
16727          -- Call PJI delete api first to delete existing summarization data
16728          PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
16729                  p_fp_version_ids   => l_budget_version_id_tbl,
16730                  x_return_status    => p_return_status,
16731                  x_msg_code         => p_msg_data);
16732 
16733          IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16734                PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
16735                                     p_msg_name            => p_msg_data);
16736                RAISE FND_API.G_EXC_ERROR;
16737          END IF;
16738 
16739          -- Call PLAN_CREATE to create summarization data as per the new RBS
16740          PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
16741                p_fp_version_ids   => l_budget_version_id_tbl,
16742                x_return_status    => p_return_status,
16743                x_msg_code         => p_msg_data);
16744 
16745          IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16746                PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
16747                                     p_msg_name            => p_msg_data);
16748                RAISE FND_API.G_EXC_ERROR;
16749          END IF;
16750 
16751 
16752              -- Bug 2863564 We need to unlock the version
16753 
16754              -- Fetch the record version number of the plan version
16755              l_record_version_number :=
16756                       PA_FIN_PLAN_UTILS.RETRIEVE_RECORD_VERSION_NUMBER(l_budget_version_id);
16757 
16758              PA_FIN_PLAN_PVT.LOCK_UNLOCK_VERSION
16759                   ( p_budget_version_id       => l_budget_version_id
16760                    ,p_record_version_number   => l_record_version_number
16761                    ,p_action                  => 'U'
16762                    ,p_user_id                 => FND_GLOBAL.User_id
16763                    ,p_person_id               => NULL
16764                    ,x_return_status           => p_return_status
16765                    ,x_msg_count               => p_msg_count
16766                    ,x_msg_data                => p_msg_data);
16767 
16768              IF p_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
16769                   -- Error message is not added here as the api lock_unlock_version
16770                   -- adds the message to stack
16771                   IF(l_debug_mode='Y') THEN
16772                         pa_debug.g_err_stage := 'Failed in Unlocking the version';
16773                         pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16774                   END IF;
16775                   RAISE FND_API.G_EXC_ERROR;
16776              END IF;
16777 
16778              -- We need to populate the PC, PFC amounts also in the OUT table
16779              -- in the context of new budgets model. So, open the
16780              -- resource_assignments_cur and repopulate the complete data.
16781              -- NOTE: If there had been any error in the calculation of amounts
16782              -- by the client extension apis, error would have been raised by now
16783              -- Since the program execution has come till here, we can populate
16784              -- return status success for each budget line fetched.
16785 
16786              -- Delete the existing data
16787              p_calc_budget_lines_out.delete;
16788 
16789              -- Intialise l_line_ctr to zero once again
16790              l_line_ctr := 0;
16791 
16792              OPEN l_resource_assignment_csr (l_budget_version_id,l_context);
16793              LOOP
16794 
16795                   FETCH l_resource_assignment_csr BULK COLLECT INTO
16796                       l_rowid_tbl
16797                      ,l_budget_line_id_tbl
16798                      ,l_txn_currency_code_tbl
16799                      ,l_res_assignment_id_tbl
16800                      ,l_task_id_tbl
16801                      ,l_rate_based_flag_tbl
16802                      ,l_resource_list_id_tbl
16803                      ,l_resource_list_member_id_tbl
16804                      ,l_resource_id_tbl
16805                      ,l_resource_name_tbl
16806                      ,l_start_date_tbl
16807                      ,l_end_date_tbl
16808                      ,l_period_name_tbl
16809                      ,l_quantity_tbl
16810                      ,l_display_quantity_tbl --IPM Arch Enhancement Bug 4865563
16811                      ,l_txn_raw_cost_tbl
16812                      ,l_txn_burdened_cost_tbl
16813                      ,l_txn_revenue_tbl
16814                      ,l_project_raw_cost_tbl
16815                      ,l_project_burdened_cost_tbl
16816                      ,l_project_revenue_tbl
16817                      ,l_projfunc_raw_cost_tbl
16818                      ,l_projfunc_burdened_cost_tbl
16819                      ,l_projfunc_revenue_tbl
16820                   LIMIT l_plsql_max_array_size;
16821 
16822                   IF(l_debug_mode='Y') THEN
16823                         pa_debug.g_err_stage := 'fetched ' || sql%rowcount || ' records';
16824                         pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16825                   END IF;
16826 
16827                   IF  NVL(l_rowid_tbl.last,0) >= 1 THEN
16828                      FOR  i IN l_rowid_tbl.first .. l_rowid_tbl.last
16829                      LOOP
16830 
16831                           l_line_ctr := l_line_ctr + 1;
16832 
16833                           p_calc_budget_lines_out(l_line_ctr).pa_task_id               := l_task_id_tbl(i);
16834                           p_calc_budget_lines_out(l_line_ctr).pm_task_reference        := l_pm_task_reference;
16835                           p_calc_budget_lines_out(l_line_ctr).resource_alias           := l_resource_name_tbl(i);
16836                           p_calc_budget_lines_out(l_line_ctr).resource_list_member_id  := l_resource_list_member_id_tbl(i);
16837                           p_calc_budget_lines_out(l_line_ctr).budget_start_date        := l_start_date_tbl(i);
16838                           p_calc_budget_lines_out(l_line_ctr).budget_end_date          := l_end_date_tbl(i);
16839                           p_calc_budget_lines_out(l_line_ctr).period_name              := l_period_name_tbl(i);
16840                           p_calc_budget_lines_out(l_line_ctr).quantity                 := l_quantity_tbl(i);
16841                           p_calc_budget_lines_out(l_line_ctr).display_quantity         := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16842                           p_calc_budget_lines_out(l_line_ctr).txn_currency_code        := l_txn_currency_code_tbl(i);
16843                           p_calc_budget_lines_out(l_line_ctr).return_status            := FND_API.G_RET_STS_SUCCESS;
16844                           p_calc_budget_lines_out(l_line_ctr).calculated_raw_cost      := l_txn_raw_cost_tbl(i);
16845                           p_calc_budget_lines_out(l_line_ctr).calculated_burdened_cost := l_txn_burdened_cost_tbl(i);
16846                           p_calc_budget_lines_out(l_line_ctr).calculated_revenue       := l_txn_revenue_tbl(i);
16847                           p_calc_budget_lines_out(l_line_ctr).project_raw_cost         := l_project_raw_cost_tbl(i);
16848                           p_calc_budget_lines_out(l_line_ctr).project_burdened_cost    := l_project_burdened_cost_tbl(i);
16849                           p_calc_budget_lines_out(l_line_ctr).project_revenue          := l_project_revenue_tbl(i);
16850                           p_calc_budget_lines_out(l_line_ctr).projfunc_raw_cost        := l_projfunc_raw_cost_tbl(i);
16851                           p_calc_budget_lines_out(l_line_ctr).projfunc_burdened_cost   := l_projfunc_burdened_cost_tbl(i);
16852                           p_calc_budget_lines_out(l_line_ctr).projfunc_revenue         := l_projfunc_revenue_tbl(i);
16853 
16854                      END LOOP;
16855                   END IF;
16856 
16857                   EXIT WHEN  NVL(l_rowid_tbl.last,0) < l_plsql_max_array_size;
16858              END LOOP;
16859              CLOSE l_resource_assignment_csr;
16860          END IF;
16861 
16862     END IF;
16863 
16864     if( l_bdgt_lines_skip_flag = 'Y')
16865     then
16866            PA_UTILS.ADD_MESSAGE
16867                ( p_app_short_name => 'PA'
16868                 ,p_msg_name       => 'PA_FP_ETC_BL_DATE'
16869                );
16870     end if;
16871 
16872 
16873     IF FND_API.TO_BOOLEAN( p_commit )
16874     THEN
16875            COMMIT;
16876     END IF;
16877 
16878 EXCEPTION
16879 
16880     WHEN FND_API.G_EXC_ERROR
16881     THEN
16882              ROLLBACK TO calculate_amounts_pub;
16883 
16884              p_return_status := FND_API.G_RET_STS_ERROR;
16885 
16886              FND_MSG_PUB.Count_And_Get
16887                (p_count     =>  p_msg_count ,
16888                 p_data      =>  p_msg_data  );
16889 
16890     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
16891     THEN
16892 
16893              ROLLBACK TO calculate_amounts_pub;
16894 
16895              p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16896 
16897              FND_MSG_PUB.Count_And_Get
16898                  (p_count    =>  p_msg_count ,
16899                   p_data     =>  p_msg_data  );
16900     WHEN OTHERS
16901     THEN
16902          ROLLBACK TO calculate_amounts_pub;
16903 
16904          p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16905 
16906          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16907          THEN
16908             FND_MSG_PUB.add_exc_msg
16909               ( p_pkg_name     => G_PKG_NAME
16910                ,p_procedure_name => l_api_name );
16911          END IF;
16912 
16913          FND_MSG_PUB.Count_And_Get
16914              (p_count    =>  p_msg_count ,
16915               p_data     =>  p_msg_data  );
16916 
16917 END Calculate_Amounts;
16918 
16919 
16920 ----------------------------------------------------------------------------------------
16921 --Name:               Init_Calculate_Amounts
16922 --Type:               Procedure
16923 --Description:        This procedure can be used to as part of load/exec/fetch concept
16924 --
16925 --
16926 --Called subprograms:
16927 --
16928 --
16929 --
16930 --
16931 --History:
16932 --    AUTUMN-1996        R. Krishnamurthy       Created
16933 --
16934 --
16935 PROCEDURE Init_Calculate_Amounts IS
16936 BEGIN
16937     FND_MSG_PUB.Initialize;
16938     --  Initialize global table and record types
16939     G_calc_budget_lines_tbl_count   := 0;
16940     G_calc_budget_lines_out_tbl.delete;
16941 END Init_Calculate_Amounts;
16942 
16943 
16944 ----------------------------------------------------------------------------------------
16945 --Name:               Execute_Calculate_Amounts
16946 --Type:               Procedure
16947 --Description:        This procedure can be used to as part of load/exec/fetch concept
16948 --
16949 --
16950 --Called subprograms:
16951 --
16952 --
16953 --
16954 --
16955 --History:
16956 --    AUTUMN-1996        R. Krishnamurthy       Created
16957 --    25-MAR-2003        Rajagopal              Modified for New Fin Plan Model
16958 --
16959 PROCEDURE Execute_Calculate_Amounts
16960 ( p_api_version_number          IN   NUMBER
16961  ,p_commit                      IN   VARCHAR2    := FND_API.G_FALSE
16962  ,p_init_msg_list               IN   VARCHAR2    := FND_API.G_FALSE
16963  ,p_msg_count                   OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
16964  ,p_msg_data                    OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16965  ,p_return_status               OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16966  ,p_tot_budget_lines_calculated OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
16967  ,p_pm_product_code             IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16968  ,p_pa_project_id               IN   NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16969  ,p_pm_project_reference        IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16970  ,p_budget_type_code            IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16971  ,p_calc_raw_cost_yn            IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16972  ,p_calc_burdened_cost_yn       IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16973  ,p_calc_revenue_yn             IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16974  ,p_update_db_flag              IN   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16975   -- Bug 2863564 Parameters required for new Fin Plan Model
16976  ,p_budget_version_id           IN   pa_budget_versions.budget_version_id%TYPE
16977  ,p_fin_plan_type_id            IN   pa_fin_plan_types_b.fin_plan_type_id%TYPE
16978  ,p_fin_plan_type_name          IN   pa_fin_plan_types_tl.name%TYPE
16979  ,p_version_type                IN   pa_budget_versions.version_type%TYPE
16980  ,p_budget_version_number       IN   pa_budget_versions.version_number%TYPE
16981 ) IS
16982 
16983    l_api_name           CONSTANT   VARCHAR2(30) := 'Execute_Calculate_Amounts';
16984    --Bug 2863564 l_return_status      VARCHAR2(1);
16985 
16986 BEGIN
16987 --  Standard begin of API savepoint
16988     SAVEPOINT execute_calculate_amounts;
16989 
16990 --  Standard call to check for call compatibility.
16991 
16992     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
16993                                          p_api_version_number   ,
16994                                          l_api_name             ,
16995                                          G_PKG_NAME             )
16996     THEN
16997     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16998     END IF;
16999 --  Initialize the message table if requested.
17000 
17001     IF FND_API.TO_BOOLEAN( p_init_msg_list )
17002     THEN
17003     FND_MSG_PUB.initialize;
17004     END IF;
17005 --  Set API return status to success
17006     p_return_status := FND_API.G_RET_STS_SUCCESS;
17007     p_tot_budget_lines_calculated := 0;
17008 
17009     Calculate_Amounts
17010      ( p_api_version_number      => p_api_version_number
17011       ,p_commit                  => p_commit
17012       ,p_init_msg_list           => p_init_msg_list
17013       ,p_msg_count               => p_msg_count
17014       ,p_msg_data                => p_msg_data
17015       ,p_return_status           => p_return_status
17016       ,p_pm_product_code         => p_pm_product_code
17017       ,p_pa_project_id           => p_pa_project_id
17018       ,p_pm_project_reference    => p_pm_project_reference
17019       ,p_budget_type_code        => p_budget_type_code
17020       ,p_calc_raw_cost_yn        => p_calc_raw_cost_yn
17021       ,p_calc_burdened_cost_yn   => p_calc_burdened_cost_yn
17022       ,p_calc_revenue_yn         => p_calc_revenue_yn
17023       ,p_update_db_flag          => p_update_db_flag
17024       ,p_calc_budget_lines_out   => G_calc_budget_lines_out_tbl
17025       -- Bug 2863564 new parameters added
17026       ,p_fin_plan_type_name      => p_fin_plan_type_name
17027       ,p_fin_plan_type_id        => p_fin_plan_type_id
17028       ,p_budget_version_number   => p_budget_version_number
17029       ,p_version_type            => p_version_type
17030       ,p_budget_version_id       => p_budget_version_id
17031      );
17032 
17033 
17034     IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17035     THEN
17036 
17037          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17038 
17039     ELSIF p_return_status = FND_API.G_RET_STS_ERROR
17040     THEN
17041         RAISE FND_API.G_EXC_ERROR;
17042     END IF;
17043 
17044     IF G_calc_budget_lines_out_tbl.EXISTS(1) THEN
17045        p_tot_budget_lines_calculated := G_calc_budget_lines_out_tbl.COUNT;
17046     END IF;
17047 
17048     IF fnd_api.to_boolean(p_commit) THEN
17049        COMMIT;
17050     END IF;
17051 EXCEPTION
17052     WHEN FND_API.G_EXC_ERROR THEN
17053          ROLLBACK TO execute_calculate_amounts;
17054          p_return_status := FND_API.G_RET_STS_ERROR;
17055          FND_MSG_PUB.Count_And_Get
17056               (   p_count     =>  p_msg_count ,
17057                   p_data      =>  p_msg_data  );
17058     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
17059          ROLLBACK TO execute_calculate_amounts;
17060          p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17061          FND_MSG_PUB.Count_And_Get
17062               (   p_count     =>  p_msg_count ,
17063                   p_data      =>  p_msg_data  );
17064     WHEN OTHERS THEN
17065          ROLLBACK TO execute_calculate_amounts;
17066          p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17067          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
17068          THEN
17069              FND_MSG_PUB.add_exc_msg
17070                  (  p_pkg_name       => G_PKG_NAME
17071                  ,  p_procedure_name => l_api_name );
17072          END IF;
17073 
17074          FND_MSG_PUB.Count_And_Get
17075          (   p_count     =>  p_msg_count ,
17076              p_data      =>  p_msg_data  );
17077 END Execute_Calculate_Amounts;
17078 
17079 
17080 ----------------------------------------------------------------------------------------
17081 --Name:               fetch_calculate_amounts
17082 --Type:               Procedure
17083 --Description:        This procedure can be used to as part of load/exec/fetch concept
17084 --
17085 --
17086 --Called subprograms:
17087 --
17088 --
17089 --
17090 --
17091 --History:
17092 --    AUTUMN-1996        R. Krishnamurthy       Created
17093 --
17094 --
17095 PROCEDURE fetch_calculate_amounts
17096 ( p_api_version_number        IN      NUMBER
17097  ,p_init_msg_list             IN      VARCHAR2    := FND_API.G_FALSE
17098  ,p_line_index                IN      NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17099  ,p_return_status             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17100  ,p_pa_task_id                OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
17101  ,p_pm_task_reference         OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17102  ,p_budget_start_date         OUT     NOCOPY DATE --File.Sql.39 bug 4440895
17103  ,p_budget_end_date           OUT     NOCOPY DATE --File.Sql.39 bug 4440895
17104  ,p_period_name               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17105  ,p_resource_list_member_id   OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
17106  ,p_quantity                  OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
17107  ,p_resource_alias            OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17108  ,p_calculated_raw_cost       OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
17109  ,p_calculated_burdened_cost  OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
17110  ,p_calculated_revenue        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
17111  ,p_line_return_status        OUT     NOCOPY VARCHAR2
17112  ,p_cbs_element_id            OUT   NOCOPY NUMBER --16604257
17113  ,p_cost_code            OUT   NOCOPY VARCHAR2 --16604257
17114  ) IS --File.Sql.39 bug 4440895
17115 
17116 l_api_name       CONSTANT   VARCHAR2(30)   := 'fetch_calculate_amounts';
17117 
17118 l_index             NUMBER;
17119 i                   NUMBER;
17120 
17121 BEGIN
17122 
17123 --  Standard call to check for call compatibility.
17124 
17125     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
17126                                          p_api_version_number   ,
17127                                          l_api_name             ,
17128                                          G_PKG_NAME             )
17129     THEN
17130 
17131     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17132 
17133     END IF;
17134 
17135 --  Initialize the message table if requested.
17136 
17137     IF FND_API.TO_BOOLEAN( p_init_msg_list )
17138     THEN
17139 
17140     FND_MSG_PUB.initialize;
17141 
17142     END IF;
17143 
17144 --  Set API return status to success
17145 
17146     p_return_status := FND_API.G_RET_STS_SUCCESS;
17147 
17148 --  Check index value,
17149 --  when they don't provide an index we will error out
17150 
17151     IF p_line_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17152     OR p_line_index IS NULL
17153     THEN
17154         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17155         THEN
17156                pa_interface_utils_pub.map_new_amg_msg
17157                ( p_old_message_code => 'PA_BUGDET_LINE_INDEX_MISSING'
17158                 ,p_msg_attribute    => 'CHANGE'
17159                 ,p_resize_flag      => 'Y'
17160                 ,p_msg_context      => 'GENERAL'
17161                 ,p_attribute1       => ''
17162                 ,p_attribute2       => ''
17163                 ,p_attribute3       => ''
17164                 ,p_attribute4       => ''
17165                 ,p_attribute5       => '');
17166         END IF;
17167 
17168         p_return_status := FND_API.G_RET_STS_ERROR;
17169         RAISE FND_API.G_EXC_ERROR;
17170     ELSE
17171         l_index := p_line_index;
17172     END IF;
17173 
17174 -- Fix: 03-FEB-97, jwhite
17175 -- Changed references to correct global table -------------------------------
17176 
17177 --assign global table fields to the outgoing parameter
17178     IF G_calc_budget_lines_out_tbl.EXISTS(l_index) THEN
17179          p_pa_task_id        := G_calc_budget_lines_out_tbl(l_index).pa_task_id;
17180          p_pm_task_reference :=
17181                  G_calc_budget_lines_out_tbl(l_index).pm_task_reference;
17182          p_budget_start_date :=
17183                  G_calc_budget_lines_out_tbl(l_index).budget_start_date;
17184          p_budget_end_date   := G_calc_budget_lines_out_tbl(l_index).budget_end_date;
17185          p_period_name       := G_calc_budget_lines_out_tbl(l_index).period_name;
17186          p_resource_list_member_id         := G_calc_budget_lines_out_tbl(l_index).resource_list_member_id;
17187          p_quantity          := G_calc_budget_lines_out_tbl(l_index).quantity;
17188          p_resource_alias    := G_calc_budget_lines_out_tbl(l_index).resource_alias;
17189          p_calculated_raw_cost :=
17190                  G_calc_budget_lines_out_tbl(l_index).calculated_raw_cost;
17191          p_calculated_burdened_cost :=
17192                  G_calc_budget_lines_out_tbl(l_index).calculated_burdened_cost;
17193          p_calculated_revenue :=
17194                  G_calc_budget_lines_out_tbl(l_index).calculated_revenue;
17195          p_line_return_status := G_calc_budget_lines_out_tbl(l_index).return_status;
17196 		    --Bug 16604257 : CBS RBS Phase 2 API changes
17197 		 p_cbs_element_id		           := G_calc_budget_lines_out_tbl(l_index).cbs_element_id;
17198 		 p_cost_code			           := G_calc_budget_lines_out_tbl(l_index).cost_code;
17199 
17200     END IF;
17201 -- ----------------------------------------------------------------------------------------
17202 
17203 EXCEPTION
17204 
17205     WHEN FND_API.G_EXC_ERROR
17206     THEN
17207       p_return_status := FND_API.G_RET_STS_ERROR;
17208 
17209     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
17210     THEN
17211 
17212       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17213 
17214     WHEN OTHERS THEN
17215 
17216       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17217 
17218       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
17219       THEN
17220           FND_MSG_PUB.add_exc_msg
17221               (  p_pkg_name       => G_PKG_NAME
17222               ,  p_procedure_name => l_api_name );
17223 
17224       END IF;
17225 
17226 END fetch_calculate_amounts;
17227 
17228 
17229 ----------------------------------------------------------------------------------------
17230 --Name:               Clear_Calculate_Amounts
17231 --Type:               Procedure
17232 --Description:        This procedure can be used to as part of load/exec/fetch concept
17233 --
17234 --
17235 --Called subprograms:
17236 --
17237 --
17238 --
17239 --
17240 --History:
17241 --    AUTUMN-1996        R. Krishnamurthy       Created
17242 --
17243 --
17244 PROCEDURE Clear_Calculate_Amounts IS
17245 BEGIN
17246    Init_Calculate_Amounts;
17247 END Clear_Calculate_Amounts;
17248 
17249 ----------------------------------------------------------------------------------------
17250 --Name:               fetch_calculate_amounts
17251 --Type:               Procedure
17252 --Description:        This procedure can be used to as part of load/exec/fetch concept
17253 --
17254 --
17255 --Called subprograms:
17256 --                    fetch_calculate_amounts
17257 --
17258 --History:
17259 --    24-MAR-2003     Rajagopal      Created
17260 --
17261 PROCEDURE fetch_calculate_amounts
17262      ( p_api_version_number         IN   NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17263       ,p_init_msg_list              IN   VARCHAR2    := FND_API.G_FALSE
17264       ,p_line_index                 IN   NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17265       ,p_return_status             OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17266       ,p_pa_task_id                OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17267       ,p_pm_task_reference         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17268       ,p_budget_start_date         OUT   NOCOPY DATE --File.Sql.39 bug 4440895
17269       ,p_budget_end_date           OUT   NOCOPY DATE --File.Sql.39 bug 4440895
17270       ,p_period_name               OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17271       ,p_resource_list_member_id   OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17272       ,p_quantity                  OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17273       ,p_resource_alias            OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17274       ,p_calculated_raw_cost       OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17275       ,p_calculated_burdened_cost  OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17276       ,p_calculated_revenue        OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17277       ,p_line_return_status        OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17278       ,p_txn_currency_code         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17279       ,p_project_raw_cost          OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17280       ,p_project_burdened_cost     OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17281       ,p_project_revenue           OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17282       ,p_projfunc_raw_cost         OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17283       ,p_projfunc_burdened_cost    OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17284       ,p_projfunc_revenue          OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
17285       ,p_display_quantity          OUT   NOCOPY NUMBER  --IPM Arch Enhancement Bug 4865563
17286 	  ,p_cbs_element_id            OUT   NOCOPY NUMBER --16604257
17287       ,p_cost_code            OUT   NOCOPY VARCHAR2 --16604257
17288       ) IS
17289 
17290 l_api_name       CONSTANT   VARCHAR2(30)   := 'fetch_calculate_amounts';
17291 
17292 BEGIN
17293      p_return_status := FND_API.G_RET_STS_SUCCESS;
17294 
17295      -- Call the existing  fetch_calculate_amounts api
17296 
17297      PA_BUDGET_PUB.fetch_calculate_amounts
17298           ( p_api_version_number           =>   p_api_version_number
17299            ,p_init_msg_list                =>   p_init_msg_list
17300            ,p_line_index                   =>   p_line_index
17301            ,p_return_status                =>   p_return_status
17302            ,p_pa_task_id                   =>   p_pa_task_id
17303            ,p_pm_task_reference            =>   p_pm_task_reference
17304            ,p_budget_start_date            =>   p_budget_start_date
17305            ,p_budget_end_date              =>   p_budget_end_date
17306            ,p_period_name                  =>   p_period_name
17307            ,p_resource_list_member_id      =>   p_resource_list_member_id
17308            ,p_quantity                     =>   p_quantity
17309            ,p_resource_alias               =>   p_resource_alias
17310            ,p_calculated_raw_cost          =>   p_calculated_raw_cost
17311            ,p_calculated_burdened_cost     =>   p_calculated_burdened_cost
17312            ,p_calculated_revenue           =>   p_calculated_revenue
17313            ,p_line_return_status           =>   p_line_return_status
17314 		   ,p_cbs_element_id				=>p_cbs_element_id
17315 		    ,p_cost_code					=> p_cost_code);
17316 
17317      IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17318 
17319          RAISE FND_API.G_EXC_ERROR;
17320 
17321      END IF;
17322 
17323      -- Fetch the txn currency code of the budget line
17324 
17325      IF G_calc_budget_lines_out_tbl.EXISTS(p_line_index) THEN
17326 
17327           p_txn_currency_code      := G_calc_budget_lines_out_tbl(p_line_index).txn_currency_code;
17328           p_project_raw_cost       := G_calc_budget_lines_out_tbl(p_line_index).project_raw_cost;
17329           p_project_burdened_cost  := G_calc_budget_lines_out_tbl(p_line_index).project_burdened_cost ;
17330           p_project_revenue        := G_calc_budget_lines_out_tbl(p_line_index).project_revenue;
17331           p_projfunc_raw_cost      := G_calc_budget_lines_out_tbl(p_line_index).projfunc_raw_cost;
17332           p_projfunc_burdened_cost := G_calc_budget_lines_out_tbl(p_line_index).projfunc_burdened_cost;
17333           p_projfunc_revenue       := G_calc_budget_lines_out_tbl(p_line_index).projfunc_revenue;
17334           p_display_quantity       := G_calc_budget_lines_out_tbl(p_line_index).display_quantity;  --IPM Arch Enhancement Bug 4865563
17335 
17336      END IF;
17337 
17338 EXCEPTION
17339 
17340    WHEN FND_API.G_EXC_ERROR
17341    THEN
17342         p_return_status := FND_API.G_RET_STS_ERROR;
17343 
17344    WHEN FND_API.G_EXC_UNEXPECTED_ERROR
17345    THEN
17346 
17347         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17348 
17349    WHEN OTHERS THEN
17350 
17351         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17352 
17353         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
17354         THEN
17355             FND_MSG_PUB.add_exc_msg
17356                 (  p_pkg_name       => G_PKG_NAME
17357                   ,p_procedure_name => l_api_name );
17358 
17359         END IF;
17360 END fetch_calculate_amounts;
17361 
17362 PROCEDURE CREATE_DRAFT_FINPLAN
17363  ( p_api_version_number              IN NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17364   ,p_commit                              IN VARCHAR2          := FND_API.G_FALSE
17365   ,p_init_msg_list                       IN VARCHAR2          := FND_API.G_FALSE
17366   ,p_pm_product_code                 IN pa_budget_versions.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17367   ,p_pm_finplan_reference            IN pa_budget_versions.pm_budget_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17368   ,p_pm_project_reference            IN pa_projects_all. PM_PROJECT_REFERENCE%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17369   ,p_pa_project_id                   IN pa_budget_versions.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17370   ,p_fin_plan_type_id                IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17371   ,p_fin_plan_type_name              IN pa_fin_plan_types_vl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17372   ,p_version_type                    IN pa_budget_versions.version_type%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17373   ,p_time_phased_code                IN pa_proj_fp_options.cost_time_phased_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17374   ,p_resource_list_name              IN pa_resource_lists.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17375   ,p_resource_list_id                IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17376   ,p_fin_plan_level_code             IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17377   ,p_plan_in_multi_curr_flag         IN pa_proj_fp_options.plan_in_multi_curr_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17378   ,p_budget_version_name             IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17379   ,p_description                     IN pa_budget_versions.description%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17380   ,p_change_reason_code              IN pa_budget_versions.change_reason_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17381   ,p_raw_cost_flag                   IN pa_fin_plan_amount_sets.raw_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17382   ,p_burdened_cost_flag              IN pa_fin_plan_amount_sets.burdened_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17383   ,p_revenue_flag                    IN pa_fin_plan_amount_sets.revenue_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17384   ,p_cost_qty_flag                   IN pa_fin_plan_amount_sets.cost_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17385   ,p_revenue_qty_flag                IN pa_fin_plan_amount_sets.revenue_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17386   ,p_all_qty_flag                    IN pa_fin_plan_amount_sets.all_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17387   ,p_create_new_curr_working_flag    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17388   ,p_replace_current_working_flag    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17389   ,p_using_resource_lists_flag       IN   VARCHAR2 DEFAULT 'N'
17390   ,p_finplan_trans_tab               IN pa_budget_pub.FinPlan_Trans_Tab
17391   ,p_attribute_category              IN pa_budget_versions.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17392   ,p_attribute1                      IN pa_budget_versions.attribute1%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17393   ,p_attribute2                      IN pa_budget_versions.attribute2%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17394   ,p_attribute3                      IN pa_budget_versions.attribute3%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17395   ,p_attribute4                      IN pa_budget_versions.attribute4%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17396   ,p_attribute5                      IN pa_budget_versions.attribute5%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17397   ,p_attribute6                      IN pa_budget_versions.attribute6%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17398   ,p_attribute7                      IN pa_budget_versions.attribute7%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17399   ,p_attribute8                      IN pa_budget_versions.attribute8%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17400   ,p_attribute9                      IN pa_budget_versions.attribute9%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17401   ,p_attribute10                     IN pa_budget_versions.attribute10%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17402   ,p_attribute11                     IN pa_budget_versions.attribute11%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17403   ,p_attribute12                     IN pa_budget_versions.attribute12%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17404   ,p_attribute13                     IN pa_budget_versions.attribute13%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17405   ,p_attribute14                     IN pa_budget_versions.attribute14%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17406   ,p_attribute15                     IN pa_budget_versions.attribute15%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17407   ,x_finplan_version_id              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17408   ,x_return_status                   OUT NOCOPY VARCHAR2
17409   ,x_msg_count                       OUT NOCOPY NUMBER
17410   ,x_msg_data                        OUT NOCOPY VARCHAR2
17411  )
17412  IS
17413 
17414 
17415 /* SCALAR VARIABLES */
17416 l_task_number                          pa_tasks.task_number%TYPE;
17417 l_fp_options_id                        pa_proj_fp_options.proj_fp_options_id%TYPE;
17418 l_baselined_version_id                 pa_budget_versions.budget_version_id%TYPE;
17419 l_curr_work_version_id                 pa_budget_versions.budget_version_id%TYPE;
17420 l_amount_set_id                        pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17421 l_struct_elem_version_id               pa_proj_elem_ver_structure.element_version_id%TYPE;
17422 l_cost_amount_set_id                   pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17423 l_rev_amount_set_id                    pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17424 l_all_amount_set_id                    pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17425 l_created_version_id                   pa_budget_versions.budget_version_id%TYPE;
17426 l_plan_pref_code                       pa_proj_fp_options.fin_plan_preference_code%TYPE;
17427 l_uncat_rlmid                          pa_resource_assignments.resource_list_member_id%TYPE;
17428 l_track_as_labor_flag                  pa_resource_list_members.track_as_labor_flag%TYPE;
17429 l_unit_of_measure                      pa_resource_assignments.unit_of_measure%TYPE;
17430 -- Bug Fix: 4569365. Removed MRC code.
17431 -- l_calling_context                      pa_mrc_finplan.g_calling_module%TYPE := PA_FP_CONSTANTS_PKG.G_CREATE_DRAFT;
17432 l_calling_context                      VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CREATE_DRAFT;
17433 
17434 l_plan_tran_context                    VARCHAR2(30);
17435 l_record_version_number                pa_budget_versions.record_version_number%TYPE;
17436 l_mixed_resource_planned_flag          VARCHAR2(1);
17437 l_proj_fp_options_id                   pa_proj_fp_options.proj_fp_options_id%TYPE;
17438 l_CW_version_id                        pa_budget_versions.budget_version_id%TYPE;
17439 l_CW_record_version_number             pa_budget_versions.record_version_number%TYPE;
17440 l_created_ver_rec_ver_num              pa_budget_versions.record_version_number%TYPE;
17441 
17442 l_project_id                           PA_PROJECTS_ALL.PROJECT_ID%TYPE;
17443 l_resource_list_name                   PA_RESOURCE_LISTS.NAME%TYPE;
17444 l_resource_list_id                     PA_RESOURCE_LISTS.resource_list_id%TYPE;
17445 
17446 l_description                          PA_BUDGET_VERSIONS.description%Type;
17447 l_attribute_category                   PA_BUDGET_VERSIONS.attribute_category%Type;
17448 l_attribute1                           PA_BUDGET_VERSIONS.attribute1%Type;
17449 l_attribute2                           PA_BUDGET_VERSIONS.attribute2%Type;
17450 l_attribute3                           PA_BUDGET_VERSIONS.attribute2%Type;
17451 l_attribute4                           PA_BUDGET_VERSIONS.attribute2%Type;
17452 l_attribute5                           PA_BUDGET_VERSIONS.attribute2%Type;
17453 l_attribute6                           PA_BUDGET_VERSIONS.attribute2%Type;
17454 l_attribute7                           PA_BUDGET_VERSIONS.attribute2%Type;
17455 l_attribute8                           PA_BUDGET_VERSIONS.attribute2%Type;
17456 l_attribute9                           PA_BUDGET_VERSIONS.attribute2%Type;
17457 l_attribute10                          PA_BUDGET_VERSIONS.attribute2%Type;
17458 l_attribute11                          PA_BUDGET_VERSIONS.attribute2%Type;
17459 l_attribute12                          PA_BUDGET_VERSIONS.attribute2%Type;
17460 l_attribute13                          PA_BUDGET_VERSIONS.attribute2%Type;
17461 l_attribute14                          PA_BUDGET_VERSIONS.attribute2%Type;
17462 l_attribute15                          PA_BUDGET_VERSIONS.attribute2%Type;
17463 l_pm_finplan_reference                 pa_budget_versions.pm_budget_reference%type;
17464 l_change_reason_code                   pa_budget_versions.change_reason_code%type;
17465 l_budget_version_name                  pa_budget_versions.version_name%type;
17466 l_fin_plan_type_id                     pa_fin_plan_types_b.fin_plan_type_id%TYPE ;
17467 l_fin_plan_type_name                   pa_fin_plan_types_vl.name%TYPE ;
17468 l_version_type                         pa_budget_versions.version_type%TYPE ;
17469 l_fin_plan_level_code                  pa_proj_fp_options.cost_fin_plan_level_code%TYPE ;
17470 l_time_phased_code                     pa_proj_fp_options.cost_time_phased_code%TYPE ;
17471 
17472 L_RAW_COST_FLAG                        VARCHAR2(1);
17473 L_BURDENED_COST_FLAG                   VARCHAR2(1);
17474 L_REVENUE_FLAG                         VARCHAR2(1);
17475 L_COST_QTY_FLAG                        VARCHAR2(1);
17476 L_REVENUE_QTY_FLAG                     VARCHAR2(1);
17477 
17478 L_ALL_QTY_FLAG                         VARCHAR2(1);
17479 L_CREATE_NEW_WORKING_FLAG              VARCHAR2(1);
17480 L_REPLACE_CURRENT_WORKING_FLAG         VARCHAR2(1);
17481 L_USING_RESOURCE_LISTS_FLAG            VARCHAR2(1);
17482 
17483 l_plan_in_multi_curr_flag              pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
17484 l_projfunc_cost_rate_type              pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
17485 l_projfunc_cost_rate_date_typ          pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
17486 l_projfunc_cost_rate_date              pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
17487 l_projfunc_rev_rate_type               pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
17488 l_projfunc_rev_rate_date_typ           pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
17489 l_projfunc_rev_rate_date               pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
17490 l_project_cost_rate_type               pa_proj_fp_options.project_cost_rate_type%TYPE ;
17491 l_project_cost_rate_date_typ           pa_proj_fp_options.project_cost_rate_date_type%TYPE  ;
17492 l_project_cost_rate_date               pa_proj_fp_options.project_cost_rate_date%TYPE ;
17493 l_project_rev_rate_type                pa_proj_fp_options.project_rev_rate_type%TYPE  ;
17494 l_project_rev_rate_date_typ            pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
17495 l_project_rev_rate_date                pa_proj_fp_options.project_rev_rate_date%TYPE ;
17496 
17497 /**PLSQL TABLES**/
17498 l_pm_task_reference_tbl       SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
17499 l_task_elem_version_id_tbl    SYSTEM.pa_num_tbl_type          := SYSTEM.pa_num_tbl_type();
17500 l_task_number_tbl             SYSTEM.PA_VARCHAR2_100_TBL_TYPE := SYSTEM.PA_VARCHAR2_100_TBL_TYPE();
17501 l_project_assignment_id_tbl   SYSTEM.pa_num_tbl_type          := SYSTEM.pa_num_tbl_type();
17502 l_resource_alias_tbl          SYSTEM.PA_VARCHAR2_80_TBL_TYPE  := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
17503 l_pm_res_asgmt_ref_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17504 l_resource_list_member_id_tbl SYSTEM.pa_num_tbl_type          := SYSTEM.pa_num_tbl_type();
17505 l_cbs_element_id_tbl SYSTEM.pa_num_tbl_type          := SYSTEM.pa_num_tbl_type();
17506 l_pm_product_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17507 l_currency_code_tbl           SYSTEM.PA_VARCHAR2_15_TBL_TYPE  := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
17508 l_start_date_tbl              SYSTEM.pa_date_tbl_type         := SYSTEM.pa_date_tbl_type();
17509 l_end_date_tbl                SYSTEM.pa_date_tbl_type         := SYSTEM.pa_date_tbl_type();
17510 
17511 l_quantity_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17512 l_raw_cost_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17513 l_burdened_cost_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17514 l_revenue_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17515 l_fp_version_ids_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17516 
17517 l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17518 l_attribute1_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17519 l_attribute2_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17520 l_attribute3_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17521 l_attribute4_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17522 l_attribute5_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17523 l_attribute6_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17524 l_attribute7_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17525 l_attribute8_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17526 l_attribute9_tbl         SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17527 l_attribute10_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17528 l_attribute11_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17529 l_attribute12_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17530 l_attribute13_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17531 l_attribute14_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17532 l_attribute15_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17533 l_attribute16_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17534 l_attribute17_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17535 l_attribute18_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17536 l_attribute19_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17537 l_attribute20_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17538 l_attribute21_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17539 l_attribute22_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17540 l_attribute23_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17541 l_attribute24_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17542 l_attribute25_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17543 l_attribute26_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17544 l_attribute27_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17545 l_attribute28_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17546 l_attribute29_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17547 l_attribute30_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17548 
17549 /*=======================================================+
17550  | Used to call pa_budget_pvt.get_fin_plan_lines_status. |
17551  +=======================================================*/
17552 l_budget_lines_in        pa_budget_pub.budget_line_in_tbl_type;
17553 l_budget_lines_out       pa_budget_pub.budget_line_out_tbl_type;
17554 
17555 /*===================================================+
17556  | Used to call pa_budget_pvt.validate_budget_lines. |
17557  +===================================================*/
17558 l_res_asg_in_tbl         pa_budget_pub.budget_line_in_tbl_type;
17559 l_res_asg_out_tbl        pa_budget_pub.budget_line_out_tbl_type;
17560 
17561 l_allow_qty_flag         VARCHAR2(1); -- Bug 3825873 Used to call validate_budget_lines
17562 
17563 --fix later
17564 l_pkg_name          VARCHAR2(30)  := 'PA_BUDGET_PUB';
17565 g_module_name       VARCHAR2(100) := 'CREATE_DRAFT_FINPLAN';
17566 l_api_name          VARCHAR2(30)  := 'CREATE_DRAFT_FINPLAN';
17567 l_module_name       VARCHAR2(100) := 'CREATE_DRAFT_FINPLAN';
17568 l_procedure_name    VARCHAR2(30)  := 'CREATE_DRAFT_FINPLAN';
17569 
17570 l_debug_mode        VARCHAR2(1);
17571 l_msg_count         NUMBER := 0;
17572 l_msg_data          VARCHAR2(150);
17573 l_msg_code          VARCHAR2(2000);
17574 l_msg_index_out     NUMBER;
17575 l_return_status     VARCHAR2(1);
17576 
17577 l_user_id           NUMBER :=0;
17578 t_person_id         NUMBER;
17579 t_resource_id       NUMBER;
17580 t_resource_name     VARCHAR2(39);
17581 cnt number:=0;
17582 
17583  -- added for bug Bug 3986129: FP.M Web ADI Dev changes
17584  l_mfc_cost_type_id_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17585  l_etc_method_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
17586  l_spread_curve_id_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17587 
17588  --Added for bug 4224464
17589  l_budget_amount_code             pa_budget_types.budget_amount_code%type;
17590 
17591  l_version_info_rec           pa_fp_gen_amount_utils.fp_cols;
17592 
17593  --Bug 5475184. In the below set, pt stands for "plan type".
17594  l_pt_amount_set_id                    pa_proj_fp_options.cost_amount_set_id%TYPE;
17595  l_pt_raw_cost_flag                    VARCHAR2(1);
17596  l_pt_burdened_flag                    VARCHAR2(1);
17597  l_pt_revenue_flag                     VARCHAR2(1);
17598  l_pt_cost_quantity_flag               VARCHAR2(1);
17599  l_pt_rev_quantity_flag                VARCHAR2(1);
17600  l_pt_all_quantity_flag                VARCHAR2(1);
17601  l_pt_bill_rate_flag                   VARCHAR2(1);
17602  l_pt_cost_rate_flag                   VARCHAR2(1);
17603  l_pt_burden_rate_flag                 VARCHAR2(1);
17604 
17605   l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
17606 BEGIN
17607 
17608     --Standard begin of API savepoint
17609     SAVEPOINT create_draft_finplan_pub;
17610 
17611     x_msg_count := 0;
17612     x_return_status := FND_API.G_RET_STS_SUCCESS;
17613     pa_debug.set_err_stack('PA_BUDGET_PUB.CREATE_DRAFT_FINPLAN');
17614     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
17615     l_debug_mode := NVL(l_debug_mode, 'Y');
17616 
17617     IF ( l_debug_mode = 'Y' )
17618     THEN
17619         pa_debug.set_process(l_procedure_name || 'PLSQL','LOG',l_debug_mode);
17620         pa_debug.g_err_stage:='Entering CREATE_DRAFT_FINPLAN';
17621         pa_debug.write('CREATE_DRAFT_FINPLAN: ' || g_module_name,pa_debug.g_err_stage,2);
17622     END IF;
17623 
17624     l_msg_count := 0;
17625     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
17626     l_module_name :=  'create_draft_finplan' || g_module_name;
17627 
17628     IF ( l_debug_mode = 'Y' )
17629     THEN
17630           pa_debug.set_curr_function( p_function   => 'create_draft_finplan'
17631                                      ,p_debug_mode => l_debug_mode );
17632     END IF;
17633 
17634     l_resource_list_name :=  p_resource_list_name ;
17635 
17636     IF p_resource_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17637             l_resource_list_id        :=   NULL;
17638     ELSE
17639             l_resource_list_id        :=   p_resource_list_id;
17640     END IF;
17641 
17642 
17643     IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17644             l_fin_plan_type_id := NULL;
17645     ELSE
17646             l_fin_plan_type_id              :=   p_fin_plan_type_id ;
17647     END IF;
17648 
17649     IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17650        l_fin_plan_type_name := NULL;
17651     ELSE
17652       l_fin_plan_type_name            :=   p_fin_plan_type_name           ;
17653     END IF;
17654 
17655     IF p_version_type =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17656        l_version_type := NULL;
17657     ELSE
17658       l_version_type                  :=   p_version_type                 ;
17659     END IF;
17660 
17661     IF p_fin_plan_level_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17662        l_fin_plan_level_code := NULL;
17663     ELSE
17664       l_fin_plan_level_code           :=   p_fin_plan_level_code          ;
17665     END IF;
17666 
17667     IF p_time_phased_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17668        l_time_phased_code := NULL;
17669     ELSE
17670       l_time_phased_code              :=   p_time_phased_code             ;
17671 
17672     END IF;
17673 
17674     IF p_plan_in_multi_curr_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17675        l_plan_in_multi_curr_flag := NULL; --Bug 4586948.
17676     ELSE
17677       l_plan_in_multi_curr_flag       :=   p_plan_in_multi_curr_flag      ;
17678     END IF;
17679 
17680     IF p_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17681       l_raw_cost_flag  := 'N';
17682     ELSE
17683       l_raw_cost_flag                 :=   p_raw_cost_flag                ;
17684     END IF;
17685 
17686     IF p_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17687       l_burdened_cost_flag  := 'N';
17688     ELSE
17689       l_burdened_cost_flag            :=   p_burdened_cost_flag           ;
17690     END IF;
17691 
17692     IF p_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17693       l_revenue_flag  := 'N';
17694     ELSE
17695       l_revenue_flag                  :=   p_revenue_flag                 ;
17696     END IF;
17697 
17698     IF p_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17699       l_cost_qty_flag  := 'N';
17700     ELSE
17701       l_cost_qty_flag                 :=   p_cost_qty_flag                ;
17702     END IF;
17703 
17704     IF p_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17705       l_revenue_qty_flag  := 'N';
17706     ELSE
17707       l_revenue_qty_flag              :=   p_revenue_qty_flag             ;
17708     END IF;
17709 
17710     IF p_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17711       l_all_qty_flag  := 'N';
17712     ELSE
17713       l_all_qty_flag                  :=   p_all_qty_flag                 ;
17714     END IF;
17715 
17716     IF p_create_new_curr_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17717       l_create_new_working_flag  := 'N';
17718     ELSE
17719       l_create_new_working_flag       :=   p_create_new_curr_working_flag ;
17720     END IF;
17721 
17722     IF p_replace_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17723       l_replace_current_working_flag  := 'N';
17724     ELSE
17725       l_replace_current_working_flag  :=   p_replace_current_working_flag ;
17726     END IF;
17727 
17728     IF p_using_resource_lists_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17729       l_using_resource_lists_flag  := 'Y';
17730     ELSE
17731       l_using_resource_lists_flag  :=   p_using_resource_lists_flag ;
17732     END IF;
17733 
17734     IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17735     THEN
17736             l_attribute_category := NULL;
17737     ELSE
17738            l_attribute_category := p_attribute_category;
17739     END IF;
17740 
17741     IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17742     THEN
17743             l_attribute1 := NULL;
17744     ELSE
17745             l_attribute1 := p_attribute1;
17746     END IF;
17747     IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17748     THEN
17749             l_attribute2 := NULL;
17750     ELSE
17751             l_attribute2 := p_attribute2;
17752     END IF;
17753     IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17754     THEN
17755             l_attribute3 := NULL;
17756     ELSE
17757             l_attribute3 := p_attribute3;
17758     END IF;
17759     IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17760     THEN
17761             l_attribute4 := NULL;
17762     ELSE
17763             l_attribute4 := p_attribute4;
17764     END IF;
17765 
17766     IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17767     THEN
17768             l_attribute5 := NULL;
17769     ELSE
17770             l_attribute5 := p_attribute5;
17771     END IF;
17772 
17773     IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17774     THEN
17775             l_attribute6 := NULL;
17776     ELSE
17777             l_attribute6 := p_attribute6;
17778     END IF;
17779 
17780     IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17781     THEN
17782             l_attribute7 := NULL;
17783     ELSE
17784             l_attribute7 := p_attribute7;
17785     END IF;
17786 
17787     IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17788     THEN
17789             l_attribute8 := NULL;
17790     ELSE
17791       l_attribute8 := p_attribute8;
17792     END IF;
17793 
17794     IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17795     THEN
17796             l_attribute9 := NULL;
17797     ELSE
17798             l_attribute9 := p_attribute9;
17799     END IF;
17800 
17801     IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17802     THEN
17803             l_attribute10 := NULL;
17804     ELSE
17805             l_attribute10 := p_attribute10;
17806     END IF;
17807 
17808     IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17809     THEN
17810             l_attribute11 := NULL;
17811     ELSE
17812             l_attribute11 := p_attribute11;
17813     END IF;
17814 
17815     IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17816     THEN
17817             l_attribute12 := NULL;
17818     ELSE
17819       l_attribute12 := p_attribute12;
17820     END IF;
17821 
17822     IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17823     THEN
17824             l_attribute13 := NULL;
17825     ELSE
17826       l_attribute13 := p_attribute13;
17827     END IF;
17828 
17829     IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17830     THEN
17831             l_attribute14:= NULL;
17832     ELSE
17833             l_attribute14:= p_attribute14;
17834     END IF;
17835 
17836     IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17837     THEN
17838             l_attribute15 := NULL;
17839     ELSE
17840             l_attribute15 := p_attribute15;
17841     END IF;
17842 
17843     IF p_pm_finplan_reference =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17844     THEN
17845             l_pm_finplan_reference := NULL;
17846     ELSE
17847             l_pm_finplan_reference := p_pm_finplan_reference;
17848     END IF;
17849 
17850     IF p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17851             l_project_id                :=   NULL;
17852     ELSE
17853             l_project_id                :=   p_pa_project_id;
17854     END IF;
17855 
17856     IF p_change_reason_code =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17857     THEN
17858             l_change_reason_code := NULL;
17859     ELSE
17860             l_change_reason_code := p_change_reason_code;
17861     END IF;
17862   -- bug 5031071
17863     IF p_description =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17864     THEN
17865             l_description := NULL;
17866     ELSE
17867             l_description := p_description;
17868     END IF;
17869 
17870 
17871 
17872     l_user_id := FND_GLOBAL.User_id;
17873 
17874     pa_budget_pvt.Validate_Header_Info
17875           ( p_api_version_number            => p_api_version_number
17876            ,p_budget_version_name           => p_budget_version_name
17877            ,p_init_msg_list                 => p_init_msg_list
17878            ,px_pa_project_id                => l_project_id
17879            ,p_pm_project_reference          => p_pm_project_reference
17880            ,p_pm_product_code               => p_pm_product_code
17881            ,p_budget_type_code              => NULL
17882            ,p_entry_method_code             => NULL
17883            ,px_resource_list_name           => l_resource_list_name
17884            ,px_resource_list_id             => l_resource_list_id
17885            ,px_fin_plan_type_id             => l_fin_plan_type_id
17886            ,px_fin_plan_type_name           => l_fin_plan_type_name
17887            ,px_version_type                 => l_version_type
17888            ,px_fin_plan_level_code          => l_fin_plan_level_code
17889            ,px_time_phased_code             => l_time_phased_code
17890            ,px_plan_in_multi_curr_flag      => l_plan_in_multi_curr_flag
17891            ,px_projfunc_cost_rate_type      => l_projfunc_cost_rate_type
17892            ,px_projfunc_cost_rate_date_typ  => l_projfunc_cost_rate_date_typ
17893            ,px_projfunc_cost_rate_date      => l_projfunc_cost_rate_date
17894            ,px_projfunc_rev_rate_type       => l_projfunc_rev_rate_type
17895            ,px_projfunc_rev_rate_date_typ   => l_projfunc_rev_rate_date_typ
17896            ,px_projfunc_rev_rate_date       => l_projfunc_rev_rate_date
17897            ,px_project_cost_rate_type       => l_project_cost_rate_type
17898            ,px_project_cost_rate_date_typ   => l_project_cost_rate_date_typ
17899            ,px_project_cost_rate_date       => l_project_cost_rate_date
17900            ,px_project_rev_rate_type        => l_project_rev_rate_type
17901            ,px_project_rev_rate_date_typ    => l_project_rev_rate_date_typ
17902            ,px_project_rev_rate_date        => l_project_rev_rate_date
17903            ,px_raw_cost_flag                => l_raw_cost_flag
17904            ,px_burdened_cost_flag           => l_burdened_cost_flag
17905            ,px_revenue_flag                 => l_revenue_flag
17906            ,px_cost_qty_flag                => l_cost_qty_flag
17907            ,px_revenue_qty_flag             => l_revenue_qty_flag
17908            ,px_all_qty_flag                 => l_all_qty_flag
17909            ,p_create_new_curr_working_flag  => l_create_new_working_flag
17910            ,p_replace_current_working_flag  => l_replace_current_working_flag
17911            ,p_change_reason_code            => p_change_reason_code
17912            ,p_calling_module                => 'PA_PM_CREATE_DRAFT_BUDGET'
17913            ,p_using_resource_lists_flag     => p_using_resource_lists_flag
17914            ,x_budget_amount_code            => l_budget_amount_code   -- Added for bug 4224464
17915            ,x_msg_count                     => x_msg_count
17916            ,x_msg_data                      => x_msg_data
17917            ,x_return_status                 => x_return_status
17918           );
17919 
17920           IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS )
17921           THEN
17922                RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17923           END IF;
17924 
17925           pa_fin_plan_utils.Get_Curr_Working_Version_Info(
17926                  p_project_id            => l_project_id
17927                 ,p_fin_plan_type_id      => l_fin_plan_type_id
17928                 ,p_version_type          => l_version_type
17929                 ,x_fp_options_id         => l_fp_options_id
17930                 ,x_fin_plan_version_id   => l_curr_work_version_id
17931                 ,x_return_status         => x_return_status
17932                 ,x_msg_count             => x_msg_count
17933                 ,x_msg_data              => x_msg_data );
17934 
17935           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17936               Raise PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17937           END IF;
17938 
17939     IF l_debug_mode = 'Y' THEN
17940          pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,3);
17941     END IF;
17942 
17943     IF (l_curr_work_version_id IS NOT NULL) THEN
17944 
17945         IF nvl(p_replace_current_working_flag,'N')= 'Y' THEN
17946 
17947               l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
17948                                             (p_budget_version_id => l_curr_work_version_id);
17949               l_user_id := FND_GLOBAL.User_id;
17950               pa_fin_plan_pvt.lock_unlock_version
17951                        (p_budget_version_id       => l_curr_work_version_id,
17952                           p_record_version_number   => l_record_version_number,
17953                         p_action                  => 'L',
17954                         p_user_id                 => l_user_id,
17955                         p_person_id               => NULL,
17956                         x_return_status           => x_return_status,
17957                         x_msg_count               => x_msg_count,
17958                         x_msg_data                => x_msg_data
17959                        );
17960 
17961               IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
17962                   IF l_debug_mode = 'Y' THEN
17963                          pa_debug.g_err_stage := 'Error in lock unlock version - cannot delete working version';
17964                          pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,5);
17965                   END IF;
17966                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17967               END IF;
17968 
17969               pa_fin_plan_pub.delete_version
17970                     ( p_project_id            => l_project_id
17971                            ,p_budget_version_id     => l_curr_work_version_id
17972                            ,p_record_version_number => l_record_version_number
17973                            ,x_return_status         => x_return_status
17974                            ,x_msg_count             => x_msg_count
17975                            ,x_msg_data              => x_msg_data
17976                           );
17977               IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS)
17978               THEN
17979                   pa_debug.g_err_stage:= 'Could not delete the current working version';
17980                   IF l_debug_mode = 'Y' THEN
17981                        pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17982                                                 PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
17983                   END IF;
17984                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17985               ELSE
17986                   pa_debug.g_err_stage:= 'Deleted the current working version';
17987                   IF l_debug_mode = 'Y' THEN
17988                          pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17989                                   PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17990                   END IF;
17991               END IF;
17992         END IF; --p_replace_current_working_flag = 'Y'
17993     END IF; -- l_curr_work_version_id IS NOT NULL
17994 
17995     IF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
17996            l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY;
17997     ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
17998           l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY;
17999     ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
18000           l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME;
18001     END IF;
18002 
18003     IF l_debug_mode = 'Y' THEN
18004          pa_debug.g_err_stage:= 'Preference code is [' || l_plan_pref_code || ']';
18005           pa_debug.write(l_procedure_name ||
18006                       g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18007     END IF;
18008 
18009  --Bug 5475184. The below block will be used to get the cost/bill rate flags from the plan type option.
18010          --These flags will be set for the new plan version that will be created instead of always setting
18011          --the value 'Y' for these flags in the plan version. Please note that except for these rate flags, other
18012          --amount flags can be passed as input parameters to this API
18013 
18014          --Get the amount set id from the plan type option.
18015          SELECT DECODE(l_version_type,
18016                        PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST, cost_amount_set_id,
18017                        PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE, revenue_amount_set_id,
18018                        PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL, all_amount_set_id)
18019          INTO   l_pt_amount_set_id
18020          FROM   pa_proj_fp_options
18021          WHERE  project_id=l_project_id
18022          AND    fin_plan_type_id=l_fin_plan_type_id
18023          AND    fin_plan_version_id IS NULL;
18024 
18025          IF l_debug_mode = 'Y' THEN
18026               pa_debug.g_err_stage:= 'Plan Type amount set id is [' || l_pt_amount_set_id || ']';
18027               pa_debug.write(l_procedure_name ||
18028                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18029          END IF;
18030 
18031          --Get the plan type flag values
18032          pa_fin_plan_utils.get_plan_amount_flags (
18033          p_amount_set_id       => l_pt_amount_set_id,
18034          x_raw_cost_flag       => l_pt_raw_cost_flag,
18035          x_burdened_flag       => l_pt_burdened_flag,
18036          x_revenue_flag        => l_pt_revenue_flag,
18037          x_cost_quantity_flag  => l_pt_cost_quantity_flag,
18038          x_rev_quantity_flag   => l_pt_rev_quantity_flag,
18039          x_all_quantity_flag   => l_pt_all_quantity_flag,
18040          x_bill_rate_flag      => l_pt_bill_rate_flag,
18041          x_cost_rate_flag      => l_pt_cost_rate_flag,
18042          x_burden_rate_flag    => l_pt_burden_rate_flag,
18043          x_message_count       => x_msg_count,
18044          x_return_status       => x_return_status,
18045          x_message_data        => x_msg_data);
18046 
18047          IF l_debug_mode = 'Y' THEN
18048               pa_debug.g_err_stage:= 'Return status from pa_fin_plan_utils.get_plan_amount_flags is [' || x_return_status || ']';
18049               pa_debug.write(l_procedure_name ||
18050                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18051 
18052               pa_debug.g_err_stage:= 'l_pt_bill_rate_flag is [' || l_pt_bill_rate_flag || ']';
18053               pa_debug.write(l_procedure_name ||
18054                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18055 
18056               pa_debug.g_err_stage:= 'l_pt_cost_rate_flag is [' || l_pt_cost_rate_flag || ']';
18057               pa_debug.write(l_procedure_name ||
18058                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18059 
18060               pa_debug.g_err_stage:= 'l_pt_burden_rate_flag is [' || l_pt_burden_rate_flag || ']';
18061               pa_debug.write(l_procedure_name ||
18062                            g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18063 
18064          END IF;
18065 
18066          IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS)    THEN
18067 
18068            pa_debug.g_err_stage:= 'pa_fin_plan_utils.get_plan_amount_flags returned error';
18069            IF l_debug_mode = 'Y' THEN
18070                 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
18071                                          PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18072            END IF;
18073            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18074 
18075          END IF;
18076 
18077          --Bug 5475184. End of derivation logic for bill/cost rate flags from plan type option.
18078 
18079 /* Bug 5478041: Modified the following 6 variables from parameterized variables to
18080    local variables : l_raw_cost_flag,l_burdened_cost_flag,l_revenue_flag,l_cost_qty_flag
18081    l_revenue_qty_flag and l_all_qty_flag*/
18082 
18083     pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID
18084     (
18085              p_raw_cost_flag            => l_raw_cost_flag
18086             ,p_burdened_cost_flag       => l_burdened_cost_flag
18087             ,p_revenue_flag             => l_revenue_flag
18088             ,p_cost_qty_flag            => l_cost_qty_flag
18089             ,p_revenue_qty_flag         => l_revenue_qty_flag
18090             ,p_all_qty_flag             => l_all_qty_flag
18091             ,p_plan_pref_code           => l_plan_pref_code
18092             ,p_bill_rate_flag           => /*'Y'*/ l_pt_bill_rate_flag   --Bug 5475184
18093             ,p_cost_rate_flag           => /*'Y'*/ l_pt_cost_rate_flag   --Bug 5475184
18094             ,p_burden_rate_flag         => /*'Y'*/ l_pt_burden_rate_flag --Bug 5475184
18095             ,x_cost_amount_set_id       => l_cost_amount_set_id
18096             ,x_revenue_amount_set_id    => l_rev_amount_set_id
18097             ,x_all_amount_set_id        => l_all_amount_set_id
18098             ,x_message_count            => x_msg_count
18099             ,x_return_status            => x_return_status
18100             ,x_message_data             => x_msg_data
18101     );
18102     IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
18103               IF l_debug_mode = 'Y' THEN
18104                      pa_debug.g_err_stage := 'Error in pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID';
18105                      pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,5);
18106               END IF;
18107               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18108     END IF;
18109 
18110     -- bug 3825873 populating l_allow_qty_flag to call validate_budget_lines
18111 
18112     IF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST)
18113     THEN
18114             l_amount_set_id := l_cost_amount_set_id;
18115             l_allow_qty_flag := l_cost_qty_flag; -- p_cost_qty_flag; Bug 5478041
18116     ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE)
18117     THEN
18118             l_amount_set_id := l_rev_amount_set_id;
18119             l_allow_qty_flag := l_revenue_qty_flag; -- p_revenue_qty_flag;Bug 5478041
18120     ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL)
18121     THEN
18122             l_amount_set_id := l_all_amount_set_id;
18123             l_allow_qty_flag := l_all_qty_flag; -- p_all_qty_flag; Bug 5478041
18124     END IF;
18125 
18126     IF l_debug_mode = 'Y' THEN
18127         pa_debug.g_err_stage:= 'Amount set id is [' || l_amount_set_id || ']';
18128         pa_debug.write(l_procedure_name ||
18129                           g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18130     END IF;
18131 
18132     l_struct_elem_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
18133 
18134     IF l_debug_mode = 'Y' THEN
18135            pa_debug.g_err_stage:= 'l_struct_elem_version_id is [' || l_struct_elem_version_id || ']';
18136            pa_debug.write(l_procedure_name ||
18137                           g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18138     END IF;
18139 
18140     l_created_version_id := NULL;
18141 
18142 
18143     IF l_debug_mode = 'Y' THEN
18144            pa_debug.g_err_stage:= 'Calling Create_Version';
18145            pa_debug.write(l_procedure_name ||
18146                           g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18147     END IF;
18148 
18149 --dbms_output.put_line('calling pa_fin_plan_pub.Create_Version');
18150     pa_fin_plan_pub.Create_Version (
18151              p_project_id               => l_project_id
18152             ,p_fin_plan_type_id         => l_fin_plan_type_id
18153             ,p_element_type             => l_version_type
18154             ,p_version_name             => p_budget_version_name
18155             ,p_description              => l_description  -- bug 5031071
18156             ,p_ci_id                    => NULL
18157             ,p_est_proj_raw_cost        => NULL
18158             ,p_est_proj_bd_cost         => NULL
18159             ,p_est_proj_revenue         => NULL
18160             ,p_est_qty                  => NULL
18161             ,p_est_equip_qty            => NULL
18162             ,p_impacted_task_id         => NULL
18163             ,p_agreement_id             => NULL
18164             ,p_calling_context          => l_calling_context
18165             ,p_resource_list_id         => l_resource_list_id
18166             ,p_time_phased_code         => l_time_phased_code
18167             ,p_fin_plan_level_code      => l_fin_plan_level_code /* Bug 6085160 p_fin_plan_level_code */
18168             ,p_plan_in_multi_curr_flag  => l_plan_in_multi_curr_flag /*Bug 4290310. p_plan_in_multi_curr_flag. Passing the
18169             l_plan_in_multi_curr_flag as create_version doesnt handle the conversion of G_MISS_XXX values for this variable. Also
18170             l_plan_in_multi_curr_flag is a validated o/p variable from validate_header_info*/
18171             ,p_amount_set_id            => l_amount_set_id
18172             ,p_attribute_category       => l_attribute_category
18173             ,p_attribute1               => l_attribute1
18174             ,p_attribute2               => l_attribute2
18175             ,p_attribute3               => l_attribute3
18176             ,p_attribute4               => l_attribute4
18177             ,p_attribute5               => l_attribute5
18178             ,p_attribute6               => l_attribute6
18179             ,p_attribute7               => l_attribute7
18180             ,p_attribute8               => l_attribute8
18181             ,p_attribute9               => l_attribute9
18182             ,p_attribute10              => l_attribute10
18183             ,p_attribute11              => l_attribute11
18184             ,p_attribute12              => l_attribute12
18185             ,p_attribute13              => l_attribute13
18186             ,p_attribute14              => l_attribute14
18187             ,p_attribute15              => l_attribute15
18188             ,px_budget_version_id       => l_created_version_id
18189             ,p_struct_elem_version_id   => NULL --l_struct_elem_version_id commented for bug 5451269
18190             ,p_pm_product_code          => p_pm_product_code
18191             ,p_finplan_reference        => l_pm_finplan_reference
18192             ,p_change_reason_code       => l_change_reason_code
18193             ,x_proj_fp_option_id        => l_fp_options_id
18194             ,x_return_status            => x_return_status
18195             ,x_msg_count                => x_msg_count
18196             ,x_msg_data                 => x_msg_data );
18197 
18198         IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
18199                 pa_debug.g_err_stage:= 'Error Create_Version';
18200                 IF l_debug_mode = 'Y' THEN
18201                    pa_debug.write( l_procedure_name ||
18202                          g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18203                 END IF;
18204                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18205         END IF;
18206 --dbms_output.put_line('after calling pa_fin_plan_pub.Create_Version l_created_version_id is [' || to_char(l_created_version_id) ||']');
18207         /*========================================================+
18208          | Prepare to call pa_budget_pvt.validate_budget_lines()  |
18209          *========================================================*/
18210         IF ( p_finplan_trans_tab.COUNT > 0 )
18211         THEN
18212                FOR i IN p_finplan_trans_tab.FIRST .. p_finplan_trans_tab.LAST
18213                LOOP
18214                     l_res_asg_in_tbl(i).pm_product_code := p_finplan_trans_tab(i).pm_product_code;
18215                     l_res_asg_in_tbl(i).pa_task_id := p_finplan_trans_tab(i).task_id;
18216                     l_res_asg_in_tbl(i).pm_task_reference := p_finplan_trans_tab(i).pm_task_reference;
18217                     l_res_asg_in_tbl(i).resource_alias := p_finplan_trans_tab(i).resource_alias;
18218                     l_res_asg_in_tbl(i).resource_list_member_id := p_finplan_trans_tab(i).resource_list_member_id;
18219 					l_res_asg_in_tbl(i).cbs_element_id := p_finplan_trans_tab(i).cbs_element_id;
18220 					l_res_asg_in_tbl(i).cost_code := p_finplan_trans_tab(i).cost_code;
18221                     l_res_asg_in_tbl(i).budget_start_date := p_finplan_trans_tab(i).start_date;
18222                     l_res_asg_in_tbl(i).budget_end_date := p_finplan_trans_tab(i).end_date;
18223                     l_res_asg_in_tbl(i).raw_cost := p_finplan_trans_tab(i).raw_cost;
18224                     l_res_asg_in_tbl(i).burdened_cost := p_finplan_trans_tab(i).burdened_Cost;
18225                     l_res_asg_in_tbl(i).revenue := p_finplan_trans_tab(i).revenue;
18226                     l_res_asg_in_tbl(i).quantity := p_finplan_trans_tab(i).quantity;
18227                     l_res_asg_in_tbl(i).attribute_category := p_finplan_trans_tab(i).attribute_category;
18228                     l_res_asg_in_tbl(i).txn_currency_code := p_finplan_trans_tab(i).currency_code;
18229                     l_res_asg_in_tbl(i).period_name := NULL;
18230                     l_res_asg_in_tbl(i).description := NULL;
18231                     l_res_asg_in_tbl(i).pm_budget_line_reference := NULL;
18232                     l_res_asg_in_tbl(i).attribute1 := NULL;
18233                     l_res_asg_in_tbl(i).attribute2 := NULL;
18234                     l_res_asg_in_tbl(i).attribute3 := NULL;
18235                     l_res_asg_in_tbl(i).attribute4 := NULL;
18236                     l_res_asg_in_tbl(i).attribute5 := NULL;
18237                     l_res_asg_in_tbl(i).attribute6 := NULL;
18238                     l_res_asg_in_tbl(i).attribute7 := NULL;
18239                     l_res_asg_in_tbl(i).attribute8 := NULL;
18240                     l_res_asg_in_tbl(i).attribute9 := NULL;
18241                     l_res_asg_in_tbl(i).attribute10 := NULL;
18242                     l_res_asg_in_tbl(i).attribute11 := NULL;
18243                     l_res_asg_in_tbl(i).attribute12 := NULL;
18244                     l_res_asg_in_tbl(i).attribute13 := NULL;
18245                     l_res_asg_in_tbl(i).attribute14 := NULL;
18246                     l_res_asg_in_tbl(i).attribute15 := NULL;
18247                     l_res_asg_in_tbl(i).projfunc_cost_rate_type := NULL;
18248                     l_res_asg_in_tbl(i).projfunc_cost_rate_date_type := NULL;
18249                     l_res_asg_in_tbl(i).projfunc_cost_rate_date := NULL;
18250                     l_res_asg_in_tbl(i).projfunc_cost_exchange_rate := NULL;
18251                     l_res_asg_in_tbl(i).projfunc_rev_rate_type := NULL;
18252                     l_res_asg_in_tbl(i).projfunc_rev_rate_date_type := NULL;
18253                     l_res_asg_in_tbl(i).projfunc_rev_rate_date := NULL;
18254                     l_res_asg_in_tbl(i).projfunc_rev_exchange_rate := NULL;
18255                     l_res_asg_in_tbl(i).project_cost_rate_type := NULL;
18256                     l_res_asg_in_tbl(i).project_cost_rate_date_type := NULL;
18257                     l_res_asg_in_tbl(i).project_cost_rate_date := NULL;
18258                     l_res_asg_in_tbl(i).project_cost_exchange_rate := NULL;
18259                     l_res_asg_in_tbl(i).project_rev_rate_type := NULL;
18260                     l_res_asg_in_tbl(i).project_rev_rate_date_type := NULL;
18261                     l_res_asg_in_tbl(i).project_rev_rate_date := NULL;
18262                     l_res_asg_in_tbl(i).project_rev_exchange_rate := NULL;
18263                     l_res_asg_in_tbl(i).change_reason_code := NULL;
18264                END LOOP;
18265 
18266                  l_version_info_rec.x_budget_version_id := l_created_version_id; -- Added for bug 4290310
18267 /* Bug 5478041: Modified the following 3 variables from parameterized variables to
18268    local variables : l_raw_cost_flag,l_burdened_cost_flag,l_revenue_flag */
18269 --dbms_output.put_line('calling pa_budget_pvt.Validate_Budget_Lines');
18270 
18271  	  	  --Get the CBS flag 16604257
18272 	   l_cbs_enabled_project := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => l_project_id);
18273 
18274                   pa_budget_pvt.Validate_Budget_Lines
18275                         (p_calling_context             => 'RES_ASSGNMT_LEVEL_VALIDATION'
18276                         ,p_pa_project_id               => l_project_id
18277                         ,p_budget_type_code            => NULL
18278                         ,p_fin_plan_type_id            => l_fin_plan_type_id
18279                         ,p_version_type                => l_version_type
18280                         ,p_resource_list_id            => l_resource_list_id
18281                         ,p_time_phased_code            => l_time_phased_code
18282                         ,p_budget_entry_method_code    => NULL
18283                         ,p_entry_level_code            => l_fin_plan_level_code --Bug#5510196
18284                         ,p_allow_qty_flag              => l_allow_qty_flag-- bug 3825873 p_cost_qty_flag
18285                         ,p_allow_raw_cost_flag         => l_raw_cost_flag
18286                         ,p_allow_burdened_cost_flag    => l_burdened_cost_flag
18287                         ,p_allow_revenue_flag          => l_revenue_flag
18288                         ,p_multi_currency_flag         => l_plan_in_multi_curr_flag /*Bug 4290310.p_plan_in_multi_curr_flag. Passing
18289            the l_plan_in_multi_curr_flag as validate_budget_lines doesnt handle the conversion of G_MISS_XXX values for this variable.
18290            Also l_plan_in_multi_curr_flag is a validated o/p variable from validate_header_info*/
18291                         ,p_project_cost_rate_type      => NULL
18292                         ,p_project_cost_rate_date_typ  => NULL
18293                         ,p_project_cost_rate_date      => NULL
18294                         ,p_project_cost_exchange_rate  => NULL
18295                         ,p_projfunc_cost_rate_type     => NULL
18296                         ,p_projfunc_cost_rate_date_typ => NULL
18297                         ,p_projfunc_cost_rate_date     => NULL
18298                         ,p_projfunc_cost_exchange_rate => NULL
18299                         ,p_project_rev_rate_type       => NULL
18300                         ,p_project_rev_rate_date_typ   => NULL
18301                         ,p_project_rev_rate_date       => NULL
18302                         ,p_project_rev_exchange_rate   => NULL
18303                         ,p_projfunc_rev_rate_type      => NULL
18304                         ,p_projfunc_rev_rate_date_typ  => NULL
18305                         ,p_projfunc_rev_rate_date      => NULL
18306                         ,p_projfunc_rev_exchange_rate  => NULL
18307                         ,p_version_info_rec            => l_version_info_rec --Added for bug 4290310.
18308                         ,px_budget_lines_in            => l_res_asg_in_tbl
18309                         ,x_budget_lines_out            => l_res_asg_out_tbl
18310                         ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
18311                         ,x_etc_method_code_tbl         => l_etc_method_code_tbl
18312                         ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
18313                         ,x_msg_count                   => l_msg_count
18314                         ,x_msg_data                    => l_msg_data
18315                         ,x_return_status               => l_return_status);
18316 
18317                   IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18318                          --dbms_output.put_line('error occurred while calling pa_budget_pvt.Validate_Budget_Lines');
18319                          RAISE  PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18320                   END IF;
18321 
18322         END IF; -- p_finplan_trans_tab.COUNT > 0
18323 --dbms_output.put_line('after calling pa_budget_pvt.Validate_Budget_Lines');
18324 
18325 /* Calling Add Planning Transaction */
18326 
18327 cnt := P_finplan_trans_tab.COUNT;
18328 
18329 l_task_number_tbl.EXTEND(cnt);
18330 l_task_elem_version_id_tbl.EXTEND(cnt);
18331 l_pm_task_reference_tbl.EXTEND(cnt);
18332 l_resource_list_member_id_tbl.EXTEND(cnt);
18333 l_cbs_element_id_tbl.EXTEND(cnt);  --Bug 16604257 : CBS RBS Phase 2 API changes
18334 l_pm_res_asgmt_ref_tbl.EXTEND(cnt);
18335 l_currency_code_tbl.EXTEND(cnt);
18336 l_pm_product_code_tbl.EXTEND(cnt);
18337 
18338 l_start_date_tbl.EXTEND(cnt);
18339 l_end_date_tbl.EXTEND(cnt);
18340 
18341 l_quantity_tbl.EXTEND(cnt);
18342 l_raw_cost_tbl.EXTEND(cnt);
18343 l_burdened_cost_tbl.EXTEND(cnt);
18344 l_revenue_tbl.EXTEND(cnt);
18345 
18346 l_attribute_category_tbl.EXTEND(cnt);
18347 l_attribute1_tbl.EXTEND(cnt);
18348 l_attribute2_tbl.EXTEND(cnt);
18349 l_attribute3_tbl.EXTEND(cnt);
18350 l_attribute4_tbl.EXTEND(cnt);
18351 l_attribute5_tbl.EXTEND(cnt);
18352 l_attribute6_tbl.EXTEND(cnt);
18353 l_attribute7_tbl.EXTEND(cnt);
18354 l_attribute8_tbl.EXTEND(cnt);
18355 l_attribute9_tbl.EXTEND(cnt);
18356 l_attribute10_tbl.EXTEND(cnt);
18357 l_attribute11_tbl.EXTEND(cnt);
18358 l_attribute12_tbl.EXTEND(cnt);
18359 l_attribute13_tbl.EXTEND(cnt);
18360 l_attribute14_tbl.EXTEND(cnt);
18361 l_attribute15_tbl.EXTEND(cnt);
18362 l_attribute16_tbl.EXTEND(cnt);
18363 l_attribute17_tbl.EXTEND(cnt);
18364 l_attribute18_tbl.EXTEND(cnt);
18365 l_attribute19_tbl.EXTEND(cnt);
18366 l_attribute20_tbl.EXTEND(cnt);
18367 l_attribute21_tbl.EXTEND(cnt);
18368 l_attribute22_tbl.EXTEND(cnt);
18369 l_attribute23_tbl.EXTEND(cnt);
18370 l_attribute24_tbl.EXTEND(cnt);
18371 l_attribute25_tbl.EXTEND(cnt);
18372 l_attribute26_tbl.EXTEND(cnt);
18373 l_attribute27_tbl.EXTEND(cnt);
18374 l_attribute28_tbl.EXTEND(cnt);
18375 l_attribute29_tbl.EXTEND(cnt);
18376 l_attribute30_tbl.EXTEND(cnt);
18377 
18378  IF P_finplan_trans_tab.COUNT > 0 THEN -- Added for Bug 3793370
18379     FOR  i in 1 .. P_finplan_trans_tab.LAST
18380     LOOP
18381           IF ( P_finplan_trans_tab(i).task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18382             OR P_finplan_trans_tab(i).task_id = 0 ) -- Added for Bug 8688677
18383           THEN
18384                   l_task_number_tbl(i) := NULL;
18385           ELSE
18386                   BEGIN
18387                          SELECT t.task_number
18388                            INTO l_task_number
18389                            FROM pa_tasks t
18390                           WHERE t.task_id = P_finplan_trans_tab(i).task_id;
18391                          l_task_number_tbl(i) := l_task_number;
18392 
18393                   EXCEPTION
18394                           WHEN OTHERS THEN
18395                             RAISE;
18396                   END; -- anonymous
18397           END IF;
18398 
18399           IF P_finplan_trans_tab(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18400                   l_pm_task_reference_tbl(i) := NULL;
18401           ELSE
18402                   l_pm_task_reference_tbl(i) := P_finplan_trans_tab(i).pm_task_reference;
18403           END IF;
18404           IF P_finplan_trans_tab(i).CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18405                   l_currency_code_tbl(i) := NULL;
18406           ELSE
18407                   l_currency_code_tbl(i) := P_finplan_trans_tab(i).CURRENCY_CODE;
18408           END IF;
18409 
18410           IF P_finplan_trans_tab(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18411                   l_pm_product_code_tbl(i) := NULL;
18412           ELSE
18413                   l_pm_product_code_tbl(i) := P_finplan_trans_tab(i).pm_product_code;
18414           END IF;
18415 
18416           IF ( P_finplan_trans_tab(i).task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR l_struct_elem_version_id IS NULL
18417             OR P_finplan_trans_tab(i).task_id = 0 ) -- Added for Bug 8688677
18418           THEN
18419                   l_task_elem_version_id_tbl(i) := NULL;
18420           ELSE
18421                   BEGIN
18422                          SELECT element_version_id
18423                            INTO l_task_elem_version_id_tbl(i)
18424                            FROM pa_struct_task_wbs_v
18425                           WHERE parent_structure_version_id = l_struct_elem_version_id
18426                            AND  project_id = l_project_id
18427                            AND  task_id = P_finplan_trans_tab(i).task_id;
18428                   EXCEPTION
18429                       WHEN OTHERS THEN RAISE;
18430                   END; -- anonymous
18431          END IF;
18432 
18433          /* Commented out the code for Bug 5079329.
18434           IF P_finplan_trans_tab(i).resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18435                   l_resource_list_member_id_tbl(i) := NULL;
18436           ELSE
18437                   l_resource_list_member_id_tbl(i) :=  P_finplan_trans_tab(i).resource_list_member_id;
18438           END IF;
18439         */
18440 
18441         /* Added for Bug 5079329*/
18442           l_resource_list_member_id_tbl(i) := l_res_asg_in_tbl(i).resource_list_member_id;
18443 		  l_cbs_element_id_tbl(i) := l_res_asg_in_tbl(i).cbs_element_id;  --Bug 16604257 : CBS RBS Phase 2 API changes
18444 
18445           IF P_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18446                   l_pm_res_asgmt_ref_tbl(i) := NULL;
18447           ELSE
18448                   l_pm_res_asgmt_ref_tbl(i)        :=   P_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE;
18449           END IF;
18450 
18451 
18452           IF P_finplan_trans_tab(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18453                   l_start_date_tbl(i) := NULL;
18454           ELSE
18455                   l_start_date_tbl(i)        :=   P_finplan_trans_tab(i).start_date;
18456           END IF;
18457 
18458           IF P_finplan_trans_tab(i).end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18459                   l_end_date_tbl(i) := NULL;
18460           ELSE
18461                   l_end_date_tbl(i)        :=   P_finplan_trans_tab(i).end_date;
18462           END IF;
18463 
18464           IF P_finplan_trans_tab(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18465                   l_quantity_tbl(i) := NULL;
18466           ELSE
18467                   l_quantity_tbl(i)        :=   P_finplan_trans_tab(i).quantity;
18468           END IF;
18469 
18470           IF P_finplan_trans_tab(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18471                   l_raw_cost_tbl(i) := NULL;
18472           ELSE
18473                   l_raw_cost_tbl(i)        :=   P_finplan_trans_tab(i).raw_cost;
18474           END IF;
18475 
18476           IF P_finplan_trans_tab(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18477                   l_burdened_cost_tbl(i) := NULL;
18478           ELSE
18479                   l_burdened_cost_tbl(i)        :=   P_finplan_trans_tab(i).burdened_cost;
18480           END IF;
18481 
18482           IF P_finplan_trans_tab(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18483                   L_revenue_tbl(i) := NULL;
18484           ELSE
18485                   l_revenue_tbl(i)        :=   P_finplan_trans_tab(i).revenue;
18486           END IF;
18487 
18488 --When descriptive flex fields are not passed set them to NULL
18489 
18490          IF  P_finplan_trans_tab(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18491             l_attribute_category_tbl(i) := NULL;
18492          ELSE
18493             l_attribute_category_tbl(i) := P_finplan_trans_tab(i).attribute_category;
18494          END IF;
18495 
18496          IF  P_finplan_trans_tab(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18497             l_attribute1_tbl(i) := NULL;
18498          ELSE
18499            l_attribute1_tbl(i) := P_finplan_trans_tab(i).attribute1;
18500          END IF;
18501 
18502          IF  P_finplan_trans_tab(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18503             l_attribute2_tbl(i) := NULL;
18504          ELSE
18505            l_attribute2_tbl(i) := P_finplan_trans_tab(i).attribute2;
18506          END IF;
18507 
18508          IF  P_finplan_trans_tab(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18509             l_attribute3_tbl(i) := NULL;
18510          ELSE
18511            l_attribute3_tbl(i) := P_finplan_trans_tab(i).attribute3;
18512          END IF;
18513 
18514          IF  P_finplan_trans_tab(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18515             l_attribute4_tbl(i) := NULL;
18516          ELSE
18517            l_attribute4_tbl(i) := P_finplan_trans_tab(i).attribute4;
18518          END IF;
18519 
18520          IF  P_finplan_trans_tab(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18521             l_attribute5_tbl(i) := NULL;
18522          ELSE
18523            l_attribute5_tbl(i) := P_finplan_trans_tab(i).attribute5;
18524          END IF;
18525 
18526          IF  P_finplan_trans_tab(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18527             l_attribute6_tbl(i) := NULL;
18528          ELSE
18529            l_attribute6_tbl(i) := P_finplan_trans_tab(i).attribute6;
18530          END IF;
18531 
18532          IF  P_finplan_trans_tab(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18533             l_attribute7_tbl(i) := NULL;
18534          ELSE
18535            l_attribute7_tbl(i) := P_finplan_trans_tab(i).attribute7;
18536          END IF;
18537 
18538          IF  P_finplan_trans_tab(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18539             l_attribute8_tbl(i) := NULL;
18540          ELSE
18541            l_attribute8_tbl(i) := P_finplan_trans_tab(i).attribute8;
18542          END IF;
18543 
18544          IF  P_finplan_trans_tab(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18545             l_attribute9_tbl(i) := NULL;
18546          ELSE
18547            l_attribute9_tbl(i) := P_finplan_trans_tab(i).attribute9;
18548          END IF;
18549 
18550          IF  P_finplan_trans_tab(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18551             l_attribute10_tbl(i) := NULL;
18552          ELSE
18553            l_attribute10_tbl(i) := P_finplan_trans_tab(i).attribute10;
18554          END IF;
18555 
18556          IF  P_finplan_trans_tab(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18557             l_attribute11_tbl(i) := NULL;
18558          ELSE
18559            l_attribute11_tbl(i) := P_finplan_trans_tab(i).attribute11;
18560          END IF;
18561 
18562          IF  P_finplan_trans_tab(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18563             l_attribute12_tbl(i) := NULL;
18564          ELSE
18565            l_attribute12_tbl(i) := P_finplan_trans_tab(i).attribute12;
18566          END IF;
18567 
18568          IF  P_finplan_trans_tab(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18569             l_attribute13_tbl(i) := NULL;
18570          ELSE
18571            l_attribute13_tbl(i) := P_finplan_trans_tab(i).attribute13;
18572          END IF;
18573 
18574          IF  P_finplan_trans_tab(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18575             l_attribute14_tbl(i) := NULL;
18576          ELSE
18577            l_attribute14_tbl(i) := P_finplan_trans_tab(i).attribute14;
18578          END IF;
18579 
18580          IF  P_finplan_trans_tab(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18581             l_attribute15_tbl(i) := NULL;
18582          ELSE
18583            l_attribute15_tbl(i) := P_finplan_trans_tab(i).attribute15;
18584          END IF;
18585 
18586          IF  P_finplan_trans_tab(i).attribute16 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18587             l_attribute16_tbl(i) := NULL;
18588          ELSE
18589            l_attribute16_tbl(i) := P_finplan_trans_tab(i).attribute16;
18590          END IF;
18591 
18592          IF  P_finplan_trans_tab(i).attribute17 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18593             l_attribute17_tbl(i) := NULL;
18594          ELSE
18595            l_attribute17_tbl(i) := P_finplan_trans_tab(i).attribute17;
18596          END IF;
18597 
18598          IF  P_finplan_trans_tab(i).attribute18 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18599             l_attribute18_tbl(i) := NULL;
18600          ELSE
18601            l_attribute18_tbl(i) := P_finplan_trans_tab(i).attribute18;
18602          END IF;
18603 
18604          IF  P_finplan_trans_tab(i).attribute19 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18605             l_attribute19_tbl(i) := NULL;
18606          ELSE
18607            l_attribute19_tbl(i) := P_finplan_trans_tab(i).attribute19;
18608          END IF;
18609 
18610          IF  P_finplan_trans_tab(i).attribute20 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18611             l_attribute20_tbl(i) := NULL;
18612          ELSE
18613            l_attribute20_tbl(i) := P_finplan_trans_tab(i).attribute20;
18614          END IF;
18615 
18616          IF  P_finplan_trans_tab(i).attribute21 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18617             l_attribute21_tbl(i) := NULL;
18618          ELSE
18619            l_attribute21_tbl(i) := P_finplan_trans_tab(i).attribute21;
18620          END IF;
18621 
18622          IF  P_finplan_trans_tab(i).attribute22 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18623             l_attribute22_tbl(i) := NULL;
18624          ELSE
18625            l_attribute22_tbl(i) := P_finplan_trans_tab(i).attribute22;
18626          END IF;
18627 
18628          IF  P_finplan_trans_tab(i).attribute23 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18629             l_attribute23_tbl(i) := NULL;
18630          ELSE
18631            l_attribute23_tbl(i) := P_finplan_trans_tab(i).attribute23;
18632          END IF;
18633 
18634          IF  P_finplan_trans_tab(i).attribute24 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18635             l_attribute24_tbl(i) := NULL;
18636          ELSE
18637            l_attribute24_tbl(i) := P_finplan_trans_tab(i).attribute24;
18638          END IF;
18639 
18640          IF  P_finplan_trans_tab(i).attribute25 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18641             l_attribute25_tbl(i) := NULL;
18642          ELSE
18643            l_attribute25_tbl(i) := P_finplan_trans_tab(i).attribute25;
18644          END IF;
18645 
18646          IF  P_finplan_trans_tab(i).attribute26 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18647             l_attribute26_tbl(i) := NULL;
18648          ELSE
18649            l_attribute26_tbl(i) := P_finplan_trans_tab(i).attribute26;
18650          END IF;
18651 
18652          IF  P_finplan_trans_tab(i).attribute27 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18653             l_attribute27_tbl(i) := NULL;
18654          ELSE
18655            l_attribute27_tbl(i) := P_finplan_trans_tab(i).attribute27;
18656          END IF;
18657 
18658          IF  P_finplan_trans_tab(i).attribute28 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18659             l_attribute28_tbl(i) := NULL;
18660          ELSE
18661            l_attribute28_tbl(i) := P_finplan_trans_tab(i).attribute28;
18662          END IF;
18663 
18664          IF  P_finplan_trans_tab(i).attribute29 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18665             l_attribute29_tbl(i) := NULL;
18666          ELSE
18667            l_attribute29_tbl(i) := P_finplan_trans_tab(i).attribute29;
18668          END IF;
18669 
18670          IF  P_finplan_trans_tab(i).attribute30 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  THEN
18671             l_attribute30_tbl(i) := NULL;
18672          ELSE
18673            l_attribute30_tbl(i) := P_finplan_trans_tab(i).attribute30;
18674          END IF;
18675 
18676 
18677 END LOOP;
18678 
18679       Select decode(plan_class_code,
18680           'BUDGET',PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
18681           'FORECAST',PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)
18682       Into l_plan_tran_context
18683       From pa_fin_plan_types_b
18684       Where fin_plan_type_id = l_fin_plan_type_id;
18685 
18686 /* Calling Add Planning Transaction API */
18687 
18688 
18689 --dbms_output.put_line('calling pa_fp_planning_transaction_pub.add_planning_transactions bvid [' || to_char(l_created_version_id) || ']');
18690       /*
18691        | Bug 3709462. Passed p_one_to_one_mapping_flag ('Y') to avoid creation of
18692        |              Resource Assignments for combinations of Task and Resource.
18693        */
18694       pa_fp_planning_transaction_pub.add_planning_transactions
18695       (       p_context                      => l_plan_tran_context
18696             , p_one_to_one_mapping_flag      => 'Y'
18697             , p_calling_module               => 'CREATE_DRAFT_FINPLAN'
18698             , p_project_id                   => l_project_id
18699             , p_budget_version_id            => l_created_version_id
18700             , p_task_elem_version_id_tbl     => l_task_elem_version_id_tbl
18701             , p_task_name_tbl                => l_pm_task_reference_tbl
18702             , p_task_number_tbl              => l_task_number_tbl
18703             , p_planning_start_date_tbl      => l_start_date_tbl -- Bug 5026210
18704             , p_planning_end_date_tbl        => l_end_date_tbl -- Bug 5026210
18705             , p_resource_list_member_id_tbl  => l_resource_list_member_id_tbl
18706 			, p_cbs_element_id_tbl  => l_cbs_element_id_tbl  --Bug 16604257 : CBS RBS Phase 2 API changes
18707             , p_quantity_tbl                 => l_quantity_tbl
18708             , p_currency_code_tbl            => l_currency_code_tbl
18709             , p_raw_cost_tbl                 => l_raw_cost_tbl
18710             , p_burdened_cost_tbl            => l_burdened_cost_tbl
18711             , p_revenue_tbl                  => l_revenue_tbl
18712             , p_skip_duplicates_flag         => 'N'
18713             , p_pm_product_code              => l_pm_product_code_tbl
18714             , p_pm_res_asgmt_ref             => l_pm_res_asgmt_ref_tbl
18715             , p_attribute_category_tbl       => l_attribute_category_tbl
18716             , p_attribute1                 => l_attribute1_tbl
18717             , p_attribute2                 => l_attribute2_tbl
18718             , p_attribute3                 => l_attribute3_tbl
18719             , p_attribute4                 => l_attribute4_tbl
18720             , p_attribute5                 => l_attribute5_tbl
18721             , p_attribute6                 => l_attribute6_tbl
18722             , p_attribute7                 => l_attribute7_tbl
18723             , p_attribute8                 => l_attribute8_tbl
18724             , p_attribute9                 => l_attribute9_tbl
18725             , p_attribute10                => l_attribute10_tbl
18726             , p_attribute11                => l_attribute11_tbl
18727             , p_attribute12                => l_attribute12_tbl
18728             , p_attribute13                => l_attribute13_tbl
18729             , p_attribute14                => l_attribute14_tbl
18730             , p_attribute15                => l_attribute15_tbl
18731             , p_attribute16                => l_attribute16_tbl
18732             , p_attribute17                => l_attribute17_tbl
18733             , p_attribute18                => l_attribute18_tbl
18734             , p_attribute19                => l_attribute19_tbl
18735             , p_attribute20                => l_attribute20_tbl
18736             , p_attribute21                => l_attribute21_tbl
18737             , p_attribute22                => l_attribute22_tbl
18738             , p_attribute23                => l_attribute23_tbl
18739             , p_attribute24                => l_attribute24_tbl
18740             , p_attribute25                => l_attribute25_tbl
18741             , p_attribute26                => l_attribute26_tbl
18742             , p_attribute27                => l_attribute27_tbl
18743             , p_attribute28                => l_attribute28_tbl
18744             , p_attribute29                => l_attribute29_tbl
18745             , p_attribute30                => l_attribute30_tbl
18746             , x_return_status                => l_return_status
18747             , x_msg_count                    => l_msg_count
18748             , x_msg_data                     => l_msg_data
18749       );
18750       IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18751       THEN
18752                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18753       ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR)
18754       THEN
18755                 RAISE  FND_API.G_EXC_ERROR;
18756       END IF;
18757  END IF; -- 3793370 -- P_finplan_trans_tab.COUNT > 0
18758 /************************************
18759         l_fp_version_ids_tbl.extend;
18760         l_fp_version_ids_tbl(1) := l_created_version_id;
18761         PJI_FM_XBS_ACCUM_MAINT.plan_create( p_fp_version_ids   => l_fp_version_ids_tbl
18762                                            ,x_return_status    => l_return_status
18763                                  ,x_msg_code         => l_msg_code
18764                                           );
18765         IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18766         THEN
18767                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18768         ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR)
18769         THEN
18770                 RAISE  FND_API.G_EXC_ERROR;
18771         END IF;
18772 ********************/
18773 
18774         x_finplan_version_id := l_created_version_id;
18775 
18776         IF ( p_create_new_curr_working_flag = 'Y' OR
18777              p_replace_current_working_flag = 'Y')
18778         THEN
18779 --dbms_output.put_line('pa_fin_plan_utils.Get_Curr_Working_Version_Info');
18780             pa_fin_plan_utils.Get_Curr_Working_Version_Info(
18781                    p_project_id            => l_project_id
18782                   ,p_fin_plan_type_id      => l_fin_plan_type_id
18783                   ,p_version_type          => l_version_type
18784                   ,x_fp_options_id         => l_proj_fp_options_id
18785                   ,x_fin_plan_version_id   => l_CW_version_id
18786                   ,x_return_status         => x_return_status
18787                   ,x_msg_count             => x_msg_count
18788                   ,x_msg_data              => x_msg_data );
18789             IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18790             THEN
18791                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18792             ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR)
18793             THEN
18794                 RAISE  FND_API.G_EXC_ERROR;
18795             END IF;
18796             IF  ( l_created_version_id <>  l_CW_version_id )
18797             THEN
18798                 pa_debug.g_err_stage:= 'l_created_version_id [' || TO_CHAR(l_created_version_id) ||
18799                                   '] is not same as l_CW_version_id [' || TO_CHAR(l_CW_version_id) || ']';
18800                 IF l_debug_mode = 'Y' THEN
18801                    pa_debug.write( l_procedure_name ||
18802                          g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18803                 END IF;
18804 
18805                 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
18806 
18807                 l_created_ver_rec_ver_num := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_created_version_id);
18808                 l_user_id := FND_GLOBAL.User_id;
18809                 PA_COMP_PROFILE_PUB.GET_USER_INFO
18810                       (p_user_id         => l_user_id,
18811                        x_person_id       => t_person_id,
18812                        x_resource_id     => t_resource_id,
18813                        x_resource_name   => t_resource_name);
18814 --dbms_output.put_line('pa_fin_plan_pvt.lock_unlock_version');
18815                 pa_fin_plan_pvt.lock_unlock_version
18816                        (p_budget_version_id       => l_CW_version_id,
18817                         p_record_version_number   => l_CW_record_version_number,
18818                         p_action                  => 'L',
18819                         p_user_id                 => l_user_id,
18820                         p_person_id               => NULL,
18821                         x_return_status           => x_return_status,
18822                         x_msg_count               => x_msg_count,
18823                         x_msg_data                => x_msg_data) ;
18824 
18825                 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
18826                         IF l_debug_mode = 'Y' THEN
18827                               pa_debug.g_err_stage := 'Error executing lock unlock version';
18828                               pa_debug.write('CREATE_DRAFT: ' || g_module_name,pa_debug.g_err_stage,3);
18829                         END IF;
18830                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18831                 END IF;
18832                 IF l_debug_mode = 'Y' THEN
18833                         pa_debug.g_err_stage := 'About to call set current working version';
18834                         pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,3);
18835                 END IF;
18836 
18837 
18838                 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
18839 --dbms_output.put_line('pa_fin_plan_pub.Set_Current_Working');
18840                 pa_fin_plan_pub.Set_Current_Working
18841                         (p_project_id                  => l_project_id,
18842                          p_budget_version_id           => l_created_version_id,
18843                          p_record_version_number       => l_created_ver_rec_ver_num,
18844                          p_orig_budget_version_id      => l_CW_version_id,
18845                          p_orig_record_version_number  => l_CW_record_version_number,
18846                          x_return_status               => x_return_status,
18847                          x_msg_count                   => x_msg_count,
18848                          x_msg_data                    => x_msg_data);
18849 
18850                 IF (x_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
18851                         IF l_debug_mode = 'Y' THEN
18852                               pa_debug.g_err_stage:= 'Error executing Set_Current_Working ';
18853                               pa_debug.write('CREATE_DRAFT: ' ||
18854                                    g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18855                         END IF;
18856                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18857                 END IF;
18858             END IF; --l_created_version_id <>  l_CW_version_id
18859 
18860       END IF;  --p_create_new_curr_working_flag = 'Y' OR p_replace_current_working_flag = 'Y'
18861 --dbms_output.put_line('PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS');
18862       PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS
18863           (p_fin_plan_version_id             => l_created_version_id
18864           ,p_budget_lines_in                 => l_budget_lines_in
18865           ,p_calling_context                 => 'CREATE_DRAFT_FINPLAN'
18866           ,x_fp_lines_retn_status_tab        => l_budget_lines_out
18867           ,x_return_status                   => x_return_status
18868           ,x_msg_count                       => x_msg_count
18869           ,x_msg_data                        => x_msg_data
18870          );
18871 
18872       IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18873       THEN
18874                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18875       ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR)
18876       THEN
18877                 RAISE  FND_API.G_EXC_ERROR;
18878       END IF;
18879       /*====================================================================+
18880        | If any of the budget lines had any rejections, set x_return_status |
18881        | appropriately - So, whoever calls this API would know - there was  |
18882        | issue creating atleast one of the budget lines.                    |
18883        +====================================================================*/
18884       IF ( x_return_status = 'R')
18885       THEN
18886              -- bug 3825873 donot raise error it will rollback the entire changes
18887              -- bug 3825873 RAISE  FND_API.G_EXC_ERROR;
18888              x_return_status := 'S';
18889       END IF;
18890 
18891       --Changes for bug 3823485
18892       IF FND_API.TO_BOOLEAN( p_commit )
18893       THEN
18894 
18895             IF l_debug_mode = 'Y' THEN
18896                   pa_debug.g_err_stage := 'About to do a COMMIT';
18897                   pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18898             END IF;
18899 
18900             COMMIT;
18901       END IF;
18902 
18903       IF l_debug_mode = 'Y' THEN
18904             pa_debug.g_err_stage := 'Leaving create draft finplan';
18905             pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18906 
18907             pa_debug.reset_curr_function;
18908       END IF;
18909 
18910 EXCEPTION
18911      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
18912 
18913            ROLLBACK TO create_draft_finplan_pub;
18914 
18915            IF l_debug_mode = 'Y' THEN
18916                   pa_debug.g_err_stage:='In invalid args exception';
18917                   pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18918            END IF;
18919 
18920            l_msg_count := FND_MSG_PUB.count_msg;
18921            IF l_msg_count = 1 THEN
18922 
18923                  IF l_debug_mode = 'Y' THEN
18924                       pa_debug.g_err_stage:='In invalid args exception 1';
18925                       pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18926                  END IF;
18927 
18928                  PA_INTERFACE_UTILS_PUB.get_messages
18929                      ( p_encoded        => FND_API.G_TRUE
18930                       ,p_msg_index      => 1
18931                       ,p_msg_count      => l_msg_count
18932                       ,p_msg_data       => l_msg_data
18933                       ,p_data           => l_msg_data
18934                       ,p_msg_index_out  => l_msg_index_out);
18935 
18936                  x_msg_data  := l_msg_data;
18937                  x_msg_count := l_msg_count;
18938            ELSE
18939                  IF l_debug_mode = 'Y' THEN
18940                       pa_debug.g_err_stage:='In invalid args exception 2';
18941                       pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18942                  END IF;
18943                  x_msg_count := l_msg_count;
18944            END IF;
18945 
18946 
18947            x_return_status := FND_API.G_RET_STS_ERROR;
18948 
18949            IF l_debug_mode = 'Y' THEN
18950                pa_debug.g_err_stage:='In invalid args exception 3';
18951                pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18952                pa_debug.reset_curr_function;
18953            END IF;
18954 
18955      WHEN OTHERS THEN
18956 
18957              ROLLBACK TO create_draft_finplan_pub;
18958 
18959              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18960              x_msg_count     := 1;
18961              x_msg_data      := SQLERRM;
18962 
18963              FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
18964                                   ,p_procedure_name  => 'Update_Planning_Transactions');
18965 
18966              IF l_debug_mode = 'Y' THEN
18967                pa_debug.g_err_stage:='Unexpected Error' || SQLERRM;
18968                pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18969                pa_debug.reset_curr_function;
18970              END IF;
18971 
18972              RAISE;
18973 
18974 END CREATE_DRAFT_FINPLAN;
18975 
18976 PROCEDURE load_resource_info(
18977  P_PM_PRODUCT_CODE PA_BUDGET_VERSIONS.PM_PRODUCT_CODE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18978 ,P_TASK_ID PA_TASKS.TASK_ID%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18979 ,P_PM_TASK_REFERENCE PA_TASKS.PM_TASK_REFERENCE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18980 ,P_PM_RES_ASGMT_REFERENCE VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18981 ,P_RESOURCE_ALIAS         VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18982 ,P_CURRENCY_CODE PA_BUDGET_LINES.TXN_CURRENCY_CODE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18983 ,P_UNIT_OF_MEASURE_CODE PA_RESOURCE_ASSIGNMENTS.UNIT_OF_MEASURE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18984 ,P_START_DATE PA_RESOURCE_ASSIGNMENTS.PLANNING_START_DATE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
18985 ,P_END_DATE PA_RESOURCE_ASSIGNMENTS.PLANNING_END_DATE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
18986 ,P_QUANTITY                NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18987 ,P_RAW_COST                NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18988 ,P_BURDENED_COST           NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18989 ,P_REVENUE                 NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18990 ,P_RESOURCE_LIST_MEMBER_ID NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18991 --Bug 16604257 : CBS RBS Phase 2 API changes
18992 ,P_COST_CODE         VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18993 ,P_CBS_ELEMENT_ID NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18994 --Bug 16604257
18995 ,P_ATTRIBUTE_CATEGORY PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE_CATEGORY%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18996 ,P_ATTRIBUTE1 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE1%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18997 ,P_ATTRIBUTE2 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE2%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18998 ,P_ATTRIBUTE3 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE3%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18999 ,P_ATTRIBUTE4 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE4%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19000 ,P_ATTRIBUTE5 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE5%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19001 ,P_ATTRIBUTE6 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE6%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19002 ,P_ATTRIBUTE7 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE7%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19003 ,P_ATTRIBUTE8 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE8%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19004 ,P_ATTRIBUTE9 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE9%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19005 ,P_ATTRIBUTE10 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE10%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19006 ,P_ATTRIBUTE11 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE11%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19007 ,P_ATTRIBUTE12 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE12%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19008 ,P_ATTRIBUTE13 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE13%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19009 ,P_ATTRIBUTE14 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE14%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19010 ,P_ATTRIBUTE15 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE15%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19011 ,P_ATTRIBUTE16 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE16%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19012 ,P_ATTRIBUTE17 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE17%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19013 ,P_ATTRIBUTE18 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE18%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19014 ,P_ATTRIBUTE19 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE19%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19015 ,P_ATTRIBUTE20 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE20%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19016 ,P_ATTRIBUTE21 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE21%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19017 ,P_ATTRIBUTE22 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE22%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19018 ,P_ATTRIBUTE23 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE23%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19019 ,P_ATTRIBUTE24 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE24%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19020 ,P_ATTRIBUTE25 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE25%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19021 ,P_ATTRIBUTE26 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE26%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19022 ,P_ATTRIBUTE27 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE27%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19023 ,P_ATTRIBUTE28 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE28%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19024 ,P_ATTRIBUTE29 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE29%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19025 ,P_ATTRIBUTE30 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE30%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19026 ) IS
19027       cnt number:=0;
19028 BEGIN
19029       G_PM_PRODUCT_CODE_TBL.extend(1);
19030       G_TASK_ID_TBL.extend(1);
19031       G_PM_TASK_REFERENCE_TBL.extend(1);
19032       G_PM_RES_ASGMT_REFERENCE_TBL.extend(1);
19033       G_RESOURCE_ALIAS_TBL.extend(1);
19034       G_CURRENCY_CODE_TBL.extend(1);
19035       G_UNIT_OF_MEASURE_CODE_TBL.extend(1);
19036       G_START_DATE_TBL.extend(1);
19037       G_END_DATE_TBL.extend(1);
19038       G_QUANTITY_TBL.extend(1);
19039       G_RAW_COST_TBL.extend(1);
19040       G_BURDENED_COST_TBL.extend(1);
19041       G_REVENUE_TBL.extend(1);
19042       G_RESOURCE_LIST_MEMBER_ID_TBL.extend(1);
19043 	    --Bug 16604257 : CBS RBS Phase 2 API changes
19044 		G_CBS_ELEMENT_ID_TBL.extend(1);
19045 		G_COST_CODE_TBL.extend(1);
19046   --Bug 16604257
19047       G_ATTRIBUTE_CATEGORY_TBL.extend(1);
19048       G_ATTRIBUTE1_TBL.extend(1);
19049       G_ATTRIBUTE2_TBL.extend(1);
19050       G_ATTRIBUTE3_TBL.extend(1);
19051       G_ATTRIBUTE4_TBL.extend(1);
19052       G_ATTRIBUTE5_TBL.extend(1);
19053       G_ATTRIBUTE6_TBL.extend(1);
19054       G_ATTRIBUTE7_TBL.extend(1);
19055       G_ATTRIBUTE8_TBL.extend(1);
19056       G_ATTRIBUTE9_TBL.extend(1);
19057       G_ATTRIBUTE10_TBL.extend(1);
19058       G_ATTRIBUTE11_TBL.extend(1);
19059       G_ATTRIBUTE12_TBL .extend(1);
19060       G_ATTRIBUTE13_TBL.extend(1);
19061       G_ATTRIBUTE14_TBL.extend(1);
19062       G_ATTRIBUTE15_TBL.extend(1);
19063       G_ATTRIBUTE16_TBL.extend(1);
19064       G_ATTRIBUTE17_TBL.extend(1);
19065       G_ATTRIBUTE18_TBL.extend(1);
19066       G_ATTRIBUTE19_TBL.extend(1);
19067       G_ATTRIBUTE20_TBL.extend(1);
19068       G_ATTRIBUTE21_TBL.extend(1);
19069       G_ATTRIBUTE22_TBL.extend(1);
19070       G_ATTRIBUTE23_TBL.extend(1);
19071       G_ATTRIBUTE24_TBL.extend(1);
19072       G_ATTRIBUTE25_TBL.extend(1);
19073       G_ATTRIBUTE26_TBL.extend(1);
19074       G_ATTRIBUTE27_TBL.extend(1);
19075       G_ATTRIBUTE28_TBL.extend(1);
19076       G_ATTRIBUTE29_TBL.extend(1);
19077       G_ATTRIBUTE30_TBL.extend(1);
19078 --dbms_output.put_line('extending over');
19079 
19080       --find the count on the table.
19081       cnt := G_START_DATE_TBL.COUNT;
19082 --dbms_output.put_line('G has [' || to_char(cnt) || '] records');
19083 
19084       G_PM_PRODUCT_CODE_TBL(cnt)               := P_PM_PRODUCT_CODE;
19085       G_TASK_ID_TBL(cnt)                       := P_TASK_ID;
19086       G_PM_TASK_REFERENCE_TBL(cnt)             := P_PM_TASK_REFERENCE;
19087       G_PM_RES_ASGMT_REFERENCE_TBL(cnt)        := P_PM_RES_ASGMT_REFERENCE;
19088       G_RESOURCE_ALIAS_TBL(cnt)                := P_RESOURCE_ALIAS;
19089       G_CURRENCY_CODE_TBL(cnt)                 := P_CURRENCY_CODE;
19090       G_UNIT_OF_MEASURE_CODE_TBL(cnt)          := P_UNIT_OF_MEASURE_CODE;
19091       G_START_DATE_TBL(cnt)                    := P_START_DATE;
19092       G_END_DATE_TBL(cnt)                      := P_END_DATE;
19093       G_QUANTITY_TBL(cnt)                      := P_QUANTITY;
19094       G_RAW_COST_TBL(cnt)                      := P_RAW_COST;
19095       G_BURDENED_COST_TBL(cnt)                 := P_BURDENED_COST;
19096       G_REVENUE_TBL(cnt)                       := P_REVENUE;
19097       G_RESOURCE_LIST_MEMBER_ID_TBL(cnt)       := P_RESOURCE_LIST_MEMBER_ID;
19098 	  	    --Bug 16604257 : CBS RBS Phase 2 API changes
19099 		G_CBS_ELEMENT_ID_TBL(cnt)			   := P_CBS_ELEMENT_ID;
19100 		G_COST_CODE_TBL(cnt)						:=P_COST_CODE;
19101 			--Bug 16604257
19102 
19103       G_ATTRIBUTE_CATEGORY_TBL(cnt)            := P_ATTRIBUTE_CATEGORY;
19104       G_ATTRIBUTE1_TBL(cnt)                    := P_ATTRIBUTE1;
19105       G_ATTRIBUTE2_TBL(cnt)                    := P_ATTRIBUTE2;
19106       G_ATTRIBUTE3_TBL(cnt)                    := P_ATTRIBUTE3;
19107       G_ATTRIBUTE4_TBL(cnt)                    := P_ATTRIBUTE4;
19108       G_ATTRIBUTE5_TBL(cnt)                    := P_ATTRIBUTE5;
19109       G_ATTRIBUTE6_TBL(cnt)                    := P_ATTRIBUTE6;
19110       G_ATTRIBUTE7_TBL(cnt)                    := P_ATTRIBUTE7;
19111       G_ATTRIBUTE8_TBL(cnt)                    := P_ATTRIBUTE8;
19112       G_ATTRIBUTE9_TBL(cnt)                    := P_ATTRIBUTE9;
19113       G_ATTRIBUTE10_TBL(cnt)                   := P_ATTRIBUTE10;
19114       G_ATTRIBUTE11_TBL(cnt)                   := P_ATTRIBUTE11;
19115       G_ATTRIBUTE12_TBL (cnt)                  := P_ATTRIBUTE12;
19116       G_ATTRIBUTE13_TBL(cnt)                   := P_ATTRIBUTE13;
19117       G_ATTRIBUTE14_TBL(cnt)                   := P_ATTRIBUTE14;
19118       G_ATTRIBUTE15_TBL(cnt)                   := P_ATTRIBUTE15;
19119       G_ATTRIBUTE16_TBL(cnt)                   := P_ATTRIBUTE16;
19120       G_ATTRIBUTE17_TBL(cnt)                   := P_ATTRIBUTE17;
19121       G_ATTRIBUTE18_TBL(cnt)                   := P_ATTRIBUTE18;
19122       G_ATTRIBUTE19_TBL(cnt)                   := P_ATTRIBUTE19;
19123       G_ATTRIBUTE20_TBL(cnt)                   := P_ATTRIBUTE20;
19124       G_ATTRIBUTE21_TBL(cnt)                   := P_ATTRIBUTE21;
19125       G_ATTRIBUTE22_TBL(cnt)                   := P_ATTRIBUTE22;
19126       G_ATTRIBUTE23_TBL(cnt)                   := P_ATTRIBUTE23;
19127       G_ATTRIBUTE24_TBL(cnt)                   := P_ATTRIBUTE24;
19128       G_ATTRIBUTE25_TBL(cnt)                   := P_ATTRIBUTE25;
19129       G_ATTRIBUTE26_TBL(cnt)                   := P_ATTRIBUTE26;
19130       G_ATTRIBUTE27_TBL(cnt)                   := P_ATTRIBUTE27;
19131       G_ATTRIBUTE28_TBL(cnt)                   := P_ATTRIBUTE28;
19132       G_ATTRIBUTE29_TBL(cnt)                   := P_ATTRIBUTE29;
19133       G_ATTRIBUTE30_TBL(cnt)                   := P_ATTRIBUTE30;
19134 --dbms_output.put_line('done with assigning to global tables');
19135 END load_resource_info;
19136 
19137 PROCEDURE EXECUTE_CREATE_DRAFT_FINPLAN
19138  ( p_api_version_number              IN      NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19139   ,p_commit                              IN      VARCHAR2          := FND_API.G_FALSE
19140   ,p_init_msg_list                       IN      VARCHAR2          := FND_API.G_FALSE
19141   ,p_pm_product_code                 IN      pa_budget_versions.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19142   ,p_pm_finplan_reference            IN      pa_budget_versions.pm_budget_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19143   ,p_pm_project_reference            IN      pa_projects_all.PM_PROJECT_REFERENCE%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19144   ,p_pa_project_id                   IN      pa_budget_versions.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19145   ,p_fin_plan_type_id                IN      pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19146   ,p_fin_plan_type_name              IN      pa_fin_plan_types_vl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19147   ,p_version_type                    IN      pa_budget_versions.version_type%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19148   ,p_time_phased_code                IN      pa_proj_fp_options.cost_time_phased_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19149   ,p_resource_list_name              IN      pa_resource_lists.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19150   ,p_resource_list_id                IN      pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19151   ,p_fin_plan_level_code             IN      pa_proj_fp_options.cost_fin_plan_level_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19152   ,P_PLAN_IN_MULTI_CURR_FLAG         IN      pa_proj_fp_options.plan_in_multi_curr_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19153   ,p_budget_version_name             IN      pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19154   ,p_description                     IN      pa_budget_versions.description%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19155   ,p_change_reason_code              IN      pa_budget_versions.change_reason_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19156   ,p_raw_cost_flag                   IN      pa_fin_plan_amount_sets.raw_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19157   ,p_burdened_cost_flag              IN      pa_fin_plan_amount_sets.burdened_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19158   ,p_revenue_flag                    IN      pa_fin_plan_amount_sets.revenue_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19159   ,p_cost_qty_flag                   IN      pa_fin_plan_amount_sets.cost_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19160   ,p_revenue_qty_flag                IN      pa_fin_plan_amount_sets.revenue_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19161   ,p_all_qty_flag                    IN      pa_fin_plan_amount_sets.all_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19162   ,p_attribute_category              IN      pa_budget_versions.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19163   ,p_attribute1                      IN      pa_budget_versions.attribute1%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19164   ,p_attribute2                      IN      pa_budget_versions.attribute2%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19165   ,p_attribute3                      IN      pa_budget_versions.attribute3%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19166   ,p_attribute4                      IN      pa_budget_versions.attribute4%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19167   ,p_attribute5                      IN      pa_budget_versions.attribute5%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19168   ,p_attribute6                      IN      pa_budget_versions.attribute6%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19169   ,p_attribute7                      IN      pa_budget_versions.attribute7%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19170   ,p_attribute8                      IN      pa_budget_versions.attribute8%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19171   ,p_attribute9                      IN      pa_budget_versions.attribute9%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19172   ,p_attribute10                     IN      pa_budget_versions.attribute10%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19173   ,p_attribute11                     IN      pa_budget_versions.attribute11%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19174   ,p_attribute12                     IN      pa_budget_versions.attribute12%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19175   ,p_attribute13                     IN      pa_budget_versions.attribute13%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19176   ,p_attribute14                     IN      pa_budget_versions.attribute14%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19177   ,p_attribute15                     IN      pa_budget_versions.attribute15%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19178   ,p_create_new_curr_working_flag    IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19179   ,p_replace_current_working_flag    IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19180   ,p_using_resource_lists_flag       IN        VARCHAR2 DEFAULT 'N'
19181   ,x_finplan_version_id              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
19182   ,x_return_status                   OUT NOCOPY VARCHAR2
19183   ,x_msg_count                       OUT NOCOPY NUMBER
19184   ,x_msg_data                        OUT NOCOPY VARCHAR2
19185  )
19186 IS
19187   l_finplan_trans_tab               pa_budget_pub.FinPlan_Trans_Tab;
19188 BEGIN
19189             --dbms_output.put_line('populating table of records');
19190             FOR i IN G_START_DATE_TBL.FIRST .. G_START_DATE_TBL.LAST
19191             LOOP
19192                  l_finplan_trans_tab(i).pm_product_code          := G_PM_PRODUCT_CODE_TBL(i);
19193                  l_finplan_trans_tab(i).TASK_ID                  := G_TASK_ID_TBL(i);
19194                  l_finplan_trans_tab(i).PM_TASK_REFERENCE        := G_PM_TASK_REFERENCE_TBL(i);
19195                  l_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE   := G_PM_RES_ASGMT_REFERENCE_TBL(i);
19196                  l_finplan_trans_tab(i).RESOURCE_ALIAS           := G_RESOURCE_ALIAS_TBL(i);
19197                  l_finplan_trans_tab(i).CURRENCY_CODE            := G_CURRENCY_CODE_TBL(i);
19198                  l_finplan_trans_tab(i).UNIT_OF_MEASURE_CODE     := G_UNIT_OF_MEASURE_CODE_TBL(i);
19199                  l_finplan_trans_tab(i).START_DATE               := G_START_DATE_TBL(i);
19200                  l_finplan_trans_tab(i).END_DATE                 := G_END_DATE_TBL(i);
19201                  l_finplan_trans_tab(i).QUANTITY                 := G_QUANTITY_TBL(i);
19202                  l_finplan_trans_tab(i).RAW_COST                 := G_RAW_COST_TBL(i);
19203                  l_finplan_trans_tab(i).BURDENED_COST            := G_BURDENED_COST_TBL(i);
19204                  l_finplan_trans_tab(i).REVENUE                  := G_REVENUE_TBL(I);
19205                  l_finplan_trans_tab(i).RESOURCE_LIST_MEMBER_ID  := G_RESOURCE_LIST_MEMBER_ID_TBL(i);
19206 				 --Bug 16604257 : CBS RBS Phase 2 API changes
19207 				 l_finplan_trans_tab(i).CBS_ELEMENT_ID  			:= G_CBS_ELEMENT_ID_TBL(i);
19208 				 l_finplan_trans_tab(i).COST_CODE  					:= G_COST_CODE_TBL(i);
19209 				 --Bug 16604257
19210                  l_finplan_trans_tab(i).ATTRIBUTE_CATEGORY       := G_ATTRIBUTE_CATEGORY_TBL(i);
19211                  l_finplan_trans_tab(i).ATTRIBUTE1               := G_ATTRIBUTE1_TBL(i);
19212                  l_finplan_trans_tab(i).ATTRIBUTE2               := G_ATTRIBUTE2_TBL(i);
19213                  l_finplan_trans_tab(i).ATTRIBUTE3               := G_ATTRIBUTE3_TBL(i);
19214                  l_finplan_trans_tab(i).ATTRIBUTE4               := G_ATTRIBUTE4_TBL(i);
19215                  l_finplan_trans_tab(i).ATTRIBUTE5               := G_ATTRIBUTE5_TBL(i);
19216                  l_finplan_trans_tab(i).ATTRIBUTE6               := G_ATTRIBUTE6_TBL(i);
19217                  l_finplan_trans_tab(i).ATTRIBUTE7               := G_ATTRIBUTE7_TBL(i);
19218                  l_finplan_trans_tab(i).ATTRIBUTE8               := G_ATTRIBUTE8_TBL(i);
19219                  l_finplan_trans_tab(i).ATTRIBUTE9               := G_ATTRIBUTE9_TBL(i);
19220                  l_finplan_trans_tab(i).ATTRIBUTE10              := G_ATTRIBUTE10_TBL(i);
19221                  l_finplan_trans_tab(i).ATTRIBUTE11              := G_ATTRIBUTE11_TBL(i);
19222                  l_finplan_trans_tab(i).ATTRIBUTE12              := G_ATTRIBUTE12_TBL(i);
19223                  l_finplan_trans_tab(i).ATTRIBUTE13              := G_ATTRIBUTE13_TBL(i);
19224                  l_finplan_trans_tab(i).ATTRIBUTE14              := G_ATTRIBUTE14_TBL(i);
19225                  l_finplan_trans_tab(i).ATTRIBUTE15              := G_ATTRIBUTE15_TBL(i);
19226                  l_finplan_trans_tab(i).ATTRIBUTE16              := G_ATTRIBUTE16_TBL(i);
19227                  l_finplan_trans_tab(i).ATTRIBUTE17              := G_ATTRIBUTE17_TBL(i);
19228                  l_finplan_trans_tab(i).ATTRIBUTE18              := G_ATTRIBUTE18_TBL(i);
19229                  l_finplan_trans_tab(i).ATTRIBUTE19              := G_ATTRIBUTE19_TBL(i);
19230                  l_finplan_trans_tab(i).ATTRIBUTE20              := G_ATTRIBUTE20_TBL(i);
19231                  l_finplan_trans_tab(i).ATTRIBUTE21              := G_ATTRIBUTE21_TBL(i);
19232                  l_finplan_trans_tab(i).ATTRIBUTE22              := G_ATTRIBUTE22_TBL(i);
19233                  l_finplan_trans_tab(i).ATTRIBUTE23              := G_ATTRIBUTE23_TBL(i);
19234                  l_finplan_trans_tab(i).ATTRIBUTE24              := G_ATTRIBUTE24_TBL(i);
19235                  l_finplan_trans_tab(i).ATTRIBUTE25              := G_ATTRIBUTE25_TBL(i);
19236                  l_finplan_trans_tab(i).ATTRIBUTE26              := G_ATTRIBUTE26_TBL(i);
19237                  l_finplan_trans_tab(i).ATTRIBUTE27              := G_ATTRIBUTE27_TBL(i);
19238                  l_finplan_trans_tab(i).ATTRIBUTE28              := G_ATTRIBUTE28_TBL(i);
19239                  l_finplan_trans_tab(i).ATTRIBUTE29              := G_ATTRIBUTE29_TBL(i);
19240                  l_finplan_trans_tab(i).ATTRIBUTE30              := G_ATTRIBUTE30_TBL(i);
19241             END LOOP;
19242 
19243             --dbms_output.put_line('Before calling PA_FIN_PLAN_PUB.CREATE_DRAFT_FINPLAN');
19244             PA_BUDGET_PUB.CREATE_DRAFT_FINPLAN
19245                          ( p_api_version_number             => p_api_version_number
19246                           ,p_commit                             => p_commit
19247                           ,p_init_msg_list                      => p_init_msg_list
19248                           ,p_pm_product_code                => p_pm_product_code
19249                           ,p_pm_finplan_reference           => p_pm_finplan_reference
19250                           ,p_pm_project_reference           => p_pm_project_reference
19251                           ,p_pa_project_id                  => p_pa_project_id
19252                           ,p_fin_plan_type_id               => p_fin_plan_type_id
19253                           ,p_fin_plan_type_name             => p_fin_plan_type_name
19254                           ,p_version_type                   => p_version_type
19255                           ,p_time_phased_code               => p_time_phased_code
19256                           ,p_resource_list_name             => p_resource_list_name
19257                           ,p_resource_list_id               => p_resource_list_id
19258                           ,p_fin_plan_level_code            => p_fin_plan_level_code
19259                           ,p_plan_in_multi_curr_flag        => P_plan_in_multi_curr_flag
19260                           ,p_budget_version_name            => p_budget_version_name
19261                           ,p_description                    => p_description
19262                           ,p_change_reason_code             => p_change_reason_code
19263                           ,p_raw_cost_flag                  => p_raw_cost_flag
19264                           ,p_burdened_cost_flag             => p_burdened_cost_flag
19265                           ,p_revenue_flag                   => p_revenue_flag
19266                           ,p_cost_qty_flag                  => p_cost_qty_flag
19267                           ,p_revenue_qty_flag               => p_revenue_qty_flag
19268                           ,p_all_qty_flag                   => p_all_qty_flag
19269                           ,p_attribute_category             => p_attribute_category
19270                           ,p_attribute1                     => p_attribute1
19271                           ,p_attribute2                     => p_attribute2
19272                           ,p_attribute3                     => p_attribute3
19273                           ,p_attribute4                     => p_attribute4
19274                           ,p_attribute5                     => p_attribute5
19275                           ,p_attribute6                     => p_attribute6
19276                           ,p_attribute7                     => p_attribute7
19277                           ,p_attribute8                     => p_attribute8
19278                           ,p_attribute9                     => p_attribute9
19279                           ,p_attribute10                    => p_attribute10
19280                           ,p_attribute11                    => p_attribute11
19281                           ,p_attribute12                    => p_attribute12
19282                           ,p_attribute13                    => p_attribute13
19283                           ,p_attribute14                    => p_attribute14
19284                           ,p_attribute15                    => p_attribute15
19285                           ,p_create_new_curr_working_flag   => p_create_new_curr_working_flag
19286                           ,p_replace_current_working_flag   => p_replace_current_working_flag
19287                           ,p_using_resource_lists_flag      => p_using_resource_lists_flag
19288                           ,p_finplan_trans_tab              => l_finplan_trans_tab
19289                           ,x_finplan_version_id             => x_finplan_version_id
19290                           ,x_return_status                  => x_return_status
19291                           ,x_msg_count                      => x_msg_count
19292                           ,x_msg_data                       => x_msg_data
19293                          );
19294                          --dbms_output.put_line('after call to PA_FIN_PLAN_PUB.CREATE_DRAFT_FINPLAN');
19295 
19296         /*
19297          * Empty the tables after each call to CREATE_DRAFT_FINPLAN
19298          */
19299         G_PM_PRODUCT_CODE_TBL.DELETE;
19300         G_TASK_ID_TBL.DELETE;
19301         G_PM_TASK_REFERENCE_TBL.DELETE;
19302         G_PM_RES_ASGMT_REFERENCE_TBL.DELETE;
19303         G_RESOURCE_ALIAS_TBL.DELETE;
19304         G_CURRENCY_CODE_TBL.DELETE;
19305         G_UNIT_OF_MEASURE_CODE_TBL.DELETE;
19306         G_START_DATE_TBL.DELETE;
19307         G_END_DATE_TBL.DELETE;
19308         G_QUANTITY_TBL.DELETE;
19309         G_RAW_COST_TBL.DELETE;
19310         G_BURDENED_COST_TBL.DELETE;
19311         G_REVENUE_TBL.DELETE;
19312         G_RESOURCE_LIST_MEMBER_ID_TBL.DELETE;
19313 		--Bug 16604257 : CBS RBS Phase 2 API changes
19314 		G_CBS_ELEMENT_ID_TBL.DELETE;
19315 		G_COST_CODE_TBL.DELETE;
19316 			--Bug 16604257
19317         G_ATTRIBUTE_CATEGORY_TBL.DELETE;
19318         G_ATTRIBUTE1_TBL.DELETE;
19319         G_ATTRIBUTE2_TBL.DELETE;
19320         G_ATTRIBUTE3_TBL.DELETE;
19321         G_ATTRIBUTE4_TBL.DELETE;
19322         G_ATTRIBUTE5_TBL.DELETE;
19323         G_ATTRIBUTE6_TBL.DELETE;
19324         G_ATTRIBUTE7_TBL.DELETE;
19325         G_ATTRIBUTE8_TBL.DELETE;
19326         G_ATTRIBUTE9_TBL.DELETE;
19327         G_ATTRIBUTE10_TBL.DELETE;
19328         G_ATTRIBUTE11_TBL.DELETE;
19329         G_ATTRIBUTE12_TBL.DELETE;
19330         G_ATTRIBUTE13_TBL.DELETE;
19331         G_ATTRIBUTE14_TBL.DELETE;
19332         G_ATTRIBUTE15_TBL.DELETE;
19333         G_ATTRIBUTE16_TBL.DELETE;
19334         G_ATTRIBUTE17_TBL.DELETE;
19335         G_ATTRIBUTE18_TBL.DELETE;
19336         G_ATTRIBUTE19_TBL.DELETE;
19337         G_ATTRIBUTE20_TBL.DELETE;
19338         G_ATTRIBUTE21_TBL.DELETE;
19339         G_ATTRIBUTE22_TBL.DELETE;
19340         G_ATTRIBUTE23_TBL.DELETE;
19341         G_ATTRIBUTE24_TBL.DELETE;
19342         G_ATTRIBUTE25_TBL.DELETE;
19343         G_ATTRIBUTE26_TBL.DELETE;
19344         G_ATTRIBUTE27_TBL.DELETE;
19345         G_ATTRIBUTE28_TBL.DELETE;
19346         G_ATTRIBUTE29_TBL.DELETE;
19347         G_ATTRIBUTE30_TBL.DELETE;
19348                          --dbms_output.put_line('leaving EXECUTE_CREATE_DRAFT_FINPLAN');
19349 
19350 END EXECUTE_CREATE_DRAFT_FINPLAN;
19351 
19352 
19353    ----------------------------------------------------------------------------------------
19354    --Name:               update_plannning_element_attr
19355    --Type:               Procedure
19356    --Description:        This procedure can be used to update attributes of existing
19357    --                    Planning Elements
19358    --
19359    --
19360    --Called subprograms: pa_budget_pvt.validate_header_info,pa_budget_pvt.validate_budget_lines
19361    --                    pa_fp_planning_transaction_pub.update_planning_transactions
19362    --
19363    --
19364    --
19365 
19366    PROCEDURE update_plannning_element_attr
19367     (p_api_version_number            IN   NUMBER
19368     ,p_commit                        IN   VARCHAR2                             := FND_API.G_FALSE
19369     ,p_init_msg_list                 IN   VARCHAR2                             := FND_API.G_FALSE
19370     ,p_pm_product_code               IN   VARCHAR2                             := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19371     ,p_pa_project_id                 IN   NUMBER                               := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19372     ,p_pm_project_reference          IN   VARCHAR2                             := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19373     ,p_fin_plan_type_id              IN   pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19374     ,p_fin_plan_type_name            IN   pa_fin_plan_types_tl.name%TYPE           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19375     ,p_budget_version_number         IN   pa_budget_versions.version_number%TYPE   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19376     ,p_version_type                  IN   pa_budget_versions.version_type%TYPE     :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19377     ,p_planning_element_rec_tbl      IN   planning_element_rec_tbl_type
19378     ,p_distribute_amounts            IN   VARCHAR2             DEFAULT 'Y'    -- Bug 9610380
19379     ,x_msg_count                     OUT  NOCOPY NUMBER
19380     ,x_msg_data                      OUT  NOCOPY VARCHAR2
19381     ,x_return_status                 OUT  NOCOPY VARCHAR2)
19382     IS
19383 
19384         CURSOR c_get_plan_class_code(c_fin_plan_type_id pa_budget_versions.fin_plan_type_id%TYPE) is
19385         SELECT plan_class_code
19386         FROM pa_fin_plan_types_b
19387         WHERE fin_plan_type_id=c_fin_plan_type_id;
19388 
19389         l_msg_count                              NUMBER := 0;
19390         l_data                                   VARCHAR2(2000);
19391         l_msg_data                               VARCHAR2(2000);
19392         l_msg_index_out                          NUMBER;
19393         l_return_status                          VARCHAR2(2000);
19394         l_debug_mode                             VARCHAR2(30);
19395         i                                        NUMBER;
19396 
19397         l_module_name                            VARCHAR2(100) :='update_plannning_element_attr';
19398         l_api_name                               CONSTANT    VARCHAR2(100)  := 'update_plannning_element_attr';
19399 
19400         l_project_id                             NUMBER;
19401         l_budget_type_code                       pa_budget_types.budget_type_code%TYPE;
19402         l_fin_plan_type_id                       NUMBER;
19403         l_fin_plan_type_name                     pa_fin_plan_types_tl.name%TYPE;
19404         l_fin_plan_class_code                    varchar2(30);
19405         l_version_type                           pa_budget_versions.version_type%TYPE;
19406         l_budget_version_id                      NUMBER;
19407         l_budget_entry_method_code               pa_budget_entry_methods.budget_entry_method_code%TYPE;
19408         l_resource_list_id                       pa_resource_lists_all_bg.resource_list_id%TYPE;
19409         l_budget_amount_code                     pa_budget_types.budget_amount_code%type;
19410         l_entry_level_code                       pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
19411         l_time_phased_code                       pa_proj_fp_options.cost_time_phased_code%TYPE;
19412         l_multi_curr_flag                        pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
19413         l_categorization_code                    pa_budget_entry_methods.categorization_code%TYPE;
19414         l_project_number                         pa_projects_all.segment1%type;
19415 
19416         l_mfc_cost_type_id_tbl                   SYSTEM.pa_num_tbl_type;
19417         l_etc_method_code_tbl                    SYSTEM.pa_varchar2_30_tbl_type;
19418         l_spread_curve_id_tbl                    SYSTEM.pa_num_tbl_type;
19419 
19420         l_version_info_rec                       pa_fp_gen_amount_utils.fp_cols;
19421 
19422         l_budget_lines_in_tbl                    PA_BUDGET_PUB.G_BUDGET_LINES_IN_TBL%TYPE;
19423         l_budget_lines_out_tbl                   PA_BUDGET_PUB.G_BUDGET_LINES_OUT_TBL%TYPE;
19424         l_planning_start_date_tbl                SYSTEM.pa_date_tbl_type;
19425         l_planning_end_date_tbl                  SYSTEM.pa_date_tbl_type;
19426         l_spread_curve_name_tbl                  SYSTEM.PA_VARCHAR2_240_TBL_TYPE;
19427         l_sp_fixed_date_tbl                      SYSTEM.PA_DATE_TBL_TYPE;
19428         l_etc_method_name_tbl                    SYSTEM.PA_VARCHAR2_80_TBL_TYPE;
19429 
19430         l_uom_tbl                                SYSTEM.pa_varchar2_80_tbl_type;
19431         l_mfc_cost_type_tbl                      SYSTEM.PA_VARCHAR2_15_TBL_TYPE;
19432 
19433         l_resource_assignment_id_tbl             SYSTEM.PA_NUM_TBL_TYPE;
19434 
19435         l_currency_code                          varchar2(25);
19436         l_currency_code_tbl                      SYSTEM.PA_VARCHAR2_15_TBL_TYPE;
19437 
19438         l_assignment_description_tbl             SYSTEM.PA_VARCHAR2_240_TBL_TYPE   ;
19439         l_attribute_category_tbl                 SYSTEM.PA_VARCHAR2_30_TBL_TYPE    ;
19440         l_attribute1_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19441         l_attribute2_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19442         l_attribute3_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19443         l_attribute4_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19444         l_attribute5_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19445         l_attribute6_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19446         l_attribute7_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19447         l_attribute8_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19448         l_attribute9_tbl                         SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19449         l_attribute10_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19450         l_attribute11_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19451         l_attribute12_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19452         l_attribute13_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19453         l_attribute14_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19454         l_attribute15_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19455         l_attribute16_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19456         l_attribute17_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19457         l_attribute18_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19458         l_attribute19_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19459         l_attribute20_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19460         l_attribute21_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19461         l_attribute22_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19462         l_attribute23_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19463         l_attribute24_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19464         l_attribute25_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19465         l_attribute26_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19466         l_attribute27_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19467         l_attribute28_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19468         l_attribute29_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19469         l_attribute30_tbl                        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   ;
19470         --Added for bug 6408139 to pass G_PA_MISS_CHAR
19471         l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
19472 
19473         -- Bug 9610380
19474         l_distribute_amounts   varchar2(1);
19475         l_err_value            varchar2(1);
19476         l_err_field            varchar2(20);
19477 
19478     BEGIN
19479            -- Set the error stack.
19480            pa_debug.set_err_stack('PA_BUDGET_PUB.update_plannning_element_attr');
19481 
19482            -- Get the Debug mode into local variable and set it to 'Y'if its NULL
19483            fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
19484            l_debug_mode := NVL(l_debug_mode, 'Y');
19485 
19486            -- Initialize the return status to success
19487            x_return_status := FND_API.G_RET_STS_SUCCESS;
19488 
19489            IF FND_API.TO_BOOLEAN( p_init_msg_list )
19490            THEN
19491            FND_MSG_PUB.initialize;
19492            END IF;
19493 
19494            --initialize
19495 
19496            l_project_id                                := p_pa_project_id;
19497            /* 9841421 Start */
19498            IF (p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
19499                p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
19500            THEN
19501                l_fin_plan_type_id                      := p_fin_plan_type_id;
19502                l_fin_plan_type_name                    := p_fin_plan_type_name;
19503 
19504            ELSE
19505              IF (p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
19506                  p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
19507              THEN
19508                    IF l_debug_mode = 'Y' THEN
19509                      pa_debug.write_file('Parameter p_fin_plan_type_id = ' || p_fin_plan_type_id, 5);
19510                      pa_debug.write_file('Parameter p_fin_plan_type_name = ' || p_fin_plan_type_name, 5);
19511                    END IF;
19512                    raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19513              END IF;
19514 
19515              IF p_fin_plan_type_id  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
19516                SELECT fin_plan_type_id
19517                      INTO   l_fin_plan_type_id
19518                      FROM   pa_fin_plan_types_vl
19519                      WHERE  name = p_fin_plan_type_name;
19520              ELSE
19521                l_fin_plan_type_id                    := p_fin_plan_type_id;
19522              END IF;
19523 
19524              IF p_fin_plan_type_name  = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19525                SELECT name
19526                      INTO   l_fin_plan_type_name
19527                      FROM   pa_fin_plan_types_vl
19528                      WHERE  fin_plan_type_id = p_fin_plan_type_id;
19529              ELSE
19530                l_fin_plan_type_name                  := p_fin_plan_type_name;
19531              END IF;
19532            END IF;
19533            /* 9841421 End */
19534 
19535            l_version_type                                := p_version_type;
19536 
19537 
19538            l_mfc_cost_type_id_tbl                        := SYSTEM.pa_num_tbl_type();
19539            l_etc_method_code_tbl                        := SYSTEM.pa_varchar2_30_tbl_type();
19540            l_spread_curve_id_tbl                        := SYSTEM.pa_num_tbl_type();
19541 
19542 
19543            l_planning_start_date_tbl                        := SYSTEM.pa_date_tbl_type();
19544            l_planning_end_date_tbl                        := SYSTEM.pa_date_tbl_type();
19545            l_spread_curve_name_tbl                        := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
19546            l_sp_fixed_date_tbl                        := SYSTEM.PA_DATE_TBL_TYPE();
19547            l_etc_method_name_tbl                        := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
19548 
19549            l_uom_tbl                                        := SYSTEM.pa_varchar2_80_tbl_type();
19550            l_mfc_cost_type_tbl                        := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
19551 
19552            l_resource_assignment_id_tbl                := SYSTEM.pa_num_tbl_type();
19553 
19554 
19555            l_currency_code_tbl                      := SYSTEM.pa_varchar2_15_tbl_type();
19556 
19557            l_assignment_description_tbl             := SYSTEM.pa_varchar2_240_tbl_type();
19558            l_attribute_category_tbl                 := SYSTEM.pa_varchar2_30_tbl_type();
19559            l_attribute1_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19560            l_attribute2_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19561            l_attribute3_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19562            l_attribute4_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19563            l_attribute5_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19564            l_attribute6_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19565            l_attribute7_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19566            l_attribute8_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19567            l_attribute9_tbl                         := SYSTEM.pa_varchar2_150_tbl_type();
19568            l_attribute10_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19569            l_attribute11_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19570            l_attribute12_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19571            l_attribute13_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19572            l_attribute14_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19573            l_attribute15_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19574            l_attribute16_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19575            l_attribute17_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19576            l_attribute18_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19577            l_attribute19_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19578            l_attribute20_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19579            l_attribute21_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19580            l_attribute22_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19581            l_attribute23_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19582            l_attribute24_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19583            l_attribute25_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19584            l_attribute26_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19585            l_attribute27_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19586            l_attribute28_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19587            l_attribute29_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19588            l_attribute30_tbl                        := SYSTEM.pa_varchar2_150_tbl_type();
19589 
19590            pa_budget_pvt.G_res_assign_tbl.delete;
19591            l_distribute_amounts                     := p_distribute_amounts;  -- Bug 9610380
19592            --end initialize
19593 
19594            -- Bug 9610380 : Start
19595            IF (l_distribute_amounts is NULL) OR (l_distribute_amounts <> 'N' AND l_distribute_amounts <> 'Y')
19596            THEN
19597              IF l_debug_mode = 'Y' THEN
19598                pa_debug.write_file('Failed because the value of p_distrib_amts is not valid',5);
19599              END IF;
19600              l_err_value := l_distribute_amounts;
19601              l_err_field := 'p_distribute_amounts';
19602              FND_MESSAGE.SET_NAME('PA','PA_PMC_INVALID_LOV_VAL');
19603              FND_MESSAGE.SET_TOKEN('VALUE',l_err_value);
19604              FND_MESSAGE.SET_TOKEN('FIELD',l_err_field);
19605              FND_MSG_PUB.add;
19606              raise PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
19607            END IF;
19608            -- Bug 9610380 : End
19609 
19610            if p_planning_element_rec_tbl.count = 0 then
19611                    IF l_debug_mode = 'Y' THEN
19612                        pa_debug.write_file('No Planning Elements Passed',5);
19613                    END IF;
19614                    pa_debug.reset_err_stack;
19615                    return;
19616            end if;
19617 
19618 
19619 --           DBMS_OUTPUT.PUT_LINE('p_api_version_number '||p_api_version_number);
19620 --           DBMS_OUTPUT.PUT_LINE(' l_api_name '|| l_api_name);
19621 --           DBMS_OUTPUT.PUT_LINE('p_init_msg_list'||p_init_msg_list);
19622 --           DBMS_OUTPUT.PUT_LINE('l_project_id'||l_project_id);
19623 --           DBMS_OUTPUT.PUT_LINE('p_pm_project_reference'||p_pm_project_reference);
19624 --           DBMS_OUTPUT.PUT_LINE('p_pm_product_code'||p_pm_product_code);
19625 --           DBMS_OUTPUT.PUT_LINE('l_fin_plan_type_id'||l_fin_plan_type_id);
19626 --           DBMS_OUTPUT.PUT_LINE('l_fin_plan_type_name'||l_fin_plan_type_name);
19627 --           DBMS_OUTPUT.PUT_LINE('p_budget_version_number'||p_budget_version_number);
19628 --           DBMS_OUTPUT.PUT_LINE('l_version_type'||l_version_type);
19629 
19630 
19631            PA_BUDGET_PVT.validate_header_info(
19632                p_api_version_number          => p_api_version_number
19633               ,p_api_name                    => l_api_name
19634               ,p_init_msg_list               => p_init_msg_list
19635               ,px_pa_project_id              => l_project_id
19636               ,p_pm_project_reference        => p_pm_project_reference
19637               ,p_pm_product_code             => p_pm_product_code
19638               ,px_budget_type_code                  => l_budget_type_code
19639               ,px_fin_plan_type_id           => l_fin_plan_type_id
19640               ,px_fin_plan_type_name         => l_fin_plan_type_name
19641               ,px_version_type               => l_version_type
19642               ,p_budget_version_number       => p_budget_version_number
19643               ,p_change_reason_code          => NULL
19644               ,p_function_name               => 'PA_PM_UPDATE_BUDGET'
19645               ,x_budget_entry_method_code    => l_budget_entry_method_code
19646               ,x_resource_list_id            => l_resource_list_id
19647               ,x_budget_version_id           => l_budget_version_id
19648               ,x_fin_plan_level_code         => l_entry_level_code
19649               ,x_time_phased_code            => l_time_phased_code
19650               ,x_plan_in_multi_curr_flag     => l_multi_curr_flag
19651               ,x_budget_amount_code          => l_budget_amount_code
19652               ,x_categorization_code         => l_categorization_code
19653               ,x_project_number              => l_project_number
19654               /* Plan Amount Entry flags introduced by bug 6408139 */
19655               /*Passing all as G_PA_MISS_CHAR since validations not required*/
19656               ,px_raw_cost_flag         =>   l_pa_miss_char
19657               ,px_burdened_cost_flag    =>   l_pa_miss_char
19658               ,px_revenue_flag          =>   l_pa_miss_char
19659               ,px_cost_qty_flag         =>   l_pa_miss_char
19660               ,px_revenue_qty_flag      =>   l_pa_miss_char
19661               ,px_all_qty_flag          =>   l_pa_miss_char
19662               ,px_bill_rate_flag        =>   l_pa_miss_char
19663               ,px_cost_rate_flag        =>   l_pa_miss_char
19664               ,px_burden_rate_flag      =>   l_pa_miss_char
19665               /* Plan Amount Entry flags introduced by bug 6408139 */
19666               ,x_msg_count                   => l_msg_count
19667               ,x_msg_data                    => l_msg_data
19668               ,x_return_status               => l_return_status );
19669            /*
19670            DBMS_OUTPUT.PUT_LINE('return status is '||l_return_status);
19671            */
19672            IF l_return_status <> FND_API.G_RET_STS_SUCCESS
19673               THEN
19674                  IF l_debug_mode = 'Y' THEN
19675                        pa_debug.write_file('Failed due to error in pa_budget_pvt.validate_header_info',5);
19676                  END IF;
19677                  raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19678            END IF;
19679 
19680            --DBMS_OUTPUT.PUT_LINE('PA_BUDGET_PVT.validate_header_info successful project number is '||l_project_number||' bversion id '||l_budget_version_id);
19681 
19682            l_version_info_rec.x_budget_version_id := l_budget_version_id;
19683 
19684            FOR i IN p_planning_element_rec_tbl.first..p_planning_element_rec_tbl.last LOOP
19685                    -- how we will handle project id
19686                     --make these null when pa.g_miss num and fnd g miss num when null
19687                l_budget_lines_in_tbl(i).pa_task_id                    :=   p_planning_element_rec_tbl(i).pa_task_id;
19688                l_budget_lines_in_tbl(i).pm_task_reference             :=   p_planning_element_rec_tbl(i).pm_task_reference;
19689                l_budget_lines_in_tbl(i).resource_alias                :=   p_planning_element_rec_tbl(i).resource_alias;
19690                l_budget_lines_in_tbl(i).resource_list_member_id       :=   p_planning_element_rec_tbl(i).resource_list_member_id;
19691 
19692 			   l_budget_lines_in_tbl(i).cbs_element_id       :=   p_planning_element_rec_tbl(i).cbs_element_id;
19693 			   l_budget_lines_in_tbl(i).cost_code       :=   p_planning_element_rec_tbl(i).cost_code;
19694 
19695                l_planning_start_date_tbl.extend(1);
19696                l_planning_start_date_tbl(i) :=  p_planning_element_rec_tbl(i).planning_start_date;
19697                if l_planning_start_date_tbl(i) is null then
19698                    l_planning_start_date_tbl(i) :=FND_API.G_MISS_DATE;
19699                elsif l_planning_start_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19700                    l_planning_start_date_tbl(i) := null;
19701                end if;
19702 
19703                l_planning_end_date_tbl.extend(1);
19704                l_planning_end_date_tbl(i)   :=  p_planning_element_rec_tbl(i).planning_end_date;
19705                if l_planning_end_date_tbl(i) is null then
19706                    l_planning_end_date_tbl(i) :=FND_API.G_MISS_DATE;
19707                elsif l_planning_end_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19708                    l_planning_end_date_tbl(i) := null;
19709                end if;
19710 
19711                l_spread_curve_name_tbl.extend(1);
19712                l_spread_curve_name_tbl(i)   :=  p_planning_element_rec_tbl(i).spread_curve;
19713                if l_spread_curve_name_tbl(i)is null then
19714                    l_spread_curve_name_tbl(i) :=FND_API.G_MISS_CHAR;
19715                elsif l_spread_curve_name_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19716                    l_spread_curve_name_tbl(i) := null;
19717                end if;
19718 
19719                l_sp_fixed_date_tbl.extend(1);
19720                l_sp_fixed_date_tbl(i)       :=  p_planning_element_rec_tbl(i).fixed_date;
19721                if l_sp_fixed_date_tbl(i) is null then
19722                    l_sp_fixed_date_tbl(i) :=FND_API.G_MISS_DATE;
19723                elsif l_sp_fixed_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19724                    l_sp_fixed_date_tbl(i) := null;
19725                end if;
19726 
19727                l_etc_method_name_tbl.extend(1);
19728                l_etc_method_name_tbl(i)     :=  p_planning_element_rec_tbl(i).etc_method_name;
19729                if l_etc_method_name_tbl(i) is null then
19730                    l_etc_method_name_tbl(i) :=FND_API.G_MISS_CHAR;
19731                elsif l_etc_method_name_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19732                    l_etc_method_name_tbl(i) := null;
19733                end if;
19734 
19735                l_uom_tbl.extend(1);
19736                l_uom_tbl(i):=null;
19737                l_mfc_cost_type_tbl.extend(1);
19738                l_mfc_cost_type_tbl(i):=null;
19739 
19740            end loop;
19741 
19742            pa_budget_pvt.Validate_Budget_Lines
19743                      (p_calling_context             => 'UPDATE_PLANNING_ELEMENT_ATTR'
19744                      ,p_pa_project_id               => l_project_id
19745                      ,p_budget_type_code            => NULL
19746                      ,p_fin_plan_type_id            => l_fin_plan_type_id
19747                      ,p_version_type                => l_version_type
19748                      ,p_resource_list_id            => l_resource_list_id
19749                      ,p_time_phased_code            => l_time_phased_code
19750                      ,p_budget_entry_method_code    => NULL
19751                      ,p_entry_level_code            => l_entry_level_code
19752                      ,p_allow_qty_flag              => null
19753                      ,p_allow_raw_cost_flag         => null
19754                      ,p_allow_burdened_cost_flag    => null
19755                      ,p_allow_revenue_flag          => null
19756                      ,p_multi_currency_flag         => l_multi_curr_flag
19757                      ,p_project_cost_rate_type      => null
19758                      ,p_project_cost_rate_date_typ  => null
19759                      ,p_project_cost_rate_date      => null
19760                      ,p_project_cost_exchange_rate  => null
19761                      ,p_projfunc_cost_rate_type     => null
19762                      ,p_projfunc_cost_rate_date_typ => null
19763                      ,p_projfunc_cost_rate_date     => null
19764                      ,p_projfunc_cost_exchange_rate => null
19765                      ,p_project_rev_rate_type       => null
19766                      ,p_project_rev_rate_date_typ   => null
19767                      ,p_project_rev_rate_date       => null
19768                      ,p_project_rev_exchange_rate   => null
19769                      ,p_projfunc_rev_rate_type      => null
19770                      ,p_projfunc_rev_rate_date_typ  => null
19771                      ,p_projfunc_rev_rate_date      => null
19772                      ,p_projfunc_rev_exchange_rate  => null
19773                      ,p_planning_start_date_tbl     => l_planning_start_date_tbl
19774                      ,p_planning_end_date_tbl         => l_planning_end_date_tbl
19775                      ,p_spread_curve_name_tbl         => l_spread_curve_name_tbl
19776                      ,p_sp_fixed_date_tbl                 => l_sp_fixed_date_tbl
19777                      ,p_etc_method_name_tbl         => l_etc_method_name_tbl
19778                      ,p_uom_tbl                         => l_uom_tbl
19779                      ,p_mfc_cost_type_tbl                 => l_mfc_cost_type_tbl
19780                      ,p_version_info_rec            => l_version_info_rec
19781                      ,px_budget_lines_in            => l_budget_lines_in_tbl
19782                      ,x_budget_lines_out            => l_budget_lines_out_tbl
19783                      ,x_mfc_cost_type_id_tbl        => l_mfc_cost_type_id_tbl
19784                      ,x_etc_method_code_tbl         => l_etc_method_code_tbl
19785                      ,x_spread_curve_id_tbl         => l_spread_curve_id_tbl
19786                      ,x_msg_count                   => l_msg_count
19787                      ,x_msg_data                    => l_msg_data
19788                      ,x_return_status               => l_return_status);
19789 
19790            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19791 
19792                  IF l_debug_mode = 'Y' THEN
19793                        pa_debug.write_file('Failed due to error in pa_budget_pvt.validate_budget_lines',5);
19794                  END IF;
19795                  raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19796            END IF;
19797 
19798            --DBMS_OUTPUT.PUT_LINE('PA_BUDGET_PVT.validate_budget_lines successful');
19799            /*
19800            for i in l_etc_method_code_tbl.first..l_etc_method_code_tbl.count loop
19801                    DBMS_OUTPUT.PUT_LINE('resource alias '||i||' '||l_budget_lines_in_tbl(i).pm_task_reference);
19802            end loop;
19803            */
19804            l_resource_assignment_id_tbl.extend(l_budget_lines_in_tbl.count);
19805            l_currency_code_tbl.extend(l_budget_lines_in_tbl.count);
19806 
19807            l_assignment_description_tbl.extend(l_budget_lines_in_tbl.count);
19808            l_attribute_category_tbl.extend(l_budget_lines_in_tbl.count);
19809            l_attribute1_tbl.extend(l_budget_lines_in_tbl.count);
19810            l_attribute2_tbl.extend(l_budget_lines_in_tbl.count);
19811            l_attribute3_tbl.extend(l_budget_lines_in_tbl.count);
19812            l_attribute4_tbl.extend(l_budget_lines_in_tbl.count);
19813            l_attribute5_tbl.extend(l_budget_lines_in_tbl.count);
19814            l_attribute6_tbl.extend(l_budget_lines_in_tbl.count);
19815            l_attribute7_tbl.extend(l_budget_lines_in_tbl.count);
19816            l_attribute8_tbl.extend(l_budget_lines_in_tbl.count);
19817            l_attribute9_tbl.extend(l_budget_lines_in_tbl.count);
19818            l_attribute10_tbl.extend(l_budget_lines_in_tbl.count);
19819            l_attribute11_tbl.extend(l_budget_lines_in_tbl.count);
19820            l_attribute12_tbl.extend(l_budget_lines_in_tbl.count);
19821            l_attribute13_tbl.extend(l_budget_lines_in_tbl.count);
19822            l_attribute14_tbl.extend(l_budget_lines_in_tbl.count);
19823            l_attribute15_tbl.extend(l_budget_lines_in_tbl.count);
19824            l_attribute16_tbl.extend(l_budget_lines_in_tbl.count);
19825            l_attribute17_tbl.extend(l_budget_lines_in_tbl.count);
19826            l_attribute18_tbl.extend(l_budget_lines_in_tbl.count);
19827            l_attribute19_tbl.extend(l_budget_lines_in_tbl.count);
19828            l_attribute20_tbl.extend(l_budget_lines_in_tbl.count);
19829            l_attribute21_tbl.extend(l_budget_lines_in_tbl.count);
19830            l_attribute22_tbl.extend(l_budget_lines_in_tbl.count);
19831            l_attribute23_tbl.extend(l_budget_lines_in_tbl.count);
19832            l_attribute24_tbl.extend(l_budget_lines_in_tbl.count);
19833            l_attribute25_tbl.extend(l_budget_lines_in_tbl.count);
19834            l_attribute26_tbl.extend(l_budget_lines_in_tbl.count);
19835            l_attribute27_tbl.extend(l_budget_lines_in_tbl.count);
19836            l_attribute28_tbl.extend(l_budget_lines_in_tbl.count);
19837            l_attribute29_tbl.extend(l_budget_lines_in_tbl.count);
19838            l_attribute30_tbl.extend(l_budget_lines_in_tbl.count);
19839 
19840 
19841            open c_get_plan_class_code(l_fin_plan_type_id);
19842            fetch c_get_plan_class_code into l_fin_plan_class_code;
19843            close c_get_plan_class_code;
19844 
19845            SELECT decode(pf.approved_rev_plan_type_flag,'Y'
19846            ,pa.PROJFUNC_CURRENCY_CODE
19847            ,pa.PROJECT_CURRENCY_CODE)
19848            INTO l_currency_code
19849            FROM pa_projects_all pa,
19850            pa_proj_fp_options pf
19851            WHERE pa.project_id=l_project_id
19852            AND pa.project_id=pf.project_id
19853            AND pf.fin_plan_version_id=l_budget_version_id;
19854 
19855              FOR i IN 1..l_budget_lines_in_tbl.COUNT loop
19856              /*
19857                    begin
19858                     select resource_assignment_id
19859                     into l_resource_assignment_id_tbl(i)
19860                     from pa_resource_assignments
19861                     where  budget_version_id=l_budget_version_id
19862                     and task_id=l_budget_lines_in_tbl(i).pa_task_id
19863                     and resource_list_member_id=l_budget_lines_in_tbl(i).resource_list_member_id
19864                     and project_id=l_project_id
19865                     and PROJECT_ASSIGNMENT_ID =-1;
19866                     exception when no_data_found then
19867                            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
19868                                  p_msg_name       => 'RES_ASSGN_DOESNT_EXIST_AMG',
19869                                  p_token1         => 'PROJECT_OR_TASK_NUMBER',
19870                                  p_value1         => l_budget_lines_in_tbl(i).pm_task_reference,
19871                                  p_token2         => 'RESOURCE',
19872                                  p_value2         => l_budget_lines_in_tbl(i).resource_alias);
19873                    end;*/
19874                    l_resource_assignment_id_tbl(i) := pa_budget_pvt.G_res_assign_tbl(i).resource_assignment_id;
19875                    begin
19876                    select txn_currency_code into l_currency_code_tbl(i)
19877                    from pa_budget_lines
19878                    where resource_assignment_id=l_resource_assignment_id_tbl(i)
19879                    and rownum=1;
19880                    exception when no_data_found then
19881                    l_currency_code_tbl(i):=l_currency_code;
19882                    end;
19883 
19884 
19885                    l_assignment_description_tbl(i) :=  p_planning_element_rec_tbl(i).assignment_description;
19886                    if l_assignment_description_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19887                            l_assignment_description_tbl(i):=null;
19888                    elsif l_assignment_description_tbl(i) = null then
19889                            l_assignment_description_tbl(i):=FND_API.G_MISS_CHAR;
19890                    end if;
19891 
19892                    l_attribute_category_tbl(i) := p_planning_element_rec_tbl(i).attribute_category;
19893                    l_attribute1_tbl(i)         := p_planning_element_rec_tbl(i).attribute1;
19894                    l_attribute2_tbl(i)         := p_planning_element_rec_tbl(i).attribute2;
19895                    l_attribute3_tbl(i)         := p_planning_element_rec_tbl(i).attribute3;
19896                    l_attribute4_tbl(i)         := p_planning_element_rec_tbl(i).attribute4;
19897                    l_attribute5_tbl(i)         := p_planning_element_rec_tbl(i).attribute5;
19898                    l_attribute6_tbl(i)         := p_planning_element_rec_tbl(i).attribute6;
19899                    l_attribute7_tbl(i)         := p_planning_element_rec_tbl(i).attribute7;
19900                    l_attribute8_tbl(i)         := p_planning_element_rec_tbl(i).attribute8;
19901                    l_attribute9_tbl(i)         := p_planning_element_rec_tbl(i).attribute9;
19902                    l_attribute10_tbl(i)        := p_planning_element_rec_tbl(i).attribute10;
19903                    l_attribute11_tbl(i)        := p_planning_element_rec_tbl(i).attribute11;
19904                    l_attribute12_tbl(i)        := p_planning_element_rec_tbl(i).attribute12;
19905                    l_attribute13_tbl(i)        := p_planning_element_rec_tbl(i).attribute13;
19906                    l_attribute14_tbl(i)        := p_planning_element_rec_tbl(i).attribute14;
19907                    l_attribute15_tbl(i)        := p_planning_element_rec_tbl(i).attribute15;
19908                    l_attribute16_tbl(i)        := p_planning_element_rec_tbl(i).attribute16;
19909                    l_attribute17_tbl(i)        := p_planning_element_rec_tbl(i).attribute17;
19910                    l_attribute18_tbl(i)        := p_planning_element_rec_tbl(i).attribute18;
19911                    l_attribute19_tbl(i)        := p_planning_element_rec_tbl(i).attribute19;
19912                    l_attribute20_tbl(i)        := p_planning_element_rec_tbl(i).attribute20;
19913                    l_attribute21_tbl(i)        := p_planning_element_rec_tbl(i).attribute21;
19914                    l_attribute22_tbl(i)        := p_planning_element_rec_tbl(i).attribute22;
19915                    l_attribute23_tbl(i)        := p_planning_element_rec_tbl(i).attribute23;
19916                    l_attribute24_tbl(i)        := p_planning_element_rec_tbl(i).attribute24;
19917                    l_attribute25_tbl(i)        := p_planning_element_rec_tbl(i).attribute25;
19918                    l_attribute26_tbl(i)        := p_planning_element_rec_tbl(i).attribute26;
19919                    l_attribute27_tbl(i)        := p_planning_element_rec_tbl(i).attribute27;
19920                    l_attribute28_tbl(i)        := p_planning_element_rec_tbl(i).attribute28;
19921                    l_attribute29_tbl(i)        := p_planning_element_rec_tbl(i).attribute29;
19922                    l_attribute30_tbl(i)        := p_planning_element_rec_tbl(i).attribute30;
19923 
19924              end loop;
19925 
19926            pa_fp_planning_transaction_pub.update_planning_transactions(
19927             p_context                        => l_fin_plan_class_code
19928            ,p_budget_version_id            => l_budget_version_id
19929            ,p_resource_assignment_id_tbl   => l_resource_assignment_id_tbl
19930            ,p_planning_start_date_tbl      => l_planning_start_date_tbl
19931            ,p_planning_end_date_tbl        => l_planning_end_date_tbl
19932            ,p_mfc_cost_type_id_tbl         => l_mfc_cost_type_id_tbl
19933            ,p_etc_method_code_tbl          => l_etc_method_code_tbl
19934            ,p_spread_curve_id_tbl          => l_spread_curve_id_tbl
19935            ,p_sp_fixed_date_tbl            => l_sp_fixed_date_tbl
19936            ,p_currency_code_tbl            => l_currency_code_tbl
19937            ,p_assignment_description_tbl   => l_assignment_description_tbl
19938            ,p_attribute_category_tbl       => l_attribute_category_tbl
19939            ,p_attribute1_tbl               => l_attribute1_tbl
19940            ,p_attribute2_tbl               => l_attribute2_tbl
19941            ,p_attribute3_tbl               => l_attribute3_tbl
19942            ,p_attribute4_tbl               => l_attribute4_tbl
19943            ,p_attribute5_tbl               => l_attribute5_tbl
19944            ,p_attribute6_tbl               => l_attribute6_tbl
19945            ,p_attribute7_tbl               => l_attribute7_tbl
19946            ,p_attribute8_tbl               => l_attribute8_tbl
19947            ,p_attribute9_tbl               => l_attribute9_tbl
19948            ,p_attribute10_tbl              => l_attribute10_tbl
19949            ,p_attribute11_tbl              => l_attribute11_tbl
19950            ,p_attribute12_tbl              => l_attribute12_tbl
19951            ,p_attribute13_tbl              => l_attribute13_tbl
19952            ,p_attribute14_tbl              => l_attribute14_tbl
19953            ,p_attribute15_tbl              => l_attribute15_tbl
19954            ,p_attribute16_tbl              => l_attribute16_tbl
19955            ,p_attribute17_tbl              => l_attribute17_tbl
19956            ,p_attribute18_tbl              => l_attribute18_tbl
19957            ,p_attribute19_tbl              => l_attribute19_tbl
19958            ,p_attribute20_tbl              => l_attribute20_tbl
19959            ,p_attribute21_tbl              => l_attribute21_tbl
19960            ,p_attribute22_tbl              => l_attribute22_tbl
19961            ,p_attribute23_tbl              => l_attribute23_tbl
19962            ,p_attribute24_tbl              => l_attribute24_tbl
19963            ,p_attribute25_tbl              => l_attribute25_tbl
19964            ,p_attribute26_tbl              => l_attribute26_tbl
19965            ,p_attribute27_tbl              => l_attribute27_tbl
19966            ,p_attribute28_tbl              => l_attribute28_tbl
19967            ,p_attribute29_tbl              => l_attribute29_tbl
19968            ,p_attribute30_tbl              => l_attribute30_tbl
19969            ,p_pji_rollup_required          => 'Y'
19970            ,p_distrib_amts                 => l_distribute_amounts  -- Bug 9610380
19971            ,x_msg_count                    => l_msg_count
19972            ,x_msg_data                     => l_msg_data
19973            ,x_return_status                => l_return_status
19974            );
19975 
19976            IF l_return_status <> FND_API.G_RET_STS_SUCCESS
19977               THEN
19978                  IF l_debug_mode = 'Y' THEN
19979                        pa_debug.write_file('Failed due to error in update_planning_transactions',5);
19980                  END IF;
19981                  raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19982            END IF;
19983 
19984 
19985 
19986                pa_debug.reset_err_stack;
19987 
19988    EXCEPTION
19989        WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
19990 
19991            l_msg_count := FND_MSG_PUB.count_msg;
19992 
19993            IF l_msg_count = 1 THEN
19994                 PA_INTERFACE_UTILS_PUB.get_messages
19995                       ( p_encoded        => FND_API.G_TRUE
19996                        ,p_msg_index      => 1
19997                        ,p_msg_count      => l_msg_count
19998                        ,p_msg_data       => l_msg_data
19999                        ,p_data           => l_data
20000                        ,p_msg_index_out  => l_msg_index_out);
20001                 x_msg_data := l_data;
20002                 x_msg_count := l_msg_count;
20003            ELSE
20004                x_msg_count := l_msg_count;
20005                x_msg_data := l_msg_data;
20006            END IF;
20007            IF l_debug_mode = 'Y' THEN
20008                 pa_debug.g_err_stage:='Invalid Arguments Passed';
20009                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
20010                 pa_debug.write_file('update_plannning_element_attr ' || x_msg_data,5);
20011            END IF;
20012 
20013            x_return_status:= FND_API.G_RET_STS_ERROR;
20014 
20015 
20016                pa_debug.reset_err_stack;
20017 
20018 
20019       WHEN Others THEN
20020 
20021 
20022            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20023            x_msg_count     := 1;
20024            x_msg_data      := SQLERRM;
20025            FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_BUDGET_PUB'
20026                             ,p_procedure_name  => 'update_plannning_element_attr');
20027            IF l_debug_mode = 'Y' THEN
20028                 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
20029                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
20030                 pa_debug.write_file('update_plannning_element_attr '  || pa_debug.G_Err_Stack,5);
20031            END IF;
20032 
20033                pa_debug.reset_err_stack;
20034 
20035     END update_plannning_element_attr;
20036 
20037 
20038 end PA_BUDGET_PUB;